PD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiBDYWxsUGF2ZSBRdW90ZSBGb3JtcwogKiBEZXNjcmlwdGlvbjogUXVvdGUgcmVxdWVzdCBmb3JtLCBsZWFkIENQVCwgZW1haWwgbm90aWZpY2F0aW9ucwogKi8KCi8vIFJlZ2lzdGVyIExlYWQgQ1BUCmFkZF9hY3Rpb24oJ2luaXQnLCBmdW5jdGlvbigpIHsKICAgIHJlZ2lzdGVyX3Bvc3RfdHlwZSgncHZfbGVhZCcsIFsKICAgICAgICAnbGFiZWxzJyA9PiBbJ25hbWUnID0+ICdQYXZpbmcgTGVhZHMnLCAnc2luZ3VsYXJfbmFtZScgPT4gJ0xlYWQnXSwKICAgICAgICAncHVibGljJyA9PiBmYWxzZSwKICAgICAgICAnc2hvd191aScgPT4gdHJ1ZSwKICAgICAgICAnc2hvd19pbl9tZW51JyA9PiB0cnVlLAogICAgICAgICdtZW51X2ljb24nID0+ICdkYXNoaWNvbnMtY2xpcGJvYXJkJywKICAgICAgICAnc3VwcG9ydHMnID0+IFsndGl0bGUnXSwKICAgICAgICAnY2FwYWJpbGl0eV90eXBlJyA9PiAncG9zdCcsCiAgICBdKTsKfSk7CgovLyBTaG9ydGNvZGU6IFtjYWxscGF2ZV9xdW90ZV9mb3JtXQphZGRfc2hvcnRjb2RlKCdjYWxscGF2ZV9xdW90ZV9mb3JtJywgZnVuY3Rpb24oJGF0dHMpIHsKICAgICRhdHRzID0gc2hvcnRjb2RlX2F0dHMoWydoZWFkaW5nJyA9PiAnJywgJ2NvbXBhY3QnID0+ICcnXSwgJGF0dHMpOwoKICAgIC8vIFN1Y2Nlc3Mgc3RhdGUKICAgIGlmIChpc3NldCgkX0dFVFsncHZfc2VudCddKSkgewogICAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4IDA7Ij4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSI+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMjIiIHN0cm9rZT0iIzI3QUU2MCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZD0iTTE0IDI0bDcgNyAxMy0xMyIgc3Ryb2tlPSIjMjdBRTYwIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPgogICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbi10b3A6MTZweDtjb2xvcjp2YXIoLS1wdi1hc3BoYWx0KTsiPkVzdGltYXRlIFJlcXVlc3QgUmVjZWl2ZWQ8L2gzPgogICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IzY2NjsiPldlIHdpbGwgY29udGFjdCB5b3Ugd2l0aGluIDI0IGhvdXJzIHRvIHNjaGVkdWxlIHlvdXIgZnJlZSBvbi1zaXRlIGFzc2Vzc21lbnQuPC9wPgogICAgICAgIDwvZGl2Pic7CiAgICB9CgogICAgb2Jfc3RhcnQoKTsKICAgID8+CiAgICA8c3R5bGUgaWQ9InB2LXF1b3RlLWZvcm0tY3NzIj4KICAgIC5wdi1xdW90ZS13cmFwIHsKICAgICAgICBtYXgtd2lkdGg6IDcyMHB4OyBtYXJnaW46IDQwcHggYXV0bzsgcGFkZGluZzogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wdi13aGl0ZSwgI2ZmZik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcHYtYm9yZGVyLCAjZTVlNWU1KTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1wdi1yYWRpdXMsIDZweCk7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDQ0LDU0LDU3LDAuMDgpOwogICAgfQogICAgLnB2LXF1b3RlLXdyYXAgaDMgewogICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1wdi1mb250LWhlYWQsICdBcmNoaXZvIEJsYWNrJywgc2Fucy1zZXJpZik7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OyBtYXJnaW46IDAgMCA2cHg7IGNvbG9yOiB2YXIoLS1wdi1hc3BoYWx0LCAjMkMzNjM5KTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwogICAgfQogICAgLnB2LXF1b3RlLXdyYXAgLnB2LXF1b3RlLXN1YiB7CiAgICAgICAgY29sb3I6ICM2NjY7IGZvbnQtc2l6ZTogMTVweDsgbWFyZ2luOiAwIDAgMjRweDsKICAgIH0KICAgIC5wdi1xdW90ZS1mb3JtIC5wdi1mb3JtLWdyb3VwIHsgbWFyZ2luLWJvdHRvbTogMThweDsgfQogICAgLnB2LXF1b3RlLWZvcm0gLnB2LWZvcm0tZ3JvdXAgbGFiZWwgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6IHZhcigtLXB2LWFzcGhhbHQsICMyQzM2MzkpOyBtYXJnaW4tYm90dG9tOiA2cHg7CiAgICB9CiAgICAucHYtcXVvdGUtZm9ybSAucHYtZm9ybS1ncm91cCBpbnB1dCwKICAgIC5wdi1xdW90ZS1mb3JtIC5wdi1mb3JtLWdyb3VwIHNlbGVjdCwKICAgIC5wdi1xdW90ZS1mb3JtIC5wdi1mb3JtLWdyb3VwIHRleHRhcmVhIHsKICAgICAgICB3aWR0aDogMTAwJTsgcGFkZGluZzogMTJweCAxNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXB2LWJvcmRlciwgI2U1ZTVlNSk7IGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiAxNnB4OyBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMnMsIGJveC1zaGFkb3cgLjJzOyBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICB9CiAgICAucHYtcXVvdGUtZm9ybSAucHYtZm9ybS1ncm91cCBpbnB1dDpmb2N1cywKICAgIC5wdi1xdW90ZS1mb3JtIC5wdi1mb3JtLWdyb3VwIHNlbGVjdDpmb2N1cywKICAgIC5wdi1xdW90ZS1mb3JtIC5wdi1mb3JtLWdyb3VwIHRleHRhcmVhOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6IHZhcigtLXB2LWdvbGQsICNENEE4NDMpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDIxMiwxNjgsNjcsMC4xOCk7CiAgICB9CiAgICAucHYtcXVvdGUtZm9ybSAucHYtZm9ybS1ncm91cCB0ZXh0YXJlYSB7IG1pbi1oZWlnaHQ6IDExMHB4OyByZXNpemU6IHZlcnRpY2FsOyB9CiAgICAucHYtcXVvdGUtZm9ybSAucHYtZm9ybS1yb3cgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiAxNnB4OwogICAgfQogICAgLnB2LXF1b3RlLWZvcm0gYnV0dG9uW3R5cGU9InN1Ym1pdCJdIHsKICAgICAgICB3aWR0aDogMTAwJTsgbWFyZ2luLXRvcDogOHB4OyBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcHYtZ29sZCwgI0Q0QTg0Myk7IGNvbG9yOiB2YXIoLS1wdi1hc3BoYWx0LCAjMkMzNjM5KTsKICAgICAgICBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDZweDsgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1wdi1mb250LWhlYWQsICdBcmNoaXZvIEJsYWNrJywgc2Fucy1zZXJpZik7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC4wNGVtOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzLCB0cmFuc2Zvcm0gLjFzOwogICAgfQogICAgLnB2LXF1b3RlLWZvcm0gYnV0dG9uW3R5cGU9InN1Ym1pdCJdOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjYzE5ODM4OyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICB9CiAgICBAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICAgICAgICAucHYtcXVvdGUtd3JhcCB7IHBhZGRpbmc6IDI0cHg7IG1hcmdpbjogMjBweCAxMnB4OyB9CiAgICAgICAgLnB2LXF1b3RlLWZvcm0gLnB2LWZvcm0tcm93IHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0KICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJwdi1xdW90ZS13cmFwIj4KICAgIDw/cGhwIGlmICgkYXR0c1snaGVhZGluZyddKTogPz4KICAgICAgICA8aDM+PD89IGVzY19odG1sKCRhdHRzWydoZWFkaW5nJ10pID8+PC9oMz4KICAgICAgICA8cCBjbGFzcz0icHYtcXVvdGUtc3ViIj5GaWxsIG91dCB0aGUgZm9ybSBhbmQgd2Ugd2lsbCByZXNwb25kIHdpdGhpbiAyNCBob3Vycy48L3A+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI8Pz0gZXNjX3VybChhZG1pbl91cmwoJ2FkbWluLXBvc3QucGhwJykpID8+IiBjbGFzcz0icHYtcXVvdGUtZm9ybSI+CiAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3B2X3F1b3RlX25vbmNlJywgJ3B2X25vbmNlJyk7ID8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0icHZfc3VibWl0X3F1b3RlIj4KICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5cHg7Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icHZfd2Vic2l0ZSIgdGFiaW5kZXg9Ii0xIiBhdXRvY29tcGxldGU9Im9mZiI+PC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InB2LWZvcm0tcm93IiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4OyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgPGxhYmVsPk5hbWUgKjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icHZfbmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1mb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgIDxsYWJlbD5QaG9uZSAqPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZWwiIG5hbWU9InB2X3Bob25lIiByZXF1aXJlZD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHYtZm9ybS1ncm91cCI+CiAgICAgICAgICAgIDxsYWJlbD5FbWFpbDwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0icHZfZW1haWwiPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InB2LWZvcm0tcm93IiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4OyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgPGxhYmVsPkNpdHkgLyBBcmVhICo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJwdl9jaXR5IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBhcmVhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5Ub3JvbnRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5WYXVnaGFuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5NaXNzaXNzYXVnYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QnJhbXB0b248L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPk5vcnRoIFlvcms8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlNjYXJib3JvdWdoPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5NYXJraGFtPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5SaWNobW9uZCBIaWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5PdGhlciBHVEE8L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8bGFiZWw+UHJvamVjdCBUeXBlICo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJwdl9wcm9qZWN0IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCB0eXBlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5OZXcgQXNwaGFsdCBEcml2ZXdheTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24+SW50ZXJsb2NraW5nIERyaXZld2F5PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5Ecml2ZXdheSBTZWFsaW5nPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5Ecml2ZXdheSBSZXBhaXI8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlBhcmtpbmcgTG90IFBhdmluZzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24+UGFya2luZyBMb3QgUmVwYWlyPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5QYXRpbyAvIFdhbGt3YXk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkNvbW1lcmNpYWwgUHJvamVjdDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24+T3RoZXI8L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwdi1mb3JtLXJvdyIgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTZweDsiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1mb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgIDxsYWJlbD5BcHByb3hpbWF0ZSBTaXplPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwdl9zaXplIiBwbGFjZWhvbGRlcj0iZS5nLiA0MDAgc3EgZnQsIDItY2FyIGRyaXZld2F5Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgPGxhYmVsPlRpbWVsaW5lPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0icHZfdGltZWxpbmUiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+V2hlbiBkbyB5b3UgbmVlZCB0aGlzPzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QXMgc29vbiBhcyBwb3NzaWJsZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24+V2l0aGluIDIgd2Vla3M8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPldpdGhpbiAxIG1vbnRoPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5XaXRoaW4gMyBtb250aHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkp1c3QgcGxhbm5pbmc8L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwdi1mb3JtLWdyb3VwIj4KICAgICAgICAgICAgPGxhYmVsPlByb2plY3QgRGV0YWlsczwvbGFiZWw+CiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJwdl9kZXRhaWxzIiByb3dzPSIzIiBwbGFjZWhvbGRlcj0iQW55dGhpbmcgZWxzZSB3ZSBzaG91bGQga25vdyDigJQgYWNjZXNzIGlzc3VlcywgZXhpc3Rpbmcgc3VyZmFjZSBjb25kaXRpb24sIGV0Yy4iPjwvdGV4dGFyZWE+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkdldCBZb3VyIEZyZWUgRXN0aW1hdGU8L2J1dHRvbj4KICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6Izk5OTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9wOjEycHg7Ij5ObyBvYmxpZ2F0aW9uLiBXZSByZXNwb25kIHdpdGhpbiAyNCBob3Vycy4gRnVsbHkgaW5zdXJlZC4gNS15ZWFyIGd1YXJhbnRlZS48L3A+CiAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KICAgIDw/cGhwCiAgICByZXR1cm4gb2JfZ2V0X2NsZWFuKCk7Cn0pOwoKLy8gSGFuZGxlIGZvcm0gc3VibWlzc2lvbgphZGRfYWN0aW9uKCdhZG1pbl9wb3N0X3B2X3N1Ym1pdF9xdW90ZScsICdwdl9oYW5kbGVfcXVvdGUnKTsKYWRkX2FjdGlvbignYWRtaW5fcG9zdF9ub3ByaXZfcHZfc3VibWl0X3F1b3RlJywgJ3B2X2hhbmRsZV9xdW90ZScpOwoKZnVuY3Rpb24gcHZfaGFuZGxlX3F1b3RlKCkgewogICAgaWYgKCF3cF92ZXJpZnlfbm9uY2UoJF9QT1NUWydwdl9ub25jZSddID8/ICcnLCAncHZfcXVvdGVfbm9uY2UnKSkgd3BfZGllKCdTZWN1cml0eSBjaGVjayBmYWlsZWQuJyk7CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsncHZfd2Vic2l0ZSddKSkgd3BfZGllKCdTcGFtIGRldGVjdGVkLicpOwoKICAgICRuYW1lICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydwdl9uYW1lJ10gPz8gJycpOwogICAgJHBob25lICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3B2X3Bob25lJ10gPz8gJycpOwogICAgJGVtYWlsICAgID0gc2FuaXRpemVfZW1haWwoJF9QT1NUWydwdl9lbWFpbCddID8/ICcnKTsKICAgICRjaXR5ICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydwdl9jaXR5J10gPz8gJycpOwogICAgJHByb2plY3QgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3B2X3Byb2plY3QnXSA/PyAnJyk7CiAgICAkc2l6ZSAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsncHZfc2l6ZSddID8/ICcnKTsKICAgICR0aW1lbGluZSA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydwdl90aW1lbGluZSddID8/ICcnKTsKICAgICRkZXRhaWxzICA9IHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFsncHZfZGV0YWlscyddID8/ICcnKTsKCiAgICAvLyBTdG9yZSBhcyBDUFQKICAgICRsZWFkX2lkID0gd3BfaW5zZXJ0X3Bvc3QoWwogICAgICAgICdwb3N0X3R5cGUnICAgPT4gJ3B2X2xlYWQnLAogICAgICAgICdwb3N0X3RpdGxlJyAgPT4gIiRuYW1lIOKAlCAkcHJvamVjdCDigJQgJGNpdHkiLAogICAgICAgICdwb3N0X3N0YXR1cycgPT4gJ3ByaXZhdGUnLAogICAgXSk7CgogICAgaWYgKCRsZWFkX2lkKSB7CiAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkbGVhZF9pZCwgJ19wdl9uYW1lJywgJG5hbWUpOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGxlYWRfaWQsICdfcHZfcGhvbmUnLCAkcGhvbmUpOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGxlYWRfaWQsICdfcHZfZW1haWwnLCAkZW1haWwpOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGxlYWRfaWQsICdfcHZfY2l0eScsICRjaXR5KTsKICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCRsZWFkX2lkLCAnX3B2X3Byb2plY3QnLCAkcHJvamVjdCk7CiAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkbGVhZF9pZCwgJ19wdl9zaXplJywgJHNpemUpOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGxlYWRfaWQsICdfcHZfdGltZWxpbmUnLCAkdGltZWxpbmUpOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGxlYWRfaWQsICdfcHZfZGV0YWlscycsICRkZXRhaWxzKTsKICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCRsZWFkX2lkLCAnX3B2X2RhdGUnLCBjdXJyZW50X3RpbWUoJ215c3FsJykpOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGxlYWRfaWQsICdfcHZfaXAnLCAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSA/PyAnJyk7CiAgICB9CgogICAgLy8gRW1haWwgdG8gYWRtaW4KICAgICRhZG1pbl9lbWFpbCA9IGdldF9vcHRpb24oJ2FkbWluX2VtYWlsJyk7CiAgICAkc3ViamVjdCA9ICJbQ2FsbFBhdmUgTGVhZF0gJHByb2plY3QgaW4gJGNpdHkg4oCUICRuYW1lIjsKICAgICRib2R5ID0gIk5ldyBwYXZpbmcgZXN0aW1hdGUgcmVxdWVzdDpcblxuIjsKICAgICRib2R5IC49ICJOYW1lOiAkbmFtZVxuUGhvbmU6ICRwaG9uZVxuRW1haWw6ICRlbWFpbFxuIjsKICAgICRib2R5IC49ICJDaXR5OiAkY2l0eVxuUHJvamVjdDogJHByb2plY3RcbiI7CiAgICAkYm9keSAuPSAiU2l6ZTogJHNpemVcblRpbWVsaW5lOiAkdGltZWxpbmVcblxuIjsKICAgICRib2R5IC49ICJEZXRhaWxzOlxuJGRldGFpbHNcblxuIjsKICAgICRib2R5IC49ICJTdWJtaXR0ZWQ6ICIgLiBjdXJyZW50X3RpbWUoJ1ktbS1kIEg6aScpIC4gIlxuIjsKICAgIHdwX21haWwoJGFkbWluX2VtYWlsLCAkc3ViamVjdCwgJGJvZHkpOwoKICAgIC8vIEF1dG8tcmVzcG9uZCB0byBjdXN0b21lcgogICAgaWYgKCRlbWFpbCkgewogICAgICAgICRjdXN0b21lcl9zdWJqZWN0ID0gIllvdXIgQ2FsbFBhdmUgRXN0aW1hdGUgUmVxdWVzdCI7CiAgICAgICAgJGN1c3RvbWVyX2JvZHkgPSAiSGkgJG5hbWUsXG5cblRoYW5rIHlvdSBmb3IgcmVxdWVzdGluZyBhIGZyZWUgcGF2aW5nIGVzdGltYXRlIGZyb20gQ2FsbFBhdmUuXG5cbiI7CiAgICAgICAgJGN1c3RvbWVyX2JvZHkgLj0gIldlIHJlY2VpdmVkIHlvdXIgcmVxdWVzdCBmb3I6ICRwcm9qZWN0XG5BcmVhOiAkY2l0eVxuXG4iOwogICAgICAgICRjdXN0b21lcl9ib2R5IC49ICJPbmUgb2Ygb3VyIGVzdGltYXRvcnMgd2lsbCBjb250YWN0IHlvdSB3aXRoaW4gMjQgaG91cnMgdG8gc2NoZWR1bGUgYSBmcmVlIG9uLXNpdGUgYXNzZXNzbWVudC5cblxuIjsKICAgICAgICAkY3VzdG9tZXJfYm9keSAuPSAiQ2FsbFBhdmUg4oCUIEJ1aWx0IFJpZ2h0LiBCdWlsdCB0byBMYXN0LlxuY2FsbHBhdmUuY2EiOwogICAgICAgIHdwX21haWwoJGVtYWlsLCAkY3VzdG9tZXJfc3ViamVjdCwgJGN1c3RvbWVyX2JvZHkpOwogICAgfQoKICAgIHdwX3JlZGlyZWN0KGhvbWVfdXJsKCcvZ2V0LXF1b3RlLz9wdl9zZW50PTEnKSk7CiAgICBleGl0Owp9Cg==PD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiBDYWxsUGF2ZSBTaGVsbAogKiBEZXNjcmlwdGlvbjogQ3VzdG9tIGhlYWRlciwgZm9vdGVyLCBtb2JpbGUgbmF2IOKAlCByZXBsYWNlcyBEaXZpIGNocm9tZQogKi8KCi8vIFJlcGxhY2UgRGl2aSdzIGFjY2Vzc2liaWxpdHktYmxvY2tpbmcgdmlld3BvcnQgd2l0aCBhIHBpbmNoLXpvb20tZnJpZW5kbHkgb25lCmFkZF9hY3Rpb24oJ3RlbXBsYXRlX3JlZGlyZWN0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoaXNzZXQoJF9HRVRbJ2V0X2ZiJ10pIHx8IGlzX2FkbWluKCkpIHJldHVybjsKICAgIG9iX3N0YXJ0KGZ1bmN0aW9uKCRidWYpIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKAogICAgICAgICAgICAnIzxtZXRhXHMrbmFtZT1bIlwnXXZpZXdwb3J0WyJcJ11bXj5dKj4jaScsCiAgICAgICAgICAgICc8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHZpZXdwb3J0LWZpdD1jb3ZlciI+JywKICAgICAgICAgICAgJGJ1ZiwKICAgICAgICAgICAgMQogICAgICAgICk7CiAgICB9KTsKfSwgMCk7CgovLyBEb24ndCBicmVhayBWaXN1YWwgQnVpbGRlcgphZGRfYWN0aW9uKCd3cF9oZWFkJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoaXNzZXQoJF9HRVRbJ2V0X2ZiJ10pIHx8IGlzX2FkbWluKCkpIHJldHVybjsKICAgID8+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzIgMzInPjxyZWN0IHdpZHRoPSczMicgaGVpZ2h0PSczMicgcng9JzQnIGZpbGw9JyUyMzJDMzYzOScvPjxwYXRoIGQ9J002IDE0SDI2JyBzdHJva2U9JyUyM0Q0QTg0Mycgc3Ryb2tlLXdpZHRoPSc0JyBzdHJva2UtZGFzaGFycmF5PSc1IDMnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvPjxwYXRoIGQ9J002IDIySDI2JyBzdHJva2U9JyUyMzhCNUUzQycgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnLz48L3N2Zz4iPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxODB4MTgwIiBocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxODAgMTgwJz48cmVjdCB3aWR0aD0nMTgwJyBoZWlnaHQ9JzE4MCcgcng9JzIyJyBmaWxsPSclMjMyQzM2MzknLz48cGF0aCBkPSdNMzYgODBIMTQ0JyBzdHJva2U9JyUyM0Q0QTg0Mycgc3Ryb2tlLXdpZHRoPScxNCcgc3Ryb2tlLWRhc2hhcnJheT0nMjAgMTMnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvPjxwYXRoIGQ9J00zNiAxMTdIMTQ0JyBzdHJva2U9JyUyMzhCNUUzQycgc3Ryb2tlLXdpZHRoPSc1JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLz48L3N2Zz4iPgo8P3BocAp9LCAxKTsKCmFkZF9hY3Rpb24oJ3dwX2JvZHlfb3BlbicsIGZ1bmN0aW9uKCkgewogICAgaWYgKGlzc2V0KCRfR0VUWydldF9mYiddKSB8fCBpc19hZG1pbigpKSByZXR1cm47CiAgICAkaXNfaG9tZSA9IGlzX2Zyb250X3BhZ2UoKTsKICAgID8+CjxzdHlsZSBpZD0icHYtc2hlbGwiPgovKiA9PT0gSEVBREVSID09PSAqLwojcHYtaGVhZGVyIHsKICAgIHBvc2l0aW9uOiBzdGlja3k7IHRvcDogMDsgei1pbmRleDogOTk5OTsKICAgIGJhY2tncm91bmQ6IHZhcigtLXB2LWFzcGhhbHQpOwogICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHZhcigtLXB2LWdvbGQpOwp9Ci5wdi1oZWFkZXItaW5uZXIgewogICAgbWF4LXdpZHRoOiB2YXIoLS1wdi1tYXgtd2lkdGgpOyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMCAyNHB4OwogICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBoZWlnaHQ6IDcycHg7Cn0KLnB2LWxvZ28geyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQoucHYtbG9nby1pY29uIHsgd2lkdGg6IDM2cHg7IGhlaWdodDogMjhweDsgfQoucHYtbG9nby10ZXh0IHsgZm9udC1mYW1pbHk6IHZhcigtLXB2LWZvbnQtaGVhZCk7IGZvbnQtc2l6ZTogMjJweDsgbGV0dGVyLXNwYWNpbmc6IC0wLjVweDsgfQoucHYtbG9nby10ZXh0IHNwYW46Zmlyc3QtY2hpbGQgeyBjb2xvcjogdmFyKC0tcHYtc2FuZCk7IH0KLnB2LWxvZ28tdGV4dCBzcGFuOmxhc3QtY2hpbGQgeyBjb2xvcjogdmFyKC0tcHYtZ29sZCk7IH0KCi8qIE5hdiAqLwoucHYtbmF2IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA0cHg7IH0KLnB2LW5hdiBhIHsKICAgIGNvbG9yOiB2YXIoLS1wdi1zYW5kKTsgZm9udC1mYW1pbHk6IHZhcigtLXB2LWZvbnQtYm9keSk7IGZvbnQtc2l6ZTogMTVweDsgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHBhZGRpbmc6IDhweCAxNHB4OyBib3JkZXItcmFkaXVzOiB2YXIoLS1wdi1yYWRpdXMpOyB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcHYtdHJhbnNpdGlvbik7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoucHYtbmF2IGE6aG92ZXIgeyBjb2xvcjogdmFyKC0tcHYtZ29sZCk7IGJhY2tncm91bmQ6IHJnYmEoMjEyLDE2OCw2NywwLjA4KTsgfQoKLyogRHJvcGRvd24gKi8KLnB2LWRyb3Bkb3duIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9Ci5wdi1kcm9wZG93bi10b2dnbGUgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNHB4OyB9Ci5wdi1kcm9wZG93bi10b2dnbGU6OmFmdGVyIHsgY29udGVudDogJyc7IGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1wdi1zYW5kKTsgbWFyZ2luLXRvcDogMnB4OyB9Ci5wdi1kcm9wZG93bi1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyBtaW4td2lkdGg6IDI0MHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tcHYtd2hpdGUpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1wdi1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1wdi1yYWRpdXMpOwogICAgYm94LXNoYWRvdzogdmFyKC0tcHYtc2hhZG93LWhvdmVyKTsgcGFkZGluZzogOHB4IDA7CiAgICBvcGFjaXR5OiAwOyB2aXNpYmlsaXR5OiBoaWRkZW47IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg4cHgpOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7Cn0KLnB2LWRyb3Bkb3duOmhvdmVyIC5wdi1kcm9wZG93bi1tZW51IHsgb3BhY2l0eTogMTsgdmlzaWJpbGl0eTogdmlzaWJsZTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9Ci5wdi1kcm9wZG93bi1tZW51IGEgewogICAgZGlzcGxheTogYmxvY2s7IHBhZGRpbmc6IDEwcHggMjBweDsgY29sb3I6IHZhcigtLXB2LWluayk7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7Cn0KLnB2LWRyb3Bkb3duLW1lbnUgYTpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXB2LXNhbmQpOyBjb2xvcjogdmFyKC0tcHYtYXNwaGFsdCk7IH0KCi8qIEhlYWRlciBDVEEgKi8KLnB2LWhlYWRlci1jdGEgewogICAgYmFja2dyb3VuZDogdmFyKC0tcHYtZ29sZCk7IGNvbG9yOiB2YXIoLS1wdi1pbmspICFpbXBvcnRhbnQ7CiAgICBmb250LWZhbWlseTogdmFyKC0tcHYtZm9udC1oZWFkKTsgZm9udC1zaXplOiAxM3B4OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgcGFkZGluZzogMTBweCAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IHZhcigtLXB2LXJhZGl1cyk7IGxldHRlci1zcGFjaW5nOiAwLjA0ZW07Cn0KLnB2LWhlYWRlci1jdGE6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1wdi1nb2xkLWhvdmVyKTsgY29sb3I6IHZhcigtLXB2LWluaykgIWltcG9ydGFudDsgfQoKLyogTW9iaWxlIHRvZ2dsZSAqLwoucHYtbWVudS10b2dnbGUgewogICAgZGlzcGxheTogbm9uZTsgYmFja2dyb3VuZDogbm9uZTsgYm9yZGVyOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IHBhZGRpbmc6IDhweDsKfQoucHYtbWVudS10b2dnbGUgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDI0cHg7IGhlaWdodDogMnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1wdi1zYW5kKTsKICAgIG1hcmdpbjogNXB4IDA7IHRyYW5zaXRpb246IGFsbCAwLjJzOwp9CgovKiA9PT0gRk9PVEVSID09PSAqLwojcHYtZm9vdGVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXB2LWluayk7IGNvbG9yOiByZ2JhKDI0NSwyNDIsMjM1LDAuNyk7IHBhZGRpbmc6IDY0cHggMCAwOwp9Ci5wdi1mb290ZXItZ3JpZCB7CiAgICBtYXgtd2lkdGg6IHZhcigtLXB2LW1heC13aWR0aCk7IG1hcmdpbjogMCBhdXRvOyBwYWRkaW5nOiAwIDI0cHg7CiAgICBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDJmciAxZnIgMWZyIDFmcjsgZ2FwOiA0MHB4Owp9Ci5wdi1mb290ZXItY29sIGg0IHsKICAgIGNvbG9yOiB2YXIoLS1wdi1nb2xkKTsgZm9udC1mYW1pbHk6IHZhcigtLXB2LWZvbnQtaGVhZCk7IGZvbnQtc2l6ZTogMTNweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAwLjA4ZW07IG1hcmdpbi1ib3R0b206IDE2cHg7Cn0KLnB2LWZvb3Rlci1jb2wgYSB7CiAgICBkaXNwbGF5OiBibG9jazsgY29sb3I6IHJnYmEoMjQ1LDI0MiwyMzUsMC42KTsgZm9udC1zaXplOiAxNHB4OyBwYWRkaW5nOiA0cHggMDsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tcHYtdHJhbnNpdGlvbik7Cn0KLnB2LWZvb3Rlci1jb2wgYTpob3ZlciB7IGNvbG9yOiB2YXIoLS1wdi1nb2xkKTsgfQoucHYtZm9vdGVyLWNvbCBwIHsgZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMS42OyBtYXJnaW46IDAgMCAxMnB4OyB9Ci5wdi1mb290ZXItYm90dG9tIHsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI0NSwyNDIsMjM1LDAuMSk7IG1hcmdpbi10b3A6IDQ4cHg7CiAgICBwYWRkaW5nOiAyMHB4IDI0cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogcmdiYSgyNDUsMjQyLDIzNSwwLjQpOwp9Ci5wdi1mb290ZXItYm90dG9tIGEgeyBjb2xvcjogcmdiYSgyNDUsMjQyLDIzNSwwLjUpOyB9CgovKiA9PT0gTU9CSUxFIENUQSA9PT0gKi8KLnB2LW1vYmlsZS1jdGEgewogICAgZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGZpeGVkOyBib3R0b206IDA7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB6LWluZGV4OiA5OTk4OwogICAgYmFja2dyb3VuZDogdmFyKC0tcHYtZ29sZCk7IHBhZGRpbmc6IDEycHggMjRweDsgdGV4dC1hbGlnbjogY2VudGVyOwogICAgYm94LXNoYWRvdzogMCAtNHB4IDIwcHggcmdiYSgwLDAsMCwwLjE1KTsKfQoucHYtbW9iaWxlLWN0YSBhIHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1wdi1mb250LWhlYWQpOyBmb250LXNpemU6IDE1cHg7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogdmFyKC0tcHYtaW5rKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBsZXR0ZXItc3BhY2luZzogMC4wNGVtOwp9CgovKiA9PT0gUkVTUE9OU0lWRSA9PT0gKi8KQG1lZGlhIChtYXgtd2lkdGg6IDk2MHB4KSB7CiAgICAucHYtbmF2IHsgZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGZpeGVkOyB0b3A6IDcycHg7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcHYtYXNwaGFsdCk7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IHBhZGRpbmc6IDI0cHg7IGdhcDogMDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgfQogICAgLnB2LW5hdi5hY3RpdmUgeyBkaXNwbGF5OiBmbGV4OyB9CiAgICAucHYtbmF2IGEgeyBwYWRkaW5nOiAxNHB4IDE2cHg7IGZvbnQtc2l6ZTogMTdweDsgd2lkdGg6IDEwMCU7IH0KICAgIC5wdi1tZW51LXRvZ2dsZSB7IGRpc3BsYXk6IGJsb2NrOyB9CiAgICAucHYtZHJvcGRvd24tbWVudSB7CiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsgb3BhY2l0eTogMTsgdmlzaWJpbGl0eTogdmlzaWJsZTsgdHJhbnNmb3JtOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IGJveC1zaGFkb3c6IG5vbmU7IGJvcmRlcjogbm9uZTsKICAgICAgICBkaXNwbGF5OiBub25lOyBwYWRkaW5nOiAwIDAgMCAxNnB4OwogICAgfQogICAgLnB2LWRyb3Bkb3duLm9wZW4gLnB2LWRyb3Bkb3duLW1lbnUgeyBkaXNwbGF5OiBibG9jazsgfQogICAgLnB2LWRyb3Bkb3duLW1lbnUgYSB7IGNvbG9yOiByZ2JhKDI0NSwyNDIsMjM1LDAuNyk7IHBhZGRpbmc6IDEwcHggMTZweDsgfQogICAgLnB2LWRyb3Bkb3duLW1lbnUgYTpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjEyLDE2OCw2NywwLjEpOyBjb2xvcjogdmFyKC0tcHYtZ29sZCk7IH0KICAgIC5wdi1oZWFkZXItY3RhIHsgZGlzcGxheTogYmxvY2s7IHRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDogMTZweDsgfQogICAgLnB2LW1vYmlsZS1jdGEgeyBkaXNwbGF5OiBibG9jazsgfQogICAgLnB2LWZvb3Rlci1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDMycHg7IH0KfQpAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHsKICAgIC5wdi1mb290ZXItZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9Cn0KPC9zdHlsZT4KCjxoZWFkZXIgaWQ9InB2LWhlYWRlciI+CiAgICA8ZGl2IGNsYXNzPSJwdi1oZWFkZXItaW5uZXIiPgogICAgICAgIDxhIGhyZWY9Ii8iIGNsYXNzPSJwdi1sb2dvIj4KICAgICAgICAgICAgPHN2ZyBjbGFzcz0icHYtbG9nby1pY29uIiB2aWV3Qm94PSIwIDAgNDggMzgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD0iNDgiIGhlaWdodD0iMzgiIHJ4PSIzIiBmaWxsPSIjRDRBODQzIi8+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOCAxOUg0MCIgc3Ryb2tlPSIjMkMzNjM5IiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1kYXNoYXJyYXk9IjggNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOCAyOUg0MCIgc3Ryb2tlPSIjMkMzNjM5IiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1sb2dvLXRleHQiPjxzcGFuPkNBTEw8L3NwYW4+PHNwYW4+UEFWRTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2E+CgogICAgICAgIDxuYXYgY2xhc3M9InB2LW5hdiIgaWQ9InB2LW5hdiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9zZXJ2aWNlcy8iIGNsYXNzPSJwdi1kcm9wZG93bi10b2dnbGUiPlNlcnZpY2VzPC9hPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtZHJvcGRvd24tbWVudSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3NlcnZpY2VzL2FzcGhhbHQtZHJpdmV3YXkvIj5Bc3BoYWx0IERyaXZld2F5czwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvaW50ZXJsb2NraW5nLWRyaXZld2F5LyI+SW50ZXJsb2NraW5nIERyaXZld2F5czwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvZHJpdmV3YXktc2VhbGluZy8iPkRyaXZld2F5IFNlYWxpbmc8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3NlcnZpY2VzL2FzcGhhbHQtcmVwYWlyLyI+QXNwaGFsdCBSZXBhaXI8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3NlcnZpY2VzL3BhcmtpbmctbG90LXBhdmluZy8iPlBhcmtpbmcgTG90IFBhdmluZzwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvcGF0aW8tc3RvbmUvIj5QYXRpbyBTdG9uZSAmIFBhdmVyczwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtZHJvcGRvd24iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iL2FyZWFzLyIgY2xhc3M9InB2LWRyb3Bkb3duLXRvZ2dsZSI+QXJlYXM8L2E+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1kcm9wZG93bi1tZW51Ij4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvYXJlYXMvdG9yb250by8iPlRvcm9udG88L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2FyZWFzL3ZhdWdoYW4vIj5WYXVnaGFuPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9hcmVhcy9taXNzaXNzYXVnYS8iPk1pc3Npc3NhdWdhPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9hcmVhcy9icmFtcHRvbi8iPkJyYW1wdG9uPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9hcmVhcy9ub3J0aC15b3JrLyI+Tm9ydGggWW9yazwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvYXJlYXMvc2NhcmJvcm91Z2gvIj5TY2FyYm9yb3VnaDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvYXJlYXMvbWFya2hhbS8iPk1hcmtoYW08L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2FyZWFzL3JpY2htb25kLWhpbGwvIj5SaWNobW9uZCBIaWxsPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YSBocmVmPSIvcmVzaWRlbnRpYWwvIj5SZXNpZGVudGlhbDwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iL2NvbW1lcmNpYWwvIj5Db21tZXJjaWFsPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvcG9ydGZvbGlvLyI+UG9ydGZvbGlvPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvYWJvdXQvIj5BYm91dDwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iL2dldC1xdW90ZS8iIGNsYXNzPSJwdi1oZWFkZXItY3RhIj5GcmVlIEVzdGltYXRlPC9hPgogICAgICAgIDwvbmF2PgoKICAgICAgICA8YnV0dG9uIGNsYXNzPSJwdi1tZW51LXRvZ2dsZSIgaWQ9InB2LW1lbnUtdG9nZ2xlIiBhcmlhLWxhYmVsPSJNZW51Ij4KICAgICAgICAgICAgPHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj4KPC9oZWFkZXI+Cgo8c2NyaXB0PgooZnVuY3Rpb24oKXsKICAgIHZhciB0b2dnbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHYtbWVudS10b2dnbGUnKTsKICAgIHZhciBuYXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHYtbmF2Jyk7CiAgICBpZih0b2dnbGUgJiYgbmF2KSB7CiAgICAgICAgdG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgbmF2LmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpOyB9KTsKICAgICAgICBuYXYucXVlcnlTZWxlY3RvckFsbCgnLnB2LWRyb3Bkb3duLXRvZ2dsZScpLmZvckVhY2goZnVuY3Rpb24odCl7CiAgICAgICAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5pbm5lcldpZHRoIDw9IDk2MCkgewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnb3BlbicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KfSkoKTsKPC9zY3JpcHQ+Cjw/cGhwCn0pOwoKLy8gRm9vdGVyCmFkZF9hY3Rpb24oJ3dwX2Zvb3RlcicsIGZ1bmN0aW9uKCkgewogICAgaWYgKGlzc2V0KCRfR0VUWydldF9mYiddKSB8fCBpc19hZG1pbigpKSByZXR1cm47CiAgICAkeWVhciA9IGRhdGUoJ1knKTsKICAgID8+Cjxmb290ZXIgaWQ9InB2LWZvb3RlciI+CiAgICA8ZGl2IGNsYXNzPSJwdi1mb290ZXItZ3JpZCI+CiAgICAgICAgPGRpdiBjbGFzcz0icHYtZm9vdGVyLWNvbCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWxvZ28iIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0OCAzOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD0iNDgiIGhlaWdodD0iMzgiIHJ4PSIzIiBmaWxsPSIjRDRBODQzIi8+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTggMTlINDAiIHN0cm9rZT0iIzJDMzYzOSIgc3Ryb2tlLXdpZHRoPSI1IiBzdHJva2UtZGFzaGFycmF5PSI4IDUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik04IDI5SDQwIiBzdHJva2U9IiMyQzM2MzkiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtbG9nby10ZXh0Ij48c3Bhbj5DQUxMPC9zcGFuPjxzcGFuPlBBVkU8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cD5Qcm9mZXNzaW9uYWwgZHJpdmV3YXkgcGF2aW5nIGFuZCBhc3BoYWx0IHNlcnZpY2VzIGFjcm9zcyB0aGUgR3JlYXRlciBUb3JvbnRvIEFyZWEuIEZ1bGx5IGluc3VyZWQgd2l0aCBhIDUteWVhciB3b3JrbWFuc2hpcCBndWFyYW50ZWUuPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InB2LWZvb3Rlci1jb2wiPgogICAgICAgICAgICA8aDQ+U2VydmljZXM8L2g0PgogICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvYXNwaGFsdC1kcml2ZXdheS8iPkFzcGhhbHQgRHJpdmV3YXlzPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvaW50ZXJsb2NraW5nLWRyaXZld2F5LyI+SW50ZXJsb2NraW5nPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvZHJpdmV3YXktc2VhbGluZy8iPkRyaXZld2F5IFNlYWxpbmc8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9zZXJ2aWNlcy9hc3BoYWx0LXJlcGFpci8iPkFzcGhhbHQgUmVwYWlyPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvcGFya2luZy1sb3QtcGF2aW5nLyI+UGFya2luZyBMb3RzPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvc2VydmljZXMvcGF0aW8tc3RvbmUvIj5QYXRpbyBTdG9uZTwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwdi1mb290ZXItY29sIj4KICAgICAgICAgICAgPGg0PkFyZWFzPC9oND4KICAgICAgICAgICAgPGEgaHJlZj0iL2FyZWFzL3Rvcm9udG8vIj5Ub3JvbnRvPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvYXJlYXMvdmF1Z2hhbi8iPlZhdWdoYW48L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9hcmVhcy9taXNzaXNzYXVnYS8iPk1pc3Npc3NhdWdhPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvYXJlYXMvYnJhbXB0b24vIj5CcmFtcHRvbjwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iL2FyZWFzL25vcnRoLXlvcmsvIj5Ob3J0aCBZb3JrPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvYXJlYXMvc2NhcmJvcm91Z2gvIj5TY2FyYm9yb3VnaDwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iL2FyZWFzL21hcmtoYW0vIj5NYXJraGFtPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvYXJlYXMvcmljaG1vbmQtaGlsbC8iPlJpY2htb25kIEhpbGw8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHYtZm9vdGVyLWNvbCI+CiAgICAgICAgICAgIDxoND5Db21wYW55PC9oND4KICAgICAgICAgICAgPGEgaHJlZj0iL2Fib3V0LyI+QWJvdXQgVXM8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9wb3J0Zm9saW8vIj5PdXIgV29yazwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iL2Jsb2cvIj5CbG9nPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvY29udGFjdC8iPkNvbnRhY3Q8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9nZXQtcXVvdGUvIj5HZXQgYSBGcmVlIEVzdGltYXRlPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvcHJpdmFjeS1wb2xpY3kvIj5Qcml2YWN5IFBvbGljeTwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHYtZm9vdGVyLWJvdHRvbSI+CiAgICAgICAgJmNvcHk7IDw/cGhwIGVjaG8gJHllYXI7ID8+IENhbGxQYXZlLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBTZXJ2aW5nIHRoZSBHcmVhdGVyIFRvcm9udG8gQXJlYS4KICAgIDwvZGl2Pgo8L2Zvb3Rlcj4KCjxkaXYgY2xhc3M9InB2LW1vYmlsZS1jdGEiPgogICAgPGEgaHJlZj0iL2dldC1xdW90ZS8iPkdldCBZb3VyIEZyZWUgRXN0aW1hdGU8L2E+CjwvZGl2Pgo8P3BocAp9KTsKPD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiBDYWxsUGF2ZSBTdGF0aWMgUGFnZXMKICogRGVzY3JpcHRpb246IEN1c3RvbSB0ZW1wbGF0ZXMgZm9yIC9yZXNpZGVudGlhbC8sIC9jb21tZXJjaWFsLywgL2Fib3V0LywgL2NvbnRhY3QvLCAvc2VydmljZXMvLCAvYXJlYXMvCiAqLwoKYWRkX2ZpbHRlcigndGVtcGxhdGVfaW5jbHVkZScsIGZ1bmN0aW9uKCR0ZW1wbGF0ZSkgewogICAgaWYgKGlzc2V0KCRfR0VUWydldF9mYiddKSB8fCBpc19hZG1pbigpKSByZXR1cm4gJHRlbXBsYXRlOwogICAgaWYgKCFpc19zaW5ndWxhcigncGFnZScpKSByZXR1cm4gJHRlbXBsYXRlOwoKICAgICRzbHVnID0gZ2V0X3Bvc3RfZmllbGQoJ3Bvc3RfbmFtZScsIGdldF90aGVfSUQoKSk7CiAgICAkc3RhdGljX3BhZ2VzID0gWwogICAgICAgICdyZXNpZGVudGlhbCcgPT4gJ3B2X3BhZ2VfcmVzaWRlbnRpYWwnLAogICAgICAgICdjb21tZXJjaWFsJyAgPT4gJ3B2X3BhZ2VfY29tbWVyY2lhbCcsCiAgICAgICAgJ2Fib3V0JyAgICAgICA9PiAncHZfcGFnZV9hYm91dCcsCiAgICAgICAgJ2NvbnRhY3QnICAgICA9PiAncHZfcGFnZV9jb250YWN0JywKICAgICAgICAnc2VydmljZXMnICAgID0+ICdwdl9wYWdlX3NlcnZpY2VzX2h1YicsCiAgICAgICAgJ2FyZWFzJyAgICAgICA9PiAncHZfcGFnZV9hcmVhc19odWInLAogICAgICAgICdnZXQtcXVvdGUnICAgPT4gJ3B2X3BhZ2VfZ2V0X3F1b3RlJywKICAgIF07CgogICAgaWYgKCFpc3NldCgkc3RhdGljX3BhZ2VzWyRzbHVnXSkpIHJldHVybiAkdGVtcGxhdGU7CgogICAgZ2V0X2hlYWRlcigpOwogICAgY2FsbF91c2VyX2Z1bmMoJHN0YXRpY19wYWdlc1skc2x1Z10pOwogICAgZ2V0X2Zvb3RlcigpOwogICAgcmV0dXJuICcnOwp9LCA5OSk7CgovKiDilIDilIAgU2hhcmVkIGlubmVyIHBhZ2UgaGVybyDilIDilIAgKi8KZnVuY3Rpb24gcHZfaW5uZXJfaGVybygkdGl0bGUsICRzdWJ0aXRsZSwgJGJyZWFkY3J1bWJfbGFiZWwgPSAnJykgewogICAgJGJjID0gJGJyZWFkY3J1bWJfbGFiZWwgPzogJHRpdGxlOwogICAgPz4KICAgIDxzZWN0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLXB2LWFzcGhhbHQpOyBwYWRkaW5nOjU2cHggMCA0OHB4OyBib3JkZXItYm90dG9tOjRweCBzb2xpZCB2YXIoLS1wdi1nb2xkKTsiPgogICAgICAgIDxkaXYgY2xhc3M9InB2LWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWJyZWFkY3J1bWJzIj48YSBocmVmPSIvIj5Ib21lPC9hPiA8c3Bhbj7igLo8L3NwYW4+IDw/PSBlc2NfaHRtbCgkYmMpID8+PC9kaXY+CiAgICAgICAgICAgIDxoMSBzdHlsZT0iY29sb3I6dmFyKC0tcHYtc2FuZCk7IGZvbnQtc2l6ZTozOHB4OyBtYXJnaW4tYm90dG9tOjEwcHg7Ij48Pz0gZXNjX2h0bWwoJHRpdGxlKSA/PjwvaDE+CiAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjpyZ2JhKDI0NSwyNDIsMjM1LDAuNyk7IGZvbnQtc2l6ZToxOHB4OyBtYXgtd2lkdGg6NjQwcHg7Ij48Pz0gZXNjX2h0bWwoJHN1YnRpdGxlKSA/PjwvcD4KICAgICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KICAgIDw/cGhwCn0KCmZ1bmN0aW9uIHB2X2JvdHRvbV9jdGEoJGhlYWRpbmcgPSAnUmVhZHkgdG8gR2V0IFN0YXJ0ZWQ/JywgJHRleHQgPSAnR2V0IGEgZnJlZSBvbi1zaXRlIGVzdGltYXRlLiBObyBvYmxpZ2F0aW9uLCBubyBwcmVzc3VyZSDigJQganVzdCBhbiBob25lc3QgYXNzZXNzbWVudCBhbmQgYSBkZXRhaWxlZCBxdW90ZS4nKSB7CiAgICA/PgogICAgPHNlY3Rpb24gc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tcHYtaW5rKTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6NDhweCAyNHB4OyI+CiAgICAgICAgPGgyIHN0eWxlPSJjb2xvcjp2YXIoLS1wdi1nb2xkKTsgbWFyZ2luLWJvdHRvbToxMnB4OyBmb250LXNpemU6MjhweDsiPjw/PSBlc2NfaHRtbCgkaGVhZGluZykgPz48L2gyPgogICAgICAgIDxwIHN0eWxlPSJjb2xvcjpyZ2JhKDI0NSwyNDIsMjM1LDAuNyk7IGZvbnQtc2l6ZToxN3B4OyBtYXgtd2lkdGg6NTAwcHg7IG1hcmdpbjowIGF1dG8gMjRweDsiPjw/PSBlc2NfaHRtbCgkdGV4dCkgPz48L3A+CiAgICAgICAgPGEgaHJlZj0iL2dldC1xdW90ZS8iIGNsYXNzPSJwdi1idG4gcHYtYnRuLS1wcmltYXJ5Ij5SZXF1ZXN0IFlvdXIgRnJlZSBFc3RpbWF0ZTwvYT4KICAgIDwvc2VjdGlvbj4KICAgIDw/cGhwCn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBSRVNJREVOVElBTAogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KZnVuY3Rpb24gcHZfcGFnZV9yZXNpZGVudGlhbCgpIHsKICAgIHB2X2lubmVyX2hlcm8oJ1Jlc2lkZW50aWFsIERyaXZld2F5IFBhdmluZycsICdOZXcgZHJpdmV3YXlzLCByZXBhaXJzLCBhbmQgc2VhbGNvYXRpbmcgZm9yIEdUQSBob21lb3duZXJzLiBBc3BoYWx0LCBpbnRlcmxvY2tpbmcgc3RvbmUsIGFuZCBuYXR1cmFsIHN0b25lIG9wdGlvbnMuJyk7CiAgICA/Pgo8c2VjdGlvbiBjbGFzcz0icHYtc2VjdGlvbiBwdi1zZWN0aW9uLS1zYW5kIj4KICAgIDxkaXYgY2xhc3M9InB2LWNvbnRhaW5lciIgc3R5bGU9Im1heC13aWR0aDp2YXIoLS1wdi1jb250ZW50LXdpZHRoKTsiPgoKPGgyPllvdXIgRHJpdmV3YXksIERvbmUgUmlnaHQ8L2gyPgo8cD5Zb3VyIGRyaXZld2F5IGlzIG9uZSBvZiB0aGUgZmlyc3QgdGhpbmdzIHBlb3BsZSBub3RpY2UgYWJvdXQgeW91ciBob21lIOKAlCBhbmQgb25lIG9mIHRoZSBsYXN0IHRoaW5ncyBtb3N0IGhvbWVvd25lcnMgdGhpbmsgYWJvdXQgdW50aWwgaXQgc3RhcnRzIGNyYWNraW5nLiBXZSBidWlsZCBhbmQgcmVwYWlyIHJlc2lkZW50aWFsIGRyaXZld2F5cyBhY3Jvc3MgdGhlIEdUQSwgYW5kIHdlIHRyZWF0IGV2ZXJ5IHByb2plY3QgbGlrZSBpdCdzIG91ciBvd24gcHJvcGVydHkuPC9wPgo8cD5XaGV0aGVyIHlvdSdyZSByZXBsYWNpbmcgYSB0aXJlZCAyMC15ZWFyLW9sZCBhc3BoYWx0IHBhZCwgdXBncmFkaW5nIHRvIGludGVybG9ja2luZyBzdG9uZSwgb3Igc2VhbGluZyBhIGRyaXZld2F5IHRoYXQncyBzdGFydGluZyB0byBzaG93IGl0cyBhZ2UsIHdlIGhhbmRsZSBpdCBlbmQtdG8tZW5kOiBzaXRlIGFzc2Vzc21lbnQsIGJhc2UgcHJlcGFyYXRpb24sIG1hdGVyaWFsIHNlbGVjdGlvbiwgaW5zdGFsbGF0aW9uLCBhbmQgY2xlYW51cC4gWW91IGdldCBhIHdyaXR0ZW4gcXVvdGUgYmVmb3JlIHdlIHN0YXJ0IGFuZCBhIDUteWVhciB3b3JrbWFuc2hpcCBndWFyYW50ZWUgd2hlbiB3ZSdyZSBkb25lLjwvcD4KCjxoMj5XaGF0IFdlIE9mZmVyIEhvbWVvd25lcnM8L2gyPgoKPGRpdiBjbGFzcz0icHYtZ3JpZCBwdi1ncmlkLTIiIHN0eWxlPSJtYXJnaW46MjRweCAwIDQwcHg7Ij4KICAgIDxkaXYgY2xhc3M9InB2LWNhcmQiPgogICAgICAgIDxoMz48YSBocmVmPSIvc2VydmljZXMvYXNwaGFsdC1kcml2ZXdheS8iPkFzcGhhbHQgRHJpdmV3YXlzPC9hPjwvaDM+CiAgICAgICAgPHA+VGhlIHByYWN0aWNhbCBjaG9pY2UgZm9yIE9udGFyaW8uIEhhbmRsZXMgZnJlZXplLXRoYXcsIHNub3cgcGxvd2luZywgYW5kIGhlYXZ5IHVzZS4gJDQtOC9zcSBmdCBpbnN0YWxsZWQgd2l0aCBwcm9wZXIgYmFzZSBwcmVwYXJhdGlvbi48L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InB2LWNhcmQiPgogICAgICAgIDxoMz48YSBocmVmPSIvc2VydmljZXMvaW50ZXJsb2NraW5nLWRyaXZld2F5LyI+SW50ZXJsb2NraW5nIFN0b25lPC9hPjwvaDM+CiAgICAgICAgPHA+VGhlIHByZW1pdW0gb3B0aW9uLiBVbmxpbWl0ZWQgZGVzaWduIHBvc3NpYmlsaXRpZXMsIG5vIHNlYWxjb2F0aW5nIG5lZWRlZCwgaW5kaXZpZHVhbCBwYXZlcnMgcmVwbGFjZWFibGUuICQxNS0zMC9zcSBmdCBpbnN0YWxsZWQuPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwdi1jYXJkIj4KICAgICAgICA8aDM+PGEgaHJlZj0iL3NlcnZpY2VzL2RyaXZld2F5LXNlYWxpbmcvIj5Ecml2ZXdheSBTZWFsaW5nPC9hPjwvaDM+CiAgICAgICAgPHA+UHJvdGVjdCB3aGF0IHlvdSBoYXZlLiBQcm9mZXNzaW9uYWwgc2VhbGNvYXRpbmcgZXh0ZW5kcyBkcml2ZXdheSBsaWZlIGJ5IDUtOCB5ZWFycy4gJDE1MC0zNTAgZm9yIGEgc3RhbmRhcmQgZHJpdmV3YXkuPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwdi1jYXJkIj4KICAgICAgICA8aDM+PGEgaHJlZj0iL3NlcnZpY2VzL2FzcGhhbHQtcmVwYWlyLyI+RHJpdmV3YXkgUmVwYWlyPC9hPjwvaDM+CiAgICAgICAgPHA+Q3JhY2tzLCBwb3Rob2xlcywgc2V0dGxpbmcuIEZpeCB0aGUgZGFtYWdlIGJlZm9yZSBpdCBzcHJlYWRzLiBQYXRjaGluZywgaW5mcmFyZWQgcmVwYWlyLCBhbmQgcmVzdXJmYWNpbmcgb3B0aW9ucy48L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InB2LWNhcmQiPgogICAgICAgIDxoMz48YSBocmVmPSIvc2VydmljZXMvcGF0aW8tc3RvbmUvIj5QYXRpb3MgJiBXYWxrd2F5czwvYT48L2gzPgogICAgICAgIDxwPk5hdHVyYWwgc3RvbmUsIGNvbmNyZXRlIHBhdmVycywgYW5kIGZsYWdzdG9uZSBmb3IgcGF0aW9zLCBmcm9udCB3YWxrd2F5cywgcG9vbCBkZWNrcywgYW5kIG91dGRvb3IgbGl2aW5nIHNwYWNlcy48L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InB2LWNhcmQiPgogICAgICAgIDxoMz5Gcm9udCBXYWxrd2F5cyAmIFN0ZXBzPC9oMz4KICAgICAgICA8cD5Db21wbGV0ZSB0aGUgbG9vay4gV2UgaW5zdGFsbCB3YWxrd2F5cywgZW50cnkgbGFuZGluZ3MsIGFuZCBzdGVwcyB0aGF0IG1hdGNoIHlvdXIgZHJpdmV3YXkgbWF0ZXJpYWwgYW5kIGRlc2lnbi48L3A+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8aDI+SG93IHRoZSBQcm9jZXNzIFdvcmtzPC9oMj4KPG9sIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MjBweDsgZm9udC1zaXplOjE3cHg7IGxpbmUtaGVpZ2h0OjEuODsgY29sb3I6IzMzMzsiPgogICAgPGxpPjxzdHJvbmc+WW91IHJlcXVlc3QgYW4gZXN0aW1hdGU8L3N0cm9uZz4g4oCUIGZpbGwgb3V0IG91ciA8YSBocmVmPSIvZ2V0LXF1b3RlLyI+cXVvdGUgZm9ybTwvYT4gb3IgY2FsbC4gVGVsbCB1cyBhYm91dCB5b3VyIHByb2plY3QuPC9saT4KICAgIDxsaT48c3Ryb25nPldlIHZpc2l0IHlvdXIgcHJvcGVydHk8L3N0cm9uZz4g4oCUIG1lYXN1cmUgdGhlIGFyZWEsIGFzc2VzcyBiYXNlIGNvbmRpdGlvbnMsIGNoZWNrIGRyYWluYWdlLCBhbmQgZGlzY3VzcyBtYXRlcmlhbHMuPC9saT4KICAgIDxsaT48c3Ryb25nPllvdSByZWNlaXZlIGEgd3JpdHRlbiBxdW90ZTwvc3Ryb25nPiDigJQgbWF0ZXJpYWxzLCB0aW1lbGluZSwgd2FycmFudHkgZGV0YWlscywgYW5kIHRvdGFsIGNvc3QuIE5vIGhpZGRlbiBmZWVzLjwvbGk+CiAgICA8bGk+PHN0cm9uZz5XZSBzY2hlZHVsZSB0aGUgd29yazwvc3Ryb25nPiDigJQgdHlwaWNhbGx5IDEtMyB3ZWVrcyBvdXQgZHVyaW5nIHBlYWsgc2Vhc29uLiBXZSBjb25maXJtIHRoZSBkYXRlIGFuZCBwcmVwIHJlcXVpcmVtZW50cy48L2xpPgogICAgPGxpPjxzdHJvbmc+T3VyIGNyZXcgYnVpbGRzIGl0PC9zdHJvbmc+IOKAlCBleGNhdmF0aW9uLCBiYXNlLCBwYXZpbmcsIGNsZWFudXAuIE1vc3QgcmVzaWRlbnRpYWwgZHJpdmV3YXlzIGFyZSBkb25lIGluIDEtMiBkYXlzLjwvbGk+CiAgICA8bGk+PHN0cm9uZz5GaW5hbCB3YWxrdGhyb3VnaDwvc3Ryb25nPiDigJQgd2Ugd2FsayB0aGUgcHJvamVjdCB3aXRoIHlvdSwgY29uZmlybSBldmVyeXRoaW5nIG1lZXRzIHNwZWMsIGFuZCBoYW5kIG92ZXIgY2FyZSBpbnN0cnVjdGlvbnMuPC9saT4KPC9vbD4KCjxoMj5XaHkgSG9tZW93bmVycyBDaG9vc2UgVXM8L2gyPgo8dWwgc3R5bGU9ImZvbnQtc2l6ZToxN3B4OyBsaW5lLWhlaWdodDoxLjg7IGNvbG9yOiMzMzM7Ij4KICAgIDxsaT48c3Ryb25nPjUteWVhciB3b3JrbWFuc2hpcCBndWFyYW50ZWU8L3N0cm9uZz4gb24gZXZlcnkgcmVzaWRlbnRpYWwgcHJvamVjdDwvbGk+CiAgICA8bGk+PHN0cm9uZz5GdWxseSBpbnN1cmVkPC9zdHJvbmc+IOKAlCBsaWFiaWxpdHkgYW5kIFdTSUIgY292ZXJhZ2U8L2xpPgogICAgPGxpPjxzdHJvbmc+V3JpdHRlbiBxdW90ZXM8L3N0cm9uZz4gd2l0aCBubyBzdXJwcmlzZSBjb3N0czwvbGk+CiAgICA8bGk+PHN0cm9uZz5PbnRhcmlvLXNwZWNpZmljIGV4cGVydGlzZTwvc3Ryb25nPiDigJQgd2UgYnVpbGQgZm9yIGZyZWV6ZS10aGF3LCBjbGF5IHNvaWwsIGFuZCBzYWx0IGV4cG9zdXJlPC9saT4KICAgIDxsaT48c3Ryb25nPkNsZWFuIGpvYiBzaXRlczwvc3Ryb25nPiDigJQgd2UgZG9uJ3QgbGVhdmUgYSBtZXNzPC9saT4KPC91bD4KCjxoMj5BcmVhcyBXZSBTZXJ2ZTwvaDI+CjxwPldlIHBhdmUgcmVzaWRlbnRpYWwgZHJpdmV3YXlzIGFjcm9zcyB0aGUgR3JlYXRlciBUb3JvbnRvIEFyZWE6IDxhIGhyZWY9Ii9hcmVhcy90b3JvbnRvLyI+VG9yb250bzwvYT4sIDxhIGhyZWY9Ii9hcmVhcy92YXVnaGFuLyI+VmF1Z2hhbjwvYT4sIDxhIGhyZWY9Ii9hcmVhcy9taXNzaXNzYXVnYS8iPk1pc3Npc3NhdWdhPC9hPiwgPGEgaHJlZj0iL2FyZWFzL2JyYW1wdG9uLyI+QnJhbXB0b248L2E+LCA8YSBocmVmPSIvYXJlYXMvbm9ydGgteW9yay8iPk5vcnRoIFlvcms8L2E+LCA8YSBocmVmPSIvYXJlYXMvc2NhcmJvcm91Z2gvIj5TY2FyYm9yb3VnaDwvYT4sIDxhIGhyZWY9Ii9hcmVhcy9tYXJraGFtLyI+TWFya2hhbTwvYT4sIGFuZCA8YSBocmVmPSIvYXJlYXMvcmljaG1vbmQtaGlsbC8iPlJpY2htb25kIEhpbGw8L2E+LjwvcD4KCiAgICA8L2Rpdj4KPC9zZWN0aW9uPgo8P3BocCBwdl9ib3R0b21fY3RhKCdHZXQgWW91ciBGcmVlIERyaXZld2F5IEVzdGltYXRlJywgJ1RlbGwgdXMgYWJvdXQgeW91ciBwcm9qZWN0LiBXZVwnbGwgdmlzaXQgeW91ciBwcm9wZXJ0eSBhbmQgcHJvdmlkZSBhIGRldGFpbGVkLCBuby1vYmxpZ2F0aW9uIHF1b3RlLicpOwp9CgovKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgQ09NTUVSQ0lBTAogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KZnVuY3Rpb24gcHZfcGFnZV9jb21tZXJjaWFsKCkgewogICAgcHZfaW5uZXJfaGVybygnQ29tbWVyY2lhbCBQYXZpbmcgU2VydmljZXMnLCAnUGFya2luZyBsb3RzLCBwbGF6YXMsIGxhbmV3YXlzLCBhbmQgaW5kdXN0cmlhbCBzdXJmYWNlcy4gUGhhc2VkIHNjaGVkdWxpbmcsIG1pbmltYWwgZGlzcnVwdGlvbiwgY29tcGxpYW5jZS1yZWFkeS4nKTsKICAgID8+CjxzZWN0aW9uIGNsYXNzPSJwdi1zZWN0aW9uIHB2LXNlY3Rpb24tLXNhbmQiPgogICAgPGRpdiBjbGFzcz0icHYtY29udGFpbmVyIiBzdHlsZT0ibWF4LXdpZHRoOnZhcigtLXB2LWNvbnRlbnQtd2lkdGgpOyI+Cgo8aDI+UGF2aW5nIGZvciBQcm9wZXJ0aWVzIFRoYXQgTmVlZCB0byBTdGF5IE9wZW48L2gyPgo8cD5Db21tZXJjaWFsIHBhdmluZyBpc24ndCBqdXN0IGJpZ2dlciBkcml2ZXdheXMuIEl0J3MgcGhhc2VkIGNvbnN0cnVjdGlvbiBzbyB5b3VyIHRlbmFudHMga2VlcCBhY2Nlc3MuIEl0J3MgbmlnaHQgcGF2aW5nIHNvIHRoZSBwYXJraW5nIGxvdCBpcyByZWFkeSBieSBtb3JuaW5nLiBJdCdzIEFPREEtY29tcGxpYW50IGxheW91dHMsIGZpcmUgcm91dGUgbWFya2luZ3MsIGFuZCBjYXRjaCBiYXNpbnMgdGhhdCBhY3R1YWxseSBkcmFpbi4gV2UgaGFuZGxlIGFsbCBvZiBpdCDigJQgZnJvbSAyMC1zcGFjZSBzdHJpcCBtYWxsIGxvdHMgdG8gNTAwLXNwYWNlIGNvcnBvcmF0ZSBjYW1wdXNlcy48L3A+Cgo8aDI+V2hhdCBXZSBEbyBmb3IgQ29tbWVyY2lhbCBQcm9wZXJ0aWVzPC9oMj4KCjxkaXYgY2xhc3M9InB2LWdyaWQgcHYtZ3JpZC0yIiBzdHlsZT0ibWFyZ2luOjI0cHggMCA0MHB4OyI+CiAgICA8ZGl2IGNsYXNzPSJwdi1jYXJkIj4KICAgICAgICA8aDM+PGEgaHJlZj0iL3NlcnZpY2VzL3BhcmtpbmctbG90LXBhdmluZy8iPlBhcmtpbmcgTG90IFBhdmluZzwvYT48L2gzPgogICAgICAgIDxwPk5ldyBjb25zdHJ1Y3Rpb24sIHJlc3VyZmFjaW5nLCBhbmQgZnVsbCByZWJ1aWxkLiBDb21tZXJjaWFsLWdyYWRlIGFzcGhhbHQgd2l0aCBwcm9wZXIgZHJhaW5hZ2UsIGN1cmJpbmcsIGFuZCBsaW5lIHN0cmlwaW5nLjwvcD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHYtY2FyZCI+CiAgICAgICAgPGgzPjxhIGhyZWY9Ii9zZXJ2aWNlcy9jb21tZXJjaWFsLXBhdmluZy8iPkNvbW1lcmNpYWwgUGF2aW5nPC9hPjwvaDM+CiAgICAgICAgPHA+TG9hZGluZyBkb2NrcywgbGFuZXdheXMsIGFjY2VzcyByb2FkcywgZmlyZSByb3V0ZXMuIEJ1aWx0IHRvIGhhbmRsZSB0cnVjayB0cmFmZmljIGFuZCBzdXN0YWluZWQgaGVhdnkgbG9hZHMuPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwdi1jYXJkIj4KICAgICAgICA8aDM+UmVzdXJmYWNpbmcgJiBPdmVybGF5PC9oMz4KICAgICAgICA8cD5XaGVuIHRoZSBiYXNlIGlzIHNvbGlkIGJ1dCB0aGUgc3VyZmFjZSBpcyB3b3JuLiBTYXZlIDQwLTYwJSB2ZXJzdXMgYSBmdWxsIHJlYnVpbGQgd2l0aCBhIG5ldyBhc3BoYWx0IG92ZXJsYXkuPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwdi1jYXJkIj4KICAgICAgICA8aDM+TWFpbnRlbmFuY2UgQ29udHJhY3RzPC9oMz4KICAgICAgICA8cD5DcmFjayBzZWFsaW5nLCBzZWFsY29hdGluZywgcG90aG9sZSByZXBhaXIsIGFuZCBsaW5lIHJlLXN0cmlwaW5nIG9uIGEgc2NoZWR1bGVkIG1haW50ZW5hbmNlIHBsYW4uPC9wPgogICAgPC9kaXY+CjwvZGl2PgoKPGgyPlByb3BlcnR5IFR5cGVzIFdlIFdvcmsgV2l0aDwvaDI+Cjx1bCBzdHlsZT0iZm9udC1zaXplOjE3cHg7IGxpbmUtaGVpZ2h0OjEuODsgY29sb3I6IzMzMzsiPgogICAgPGxpPlNob3BwaW5nIHBsYXphcyBhbmQgcmV0YWlsIGNlbnRyZXM8L2xpPgogICAgPGxpPk9mZmljZSBidWlsZGluZ3MgYW5kIGNvcnBvcmF0ZSBjYW1wdXNlczwvbGk+CiAgICA8bGk+V2FyZWhvdXNlcyBhbmQgZGlzdHJpYnV0aW9uIGNlbnRyZXM8L2xpPgogICAgPGxpPkNvbmRvbWluaXVtIGFuZCBhcGFydG1lbnQgY29tcGxleGVzPC9saT4KICAgIDxsaT5TY2hvb2xzLCBjaHVyY2hlcywgYW5kIGluc3RpdHV0aW9uYWwgcHJvcGVydGllczwvbGk+CiAgICA8bGk+R2FzIHN0YXRpb25zIGFuZCBjYXIgd2FzaGVzPC9saT4KICAgIDxsaT5NdWx0aS11bml0IHJlc2lkZW50aWFsIGRldmVsb3BtZW50czwvbGk+CiAgICA8bGk+SW5kdXN0cmlhbCB5YXJkcyBhbmQgbG9hZGluZyBhcmVhczwvbGk+CjwvdWw+Cgo8aDI+T3VyIENvbW1lcmNpYWwgQXBwcm9hY2g8L2gyPgo8cD5FdmVyeSBjb21tZXJjaWFsIHByb2plY3Qgc3RhcnRzIHdpdGggYSBwaGFzaW5nIHBsYW4uIFdlIG1hcCBvdXQgaG93IHRvIGRvIHRoZSB3b3JrIHdoaWxlIHlvdXIgcHJvcGVydHkgc3RheXMgb3BlcmF0aW9uYWwg4oCUIHdoaWNoIHNlY3Rpb25zIGdldCBkb25lIHdoZW4sIHdoZXJlIHRyYWZmaWMgZ2V0cyByb3V0ZWQsIGFuZCB3aGF0IGhvdXJzIHdlIHdvcmsuIFlvdSBhcHByb3ZlIHRoZSBwbGFuIGJlZm9yZSB3ZSBicmVhayBncm91bmQuPC9wPgo8cD5XZSBwcm92aWRlIGRldGFpbGVkLCBpdGVtaXplZCBxdW90ZXMgdGhhdCBwcm9wZXJ0eSBtYW5hZ2VycyBhbmQgYnVpbGRpbmcgb3duZXJzIGNhbiBwcmVzZW50IHRvIGJvYXJkcyBhbmQgdGVuYW50cy4gTm8gYW1iaWd1aXR5LCBubyBjaGFuZ2Ugb3JkZXJzLCBubyBzdXJwcmlzZXMuIEZvciBtdWx0aS1zaXRlIHBvcnRmb2xpb3MsIHdlIG9mZmVyIHZvbHVtZSBwcmljaW5nIGFuZCBjb29yZGluYXRlZCBzY2hlZHVsaW5nIGFjcm9zcyBsb2NhdGlvbnMuPC9wPgoKPGgyPldoeSBQcm9wZXJ0eSBNYW5hZ2VycyBDaG9vc2UgVXM8L2gyPgo8dWwgc3R5bGU9ImZvbnQtc2l6ZToxN3B4OyBsaW5lLWhlaWdodDoxLjg7IGNvbG9yOiMzMzM7Ij4KICAgIDxsaT48c3Ryb25nPlBoYXNlZCBzY2hlZHVsaW5nPC9zdHJvbmc+IOKAlCB5b3VyIHByb3BlcnR5IHN0YXlzIGFjY2Vzc2libGUgdGhyb3VnaG91dCBjb25zdHJ1Y3Rpb248L2xpPgogICAgPGxpPjxzdHJvbmc+TmlnaHQgYW5kIHdlZWtlbmQgd29yazwvc3Ryb25nPiBhdmFpbGFibGUgZm9yIGJ1c3kgbG9jYXRpb25zPC9saT4KICAgIDxsaT48c3Ryb25nPkFPREEtY29tcGxpYW50PC9zdHJvbmc+IHBhcmtpbmcgbGF5b3V0cyBhbmQgYWNjZXNzaWJpbGl0eSBmZWF0dXJlczwvbGk+CiAgICA8bGk+PHN0cm9uZz5JdGVtaXplZCBxdW90ZXM8L3N0cm9uZz4gc3VpdGFibGUgZm9yIGJvYXJkIGFwcHJvdmFsPC9saT4KICAgIDxsaT48c3Ryb25nPk11bHRpLXllYXIgbWFpbnRlbmFuY2UgY29udHJhY3RzPC9zdHJvbmc+IGZvciBwb3J0Zm9saW8gcHJvcGVydGllczwvbGk+CiAgICA8bGk+PHN0cm9uZz5GdWxseSBpbnN1cmVkPC9zdHJvbmc+IOKAlCAkNU0gZ2VuZXJhbCBsaWFiaWxpdHksIFdTSUI8L2xpPgo8L3VsPgoKICAgIDwvZGl2Pgo8L3NlY3Rpb24+Cjw/cGhwIHB2X2JvdHRvbV9jdGEoJ0dldCBhIENvbW1lcmNpYWwgUGF2aW5nIFF1b3RlJywgJ1RlbGwgdXMgYWJvdXQgeW91ciBwcm9wZXJ0eS4gV2VcJ2xsIHNjaGVkdWxlIGEgc2l0ZSBzdXJ2ZXkgYW5kIHByb3ZpZGUgYSBkZXRhaWxlZCwgaXRlbWl6ZWQgZXN0aW1hdGUuJyk7Cn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBBQk9VVAogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KZnVuY3Rpb24gcHZfcGFnZV9hYm91dCgpIHsKICAgIHB2X2lubmVyX2hlcm8oJ0Fib3V0IENhbGxQYXZlJywgJ0Z1bGx5IGluc3VyZWQgcGF2aW5nIHByb2Zlc3Npb25hbHMgc2VydmluZyB0aGUgR3JlYXRlciBUb3JvbnRvIEFyZWEuIDUteWVhciB3b3JrbWFuc2hpcCBndWFyYW50ZWUgb24gZXZlcnkgcHJvamVjdC4nKTsKICAgID8+CjxzZWN0aW9uIGNsYXNzPSJwdi1zZWN0aW9uIHB2LXNlY3Rpb24tLXNhbmQiPgogICAgPGRpdiBjbGFzcz0icHYtY29udGFpbmVyIiBzdHlsZT0ibWF4LXdpZHRoOnZhcigtLXB2LWNvbnRlbnQtd2lkdGgpOyI+Cgo8aDI+V2hvIFdlIEFyZTwvaDI+CjxwPkNhbGxQYXZlIGlzIGEgcGF2aW5nIGNvbXBhbnkgc2VydmluZyB0aGUgR3JlYXRlciBUb3JvbnRvIEFyZWEuIFdlIGJ1aWxkIGFuZCByZXBhaXIgcmVzaWRlbnRpYWwgZHJpdmV3YXlzLCBjb21tZXJjaWFsIHBhcmtpbmcgbG90cywgYW5kIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiDigJQgYXNwaGFsdCwgaW50ZXJsb2NraW5nIHN0b25lLCBzZWFsY29hdGluZywgYW5kIG91dGRvb3IgaGFyZHNjYXBpbmcuPC9wPgo8cD5XZSdyZSBub3QgYSBmcmFuY2hpc2UuIFdlJ3JlIG5vdCBhIGJyb2tlciBvciBhIHJlZmVycmFsIG5ldHdvcmsuIFdlJ3JlIGEgdGVhbSBvZiBwYXZpbmcgcHJvZmVzc2lvbmFscyB3aG8gc2hvdyB1cCwgZG8gdGhlIHdvcmsgcHJvcGVybHksIGFuZCBzdGFuZCBiZWhpbmQgaXQgd2l0aCBhIHdyaXR0ZW4gZ3VhcmFudGVlLjwvcD4KCjxoMj5XaGF0IFdlIEJlbGlldmUgSW48L2gyPgoKPGgzPkRvIEl0IFJpZ2h0IHRoZSBGaXJzdCBUaW1lPC9oMz4KPHA+QSBkcml2ZXdheSBidWlsdCBvbiBhIGJhZCBiYXNlIHdpbGwgZmFpbC4gQSBwYXJraW5nIGxvdCB3aXRoIHBvb3IgZHJhaW5hZ2Ugd2lsbCBkZXRlcmlvcmF0ZSB0aHJlZSB0aW1lcyBmYXN0ZXIgdGhhbiBvbmUgZGVzaWduZWQgY29ycmVjdGx5LiBXZSBkb24ndCBjdXQgY29ybmVycyBvbiB0aGUgd29yayB0aGF0J3MgaW52aXNpYmxlIG9uY2UgdGhlIGFzcGhhbHQgZ29lcyBkb3duIOKAlCBiZWNhdXNlIHRoYXQncyB0aGUgd29yayB0aGF0IGFjdHVhbGx5IGRldGVybWluZXMgaG93IGxvbmcgdGhlIHN1cmZhY2UgbGFzdHMuIEV2ZXJ5IHByb2plY3QgZ2V0cyBwcm9wZXIgZXhjYXZhdGlvbiwgZW5naW5lZXJlZCBiYXNlIG1hdGVyaWFsLCBjb3JyZWN0IGNvbXBhY3Rpb24sIGFuZCB0aGUgcmlnaHQgYXNwaGFsdCBtaXggZm9yIHRoZSBhcHBsaWNhdGlvbi48L3A+Cgo8aDM+QmUgU3RyYWlnaHQgV2l0aCBQZW9wbGU8L2gzPgo8cD5JZiB5b3VyIGRyaXZld2F5IG5lZWRzIHJlcGxhY2luZywgd2UnbGwgdGVsbCB5b3UuIElmIGEgcmVwYWlyIHdpbGwgaG9sZCBmb3IgYW5vdGhlciAxMCB5ZWFycywgd2UnbGwgdGVsbCB5b3UgdGhhdCB0b28uIFdlIGRvbid0IHVwc2VsbCwgd2UgZG9uJ3QgZmFicmljYXRlIHVyZ2VuY3ksIGFuZCB3ZSBkb24ndCByZWNvbW1lbmQgd29yayB0aGF0IGlzbid0IG5lZWRlZC4gT3VyIHF1b3RlcyBhcmUgZGV0YWlsZWQgYW5kIGZpbmFsIOKAlCBubyAid2UgZm91bmQgc29tZXRoaW5nIGV4dHJhIiBvbmNlIHRoZSBlcXVpcG1lbnQgaXMgb24gc2l0ZS48L3A+Cgo8aDM+QnVpbGQgZm9yIE9udGFyaW88L2gzPgo8cD5FdmVyeSBzcGVjIHdlIHVzZSBpcyBkZXNpZ25lZCBmb3IgT250YXJpbydzIGNsaW1hdGUg4oCUIHRoZSBmcmVlemUtdGhhdyBjeWNsZXMsIHRoZSByb2FkIHNhbHQsIHRoZSBjbGF5IHNvaWxzLCB0aGUgc2Vhc29uYWwgdGVtcGVyYXR1cmUgc3dpbmdzIGZyb20gLTI1wrBDIHRvICszNcKwQy4gTWF0ZXJpYWxzIGFuZCBtZXRob2RzIHRoYXQgd29yayBpbiBvdGhlciBjbGltYXRlcyBkb24ndCBhbHdheXMgd29yayBoZXJlLiBXZSB1c2Ugd2hhdCB3b3JrcyBoZXJlLjwvcD4KCjxoMj5PdXIgR3VhcmFudGVlPC9oMj4KPHA+RXZlcnkgcmVzaWRlbnRpYWwgcHJvamVjdCBjb21lcyB3aXRoIGEgPHN0cm9uZz41LXllYXIgd29ya21hbnNoaXAgZ3VhcmFudGVlPC9zdHJvbmc+LiBJZiBzb21ldGhpbmcgd2UgaW5zdGFsbGVkIGZhaWxzIGR1ZSB0byBvdXIgd29ya21hbnNoaXAgd2l0aGluIDUgeWVhcnMsIHdlIGZpeCBpdCBhdCBubyBjb3N0LiBDb21tZXJjaWFsIHByb2plY3RzIGNhcnJ5IGEgZ3VhcmFudGVlIHNwZWNpZmljIHRvIHRoZSBzY29wZSBvZiB3b3JrLCBkZXRhaWxlZCBpbiB0aGUgcHJvamVjdCBjb250cmFjdC48L3A+CjxwPldlJ3JlIGZ1bGx5IGluc3VyZWQg4oCUIGdlbmVyYWwgbGlhYmlsaXR5IGFuZCBXU0lCIHdvcmtwbGFjZSBjb3ZlcmFnZSDigJQgYW5kIHdlIGNhcnJ5IGFsbCByZXF1aXJlZCBwZXJtaXRzIGFuZCBjZXJ0aWZpY2F0aW9ucyBmb3IgdGhlIG11bmljaXBhbGl0aWVzIHdlIHdvcmsgaW4uPC9wPgoKPGgyPldoZXJlIFdlIFdvcms8L2gyPgo8cD5XZSBzZXJ2ZSB0aGUgR3JlYXRlciBUb3JvbnRvIEFyZWEgYW5kIHN1cnJvdW5kaW5nIG11bmljaXBhbGl0aWVzOiA8YSBocmVmPSIvYXJlYXMvdG9yb250by8iPlRvcm9udG88L2E+LCA8YSBocmVmPSIvYXJlYXMvdmF1Z2hhbi8iPlZhdWdoYW48L2E+LCA8YSBocmVmPSIvYXJlYXMvbWlzc2lzc2F1Z2EvIj5NaXNzaXNzYXVnYTwvYT4sIDxhIGhyZWY9Ii9hcmVhcy9icmFtcHRvbi8iPkJyYW1wdG9uPC9hPiwgPGEgaHJlZj0iL2FyZWFzL25vcnRoLXlvcmsvIj5Ob3J0aCBZb3JrPC9hPiwgPGEgaHJlZj0iL2FyZWFzL3NjYXJib3JvdWdoLyI+U2NhcmJvcm91Z2g8L2E+LCA8YSBocmVmPSIvYXJlYXMvbWFya2hhbS8iPk1hcmtoYW08L2E+LCBhbmQgPGEgaHJlZj0iL2FyZWFzL3JpY2htb25kLWhpbGwvIj5SaWNobW9uZCBIaWxsPC9hPi48L3A+CgogICAgPC9kaXY+Cjwvc2VjdGlvbj4KPD9waHAgcHZfYm90dG9tX2N0YSgnTGV0XCdzIFRhbGsgQWJvdXQgWW91ciBQcm9qZWN0JywgJ1JlYWR5IHRvIGdldCBzdGFydGVkPyBSZXF1ZXN0IGEgZnJlZSBvbi1zaXRlIGVzdGltYXRlIGFuZCB3ZVwnbGwgdGFrZSBpdCBmcm9tIHRoZXJlLicpOwp9CgovKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgQ09OVEFDVAogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KZnVuY3Rpb24gcHZfcGFnZV9jb250YWN0KCkgewogICAgcHZfaW5uZXJfaGVybygnQ29udGFjdCBVcycsICdRdWVzdGlvbnMgYWJvdXQgYSBwcm9qZWN0PyBSZWFkeSBmb3IgYW4gZXN0aW1hdGU/IFdlXCdyZSBoZXJlIHRvIGhlbHAuJyk7CiAgICA/Pgo8c3R5bGU+Ci5wdi1jb250YWN0LWdyaWQgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogNDhweDsgYWxpZ24taXRlbXM6IHN0YXJ0OyB9Ci5wdi1jb250YWN0LWluZm8gaDIgeyBmb250LXNpemU6IDI2cHg7IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KLnB2LWNvbnRhY3QtaW5mbyBwIHsgZm9udC1zaXplOiAxN3B4OyBsaW5lLWhlaWdodDogMS43OyBjb2xvcjogIzMzMzsgfQoucHYtY29udGFjdC1tZXRob2QgewogICAgZGlzcGxheTogZmxleDsgZ2FwOiAxNnB4OyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgcGFkZGluZzogMjBweCAwOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXB2LWJvcmRlcik7Cn0KLnB2LWNvbnRhY3QtbWV0aG9kOmxhc3QtY2hpbGQgeyBib3JkZXItYm90dG9tOiBub25lOyB9Ci5wdi1jb250YWN0LWljb24gewogICAgd2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgYmFja2dyb3VuZDogdmFyKC0tcHYtYXNwaGFsdCk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXB2LXJhZGl1cyk7CiAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZmxleC1zaHJpbms6IDA7Cn0KLnB2LWNvbnRhY3QtaWNvbiBzdmcgeyB3aWR0aDogMjRweDsgaGVpZ2h0OiAyNHB4OyB9Ci5wdi1jb250YWN0LWRldGFpbCBoMyB7IGZvbnQtc2l6ZTogMTZweDsgbWFyZ2luLWJvdHRvbTogNHB4OyB9Ci5wdi1jb250YWN0LWRldGFpbCBwIHsgZm9udC1zaXplOiAxNXB4OyBjb2xvcjogIzU1NTsgbWFyZ2luOiAwOyB9Ci5wdi1jb250YWN0LWRldGFpbCBhIHsgY29sb3I6IHZhcigtLXB2LWdvbGQpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KLnB2LWNvbnRhY3QtZm9ybS13cmFwIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXB2LXdoaXRlKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcHYtYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXB2LXJhZGl1cyk7IHBhZGRpbmc6IDMycHg7Cn0KLnB2LWNvbnRhY3QtZm9ybS13cmFwIGgyIHsgZm9udC1zaXplOiAyMnB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyB9CkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgLnB2LWNvbnRhY3QtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9Cn0KPC9zdHlsZT4KCjxzZWN0aW9uIGNsYXNzPSJwdi1zZWN0aW9uIHB2LXNlY3Rpb24tLXNhbmQiPgogICAgPGRpdiBjbGFzcz0icHYtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwdi1jb250YWN0LWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1jb250YWN0LWluZm8iPgogICAgICAgICAgICAgICAgPGgyPkdldCBpbiBUb3VjaDwvaDI+CiAgICAgICAgICAgICAgICA8cD5XaGV0aGVyIHlvdSBoYXZlIGEgcXVpY2sgcXVlc3Rpb24gb3IgeW91J3JlIHJlYWR5IHRvIHNjaGVkdWxlIGFuIGVzdGltYXRlLCB3ZSdkIGxpa2UgdG8gaGVhciBmcm9tIHlvdS4gRm9yIGRldGFpbGVkIHByb2plY3QgaW5xdWlyaWVzLCBvdXIgPGEgaHJlZj0iL2dldC1xdW90ZS8iPmZyZWUgZXN0aW1hdGUgZm9ybTwvYT4gaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHF1b3RlLjwvcD4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1jb250YWN0LW1ldGhvZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtY29udGFjdC1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiPjxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIxNiIgcng9IjMiIHN0cm9rZT0iI0Q0QTg0MyIgc3Ryb2tlLXdpZHRoPSIyIi8+PHBhdGggZD0iTTIgN0wxMiAxM0wyMiA3IiBzdHJva2U9IiNENEE4NDMiIHN0cm9rZS13aWR0aD0iMiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWNvbnRhY3QtZGV0YWlsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkVtYWlsPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0ibWFpbHRvOmluZm9AY2FsbHBhdmUuY2EiPmluZm9AY2FsbHBhdmUuY2E8L2E+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5XZSByZXNwb25kIHdpdGhpbiAyNCBob3VycyBvbiBidXNpbmVzcyBkYXlzLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LWNvbnRhY3QtbWV0aG9kIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1jb250YWN0LWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSI+PHBhdGggZD0iTTEyIDJDNy4wMyAyIDMgNi4wMyAzIDExQzMgMTYuMjUgMTIgMjIgMTIgMjJDMTIgMjIgMjEgMTYuMjUgMjEgMTFDMjEgNi4wMyAxNi45NyAyIDEyIDJaIiBzdHJva2U9IiNENEE4NDMiIHN0cm9rZS13aWR0aD0iMiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTEiIHI9IjMiIHN0cm9rZT0iI0Q0QTg0MyIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtY29udGFjdC1kZXRhaWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+U2VydmljZSBBcmVhPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+R3JlYXRlciBUb3JvbnRvIEFyZWEg4oCUIFRvcm9udG8sIFZhdWdoYW4sIE1pc3Npc3NhdWdhLCBCcmFtcHRvbiwgTWFya2hhbSwgTm9ydGggWW9yaywgU2NhcmJvcm91Z2gsIFJpY2htb25kIEhpbGw8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi1jb250YWN0LW1ldGhvZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtY29udGFjdC1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIiBzdHJva2U9IiNENEE4NDMiIHN0cm9rZS13aWR0aD0iMiIvPjxwYXRoIGQ9Ik0xMiA2VjEyTDE2IDE0IiBzdHJva2U9IiNENEE4NDMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtY29udGFjdC1kZXRhaWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+SG91cnM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5Nb25kYXkg4oCTIEZyaWRheTogNzowMCBBTSDigJMgNjowMCBQTTxicj5TYXR1cmRheTogODowMCBBTSDigJMgMjowMCBQTTxicj5TdW5kYXk6IENsb3NlZDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+UGF2aW5nIHNlYXNvbjogQXByaWwg4oCTIE5vdmVtYmVyPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0icHYtY29udGFjdC1mb3JtLXdyYXAiPgogICAgICAgICAgICAgICAgPGgyPlNlbmQgVXMgYSBNZXNzYWdlPC9oMj4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZG9fc2hvcnRjb2RlKCdbY2FsbHBhdmVfcXVvdGVfZm9ybV0nKTsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9zZWN0aW9uPgo8P3BocAp9CgovKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgR0VUIEEgRlJFRSBRVU9URQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KZnVuY3Rpb24gcHZfcGFnZV9nZXRfcXVvdGUoKSB7CiAgICBwdl9pbm5lcl9oZXJvKCdHZXQgYSBGcmVlIEVzdGltYXRlJywgJ1RlbGwgdXMgYWJvdXQgeW91ciBwcm9qZWN0LiBXZSB3aWxsIHZpc2l0IHlvdXIgcHJvcGVydHkgYW5kIHByb3ZpZGUgYSBkZXRhaWxlZCwgbm8tb2JsaWdhdGlvbiB3cml0dGVuIHF1b3RlIHdpdGhpbiAyNCBob3Vycy4nKTsKICAgID8+CjxzdHlsZT4KLnB2LXF1b3RlLWxheW91dCB7CiAgICBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAzNjBweDsgZ2FwOiA0MHB4OwogICAgbWF4LXdpZHRoOiAxMDgwcHg7IG1hcmdpbjogMCBhdXRvOwp9Ci5wdi1xdW90ZS1jYXJkIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLXB2LXdoaXRlKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcHYtYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXB2LXJhZGl1cyk7IHBhZGRpbmc6IDM2cHg7CiAgICBib3gtc2hhZG93OiAwIDRweCAyNHB4IHJnYmEoNDQsNTQsNTcsMC4wNik7Cn0KLnB2LXF1b3RlLWNhcmQgaDIgeyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDZweDsgfQoucHYtcXVvdGUtY2FyZCAucHYtY2FyZC1zdWIgeyBjb2xvcjogIzY2NjsgZm9udC1zaXplOiAxNXB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9Ci5wdi1xdW90ZS1hc2lkZSB7IHBhZGRpbmctdG9wOiA4cHg7IH0KLnB2LXF1b3RlLWFzaWRlIGgzIHsgZm9udC1zaXplOiAxOHB4OyBtYXJnaW4tYm90dG9tOiAxNnB4OyBjb2xvcjogdmFyKC0tcHYtYXNwaGFsdCk7IH0KLnB2LXF1b3RlLWFzaWRlIHVsIHsgbGlzdC1zdHlsZTogbm9uZTsgcGFkZGluZzogMDsgbWFyZ2luOiAwIDAgMjhweDsgfQoucHYtcXVvdGUtYXNpZGUgbGkgewogICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDEwcHggMDsgZm9udC1zaXplOiAxNXB4OyBjb2xvcjogIzQ0NDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1wdi1ib3JkZXIpOwp9Ci5wdi1xdW90ZS1hc2lkZSBsaSBzdmcgeyBmbGV4LXNocmluazogMDsgbWFyZ2luLXRvcDogMnB4OyB9Ci5wdi1xdW90ZS1hc2lkZSBsaTpsYXN0LWNoaWxkIHsgYm9yZGVyLWJvdHRvbTogbm9uZTsgfQpAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsKICAgIC5wdi1xdW90ZS1sYXlvdXQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfQogICAgLnB2LXF1b3RlLWNhcmQgeyBwYWRkaW5nOiAyNHB4OyB9Cn0KPC9zdHlsZT4KPHNlY3Rpb24gY2xhc3M9InB2LXNlY3Rpb24gcHYtc2VjdGlvbi0tc2FuZCI+CiAgICA8ZGl2IGNsYXNzPSJwdi1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InB2LXF1b3RlLWxheW91dCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InB2LXF1b3RlLWNhcmQiPgogICAgICAgICAgICAgICAgPGgyPlJlcXVlc3QgWW91ciBGcmVlIE9uLVNpdGUgRXN0aW1hdGU8L2gyPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9InB2LWNhcmQtc3ViIj5GaWxsIG91dCB0aGUgZm9ybSBhbmQgd2Ugd2lsbCBiZSBpbiB0b3VjaCB3aXRoaW4gMjQgaG91cnMuPC9wPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyBkb19zaG9ydGNvZGUoJ1tjYWxscGF2ZV9xdW90ZV9mb3JtXScpOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGFzaWRlIGNsYXNzPSJwdi1xdW90ZS1hc2lkZSI+CiAgICAgICAgICAgICAgICA8aDM+V2hhdCB0byBFeHBlY3Q8L2gzPgogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgIDw/cGhwICRjaGVja3MgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICdGcmVlIG9uLXNpdGUgYXNzZXNzbWVudCB3aXRoaW4gNDggaG91cnMnLAogICAgICAgICAgICAgICAgICAgICAgICAnV3JpdHRlbiBxdW90ZSDigJQgbm8gc3VycHJpc2UgY29zdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAnNS15ZWFyIHdvcmttYW5zaGlwIGd1YXJhbnRlZScsCiAgICAgICAgICAgICAgICAgICAgICAgICdGdWxseSBpbnN1cmVkLCBXU0lCIGNvbXBsaWFudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICdObyBwcmVzc3VyZSwgbm8gdXBzZWxsaW5nJywKICAgICAgICAgICAgICAgICAgICBdOyBmb3JlYWNoICgkY2hlY2tzIGFzICRjKTogPz4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIiBzdHJva2U9IiNENEE4NDMiIHN0cm9rZS13aWR0aD0iMiIvPjxwYXRoIGQ9Ik03IDEybDMuNSAzLjVMMTcgOSIgc3Ryb2tlPSIjRDRBODQzIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjw/PSBlc2NfaHRtbCgkYykgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDxoMz5TZXJ2aWNlIEFyZWE8L2gzPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2NvbG9yOiM1NTU7bGluZS1oZWlnaHQ6MS42OyI+VG9yb250bywgVmF1Z2hhbiwgTWlzc2lzc2F1Z2EsIEJyYW1wdG9uLCBNYXJraGFtLCBOb3J0aCBZb3JrLCBTY2FyYm9yb3VnaCwgUmljaG1vbmQgSGlsbCBhbmQgc3Vycm91bmRpbmcgR1RBLjwvcD4KICAgICAgICAgICAgPC9hc2lkZT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L3NlY3Rpb24+Cjw/cGhwCn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBTRVJWSUNFUyBIVUIKICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCmZ1bmN0aW9uIHB2X3BhZ2Vfc2VydmljZXNfaHViKCkgewogICAgcHZfaW5uZXJfaGVybygnT3VyIFNlcnZpY2VzJywgJ1Jlc2lkZW50aWFsIGRyaXZld2F5cywgY29tbWVyY2lhbCBwYXJraW5nIGxvdHMsIHNlYWxjb2F0aW5nLCByZXBhaXJzLCBpbnRlcmxvY2tpbmcgc3RvbmUsIGFuZCBwYXRpbyBpbnN0YWxsYXRpb25zLicpOwogICAgPz4KPHNlY3Rpb24gY2xhc3M9InB2LXNlY3Rpb24gcHYtc2VjdGlvbi0tc2FuZCI+CiAgICA8ZGl2IGNsYXNzPSJwdi1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InB2LWdyaWQgcHYtZ3JpZC0yIiBzdHlsZT0iZ2FwOjI0cHg7Ij4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJHNlcnZpY2VzID0gWwogICAgICAgICAgICAgICAgWydBc3BoYWx0IERyaXZld2F5IFBhdmluZycsICdOZXcgYXNwaGFsdCBkcml2ZXdheXMgd2l0aCBwcm9wZXIgZ3JhZGluZywgY29tcGFjdGVkIGJhc2UgbGF5ZXJzLCBhbmQgY29tbWVyY2lhbC1ncmFkZSBob3QgbWl4LiBUaGUgc3RhbmRhcmQgZm9yIE9udGFyaW8uJywgJy9zZXJ2aWNlcy9hc3BoYWx0LWRyaXZld2F5LycsICc5LDYwMC9tbyBzZWFyY2hlcyddLAogICAgICAgICAgICAgICAgWydJbnRlcmxvY2tpbmcgRHJpdmV3YXkgSW5zdGFsbGF0aW9uJywgJ0N1c3RvbSBpbnRlcmxvY2tpbmcgc3RvbmUgZHJpdmV3YXlzLCB3YWxrd2F5cywgYW5kIHBhdGlvcy4gUGVybWVhYmxlIGJhc2Ugc3lzdGVtcywgdW5saW1pdGVkIHBhdHRlcm4gb3B0aW9ucy4nLCAnL3NlcnZpY2VzL2ludGVybG9ja2luZy1kcml2ZXdheS8nLCAnNSwwMDAvbW8gc2VhcmNoZXMnXSwKICAgICAgICAgICAgICAgIFsnRHJpdmV3YXkgU2VhbGluZyAmIFNlYWxjb2F0aW5nJywgJ1Byb2Zlc3Npb25hbCBzZWFsY29hdGluZyB0byBwcm90ZWN0IHlvdXIgYXNwaGFsdCBmcm9tIFVWLCB3YXRlciwgYW5kIGZyZWV6ZS10aGF3LiBFeHRlbmQgeW91ciBkcml2ZXdheVwncyBsaWZlIGJ5IDUtOCB5ZWFycy4nLCAnL3NlcnZpY2VzL2RyaXZld2F5LXNlYWxpbmcvJywgJzEwLDYwMC9tbyBzZWFyY2hlcyddLAogICAgICAgICAgICAgICAgWydBc3BoYWx0ICYgRHJpdmV3YXkgUmVwYWlyJywgJ0NyYWNrIGZpbGxpbmcsIHBvdGhvbGUgcGF0Y2hpbmcsIGluZnJhcmVkIHJlcGFpciwgYW5kIGZ1bGwgcmVzdXJmYWNpbmcuIEZpeCB3aGF0IHdpbnRlciBicm9rZS4nLCAnL3NlcnZpY2VzL2FzcGhhbHQtcmVwYWlyLycsICczLDc4MC9tbyBzZWFyY2hlcyddLAogICAgICAgICAgICAgICAgWydDb21tZXJjaWFsIFBhdmluZycsICdQYXJraW5nIGxvdHMsIHBsYXphcywgbGFuZXdheXMsIGFuZCBpbmR1c3RyaWFsIHN1cmZhY2VzLiBQaGFzZWQgc2NoZWR1bGluZywgbWluaW1hbCBkaXNydXB0aW9uLicsICcvc2VydmljZXMvY29tbWVyY2lhbC1wYXZpbmcvJywgJ0hpZ2hlc3QgdGlja2V0J10sCiAgICAgICAgICAgICAgICBbJ1BhcmtpbmcgTG90IFBhdmluZyAmIFJlcGFpcicsICdOZXcgbG90IGNvbnN0cnVjdGlvbiwgcmVzdXJmYWNpbmcsIGxpbmUgc3RyaXBpbmcsIGRyYWluYWdlLCBhbmQgbWFpbnRlbmFuY2UgZm9yIGNvbW1lcmNpYWwgcHJvcGVydGllcy4nLCAnL3NlcnZpY2VzL3BhcmtpbmctbG90LXBhdmluZy8nLCAnNjIwL21vIHNlYXJjaGVzJ10sCiAgICAgICAgICAgICAgICBbJ1BhdGlvIFN0b25lICYgUGF2ZXIgSW5zdGFsbGF0aW9uJywgJ05hdHVyYWwgc3RvbmUsIGNvbmNyZXRlIHBhdmVycywgYW5kIGZsYWdzdG9uZSBmb3IgcGF0aW9zLCB3YWxrd2F5cywgcG9vbCBkZWNrcywgYW5kIG91dGRvb3IgbGl2aW5nIHNwYWNlcy4nLCAnL3NlcnZpY2VzL3BhdGlvLXN0b25lLycsICcxOSwxMDAvbW8gc2VhcmNoZXMnXSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgZm9yZWFjaCAoJHNlcnZpY2VzIGFzICRzKTogPz4KICAgICAgICAgICAgPGEgaHJlZj0iPD89ICRzWzJdID8+IiBjbGFzcz0icHYtY2FyZCIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lOyI+CiAgICAgICAgICAgICAgICA8aDMgc3R5bGU9ImNvbG9yOnZhcigtLXB2LWFzcGhhbHQpOyI+PD89ICRzWzBdID8+PC9oMz4KICAgICAgICAgICAgICAgIDxwPjw/PSAkc1sxXSA/PjwvcD4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luLXRvcDo0OHB4OyI+CiAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTdweDsgY29sb3I6IzU1NTsgbWFyZ2luLWJvdHRvbToyMHB4OyI+Tm90IHN1cmUgd2hhdCB5b3UgbmVlZD8gVGVsbCB1cyBhYm91dCB5b3VyIHByb2plY3QgYW5kIHdlJ2xsIHJlY29tbWVuZCB0aGUgcmlnaHQgYXBwcm9hY2guPC9wPgogICAgICAgICAgICA8YSBocmVmPSIvZ2V0LXF1b3RlLyIgY2xhc3M9InB2LWJ0biBwdi1idG4tLXByaW1hcnkiPkdldCBhIEZyZWUgRXN0aW1hdGU8L2E+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9zZWN0aW9uPgo8P3BocAp9CgovKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgQVJFQVMgSFVCCiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqLwpmdW5jdGlvbiBwdl9wYWdlX2FyZWFzX2h1YigpIHsKICAgIHB2X2lubmVyX2hlcm8oJ0FyZWFzIFdlIFNlcnZlJywgJ1Jlc2lkZW50aWFsIGFuZCBjb21tZXJjaWFsIHBhdmluZyBhY3Jvc3MgdGhlIEdyZWF0ZXIgVG9yb250byBBcmVhIGFuZCBzdXJyb3VuZGluZyBtdW5pY2lwYWxpdGllcy4nKTsKICAgID8+CjxzZWN0aW9uIGNsYXNzPSJwdi1zZWN0aW9uIHB2LXNlY3Rpb24tLXNhbmQiPgogICAgPGRpdiBjbGFzcz0icHYtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwdi1ncmlkIHB2LWdyaWQtMiIgc3R5bGU9ImdhcDoyNHB4OyI+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRhcmVhcyA9IFsKICAgICAgICAgICAgICAgIFsnVG9yb250bycsICdFdG9iaWNva2UsIERvbiBNaWxscywgTGVhc2lkZSwgVGhlIEJlYWNoZXMsIERhbmZvcnRoLCBIaWdoIFBhcmssIEp1bmN0aW9uLCBSb3NlZGFsZScsICcvYXJlYXMvdG9yb250by8nXSwKICAgICAgICAgICAgICAgIFsnVmF1Z2hhbicsICdLbGVpbmJ1cmcsIFdvb2RicmlkZ2UsIE1hcGxlLCBUaG9ybmhpbGwsIENvbmNvcmQsIFZlbGxvcmUgVmlsbGFnZScsICcvYXJlYXMvdmF1Z2hhbi8nXSwKICAgICAgICAgICAgICAgIFsnTWlzc2lzc2F1Z2EnLCAnUG9ydCBDcmVkaXQsIFN0cmVldHN2aWxsZSwgRXJpbiBNaWxscywgTWVhZG93dmFsZSwgQ2xhcmtzb24sIExvcm5lIFBhcmsnLCAnL2FyZWFzL21pc3Npc3NhdWdhLyddLAogICAgICAgICAgICAgICAgWydCcmFtcHRvbicsICdCcmFtYWxlYSwgSGVhcnQgTGFrZSwgTW91bnQgUGxlYXNhbnQsIFNwcmluZ2RhbGUsIENhc3RsZW1vcmUsIFNhbmRhbHdvb2QnLCAnL2FyZWFzL2JyYW1wdG9uLyddLAogICAgICAgICAgICAgICAgWydOb3J0aCBZb3JrJywgJ1dpbGxvd2RhbGUsIERvbiBNaWxscywgQmF5dmlldyBWaWxsYWdlLCBMYXdyZW5jZSBQYXJrLCBZb3JrIE1pbGxzLCBOZXd0b25icm9vaycsICcvYXJlYXMvbm9ydGgteW9yay8nXSwKICAgICAgICAgICAgICAgIFsnU2NhcmJvcm91Z2gnLCAnQWdpbmNvdXJ0LCBNYWx2ZXJuLCBXZXhmb3JkLCBCaXJjaCBDbGlmZiwgR3VpbGR3b29kLCBIaWdobGFuZCBDcmVlaycsICcvYXJlYXMvc2NhcmJvcm91Z2gvJ10sCiAgICAgICAgICAgICAgICBbJ01hcmtoYW0nLCAnVW5pb252aWxsZSwgQ29ybmVsbCwgQmVyY3p5LCBNYXJraGFtIFZpbGxhZ2UsIE1pbGxpa2VuLCBBbmd1cyBHbGVuJywgJy9hcmVhcy9tYXJraGFtLyddLAogICAgICAgICAgICAgICAgWydSaWNobW9uZCBIaWxsJywgJ09hayBSaWRnZXMsIE1pbGwgUG9uZCwgQmF5dmlldyBIaWxsLCBKZWZmZXJzb24sIEVsZ2luIE1pbGxzLCBXZXN0YnJvb2snLCAnL2FyZWFzL3JpY2htb25kLWhpbGwvJ10sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGZvcmVhY2ggKCRhcmVhcyBhcyAkYSk6ID8+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/PSAkYVsyXSA/PiIgY2xhc3M9InB2LWNhcmQiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTsiPgogICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJjb2xvcjp2YXIoLS1wdi1hc3BoYWx0KTsiPjw/PSAkYVswXSA/PjwvaDM+CiAgICAgICAgICAgICAgICA8cD48Pz0gJGFbMV0gPz48L3A+CiAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi10b3A6NDhweDsiPgogICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjE3cHg7IGNvbG9yOiM1NTU7IG1hcmdpbi1ib3R0b206MjBweDsiPkRvbid0IHNlZSB5b3VyIGFyZWE/IFdlIHNlcnZlIHRoZSBlbnRpcmUgR1RBIGFuZCBzdXJyb3VuZGluZyBtdW5pY2lwYWxpdGllcy4gQ29udGFjdCB1cyB0byBjb25maXJtIGNvdmVyYWdlLjwvcD4KICAgICAgICAgICAgPGEgaHJlZj0iL2dldC1xdW90ZS8iIGNsYXNzPSJwdi1idG4gcHYtYnRuLS1wcmltYXJ5Ij5HZXQgYSBGcmVlIEVzdGltYXRlPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjwvc2VjdGlvbj4KPD9waHAKfQo=PD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiBDYWxsUGF2ZSBWaWV3cG9ydCBGaXgKICogRGVzY3JpcHRpb246IFJlcGxhY2VzIERpdmkncyBhY2Nlc3NpYmlsaXR5LWJsb2NraW5nIHZpZXdwb3J0IHRhZyB3aXRoIGEgcGluY2gtem9vbS1mcmllbmRseSBvbmUKICovCgphZGRfYWN0aW9uKCd3cF9oZWFkJywgZnVuY3Rpb24oKSB7CiAgICBlY2hvICI8IS0tIGNhbGxwYXZlLXZpZXdwb3J0LWZpeCBsb2FkZWQgLS0+XG4iOwp9LCAxKTsKCmFkZF9hY3Rpb24oJ3RlbXBsYXRlX3JlZGlyZWN0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoaXNzZXQoJF9HRVRbJ2V0X2ZiJ10pIHx8IGlzX2FkbWluKCkpIHJldHVybjsKICAgIG9iX3N0YXJ0KGZ1bmN0aW9uKCRidWYpIHsKICAgICAgICAkbmV3ID0gJzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgdmlld3BvcnQtZml0PWNvdmVyIj4nOwogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoCiAgICAgICAgICAgICcjPG1ldGFccytuYW1lPVsiXCdddmlld3BvcnRbIlwnXVtePl0qPiNpJywKICAgICAgICAgICAgJG5ldywKICAgICAgICAgICAgJGJ1ZiwKICAgICAgICAgICAgMQogICAgICAgICk7CiAgICB9KTsKfSwgMCk7Cg==PD9waHAKYWRkX2FjdGlvbignd3BfaGVhZCcsIGZ1bmN0aW9uKCkgeyBlY2hvICI8IS0tIFRFU1RfTVVfTE9BREVEIC0tPlxuIjsgfSwgMSk7Cg== https://callpave.ca/post-sitemap.xml 2026-03-27T05:00:13+00:00 https://callpave.ca/page-sitemap.xml 2026-03-29T23:52:23+00:00