const content = `LyoqCiogcGxvdGx5LmpzIHYyLjguMQoqIENvcHlyaWdodCAyMDEyLTIwMjEsIFBsb3RseSwgSW5jLgoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiovCiFmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLHQpO2Vsc2V7KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuUGxvdGx5PXQoKX19KChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cywoZnVuY3Rpb24odCl7cmV0dXJuIGkoZVtvXVsxXVt0XXx8dCl9KSx1LHUuZXhwb3J0cyx0LGUscixuKX1yZXR1cm4gcltvXS5leHBvcnRzfWZvcih2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxvPTA7bzxuLmxlbmd0aDtvKyspaShuW29dKTtyZXR1cm4gaX0oezE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3JjL2xpYiIpLGk9eyJYLFggZGl2IjonZGlyZWN0aW9uOmx0cjtmb250LWZhbWlseToiT3BlbiBTYW5zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowOycsIlggaW5wdXQsWCBidXR0b24iOidmb250LWZhbWlseToiT3BlbiBTYW5zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7JywiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1cyI6Im91dGxpbmU6bm9uZTsiLCJYIGEiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIGE6aG92ZXIiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIC5jcmlzcCI6InNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnVzZXItc2VsZWN0LW5vbmUiOiItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTsiLCJYIHN2ZyI6Im92ZXJmbG93OmhpZGRlbjsiLCJYIHN2ZyBhIjoiZmlsbDojNDQ3YWRiOyIsIlggc3ZnIGE6aG92ZXIiOiJmaWxsOiMzYzZkYzU7IiwiWCAubWFpbi1zdmciOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTsiLCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyIjoicG9pbnRlci1ldmVudHM6YWxsOyIsIlggLmN1cnNvci1kZWZhdWx0IjoiY3Vyc29yOmRlZmF1bHQ7IiwiWCAuY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3I6cG9pbnRlcjsiLCJYIC5jdXJzb3ItY3Jvc3NoYWlyIjoiY3Vyc29yOmNyb3NzaGFpcjsiLCJYIC5jdXJzb3ItbW92ZSI6ImN1cnNvcjptb3ZlOyIsIlggLmN1cnNvci1jb2wtcmVzaXplIjoiY3Vyc29yOmNvbC1yZXNpemU7IiwiWCAuY3Vyc29yLXJvdy1yZXNpemUiOiJjdXJzb3I6cm93LXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnMtcmVzaXplIjoiY3Vyc29yOm5zLXJlc2l6ZTsiLCJYIC5jdXJzb3ItZXctcmVzaXplIjoiY3Vyc29yOmV3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itc3ctcmVzaXplIjoiY3Vyc29yOnN3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itcy1yZXNpemUiOiJjdXJzb3I6cy1yZXNpemU7IiwiWCAuY3Vyc29yLXNlLXJlc2l6ZSI6ImN1cnNvcjpzZS1yZXNpemU7IiwiWCAuY3Vyc29yLXctcmVzaXplIjoiY3Vyc29yOnctcmVzaXplOyIsIlggLmN1cnNvci1lLXJlc2l6ZSI6ImN1cnNvcjplLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnctcmVzaXplIjoiY3Vyc29yOm53LXJlc2l6ZTsiLCJYIC5jdXJzb3Itbi1yZXNpemUiOiJjdXJzb3I6bi1yZXNpemU7IiwiWCAuY3Vyc29yLW5lLXJlc2l6ZSI6ImN1cnNvcjpuZS1yZXNpemU7IiwiWCAuY3Vyc29yLWdyYWIiOiJjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFiOyIsIlggLm1vZGViYXIiOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3JpZ2h0OjJweDsiLCJYIC5lYXNlLWJnIjoiLXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzOyIsIlg6aG92ZXIgLm1vZGViYXItLWhvdmVyIC5tb2RlYmFyLWdyb3VwIjoib3BhY2l0eToxOyIsIlggLm1vZGViYXItZ3JvdXAiOiJmbG9hdDpsZWZ0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLWxlZnQ6OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7IiwiWCAubW9kZWJhci1idG4iOiJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7aGVpZ2h0OjIycHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDsiLCJYIC5tb2RlYmFyLWJ0biBzdmciOiJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4OyIsIlggLm1vZGViYXIudmVydGljYWwiOiJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LWhlaWdodDoxMDAlOyIsIlggLm1vZGViYXIudmVydGljYWwgc3ZnIjoidG9wOi0xcHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCAubW9kZWJhci1ncm91cCI6ImRpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTtwYWRkaW5nLWxlZnQ6MHB4O3BhZGRpbmctYm90dG9tOjhweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIC5tb2RlYmFyLWJ0biI6ImRpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlLFggW2RhdGEtdGl0bGVdOmFmdGVyIjoicG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7ei1pbmRleDoxMDAxO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjExMCU7cmlnaHQ6NTAlOyIsIlggW2RhdGEtdGl0bGVdOmhvdmVyOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTpob3ZlcjphZnRlciI6ImRpc3BsYXk6YmxvY2s7b3BhY2l0eToxOyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSI6J2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O3otaW5kZXg6MTAwMjttYXJnaW4tdG9wOi0xMnB4O2JvcmRlci1ib3R0b20tY29sb3I6IzY5NzM4YTttYXJnaW4tcmlnaHQ6LTZweDsnLCJYIFtkYXRhLXRpdGxlXTphZnRlciI6ImNvbnRlbnQ6YXR0cihkYXRhLXRpdGxlKTtiYWNrZ3JvdW5kOiM2OTczOGE7Y29sb3I6I2ZmZjtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6I2ZmZjsiLCJYIC5zZWxlY3Qtb3V0bGluZS0yIjoic3Ryb2tlOiMwMDA7c3Ryb2tlLWRhc2hhcnJheToycHggMnB4OyIsWTonZm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO3Bvc2l0aW9uOmZpeGVkO3RvcDo1MHB4O3JpZ2h0OjIwcHg7ei1pbmRleDoxMDAwMDtmb250LXNpemU6MTBwdDttYXgtd2lkdGg6MTgwcHg7JywiWSBwIjoibWFyZ2luOjA7IiwiWSAubm90aWZpZXItbm90ZSI6Im1pbi13aWR0aDoxODBweDttYXgtd2lkdGg6MjUwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZmZmO3otaW5kZXg6MzAwMDttYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiM4Yzk3YWY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0MCwxNTEsMTc1LC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87IiwiWSAubm90aWZpZXItY2xvc2UiOiJjb2xvcjojZmZmO29wYWNpdHk6Ljg7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyIjoiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sIiAsIikucmVwbGFjZSgvWC9nLCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSIpLnJlcGxhY2UoL1kvZywiLnBsb3RseS1ub3RpZmllciIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7Ii4uL3NyYy9saWIiOjUwM31dLDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSI6MTExNH1dLDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXIiOjY1Nn1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFycG9sYXIiKX0seyIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIjo2Njl9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JveCIpfSx7Ii4uL3NyYy90cmFjZXMvYm94Ijo2Nzl9XSw2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiKX0seyIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiOjM2NH1dLDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2siKX0seyIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIjo2ODh9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY2FycGV0Ijo3MDd9XSw5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiOjcyMX1dLDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giOjcyOH1dLDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbmUiKX0seyIuLi9zcmMvdHJhY2VzL2NvbmUiOjczNH1dLDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiOjc0OX1dLDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXQiOjc2MH1dLDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29yZSIpfSx7Ii4uL3NyYy9jb3JlIjo0ODF9XSwxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9kZW5zaXR5bWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9kZW5zaXR5bWFwYm94Ijo3Njh9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIjoxMTE1fV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvZnVubmVsIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWwiOjc3OH1dLDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Z1bm5lbGFyZWEiKX0seyIuLi9zcmMvdHJhY2VzL2Z1bm5lbGFyZWEiOjc4N31dLDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5Iil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSI6MTExNn1dLDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXAiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXAiOjgwMH1dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcGdsIjo4MTF9XSwyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbSI6ODIzfV0sMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIjo4Mjl9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91ciI6ODMzfV0sMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaWNpY2xlIil9LHsiLi4vc3JjL3RyYWNlcy9pY2ljbGUiOjgzOX1dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2ltYWdlIil9LHsiLi4vc3JjL3RyYWNlcy9pbWFnZSI6ODUyfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb3JlIik7bi5yZWdpc3RlcihbdCgiLi9iYXIiKSx0KCIuL2JveCIpLHQoIi4vaGVhdG1hcCIpLHQoIi4vaGlzdG9ncmFtIiksdCgiLi9oaXN0b2dyYW0yZCIpLHQoIi4vaGlzdG9ncmFtMmRjb250b3VyIiksdCgiLi9jb250b3VyIiksdCgiLi9zY2F0dGVydGVybmFyeSIpLHQoIi4vdmlvbGluIiksdCgiLi9mdW5uZWwiKSx0KCIuL3dhdGVyZmFsbCIpLHQoIi4vaW1hZ2UiKSx0KCIuL3BpZSIpLHQoIi4vc3VuYnVyc3QiKSx0KCIuL3RyZWVtYXAiKSx0KCIuL2ljaWNsZSIpLHQoIi4vZnVubmVsYXJlYSIpLHQoIi4vc2NhdHRlcjNkIiksdCgiLi9zdXJmYWNlIiksdCgiLi9pc29zdXJmYWNlIiksdCgiLi92b2x1bWUiKSx0KCIuL21lc2gzZCIpLHQoIi4vY29uZSIpLHQoIi4vc3RyZWFtdHViZSIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9zcGxvbSIpLHQoIi4vcG9pbnRjbG91ZCIpLHQoIi4vaGVhdG1hcGdsIiksdCgiLi9wYXJjb29yZHMiKSx0KCIuL3BhcmNhdHMiKSx0KCIuL3NjYXR0ZXJtYXBib3giKSx0KCIuL2Nob3JvcGxldGhtYXBib3giKSx0KCIuL2RlbnNpdHltYXBib3giKSx0KCIuL3NhbmtleSIpLHQoIi4vaW5kaWNhdG9yIiksdCgiLi90YWJsZSIpLHQoIi4vY2FycGV0IiksdCgiLi9zY2F0dGVyY2FycGV0IiksdCgiLi9jb250b3VyY2FycGV0IiksdCgiLi9vaGxjIiksdCgiLi9jYW5kbGVzdGljayIpLHQoIi4vc2NhdHRlcnBvbGFyIiksdCgiLi9zY2F0dGVycG9sYXJnbCIpLHQoIi4vYmFycG9sYXIiKSx0KCIuL3NjYXR0ZXJzbWl0aCIpLHQoIi4vYWdncmVnYXRlIiksdCgiLi9maWx0ZXIiKSx0KCIuL2dyb3VwYnkiKSx0KCIuL3NvcnQiKSx0KCIuL2NhbGVuZGFycyIpXSksZS5leHBvcnRzPW59LHsiLi9hZ2dyZWdhdGUiOjIsIi4vYmFyIjozLCIuL2JhcnBvbGFyIjo0LCIuL2JveCI6NSwiLi9jYWxlbmRhcnMiOjYsIi4vY2FuZGxlc3RpY2siOjcsIi4vY2FycGV0Ijo4LCIuL2Nob3JvcGxldGgiOjksIi4vY2hvcm9wbGV0aG1hcGJveCI6MTAsIi4vY29uZSI6MTEsIi4vY29udG91ciI6MTIsIi4vY29udG91cmNhcnBldCI6MTMsIi4vY29yZSI6MTQsIi4vZGVuc2l0eW1hcGJveCI6MTUsIi4vZmlsdGVyIjoxNiwiLi9mdW5uZWwiOjE3LCIuL2Z1bm5lbGFyZWEiOjE4LCIuL2dyb3VwYnkiOjE5LCIuL2hlYXRtYXAiOjIwLCIuL2hlYXRtYXBnbCI6MjEsIi4vaGlzdG9ncmFtIjoyMiwiLi9oaXN0b2dyYW0yZCI6MjMsIi4vaGlzdG9ncmFtMmRjb250b3VyIjoyNCwiLi9pY2ljbGUiOjI1LCIuL2ltYWdlIjoyNiwiLi9pbmRpY2F0b3IiOjI4LCIuL2lzb3N1cmZhY2UiOjI5LCIuL21lc2gzZCI6MzAsIi4vb2hsYyI6MzEsIi4vcGFyY2F0cyI6MzIsIi4vcGFyY29vcmRzIjozMywiLi9waWUiOjM0LCIuL3BvaW50Y2xvdWQiOjM1LCIuL3NhbmtleSI6MzYsIi4vc2NhdHRlcjNkIjozNywiLi9zY2F0dGVyY2FycGV0IjozOCwiLi9zY2F0dGVyZ2VvIjozOSwiLi9zY2F0dGVyZ2wiOjQwLCIuL3NjYXR0ZXJtYXBib3giOjQxLCIuL3NjYXR0ZXJwb2xhciI6NDIsIi4vc2NhdHRlcnBvbGFyZ2wiOjQzLCIuL3NjYXR0ZXJzbWl0aCI6NDQsIi4vc2NhdHRlcnRlcm5hcnkiOjQ1LCIuL3NvcnQiOjQ2LCIuL3NwbG9tIjo0NywiLi9zdHJlYW10dWJlIjo0OCwiLi9zdW5idXJzdCI6NDksIi4vc3VyZmFjZSI6NTAsIi4vdGFibGUiOjUxLCIuL3RyZWVtYXAiOjUyLCIuL3Zpb2xpbiI6NTMsIi4vdm9sdW1lIjo1NCwiLi93YXRlcmZhbGwiOjU1fV0sMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaW5kaWNhdG9yIil9LHsiLi4vc3JjL3RyYWNlcy9pbmRpY2F0b3IiOjg2MH1dLDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2UiOjg2Nn1dLDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL21lc2gzZCIpfSx7Ii4uL3NyYy90cmFjZXMvbWVzaDNkIjo4NzF9XSwzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9vaGxjIil9LHsiLi4vc3JjL3RyYWNlcy9vaGxjIjo4NzZ9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wYXJjYXRzIil9LHsiLi4vc3JjL3RyYWNlcy9wYXJjYXRzIjo4ODV9XSwzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiKX0seyIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyI6ODk1fV0sMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGllIil9LHsiLi4vc3JjL3RyYWNlcy9waWUiOjkwNn1dLDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiKX0seyIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiOjkxNX1dLDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NhbmtleSIpfSx7Ii4uL3NyYy90cmFjZXMvc2Fua2V5Ijo5MjF9XSwzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCI6OTU5fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCI6OTY2fV0sMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyI6OTc0fV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiOjk4N31dLDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giOjk5N31dLDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyIjoxMDA1fV0sNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIjoxMDEyfV0sNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnNtaXRoIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyc21pdGgiOjEwMTl9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiOjEwMjd9XSw0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiOjExMTh9XSw0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zcGxvbSIpfSx7Ii4uL3NyYy90cmFjZXMvc3Bsb20iOjEwMzZ9XSw0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlIil9LHsiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlIjoxMDQ0fV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3VuYnVyc3QiKX0seyIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0IjoxMDUyfV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3VyZmFjZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3VyZmFjZSI6MTA2MX1dLDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3RhYmxlIil9LHsiLi4vc3JjL3RyYWNlcy90YWJsZSI6MTA2OX1dLDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3RyZWVtYXAiKX0seyIuLi9zcmMvdHJhY2VzL3RyZWVtYXAiOjEwODB9XSw1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92aW9saW4iKX0seyIuLi9zcmMvdHJhY2VzL3Zpb2xpbiI6MTA5M31dLDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3ZvbHVtZSIpfSx7Ii4uL3NyYy90cmFjZXMvdm9sdW1lIjoxMTAxfV0sNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsIil9LHsiLi4vc3JjL3RyYWNlcy93YXRlcmZhbGwiOjExMDl9XSw1NjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtYXJyYXkiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtc2hhcGUiKSx0KCJlbGVtZW50YXJ5LWNpcmN1aXRzLWRpcmVjdGVkLWdyYXBoIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyxudWxsKX0odGhpcywoZnVuY3Rpb24odCxlLHIsbixpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LnNvdXJjZUxpbmtzLmxlbmd0aD90LmRlcHRoOmUtMX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1pPWkmJmkuaGFzT3duUHJvcGVydHkoImRlZmF1bHQiKT9pLmRlZmF1bHQ6aTt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH07ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gZih0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQucGFydE9mQ3ljbGU9PT1lLnBhcnRPZkN5Y2xlP3QueTAtZS55MDoidG9wIj09PXQuY2lyY3VsYXJMaW5rVHlwZXx8ImJvdHRvbSI9PT1lLmNpcmN1bGFyTGlua1R5cGU/LTE6MX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBkKHQpe3JldHVybiBwKHQuc291cmNlKX1mdW5jdGlvbiBtKHQpe3JldHVybiBwKHQudGFyZ2V0KX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5saW5rc31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiByfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj0wO2lmKG51bGw9PT1yKXtmb3IodmFyIGE9W10sbz0wO288dC5saW5rcy5sZW5ndGg7bysrKXt2YXIgcz10LmxpbmtzW29dLGw9cy5zb3VyY2UuaW5kZXgsYz1zLnRhcmdldC5pbmRleDthW2xdfHwoYVtsXT1bXSksYVtjXXx8KGFbY109W10pLC0xPT09YVtsXS5pbmRleE9mKGMpJiZhW2xdLnB1c2goYyl9dmFyIHU9aShhKTt1LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSkpO3ZhciBmPXt9O2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspe3ZhciBoPXVbb10uc2xpY2UoLTIpO2ZbaFswXV18fChmW2hbMF1dPXt9KSxmW2hbMF1dW2hbMV1dPSEwfXQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQuaW5kZXgscj10LnNvdXJjZS5pbmRleDtlPT09cnx8ZltyXSYmZltyXVtlXT8odC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSk6dC5jaXJjdWxhcj0hMX0pKX1lbHNlIHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zb3VyY2Vbcl08dC50YXJnZXRbcl0/dC5jaXJjdWxhcj0hMToodC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSl9KSl9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPTAsbj0wO3QubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oaSl7aS5jaXJjdWxhciYmKGkuc291cmNlLmNpcmN1bGFyTGlua1R5cGV8fGkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU/aS5jaXJjdWxhckxpbmtUeXBlPWkuc291cmNlLmNpcmN1bGFyTGlua1R5cGU/aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZTppLnRhcmdldC5jaXJjdWxhckxpbmtUeXBlOmkuY2lyY3VsYXJMaW5rVHlwZT1yPG4/InRvcCI6ImJvdHRvbSIsInRvcCI9PWkuY2lyY3VsYXJMaW5rVHlwZT9yKz0xOm4rPTEsdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtiKHQsZSkhPWIoaS5zb3VyY2UsZSkmJmIodCxlKSE9YihpLnRhcmdldCxlKXx8KHQuY2lyY3VsYXJMaW5rVHlwZT1pLmNpcmN1bGFyTGlua1R5cGUpfSkpKX0pKSx0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJih0LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlPT10LnRhcmdldC5jaXJjdWxhckxpbmtUeXBlJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpLHEodCxlKSYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlKSl9KSl9ZnVuY3Rpb24gVCh0KXt2YXIgZT1NYXRoLmFicyh0LnkxLXQueTApLHI9TWF0aC5hYnModC50YXJnZXQueDAtdC5zb3VyY2UueDEpO3JldHVybiBNYXRoLmF0YW4oci9lKX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9MDt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhciYmIXEodCxlKT9yKzE6cn0pKTt2YXIgbj0wO3JldHVybiB0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe249dC5jaXJjdWxhciYmIXEodCxlKT9uKzE6bn0pKSxyK259ZnVuY3Rpb24gQSh0KXt2YXIgZT10LnNvdXJjZS5zb3VyY2VMaW5rcyxyPTA7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtyPXQuY2lyY3VsYXI/cisxOnJ9KSk7dmFyIG49dC50YXJnZXQudGFyZ2V0TGlua3MsaT0wO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2k9dC5jaXJjdWxhcj9pKzE6aX0pKSwhKHI+MXx8aT4xKX1mdW5jdGlvbiBNKHQsZSxyKXtyZXR1cm4gdC5zb3J0KEUpLHQuZm9yRWFjaCgoZnVuY3Rpb24obixpKXt2YXIgYSxvLHM9MDtpZihxKG4scikmJkEobikpbi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yO2Vsc2V7Zm9yKHZhciBsPTA7bDxpO2wrKylpZihhPXRbaV0sbz10W2xdLCEoYS5zb3VyY2UuY29sdW1uPG8udGFyZ2V0LmNvbHVtbnx8YS50YXJnZXQuY29sdW1uPm8uc291cmNlLmNvbHVtbikpe3ZhciBjPXRbbF0uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcit0W2xdLndpZHRoLzIrZTtzPWM+cz9jOnN9bi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yfX0pKSx0fWZ1bmN0aW9uIFModCxyLGksYSl7dmFyIG89ZS5taW4odC5saW5rcywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc291cmNlLnkwfSkpO3QubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJQYXRoRGF0YT17fSl9KSksTSh0LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pKSxyLGEpLE0odC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGV9KSkscixhKSx0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuY2lyY3VsYXIpe2lmKGUuY2lyY3VsYXJQYXRoRGF0YS5hcmNSYWRpdXM9ZS53aWR0aCsxMCxlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyPTUsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoPWUuc291cmNlLngxLWUuc291cmNlLngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYPWUuc291cmNlLngwK2UuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VXaWR0aCxlLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WD1lLnRhcmdldC54MCxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWT1lLnkwLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZPWUueTEscShlLGEpJiZBKGUpKWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzPTEwK2Uud2lkdGgvMixlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cz0xMCtlLndpZHRoLzIsImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1lLnNvdXJjZS55MSsyNStlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpOihlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkwLTI1LWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk7ZWxzZXt2YXIgcz1lLnNvdXJjZS5jb2x1bW4sbD1lLmNpcmN1bGFyTGlua1R5cGUsYz10LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuc291cmNlLmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSkpOyJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/Yy5zb3J0KEMpOmMuc29ydChMKTt2YXIgdT0wO2MuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz0xMCtlLndpZHRoLzIrdSxlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzPTEwK2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pKSxzPWUudGFyZ2V0LmNvbHVtbixjPXQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KSksImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoSSk6Yy5zb3J0KFApLHU9MCxjLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7dC5jaXJjdWxhckxpbmtJRD09ZS5jaXJjdWxhckxpbmtJRCYmKGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzPTEwK2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPTEwK2Uud2lkdGgvMituKnIrdSksdSs9dC53aWR0aH0pKSwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PU1hdGgubWF4KGksZS5zb3VyY2UueTEsZS50YXJnZXQueTEpKzI1K2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9by0yNS1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpfWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYLWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYK2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcn1pZihlLmNpcmN1bGFyKWUucGF0aD1mdW5jdGlvbih0KXt2YXIgZT0iIjtlPSJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/Ik0iK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVktdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cykrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WS10LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cykrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMrIiAwIDAgMCAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYKyIgIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WToiTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSt0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAxICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZO3JldHVybiBlfShlKTtlbHNle3ZhciBmPW4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoKGZ1bmN0aW9uKHQpe3JldHVyblt0LnNvdXJjZS54MCsodC5zb3VyY2UueDEtdC5zb3VyY2UueDApLHQueTBdfSkpLnRhcmdldCgoZnVuY3Rpb24odCl7cmV0dXJuW3QudGFyZ2V0LngwLHQueTFdfSkpO2UucGF0aD1mKGUpfX0pKX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIE8odCk9PU8oZSk/ImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT9DKHQsZSk6TCh0LGUpOk8oZSktTyh0KX1mdW5jdGlvbiBMKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIGUueTAtdC55MH1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuIHQueTEtZS55MX1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIGUueTEtdC55MX1mdW5jdGlvbiBPKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW4tdC5zb3VyY2UuY29sdW1ufWZ1bmN0aW9uIHoodCl7cmV0dXJuIHQudGFyZ2V0LngwLXQuc291cmNlLngxfWZ1bmN0aW9uIEQodCxlKXt2YXIgcj1UKHQpLG49eihlKS9NYXRoLnRhbihyKTtyZXR1cm4idXAiPT1IKHQpP3QueTErbjp0LnkxLW59ZnVuY3Rpb24gUih0LGUpe3ZhciByPVQodCksbj16KGUpL01hdGgudGFuKHIpO3JldHVybiJ1cCI9PUgodCk/dC55MS1uOnQueTErbn1mdW5jdGlvbiBGKHQsZSxyLG4pe3QubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oaSl7aWYoIWkuY2lyY3VsYXImJmkudGFyZ2V0LmNvbHVtbi1pLnNvdXJjZS5jb2x1bW4+MSl7dmFyIGE9aS5zb3VyY2UuY29sdW1uKzEsbz1pLnRhcmdldC5jb2x1bW4tMSxzPTEsbD1vLWErMTtmb3Iocz0xO2E8PW87YSsrLHMrKyl0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKG8pe2lmKG8uY29sdW1uPT1hKXt2YXIgYyx1PXMvKGwrMSksZj1NYXRoLnBvdygxLXUsMyksaD0zKnUqTWF0aC5wb3coMS11LDIpLHA9MypNYXRoLnBvdyh1LDIpKigxLXUpLGQ9TWF0aC5wb3codSwzKSxtPWYqaS55MCtoKmkueTArcCppLnkxK2QqaS55MSxnPW0taS53aWR0aC8yLHY9bStpLndpZHRoLzI7Zz5vLnkwJiZnPG8ueTE/KGM9by55MS1nKzEwLGM9ImJvdHRvbSI9PW8uY2lyY3VsYXJMaW5rVHlwZT9jOi1jLG89TihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJkIobyx0KSYmTih0LGMsZSxyKX0pKSk6KHY+by55MCYmdjxvLnkxfHxnPG8ueTAmJnY+by55MSkmJihjPXYtby55MCsxMCxvPU4obyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZ0LnkwPG8ueTEmJnQueTE+by55MSYmTih0LGMsZSxyKX0pKSl9fSkpfX0pKX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQueTA+ZS55MCYmdC55MDxlLnkxfHwodC55MT5lLnkwJiZ0LnkxPGUueTF8fHQueTA8ZS55MCYmdC55MT5lLnkxKX1mdW5jdGlvbiBOKHQsZSxyLG4pe3JldHVybiB0LnkwK2U+PXImJnQueTErZTw9biYmKHQueTA9dC55MCtlLHQueTE9dC55MStlLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MT10LnkxK2V9KSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkwPXQueTArZX0pKSksdH1mdW5jdGlvbiBqKHQsZSxyLG4pe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oaSl7biYmaS55KyhpLnkxLWkueTApPmUmJihpLnk9aS55LShpLnkrKGkueTEtaS55MCktZSkpO3ZhciBhPXQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gYih0LnNvdXJjZSxyKT09YihpLHIpfSkpLG89YS5sZW5ndGg7bz4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7aWYoIXQuY2lyY3VsYXImJiFlLmNpcmN1bGFyKXtpZih0LnRhcmdldC5jb2x1bW49PWUudGFyZ2V0LmNvbHVtbilyZXR1cm4gdC55MS1lLnkxO2lmKCFWKHQsZSkpcmV0dXJuIHQueTEtZS55MTtpZih0LnRhcmdldC5jb2x1bW4+ZS50YXJnZXQuY29sdW1uKXt2YXIgcj1SKGUsdCk7cmV0dXJuIHQueTEtcn1pZihlLnRhcmdldC5jb2x1bW4+dC50YXJnZXQuY29sdW1uKXJldHVybiBSKHQsZSktZS55MX1yZXR1cm4gdC5jaXJjdWxhciYmIWUuY2lyY3VsYXI/InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOmUuY2lyY3VsYXImJiF0LmNpcmN1bGFyPyJ0b3AiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/dC50YXJnZXQueTEtZS50YXJnZXQueTE6ZS50YXJnZXQuY29sdW1uLXQudGFyZ2V0LmNvbHVtbjp0LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGU/dC50YXJnZXQuY29sdW1uPT09ZS50YXJnZXQuY29sdW1uP2UudGFyZ2V0LnkxLXQudGFyZ2V0LnkxOnQudGFyZ2V0LmNvbHVtbi1lLnRhcmdldC5jb2x1bW46InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pKTt2YXIgcz1pLnkwO2EuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MD1zK3Qud2lkdGgvMixzKz10LndpZHRofSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpZigiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlKXtmb3IodmFyIHI9ZSsxLG49MDtyPG87cisrKW4rPWFbcl0ud2lkdGg7dC55MD1pLnkxLW4tdC53aWR0aC8yfX0pKX0pKX1mdW5jdGlvbiBVKHQsZSxyKXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gYih0LnRhcmdldCxyKT09YihlLHIpfSkpLGk9bi5sZW5ndGg7aT4xJiZuLnNvcnQoKGZ1bmN0aW9uKHQsZSl7aWYoIXQuY2lyY3VsYXImJiFlLmNpcmN1bGFyKXtpZih0LnNvdXJjZS5jb2x1bW49PWUuc291cmNlLmNvbHVtbilyZXR1cm4gdC55MC1lLnkwO2lmKCFWKHQsZSkpcmV0dXJuIHQueTAtZS55MDtpZihlLnNvdXJjZS5jb2x1bW48dC5zb3VyY2UuY29sdW1uKXt2YXIgcj1EKGUsdCk7cmV0dXJuIHQueTAtcn1pZih0LnNvdXJjZS5jb2x1bW48ZS5zb3VyY2UuY29sdW1uKXJldHVybiBEKHQsZSktZS55MH1yZXR1cm4gdC5jaXJjdWxhciYmIWUuY2lyY3VsYXI/InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOmUuY2lyY3VsYXImJiF0LmNpcmN1bGFyPyJ0b3AiPT1lLmNpcmN1bGFyTGlua1R5cGU/MTotMTp0LmNpcmN1bGFyJiZlLmNpcmN1bGFyP3QuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnNvdXJjZS5jb2x1bW49PT1lLnNvdXJjZS5jb2x1bW4/dC5zb3VyY2UueTEtZS5zb3VyY2UueTE6dC5zb3VyY2UuY29sdW1uLWUuc291cmNlLmNvbHVtbjp0LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGU/dC5zb3VyY2UuY29sdW1uPT09ZS5zb3VyY2UuY29sdW1uP3Quc291cmNlLnkxLWUuc291cmNlLnkxOmUuc291cmNlLmNvbHVtbi10LnNvdXJjZS5jb2x1bW46InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8tMToxOnZvaWQgMH0pKTt2YXIgYT1lLnkwO24uZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MT1hK3Qud2lkdGgvMixhKz10LndpZHRofSkpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtpZigiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlKXtmb3IodmFyIGE9cisxLG89MDthPGk7YSsrKW8rPW5bYV0ud2lkdGg7dC55MT1lLnkxLW8tdC53aWR0aC8yfX0pKX0pKX1mdW5jdGlvbiBWKHQsZSl7cmV0dXJuIEgodCk9PUgoZSl9ZnVuY3Rpb24gSCh0KXtyZXR1cm4gdC55MC10LnkxPjA/InVwIjoiZG93biJ9ZnVuY3Rpb24gcSh0LGUpe3JldHVybiBiKHQuc291cmNlLGUpPT1iKHQudGFyZ2V0LGUpfWZ1bmN0aW9uIEcodCxyLG4pe3ZhciBpPXQubm9kZXMsYT10LmxpbmtzLG89ITEscz0hMTtpZihhLmZvckVhY2goKGZ1bmN0aW9uKHQpeyJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/bz0hMDoiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlJiYocz0hMCl9KSksMD09b3x8MD09cyl7dmFyIGw9ZS5taW4oaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQueTB9KSksYz0obi1yKS8oZS5tYXgoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQueTF9KSktbCk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT0odC55MS10LnkwKSpjO3QueTA9KHQueTAtbCkqYyx0LnkxPXQueTArZX0pKSxhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9KHQueTAtbCkqYyx0LnkxPSh0LnkxLWwpKmMsdC53aWR0aD10LndpZHRoKmN9KSl9fXQuc2Fua2V5Q2lyY3VsYXI9ZnVuY3Rpb24oKXt2YXIgdCxuLGk9MCxhPTAsYj0xLFQ9MSxBPTI0LE09ZyxFPW8sTD12LEM9eSxQPTMyLEk9MixPPW51bGw7ZnVuY3Rpb24geigpe3ZhciB0PXtub2RlczpMLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpDLmFwcGx5KG51bGwsYXJndW1lbnRzKX07RCh0KSxfKHQsTSxPKSxSKHQpLEIodCksdyh0LE0pLE4odCxQLE0pLFYodCk7Zm9yKHZhciBlPTQscj0wO3I8ZTtyKyspaih0LFQsTSksVSh0LFQsTSksRih0LGEsVCxNKSxqKHQsVCxNKSxVKHQsVCxNKTtyZXR1cm4gRyh0LGEsVCksUyh0LEksVCxNKSx0fWZ1bmN0aW9uIEQodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSk7dmFyIGU9ci5tYXAodC5ub2RlcyxNKTtyZXR1cm4gdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0OyJvYmplY3QiIT09KHZvaWQgMD09PW4/InVuZGVmaW5lZCI6bChuKSkmJihuPXQuc291cmNlPXgoZSxuKSksIm9iamVjdCIhPT0odm9pZCAwPT09aT8idW5kZWZpbmVkIjpsKGkpKSYmKGk9dC50YXJnZXQ9eChlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSkpLHR9ZnVuY3Rpb24gUih0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucGFydE9mQ3ljbGU9ITEsdC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLGgpLGUuc3VtKHQudGFyZ2V0TGlua3MsaCkpLHQuc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNpcmN1bGFyJiYodC5wYXJ0T2ZDeWNsZT0hMCx0LmNpcmN1bGFyTGlua1R5cGU9ZS5jaXJjdWxhckxpbmtUeXBlKX0pKX0pKX1mdW5jdGlvbiBCKHQpe3ZhciBlLHIsbjtmb3IoZT10Lm5vZGVzLHI9W10sbj0wO2UubGVuZ3RoOysrbixlPXIscj1bXSllLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVwdGg9bix0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnRhcmdldCk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnRhcmdldCl9KSl9KSk7Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmhlaWdodD1uLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5pbmRleE9mKHQuc291cmNlKTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQuc291cmNlKX0pKX0pKTt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY29sdW1uPU1hdGguZmxvb3IoRS5jYWxsKG51bGwsdCxuKSl9KSl9ZnVuY3Rpb24gTihvLHMsbCl7dmFyIGM9ci5uZXN0KCkua2V5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXMoby5ub2RlcykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KSk7IWZ1bmN0aW9uKHIpe2lmKG4pe3ZhciBzPTEvMDtjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPVQqbi8odC5sZW5ndGgrMSk7cz1lPHM/ZTpzfSkpLHQ9c312YXIgbD1lLm1pbihjLChmdW5jdGlvbihyKXtyZXR1cm4oVC1hLShyLmxlbmd0aC0xKSp0KS9lLnN1bShyLGgpfSkpO2wqPS4zLG8ubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKmx9KSk7dmFyIHU9ZnVuY3Rpb24odCl7dmFyIHI9MCxuPTAsaT0wLGE9MCxvPWUubWF4KHQubm9kZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKTtyZXR1cm4gdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYoInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9yKz10LndpZHRoOm4rPXQud2lkdGgsMD09dC50YXJnZXQuY29sdW1uJiYoYSs9dC53aWR0aCksdC5zb3VyY2UuY29sdW1uPT1vJiYoaSs9dC53aWR0aCkpfSkpLHt0b3A6cj1yPjA/cisyNSsxMDpyLGJvdHRvbTpuPW4+MD9uKzI1KzEwOm4sbGVmdDphPWE+MD9hKzI1KzEwOmEscmlnaHQ6aT1pPjA/aSsyNSsxMDppfX0obyksZj1mdW5jdGlvbih0LHIpe3ZhciBuPWUubWF4KHQubm9kZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKSxvPWItaSxzPVQtYSxsPW8vKG8rci5yaWdodCtyLmxlZnQpLGM9cy8ocytyLnRvcCtyLmJvdHRvbSk7cmV0dXJuIGk9aSpsK3IubGVmdCxiPTA9PXIucmlnaHQ/YjpiKmwsYT1hKmMrci50b3AsVCo9Yyx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueDA9aSt0LmNvbHVtbiooKGItaS1BKS9uKSx0LngxPXQueDArQX0pKSxjfShvLHUpO2wqPWYsby5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqbH0pKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmRlcHRoPT1jLmxlbmd0aC0xJiYxPT1lfHwwPT10LmRlcHRoJiYxPT1lPyh0LnkwPVQvMi10LnZhbHVlKmwsdC55MT10LnkwK3QudmFsdWUqbCk6dC5wYXJ0T2ZDeWNsZT8wPT1rKHQscik/KHQueTA9VC8yK24sdC55MT10LnkwK3QudmFsdWUqbCk6InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8odC55MD1hK24sdC55MT10LnkwK3QudmFsdWUqbCk6KHQueTA9VC10LnZhbHVlKmwtbix0LnkxPXQueTArdC52YWx1ZSpsKTowPT11LnRvcHx8MD09dS5ib3R0b20/KHQueTA9KFQtYSkvZSpuLHQueTE9dC55MCt0LnZhbHVlKmwpOih0LnkwPShULWEpLzItZS8yK24sdC55MT10LnkwK3QudmFsdWUqbCl9KSl9KSl9KGwpLHkoKTtmb3IodmFyIHU9MSxnPXM7Zz4wOy0tZyl2KHUqPS45OSxsKSx5KCk7ZnVuY3Rpb24gdih0LHIpe3ZhciBuPWMubGVuZ3RoO2MuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGE9aS5sZW5ndGgsbz1pWzBdLmRlcHRoO2kuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIHM7aWYoaS5zb3VyY2VMaW5rcy5sZW5ndGh8fGkudGFyZ2V0TGlua3MubGVuZ3RoKWlmKGkucGFydE9mQ3ljbGUmJmsoaSxyKT4wKTtlbHNlIGlmKDA9PW8mJjE9PWEpcz1pLnkxLWkueTAsaS55MD1ULzItcy8yLGkueTE9VC8yK3MvMjtlbHNlIGlmKG89PW4tMSYmMT09YSlzPWkueTEtaS55MCxpLnkwPVQvMi1zLzIsaS55MT1ULzIrcy8yO2Vsc2V7dmFyIGw9ZS5tZWFuKGkuc291cmNlTGlua3MsbSksYz1lLm1lYW4oaS50YXJnZXRMaW5rcyxkKSx1PSgobCYmYz8obCtjKS8yOmx8fGMpLXAoaSkpKnQ7aS55MCs9dSxpLnkxKz11fX0pKX0pKX1mdW5jdGlvbiB5KCl7Yy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcixuLGksbz1hLHM9ZS5sZW5ndGg7Zm9yKGUuc29ydChmKSxpPTA7aTxzOysraSkobj1vLShyPWVbaV0pLnkwKT4wJiYoci55MCs9bixyLnkxKz1uKSxvPXIueTErdDtpZigobj1vLXQtVCk+MClmb3Iobz1yLnkwLT1uLHIueTEtPW4saT1zLTI7aT49MDstLWkpKG49KHI9ZVtpXSkueTErdC1vKT4wJiYoci55MC09bixyLnkxLT1uKSxvPXIueTB9KSl9fWZ1bmN0aW9uIFYodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQodSksdC50YXJnZXRMaW5rcy5zb3J0KGMpfSkpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWUsbj10LnkxLGk9bjt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTA9bi10LndpZHRoLzIsbi09dC53aWR0aCk6KHQueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aCl9KSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkxPWktdC53aWR0aC8yLGktPXQud2lkdGgpOih0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGgpfSkpfSkpfXJldHVybiB6Lm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCkseik6TX0sei5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLHopOkV9LHoubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSt0LHopOkF9LHoubm9kZVBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Useik6dH0sei5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCkseik6TH0sei5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCkseik6Q30sei5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9MCxiPSt0WzBdLFQ9K3RbMV0seik6W2ItaSxULWFdfSx6LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxiPSt0WzFdWzBdLGE9K3RbMF1bMV0sVD0rdFsxXVsxXSx6KTpbW2ksYV0sW2IsVF1dfSx6Lml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9K3Qseik6UH0sei5jaXJjdWxhckxpbmtHYXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEk9K3Qseik6SX0sei5ub2RlUGFkZGluZ1JhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHopOm59LHouc29ydE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhPPXQseik6T30sei51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCxNKSxWKHQpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnkwK3QueTE8VD8idG9wIjoiYm90dG9tIix0LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSx0LnRhcmdldC5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSl9KSksaih0LFQsTSwhMSksVSh0LFQsTSksUyh0LEksVCxNKSx0fSx6fSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGEpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxMDcsImQzLWNvbGxlY3Rpb24iOjEwOCwiZDMtc2hhcGUiOjExOSwiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaCI6MTMwfV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLWFycmF5IiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLXNoYXBlIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSxyLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGModC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBmKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZih0LnNvdXJjZSkqdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybiBmKHQudGFyZ2V0KSp0LnZhbHVlfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiBnKHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24geSh0KXtyZXR1cm5bdC5zb3VyY2UueDEsdC55MF19ZnVuY3Rpb24geCh0KXtyZXR1cm5bdC50YXJnZXQueDAsdC55MV19dC5zYW5rZXk9ZnVuY3Rpb24oKXt2YXIgdD0wLG49MCxpPTEseT0xLHg9MjQsYj04LF89ZCx3PWEsVD1tLGs9ZyxBPTMyO2Z1bmN0aW9uIE0oKXt2YXIgdD17bm9kZXM6VC5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6ay5hcHBseShudWxsLGFyZ3VtZW50cyl9O3JldHVybiBTKHQpLEUodCksTCh0KSxDKHQpLFAodCksdH1mdW5jdGlvbiBTKHQpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LmluZGV4PWUsdC5zb3VyY2VMaW5rcz1bXSx0LnRhcmdldExpbmtzPVtdfSkpO3ZhciBlPXIubWFwKHQubm9kZXMsXyk7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3QuaW5kZXg9cjt2YXIgbj10LnNvdXJjZSxpPXQudGFyZ2V0OyJvYmplY3QiIT10eXBlb2YgbiYmKG49dC5zb3VyY2U9dihlLG4pKSwib2JqZWN0IiE9dHlwZW9mIGkmJihpPXQudGFyZ2V0PXYoZSxpKSksbi5zb3VyY2VMaW5rcy5wdXNoKHQpLGkudGFyZ2V0TGlua3MucHVzaCh0KX0pKX1mdW5jdGlvbiBFKHQpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLHUpLGUuc3VtKHQudGFyZ2V0TGlua3MsdSkpfSkpfWZ1bmN0aW9uIEwoZSl7dmFyIHIsbixhO2ZvcihyPWUubm9kZXMsbj1bXSxhPTA7ci5sZW5ndGg7KythLHI9bixuPVtdKXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXB0aD1hLHQuc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5pbmRleE9mKHQudGFyZ2V0KTwwJiZuLnB1c2godC50YXJnZXQpfSkpfSkpO2ZvcihyPWUubm9kZXMsbj1bXSxhPTA7ci5sZW5ndGg7KythLHI9bixuPVtdKXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5oZWlnaHQ9YSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe24uaW5kZXhPZih0LnNvdXJjZSk8MCYmbi5wdXNoKHQuc291cmNlKX0pKX0pKTt2YXIgbz0oaS10LXgpLyhhLTEpO2Uubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS54MT0oZS54MD10K01hdGgubWF4KDAsTWF0aC5taW4oYS0xLE1hdGguZmxvb3Iody5jYWxsKG51bGwsZSxhKSkpKSpvKSt4fSkpfWZ1bmN0aW9uIEModCl7dmFyIGk9ci5uZXN0KCkua2V5KChmdW5jdGlvbih0KXtyZXR1cm4gdC54MH0pKS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyh0Lm5vZGVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlc30pKTshZnVuY3Rpb24oKXt2YXIgcj1lLm1heChpLChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSksYT0yLzMqKHktbikvKHItMSk7Yj5hJiYoYj1hKTt2YXIgbz1lLm1pbihpLChmdW5jdGlvbih0KXtyZXR1cm4oeS1uLSh0Lmxlbmd0aC0xKSpiKS9lLnN1bSh0LHUpfSkpO2kuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QueTE9KHQueTA9ZSkrdC52YWx1ZSpvfSkpfSkpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKm99KSl9KCksZCgpO2Zvcih2YXIgYT0xLG89QTtvPjA7LS1vKWwoYSo9Ljk5KSxkKCkscyhhKSxkKCk7ZnVuY3Rpb24gcyh0KXtpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoci50YXJnZXRMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnRhcmdldExpbmtzLGgpL2Uuc3VtKHIudGFyZ2V0TGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSkpfSkpfWZ1bmN0aW9uIGwodCl7aS5zbGljZSgpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbihyKXtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKHIuc291cmNlTGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci5zb3VyY2VMaW5rcyxwKS9lLnN1bShyLnNvdXJjZUxpbmtzLHUpLWYocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pKX0pKX1mdW5jdGlvbiBkKCl7aS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyLGksYT1uLG89dC5sZW5ndGg7Zm9yKHQuc29ydChjKSxpPTA7aTxvOysraSkocj1hLShlPXRbaV0pLnkwKT4wJiYoZS55MCs9cixlLnkxKz1yKSxhPWUueTErYjtpZigocj1hLWIteSk+MClmb3IoYT1lLnkwLT1yLGUueTEtPXIsaT1vLTI7aT49MDstLWkpKHI9KGU9dFtpXSkueTErYi1hKT4wJiYoZS55MC09cixlLnkxLT1yKSxhPWUueTB9KSl9fWZ1bmN0aW9uIFAodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQobCksdC50YXJnZXRMaW5rcy5zb3J0KHMpfSkpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWU7dC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGh9KSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGh9KSl9KSl9cmV0dXJuIE0udXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBQKHQpLHR9LE0ubm9kZUlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxNKTpffSxNLm5vZGVBbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om8odCksTSk6d30sTS5ub2RlV2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9K3QsTSk6eH0sTS5ub2RlUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rdCxNKTpifSxNLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxNKTpUfSxNLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxNKTprfSxNLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bj0wLGk9K2VbMF0seT0rZVsxXSxNKTpbaS10LHktbl19LE0uZXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlWzBdWzBdLGk9K2VbMV1bMF0sbj0rZVswXVsxXSx5PStlWzFdWzFdLE0pOltbdCxuXSxbaSx5XV19LE0uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0rdCxNKTpBfSxNfSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGkpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PWEsdC5zYW5rZXlMaW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBuLmxpbmtIb3Jpem9udGFsKCkuc291cmNlKHkpLnRhcmdldCh4KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxMDcsImQzLWNvbGxlY3Rpb24iOjEwOCwiZDMtc2hhcGUiOjExOX1dLDU4OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKCl7dmFyIHQ9e3ZlcnNpb246IjMuOC4wIn0scj1bXS5zbGljZSxuPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCl9LGk9c2VsZi5kb2N1bWVudDtmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50fHx0LmRvY3VtZW50fHx0KS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmKHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3KX1pZihpKXRyeXtuKGkuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKHQpe249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT10W2VdO3JldHVybiByfX1pZihEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSksaSl0cnl7aS5jcmVhdGVFbGVtZW50KCJESVYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIsMCwiIil9Y2F0Y2godCl7dmFyIHM9dGhpcy5FbGVtZW50LnByb3RvdHlwZSxsPXMuc2V0QXR0cmlidXRlLGM9cy5zZXRBdHRyaWJ1dGVOUyx1PXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsZj11LnNldFByb3BlcnR5O3Muc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7bC5jYWxsKHRoaXMsdCxlKyIiKX0scy5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUscil7Yy5jYWxsKHRoaXMsdCxlLHIrIiIpfSx1LnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtmLmNhbGwodGhpcyx0LGUrIiIscil9fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJue2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik8MD9uPWErMTppPWF9cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dC5hc2NlbmRpbmc9aCx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHQubWluPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJnI+biYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZyPm4mJihyPW4pfXJldHVybiByfSx0Lm1heD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxhOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPXRbaV0pJiZuPnImJihyPW4pfWVsc2V7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj5yJiYocj1uKX1yZXR1cm4gcn0sdC5leHRlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2V7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KythPG87KW51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1yZXR1cm5bcixpXX0sdC5zdW09ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPGk7KWQocj0rdFthXSkmJihuKz1yKTtlbHNlIGZvcig7KythPGk7KWQocj0rZS5jYWxsKHQsdFthXSxhKSkmJihuKz1yKTtyZXR1cm4gbn0sdC5tZWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgsYT0tMSxvPWk7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPXAodFthXSkpP24rPXI6LS1vO2Vsc2UgZm9yKDsrK2E8aTspZChyPXAoZS5jYWxsKHQsdFthXSxhKSkpP24rPXI6LS1vO2lmKG8pcmV0dXJuIG4vb30sdC5xdWFudGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPSh0Lmxlbmd0aC0xKSplKzEsbj1NYXRoLmZsb29yKHIpLGk9K3Rbbi0xXSxhPXItbjtyZXR1cm4gYT9pK2EqKHRbbl0taSk6aX0sdC5tZWRpYW49ZnVuY3Rpb24oZSxyKXt2YXIgbixpPVtdLGE9ZS5sZW5ndGgsbz0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzxhOylkKG49cChlW29dKSkmJmkucHVzaChuKTtlbHNlIGZvcig7KytvPGE7KWQobj1wKHIuY2FsbChlLGVbb10sbykpKSYmaS5wdXNoKG4pO2lmKGkubGVuZ3RoKXJldHVybiB0LnF1YW50aWxlKGkuc29ydChoKSwuNSl9LHQudmFyaWFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0wLG89MCxzPS0xLGw9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrczxpOylkKHI9cCh0W3NdKSkmJihvKz0obj1yLWEpKihyLShhKz1uLysrbCkpKTtlbHNlIGZvcig7KytzPGk7KWQocj1wKGUuY2FsbCh0LHRbc10scykpKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2lmKGw+MSlyZXR1cm4gby8obC0xKX0sdC5kZXZpYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10LnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZT9NYXRoLnNxcnQoZSk6ZX07dmFyIGc9bShoKTtmdW5jdGlvbiB2KHQpe3JldHVybiB0Lmxlbmd0aH10LmJpc2VjdExlZnQ9Zy5sZWZ0LHQuYmlzZWN0PXQuYmlzZWN0UmlnaHQ9Zy5yaWdodCx0LmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBtKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBoKHQoZSkscil9OnQpfSx0LnNodWZmbGU9ZnVuY3Rpb24odCxlLHIpeyhhPWFyZ3VtZW50cy5sZW5ndGgpPDMmJihyPXQubGVuZ3RoLGE8MiYmKGU9MCkpO2Zvcih2YXIgbixpLGE9ci1lO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnBlcm11dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7ci0tOyluW3JdPXRbZVtyXV07cmV0dXJuIG59LHQucGFpcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xLG49dFswXSxpPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KWlbZV09W24sbj10WysrZV1dO3JldHVybiBpfSx0LnRyYW5zcG9zZT1mdW5jdGlvbihlKXtpZighKGE9ZS5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgcj0tMSxuPXQubWluKGUsdiksaT1uZXcgQXJyYXkobik7KytyPG47KWZvcih2YXIgYSxvPS0xLHM9aVtyXT1uZXcgQXJyYXkoYSk7KytvPGE7KXNbb109ZVtvXVtyXTtyZXR1cm4gaX0sdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gdC50cmFuc3Bvc2UoYXJndW1lbnRzKX0sdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn07dmFyIHk9TWF0aC5hYnM7ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9MTt0KmUlMTspZSo9MTA7cmV0dXJuIGV9ZnVuY3Rpb24gYih0LGUpe2Zvcih2YXIgciBpbiBlKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxyLHt2YWx1ZTplW3JdLGVudW1lcmFibGU6ITF9KX1mdW5jdGlvbiBfKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9dC5yYW5nZT1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCx0PTApKSwoZS10KS9yPT0xLzApdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5nZSIpO3ZhciBuLGk9W10sYT14KHkocikpLG89LTE7aWYodCo9YSxlKj1hLChyKj1hKTwwKWZvcig7KG49dCtyKisrbyk+ZTspaS5wdXNoKG4vYSk7ZWxzZSBmb3IoOyhuPXQrciorK28pPGU7KWkucHVzaChuL2EpO3JldHVybiBpfSx0Lm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBfO2lmKHQgaW5zdGFuY2VvZiBfKXQuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtyLnNldCh0LGUpfSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytpPGE7KXIuc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxhOylyLnNldChlLmNhbGwodCxuPXRbaV0saSksbil9ZWxzZSBmb3IodmFyIG8gaW4gdClyLnNldChvLHRbb10pO3JldHVybiByfTtmdW5jdGlvbiB3KHQpe3JldHVybiJfX3Byb3RvX18iPT0odCs9IiIpfHwiXDAiPT09dFswXT8iXDAiK3Q6dH1mdW5jdGlvbiBUKHQpe3JldHVybiJcMCI9PT0odCs9IiIpWzBdP3Quc2xpY2UoMSk6dH1mdW5jdGlvbiBrKHQpe3JldHVybiB3KHQpaW4gdGhpcy5ffWZ1bmN0aW9uIEEodCl7cmV0dXJuKHQ9dyh0KSlpbiB0aGlzLl8mJmRlbGV0ZSB0aGlzLl9bdF19ZnVuY3Rpb24gTSgpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKFQoZSkpO3JldHVybiB0fWZ1bmN0aW9uIFMoKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzLl8pKyt0O3JldHVybiB0fWZ1bmN0aW9uIEUoKXtmb3IodmFyIHQgaW4gdGhpcy5fKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEwoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiBDKHQpe3JldHVybiB0fWZ1bmN0aW9uIFAodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90Om59fWZ1bmN0aW9uIEkodCxlKXtpZihlIGluIHQpcmV0dXJuIGU7ZT1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7Zm9yKHZhciByPTAsbj1PLmxlbmd0aDtyPG47KytyKXt2YXIgaT1PW3JdK2U7aWYoaSBpbiB0KXJldHVybiBpfX1iKF8se2hhczprLGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fW3codCldfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fW3codCldPWV9LHJlbW92ZTpBLGtleXM6TSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh0aGlzLl9bZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goe2tleTpUKGUpLHZhbHVlOnRoaXMuX1tlXX0pO3JldHVybiB0fSxzaXplOlMsZW1wdHk6RSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMsVChlKSx0aGlzLl9bZV0pfX0pLHQubmVzdD1mdW5jdGlvbigpe3ZhciBlLHIsbj17fSxpPVtdLGE9W107ZnVuY3Rpb24gbyh0LGEscyl7aWYocz49aS5sZW5ndGgpcmV0dXJuIHI/ci5jYWxsKG4sYSk6ZT9hLnNvcnQoZSk6YTtmb3IodmFyIGwsYyx1LGYsaD0tMSxwPWEubGVuZ3RoLGQ9aVtzKytdLG09bmV3IF87KytoPHA7KShmPW0uZ2V0KGw9ZChjPWFbaF0pKSk/Zi5wdXNoKGMpOm0uc2V0KGwsW2NdKTtyZXR1cm4gdD8oYz10KCksdT1mdW5jdGlvbihlLHIpe2Muc2V0KGUsbyh0LHIscykpfSk6KGM9e30sdT1mdW5jdGlvbihlLHIpe2NbZV09byh0LHIscyl9KSxtLmZvckVhY2godSksY31yZXR1cm4gbi5tYXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbyhlLHQsMCl9LG4uZW50cmllcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIpe2lmKHI+PWkubGVuZ3RoKXJldHVybiBlO3ZhciBuPVtdLG89YVtyKytdO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUsaSl7bi5wdXNoKHtrZXk6ZSx2YWx1ZXM6dChpLHIpfSl9KSksbz9uLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odC5rZXksZS5rZXkpfSkpOm59KG8odC5tYXAsZSwwKSwwKX0sbi5rZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGkucHVzaCh0KSxufSxuLnNvcnRLZXlzPWZ1bmN0aW9uKHQpe3JldHVybiBhW2kubGVuZ3RoLTFdPXQsbn0sbi5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBlPXQsbn0sbi5yb2xsdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxufSxufSx0LnNldD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgTDtpZih0KWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillLmFkZCh0W3JdKTtyZXR1cm4gZX0sYihMLHtoYXM6ayxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1t3KHQrPSIiKV09ITAsdH0scmVtb3ZlOkEsdmFsdWVzOk0sc2l6ZTpTLGVtcHR5OkUsZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLFQoZSkpfX0pLHQuYmVoYXZpb3I9e30sdC5yZWJpbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0xLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspdFtyPWFyZ3VtZW50c1tuXV09UCh0LGUsZVtyXSk7cmV0dXJuIHR9O3ZhciBPPVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdO2Z1bmN0aW9uIHooKXt9ZnVuY3Rpb24gRCgpe31mdW5jdGlvbiBSKHQpe3ZhciBlPVtdLHI9bmV3IF87ZnVuY3Rpb24gbigpe2Zvcih2YXIgcixuPWUsaT0tMSxhPW4ubGVuZ3RoOysraTxhOykocj1uW2ldLm9uKSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHR9cmV0dXJuIG4ub249ZnVuY3Rpb24obixpKXt2YXIgYSxvPXIuZ2V0KG4pO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCxlPWUuc2xpY2UoMCxhPWUuaW5kZXhPZihvKSkuY29uY2F0KGUuc2xpY2UoYSsxKSksci5yZW1vdmUobikpLGkmJmUucHVzaChyLnNldChuLHtvbjppfSkpLHQpfSxufWZ1bmN0aW9uIEYoKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gQigpe2Zvcih2YXIgZSxyPXQuZXZlbnQ7ZT1yLnNvdXJjZUV2ZW50OylyPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gTihlKXtmb3IodmFyIHI9bmV3IEQsbj0wLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspclthcmd1bWVudHNbbl1dPVIocik7cmV0dXJuIHIub2Y9ZnVuY3Rpb24obixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7dHJ5e3ZhciBvPWEuc291cmNlRXZlbnQ9dC5ldmVudDthLnRhcmdldD1lLHQuZXZlbnQ9YSxyW2EudHlwZV0uYXBwbHkobixpKX1maW5hbGx5e3QuZXZlbnQ9b319fSxyfXQuZGlzcGF0Y2g9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEQsZT0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7KytlPHI7KXRbYXJndW1lbnRzW2VdXT1SKHQpO3JldHVybiB0fSxELnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciByPXQuaW5kZXhPZigiLiIpLG49IiI7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1t0XS5vbihuKTp0aGlzW3RdLm9uKG4sZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PWUpZm9yKHQgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzW3RdLm9uKG4sbnVsbCk7cmV0dXJuIHRoaXN9fSx0LmV2ZW50PW51bGwsdC5yZXF1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoaiwiXFwkJiIpfTt2YXIgaj0vW1xcXF5cJFwqXCtcP1x8XFtcXVwoXClcLlx7XH1dL2csVT17fS5fX3Byb3RvX18/ZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX07ZnVuY3Rpb24gVih0KXtyZXR1cm4gVSh0LFkpLHR9dmFyIEg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKHQpfSxxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3RvckFsbCh0KX0sRz1mdW5jdGlvbih0LGUpe3ZhciByPXQubWF0Y2hlc3x8dFtJKHQsIm1hdGNoZXNTZWxlY3RvciIpXTtyZXR1cm4oRz1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwodCxlKX0pKHQsZSl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6bGUmJihIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNpenpsZSh0LGUpWzBdfHxudWxsfSxxPVNpenpsZSxHPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLHQuc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0KGkuZG9jdW1lbnRFbGVtZW50KX07dmFyIFk9dC5zZWxlY3Rpb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIFcodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiBIKHQsdGhpcyl9fWZ1bmN0aW9uIFgodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiBxKHQsdGhpcyl9fVkuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W107dD1XKHQpO2Zvcih2YXIgbz0tMSxzPXRoaXMubGVuZ3RoOysrbzxzOyl7YS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0obj10aGlzW29dKS5wYXJlbnROb2RlO2Zvcih2YXIgbD0tMSxjPW4ubGVuZ3RoOysrbDxjOykoaT1uW2xdKT8oZS5wdXNoKHI9dC5jYWxsKGksaS5fX2RhdGFfXyxsLG8pKSxyJiYiX19kYXRhX18iaW4gaSYmKHIuX19kYXRhX189aS5fX2RhdGFfXykpOmUucHVzaChudWxsKX1yZXR1cm4gVihhKX0sWS5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixpPVtdO3Q9WCh0KTtmb3IodmFyIGE9LTEsbz10aGlzLmxlbmd0aDsrK2E8bzspZm9yKHZhciBzPXRoaXNbYV0sbD0tMSxjPXMubGVuZ3RoOysrbDxjOykocj1zW2xdKSYmKGkucHVzaChlPW4odC5jYWxsKHIsci5fX2RhdGFfXyxsLGEpKSksZS5wYXJlbnROb2RlPXIpO3JldHVybiBWKGkpfTt2YXIgWj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsSj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Wix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIEsoZSxyKXtyZXR1cm4gZT10Lm5zLnF1YWxpZnkoZSksbnVsbD09cj9lLmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfToiZnVuY3Rpb24iPT10eXBlb2Ygcj9lLmxvY2FsP2Z1bmN0aW9uKCl7dmFyIHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9OmZ1bmN0aW9uKCl7dmFyIHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09dD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTplLmxvY2FsP2Z1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwscil9OmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoZSxyKX19ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdC50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1mdW5jdGlvbiAkKGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIit0LnJlcXVvdGUoZSkrIig/Olxccyt8JCkiLCJnIil9ZnVuY3Rpb24gdHQodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBldCh0LGUpe3ZhciByPSh0PXR0KHQpLm1hcChydCkpLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbigpe2Zvcih2YXIgbj0tMSxpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrbjxyOyl0W25dKHRoaXMsaSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjxyOyl0W25dKHRoaXMsZSl9fWZ1bmN0aW9uIHJ0KHQpe3ZhciBlPSQodCk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoaT1yLmNsYXNzTGlzdClyZXR1cm4gbj9pLmFkZCh0KTppLnJlbW92ZSh0KTt2YXIgaT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpKyIgIit0KSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpLnJlcGxhY2UoZSwiICIpKSl9fWZ1bmN0aW9uIG50KHQsZSxyKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBpdCh0LGUpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9OmZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBhdChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09WiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Wj90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gb3QoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBzdCh0KXtyZXR1cm57X19kYXRhX186dH19ZnVuY3Rpb24gbHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEcodGhpcyx0KX19ZnVuY3Rpb24gY3QodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGh8fCh0PWgpLGZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJnI/dChlLl9fZGF0YV9fLHIuX19kYXRhX18pOiFlLSFyfX1mdW5jdGlvbiB1dCh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGksYT10W3JdLG89MCxzPWEubGVuZ3RoO288cztvKyspKGk9YVtvXSkmJmUoaSxvLHIpO3JldHVybiB0fWZ1bmN0aW9uIGZ0KHQpe3JldHVybiBVKHQsaHQpLHR9dC5ucz17cHJlZml4OkoscXVhbGlmeTpmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIjoiKSxyPXQ7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0ocj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLEouaGFzT3duUHJvcGVydHkocik/e3NwYWNlOkpbcl0sbG9jYWw6dH06dH19LFkuYXR0cj1mdW5jdGlvbihlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4oZT10Lm5zLnF1YWxpZnkoZSkpLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShlKX1mb3IociBpbiBlKXRoaXMuZWFjaChLKHIsZVtyXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goSyhlLHIpKX0sWS5jbGFzc2VkPWZ1bmN0aW9uKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXRoaXMubm9kZSgpLG49KHQ9dHQodCkpLmxlbmd0aCxpPS0xO2lmKGU9ci5jbGFzc0xpc3Qpe2Zvcig7KytpPG47KWlmKCFlLmNvbnRhaW5zKHRbaV0pKXJldHVybiExfWVsc2UgZm9yKGU9ci5nZXRBdHRyaWJ1dGUoImNsYXNzIik7KytpPG47KWlmKCEkKHRbaV0pLnRlc3QoZSkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKGUgaW4gdCl0aGlzLmVhY2goZXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChldCh0LGUpKX0sWS5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0iIiksdCl0aGlzLmVhY2gobnQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBvKGkpLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXI9IiJ9cmV0dXJuIHRoaXMuZWFjaChudCh0LGUscikpfSxZLnByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMubm9kZSgpW3RdO2ZvcihlIGluIHQpdGhpcy5lYWNoKGl0KGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goaXQodCxlKSl9LFkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9OmZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LFkuaHRtbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9Om51bGw9PXQ/ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxZLmFwcGVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdD1hdCh0KSx0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LFkuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9YXQodCksZT1XKGUpLHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LFkucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChvdCl9LFkuZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3IodD1uZXcgQXJyYXkoYT0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxhOykobj1yW2ldKSYmKHRbaV09bi5fX2RhdGFfXyk7cmV0dXJuIHR9ZnVuY3Rpb24gbyh0LHIpe3ZhciBuLGksYSxvPXQubGVuZ3RoLHU9ci5sZW5ndGgsZj1NYXRoLm1pbihvLHUpLGg9bmV3IEFycmF5KHUpLHA9bmV3IEFycmF5KHUpLGQ9bmV3IEFycmF5KG8pO2lmKGUpe3ZhciBtLGc9bmV3IF8sdj1uZXcgQXJyYXkobyk7Zm9yKG49LTE7KytuPG87KShpPXRbbl0pJiYoZy5oYXMobT1lLmNhbGwoaSxpLl9fZGF0YV9fLG4pKT9kW25dPWk6Zy5zZXQobSxpKSx2W25dPW0pO2ZvcihuPS0xOysrbjx1OykoaT1nLmdldChtPWUuY2FsbChyLGE9cltuXSxuKSkpPyEwIT09aSYmKGhbbl09aSxpLl9fZGF0YV9fPWEpOnBbbl09c3QoYSksZy5zZXQobSwhMCk7Zm9yKG49LTE7KytuPG87KW4gaW4gdiYmITAhPT1nLmdldCh2W25dKSYmKGRbbl09dFtuXSl9ZWxzZXtmb3Iobj0tMTsrK248ZjspaT10W25dLGE9cltuXSxpPyhpLl9fZGF0YV9fPWEsaFtuXT1pKTpwW25dPXN0KGEpO2Zvcig7bjx1OysrbilwW25dPXN0KHJbbl0pO2Zvcig7bjxvOysrbilkW25dPXRbbl19cC51cGRhdGU9aCxwLnBhcmVudE5vZGU9aC5wYXJlbnROb2RlPWQucGFyZW50Tm9kZT10LnBhcmVudE5vZGUscy5wdXNoKHApLGwucHVzaChoKSxjLnB1c2goZCl9dmFyIHM9ZnQoW10pLGw9VihbXSksYz1WKFtdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClmb3IoOysraTxhOylvKHI9dGhpc1tpXSx0LmNhbGwocixyLnBhcmVudE5vZGUuX19kYXRhX18saSkpO2Vsc2UgZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdCk7cmV0dXJuIGwuZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gc30sbC5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIGN9LGx9LFkuZGF0dW09ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMucHJvcGVydHkoIl9fZGF0YV9fIil9LFkuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1sdCh0KSk7Zm9yKHZhciBhPTAsbz10aGlzLmxlbmd0aDthPG87YSsrKXtpLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPShyPXRoaXNbYV0pLnBhcmVudE5vZGU7Zm9yKHZhciBzPTAsbD1yLmxlbmd0aDtzPGw7cysrKShuPXJbc10pJiZ0LmNhbGwobixuLl9fZGF0YV9fLHMsYSkmJmUucHVzaChuKX1yZXR1cm4gVihpKX0sWS5vcmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD0tMSxlPXRoaXMubGVuZ3RoOysrdDxlOylmb3IodmFyIHIsbj10aGlzW3RdLGk9bi5sZW5ndGgtMSxhPW5baV07LS1pPj0wOykocj1uW2ldKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sWS5zb3J0PWZ1bmN0aW9uKHQpe3Q9Y3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Zvcih2YXIgZT0tMSxyPXRoaXMubGVuZ3RoOysrZTxyOyl0aGlzW2VdLnNvcnQodCk7cmV0dXJuIHRoaXMub3JkZXIoKX0sWS5lYWNoPWZ1bmN0aW9uKHQpe3JldHVybiB1dCh0aGlzLChmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSkpfSxZLmNhbGw9ZnVuY3Rpb24odCl7dmFyIGU9bihhcmd1bWVudHMpO3JldHVybiB0LmFwcGx5KGVbMF09dGhpcyxlKSx0aGlzfSxZLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxZLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMubGVuZ3RoO3Q8ZTt0KyspZm9yKHZhciByPXRoaXNbdF0sbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxZLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB1dCh0aGlzLChmdW5jdGlvbigpeysrdH0pKSx0fTt2YXIgaHQ9W107ZnVuY3Rpb24gcHQodCl7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24obixpLGEpe3ZhciBvLHM9dFthXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoYSE9ciYmKHI9YSxlPTApLGk+PWUmJihlPWkrMSk7IShvPXNbZV0pJiYrK2U8bDspO3JldHVybiBvfX1mdW5jdGlvbiBkdChlLHIsaSl7dmFyIGE9Il9fb24iK2Usbz1lLmluZGV4T2YoIi4iKSxzPWd0O28+MCYmKGU9ZS5zbGljZSgwLG8pKTt2YXIgbD1tdC5nZXQoZSk7ZnVuY3Rpb24gYygpe3ZhciB0PXRoaXNbYV07dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQsdC4kKSxkZWxldGUgdGhpc1thXSl9cmV0dXJuIGwmJihlPWwscz12dCksbz9yP2Z1bmN0aW9uKCl7dmFyIHQ9cyhyLG4oYXJndW1lbnRzKSk7Yy5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLHRoaXNbYV09dCx0LiQ9aSksdC5fPXJ9OmM6cj96OmZ1bmN0aW9uKCl7dmFyIHIsbj1uZXcgUmVnRXhwKCJeX19vbihbXi5dKykiK3QucmVxdW90ZShlKSsiJCIpO2Zvcih2YXIgaSBpbiB0aGlzKWlmKHI9aS5tYXRjaChuKSl7dmFyIGE9dGhpc1tpXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoclsxXSxhLGEuJCksZGVsZXRlIHRoaXNbaV19fX10LnNlbGVjdGlvbi5lbnRlcj1mdCx0LnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9aHQsaHQuYXBwZW5kPVkuYXBwZW5kLGh0LmVtcHR5PVkuZW1wdHksaHQubm9kZT1ZLm5vZGUsaHQuY2FsbD1ZLmNhbGwsaHQuc2l6ZT1ZLnNpemUsaHQuc2VsZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89W10scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7bj0oaT10aGlzW3NdKS51cGRhdGUsby5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT1pLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLHU9aS5sZW5ndGg7KytjPHU7KShhPWlbY10pPyhlLnB1c2gobltjXT1yPXQuY2FsbChpLnBhcmVudE5vZGUsYS5fX2RhdGFfXyxjLHMpKSxyLl9fZGF0YV9fPWEuX19kYXRhX18pOmUucHVzaChudWxsKX1yZXR1cm4gVihvKX0saHQuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9cHQodGhpcykpLFkuaW5zZXJ0LmNhbGwodGhpcyx0LGUpfSx0LnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGU9W0godCxpKV0pLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9W3RdKS5wYXJlbnROb2RlPWEodCksVihbZV0pfSx0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGU9bihxKHQsaSkpKS5wYXJlbnROb2RlPWkuZG9jdW1lbnRFbGVtZW50OihlPW4odCkpLnBhcmVudE5vZGU9bnVsbCxWKFtlXSl9LFkub249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9ITEpLHQpdGhpcy5lYWNoKGR0KHIsdFtyXSxlKSk7cmV0dXJuIHRoaXN9aWYobjwyKXJldHVybihuPXRoaXMubm9kZSgpWyJfX29uIit0XSkmJm4uXztyPSExfXJldHVybiB0aGlzLmVhY2goZHQodCxlLHIpKX07dmFyIG10PXQubWFwKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO2Z1bmN0aW9uIGd0KGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXQuZXZlbnQ7dC5ldmVudD1uLHJbMF09dGhpcy5fX2RhdGFfXzt0cnl7ZS5hcHBseSh0aGlzLHIpfWZpbmFsbHl7dC5ldmVudD1pfX19ZnVuY3Rpb24gdnQodCxlKXt2YXIgcj1ndCh0LGUpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnJlbGF0ZWRUYXJnZXQ7ZSYmKGU9PT10aGlzfHw4JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHxyLmNhbGwodGhpcyx0KX19aSYmbXQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Im9uIit0IGluIGkmJm10LnJlbW92ZSh0KX0pKTt2YXIgeXQseHQ9MDtmdW5jdGlvbiBidChlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK3h0LG49ImNsaWNrIityLGk9dC5zZWxlY3QobyhlKSkub24oInRvdWNobW92ZSIrcixGKS5vbigiZHJhZ3N0YXJ0IityLEYpLm9uKCJzZWxlY3RzdGFydCIrcixGKTtpZihudWxsPT15dCYmKHl0PSEoIm9uc2VsZWN0c3RhcnQiaW4gZSkmJkkoZS5zdHlsZSwidXNlclNlbGVjdCIpKSx5dCl7dmFyIHM9YShlKS5zdHlsZSxsPXNbeXRdO3NbeXRdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoaS5vbihyLG51bGwpLHl0JiYoc1t5dF09bCksdCl7dmFyIGU9ZnVuY3Rpb24oKXtpLm9uKG4sbnVsbCl9O2kub24obiwoZnVuY3Rpb24oKXtGKCksZSgpfSksITApLHNldFRpbWVvdXQoZSwwKX19fXQubW91c2U9ZnVuY3Rpb24odCl7cmV0dXJuIHd0KHQsQigpKX07dmFyIF90PXRoaXMubmF2aWdhdG9yJiYvV2ViS2l0Ly50ZXN0KHRoaXMubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDtmdW5jdGlvbiB3dChlLHIpe3IuY2hhbmdlZFRvdWNoZXMmJihyPXIuY2hhbmdlZFRvdWNoZXNbMF0pO3ZhciBuPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciBpPW4uY3JlYXRlU1ZHUG9pbnQoKTtpZihfdDwwKXt2YXIgYT1vKGUpO2lmKGEuc2Nyb2xsWHx8YS5zY3JvbGxZKXt2YXIgcz0obj10LnNlbGVjdCgiYm9keSIpLmFwcGVuZCgic3ZnIikuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6Im5vbmUifSwiaW1wb3J0YW50IikpWzBdWzBdLmdldFNjcmVlbkNUTSgpO190PSEocy5mfHxzLmUpLG4ucmVtb3ZlKCl9fXJldHVybiBfdD8oaS54PXIucGFnZVgsaS55PXIucGFnZVkpOihpLng9ci5jbGllbnRYLGkueT1yLmNsaWVudFkpLFsoaT1pLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsaS55XX12YXIgbD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltyLmNsaWVudFgtbC5sZWZ0LWUuY2xpZW50TGVmdCxyLmNsaWVudFktbC50b3AtZS5jbGllbnRUb3BdfWZ1bmN0aW9uIFR0KCl7cmV0dXJuIHQuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn10LnRvdWNoPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPWUsZT1CKCkuY2hhbmdlZFRvdWNoZXMpLGUpZm9yKHZhciBuLGk9MCxhPWUubGVuZ3RoO2k8YTsrK2kpaWYoKG49ZVtpXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIHd0KHQsbil9LHQuYmVoYXZpb3IuZHJhZz1mdW5jdGlvbigpe3ZhciBlPU4oYSwiZHJhZyIsImRyYWdzdGFydCIsImRyYWdlbmQiKSxyPW51bGwsbj1zKHosdC5tb3VzZSxvLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiksaT1zKFR0LHQudG91Y2gsQywidG91Y2htb3ZlIiwidG91Y2hlbmQiKTtmdW5jdGlvbiBhKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLGkpfWZ1bmN0aW9uIHMobixpLGEsbyxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbCxjPXRoaXMsdT10LmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8dC5ldmVudC50YXJnZXQsZj1jLnBhcmVudE5vZGUsaD1lLm9mKGMsYXJndW1lbnRzKSxwPTAsZD1uKCksbT0iLmRyYWciKyhudWxsPT1kPyIiOiItIitkKSxnPXQuc2VsZWN0KGEodSkpLm9uKG8rbSx4KS5vbihzK20sYiksdj1idCh1KSx5PWkoZixkKTtmdW5jdGlvbiB4KCl7dmFyIHQsZSxyPWkoZixkKTtyJiYodD1yWzBdLXlbMF0sZT1yWzFdLXlbMV0scHw9dHxlLHk9cixoKHt0eXBlOiJkcmFnIix4OnJbMF0rbFswXSx5OnJbMV0rbFsxXSxkeDp0LGR5OmV9KSl9ZnVuY3Rpb24gYigpe2koZixkKSYmKGcub24obyttLG51bGwpLm9uKHMrbSxudWxsKSx2KHApLGgoe3R5cGU6ImRyYWdlbmQifSkpfWw9cj9bKGw9ci5hcHBseShjLGFyZ3VtZW50cykpLngteVswXSxsLnkteVsxXV06WzAsMF0saCh7dHlwZToiZHJhZ3N0YXJ0In0pfX1yZXR1cm4gYS5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSx0LnJlYmluZChhLGUsIm9uIil9LHQudG91Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPUIoKS50b3VjaGVzKSxlP24oZSkubWFwKChmdW5jdGlvbihlKXt2YXIgcj13dCh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KSk6W119O3ZhciBrdD0xZS02LEF0PU1hdGguUEksTXQ9MipBdCxTdD1NdC1rdCxFdD1BdC8yLEx0PUF0LzE4MCxDdD0xODAvQXQ7ZnVuY3Rpb24gUHQodCl7cmV0dXJuIHQ+MT9FdDp0PC0xPy1FdDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gSXQodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9dmFyIE90PU1hdGguU1FSVDI7dC5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9cy1pLGY9bC1hLGg9dSp1K2YqZjtpZihoPDFlLTEyKW49TWF0aC5sb2coYy9vKS9PdCxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqZixvKk1hdGguZXhwKE90KnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChoKSxkPShjKmMtbypvKzQqaCkvKDIqbyoyKnApLG09KGMqYy1vKm8tNCpoKS8oMipjKjIqcCksZz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KG0qbSsxKS1tKTtuPSh2LWcpL090LHI9ZnVuY3Rpb24odCl7dmFyIGUscj10Km4scz1JdChnKSxsPW8vKDIqcCkqKHMqKGU9T3QqcitnLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGcpKTtyZXR1cm5baStsKnUsYStsKmYsbypzL0l0KE90KnIrZyldfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LmJlaGF2aW9yLnpvb209ZnVuY3Rpb24oKXt2YXIgZSxyLG4sYSxzLGwsYyx1LGYsaD17eDowLHk6MCxrOjF9LHA9Wzk2MCw1MDBdLGQ9UnQsbT0yNTAsZz0wLHY9Im1vdXNlZG93bi56b29tIix5PSJtb3VzZW1vdmUuem9vbSIseD0ibW91c2V1cC56b29tIixiPSJ0b3VjaHN0YXJ0Lnpvb20iLF89Tih3LCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpO2Z1bmN0aW9uIHcodCl7dC5vbih2LFApLm9uKER0KyIuem9vbSIsTykub24oImRibGNsaWNrLnpvb20iLHopLm9uKGIsSSl9ZnVuY3Rpb24gVCh0KXtyZXR1cm5bKHRbMF0taC54KS9oLmssKHRbMV0taC55KS9oLmtdfWZ1bmN0aW9uIGsodCl7aC5rPU1hdGgubWF4KGRbMF0sTWF0aC5taW4oZFsxXSx0KSl9ZnVuY3Rpb24gQSh0LGUpe2U9ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qaC5rK2gueCx0WzFdKmguaytoLnldfShlKSxoLngrPXRbMF0tZVswXSxoLnkrPXRbMV0tZVsxXX1mdW5jdGlvbiBNKGUsbixpLGEpe2UuX19jaGFydF9fPXt4OmgueCx5OmgueSxrOmgua30sayhNYXRoLnBvdygyLGEpKSxBKHI9bixpKSxlPXQuc2VsZWN0KGUpLG0+MCYmKGU9ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24obSkpLGUuY2FsbCh3LmV2ZW50KX1mdW5jdGlvbiBTKCl7YyYmYy5kb21haW4obC5yYW5nZSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQtaC54KS9oLmt9KSkubWFwKGwuaW52ZXJ0KSksZiYmZi5kb21haW4odS5yYW5nZSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQtaC55KS9oLmt9KSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXtnKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBMKHQpe1MoKSx0KHt0eXBlOiJ6b29tIixzY2FsZTpoLmssdHJhbnNsYXRlOltoLngsaC55XX0pfWZ1bmN0aW9uIEModCl7LS1nfHwodCh7dHlwZToiem9vbWVuZCJ9KSxyPW51bGwpfWZ1bmN0aW9uIFAoKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGk9dC5zZWxlY3QobyhlKSkub24oeSxsKS5vbih4LGMpLGE9VCh0Lm1vdXNlKGUpKSxzPWJ0KGUpO2Z1bmN0aW9uIGwoKXtuPTEsQSh0Lm1vdXNlKGUpLGEpLEwocil9ZnVuY3Rpb24gYygpe2kub24oeSxudWxsKS5vbih4LG51bGwpLHMobiksQyhyKX1EaS5jYWxsKGUpLEUocil9ZnVuY3Rpb24gSSgpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGk9e30sYT0wLG89Ii56b29tLSIrdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLGw9InRvdWNobW92ZSIrbyxjPSJ0b3VjaGVuZCIrbyx1PVtdLGY9dC5zZWxlY3QocikscD1idChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWguayxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaWRlbnRpZmllciBpbiBpJiYoaVt0LmlkZW50aWZpZXJdPVQodCkpfSkpLG59ZnVuY3Rpb24gbSgpe3ZhciBlPXQuZXZlbnQudGFyZ2V0O3Quc2VsZWN0KGUpLm9uKGwsZykub24oYyx5KSx1LnB1c2goZSk7Zm9yKHZhciBuPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGY9bi5sZW5ndGg7bzxmOysrbylpW25bb10uaWRlbnRpZmllcl09bnVsbDt2YXIgcD1kKCksbT1EYXRlLm5vdygpO2lmKDE9PT1wLmxlbmd0aCl7aWYobS1zPDUwMCl7dmFyIHY9cFswXTtNKHIsdixpW3YuaWRlbnRpZmllcl0sTWF0aC5mbG9vcihNYXRoLmxvZyhoLmspL01hdGguTE4yKSsxKSxGKCl9cz1tfWVsc2UgaWYocC5sZW5ndGg+MSl7dj1wWzBdO3ZhciB4PXBbMV0sYj12WzBdLXhbMF0sXz12WzFdLXhbMV07YT1iKmIrXypffX1mdW5jdGlvbiBnKCl7dmFyIG8sbCxjLHUsZj10LnRvdWNoZXMocik7RGkuY2FsbChyKTtmb3IodmFyIGg9MCxwPWYubGVuZ3RoO2g8cDsrK2gsdT1udWxsKWlmKGM9ZltoXSx1PWlbYy5pZGVudGlmaWVyXSl7aWYobClicmVhaztvPWMsbD11fWlmKHUpe3ZhciBkPShkPWNbMF0tb1swXSkqZCsoZD1jWzFdLW9bMV0pKmQsbT1hJiZNYXRoLnNxcnQoZC9hKTtvPVsob1swXStjWzBdKS8yLChvWzFdK2NbMV0pLzJdLGw9WyhsWzBdK3VbMF0pLzIsKGxbMV0rdVsxXSkvMl0sayhtKmUpfXM9bnVsbCxBKG8sbCksTChuKX1mdW5jdGlvbiB5KCl7aWYodC5ldmVudC50b3VjaGVzLmxlbmd0aCl7Zm9yKHZhciBlPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMscj0wLGE9ZS5sZW5ndGg7cjxhOysrcilkZWxldGUgaVtlW3JdLmlkZW50aWZpZXJdO2Zvcih2YXIgcyBpbiBpKXJldHVybiB2b2lkIGQoKX10LnNlbGVjdEFsbCh1KS5vbihvLG51bGwpLGYub24odixQKS5vbihiLEkpLHAoKSxDKG4pfW0oKSxFKG4pLGYub24odixudWxsKS5vbihiLG0pfWZ1bmN0aW9uIE8oKXt2YXIgaT1fLm9mKHRoaXMsYXJndW1lbnRzKTthP2NsZWFyVGltZW91dChhKTooRGkuY2FsbCh0aGlzKSxlPVQocj1ufHx0Lm1vdXNlKHRoaXMpKSxFKGkpKSxhPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7YT1udWxsLEMoaSl9KSw1MCksRigpLGsoTWF0aC5wb3coMiwuMDAyKnp0KCkpKmguayksQShyLGUpLEwoaSl9ZnVuY3Rpb24geigpe3ZhciBlPXQubW91c2UodGhpcykscj1NYXRoLmxvZyhoLmspL01hdGguTE4yO00odGhpcyxlLFQoZSksdC5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwociktMTpNYXRoLmZsb29yKHIpKzEpfXJldHVybiBEdHx8KER0PSJvbndoZWVsImluIGk/KHp0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LCJ3aGVlbCIpOiJvbm1vdXNld2hlZWwiaW4gaT8oenQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5ldmVudC53aGVlbERlbHRhfSwibW91c2V3aGVlbCIpOih6dD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRldGFpbH0sIk1vek1vdXNlUGl4ZWxTY3JvbGwiKSksdy5ldmVudD1mdW5jdGlvbihlKXtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9Xy5vZih0aGlzLGFyZ3VtZW50cyksbj1oO0JpP3Quc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC56b29tIiwoZnVuY3Rpb24oKXtoPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KSkudHdlZW4oInpvb206em9vbSIsKGZ1bmN0aW9uKCl7dmFyIGk9cFswXSxhPXBbMV0sbz1yP3JbMF06aS8yLHM9cj9yWzFdOmEvMixsPXQuaW50ZXJwb2xhdGVab29tKFsoby1oLngpL2guaywocy1oLnkpL2guayxpL2gua10sWyhvLW4ueCkvbi5rLChzLW4ueSkvbi5rLGkvbi5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWwodCksbj1pL3JbMl07dGhpcy5fX2NoYXJ0X189aD17eDpvLXJbMF0qbix5OnMtclsxXSpuLGs6bn0sTChlKX19KSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLChmdW5jdGlvbigpe0MoZSl9KSkuZWFjaCgiZW5kLnpvb20iLChmdW5jdGlvbigpe0MoZSl9KSk6KHRoaXMuX19jaGFydF9fPWgsRShlKSxMKGUpLEMoZSkpfSkpfSx3LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD17eDordFswXSx5Oit0WzFdLGs6aC5rfSxTKCksdyk6W2gueCxoLnldfSx3LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXt4OmgueCx5OmgueSxrOm51bGx9LGsoK3QpLFMoKSx3KTpoLmt9LHcuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09dD9SdDpbK3RbMF0sK3RbMV1dLHcpOmR9LHcuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQmJlsrdFswXSwrdFsxXV0sdyk6bn0sdy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQmJlsrdFswXSwrdFsxXV0sdyk6cH0sdy5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rdCx3KTptfSx3Lng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxsPXQuY29weSgpLGg9e3g6MCx5OjAsazoxfSx3KTpjfSx3Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dCx1PXQuY29weSgpLGg9e3g6MCx5OjAsazoxfSx3KTpmfSx0LnJlYmluZCh3LF8sIm9uIil9O3ZhciB6dCxEdCxSdD1bMCwxLzBdO2Z1bmN0aW9uIEZ0KCl7fWZ1bmN0aW9uIEJ0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEJ0Pyh0aGlzLmg9K3QsdGhpcy5zPStlLHZvaWQodGhpcy5sPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBCdD9uZXcgQnQodC5oLHQucyx0LmwpOm5lKCIiK3QsaWUsQnQpOm5ldyBCdCh0LGUscil9dC5jb2xvcj1GdCxGdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn0sdC5oc2w9QnQ7dmFyIE50PUJ0LnByb3RvdHlwZT1uZXcgRnQ7ZnVuY3Rpb24ganQodCxlLHIpe3ZhciBuLGk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqZnVuY3Rpb24odCl7cmV0dXJuIHQ+MzYwP3QtPTM2MDp0PDAmJih0Kz0zNjApLHQ8NjA/bisoaS1uKSp0LzYwOnQ8MTgwP2k6dDwyNDA/bisoaS1uKSooMjQwLXQpLzYwOm59KHQpKX1yZXR1cm4gdD1pc05hTih0KT8wOih0JT0zNjApPDA/dCszNjA6dCxlPWlzTmFOKGUpfHxlPDA/MDplPjE/MTplLG49Mioocj1yPDA/MDpyPjE/MTpyKS0oaT1yPD0uNT9yKigxK2UpOnIrZS1yKmUpLG5ldyBRdChhKHQrMTIwKSxhKHQpLGEodC0xMjApKX1mdW5jdGlvbiBVdChlLHIsbil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBVdD8odGhpcy5oPStlLHRoaXMuYz0rcix2b2lkKHRoaXMubD0rbikpOmFyZ3VtZW50cy5sZW5ndGg8Mj9lIGluc3RhbmNlb2YgVXQ/bmV3IFV0KGUuaCxlLmMsZS5sKTpYdChlIGluc3RhbmNlb2YgcXQ/ZS5sOihlPWFlKChlPXQucmdiKGUpKS5yLGUuZyxlLmIpKS5sLGUuYSxlLmIpOm5ldyBVdChlLHIsbil9TnQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBCdCh0aGlzLmgsdGhpcy5zLHRoaXMubC90KX0sTnQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgQnQodGhpcy5oLHRoaXMucyx0KnRoaXMubCl9LE50LnJnYj1mdW5jdGlvbigpe3JldHVybiBqdCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LHQuaGNsPVV0O3ZhciBWdD1VdC5wcm90b3R5cGU9bmV3IEZ0O2Z1bmN0aW9uIEh0KHQsZSxyKXtyZXR1cm4gaXNOYU4odCkmJih0PTApLGlzTmFOKGUpJiYoZT0wKSxuZXcgcXQocixNYXRoLmNvcyh0Kj1MdCkqZSxNYXRoLnNpbih0KSplKX1mdW5jdGlvbiBxdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBxdD8odGhpcy5sPSt0LHRoaXMuYT0rZSx2b2lkKHRoaXMuYj0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgcXQ/bmV3IHF0KHQubCx0LmEsdC5iKTp0IGluc3RhbmNlb2YgVXQ/SHQodC5oLHQuYyx0LmwpOmFlKCh0PVF0KHQpKS5yLHQuZyx0LmIpOm5ldyBxdCh0LGUscil9VnQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVdCh0aGlzLmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwrR3QqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxWdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVdCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLUd0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sVnQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0sdC5sYWI9cXQ7dmFyIEd0PTE4LFl0PXF0LnByb3RvdHlwZT1uZXcgRnQ7ZnVuY3Rpb24gV3QodCxlLHIpe3ZhciBuPSh0KzE2KS8xMTYsaT1uK2UvNTAwLGE9bi1yLzIwMDtyZXR1cm4gbmV3IFF0KEt0KDMuMjQwNDU0MiooaT0uOTUwNDcqWnQoaSkpLTEuNTM3MTM4NSoobj0xKlp0KG4pKS0uNDk4NTMxNCooYT0xLjA4ODgzKlp0KGEpKSksS3QoLS45NjkyNjYqaSsxLjg3NjAxMDgqbisuMDQxNTU2KmEpLEt0KC4wNTU2NDM0KmktLjIwNDAyNTkqbisxLjA1NzIyNTIqYSkpfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdD4wP25ldyBVdChNYXRoLmF0YW4yKHIsZSkqQ3QsTWF0aC5zcXJ0KGUqZStyKnIpLHQpOm5ldyBVdChOYU4sTmFOLHQpfWZ1bmN0aW9uIFp0KHQpe3JldHVybiB0Pi4yMDY4OTMwMzQ/dCp0KnQ6KHQtNC8yOSkvNy43ODcwMzd9ZnVuY3Rpb24gSnQodCl7cmV0dXJuIHQ+LjAwODg1Nj9NYXRoLnBvdyh0LDEvMyk6Ny43ODcwMzcqdCs0LzI5fWZ1bmN0aW9uIEt0KHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSoodDw9LjAwMzA0PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSkpfWZ1bmN0aW9uIFF0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFF0Pyh0aGlzLnI9fn50LHRoaXMuZz1+fmUsdm9pZCh0aGlzLmI9fn5yKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBRdD9uZXcgUXQodC5yLHQuZyx0LmIpOm5lKCIiK3QsUXQsanQpOm5ldyBRdCh0LGUscil9ZnVuY3Rpb24gJHQodCl7cmV0dXJuIG5ldyBRdCh0Pj4xNix0Pj44JjI1NSwyNTUmdCl9ZnVuY3Rpb24gdGUodCl7cmV0dXJuICR0KHQpKyIifVl0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcXQoTWF0aC5taW4oMTAwLHRoaXMubCtHdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sWXQuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcXQoTWF0aC5tYXgoMCx0aGlzLmwtR3QqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LFl0LnJnYj1mdW5jdGlvbigpe3JldHVybiBXdCh0aGlzLmwsdGhpcy5hLHRoaXMuYil9LHQucmdiPVF0O3ZhciBlZT1RdC5wcm90b3R5cGU9bmV3IEZ0O2Z1bmN0aW9uIHJlKHQpe3JldHVybiB0PDE2PyIwIitNYXRoLm1heCgwLHQpLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUsdCkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIG5lKHQsZSxyKXt2YXIgbixpLGEsbz0wLHM9MCxsPTA7aWYobj0vKFthLXpdKylcKCguKilcKS8uZXhlYyh0PXQudG9Mb3dlckNhc2UoKSkpc3dpdGNoKGk9blsyXS5zcGxpdCgiLCIpLG5bMV0pe2Nhc2UiaHNsIjpyZXR1cm4gcihwYXJzZUZsb2F0KGlbMF0pLHBhcnNlRmxvYXQoaVsxXSkvMTAwLHBhcnNlRmxvYXQoaVsyXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIGUoc2UoaVswXSksc2UoaVsxXSksc2UoaVsyXSkpfXJldHVybihhPWxlLmdldCh0KSk/ZShhLnIsYS5nLGEuYik6KG51bGw9PXR8fCIjIiE9PXQuY2hhckF0KDApfHxpc05hTihhPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpKXx8KDQ9PT10Lmxlbmd0aD8obz0oMzg0MCZhKT4+NCxvfD1vPj40LHM9MjQwJmEsc3w9cz4+NCxsPTE1JmEsbHw9bDw8NCk6Nz09PXQubGVuZ3RoJiYobz0oMTY3MTE2ODAmYSk+PjE2LHM9KDY1MjgwJmEpPj44LGw9MjU1JmEpKSxlKG8scyxsKSl9ZnVuY3Rpb24gaWUodCxlLHIpe3ZhciBuLGksYT1NYXRoLm1pbih0Lz0yNTUsZS89MjU1LHIvPTI1NSksbz1NYXRoLm1heCh0LGUscikscz1vLWEsbD0obythKS8yO3JldHVybiBzPyhpPWw8LjU/cy8obythKTpzLygyLW8tYSksbj10PT1vPyhlLXIpL3MrKGU8cj82OjApOmU9PW8/KHItdCkvcysyOih0LWUpL3MrNCxuKj02MCk6KG49TmFOLGk9bD4wJiZsPDE/MDpuKSxuZXcgQnQobixpLGwpfWZ1bmN0aW9uIGFlKHQsZSxyKXt2YXIgbj1KdCgoLjQxMjQ1NjQqKHQ9b2UodCkpKy4zNTc1NzYxKihlPW9lKGUpKSsuMTgwNDM3NSoocj1vZShyKSkpLy45NTA0NyksaT1KdCgoLjIxMjY3MjkqdCsuNzE1MTUyMiplKy4wNzIxNzUqcikvMSk7cmV0dXJuIHF0KDExNippLTE2LDUwMCoobi1pKSwyMDAqKGktSnQoKC4wMTkzMzM5KnQrLjExOTE5MiplKy45NTAzMDQxKnIpLzEuMDg4ODMpKSl9ZnVuY3Rpb24gb2UodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gc2UodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1lZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IFF0KE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IFF0KGksaSxpKX0sZWUuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUXQoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxlZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gaWUodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxlZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIityZSh0aGlzLnIpK3JlKHRoaXMuZykrcmUodGhpcy5iKX07dmFyIGxlPXQubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtmdW5jdGlvbiBjZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHVlKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLGZlKGUscix0LG4pfX1mdW5jdGlvbiBmZShlLHIsaSxhKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGw9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO2Z1bmN0aW9uIGYoKXt2YXIgdCxlPWMuc3RhdHVzO2lmKCFlJiZmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9aS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiBzZWxmLlhEb21haW5SZXF1ZXN0JiYhKCJ3aXRoQ3JlZGVudGlhbHMiaW4gYykmJi9eKGh0dHAocyk/Oik/XC9cLy8udGVzdChlKSYmKGM9bmV3IFhEb21haW5SZXF1ZXN0KSwib25sb2FkImluIGM/Yy5vbmxvYWQ9Yy5vbmVycm9yPWY6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjLnJlYWR5U3RhdGU+MyYmZigpfSxjLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dmFyIHI9dC5ldmVudDt0LmV2ZW50PWU7dHJ5e3MucHJvZ3Jlc3MuY2FsbChvLGMpfWZpbmFsbHl7dC5ldmVudD1yfX0sby5oZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0odCsiIikudG9Mb3dlckNhc2UoKSxhcmd1bWVudHMubGVuZ3RoPDI/bFt0XToobnVsbD09ZT9kZWxldGUgbFt0XTpsW3RdPWUrIiIsbyl9LG8ubWltZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOnQrIiIsbyk6cn0sby5yZXNwb25zZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxvKTp1fSxvLnJlc3BvbnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpPXQsb30sWyJnZXQiLCJwb3N0Il0uZm9yRWFjaCgoZnVuY3Rpb24odCl7b1t0XT1mdW5jdGlvbigpe3JldHVybiBvLnNlbmQuYXBwbHkobyxbdF0uY29uY2F0KG4oYXJndW1lbnRzKSkpfX0pKSxvLnNlbmQ9ZnVuY3Rpb24odCxuLGkpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKGk9bixuPW51bGwpLGMub3Blbih0LGUsITApLG51bGw9PXJ8fCJhY2NlcHQiaW4gbHx8KGwuYWNjZXB0PXIrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBhIGluIGwpYy5zZXRSZXF1ZXN0SGVhZGVyKGEsbFthXSk7cmV0dXJuIG51bGwhPXImJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHIpLG51bGwhPXUmJihjLnJlc3BvbnNlVHlwZT11KSxudWxsIT1pJiZvLm9uKCJlcnJvciIsaSkub24oImxvYWQiLChmdW5jdGlvbih0KXtpKG51bGwsdCl9KSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scywib24iKSxudWxsPT1hP286by5nZXQoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fShhKSl9bGUuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtsZS5zZXQodCwkdChlKSl9KSksdC5mdW5jdG9yPWNlLHQueGhyPXVlKEMpLHQuZHN2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGkodCxyLG4pe2FyZ3VtZW50cy5sZW5ndGg8MyYmKG49cixyPW51bGwpO3ZhciBpPWZlKHQsZSxudWxsPT1yP2E6byhyKSxuKTtyZXR1cm4gaS5yb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aS5yZXNwb25zZShudWxsPT0ocj10KT9hOm8odCkpOnJ9LGl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaS5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkucGFyc2UoZS5yZXNwb25zZVRleHQsdCl9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUubWFwKGwpLmpvaW4odCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gci50ZXN0KHQpPyciJyt0LnJlcGxhY2UoL1wiL2csJyIiJykrJyInOnR9cmV0dXJuIGkucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gaS5wYXJzZVJvd3ModCwoZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgaT1mdW5jdGlvbihlKXtmb3IodmFyIHI9e30sbj10Lmxlbmd0aCxpPTA7aTxuOysraSlyW3RbaV1dPWVbaV07cmV0dXJuIHJ9O3I9ZT9mdW5jdGlvbih0LHIpe3JldHVybiBlKGkodCkscil9Oml9KSl9LGkucGFyc2VSb3dzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXt9LG89e30scz1bXSxsPXQubGVuZ3RoLGM9MCx1PTA7ZnVuY3Rpb24gZigpe2lmKGM+PWwpcmV0dXJuIG87aWYoaSlyZXR1cm4gaT0hMSxhO3ZhciBlPWM7aWYoMzQ9PT10LmNoYXJDb2RlQXQoZSkpe2Zvcih2YXIgcj1lO3IrKzxsOylpZigzND09PXQuY2hhckNvZGVBdChyKSl7aWYoMzQhPT10LmNoYXJDb2RlQXQocisxKSlicmVhazsrK3J9cmV0dXJuIGM9cisyLDEzPT09KHM9dC5jaGFyQ29kZUF0KHIrMSkpPyhpPSEwLDEwPT09dC5jaGFyQ29kZUF0KHIrMikmJisrYyk6MTA9PT1zJiYoaT0hMCksdC5zbGljZShlKzEscikucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YzxsOyl7dmFyIHMsdT0xO2lmKDEwPT09KHM9dC5jaGFyQ29kZUF0KGMrKykpKWk9ITA7ZWxzZSBpZigxMz09PXMpaT0hMCwxMD09PXQuY2hhckNvZGVBdChjKSYmKCsrYywrK3UpO2Vsc2UgaWYocyE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoZSxjLXUpfXJldHVybiB0LnNsaWNlKGUpfWZvcig7KHI9ZigpKSE9PW87KXtmb3IodmFyIGg9W107ciE9PWEmJnIhPT1vOyloLnB1c2gocikscj1mKCk7ZSYmbnVsbD09KGg9ZShoLHUrKykpfHxzLnB1c2goaCl9cmV0dXJuIHN9LGkuZm9ybWF0PWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZVswXSkpcmV0dXJuIGkuZm9ybWF0Um93cyhlKTt2YXIgcj1uZXcgTCxuPVtdO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXIuaGFzKGUpfHxuLnB1c2goci5hZGQoZSkpfSkpLFtuLm1hcChsKS5qb2luKHQpXS5jb25jYXQoZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGwoZVt0XSl9KSkuam9pbih0KX0pKSkuam9pbigiXG4iKX0saS5mb3JtYXRSb3dzPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5qb2luKCJcbiIpfSxpfSx0LmNzdj10LmRzdigiLCIsInRleHQvY3N2IiksdC50c3Y9dC5kc3YoIlx0IiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBoZSxwZSxkZSxtZSxnZT10aGlzW0kodGhpcywicmVxdWVzdEFuaW1hdGlvbkZyYW1lIildfHxmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiB2ZSh0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtuPDImJihlPTApLG48MyYmKHI9RGF0ZS5ub3coKSk7dmFyIGk9citlLGE9e2M6dCx0OmksbjpudWxsfTtyZXR1cm4gcGU/cGUubj1hOmhlPWEscGU9YSxkZXx8KG1lPWNsZWFyVGltZW91dChtZSksZGU9MSxnZSh5ZSkpLGF9ZnVuY3Rpb24geWUoKXt2YXIgdD14ZSgpLGU9YmUoKS10O2U+MjQ/KGlzRmluaXRlKGUpJiYoY2xlYXJUaW1lb3V0KG1lKSxtZT1zZXRUaW1lb3V0KHllLGUpKSxkZT0wKTooZGU9MSxnZSh5ZSkpfWZ1bmN0aW9uIHhlKCl7Zm9yKHZhciB0PURhdGUubm93KCksZT1oZTtlOyl0Pj1lLnQmJmUuYyh0LWUudCkmJihlLmM9bnVsbCksZT1lLm47cmV0dXJuIHR9ZnVuY3Rpb24gYmUoKXtmb3IodmFyIHQsZT1oZSxyPTEvMDtlOyllLmM/KGUudDxyJiYocj1lLnQpLGU9KHQ9ZSkubik6ZT10P3Qubj1lLm46aGU9ZS5uO3JldHVybiBwZT10LHJ9ZnVuY3Rpb24gX2UodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gd2UodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gVGUodCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9WzAsMV0sbz0yLHM9MjtzPGk7cysrKXtmb3IoO28+MSYmKGU9dFthW28tMl1dLHI9dFthW28tMV1dLG49dFtzXSwoclswXS1lWzBdKSooblsxXS1lWzFdKS0oclsxXS1lWzFdKSooblswXS1lWzBdKTw9MCk7KS0tbzthW28rK109c31yZXR1cm4gYS5zbGljZSgwLG8pfWZ1bmN0aW9uIGtlKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXQudGltZXI9ZnVuY3Rpb24oKXt2ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQudGltZXIuZmx1c2g9ZnVuY3Rpb24oKXt4ZSgpLGJlKCl9LHQucm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9NYXRoLnJvdW5kKHQqKGU9TWF0aC5wb3coMTAsZSkpKS9lOk1hdGgucm91bmQodCl9LHQuZ2VvbT17fSx0Lmdlb20uaHVsbD1mdW5jdGlvbih0KXt2YXIgZT1fZSxyPXdlO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG4odCk7ZnVuY3Rpb24gbih0KXtpZih0Lmxlbmd0aDwzKXJldHVybltdO3ZhciBuLGk9Y2UoZSksYT1jZShyKSxvPXQubGVuZ3RoLHM9W10sbD1bXTtmb3Iobj0wO248bztuKyspcy5wdXNoKFsraS5jYWxsKHRoaXMsdFtuXSxuKSwrYS5jYWxsKHRoaXMsdFtuXSxuKSxuXSk7Zm9yKHMuc29ydChrZSksbj0wO248bztuKyspbC5wdXNoKFtzW25dWzBdLC1zW25dWzFdXSk7dmFyIGM9VGUocyksdT1UZShsKSxmPXVbMF09PT1jWzBdLGg9dVt1Lmxlbmd0aC0xXT09PWNbYy5sZW5ndGgtMV0scD1bXTtmb3Iobj1jLmxlbmd0aC0xO24+PTA7LS1uKXAucHVzaCh0W3NbY1tuXV1bMl1dKTtmb3Iobj0rZjtuPHUubGVuZ3RoLWg7KytuKXAucHVzaCh0W3NbdVtuXV1bMl1dKTtyZXR1cm4gcH1yZXR1cm4gbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbn0sdC5nZW9tLnBvbHlnb249ZnVuY3Rpb24odCl7cmV0dXJuIFUodCxBZSksdH07dmFyIEFlPXQuZ2VvbS5wb2x5Z29uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBNZSh0LGUscil7cmV0dXJuKHJbMF0tZVswXSkqKHRbMV0tZVsxXSk8KHJbMV0tZVsxXSkqKHRbMF0tZVswXSl9ZnVuY3Rpb24gU2UodCxlLHIsbil7dmFyIGk9dFswXSxhPXJbMF0sbz1lWzBdLWkscz1uWzBdLWEsbD10WzFdLGM9clsxXSx1PWVbMV0tbCxmPW5bMV0tYyxoPShzKihsLWMpLWYqKGktYSkpLyhmKm8tcyp1KTtyZXR1cm5baStoKm8sbCtoKnVdfWZ1bmN0aW9uIEVlKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiEoZVswXS1yWzBdfHxlWzFdLXJbMV0pfUFlLmFyZWE9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT0tMSxyPXRoaXMubGVuZ3RoLG49dGhpc1tyLTFdLGk9MDsrK2U8cjspdD1uLG49dGhpc1tlXSxpKz10WzFdKm5bMF0tdFswXSpuWzFdO3JldHVybi41Kml9LEFlLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0tMSxpPXRoaXMubGVuZ3RoLGE9MCxvPTAscz10aGlzW2ktMV07Zm9yKGFyZ3VtZW50cy5sZW5ndGh8fCh0PS0xLyg2KnRoaXMuYXJlYSgpKSk7KytuPGk7KWU9cyxzPXRoaXNbbl0scj1lWzBdKnNbMV0tc1swXSplWzFdLGErPShlWzBdK3NbMF0pKnIsbys9KGVbMV0rc1sxXSkqcjtyZXR1cm5bYSp0LG8qdF19LEFlLmNsaXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbyxzPUVlKHQpLGw9LTEsYz10aGlzLmxlbmd0aC1FZSh0aGlzKSx1PXRoaXNbYy0xXTsrK2w8Yzspe2ZvcihlPXQuc2xpY2UoKSx0Lmxlbmd0aD0wLGk9dGhpc1tsXSxhPWVbKG49ZS5sZW5ndGgtcyktMV0scj0tMTsrK3I8bjspTWUobz1lW3JdLHUsaSk/KE1lKGEsdSxpKXx8dC5wdXNoKFNlKGEsbyx1LGkpKSx0LnB1c2gobykpOk1lKGEsdSxpKSYmdC5wdXNoKFNlKGEsbyx1LGkpKSxhPW87cyYmdC5wdXNoKHRbMF0pLHU9aX1yZXR1cm4gdH07dmFyIExlLENlLFBlLEllLE9lLHplPVtdLERlPVtdO2Z1bmN0aW9uIFJlKCl7ZXIodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEZlKHQpe3ZhciBlPXplLnBvcCgpfHxuZXcgUmU7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gQmUodCl7V2UodCksUGUucmVtb3ZlKHQpLHplLnB1c2godCksZXIodCl9ZnVuY3Rpb24gTmUodCl7dmFyIGU9dC5jaXJjbGUscj1lLngsbj1lLmN5LGk9e3g6cix5Om59LGE9dC5QLG89dC5OLHM9W3RdO0JlKHQpO2Zvcih2YXIgbD1hO2wuY2lyY2xlJiZ5KHItbC5jaXJjbGUueCk8a3QmJnkobi1sLmNpcmNsZS5jeSk8a3Q7KWE9bC5QLHMudW5zaGlmdChsKSxCZShsKSxsPWE7cy51bnNoaWZ0KGwpLFdlKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZ5KHItYy5jaXJjbGUueCk8a3QmJnkobi1jLmNpcmNsZS5jeSk8a3Q7KW89Yy5OLHMucHVzaChjKSxCZShjKSxjPW87cy5wdXNoKGMpLFdlKGMpO3ZhciB1LGY9cy5sZW5ndGg7Zm9yKHU9MTt1PGY7Kyt1KWM9c1t1XSxsPXNbdS0xXSxRZShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sKGM9c1tmLTFdKS5lZGdlPUplKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxZZShsKSxZZShjKX1mdW5jdGlvbiBqZSh0KXtmb3IodmFyIGUscixuLGksYT10Lngsbz10Lnkscz1QZS5fO3M7KWlmKChuPVVlKHMsbyktYSk+a3Qpcz1zLkw7ZWxzZXtpZighKChpPWEtVmUocyxvKSk+a3QpKXtuPi1rdD8oZT1zLlAscj1zKTppPi1rdD8oZT1zLHI9cy5OKTplPXI9czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9dmFyIGw9RmUodCk7aWYoUGUuaW5zZXJ0KGUsbCksZXx8cil7aWYoZT09PXIpcmV0dXJuIFdlKGUpLHI9RmUoZS5zaXRlKSxQZS5pbnNlcnQobCxyKSxsLmVkZ2U9ci5lZGdlPUplKGUuc2l0ZSxsLnNpdGUpLFllKGUpLHZvaWQgWWUocik7aWYocil7V2UoZSksV2Uocik7dmFyIGM9ZS5zaXRlLHU9Yy54LGY9Yy55LGg9dC54LXUscD10LnktZixkPXIuc2l0ZSxtPWQueC11LGc9ZC55LWYsdj0yKihoKmctcCptKSx5PWgqaCtwKnAseD1tKm0rZypnLGI9e3g6KGcqeS1wKngpL3YrdSx5OihoKngtbSp5KS92K2Z9O1FlKHIuZWRnZSxjLGQsYiksbC5lZGdlPUplKGMsdCxudWxsLGIpLHIuZWRnZT1KZSh0LGQsbnVsbCxiKSxZZShlKSxZZShyKX1lbHNlIGwuZWRnZT1KZShlLnNpdGUsbC5zaXRlKX19ZnVuY3Rpb24gVWUodCxlKXt2YXIgcj10LnNpdGUsbj1yLngsaT1yLnksYT1pLWU7aWYoIWEpcmV0dXJuIG47dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7dmFyIHM9KHI9by5zaXRlKS54LGw9ci55LGM9bC1lO2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixmPTEvYS0xL2MsaD11L2M7cmV0dXJuIGY/KC1oK01hdGguc3FydChoKmgtMipmKih1KnUvKC0yKmMpLWwrYy8yK2ktYS8yKSkpL2YrbjoobitzKS8yfWZ1bmN0aW9uIFZlKHQsZSl7dmFyIHI9dC5OO2lmKHIpcmV0dXJuIFVlKHIsZSk7dmFyIG49dC5zaXRlO3JldHVybiBuLnk9PT1lP24ueDoxLzB9ZnVuY3Rpb24gSGUodCl7dGhpcy5zaXRlPXQsdGhpcy5lZGdlcz1bXX1mdW5jdGlvbiBxZSh0LGUpe3JldHVybiBlLmFuZ2xlLXQuYW5nbGV9ZnVuY3Rpb24gR2UoKXtlcih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gWWUodCl7dmFyIGU9dC5QLHI9dC5OO2lmKGUmJnIpe3ZhciBuPWUuc2l0ZSxpPXQuc2l0ZSxhPXIuc2l0ZTtpZihuIT09YSl7dmFyIG89aS54LHM9aS55LGw9bi54LW8sYz1uLnktcyx1PWEueC1vLGY9MioobCooZz1hLnktcyktYyp1KTtpZighKGY+PS0xZS0xMikpe3ZhciBoPWwqbCtjKmMscD11KnUrZypnLGQ9KGcqaC1jKnApL2YsbT0obCpwLXUqaCkvZixnPW0rcyx2PURlLnBvcCgpfHxuZXcgR2U7di5hcmM9dCx2LnNpdGU9aSx2Lng9ZCtvLHYueT1nK01hdGguc3FydChkKmQrbSptKSx2LmN5PWcsdC5jaXJjbGU9djtmb3IodmFyIHk9bnVsbCx4PU9lLl87eDspaWYodi55PHgueXx8di55PT09eC55JiZ2Lng8PXgueCl7aWYoIXguTCl7eT14LlA7YnJlYWt9eD14Lkx9ZWxzZXtpZigheC5SKXt5PXg7YnJlYWt9eD14LlJ9T2UuaW5zZXJ0KHksdikseXx8KEllPXYpfX19fWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXQuY2lyY2xlO2UmJihlLlB8fChJZT1lLk4pLE9lLnJlbW92ZShlKSxEZS5wdXNoKGUpLGVyKGUpLHQuY2lyY2xlPW51bGwpfWZ1bmN0aW9uIFhlKHQsZSl7dmFyIHI9dC5iO2lmKHIpcmV0dXJuITA7dmFyIG4saSxhPXQuYSxvPWVbMF1bMF0scz1lWzFdWzBdLGw9ZVswXVsxXSxjPWVbMV1bMV0sdT10LmwsZj10LnIsaD11LngscD11LnksZD1mLngsbT1mLnksZz0oaCtkKS8yLHY9KHArbSkvMjtpZihtPT09cCl7aWYoZzxvfHxnPj1zKXJldHVybjtpZihoPmQpe2lmKGEpe2lmKGEueT49YylyZXR1cm59ZWxzZSBhPXt4OmcseTpsfTtyPXt4OmcseTpjfX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6Zyx5OmN9O3I9e3g6Zyx5Omx9fX1lbHNlIGlmKGk9di0obj0oaC1kKS8obS1wKSkqZyxuPC0xfHxuPjEpaWYoaD5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDoobC1pKS9uLHk6bH07cj17eDooYy1pKS9uLHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4OihjLWkpL24seTpjfTtyPXt4OihsLWkpL24seTpsfX1lbHNlIGlmKHA8bSl7aWYoYSl7aWYoYS54Pj1zKXJldHVybn1lbHNlIGE9e3g6byx5Om4qbytpfTtyPXt4OnMseTpuKnMraX19ZWxzZXtpZihhKXtpZihhLng8bylyZXR1cm59ZWxzZSBhPXt4OnMseTpuKnMraX07cj17eDpvLHk6bipvK2l9fXJldHVybiB0LmE9YSx0LmI9ciwhMH1mdW5jdGlvbiBaZSh0LGUpe3RoaXMubD10LHRoaXMucj1lLHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBKZSh0LGUscixuKXt2YXIgaT1uZXcgWmUodCxlKTtyZXR1cm4gTGUucHVzaChpKSxyJiZRZShpLHQsZSxyKSxuJiZRZShpLGUsdCxuKSxDZVt0LmldLmVkZ2VzLnB1c2gobmV3ICRlKGksdCxlKSksQ2VbZS5pXS5lZGdlcy5wdXNoKG5ldyAkZShpLGUsdCkpLGl9ZnVuY3Rpb24gS2UodCxlLHIpe3ZhciBuPW5ldyBaZSh0LG51bGwpO3JldHVybiBuLmE9ZSxuLmI9cixMZS5wdXNoKG4pLG59ZnVuY3Rpb24gUWUodCxlLHIsbil7dC5hfHx0LmI/dC5sPT09cj90LmI9bjp0LmE9bjoodC5hPW4sdC5sPWUsdC5yPXIpfWZ1bmN0aW9uICRlKHQsZSxyKXt2YXIgbj10LmEsaT10LmI7dGhpcy5lZGdlPXQsdGhpcy5zaXRlPWUsdGhpcy5hbmdsZT1yP01hdGguYXRhbjIoci55LWUueSxyLngtZS54KTp0Lmw9PT1lP01hdGguYXRhbjIoaS54LW4ueCxuLnktaS55KTpNYXRoLmF0YW4yKG4ueC1pLngsaS55LW4ueSl9ZnVuY3Rpb24gdHIoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBlcih0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIHJyKHQsZSl7dmFyIHI9ZSxuPWUuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBucih0LGUpe3ZhciByPWUsbj1lLkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gaXIodCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIGFyKHQsZSl7dmFyIHIsbixpLGE9dC5zb3J0KG9yKS5wb3AoKTtmb3IoTGU9W10sQ2U9bmV3IEFycmF5KHQubGVuZ3RoKSxQZT1uZXcgdHIsT2U9bmV3IHRyOzspaWYoaT1JZSxhJiYoIWl8fGEueTxpLnl8fGEueT09PWkueSYmYS54PGkueCkpYS54PT09ciYmYS55PT09bnx8KENlW2EuaV09bmV3IEhlKGEpLGplKGEpLHI9YS54LG49YS55KSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztOZShpLmFyYyl9ZSYmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89TGUscz0ocj10WzBdWzBdLG49dFswXVsxXSxpPXRbMV1bMF0sYT10WzFdWzFdLGZ1bmN0aW9uKHQpe3ZhciBlLG89dC5hLHM9dC5iLGw9by54LGM9by55LHU9MCxmPTEsaD1zLngtbCxwPXMueS1jO2lmKGU9ci1sLGh8fCEoZT4wKSl7aWYoZS89aCxoPDApe2lmKGU8dSlyZXR1cm47ZTxmJiYoZj1lKX1lbHNlIGlmKGg+MCl7aWYoZT5mKXJldHVybjtlPnUmJih1PWUpfWlmKGU9aS1sLGh8fCEoZTwwKSl7aWYoZS89aCxoPDApe2lmKGU+ZilyZXR1cm47ZT51JiYodT1lKX1lbHNlIGlmKGg+MCl7aWYoZTx1KXJldHVybjtlPGYmJihmPWUpfWlmKGU9bi1jLHB8fCEoZT4wKSl7aWYoZS89cCxwPDApe2lmKGU8dSlyZXR1cm47ZTxmJiYoZj1lKX1lbHNlIGlmKHA+MCl7aWYoZT5mKXJldHVybjtlPnUmJih1PWUpfWlmKGU9YS1jLHB8fCEoZTwwKSl7aWYoZS89cCxwPDApe2lmKGU+ZilyZXR1cm47ZT51JiYodT1lKX1lbHNlIGlmKHA+MCl7aWYoZTx1KXJldHVybjtlPGYmJihmPWUpfXJldHVybiB1PjAmJih0LmE9e3g6bCt1KmgseTpjK3UqcH0pLGY8MSYmKHQuYj17eDpsK2YqaCx5OmMrZipwfSksdH19fX19KSxsPW8ubGVuZ3RoO2wtLTspKCFYZShlPW9bbF0sdCl8fCFzKGUpfHx5KGUuYS54LWUuYi54KTxrdCYmeShlLmEueS1lLmIueSk8a3QpJiYoZS5hPWUuYj1udWxsLG8uc3BsaWNlKGwsMSkpfShlKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHMsbCxjLHUsZj10WzBdWzBdLGg9dFsxXVswXSxwPXRbMF1bMV0sZD10WzFdWzFdLG09Q2UsZz1tLmxlbmd0aDtnLS07KWlmKChhPW1bZ10pJiZhLnByZXBhcmUoKSlmb3IobD0ocz1hLmVkZ2VzKS5sZW5ndGgsbz0wO288bDspbj0odT1zW29dLmVuZCgpKS54LGk9dS55LGU9KGM9c1srK28lbF0uc3RhcnQoKSkueCxyPWMueSwoeShuLWUpPmt0fHx5KGktcik+a3QpJiYocy5zcGxpY2UobywwLG5ldyAkZShLZShhLnNpdGUsdSx5KG4tZik8a3QmJmQtaT5rdD97eDpmLHk6eShlLWYpPGt0P3I6ZH06eShpLWQpPGt0JiZoLW4+a3Q/e3g6eShyLWQpPGt0P2U6aCx5OmR9Onkobi1oKTxrdCYmaS1wPmt0P3t4OmgseTp5KGUtaCk8a3Q/cjpwfTp5KGktcCk8a3QmJm4tZj5rdD97eDp5KHItcCk8a3Q/ZTpmLHk6cH06bnVsbCksYS5zaXRlLG51bGwpKSwrK2wpfShlKSk7dmFyIG89e2NlbGxzOkNlLGVkZ2VzOkxlfTtyZXR1cm4gUGU9T2U9TGU9Q2U9bnVsbCxvfWZ1bmN0aW9uIG9yKHQsZSl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9SGUucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLmVkZ2VzLHI9ZS5sZW5ndGg7ci0tOykodD1lW3JdLmVkZ2UpLmImJnQuYXx8ZS5zcGxpY2UociwxKTtyZXR1cm4gZS5zb3J0KHFlKSxlLmxlbmd0aH0sJGUucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sdHIucHJvdG90eXBlPXtpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7cj10fWVsc2UgdGhpcy5fPyh0PWlyKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLHI9dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxyPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPXIsZS5DPSEwLHQ9ZTtyJiZyLkM7KXI9PT0obj1yLlUpLkw/KGk9bi5SKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYocnIodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsbnIodGhpcyxuKSk6KGk9bi5MKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5MJiYobnIodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAscnIodGhpcyxuKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9pcihvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAscnIodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxucih0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxycih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsbnIodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxycih0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxucih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdC5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7dmFyIGU9X2Uscj13ZSxuPWUsaT1yLGE9c3I7aWYodClyZXR1cm4gbyh0KTtmdW5jdGlvbiBvKHQpe3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj1hWzBdWzBdLG49YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBhcihzKHQpLGEpLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKGEscyl7dmFyIGw9YS5lZGdlcyxjPWEuc2l0ZTsoZVtzXT1sLmxlbmd0aD9sLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5zdGFydCgpO3JldHVybltlLngsZS55XX0pKTpjLng+PXImJmMueDw9aSYmYy55Pj1uJiZjLnk8PW8/W1tyLG9dLFtpLG9dLFtpLG5dLFtyLG5dXTpbXSkucG9pbnQ9dFtzXX0pKSxlfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4Ok1hdGgucm91bmQobih0LGUpL2t0KSprdCx5Ok1hdGgucm91bmQoaSh0LGUpL2t0KSprdCxpOmV9fSkpfXJldHVybiBvLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcihzKHQpKS5lZGdlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dFtlLmwuaV0sdGFyZ2V0OnRbZS5yLmldfX0pKX0sby50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGFyKHModCkpLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpLGEsbyxzLGw9ci5zaXRlLGM9ci5lZGdlcy5zb3J0KHFlKSx1PS0xLGY9Yy5sZW5ndGgsaD1jW2YtMV0uZWRnZSxwPWgubD09PWw/aC5yOmgubDsrK3U8ZjspaCxpPXAscD0oaD1jW3VdLmVkZ2UpLmw9PT1sP2gucjpoLmwsbjxpLmkmJm48cC5pJiYobz1pLHM9cCwoKGE9bCkueC1zLngpKihvLnktYS55KS0oYS54LW8ueCkqKHMueS1hLnkpPDApJiZlLnB1c2goW3Rbbl0sdFtpLmldLHRbcC5pXV0pfSkpLGV9LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jZShlPXQpLG8pOmV9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1jZShyPXQpLG8pOnJ9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P3NyOnQsbyk6YT09PXNyP251bGw6YX0sby5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28uY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOmE9PT1zcj9udWxsOmEmJmFbMV19LG99O3ZhciBzcj1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtmdW5jdGlvbiBscih0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGNyKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gdXIodCxlLHIsbixpLGEpe2lmKCF0KGUscixuLGksYSkpe3ZhciBvPS41KihyK2kpLHM9LjUqKG4rYSksbD1lLm5vZGVzO2xbMF0mJnVyKHQsbFswXSxyLG4sbyxzKSxsWzFdJiZ1cih0LGxbMV0sbyxuLGkscyksbFsyXSYmdXIodCxsWzJdLHIscyxvLGEpLGxbM10mJnVyKHQsbFszXSxvLHMsaSxhKX19ZnVuY3Rpb24gZnIodCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQoYyx1LGYsaCxwKXtpZighKHU+YXx8Zj5vfHxoPG58fHA8aSkpe2lmKGQ9Yy5wb2ludCl7dmFyIGQsbT1lLWMueCxnPXItYy55LHY9bSptK2cqZztpZih2PGwpe3ZhciB5PU1hdGguc3FydChsPXYpO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9ZH19Zm9yKHZhciB4PWMubm9kZXMsYj0uNSoodStoKSxfPS41KihmK3ApLHc9KHI+PV8pPDwxfGU+PWIsVD13KzQ7dzxUOysrdylpZihjPXhbMyZ3XSlzd2l0Y2goMyZ3KXtjYXNlIDA6dChjLHUsZixiLF8pO2JyZWFrO2Nhc2UgMTp0KGMsYixmLGgsXyk7YnJlYWs7Y2FzZSAyOnQoYyx1LF8sYixwKTticmVhaztjYXNlIDM6dChjLGIsXyxoLHApfX19KHQsbixpLGEsbyksc31mdW5jdGlvbiBocihlLHIpe2U9dC5yZ2IoZSkscj10LnJnYihyKTt2YXIgbj1lLnIsaT1lLmcsYT1lLmIsbz1yLnItbixzPXIuZy1pLGw9ci5iLWE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiIjIityZShNYXRoLnJvdW5kKG4rbyp0KSkrcmUoTWF0aC5yb3VuZChpK3MqdCkpK3JlKE1hdGgucm91bmQoYStsKnQpKX19ZnVuY3Rpb24gcHIodCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gdClyIGluIGU/bltyXT15cih0W3JdLGVbcl0pOmlbcl09dFtyXTtmb3IociBpbiBlKXIgaW4gdHx8KGlbcl09ZVtyXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBkcih0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiBtcih0LGUpe3ZhciByLG4saSxhPWdyLmxhc3RJbmRleD12ci5sYXN0SW5kZXg9MCxvPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KHI9Z3IuZXhlYyh0KSkmJihuPXZyLmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDpkcihyLG4pfSkpLGE9dnIubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9sWzBdPyhlPWxbMF0ueCxmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn0pOmZ1bmN0aW9uKCl7cmV0dXJuIGV9OihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTA7bjxlOysrbilzWyhyPWxbbl0pLmldPXIueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfXQuZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXMoZSl9LHQuZ2VvbS5xdWFkdHJlZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG89X2Uscz13ZTtpZihhPWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG89bHIscz1jciwzPT09YSYmKGk9cixuPWUscj1lPTApLGwodCk7ZnVuY3Rpb24gbCh0KXt2YXIgbCxjLHUsZixoLHAsZCxtLGcsdj1jZShvKSx4PWNlKHMpO2lmKG51bGwhPWUpcD1lLGQ9cixtPW4sZz1pO2Vsc2UgaWYobT1nPS0ocD1kPTEvMCksYz1bXSx1PVtdLGg9dC5sZW5ndGgsYSlmb3IoZj0wO2Y8aDsrK2YpKGw9dFtmXSkueDxwJiYocD1sLngpLGwueTxkJiYoZD1sLnkpLGwueD5tJiYobT1sLngpLGwueT5nJiYoZz1sLnkpLGMucHVzaChsLngpLHUucHVzaChsLnkpO2Vsc2UgZm9yKGY9MDtmPGg7KytmKXt2YXIgYj0rdihsPXRbZl0sZiksXz0reChsLGYpO2I8cCYmKHA9YiksXzxkJiYoZD1fKSxiPm0mJihtPWIpLF8+ZyYmKGc9XyksYy5wdXNoKGIpLHUucHVzaChfKX12YXIgdz1tLXAsVD1nLWQ7ZnVuY3Rpb24gayh0LGUscixuLGksYSxvLHMpe2lmKCFpc05hTihyKSYmIWlzTmFOKG4pKWlmKHQubGVhZil7dmFyIGw9dC54LGM9dC55O2lmKG51bGwhPWwpaWYoeShsLXIpK3koYy1uKTwuMDEpQSh0LGUscixuLGksYSxvLHMpO2Vsc2V7dmFyIHU9dC5wb2ludDt0Lng9dC55PXQucG9pbnQ9bnVsbCxBKHQsdSxsLGMsaSxhLG8scyksQSh0LGUscixuLGksYSxvLHMpfWVsc2UgdC54PXIsdC55PW4sdC5wb2ludD1lfWVsc2UgQSh0LGUscixuLGksYSxvLHMpfWZ1bmN0aW9uIEEodCxlLHIsbixpLGEsbyxzKXt2YXIgbD0uNSooaStvKSxjPS41KihhK3MpLHU9cj49bCxmPW4+PWMsaD1mPDwxfHU7dC5sZWFmPSExLHU/aT1sOm89bCxmP2E9YzpzPWMsayh0PXQubm9kZXNbaF18fCh0Lm5vZGVzW2hdPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH0pLGUscixuLGksYSxvLHMpfXc+VD9nPWQrdzptPXArVDt2YXIgTT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe2soTSx0LCt2KHQsKytmKSwreCh0LGYpLHAsZCxtLGcpfSx2aXNpdDpmdW5jdGlvbih0KXt1cih0LE0scCxkLG0sZyl9LGZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZyKE0sdFswXSx0WzFdLHAsZCxtLGcpfX07aWYoZj0tMSxudWxsPT1lKXtmb3IoOysrZjxoOylrKE0sdFtmXSxjW2ZdLHVbZl0scCxkLG0sZyk7LS1mfWVsc2UgdC5mb3JFYWNoKE0uYWRkKTtyZXR1cm4gYz11PXQ9bD1udWxsLE19cmV0dXJuIGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGwpOnN9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksbCk6bnVsbD09ZT9udWxsOltbZSxyXSxbbixpXV19LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9cj0wLG49K3RbMF0saT0rdFsxXSksbCk6bnVsbD09ZT9udWxsOltuLWUsaS1yXX0sbH0sdC5pbnRlcnBvbGF0ZVJnYj1ocix0LmludGVycG9sYXRlT2JqZWN0PXByLHQuaW50ZXJwb2xhdGVOdW1iZXI9ZHIsdC5pbnRlcnBvbGF0ZVN0cmluZz1tcjt2YXIgZ3I9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHZyPW5ldyBSZWdFeHAoZ3Iuc291cmNlLCJnIik7ZnVuY3Rpb24geXIoZSxyKXtmb3IodmFyIG4saT10LmludGVycG9sYXRvcnMubGVuZ3RoOy0taT49MCYmIShuPXQuaW50ZXJwb2xhdG9yc1tpXShlLHIpKTspO3JldHVybiBufWZ1bmN0aW9uIHhyKHQsZSl7dmFyIHIsbj1bXSxpPVtdLGE9dC5sZW5ndGgsbz1lLmxlbmd0aCxzPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3Iocj0wO3I8czsrK3Ipbi5wdXNoKHlyKHRbcl0sZVtyXSkpO2Zvcig7cjxhOysrcilpW3JdPXRbcl07Zm9yKDtyPG87KytyKWlbcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPHM7KytyKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dC5pbnRlcnBvbGF0ZT15cix0LmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIGU7cmV0dXJuKCJzdHJpbmciPT09cj9sZS5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcKHxoc2xcKCkvaS50ZXN0KGUpP2hyOm1yOmUgaW5zdGFuY2VvZiBGdD9ocjpBcnJheS5pc0FycmF5KGUpP3hyOiJvYmplY3QiPT09ciYmaXNOYU4oZSk/cHI6ZHIpKHQsZSl9XSx0LmludGVycG9sYXRlQXJyYXk9eHI7dmFyIGJyPWZ1bmN0aW9uKCl7cmV0dXJuIEN9LF9yPXQubWFwKHtsaW5lYXI6YnIscG9seTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KGUsdCl9fSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIE1yfSxjdWJpYzpmdW5jdGlvbigpe3JldHVybiBTcn0sc2luOmZ1bmN0aW9uKCl7cmV0dXJuIExyfSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gQ3J9LGNpcmNsZTpmdW5jdGlvbigpe3JldHVybiBQcn0sZWxhc3RpYzpmdW5jdGlvbih0LGUpe3ZhciByO2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9LjQ1KTthcmd1bWVudHMubGVuZ3RoP3I9ZS9NdCpNYXRoLmFzaW4oMS90KToodD0xLHI9ZS80KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIDErdCpNYXRoLnBvdygyLC0xMCpuKSpNYXRoLnNpbigobi1yKSpNdC9lKX19LGJhY2s6ZnVuY3Rpb24odCl7dHx8KHQ9MS43MDE1OCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlKmUqKCh0KzEpKmUtdCl9fSxib3VuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gSXJ9fSksd3I9dC5tYXAoe2luOkMsb3V0OmtyLCJpbi1vdXQiOkFyLCJvdXQtaW4iOmZ1bmN0aW9uKHQpe3JldHVybiBBcihrcih0KSl9fSk7ZnVuY3Rpb24gVHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPD0wPzA6ZT49MT8xOnQoZSl9fWZ1bmN0aW9uIGtyKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMS10KDEtZSl9fWZ1bmN0aW9uIEFyKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4uNSooZTwuNT90KDIqZSk6Mi10KDItMiplKSl9fWZ1bmN0aW9uIE1yKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gU3IodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIEVyKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX1mdW5jdGlvbiBMcih0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkV0KX1mdW5jdGlvbiBDcih0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCoodC0xKSl9ZnVuY3Rpb24gUHIodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX1mdW5jdGlvbiBJcih0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIGUtPXQsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX1mdW5jdGlvbiB6cih0KXt2YXIgZSxyLG4saT1bdC5hLHQuYl0sYT1bdC5jLHQuZF0sbz1ScihpKSxzPURyKGksYSksbD1ScigoKGU9YSlbMF0rPShuPS1zKSoocj1pKVswXSxlWzFdKz1uKnJbMV0sZSkpfHwwO2lbMF0qYVsxXTxhWzBdKmlbMV0mJihpWzBdKj0tMSxpWzFdKj0tMSxvKj0tMSxzKj0tMSksdGhpcy5yb3RhdGU9KG8/TWF0aC5hdGFuMihpWzFdLGlbMF0pOk1hdGguYXRhbjIoLWFbMF0sYVsxXSkpKkN0LHRoaXMudHJhbnNsYXRlPVt0LmUsdC5mXSx0aGlzLnNjYWxlPVtvLGxdLHRoaXMuc2tldz1sP01hdGguYXRhbjIocyxsKSpDdDowfWZ1bmN0aW9uIERyKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV19ZnVuY3Rpb24gUnIodCl7dmFyIGU9TWF0aC5zcXJ0KERyKHQsdCkpO3JldHVybiBlJiYodFswXS89ZSx0WzFdLz1lKSxlfXQuZWFzZT1mdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi0iKSxuPWU+PTA/dC5zbGljZSgwLGUpOnQsaT1lPj0wP3Quc2xpY2UoZSsxKToiaW4iO3JldHVybiBuPV9yLmdldChuKXx8YnIsVHIoKGk9d3IuZ2V0KGkpfHxDKShuLmFwcGx5KG51bGwsci5jYWxsKGFyZ3VtZW50cywxKSkpKX0sdC5pbnRlcnBvbGF0ZUhjbD1mdW5jdGlvbihlLHIpe2U9dC5oY2woZSkscj10LmhjbChyKTt2YXIgbj1lLmgsaT1lLmMsYT1lLmwsbz1yLmgtbixzPXIuYy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLmM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEh0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVIc2w9ZnVuY3Rpb24oZSxyKXtlPXQuaHNsKGUpLHI9dC5oc2wocik7dmFyIG49ZS5oLGk9ZS5zLGE9ZS5sLG89ci5oLW4scz1yLnMtaSxsPXIubC1hO2lzTmFOKHMpJiYocz0wLGk9aXNOYU4oaSk/ci5zOmkpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBqdChuK28qdCxpK3MqdCxhK2wqdCkrIiJ9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKGUscil7ZT10LmxhYihlKSxyPXQubGFiKHIpO3ZhciBuPWUubCxpPWUuYSxhPWUuYixvPXIubC1uLHM9ci5hLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFd0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVSb3VuZD1Pcix0LnRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgcj1pLmNyZWF0ZUVsZW1lbnROUyh0Lm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4odC50cmFuc2Zvcm09ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCk7dmFyIGU9ci50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgenIoZT9lLm1hdHJpeDpGcil9KShlKX0senIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBGcj17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O2Z1bmN0aW9uIEJyKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIsIjoiIn1mdW5jdGlvbiBOcihlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIGU9dC50cmFuc2Zvcm0oZSkscj10LnRyYW5zZm9ybShyKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpkcih0WzBdLGVbMF0pfSx7aTppLTIseDpkcih0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKCJ0cmFuc2xhdGUoIitlKyIpIil9KGUudHJhbnNsYXRlLHIudHJhbnNsYXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goQnIocikrInJvdGF0ZSgiLG51bGwsIikiKS0yLHg6ZHIodCxlKX0pKTplJiZyLnB1c2goQnIocikrInJvdGF0ZSgiK2UrIikiKX0oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKEJyKHIpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6ZHIodCxlKX0pOmUmJnIucHVzaChCcihyKSsic2tld1goIitlKyIpIil9KGUuc2tldyxyLnNrZXcsbixpKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChCcihyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmRyKHRbMF0sZVswXSl9LHtpOmktMix4OmRyKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKEJyKHIpKyJzY2FsZSgiK2UrIikiKX0oZS5zY2FsZSxyLnNjYWxlLG4saSksZT1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsYT1pLmxlbmd0aDsrK3I8YTspblsoZT1pW3JdKS5pXT1lLngodCk7cmV0dXJuIG4uam9pbigiIil9fWZ1bmN0aW9uIGpyKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gVXIodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24gVnIodCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPUhyKHQpLG49SHIoZSksaT1yLnBvcCgpLGE9bi5wb3AoKSxvPW51bGw7Zm9yKDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99KGUsciksaT1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsaS5wdXNoKGUpO2Zvcih2YXIgYT1pLmxlbmd0aDtyIT09bjspaS5zcGxpY2UoYSwwLHIpLHI9ci5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24gSHIodCl7Zm9yKHZhciBlPVtdLHI9dC5wYXJlbnQ7bnVsbCE9cjspZS5wdXNoKHQpLHQ9cixyPXIucGFyZW50O3JldHVybiBlLnB1c2godCksZX1mdW5jdGlvbiBxcih0KXt0LmZpeGVkfD0yfWZ1bmN0aW9uIEdyKHQpe3QuZml4ZWQmPS03fWZ1bmN0aW9uIFlyKHQpe3QuZml4ZWR8PTQsdC5weD10LngsdC5weT10Lnl9ZnVuY3Rpb24gV3IodCl7dC5maXhlZCY9LTV9dC5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1Ocix0LmxheW91dD17fSx0LmxheW91dC5idW5kbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZS5wdXNoKFZyKHRbcl0pKTtyZXR1cm4gZX19LHQubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbD17fSxjPTA7ZnVuY3Rpb24gdSgpe3ZhciBsLHUsaCxwLGQsbT17fSxnPVtdLHY9dC5yYW5nZShpKSx5PVtdO2ZvcihlPVtdLHI9W10sbD0wLHA9LTE7KytwPGk7KXtmb3IodT0wLGQ9LTE7KytkPGk7KXUrPW5bcF1bZF07Zy5wdXNoKHUpLHkucHVzaCh0LnJhbmdlKGkpKSxsKz11fWZvcihhJiZ2LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoZ1t0XSxnW2VdKX0pKSxvJiZ5LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBvKG5bZV1bdF0sbltlXVtyXSl9KSl9KSksbD0oTXQtYyppKS9sLHU9MCxwPS0xOysrcDxpOyl7Zm9yKGg9dSxkPS0xOysrZDxpOyl7dmFyIHg9dltwXSxiPXlbeF1bZF0sXz1uW3hdW2JdLHc9dSxUPXUrPV8qbDttW3grIi0iK2JdPXtpbmRleDp4LHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOlQsdmFsdWU6X319clt4XT17aW5kZXg6eCxzdGFydEFuZ2xlOmgsZW5kQW5nbGU6dSx2YWx1ZTpnW3hdfSx1Kz1jfWZvcihwPS0xOysrcDxpOylmb3IoZD1wLTE7KytkPGk7KXt2YXIgaz1tW3ArIi0iK2RdLEE9bVtkKyItIitwXTsoay52YWx1ZXx8QS52YWx1ZSkmJmUucHVzaChrLnZhbHVlPEEudmFsdWU/e3NvdXJjZTpBLHRhcmdldDprfTp7c291cmNlOmssdGFyZ2V0OkF9KX1zJiZmKCl9ZnVuY3Rpb24gZigpe2Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcygodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUpLzIsKGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKS8yKX0pKX1yZXR1cm4gbC5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KG49dCkmJm4ubGVuZ3RoLGU9cj1udWxsLGwpOm59LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGU9cj1udWxsLGwpOmN9LGwuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGU9cj1udWxsLGwpOmF9LGwuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGU9bnVsbCxsKTpvfSxsLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlJiZmKCksbCk6c30sbC5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8dSgpLGV9LGwuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fHUoKSxyfSxsfSx0LmxheW91dC5mb3JjZT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzPXt9LGw9dC5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIiksYz1bMSwxXSx1PS45LGY9WHIsaD1acixwPS0zMCxkPUpyLG09LjEsZz0uNjQsdj1bXSx5PVtdO2Z1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe2lmKGUucG9pbnQhPT10KXt2YXIgYT1lLmN4LXQueCxvPWUuY3ktdC55LHM9aS1yLGw9YSphK28qbztpZihzKnMvZzxsKXtpZihsPGQpe3ZhciBjPWUuY2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY31yZXR1cm4hMH1pZihlLnBvaW50JiZsJiZsPGQpe2M9ZS5wb2ludENoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9fXJldHVybiFlLmNoYXJnZX19ZnVuY3Rpb24gYihlKXtlLnB4PXQuZXZlbnQueCxlLnB5PXQuZXZlbnQueSxzLnJlc3VtZSgpfXJldHVybiBzLnRpY2s9ZnVuY3Rpb24oKXtpZigobio9Ljk5KTwuMDA1KXJldHVybiBlPW51bGwsbC5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6bj0wfSksITA7dmFyIHIscyxmLGgsZCxnLGIsXyx3LFQ9di5sZW5ndGgsaz15Lmxlbmd0aDtmb3Iocz0wO3M8azsrK3MpaD0oZj15W3NdKS5zb3VyY2UsKGc9KF89KGQ9Zi50YXJnZXQpLngtaC54KSpfKyh3PWQueS1oLnkpKncpJiYoXyo9Zz1uKmFbc10qKChnPU1hdGguc3FydChnKSktaVtzXSkvZyx3Kj1nLGQueC09XyooYj1oLndlaWdodCtkLndlaWdodD9oLndlaWdodC8oaC53ZWlnaHQrZC53ZWlnaHQpOi41KSxkLnktPXcqYixoLngrPV8qKGI9MS1iKSxoLnkrPXcqYik7aWYoKGI9biptKSYmKF89Y1swXS8yLHc9Y1sxXS8yLHM9LTEsYikpZm9yKDsrK3M8VDspKGY9dltzXSkueCs9KF8tZi54KSpiLGYueSs9KHctZi55KSpiO2lmKHApZm9yKCFmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wLGE9MDtpZihlLmNoYXJnZT0wLCFlLmxlYWYpZm9yKHZhciBvLHM9ZS5ub2RlcyxsPXMubGVuZ3RoLGM9LTE7KytjPGw7KW51bGwhPShvPXNbY10pJiYodChvLHIsbiksZS5jaGFyZ2UrPW8uY2hhcmdlLGkrPW8uY2hhcmdlKm8uY3gsYSs9by5jaGFyZ2Uqby5jeSk7aWYoZS5wb2ludCl7ZS5sZWFmfHwoZS5wb2ludC54Kz1NYXRoLnJhbmRvbSgpLS41LGUucG9pbnQueSs9TWF0aC5yYW5kb20oKS0uNSk7dmFyIHU9cipuW2UucG9pbnQuaW5kZXhdO2UuY2hhcmdlKz1lLnBvaW50Q2hhcmdlPXUsaSs9dSplLnBvaW50LngsYSs9dSplLnBvaW50Lnl9ZS5jeD1pL2UuY2hhcmdlLGUuY3k9YS9lLmNoYXJnZX0ocj10Lmdlb20ucXVhZHRyZWUodiksbixvKSxzPS0xOysrczxUOykoZj12W3NdKS5maXhlZHx8ci52aXNpdCh4KGYpKTtmb3Iocz0tMTsrK3M8VDspKGY9dltzXSkuZml4ZWQ/KGYueD1mLnB4LGYueT1mLnB5KTooZi54LT0oZi5weC0oZi5weD1mLngpKSp1LGYueS09KGYucHktKGYucHk9Zi55KSkqdSk7bC50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpufSl9LHMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCxzKTp2fSxzLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXQscyk6eX0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQscyk6Y30scy5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpmfSxzLmRpc3RhbmNlPXMubGlua0Rpc3RhbmNlLHMubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6aH0scy5mcmljdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxzKTp1fSxzLmNoYXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOnB9LHMuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCp0LHMpOk1hdGguc3FydChkKX0scy5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSt0LHMpOm19LHMudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dCp0LHMpOk1hdGguc3FydChnKX0scy5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxuP3Q+MD9uPXQ6KGUuYz1udWxsLGUudD1OYU4sZT1udWxsLGwuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pKTp0PjAmJihsLnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6bj10fSksZT12ZShzLnRpY2spKSxzKTpufSxzLnN0YXJ0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49di5sZW5ndGgsbD15Lmxlbmd0aCx1PWNbMF0sZD1jWzFdO2Zvcih0PTA7dDxuOysrdCkocj12W3RdKS5pbmRleD10LHIud2VpZ2h0PTA7Zm9yKHQ9MDt0PGw7Kyt0KSJudW1iZXIiPT10eXBlb2Yocj15W3RdKS5zb3VyY2UmJihyLnNvdXJjZT12W3Iuc291cmNlXSksIm51bWJlciI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PXZbci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO3Q8bjsrK3Qpcj12W3RdLGlzTmFOKHIueCkmJihyLng9bSgieCIsdSkpLGlzTmFOKHIueSkmJihyLnk9bSgieSIsZCkpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKGk9W10sImZ1bmN0aW9uIj09dHlwZW9mIGYpZm9yKHQ9MDt0PGw7Kyt0KWlbdF09K2YuY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpaVt0XT1mO2lmKGE9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9yKHQ9MDt0PGw7Kyt0KWFbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpYVt0XT1oO2lmKG89W10sImZ1bmN0aW9uIj09dHlwZW9mIHApZm9yKHQ9MDt0PG47Kyt0KW9bdF09K3AuY2FsbCh0aGlzLHZbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bjsrK3Qpb1t0XT1wO2Z1bmN0aW9uIG0ocixpKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KG4pLGM9MDtjPG47KytjKWVbY109W107Zm9yKGM9MDtjPGw7KytjKXt2YXIgYT15W2NdO2VbYS5zb3VyY2UuaW5kZXhdLnB1c2goYS50YXJnZXQpLGVbYS50YXJnZXQuaW5kZXhdLnB1c2goYS5zb3VyY2UpfX1mb3IodmFyIG8scz1lW3RdLGM9LTEsdT1zLmxlbmd0aDsrK2M8dTspaWYoIWlzTmFOKG89c1tjXVtyXSkpcmV0dXJuIG87cmV0dXJuIE1hdGgucmFuZG9tKCkqaX1yZXR1cm4gcy5yZXN1bWUoKX0scy5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSguMSl9LHMuc3RvcD1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKDApfSxzLmRyYWc9ZnVuY3Rpb24oKXtpZihyfHwocj10LmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oQykub24oImRyYWdzdGFydC5mb3JjZSIscXIpLm9uKCJkcmFnLmZvcmNlIixiKS5vbigiZHJhZ2VuZC5mb3JjZSIsR3IpKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjt0aGlzLm9uKCJtb3VzZW92ZXIuZm9yY2UiLFlyKS5vbigibW91c2VvdXQuZm9yY2UiLFdyKS5jYWxsKHIpfSx0LnJlYmluZChzLGwsIm9uIil9O3ZhciBYcj0yMCxacj0xLEpyPTEvMDtmdW5jdGlvbiBLcihlLHIpe3JldHVybiB0LnJlYmluZChlLHIsInNvcnQiLCJjaGlsZHJlbiIsInZhbHVlIiksZS5ub2Rlcz1lLGUubGlua3M9bm4sZX1mdW5jdGlvbiBRcih0LGUpe2Zvcih2YXIgcj1bdF07bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKGUodCksKGk9dC5jaGlsZHJlbikmJihuPWkubGVuZ3RoKSlmb3IodmFyIG4saTstLW4+PTA7KXIucHVzaChpW25dKX1mdW5jdGlvbiAkcih0LGUpe2Zvcih2YXIgcj1bdF0sbj1bXTtudWxsIT0odD1yLnBvcCgpKTspaWYobi5wdXNoKHQpLChhPXQuY2hpbGRyZW4pJiYoaT1hLmxlbmd0aCkpZm9yKHZhciBpLGEsbz0tMTsrK288aTspci5wdXNoKGFbb10pO2Zvcig7bnVsbCE9KHQ9bi5wb3AoKSk7KWUodCl9ZnVuY3Rpb24gdG4odCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gZW4odCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gcm4odCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfWZ1bmN0aW9uIG5uKGUpe3JldHVybiB0Lm1lcmdlKGUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTp0LHRhcmdldDplfX0pKX0pKSl9dC5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7dmFyIHQ9cm4sZT10bixyPWVuO2Z1bmN0aW9uIG4oaSl7dmFyIGEsbz1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShhPW8ucG9wKCkpOylpZihzLnB1c2goYSksKGM9ZS5jYWxsKG4sYSxhLmRlcHRoKSkmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLGMsdTstLWw+PTA7KW8ucHVzaCh1PWNbbF0pLHUucGFyZW50PWEsdS5kZXB0aD1hLmRlcHRoKzE7ciYmKGEudmFsdWU9MCksYS5jaGlsZHJlbj1jfWVsc2UgciYmKGEudmFsdWU9K3IuY2FsbChuLGEsYS5kZXB0aCl8fDApLGRlbGV0ZSBhLmNoaWxkcmVuO3JldHVybiAkcihpLChmdW5jdGlvbihlKXt2YXIgbixpO3QmJihuPWUuY2hpbGRyZW4pJiZuLnNvcnQodCksciYmKGk9ZS5wYXJlbnQpJiYoaS52YWx1ZSs9ZS52YWx1ZSl9KSksc31yZXR1cm4gbi5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jaGlsZHJlbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLnJldmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHImJihRcih0LChmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pKSwkcih0LChmdW5jdGlvbih0KXt2YXIgZTt0LmNoaWxkcmVufHwodC52YWx1ZT0rci5jYWxsKG4sdCx0LmRlcHRoKXx8MCksKGU9dC5wYXJlbnQpJiYoZS52YWx1ZSs9dC52YWx1ZSl9KSkpLHR9LG59LHQubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLHI9WzEsMV07ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuY2FsbCh0aGlzLHQsbik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cixlLnk9ZS5kZXB0aCppLGUuZHg9bixlLmR5PWksYSYmKG89YS5sZW5ndGgpKXt2YXIgbyxzLGwsYz0tMTtmb3Iobj1lLnZhbHVlP24vZS52YWx1ZTowOysrYzxvOyl0KHM9YVtjXSxyLGw9cy52YWx1ZSpuLGkpLHIrPWx9fShpWzBdLDAsclswXSxyWzFdL2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPTA7aWYociYmKGk9ci5sZW5ndGgpKWZvcih2YXIgaSxhPS0xOysrYTxpOyluPU1hdGgubWF4KG4sdChyW2FdKSk7cmV0dXJuIDErbn0oaVswXSkpLGl9cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LEtyKG4sZSl9LHQubGF5b3V0LnBpZT1mdW5jdGlvbigpe3ZhciBlPU51bWJlcixyPWFuLG49MCxpPU10LGE9MDtmdW5jdGlvbiBvKHMpe3ZhciBsLGM9cy5sZW5ndGgsdT1zLm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4rZS5jYWxsKG8sdCxyKX0pKSxmPSsoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksaD0oImZ1bmN0aW9uIj09dHlwZW9mIGk/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aSktZixwPU1hdGgubWluKE1hdGguYWJzKGgpL2MsKygiZnVuY3Rpb24iPT10eXBlb2YgYT9hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphKSksZD1wKihoPDA/LTE6MSksbT10LnN1bSh1KSxnPW0/KGgtYypkKS9tOjAsdj10LnJhbmdlKGMpLHk9W107cmV0dXJuIG51bGwhPXImJnYuc29ydChyPT09YW4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdVtlXS11W3RdfTpmdW5jdGlvbih0LGUpe3JldHVybiByKHNbdF0sc1tlXSl9KSx2LmZvckVhY2goKGZ1bmN0aW9uKHQpe3lbdF09e2RhdGE6c1t0XSx2YWx1ZTpsPXVbdF0sc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOmYrPWwqZytkLHBhZEFuZ2xlOnB9fSkpLHl9cmV0dXJuIG8udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxvKTpyfSxvLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxvKTpufSxvLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG8pOmF9LG99O3ZhciBhbj17fTtmdW5jdGlvbiBvbih0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIHNuKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gbG4odCxlLHIpe3QueTA9ZSx0Lnk9cn10LmxheW91dC5zdGFjaz1mdW5jdGlvbigpe3ZhciBlPUMscj1mbixuPWhuLGk9bG4sYT1vbixvPXNuO2Z1bmN0aW9uIHMobCxjKXtpZighKHA9bC5sZW5ndGgpKXJldHVybiBsO3ZhciB1PWwubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlLmNhbGwocyx0LHIpfSkpLGY9dS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm5bYS5jYWxsKHMsdCxlKSxvLmNhbGwocyx0LGUpXX0pKX0pKSxoPXIuY2FsbChzLGYsYyk7dT10LnBlcm11dGUodSxoKSxmPXQucGVybXV0ZShmLGgpO3ZhciBwLGQsbSxnLHY9bi5jYWxsKHMsZixjKSx5PXVbMF0ubGVuZ3RoO2ZvcihtPTA7bTx5OysrbSlmb3IoaS5jYWxsKHMsdVswXVttXSxnPXZbbV0sZlswXVttXVsxXSksZD0xO2Q8cDsrK2QpaS5jYWxsKHMsdVtkXVttXSxnKz1mW2QtMV1bbV1bMV0sZltkXVttXVsxXSk7cmV0dXJuIGx9cmV0dXJuIHMudmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNuLmdldCh0KXx8Zm4scyk6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1bi5nZXQodCl8fGhuLHMpOm59LHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHMpOmF9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHMub3V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscyk6aX0sc307dmFyIGNuPXQubWFwKHsiaW5zaWRlLW91dCI6ZnVuY3Rpb24oZSl7dmFyIHIsbixpPWUubGVuZ3RoLGE9ZS5tYXAocG4pLG89ZS5tYXAoZG4pLHM9dC5yYW5nZShpKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBhW3RdLWFbZV19KSksbD0wLGM9MCx1PVtdLGY9W107Zm9yKHI9MDtyPGk7KytyKW49c1tyXSxsPGM/KGwrPW9bbl0sdS5wdXNoKG4pKTooYys9b1tuXSxmLnB1c2gobikpO3JldHVybiBmLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpLnJldmVyc2UoKX0sZGVmYXVsdDpmbn0pLHVuPXQubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz1bXSxzPTAsbD1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtuPnMmJihzPW4pLG8ucHVzaChuKX1mb3Iocj0wO3I8YTsrK3IpbFtyXT0ocy1vW3JdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHU9dC5sZW5ndGgsZj10WzBdLGg9Zi5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxyPTE7cjxoOysrcil7Zm9yKGU9MCxpPTA7ZTx1OysrZSlpKz10W2VdW3JdWzFdO2ZvcihlPTAsYT0wLHM9ZltyXVswXS1mW3ItMV1bMF07ZTx1OysrZSl7Zm9yKG49MCxvPSh0W2VdW3JdWzFdLXRbZV1bci0xXVsxXSkvKDIqcyk7bjxlOysrbilvKz0odFtuXVtyXVsxXS10W25dW3ItMV1bMV0pL3M7YSs9byp0W2VdW3JdWzFdfXBbcl09bC09aT9hL2kqczowLGw8YyYmKGM9bCl9Zm9yKHI9MDtyPGg7KytyKXBbcl0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89MS9pLHM9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07aWYobilmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXS89bjtlbHNlIGZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdPW99Zm9yKHI9MDtyPGE7KytyKXNbcl09MDtyZXR1cm4gc30semVybzpobn0pO2Z1bmN0aW9uIGZuKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKX1mdW5jdGlvbiBobih0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24gcG4odCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLGE9dC5sZW5ndGg7cjxhOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gZG4odCl7cmV0dXJuIHQucmVkdWNlKG1uLDApfWZ1bmN0aW9uIG1uKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBnbih0LGUpe3JldHVybiB2bih0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIHZuKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLGE9W107KytyPD1lOylhW3JdPWkqcituO3JldHVybiBhfWZ1bmN0aW9uIHluKGUpe3JldHVyblt0Lm1pbihlKSx0Lm1heChlKV19ZnVuY3Rpb24geG4odCxlKXtyZXR1cm4gdC52YWx1ZS1lLnZhbHVlfWZ1bmN0aW9uIGJuKHQsZSl7dmFyIHI9dC5fcGFja19uZXh0O3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10LGUuX3BhY2tfbmV4dD1yLHIuX3BhY2tfcHJldj1lfWZ1bmN0aW9uIF9uKHQsZSl7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gd24odCxlKXt2YXIgcj1lLngtdC54LG49ZS55LXQueSxpPXQucitlLnI7cmV0dXJuLjk5OSppKmk+cipyK24qbn1mdW5jdGlvbiBUbih0KXtpZigoZT10LmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MS8wLHU9LTEvMCxmPTEvMCxoPS0xLzA7aWYoZS5mb3JFYWNoKGtuKSwocj1lWzBdKS54PS1yLnIsci55PTAseChyKSxsPjEmJigobj1lWzFdKS54PW4ucixuLnk9MCx4KG4pLGw+MikpZm9yKE1uKHIsbixpPWVbMl0pLHgoaSksYm4ocixpKSxyLl9wYWNrX3ByZXY9aSxibihpLG4pLG49ci5fcGFja19uZXh0LGE9MzthPGw7YSsrKXtNbihyLG4saT1lW2FdKTt2YXIgcD0wLGQ9MSxtPTE7Zm9yKG89bi5fcGFja19uZXh0O28hPT1uO289by5fcGFja19uZXh0LGQrKylpZih3bihvLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3Iocz1yLl9wYWNrX3ByZXY7cyE9PW8uX3BhY2tfcHJldiYmIXduKHMsaSk7cz1zLl9wYWNrX3ByZXYsbSsrKTtwPyhkPG18fGQ9PW0mJm4ucjxyLnI/X24ocixuPW8pOl9uKHI9cyxuKSxhLS0pOihibihyLGkpLG49aSx4KGkpKX12YXIgZz0oYyt1KS8yLHY9KGYraCkvMix5PTA7Zm9yKGE9MDthPGw7YSsrKShpPWVbYV0pLngtPWcsaS55LT12LHk9TWF0aC5tYXgoeSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO3Qucj15LGUuZm9yRWFjaChBbil9ZnVuY3Rpb24geCh0KXtjPU1hdGgubWluKHQueC10LnIsYyksdT1NYXRoLm1heCh0LngrdC5yLHUpLGY9TWF0aC5taW4odC55LXQucixmKSxoPU1hdGgubWF4KHQueSt0LnIsaCl9fWZ1bmN0aW9uIGtuKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiBBbih0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gTW4odCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphLGw9LjUrKChuKj1uKS0obyo9bykpLygyKnMpLGM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK2MqYSxyLnk9dC55K2wqYS1jKml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBTbih0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIEVuKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIExuKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBDbih0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBQbih0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBJbih0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBPbih0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIHpuKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gRG4odCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOnpuKHQucmFuZ2UoKSl9ZnVuY3Rpb24gUm4odCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gRm4odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBCbih0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06Tm59dC5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIGU9ITAscj1OdW1iZXIsbj15bixpPWduO2Z1bmN0aW9uIGEoYSxvKXtmb3IodmFyIHMsbCxjPVtdLHU9YS5tYXAocix0aGlzKSxmPW4uY2FsbCh0aGlzLHUsbyksaD1pLmNhbGwodGhpcyxmLHUsbykscD0obz0tMSx1Lmxlbmd0aCksZD1oLmxlbmd0aC0xLG09ZT8xOjEvcDsrK288ZDspKHM9Y1tvXT1bXSkuZHg9aFtvKzFdLShzLng9aFtvXSkscy55PTA7aWYoZD4wKWZvcihvPS0xOysrbzxwOykobD11W29dKT49ZlswXSYmbDw9ZlsxXSYmKChzPWNbdC5iaXNlY3QoaCxsLDEsZCktMV0pLnkrPW0scy5wdXNoKGFbb10pKTtyZXR1cm4gY31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Y2UodCksYSk6bn0sYS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihlKXtyZXR1cm4gdm4oZSx0KX06Y2UodCksYSk6aX0sYS5mcmVxdWVuY3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGEpOmV9LGF9LHQubGF5b3V0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoeG4pLG49MCxpPVsxLDFdO2Z1bmN0aW9uIGEodCxhKXt2YXIgbz1yLmNhbGwodGhpcyx0LGEpLHM9b1swXSxsPWlbMF0sYz1pWzFdLHU9bnVsbD09ZT9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTtpZihzLng9cy55PTAsJHIocywoZnVuY3Rpb24odCl7dC5yPSt1KHQudmFsdWUpfSkpLCRyKHMsVG4pLG4pe3ZhciBmPW4qKGU/MTpNYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKS8yOyRyKHMsKGZ1bmN0aW9uKHQpe3Qucis9Zn0pKSwkcihzLFRuKSwkcihzLChmdW5jdGlvbih0KXt0LnItPWZ9KSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cis9aSplLngsZS55PW4rPWkqZS55LGUucio9aSxhKWZvcih2YXIgbz0tMSxzPWEubGVuZ3RoOysrbzxzOyl0KGFbb10scixuLGkpfShzLGwvMixjLzIsZT8xOjEvTWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSksb31yZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxhKTplfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsYSk6bn0sS3IoYSxyKX0sdC5sYXlvdXQudHJlZT1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1TbixuPVsxLDFdLGk9bnVsbDtmdW5jdGlvbiBhKHQsYSl7dmFyIGM9ZS5jYWxsKHRoaXMsdCxhKSx1PWNbMF0sZj1mdW5jdGlvbih0KXt2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtmb3IoO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX0odSk7aWYoJHIoZixvKSxmLnBhcmVudC5tPS1mLnosUXIoZixzKSxpKVFyKHUsbCk7ZWxzZXt2YXIgaD11LHA9dSxkPXU7UXIodSwoZnVuY3Rpb24odCl7dC54PGgueCYmKGg9dCksdC54PnAueCYmKHA9dCksdC5kZXB0aD5kLmRlcHRoJiYoZD10KX0pKTt2YXIgbT1yKGgscCkvMi1oLngsZz1uWzBdLyhwLngrcihwLGgpLzIrbSksdj1uWzFdLyhkLmRlcHRofHwxKTtRcih1LChmdW5jdGlvbih0KXt0Lng9KHQueCttKSpnLHQueT10LmRlcHRoKnZ9KSl9cmV0dXJuIGN9ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmNoaWxkcmVuLG49dC5wYXJlbnQuY2hpbGRyZW4saT10Lmk/blt0LmktMV06bnVsbDtpZihlLmxlbmd0aCl7IWZ1bmN0aW9uKHQpe3ZhciBlLHI9MCxuPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7Zm9yKDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0odCk7dmFyIGE9KGVbMF0ueitlW2UubGVuZ3RoLTFdLnopLzI7aT8odC56PWkueityKHQuXyxpLl8pLHQubT10LnotYSk6dC56PWF9ZWxzZSBpJiYodC56PWkueityKHQuXyxpLl8pKTt0LnBhcmVudC5BPWZ1bmN0aW9uKHQsZSxuKXtpZihlKXtmb3IodmFyIGksYT10LG89dCxzPWUsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxmPXMubSxoPWwubTtzPUxuKHMpLGE9RW4oYSkscyYmYTspbD1FbihsKSwobz1MbihvKSkuYT10LChpPXMueitmLWEuei1jK3Iocy5fLGEuXykpPjAmJihDbihQbihzLHQsbiksdCxpKSxjKz1pLHUrPWkpLGYrPXMubSxjKz1hLm0saCs9bC5tLHUrPW8ubTtzJiYhTG4obykmJihvLnQ9cyxvLm0rPWYtdSksYSYmIUVuKGwpJiYobC50PWEsbC5tKz1jLWgsbj10KX1yZXR1cm4gbn0odCxpLHQucGFyZW50LkF8fG5bMF0pfWZ1bmN0aW9uIHModCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIGwodCl7dC54Kj1uWzBdLHQueT10LmRlcHRoKm5bMV19cmV0dXJuIGEuc2VwYXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9sOm51bGwsYSk6aT9udWxsOm59LGEubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCk/bnVsbDpsLGEpOmk/bjpudWxsfSxLcihhLGUpfSx0LmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPVNuLG49WzEsMV0saT0hMTtmdW5jdGlvbiBhKGEsbyl7dmFyIHMsbD1lLmNhbGwodGhpcyxhLG8pLGM9bFswXSx1PTA7JHIoYywoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuJiZuLmxlbmd0aD8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9KSwwKS90Lmxlbmd0aH0obiksZS55PWZ1bmN0aW9uKGUpe3JldHVybiAxK3QubWF4KGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSl9KG4pKTooZS54PXM/dSs9cihlLHMpOjAsZS55PTAscz1lKX0pKTt2YXIgZj1mdW5jdGlvbiB0KGUpe3ZhciByPWUuY2hpbGRyZW47cmV0dXJuIHImJnIubGVuZ3RoP3QoclswXSk6ZX0oYyksaD1mdW5jdGlvbiB0KGUpe3ZhciByLG49ZS5jaGlsZHJlbjtyZXR1cm4gbiYmKHI9bi5sZW5ndGgpP3QobltyLTFdKTplfShjKSxwPWYueC1yKGYsaCkvMixkPWgueCtyKGgsZikvMjtyZXR1cm4gJHIoYyxpP2Z1bmN0aW9uKHQpe3QueD0odC54LWMueCkqblswXSx0Lnk9KGMueS10LnkpKm5bMV19OmZ1bmN0aW9uKHQpe3QueD0odC54LXApLyhkLXApKm5bMF0sdC55PSgxLShjLnk/dC55L2MueToxKSkqblsxXX0pLGx9cmV0dXJuIGEuc2VwYXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KSxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsIT0obj10KSxhKTppP246bnVsbH0sS3IoYSxlKX0sdC5sYXlvdXQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCksbj1NYXRoLnJvdW5kLGk9WzEsMV0sYT1udWxsLG89SW4scz0hMSxsPSJzcXVhcmlmeSIsYz0uNSooMStNYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIHUodCxlKXtmb3IodmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KW49KHI9dFtpXSkudmFsdWUqKGU8MD8wOmUpLHIuYXJlYT1pc05hTihuKXx8bjw9MD8wOm59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuLGksYT1vKHQpLHM9W10sYz1lLnNsaWNlKCksaD0xLzAsbT0ic2xpY2UiPT09bD9hLmR4OiJkaWNlIj09PWw/YS5keToic2xpY2UtZGljZSI9PT1sPzEmdC5kZXB0aD9hLmR5OmEuZHg6TWF0aC5taW4oYS5keCxhLmR5KTtmb3IodShjLGEuZHgqYS5keS90LnZhbHVlKSxzLmFyZWE9MDsoaT1jLmxlbmd0aCk+MDspcy5wdXNoKHI9Y1tpLTFdKSxzLmFyZWErPXIuYXJlYSwic3F1YXJpZnkiIT09bHx8KG49cChzLG0pKTw9aD8oYy5wb3AoKSxoPW4pOihzLmFyZWEtPXMucG9wKCkuYXJlYSxkKHMsbSxhLCExKSxtPU1hdGgubWluKGEuZHgsYS5keSkscy5sZW5ndGg9cy5hcmVhPTAsaD0xLzApO3MubGVuZ3RoJiYoZChzLG0sYSwhMCkscy5sZW5ndGg9cy5hcmVhPTApLGUuZm9yRWFjaChmKX19ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuPW8odCksaT1lLnNsaWNlKCksYT1bXTtmb3IodShpLG4uZHgqbi5keS90LnZhbHVlKSxhLmFyZWE9MDtyPWkucG9wKCk7KWEucHVzaChyKSxhLmFyZWErPXIuYXJlYSxudWxsIT1yLnomJihkKGEsci56P24uZHg6bi5keSxuLCFpLmxlbmd0aCksYS5sZW5ndGg9YS5hcmVhPTApO2UuZm9yRWFjaChoKX19ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcixuPXQuYXJlYSxpPTAsYT0xLzAsbz0tMSxzPXQubGVuZ3RoOysrbzxzOykocj10W29dLmFyZWEpJiYocjxhJiYoYT1yKSxyPmkmJihpPXIpKTtyZXR1cm4gZSo9ZSwobio9bik/TWF0aC5tYXgoZSppKmMvbixuLyhlKmEqYykpOjEvMH1mdW5jdGlvbiBkKHQsZSxyLGkpe3ZhciBhLG89LTEscz10Lmxlbmd0aCxsPXIueCxjPXIueSx1PWU/bih0LmFyZWEvZSk6MDtpZihlPT1yLmR4KXtmb3IoKGl8fHU+ci5keSkmJih1PXIuZHkpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keT11LGwrPWEuZHg9TWF0aC5taW4oci54K3IuZHgtbCx1P24oYS5hcmVhL3UpOjApO2Euej0hMCxhLmR4Kz1yLngrci5keC1sLHIueSs9dSxyLmR5LT11fWVsc2V7Zm9yKChpfHx1PnIuZHgpJiYodT1yLmR4KTsrK288czspKGE9dFtvXSkueD1sLGEueT1jLGEuZHg9dSxjKz1hLmR5PU1hdGgubWluKHIueStyLmR5LWMsdT9uKGEuYXJlYS91KTowKTthLno9ITEsYS5keSs9ci55K3IuZHktYyxyLngrPXUsci5keC09dX19ZnVuY3Rpb24gbSh0KXt2YXIgbj1lfHxyKHQpLGE9blswXTtyZXR1cm4gYS54PWEueT0wLGEudmFsdWU/KGEuZHg9aVswXSxhLmR5PWlbMV0pOmEuZHg9YS5keT0wLGUmJnIucmV2YWx1ZShhKSx1KFthXSxhLmR4KmEuZHkvYS52YWx1ZSksKGU/aDpmKShhKSxzJiYoZT1uKSxufXJldHVybiBtLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxtKTppfSxtLnBhZGRpbmc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGE7ZnVuY3Rpb24gZShlKXt2YXIgcj10LmNhbGwobSxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP0luKGUpOk9uKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX1mdW5jdGlvbiByKGUpe3JldHVybiBPbihlLHQpfXZhciBuO3JldHVybiBvPW51bGw9PShhPXQpP0luOiJmdW5jdGlvbiI9PShuPXR5cGVvZiB0KT9lOiJudW1iZXIiPT09bj8odD1bdCx0LHQsdF0scik6cixtfSxtLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ/TWF0aC5yb3VuZDpOdW1iZXIsbSk6biE9TnVtYmVyfSxtLnN0aWNreT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGU9bnVsbCxtKTpzfSxtLnJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbSk6Y30sbS5tb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQrIiIsbSk6bH0sS3IobSxyKX0sdC5yYW5kb209e25vcm1hbDpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI8MiYmKGU9MSkscjwxJiYodD0wKSxmdW5jdGlvbigpe3ZhciByLG4saTtkb3tpPShyPTIqTWF0aC5yYW5kb20oKS0xKSpyKyhuPTIqTWF0aC5yYW5kb20oKS0xKSpufXdoaWxlKCFpfHxpPjEpO3JldHVybiB0K2UqcipNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fSxsb2dOb3JtYWw6ZnVuY3Rpb24oKXt2YXIgZT10LnJhbmRvbS5ub3JtYWwuYXBwbHkodCxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChlKCkpfX0sYmF0ZXM6ZnVuY3Rpb24oZSl7dmFyIHI9dC5yYW5kb20uaXJ3aW5IYWxsKGUpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByKCkvZX19LGlyd2luSGFsbDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxyPTA7cjx0O3IrKyllKz1NYXRoLnJhbmRvbSgpO3JldHVybiBlfX19LHQuc2NhbGU9e307dmFyIE5uPXtmbG9vcjpDLGNlaWw6Q307ZnVuY3Rpb24gam4oZSxyLG4saSl7dmFyIGE9W10sbz1bXSxzPTAsbD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCktMTtmb3IoZVtsXTxlWzBdJiYoZT1lLnNsaWNlKCkucmV2ZXJzZSgpLHI9ci5zbGljZSgpLnJldmVyc2UoKSk7KytzPD1sOylhLnB1c2gobihlW3MtMV0sZVtzXSkpLG8ucHVzaChpKHJbcy0xXSxyW3NdKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQuYmlzZWN0KGUsciwxLGwpLTE7cmV0dXJuIG9bbl0oYVtuXShyKSl9fWZ1bmN0aW9uIFVuKGUscil7cmV0dXJuIHQucmViaW5kKGUsciwicmFuZ2UiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xhdGUiLCJjbGFtcCIpfWZ1bmN0aW9uIFZuKHQsZSl7cmV0dXJuIEZuKHQsQm4oSG4odCxlKVsyXSkpLEZuKHQsQm4oSG4odCxlKVsyXSkpLHR9ZnVuY3Rpb24gSG4odCxlKXtudWxsPT1lJiYoZT0xMCk7dmFyIHI9em4odCksbj1yWzFdLXJbMF0saT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4vZSkvTWF0aC5MTjEwKSksYT1lL24qaTtyZXR1cm4gYTw9LjE1P2kqPTEwOmE8PS4zNT9pKj01OmE8PS43NSYmKGkqPTIpLHJbMF09TWF0aC5jZWlsKHJbMF0vaSkqaSxyWzFdPU1hdGguZmxvb3IoclsxXS9pKSppKy41KmksclsyXT1pLHJ9ZnVuY3Rpb24gcW4oZSxyKXtyZXR1cm4gdC5yYW5nZS5hcHBseSh0LEhuKGUscikpfXQuc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGEsbztmdW5jdGlvbiBzKCl7dmFyIHQ9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpPjI/am46Um4scz1pP1VyOmpyO3JldHVybiBhPXQoZSxyLHMsbiksbz10KHIsZSxzLHlyKSxsfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGEodCl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Lm1hcChOdW1iZXIpLHMoKSk6ZX0sbC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMoKSk6cn0sbC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBsLnJhbmdlKHQpLmludGVycG9sYXRlKE9yKX0sbC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHMoKSk6aX0sbC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn0sbC50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gcW4oZSx0KX0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIGQzX3NjYWxlX2xpbmVhclRpY2tGb3JtYXQoZSx0LHIpfSxsLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIFZuKGUsdCkscygpfSxsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbixpKX0scygpfShbMCwxXSxbMCwxXSx5ciwhMSl9O3Quc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXtyZXR1cm4obj9NYXRoLmxvZyh0PDA/MDp0KTotTWF0aC5sb2codD4wPzA6LXQpKS9NYXRoLmxvZyhyKX1mdW5jdGlvbiBvKHQpe3JldHVybiBuP01hdGgucG93KHIsdCk6LU1hdGgucG93KHIsLXQpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGUoYSh0KSl9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBvKGUuaW52ZXJ0KHQpKX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dFswXT49MCxlLmRvbWFpbigoaT10Lm1hcChOdW1iZXIpKS5tYXAoYSkpLHMpOml9LHMuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlLmRvbWFpbihpLm1hcChhKSkscyk6cn0scy5uaWNlPWZ1bmN0aW9uKCl7dmFyIHQ9Rm4oaS5tYXAoYSksbj9NYXRoOkduKTtyZXR1cm4gZS5kb21haW4odCksaT10Lm1hcChvKSxzfSxzLnRpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9em4oaSksZT1bXSxzPXRbMF0sbD10WzFdLGM9TWF0aC5mbG9vcihhKHMpKSx1PU1hdGguY2VpbChhKGwpKSxmPXIlMT8yOnI7aWYoaXNGaW5pdGUodS1jKSl7aWYobil7Zm9yKDtjPHU7YysrKWZvcih2YXIgaD0xO2g8ZjtoKyspZS5wdXNoKG8oYykqaCk7ZS5wdXNoKG8oYykpfWVsc2UgZm9yKGUucHVzaChvKGMpKTtjKys8dTspZm9yKGg9Zi0xO2g+MDtoLS0pZS5wdXNoKG8oYykqaCk7Zm9yKGM9MDtlW2NdPHM7YysrKTtmb3IodT1lLmxlbmd0aDtlW3UtMV0+bDt1LS0pO2U9ZS5zbGljZShjLHUpfXJldHVybiBlfSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLmNvcHkoKSxyLG4saSl9LFVuKHMsZSl9KHQuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCwhMCxbMSwxMF0pfTt2YXIgR249e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmNlaWwoLXQpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmZsb29yKC10KX19O2Z1bmN0aW9uIFluKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX10LnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT1ZbihyKSxhPVluKDEvcik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZShpKHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEoZS5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4oKG49dC5tYXAoTnVtYmVyKSkubWFwKGkpKSxvKTpufSxvLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBxbihuLHQpfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja0Zvcm1hdChuLHQsZSl9LG8ubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gby5kb21haW4oVm4obix0KSl9LG8uZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9WW4ocj10KSxhPVluKDEvciksZS5kb21haW4obi5tYXAoaSkpLG8pOnJ9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbil9LFVuKG8sZSl9KHQuc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHQuc2NhbGUuc3FydD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLnBvdygpLmV4cG9uZW50KC41KX0sdC5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaSxhLG87ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYVsoKGkuZ2V0KHQpfHwoInJhbmdlIj09PW4udD9pLnNldCh0LHIucHVzaCh0KSk6TmFOKSktMSklYS5sZW5ndGhdfWZ1bmN0aW9uIGwoZSxuKXtyZXR1cm4gdC5yYW5nZShyLmxlbmd0aCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZStuKnR9KSl9cmV0dXJuIHMuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3I9W10saT1uZXcgXztmb3IodmFyIGUsYT0tMSxvPXQubGVuZ3RoOysrYTxvOylpLmhhcyhlPXRbYV0pfHxpLnNldChlLHIucHVzaChlKSk7cmV0dXJuIHNbbi50XS5hcHBseShzLG4uYSl9LHMucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxvPTAsbj17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxzKTphfSxzLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgaT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGk9KGkrYykvMiwwKTooYy1pKS8oci5sZW5ndGgtMStlKTtyZXR1cm4gYT1sKGkrdSplLzIsdSksbz0wLG49e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZVJvdW5kUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgaT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGk9Yz1NYXRoLnJvdW5kKChpK2MpLzIpLDApOihjLWkpLyhyLmxlbmd0aC0xK2UpfDA7cmV0dXJuIGE9bChpK01hdGgucm91bmQodSplLzIrKGMtaS0oci5sZW5ndGgtMStlKSp1KS8yKSx1KSxvPTAsbj17dDoicmFuZ2VSb3VuZFBvaW50cyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxmPXRbMS1jXSxoPShmLXUpLyhyLmxlbmd0aC1lKzIqaSk7cmV0dXJuIGE9bCh1K2gqaSxoKSxjJiZhLnJldmVyc2UoKSxvPWgqKDEtZSksbj17dDoicmFuZ2VCYW5kcyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VSb3VuZEJhbmRzPWZ1bmN0aW9uKHQsZSxpKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGk9ZSk7dmFyIGM9dFsxXTx0WzBdLHU9dFtjLTBdLGY9dFsxLWNdLGg9TWF0aC5mbG9vcigoZi11KS8oci5sZW5ndGgtZSsyKmkpKTtyZXR1cm4gYT1sKHUrTWF0aC5yb3VuZCgoZi11LShyLmxlbmd0aC1lKSpoKS8yKSxoKSxjJiZhLnJldmVyc2UoKSxvPU1hdGgucm91bmQoaCooMS1lKSksbj17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gb30scy5yYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiB6bihuLmFbMF0pfSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfSxzLmRvbWFpbihyKX0oW10se3Q6InJhbmdlIixhOltbXV19KX0sdC5zY2FsZS5jYXRlZ29yeTEwPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKFduKX0sdC5zY2FsZS5jYXRlZ29yeTIwPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKFhuKX0sdC5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShabil9LHQuc2NhbGUuY2F0ZWdvcnkyMGM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoSm4pfTt2YXIgV249WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAodGUpLFhuPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQwLDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKHRlKSxabj1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAodGUpLEpuPVszMjQ0NzMzLDcwNTcxMTAsMTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAodGUpO2Z1bmN0aW9uIEtuKCl7cmV0dXJuIDB9dC5zY2FsZS5xdWFudGlsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGk7ZnVuY3Rpb24gYSgpe3ZhciBlPTAsYT1uLmxlbmd0aDtmb3IoaT1bXTsrK2U8YTspaVtlLTFdPXQucXVhbnRpbGUocixlL2EpO3JldHVybiBvfWZ1bmN0aW9uIG8oZSl7aWYoIWlzTmFOKGU9K2UpKXJldHVybiBuW3QuYmlzZWN0KGksZSldfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10Lm1hcChwKS5maWx0ZXIoZCkuc29ydChoKSxhKCkpOnJ9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKCkpOm59LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybih0PW4uaW5kZXhPZih0KSk8MD9bTmFOLE5hTl06W3Q+MD9pW3QtMV06clswXSx0PGkubGVuZ3RoP2lbdF06cltyLmxlbmd0aC0xXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9LGEoKX0oW10sW10pfSx0LnNjYWxlLnF1YW50aXplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpLGE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbltNYXRoLm1heCgwLE1hdGgubWluKGEsTWF0aC5mbG9vcihpKih0LWUpKSkpXX1mdW5jdGlvbiBzKCl7cmV0dXJuIGk9bi5sZW5ndGgvKHItZSksYT1uLmxlbmd0aC0xLG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbdC5sZW5ndGgtMV0scygpKTpbZSxyXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuW3Q9KHQ9bi5pbmRleE9mKHQpKTwwP05hTjp0L2krZSx0KzEvaV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuKX0scygpfSgwLDEsWzAsMV0pfSx0LnNjYWxlLnRocmVzaG9sZD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7ZnVuY3Rpb24gaShlKXtpZihlPD1lKXJldHVybiBuW3QuYmlzZWN0KHIsZSldfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmluZGV4T2YodCksW3JbdC0xXSxyW3RdXX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX0saX0oWy41XSxbMCwxXSl9LHQuc2NhbGUuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybit0fXJldHVybiByLmludmVydD1yLHIuZG9tYWluPXIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAocikscik6ZX0sci50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gcW4oZSx0KX0sci50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIGQzX3NjYWxlX2xpbmVhclRpY2tGb3JtYXQoZSx0LHIpfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlKX0scn0oWzAsMV0pfSx0LnN2Zz17fSx0LnN2Zy5hcmM9ZnVuY3Rpb24oKXt2YXIgdD0kbixlPXRpLHI9S24sbj1RbixpPWVpLGE9cmksbz1uaTtmdW5jdGlvbiBzKCl7dmFyIHM9TWF0aC5tYXgoMCwrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRXQsZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxoPU1hdGguYWJzKGYtdSkscD11PmY/MDoxO2lmKGM8cyYmKGQ9YyxjPXMscz1kKSxoPj1TdClyZXR1cm4gbChjLHApKyhzP2wocywxLXApOiIiKSsiWiI7dmFyIGQsbSxnLHYseSx4LGIsXyx3LFQsayxBLE09MCxTPTAsRT1bXTtpZigodj0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKGc9bj09PVFuP01hdGguc3FydChzKnMrYypjKTorbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KFMqPS0xKSxjJiYoUz1QdChnL2MqTWF0aC5zaW4odikpKSxzJiYoTT1QdChnL3MqTWF0aC5zaW4odikpKSksYyl7eT1jKk1hdGguY29zKHUrUykseD1jKk1hdGguc2luKHUrUyksYj1jKk1hdGguY29zKGYtUyksXz1jKk1hdGguc2luKGYtUyk7dmFyIEw9TWF0aC5hYnMoZi11LTIqUyk8PUF0PzA6MTtpZihTJiZpaSh5LHgsYixfKT09PXBeTCl7dmFyIEM9KHUrZikvMjt5PWMqTWF0aC5jb3MoQykseD1jKk1hdGguc2luKEMpLGI9Xz1udWxsfX1lbHNlIHk9eD0wO2lmKHMpe3c9cypNYXRoLmNvcyhmLU0pLFQ9cypNYXRoLnNpbihmLU0pLGs9cypNYXRoLmNvcyh1K00pLEE9cypNYXRoLnNpbih1K00pO3ZhciBQPU1hdGguYWJzKHUtZisyKk0pPD1BdD8wOjE7aWYoTSYmaWkodyxULGssQSk9PT0xLXBeUCl7dmFyIEk9KHUrZikvMjt3PXMqTWF0aC5jb3MoSSksVD1zKk1hdGguc2luKEkpLGs9QT1udWxsfX1lbHNlIHc9VD0wO2lmKGg+a3QmJihkPU1hdGgubWluKE1hdGguYWJzKGMtcykvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXttPXM8Y15wPzA6MTt2YXIgTz1kLHo9ZDtpZihoPEF0KXt2YXIgRD1udWxsPT1rP1t3LFRdOm51bGw9PWI/W3kseF06U2UoW3kseF0sW2ssQV0sW2IsX10sW3csVF0pLFI9eS1EWzBdLEY9eC1EWzFdLEI9Yi1EWzBdLE49Xy1EWzFdLGo9MS9NYXRoLnNpbihNYXRoLmFjb3MoKFIqQitGKk4pLyhNYXRoLnNxcnQoUipSK0YqRikqTWF0aC5zcXJ0KEIqQitOKk4pKSkvMiksVT1NYXRoLnNxcnQoRFswXSpEWzBdK0RbMV0qRFsxXSk7ej1NYXRoLm1pbihkLChzLVUpLyhqLTEpKSxPPU1hdGgubWluKGQsKGMtVSkvKGorMSkpfWlmKG51bGwhPWIpe3ZhciBWPWFpKG51bGw9PWs/W3csVF06W2ssQV0sW3kseF0sYyxPLHApLEg9YWkoW2IsX10sW3csVF0sYyxPLHApO2Q9PT1PP0UucHVzaCgiTSIsVlswXSwiQSIsTywiLCIsTywiIDAgMCwiLG0sIiAiLFZbMV0sIkEiLGMsIiwiLGMsIiAwICIsMS1wXmlpKFZbMV1bMF0sVlsxXVsxXSxIWzFdWzBdLEhbMV1bMV0pLCIsIixwLCIgIixIWzFdLCJBIixPLCIsIixPLCIgMCAwLCIsbSwiICIsSFswXSk6RS5wdXNoKCJNIixWWzBdLCJBIixPLCIsIixPLCIgMCAxLCIsbSwiICIsSFswXSl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpO2lmKG51bGwhPWspe3ZhciBxPWFpKFt5LHhdLFtrLEFdLHMsLXoscCksRz1haShbdyxUXSxudWxsPT1iP1t5LHhdOltiLF9dLHMsLXoscCk7ZD09PXo/RS5wdXNoKCJMIixHWzBdLCJBIix6LCIsIix6LCIgMCAwLCIsbSwiICIsR1sxXSwiQSIscywiLCIscywiIDAgIixwXmlpKEdbMV1bMF0sR1sxXVsxXSxxWzFdWzBdLHFbMV1bMV0pLCIsIiwxLXAsIiAiLHFbMV0sIkEiLHosIiwiLHosIiAwIDAsIixtLCIgIixxWzBdKTpFLnB1c2goIkwiLEdbMF0sIkEiLHosIiwiLHosIiAwIDAsIixtLCIgIixxWzBdKX1lbHNlIEUucHVzaCgiTCIsdywiLCIsVCl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpLG51bGwhPWImJkUucHVzaCgiQSIsYywiLCIsYywiIDAgIixMLCIsIixwLCIgIixiLCIsIixfKSxFLnB1c2goIkwiLHcsIiwiLFQpLG51bGwhPWsmJkUucHVzaCgiQSIscywiLCIscywiIDAgIixQLCIsIiwxLXAsIiAiLGssIiwiLEEpO3JldHVybiBFLnB1c2goIloiKSxFLmpvaW4oIiIpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIistdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrdH1yZXR1cm4gcy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jZShlKSxzKTp0fSxzLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNlKHQpLHMpOmV9LHMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWNlKHQpLHMpOnJ9LHMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ9PVFuP1FuOmNlKHQpLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1jZSh0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWNlKHQpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89Y2UodCkscyk6b30scy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciByPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixuPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1FdDtyZXR1cm5bTWF0aC5jb3MobikqcixNYXRoLnNpbihuKSpyXX0sc307dmFyIFFuPSJhdXRvIjtmdW5jdGlvbiAkbih0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB0aSh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBlaSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHJpKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIG5pKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGlpKHQsZSxyLG4pe3JldHVybih0LXIpKmUtKGUtbikqdD4wPzA6MX1mdW5jdGlvbiBhaSh0LGUscixuLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPShpP246LW4pL01hdGguc3FydChhKmErbypvKSxsPXMqbyxjPS1zKmEsdT10WzBdK2wsZj10WzFdK2MsaD1lWzBdK2wscD1lWzFdK2MsZD0odStoKS8yLG09KGYrcCkvMixnPWgtdSx2PXAtZix5PWcqZyt2KnYseD1yLW4sYj11KnAtaCpmLF89KHY8MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCx4KngqeS1iKmIpKSx3PShiKnYtZypfKS95LFQ9KC1iKmctdipfKS95LGs9KGIqditnKl8pL3ksQT0oLWIqZyt2Kl8pL3ksTT13LWQsUz1ULW0sRT1rLWQsTD1BLW07cmV0dXJuIE0qTStTKlM+RSpFK0wqTCYmKHc9ayxUPUEpLFtbdy1sLFQtY10sW3cqci94LFQqci94XV19ZnVuY3Rpb24gb2koKXtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0KXt2YXIgZT1fZSxyPXdlLG49b2ksaT1jaSxhPWkua2V5LG89Ljc7ZnVuY3Rpb24gcyhhKXt2YXIgcyxsPVtdLGM9W10sdT0tMSxmPWEubGVuZ3RoLGg9Y2UoZSkscD1jZShyKTtmdW5jdGlvbiBkKCl7bC5wdXNoKCJNIixpKHQoYyksbykpfWZvcig7Kyt1PGY7KW4uY2FsbCh0aGlzLHM9YVt1XSx1KT9jLnB1c2goWytoLmNhbGwodGhpcyxzLHUpLCtwLmNhbGwodGhpcyxzLHUpXSk6Yy5sZW5ndGgmJihkKCksYz1bXSk7cmV0dXJuIGMubGVuZ3RoJiZkKCksbC5sZW5ndGg/bC5qb2luKCIiKTpudWxsfXJldHVybiBzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKTpyfSxzLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKTpufSxzLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2k9dDooaT1saS5nZXQodCl8fGNpKS5rZXkscyk6YX0scy50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30sc310LnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHNpKEMpfTt2YXIgbGk9dC5tYXAoe2xpbmVhcjpjaSwibGluZWFyLWNsb3NlZCI6dWksc3RlcDpmdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dO2Zvcig7KytlPHI7KWkucHVzaCgiSCIsKG5bMF0rKG49dFtlXSlbMF0pLzIsIlYiLG5bMV0pO3I+MSYmaS5wdXNoKCJIIixuWzBdKTtyZXR1cm4gaS5qb2luKCIiKX0sInN0ZXAtYmVmb3JlIjpmaSwic3RlcC1hZnRlciI6aGksYmFzaXM6bWksImJhc2lzLW9wZW4iOmZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGNpKHQpO3ZhciBlLHI9W10sbj0tMSxpPXQubGVuZ3RoLGE9WzBdLG89WzBdO2Zvcig7KytuPDM7KWU9dFtuXSxhLnB1c2goZVswXSksby5wdXNoKGVbMV0pO3IucHVzaChnaSh4aSxhKSsiLCIrZ2koeGksbykpLC0tbjtmb3IoOysrbjxpOyllPXRbbl0sYS5zaGlmdCgpLGEucHVzaChlWzBdKSxvLnNoaWZ0KCksby5wdXNoKGVbMV0pLGJpKHIsYSxvKTtyZXR1cm4gci5qb2luKCIiKX0sImJhc2lzLWNsb3NlZCI6ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dC5sZW5ndGgsYT1pKzQsbz1bXSxzPVtdO2Zvcig7KytuPDQ7KXI9dFtuJWldLG8ucHVzaChyWzBdKSxzLnB1c2goclsxXSk7ZT1bZ2koeGksbyksIiwiLGdpKHhpLHMpXSwtLW47Zm9yKDsrK248YTspcj10W24laV0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxzLnNoaWZ0KCkscy5wdXNoKHJbMV0pLGJpKGUsbyxzKTtyZXR1cm4gZS5qb2luKCIiKX0sYnVuZGxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgtMTtpZihyKWZvcih2YXIgbixpLGE9dFswXVswXSxvPXRbMF1bMV0scz10W3JdWzBdLWEsbD10W3JdWzFdLW8sYz0tMTsrK2M8PXI7KW49dFtjXSxpPWMvcixuWzBdPWUqblswXSsoMS1lKSooYStpKnMpLG5bMV09ZSpuWzFdKygxLWUpKihvK2kqbCk7cmV0dXJuIG1pKHQpfSxjYXJkaW5hbDpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP2NpKHQpOnRbMF0rcGkodCxkaSh0LGUpKX0sImNhcmRpbmFsLW9wZW4iOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDQ/Y2kodCk6dFsxXStwaSh0LnNsaWNlKDEsLTEpLGRpKHQsZSkpfSwiY2FyZGluYWwtY2xvc2VkIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP3VpKHQpOnRbMF0rcGkoKHQucHVzaCh0WzBdKSx0KSxkaShbdFt0Lmxlbmd0aC0yXV0uY29uY2F0KHQsW3RbMV1dKSxlKSl9LG1vbm90b25lOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aDwzP2NpKHQpOnRbMF0rcGkodCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdLG89ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLTEsbj1bXSxpPXRbMF0sYT10WzFdLG89blswXT1faShpLGEpO2Zvcig7KytlPHI7KW5bZV09KG8rKG89X2koaT1hLGE9dFtlKzFdKSkpLzI7cmV0dXJuIG5bZV09byxufSh0KSxzPS0xLGw9dC5sZW5ndGgtMTtmb3IoOysrczxsOyllPV9pKHRbc10sdFtzKzFdKSx5KGUpPGt0P29bc109b1tzKzFdPTA6KHI9b1tzXS9lLG49b1tzKzFdL2UsKGk9cipyK24qbik+OSYmKGk9MyplL01hdGguc3FydChpKSxvW3NdPWkqcixvW3MrMV09aSpuKSk7cz0tMTtmb3IoOysrczw9bDspaT0odFtNYXRoLm1pbihsLHMrMSldWzBdLXRbTWF0aC5tYXgoMCxzLTEpXVswXSkvKDYqKDErb1tzXSpvW3NdKSksYS5wdXNoKFtpfHwwLG9bc10qaXx8MF0pO3JldHVybiBhfSh0KSl9fSk7ZnVuY3Rpb24gY2kodCl7cmV0dXJuIHQubGVuZ3RoPjE/dC5qb2luKCJMIik6dCsiWiJ9ZnVuY3Rpb24gdWkodCl7cmV0dXJuIHQuam9pbigiTCIpKyJaIn1mdW5jdGlvbiBmaSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJWIiwobj10W2VdKVsxXSwiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gaGkodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiSCIsKG49dFtlXSlbMF0sIlYiLG5bMV0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIHBpKHQsZSl7aWYoZS5sZW5ndGg8MXx8dC5sZW5ndGghPWUubGVuZ3RoJiZ0Lmxlbmd0aCE9ZS5sZW5ndGgrMilyZXR1cm4gY2kodCk7dmFyIHI9dC5sZW5ndGghPWUubGVuZ3RoLG49IiIsaT10WzBdLGE9dFsxXSxvPWVbMF0scz1vLGw9MTtpZihyJiYobis9IlEiKyhhWzBdLTIqb1swXS8zKSsiLCIrKGFbMV0tMipvWzFdLzMpKyIsIithWzBdKyIsIithWzFdLGk9dFsxXSxsPTIpLGUubGVuZ3RoPjEpe3M9ZVsxXSxhPXRbbF0sbCsrLG4rPSJDIisoaVswXStvWzBdKSsiLCIrKGlbMV0rb1sxXSkrIiwiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXTtmb3IodmFyIGM9MjtjPGUubGVuZ3RoO2MrKyxsKyspYT10W2xdLHM9ZVtjXSxuKz0iUyIrKGFbMF0tc1swXSkrIiwiKyhhWzFdLXNbMV0pKyIsIithWzBdKyIsIithWzFdfWlmKHIpe3ZhciB1PXRbbF07bis9IlEiKyhhWzBdKzIqc1swXS8zKSsiLCIrKGFbMV0rMipzWzFdLzMpKyIsIit1WzBdKyIsIit1WzFdfXJldHVybiBufWZ1bmN0aW9uIGRpKHQsZSl7Zm9yKHZhciByLG49W10saT0oMS1lKS8yLGE9dFswXSxvPXRbMV0scz0xLGw9dC5sZW5ndGg7KytzPGw7KXI9YSxhPW8sbz10W3NdLG4ucHVzaChbaSoob1swXS1yWzBdKSxpKihvWzFdLXJbMV0pXSk7cmV0dXJuIG59ZnVuY3Rpb24gbWkodCl7aWYodC5sZW5ndGg8MylyZXR1cm4gY2kodCk7dmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxpPW5bMF0sYT1uWzFdLG89W2ksaSxpLChuPXRbMV0pWzBdXSxzPVthLGEsYSxuWzFdXSxsPVtpLCIsIixhLCJMIixnaSh4aSxvKSwiLCIsZ2koeGkscyldO2Zvcih0LnB1c2godFtyLTFdKTsrK2U8PXI7KW49dFtlXSxvLnNoaWZ0KCksby5wdXNoKG5bMF0pLHMuc2hpZnQoKSxzLnB1c2goblsxXSksYmkobCxvLHMpO3JldHVybiB0LnBvcCgpLGwucHVzaCgiTCIsbiksbC5qb2luKCIiKX1mdW5jdGlvbiBnaSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119bGkuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pKTt2YXIgdmk9WzAsMi8zLDEvMywwXSx5aT1bMCwxLzMsMi8zLDBdLHhpPVswLDEvNiwyLzMsMS82XTtmdW5jdGlvbiBiaSh0LGUscil7dC5wdXNoKCJDIixnaSh2aSxlKSwiLCIsZ2kodmksciksIiwiLGdpKHlpLGUpLCIsIixnaSh5aSxyKSwiLCIsZ2koeGksZSksIiwiLGdpKHhpLHIpKX1mdW5jdGlvbiBfaSh0LGUpe3JldHVybihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pfWZ1bmN0aW9uIHdpKHQpe2Zvcih2YXIgZSxyLG4saT0tMSxhPXQubGVuZ3RoOysraTxhOylyPShlPXRbaV0pWzBdLG49ZVsxXS1FdCxlWzBdPXIqTWF0aC5jb3MobiksZVsxXT1yKk1hdGguc2luKG4pO3JldHVybiB0fWZ1bmN0aW9uIFRpKHQpe3ZhciBlPV9lLHI9X2Usbj0wLGk9d2UsYT1vaSxvPWNpLHM9by5rZXksbD1vLGM9IkwiLHU9Ljc7ZnVuY3Rpb24gZihzKXt2YXIgZixoLHAsZD1bXSxtPVtdLGc9W10sdj0tMSx5PXMubGVuZ3RoLHg9Y2UoZSksYj1jZShuKSxfPWU9PT1yP2Z1bmN0aW9uKCl7cmV0dXJuIGh9OmNlKHIpLHc9bj09PWk/ZnVuY3Rpb24oKXtyZXR1cm4gcH06Y2UoaSk7ZnVuY3Rpb24gVCgpe2QucHVzaCgiTSIsbyh0KGcpLHUpLGMsbCh0KG0ucmV2ZXJzZSgpKSx1KSwiWiIpfWZvcig7Kyt2PHk7KWEuY2FsbCh0aGlzLGY9c1t2XSx2KT8obS5wdXNoKFtoPSt4LmNhbGwodGhpcyxmLHYpLHA9K2IuY2FsbCh0aGlzLGYsdildKSxnLnB1c2goWytfLmNhbGwodGhpcyxmLHYpLCt3LmNhbGwodGhpcyxmLHYpXSkpOm0ubGVuZ3RoJiYoVCgpLG09W10sZz1bXSk7cmV0dXJuIG0ubGVuZ3RoJiZUKCksZC5sZW5ndGg/ZC5qb2luKCIiKTpudWxsfXJldHVybiBmLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj10LGYpOnJ9LGYueDA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxmKTplfSxmLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZik6cn0sZi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWk9dCxmKTppfSxmLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZik6bn0sZi55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGYpOml9LGYuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGYpOmF9LGYuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bz10OihvPWxpLmdldCh0KXx8Y2kpLmtleSxsPW8ucmV2ZXJzZXx8byxjPW8uY2xvc2VkPyJNIjoiTCIsZik6c30sZi50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsZik6dX0sZn1mdW5jdGlvbiBraSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gQWkodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIE1pKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBTaSh0KXtyZXR1cm5bdC54LHQueV19ZnVuY3Rpb24gRWkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykscj1lWzBdLG49ZVsxXS1FdDtyZXR1cm5bcipNYXRoLmNvcyhuKSxyKk1hdGguc2luKG4pXX19ZnVuY3Rpb24gTGkoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gQ2koKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBQaSh0KXt2YXIgZT1NYXRoLnNxcnQodC9BdCk7cmV0dXJuIk0wLCIrZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIistZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIitlKyJaIn10LnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PXNpKHdpKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxmaS5yZXZlcnNlPWhpLGhpLnJldmVyc2U9ZmksdC5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBUaShDKX0sdC5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1UaSh3aSk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sdC5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD1raSxlPUFpLHI9TWksbj1laSxpPXJpO2Z1bmN0aW9uIGEocixuKXt2YXIgaSxhLGM9byh0aGlzLHQscixuKSx1PW8odGhpcyxlLHIsbik7cmV0dXJuIk0iK2MucDArcyhjLnIsYy5wMSxjLmExLWMuYTApKyhhPXUsKChpPWMpLmEwPT1hLmEwJiZpLmExPT1hLmExP2woYy5yLGMucDEsYy5yLGMucDApOmwoYy5yLGMucDEsdS5yLHUucDApK3ModS5yLHUucDEsdS5hMS11LmEwKStsKHUucix1LnAxLGMucixjLnAwKSkrIloiKX1mdW5jdGlvbiBvKHQsZSxhLG8pe3ZhciBzPWUuY2FsbCh0LGEsbyksbD1yLmNhbGwodCxzLG8pLGM9bi5jYWxsKHQscyxvKS1FdCx1PWkuY2FsbCh0LHMsbyktRXQ7cmV0dXJue3I6bCxhMDpjLGExOnUscDA6W2wqTWF0aC5jb3MoYyksbCpNYXRoLnNpbihjKV0scDE6W2wqTWF0aC5jb3ModSksbCpNYXRoLnNpbih1KV19fWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiJBIit0KyIsIit0KyIgMCAiKyArKHI+QXQpKyIsMSAiK2V9ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4iUSAwLDAgIitufXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1jZSh0KSxhKTpyfSxhLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jZShlKSxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jZSh0KSxhKTplfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Y2UodCksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1jZSh0KSxhKTppfSxhfSx0LnN2Zy5kaWFnb25hbD1mdW5jdGlvbigpe3ZhciB0PWtpLGU9QWkscj1TaTtmdW5jdGlvbiBuKG4saSl7dmFyIGE9dC5jYWxsKHRoaXMsbixpKSxvPWUuY2FsbCh0aGlzLG4saSkscz0oYS55K28ueSkvMixsPVthLHt4OmEueCx5OnN9LHt4Om8ueCx5OnN9LG9dO3JldHVybiJNIisobD1sLm1hcChyKSlbMF0rIkMiK2xbMV0rIiAiK2xbMl0rIiAiK2xbM119cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWNlKGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNlKHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPXQuc3ZnLmRpYWdvbmFsKCkscj1TaSxuPWUucHJvamVjdGlvbjtyZXR1cm4gZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oRWkocj10KSk6cn0sZX0sdC5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9Q2ksZT1MaTtmdW5jdGlvbiByKHIsbil7cmV0dXJuKElpLmdldCh0LmNhbGwodGhpcyxyLG4pKXx8UGkpKGUuY2FsbCh0aGlzLHIsbikpfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9Y2UoZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNlKHQpLHIpOmV9LHJ9O3ZhciBJaT10Lm1hcCh7Y2lyY2xlOlBpLGNyb3NzOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LzUpLzI7cmV0dXJuIk0iKy0zKmUrIiwiKy1lKyJIIistZSsiViIrLTMqZSsiSCIrZSsiViIrLWUrIkgiKzMqZSsiViIrZSsiSCIrZSsiViIrMyplKyJIIistZSsiViIrZSsiSCIrLTMqZSsiWiJ9LGRpYW1vbmQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvKDIqemkpKSxyPWUqemk7cmV0dXJuIk0wLCIrLWUrIkwiK3IrIiwwIDAsIitlKyIgIistcisiLDBaIn0sc3F1YXJlOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0KS8yO3JldHVybiJNIistZSsiLCIrLWUrIkwiK2UrIiwiKy1lKyIgIitlKyIsIitlKyIgIistZSsiLCIrZSsiWiJ9LCJ0cmlhbmdsZS1kb3duIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9PaSkscj1lKk9pLzI7cmV0dXJuIk0wLCIrcisiTCIrZSsiLCIrLXIrIiAiKy1lKyIsIistcisiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvT2kpLHI9ZSpPaS8yO3JldHVybiJNMCwiKy1yKyJMIitlKyIsIityKyIgIistZSsiLCIrcisiWiJ9fSk7dC5zdmcuc3ltYm9sVHlwZXM9SWkua2V5cygpO3ZhciBPaT1NYXRoLnNxcnQoMyksemk9TWF0aC50YW4oMzAqTHQpO1kudHJhbnNpdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPUJpfHwrK1VpLGk9cWkodCksYT1bXSxvPU5pfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6RXIsZGVsYXk6MCxkdXJhdGlvbjoyNTB9LHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe2EucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGY9Yy5sZW5ndGg7Kyt1PGY7KShyPWNbdV0pJiZHaShyLHUsaSxuLG8pLGUucHVzaChyKX1yZXR1cm4gRmkoYSxpLG4pfSxZLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKG51bGw9PXQ/RGk6UmkocWkodCkpKX07dmFyIERpPVJpKHFpKCkpO2Z1bmN0aW9uIFJpKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHIsbjsoZT10aGlzW3RdKSYmKG49ZVtyPWUuYWN0aXZlXSkmJihuLnRpbWVyLmM9bnVsbCxuLnRpbWVyLnQ9TmFOLC0tZS5jb3VudD9kZWxldGUgZVtyXTpkZWxldGUgdGhpc1t0XSxlLmFjdGl2ZSs9LjUsbi5ldmVudCYmbi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sbi5pbmRleCkpfX1mdW5jdGlvbiBGaSh0LGUscil7cmV0dXJuIFUodCxqaSksdC5uYW1lc3BhY2U9ZSx0LmlkPXIsdH12YXIgQmksTmksamk9W10sVWk9MDtmdW5jdGlvbiBWaSh0LGUscixuKXt2YXIgaT10LmlkLGE9dC5uYW1lc3BhY2U7cmV0dXJuIHV0KHQsImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24odCxvLHMpe3RbYV1baV0udHdlZW4uc2V0KGUsbihyLmNhbGwodCx0Ll9fZGF0YV9fLG8scykpKX06KHI9bihyKSxmdW5jdGlvbih0KXt0W2FdW2ldLnR3ZWVuLnNldChlLHIpfSkpfWZ1bmN0aW9uIEhpKHQpe3JldHVybiBudWxsPT10JiYodD0iIiksZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIHFpKHQpe3JldHVybiBudWxsPT10PyJfX3RyYW5zaXRpb25fXyI6Il9fdHJhbnNpdGlvbl8iK3QrIl9fIn1mdW5jdGlvbiBHaSh0LGUscixuLGkpe3ZhciBhLG8scyxsLGMsdT10W3JdfHwodFtyXT17YWN0aXZlOjAsY291bnQ6MH0pLGY9dVtuXTtmdW5jdGlvbiBoKHIpe3ZhciBpPXUuYWN0aXZlLGg9dVtpXTtmb3IodmFyIGQgaW4gaCYmKGgudGltZXIuYz1udWxsLGgudGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2ldLGguZXZlbnQmJmguZXZlbnQuaW50ZXJydXB0LmNhbGwodCx0Ll9fZGF0YV9fLGguaW5kZXgpKSx1KWlmKCtkPG4pe3ZhciBtPXVbZF07bS50aW1lci5jPW51bGwsbS50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbZF19by5jPXAsdmUoKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYyYmcChyfHwxKSYmKG8uYz1udWxsLG8udD1OYU4pLDF9KSwwLGEpLHUuYWN0aXZlPW4sZi5ldmVudCYmZi5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxjPVtdLGYudHdlZW4uZm9yRWFjaCgoZnVuY3Rpb24ocixuKXsobj1uLmNhbGwodCx0Ll9fZGF0YV9fLGUpKSYmYy5wdXNoKG4pfSkpLGw9Zi5lYXNlLHM9Zi5kdXJhdGlvbn1mdW5jdGlvbiBwKGkpe2Zvcih2YXIgYT1pL3Msbz1sKGEpLGg9Yy5sZW5ndGg7aD4wOyljWy0taF0uY2FsbCh0LG8pO2lmKGE+PTEpcmV0dXJuIGYuZXZlbnQmJmYuZXZlbnQuZW5kLmNhbGwodCx0Ll9fZGF0YV9fLGUpLC0tdS5jb3VudD9kZWxldGUgdVtuXTpkZWxldGUgdFtyXSwxfWZ8fChhPWkudGltZSxvPXZlKChmdW5jdGlvbih0KXt2YXIgZT1mLmRlbGF5O2lmKG8udD1lK2EsZTw9dClyZXR1cm4gaCh0LWUpO28uYz1ofSksMCxhKSxmPXVbbl09e3R3ZWVuOm5ldyBfLHRpbWU6YSx0aW1lcjpvLGRlbGF5OmkuZGVsYXksZHVyYXRpb246aS5kdXJhdGlvbixlYXNlOmkuZWFzZSxpbmRleDplfSxpPW51bGwsKyt1LmNvdW50KX1qaS5jYWxsPVkuY2FsbCxqaS5lbXB0eT1ZLmVtcHR5LGppLm5vZGU9WS5ub2RlLGppLnNpemU9WS5zaXplLHQudHJhbnNpdGlvbj1mdW5jdGlvbihlLHIpe3JldHVybiBlJiZlLnRyYW5zaXRpb24/Qmk/ZS50cmFuc2l0aW9uKHIpOmU6dC5zZWxlY3Rpb24oKS50cmFuc2l0aW9uKGUpfSx0LnRyYW5zaXRpb24ucHJvdG90eXBlPWppLGppLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10aGlzLmlkLGE9dGhpcy5uYW1lc3BhY2Usbz1bXTt0PVcodCk7Zm9yKHZhciBzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtvLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxmPWMubGVuZ3RoOysrdTxmOykobj1jW3VdKSYmKHI9dC5jYWxsKG4sbi5fX2RhdGFfXyx1LHMpKT8oIl9fZGF0YV9fImluIG4mJihyLl9fZGF0YV9fPW4uX19kYXRhX18pLEdpKHIsdSxhLGksblthXVtpXSksZS5wdXNoKHIpKTplLnB1c2gobnVsbCl9cmV0dXJuIEZpKG8sYSxpKX0samkuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz10aGlzLmlkLHM9dGhpcy5uYW1lc3BhY2UsbD1bXTt0PVgodCk7Zm9yKHZhciBjPS0xLHU9dGhpcy5sZW5ndGg7KytjPHU7KWZvcih2YXIgZj10aGlzW2NdLGg9LTEscD1mLmxlbmd0aDsrK2g8cDspaWYobj1mW2hdKXthPW5bc11bb10scj10LmNhbGwobixuLl9fZGF0YV9fLGgsYyksbC5wdXNoKGU9W10pO2Zvcih2YXIgZD0tMSxtPXIubGVuZ3RoOysrZDxtOykoaT1yW2RdKSYmR2koaSxkLHMsbyxhKSxlLnB1c2goaSl9cmV0dXJuIEZpKGwscyxvKX0samkuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bHQodCkpO2Zvcih2YXIgaT0wLGE9dGhpcy5sZW5ndGg7aTxhO2krKyl7bi5wdXNoKGU9W10pO2Zvcih2YXIgbyxzPTAsbD0obz10aGlzW2ldKS5sZW5ndGg7czxsO3MrKykocj1vW3NdKSYmdC5jYWxsKHIsci5fX2RhdGFfXyxzLGkpJiZlLnB1c2gocil9cmV0dXJuIEZpKG4sdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LGppLnR3ZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbbl1bcl0udHdlZW4uZ2V0KHQpOnV0KHRoaXMsbnVsbD09ZT9mdW5jdGlvbihlKXtlW25dW3JdLnR3ZWVuLnJlbW92ZSh0KX06ZnVuY3Rpb24oaSl7aVtuXVtyXS50d2Vlbi5zZXQodCxlKX0pfSxqaS5hdHRyPWZ1bmN0aW9uKGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IociBpbiBlKXRoaXMuYXR0cihyLGVbcl0pO3JldHVybiB0aGlzfXZhciBuPSJ0cmFuc2Zvcm0iPT1lP05yOnlyLGk9dC5ucy5xdWFsaWZ5KGUpO2Z1bmN0aW9uIGEoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX1mdW5jdGlvbiBvKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PXQ/YToodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKGksZSh0KSl9KX0pfWZ1bmN0aW9uIGwodCl7cmV0dXJuIG51bGw9PXQ/bzoodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTtyZXR1cm4gciE9PXQmJihlPW4ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxlKHQpKX0pfSl9cmV0dXJuIFZpKHRoaXMsImF0dHIuIitlLHIsaS5sb2NhbD9sOnMpfSxqaS5hdHRyVHdlZW49ZnVuY3Rpb24oZSxyKXt2YXIgbj10Lm5zLnF1YWxpZnkoZSk7cmV0dXJuIHRoaXMudHdlZW4oImF0dHIuIitlLG4ubG9jYWw/ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsaSh0KSl9fTpmdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZShuKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKG4saSh0KSl9fSl9LGppLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuc3R5bGUocix0W3JdLGUpO3JldHVybiB0aGlzfXI9IiJ9ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gbnVsbD09ZT9pOihlKz0iIixmdW5jdGlvbigpe3ZhciBuLGk9byh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gaSE9PWUmJihuPXlyKGksZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4oZSkscil9KX0pfXJldHVybiBWaSh0aGlzLCJzdHlsZS4iK3QsZSxhKX0samkuc3R5bGVUd2Vlbj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPWUuY2FsbCh0aGlzLG4saSxvKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpKTtyZXR1cm4gYSYmZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGEoZSkscil9fXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihyPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK3Qsbil9LGppLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIFZpKHRoaXMsInRleHQiLHQsSGkpfSxqaS5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5hbWVzcGFjZTtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsKGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSkpfSxqaS5lYXNlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW25dW3JdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT10LmVhc2UuYXBwbHkodCxhcmd1bWVudHMpKSx1dCh0aGlzLChmdW5jdGlvbih0KXt0W25dW3JdLmVhc2U9ZX0pKSl9LGppLmRlbGF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW2VdLmRlbGF5OnV0KHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18saSxhKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSxqaS5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmR1cmF0aW9uPU1hdGgubWF4KDEsdC5jYWxsKG4sbi5fX2RhdGFfXyxpLGEpKX06KHQ9TWF0aC5tYXgoMSx0KSxmdW5jdGlvbihuKXtuW3JdW2VdLmR1cmF0aW9uPXR9KSl9LGppLmVhY2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmlkLGk9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgYT1OaSxvPUJpO3RyeXtCaT1uLHV0KHRoaXMsKGZ1bmN0aW9uKHQscixhKXtOaT10W2ldW25dLGUuY2FsbCh0LHQuX19kYXRhX18scixhKX0pKX1maW5hbGx5e05pPWEsQmk9b319ZWxzZSB1dCh0aGlzLChmdW5jdGlvbihhKXt2YXIgbz1hW2ldW25dOyhvLmV2ZW50fHwoby5ldmVudD10LmRpc3BhdGNoKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpKSkub24oZSxyKX0pKTtyZXR1cm4gdGhpc30samkudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbj10aGlzLmlkLGk9KytVaSxhPXRoaXMubmFtZXNwYWNlLG89W10scz0wLGw9dGhpcy5sZW5ndGg7czxsO3MrKyl7by5wdXNoKHQ9W10pO2Zvcih2YXIgYyx1PTAsZj0oYz10aGlzW3NdKS5sZW5ndGg7dTxmO3UrKykoZT1jW3VdKSYmR2koZSx1LGEsaSx7dGltZToocj1lW2FdW25dKS50aW1lLGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXkrci5kdXJhdGlvbixkdXJhdGlvbjpyLmR1cmF0aW9ufSksdC5wdXNoKGUpfXJldHVybiBGaShvLGEsaSl9LHQuc3ZnLmF4aXM9ZnVuY3Rpb24oKXt2YXIgZSxyPXQuc2NhbGUubGluZWFyKCksaT1ZaSxhPTYsbz02LHM9MyxsPVsxMF0sYz1udWxsO2Z1bmN0aW9uIHUobil7bi5lYWNoKChmdW5jdGlvbigpe3ZhciBuLHU9dC5zZWxlY3QodGhpcyksZj10aGlzLl9fY2hhcnRfX3x8cixoPXRoaXMuX19jaGFydF9fPXIuY29weSgpLHA9bnVsbD09Yz9oLnRpY2tzP2gudGlja3MuYXBwbHkoaCxsKTpoLmRvbWFpbigpOmMsZD1udWxsPT1lP2gudGlja0Zvcm1hdD9oLnRpY2tGb3JtYXQuYXBwbHkoaCxsKTpDOmUsbT11LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsaCksZz1tLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixrdCksdj10LnRyYW5zaXRpb24obS5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IixrdCkucmVtb3ZlKCkseT10LnRyYW5zaXRpb24obS5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsMSkseD1NYXRoLm1heChhLDApK3MsYj1EbihoKSxfPXUuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLHc9KF8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLHQudHJhbnNpdGlvbihfKSk7Zy5hcHBlbmQoImxpbmUiKSxnLmFwcGVuZCgidGV4dCIpO3ZhciBULGssQSxNLFM9Zy5zZWxlY3QoImxpbmUiKSxFPXkuc2VsZWN0KCJsaW5lIiksTD1tLnNlbGVjdCgidGV4dCIpLnRleHQoZCksUD1nLnNlbGVjdCgidGV4dCIpLEk9eS5zZWxlY3QoInRleHQiKSxPPSJ0b3AiPT09aXx8ImxlZnQiPT09aT8tMToxO2lmKCJib3R0b20iPT09aXx8InRvcCI9PT1pPyhuPVhpLFQ9IngiLEE9InkiLGs9IngyIixNPSJ5MiIsTC5hdHRyKCJkeSIsTzwwPyIwZW0iOiIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLHcuYXR0cigiZCIsIk0iK2JbMF0rIiwiK08qbysiVjBIIitiWzFdKyJWIitPKm8pKToobj1aaSxUPSJ5IixBPSJ4IixrPSJ5MiIsTT0ieDIiLEwuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsTzwwPyJlbmQiOiJzdGFydCIpLHcuYXR0cigiZCIsIk0iK08qbysiLCIrYlswXSsiSDBWIitiWzFdKyJIIitPKm8pKSxTLmF0dHIoTSxPKmEpLFAuYXR0cihBLE8qeCksRS5hdHRyKGssMCkuYXR0cihNLE8qYSksSS5hdHRyKFQsMCkuYXR0cihBLE8qeCksaC5yYW5nZUJhbmQpe3ZhciB6PWgsRD16LnJhbmdlQmFuZCgpLzI7Zj1oPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQpK0R9fWVsc2UgZi5yYW5nZUJhbmQ/Zj1oOnYuY2FsbChuLGgsZik7Zy5jYWxsKG4sZixoKSx5LmNhbGwobixoLGgpfSkpfXJldHVybiB1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsdSk6cn0sdS5vcmllbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCBpbiBXaT90KyIiOllpLHUpOml9LHUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1uKGFyZ3VtZW50cyksdSk6bH0sdS50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsdSk6Y30sdS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsdSk6ZX0sdS50aWNrU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBlPyhhPSt0LG89K2FyZ3VtZW50c1tlLTFdLHUpOmF9LHUuaW5uZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCx1KTphfSx1Lm91dGVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsdSk6b30sdS50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCx1KTpzfSx1LnRpY2tTdWJkaXZpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmdX0sdX07dmFyIFlpPSJib3R0b20iLFdpPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07ZnVuY3Rpb24gWGkodCxlLHIpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKG4pP246cih0KSkrIiwwKSJ9KSl9ZnVuY3Rpb24gWmkodCxlLHIpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKDAsIisoaXNGaW5pdGUobik/bjpyKHQpKSsiKSJ9KSl9dC5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXt2YXIgZSxyLG49TihoLCJicnVzaHN0YXJ0IiwiYnJ1c2giLCJicnVzaGVuZCIpLGk9bnVsbCxhPW51bGwscz1bMCwwXSxsPVswLDBdLGM9ITAsdT0hMCxmPUtpWzBdO2Z1bmN0aW9uIGgoZSl7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXQuc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsZykub24oInRvdWNoc3RhcnQuYnJ1c2giLGcpLHI9ZS5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxlLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgbj1lLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEoZixDKTtuLmV4aXQoKS5yZW1vdmUoKSxuLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4icmVzaXplICIrdH0pKS5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIEppW3RdfSkpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4vW2V3XSQvLnRlc3QodCk/LTM6bnVsbH0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuL15bbnNdLy50ZXN0KHQpPy0zOm51bGx9KSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxuLnN0eWxlKCJkaXNwbGF5IixoLmVtcHR5KCk/Im5vbmUiOm51bGwpO3ZhciBvLHM9dC50cmFuc2l0aW9uKGUpLGw9dC50cmFuc2l0aW9uKHIpO2kmJihvPURuKGkpLGwuYXR0cigieCIsb1swXSkuYXR0cigid2lkdGgiLG9bMV0tb1swXSksZChzKSksYSYmKG89RG4oYSksbC5hdHRyKCJ5IixvWzBdKS5hdHRyKCJoZWlnaHQiLG9bMV0tb1swXSksbShzKSkscChzKX0pKX1mdW5jdGlvbiBwKHQpe3Quc2VsZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3NbKy9lJC8udGVzdCh0KV0rIiwiK2xbKy9ecy8udGVzdCh0KV0rIikifSkpfWZ1bmN0aW9uIGQodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixzWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBtKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsbFswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pfWZ1bmN0aW9uIGcoKXt2YXIgZixnLHY9dGhpcyx5PXQuc2VsZWN0KHQuZXZlbnQudGFyZ2V0KSx4PW4ub2Yodixhcmd1bWVudHMpLGI9dC5zZWxlY3QodiksXz15LmRhdHVtKCksdz0hL14obnxzKSQvLnRlc3QoXykmJmksVD0hL14oZXx3KSQvLnRlc3QoXykmJmEsaz15LmNsYXNzZWQoImV4dGVudCIpLEE9YnQodiksTT10Lm1vdXNlKHYpLFM9dC5zZWxlY3Qobyh2KSkub24oImtleWRvd24uYnJ1c2giLEMpLm9uKCJrZXl1cC5icnVzaCIsUCk7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcz9TLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLEkpLm9uKCJ0b3VjaGVuZC5icnVzaCIseik6Uy5vbigibW91c2Vtb3ZlLmJydXNoIixJKS5vbigibW91c2V1cC5icnVzaCIseiksYi5pbnRlcnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQoKSxrKU1bMF09c1swXS1NWzBdLE1bMV09bFswXS1NWzFdO2Vsc2UgaWYoXyl7dmFyIEU9Ky93JC8udGVzdChfKSxMPSsvXm4vLnRlc3QoXyk7Zz1bc1sxLUVdLU1bMF0sbFsxLUxdLU1bMV1dLE1bMF09c1tFXSxNWzFdPWxbTF19ZWxzZSB0LmV2ZW50LmFsdEtleSYmKGY9TS5zbGljZSgpKTtmdW5jdGlvbiBDKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmKGt8fChmPW51bGwsTVswXS09c1sxXSxNWzFdLT1sWzFdLGs9MiksRigpKX1mdW5jdGlvbiBQKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmMj09ayYmKE1bMF0rPXNbMV0sTVsxXSs9bFsxXSxrPTAsRigpKX1mdW5jdGlvbiBJKCl7dmFyIGU9dC5tb3VzZSh2KSxyPSExO2cmJihlWzBdKz1nWzBdLGVbMV0rPWdbMV0pLGt8fCh0LmV2ZW50LmFsdEtleT8oZnx8KGY9WyhzWzBdK3NbMV0pLzIsKGxbMF0rbFsxXSkvMl0pLE1bMF09c1srKGVbMF08ZlswXSldLE1bMV09bFsrKGVbMV08ZlsxXSldKTpmPW51bGwpLHcmJk8oZSxpLDApJiYoZChiKSxyPSEwKSxUJiZPKGUsYSwxKSYmKG0oYikscj0hMCksciYmKHAoYikseCh7dHlwZToiYnJ1c2giLG1vZGU6az8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24gTyh0LG4saSl7dmFyIGEsbyxoPURuKG4pLHA9aFswXSxkPWhbMV0sbT1NW2ldLGc9aT9sOnMsdj1nWzFdLWdbMF07aWYoayYmKHAtPW0sZC09dittKSxhPShpP3U6Yyk/TWF0aC5tYXgocCxNYXRoLm1pbihkLHRbaV0pKTp0W2ldLGs/bz0oYSs9bSkrdjooZiYmKG09TWF0aC5tYXgocCxNYXRoLm1pbihkLDIqZltpXS1hKSkpLG08YT8obz1hLGE9bSk6bz1tKSxnWzBdIT1hfHxnWzFdIT1vKXJldHVybiBpP3I9bnVsbDplPW51bGwsZ1swXT1hLGdbMV09bywhMH1mdW5jdGlvbiB6KCl7SSgpLGIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLGguZW1wdHkoKT8ibm9uZSI6bnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLEEoKSx4KHt0eXBlOiJicnVzaGVuZCJ9KX1iLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix5LnN0eWxlKCJjdXJzb3IiKSkseCh7dHlwZToiYnJ1c2hzdGFydCJ9KSxJKCl9cmV0dXJuIGguZXZlbnQ9ZnVuY3Rpb24oaSl7aS5lYWNoKChmdW5jdGlvbigpe3ZhciBpPW4ub2YodGhpcyxhcmd1bWVudHMpLGE9e3g6cyx5OmwsaTplLGo6cn0sbz10aGlzLl9fY2hhcnRfX3x8YTt0aGlzLl9fY2hhcnRfXz1hLEJpP3Quc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7ZT1vLmkscj1vLmoscz1vLngsbD1vLnksaSh7dHlwZToiYnJ1c2hzdGFydCJ9KX0pKS50d2VlbigiYnJ1c2g6YnJ1c2giLChmdW5jdGlvbigpe3ZhciB0PXhyKHMsYS54KSxuPXhyKGwsYS55KTtyZXR1cm4gZT1yPW51bGwsZnVuY3Rpb24oZSl7cz1hLng9dChlKSxsPWEueT1uKGUpLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkpLmVhY2goImVuZC5icnVzaCIsKGZ1bmN0aW9uKCl7ZT1hLmkscj1hLmosaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxpKHt0eXBlOiJicnVzaGVuZCJ9KX0pKTooaSh7dHlwZToiYnJ1c2hzdGFydCJ9KSxpKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLGkoe3R5cGU6ImJydXNoZW5kIn0pKX0pKX0saC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUtpWyEoaT10KTw8MXwhYV0saCk6aX0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUtpWyFpPDwxfCEoYT10KV0saCk6YX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmYT8oYz0hIXRbMF0sdT0hIXRbMV0pOmk/Yz0hIXQ6YSYmKHU9ISF0KSxoKTppJiZhP1tjLHVdOmk/YzphP3U6bnVsbH0saC5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG4sbyxjLHUsZjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaSYmKG49dFswXSxvPXRbMV0sYSYmKG49blswXSxvPW9bMF0pLGU9W24sb10saS5pbnZlcnQmJihuPWkobiksbz1pKG8pKSxvPG4mJihmPW4sbj1vLG89Ziksbj09c1swXSYmbz09c1sxXXx8KHM9W24sb10pKSxhJiYoYz10WzBdLHU9dFsxXSxpJiYoYz1jWzFdLHU9dVsxXSkscj1bYyx1XSxhLmludmVydCYmKGM9YShjKSx1PWEodSkpLHU8YyYmKGY9YyxjPXUsdT1mKSxjPT1sWzBdJiZ1PT1sWzFdfHwobD1bYyx1XSkpLGgpOihpJiYoZT8obj1lWzBdLG89ZVsxXSk6KG49c1swXSxvPXNbMV0saS5pbnZlcnQmJihuPWkuaW52ZXJ0KG4pLG89aS5pbnZlcnQobykpLG88biYmKGY9bixuPW8sbz1mKSkpLGEmJihyPyhjPXJbMF0sdT1yWzFdKTooYz1sWzBdLHU9bFsxXSxhLmludmVydCYmKGM9YS5pbnZlcnQoYyksdT1hLmludmVydCh1KSksdTxjJiYoZj1jLGM9dSx1PWYpKSksaSYmYT9bW24sY10sW28sdV1dOmk/W24sb106YSYmW2MsdV0pfSxoLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGguZW1wdHkoKXx8KHM9WzAsMF0sbD1bMCwwXSxlPXI9bnVsbCksaH0saC5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhaSYmc1swXT09c1sxXXx8ISFhJiZsWzBdPT1sWzFdfSx0LnJlYmluZChoLG4sIm9uIil9O3ZhciBKaT17bjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxLaT1bWyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXSxbImUiLCJ3Il0sWyJuIiwicyJdLFtdXTtmdW5jdGlvbiBRaSh0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gJGkodCl7dmFyIGU9aS5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoaS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9dC50ZXh0PXVlKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVRleHR9KSksdC5qc29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZlKHQsImFwcGxpY2F0aW9uL2pzb24iLFFpLGUpfSx0Lmh0bWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmUodCwidGV4dC9odG1sIiwkaSxlKX0sdC54bWw9dWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlWE1MfSkpLCJvYmplY3QiPT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz10OnRoaXMuZDM9dH0pLmFwcGx5KHNlbGYpfSx7fV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vcXVhZCIpfSx7Ii4vcXVhZCI6NjB9XSw2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiY2xhbXAiKSxhPXQoInBhcnNlLXJlY3QiKSxvPXQoImFycmF5LWJvdW5kcyIpLHM9dCgicGljay1ieS1hbGlhcyIpLGw9dCgiZGVmaW5lZCIpLGM9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHU9dCgiaXMtb2JqIiksZj10KCJkdHlwZSIpLGg9dCgibWF0aC1sb2cyIik7ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxhPTEvKGVbMl0tciksbz0xLyhlWzNdLW4pLHM9bmV3IEFycmF5KHQubGVuZ3RoKSxsPTAsYz10Lmxlbmd0aC8yO2w8YztsKyspc1syKmxdPWkoKHRbMipsXS1yKSphLDAsMSksc1syKmwrMV09aSgodFsyKmwrMV0tbikqbywwLDEpO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KSx0PWModCwiZmxvYXQ2NCIpLGU9cyhlLHtib3VuZHM6InJhbmdlIGJvdW5kcyBkYXRhQm94IGRhdGFib3giLG1heERlcHRoOiJkZXB0aCBtYXhEZXB0aCBtYXhkZXB0aCBsZXZlbCBtYXhMZXZlbCBtYXhsZXZlbCBsZXZlbHMiLGR0eXBlOiJ0eXBlIGR0eXBlIGZvcm1hdCBvdXQgZHN0IG91dHB1dCBkZXN0aW5hdGlvbiJ9KTt2YXIgcj1sKGUubWF4RGVwdGgsMjU1KSxpPWwoZS5ib3VuZHMsbyh0LDIpKTtpWzBdPT09aVsyXSYmaVsyXSsrLGlbMV09PT1pWzNdJiZpWzNdKys7dmFyIGQsbT1wKHQsaSksZz10Lmxlbmd0aD4+PjE7ZS5kdHlwZXx8KGUuZHR5cGU9ImFycmF5IiksInN0cmluZyI9PXR5cGVvZiBlLmR0eXBlP2Q9bmV3KGYoZS5kdHlwZSkpKGcpOmUuZHR5cGUmJihkPWUuZHR5cGUsQXJyYXkuaXNBcnJheShkKSYmKGQubGVuZ3RoPWcpKTtmb3IodmFyIHY9MDt2PGc7Kyt2KWRbdl09djt2YXIgeT1bXSx4PVtdLGI9W10sXz1bXTshZnVuY3Rpb24gdChlLG4saSxhLG8scyl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBsPXlbb118fCh5W29dPVtdKSxjPWJbb118fChiW29dPVtdKSx1PXhbb118fCh4W29dPVtdKSxmPWwubGVuZ3RoO2lmKCsrbz5yfHxzPjEwNzM3NDE4MjQpe2Zvcih2YXIgaD0wO2g8YS5sZW5ndGg7aCsrKWwucHVzaChhW2hdKSxjLnB1c2gocyksdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpO3JldHVybiBmfWlmKGwucHVzaChhWzBdKSxjLnB1c2gocyksYS5sZW5ndGg8PTEpcmV0dXJuIHUucHVzaChudWxsLG51bGwsbnVsbCxudWxsKSxmO2Zvcih2YXIgcD0uNSppLGQ9ZStwLGc9bitwLHY9W10sXz1bXSx3PVtdLFQ9W10saz0xLEE9YS5sZW5ndGg7azxBO2srKyl7dmFyIE09YVtrXSxTPW1bMipNXSxFPW1bMipNKzFdO1M8ZD9FPGc/di5wdXNoKE0pOl8ucHVzaChNKTpFPGc/dy5wdXNoKE0pOlQucHVzaChNKX1yZXR1cm4gczw8PTIsdS5wdXNoKHQoZSxuLHAsdixvLHMpLHQoZSxnLHAsXyxvLHMrMSksdChkLG4scCx3LG8scysyKSx0KGQsZyxwLFQsbyxzKzMpKSxmfSgwLDAsMSxkLDAsMSk7Zm9yKHZhciB3PTAsVD0wO1Q8eS5sZW5ndGg7VCsrKXt2YXIgaz15W1RdO2lmKGQuc2V0KWQuc2V0KGssdyk7ZWxzZSBmb3IodmFyIEE9MCxNPWsubGVuZ3RoO0E8TTtBKyspZFtBK3ddPWtbQV07dmFyIFM9dyt5W1RdLmxlbmd0aDtfW1RdPVt3LFNdLHc9U31yZXR1cm4gZC5yYW5nZT1mdW5jdGlvbigpe3ZhciBlLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO2Zvcig7bi0tOylyW25dPWFyZ3VtZW50c1tuXTtpZih1KHJbci5sZW5ndGgtMV0pKXt2YXIgbz1yLnBvcCgpO3IubGVuZ3RofHxudWxsPT1vLngmJm51bGw9PW8ubCYmbnVsbD09by5sZWZ0fHwocj1bb10sZT17fSksZT1zKG8se2xldmVsOiJsZXZlbCBtYXhMZXZlbCIsZDoiZCBkaWFtIGRpYW1ldGVyIHIgcmFkaXVzIHB4IHB4U2l6ZSBwaXhlbCBwaXhlbFNpemUgbWF4RCBzaXplIG1pblNpemUiLGxvZDoibG9kIGRldGFpbHMgcmFuZ2VzIG9mZnNldHMifSl9ZWxzZSBlPXt9O3IubGVuZ3RofHwocj1pKTt2YXIgYz1hLmFwcGx5KHZvaWQgMCxyKSxmPVtNYXRoLm1pbihjLngsYy54K2Mud2lkdGgpLE1hdGgubWluKGMueSxjLnkrYy5oZWlnaHQpLE1hdGgubWF4KGMueCxjLngrYy53aWR0aCksTWF0aC5tYXgoYy55LGMueStjLmhlaWdodCldLGQ9ZlswXSxtPWZbMV0sZz1mWzJdLHY9ZlszXSxiPXAoW2QsbSxnLHZdLGkpLF89YlswXSx3PWJbMV0sVD1iWzJdLGs9YlszXSxBPWwoZS5sZXZlbCx5Lmxlbmd0aCk7aWYobnVsbCE9ZS5kKXt2YXIgTTsibnVtYmVyIj09dHlwZW9mIGUuZD9NPVtlLmQsZS5kXTplLmQubGVuZ3RoJiYoTT1lLmQpLEE9TWF0aC5taW4oTWF0aC5tYXgoTWF0aC5jZWlsKC1oKE1hdGguYWJzKE1bMF0pLyhpWzJdLWlbMF0pKSksTWF0aC5jZWlsKC1oKE1hdGguYWJzKE1bMV0pLyhpWzNdLWlbMV0pKSkpLEEpfWlmKEE9TWF0aC5taW4oQSx5Lmxlbmd0aCksZS5sb2QpcmV0dXJuIEUoXyx3LFQsayxBKTt2YXIgUz1bXTtmdW5jdGlvbiBMKGUscixuLGksYSxvKXtpZihudWxsIT09YSYmbnVsbCE9PW8mJiEoXz5lK258fHc+citufHxUPGV8fGs8cnx8aT49QXx8YT09PW8pKXt2YXIgcz15W2ldO3ZvaWQgMD09PW8mJihvPXMubGVuZ3RoKTtmb3IodmFyIGw9YTtsPG87bCsrKXt2YXIgYz1zW2xdLHU9dFsyKmNdLGY9dFsyKmMrMV07dT49ZCYmdTw9ZyYmZj49bSYmZjw9diYmUy5wdXNoKGMpfXZhciBoPXhbaV0scD1oWzQqYSswXSxiPWhbNCphKzFdLE09aFs0KmErMl0sRT1oWzQqYSszXSxQPUMoaCxhKzEpLEk9LjUqbixPPWkrMTtMKGUscixJLE8scCxifHxNfHxFfHxQKSxMKGUscitJLEksTyxiLE18fEV8fFApLEwoZStJLHIsSSxPLE0sRXx8UCksTChlK0kscitJLEksTyxFLFApfX1mdW5jdGlvbiBDKHQsZSl7Zm9yKHZhciByPW51bGwsbj0wO251bGw9PT1yOylpZihyPXRbNCplK25dLCsrbj50Lmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gcn1yZXR1cm4gTCgwLDAsMSwwLDAsMSksU30sZDtmdW5jdGlvbiBFKHQsZSxyLGksYSl7Zm9yKHZhciBvPVtdLHM9MDtzPGE7cysrKXt2YXIgbD1iW3NdLGM9X1tzXVswXSx1PUwodCxlLHMpLGY9TChyLGkscyksaD1uLmdlKGwsdSkscD1uLmd0KGwsZixoLGwubGVuZ3RoLTEpO29bc109W2grYyxwK2NdfXJldHVybiBvfWZ1bmN0aW9uIEwodCxlLHIpe2Zvcih2YXIgbj0xLGk9LjUsYT0uNSxvPS41LHM9MDtzPHI7cysrKW48PD0yLG4rPXQ8aT9lPGE/MDoxOmU8YT8yOjMsbyo9LjUsaSs9dDxpPy1vOm8sYSs9ZTxhPy1vOm87cmV0dXJuIG59fX0seyJhcnJheS1ib3VuZHMiOjcxLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6ODAsY2xhbXA6ODYsZGVmaW5lZDoxMjQsZHR5cGU6MTI3LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoxOTEsImlzLW9iaiI6MjM1LCJtYXRoLWxvZzIiOjI0MCwicGFyc2UtcmVjdCI6MjQ5LCJwaWNrLWJ5LWFsaWFzIjoyNTN9XSw2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvbWV0YSIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9MDtpZih0JiZ0Lmxlbmd0aD4wKXtlKz1NYXRoLmFicyhhKHRbMF0pKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyllLT1NYXRoLmFicyhhKHRbcl0pKX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQpe3ZhciBlLHIsbixpLGEscyxsPTAsYz10Lmxlbmd0aDtpZihjPjIpe2ZvcihzPTA7czxjO3MrKylzPT09Yy0yPyhuPWMtMixpPWMtMSxhPTApOnM9PT1jLTE/KG49Yy0xLGk9MCxhPTEpOihuPXMsaT1zKzEsYT1zKzIpLGU9dFtuXSxyPXRbaV0sbCs9KG8odFthXVswXSktbyhlWzBdKSkqTWF0aC5zaW4obyhyWzFdKSk7bD02Mzc4MTM3KmwqNjM3ODEzNy8yfXJldHVybiBsfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQqTWF0aC5QSS8xODB9ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiBuLmdlb21SZWR1Y2UodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtmdW5jdGlvbih0KXt2YXIgZSxyPTA7c3dpdGNoKHQudHlwZSl7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gaSh0LmNvb3JkaW5hdGVzKTtjYXNlIk11bHRpUG9seWdvbiI6Zm9yKGU9MDtlPHQuY29vcmRpbmF0ZXMubGVuZ3RoO2UrKylyKz1pKHQuY29vcmRpbmF0ZXNbZV0pO3JldHVybiByO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIDB9cmV0dXJuIDB9KGUpfSksMCl9fSx7IkB0dXJmL21ldGEiOjYzfV0sNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBuPXt0eXBlOiJGZWF0dXJlIn07cmV0dXJuKDA9PT1yLmlkfHxyLmlkKSYmKG4uaWQ9ci5pZCksci5iYm94JiYobi5iYm94PXIuYmJveCksbi5wcm9wZXJ0aWVzPWV8fHt9LG4uZ2VvbWV0cnk9dCxufWZ1bmN0aW9uIGkodCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSwhdCl0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIGlzIHJlcXVpcmVkIik7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Iik7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIG11c3QgYmUgYXQgbGVhc3QgMiBudW1iZXJzIGxvbmciKTtpZighZCh0WzBdKXx8IWQodFsxXSkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycyIpO3JldHVybiBuKHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBhKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7Zm9yKHZhciBpPTAsYT10O2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO2lmKG8ubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLiIpO2Zvcih2YXIgcz0wO3M8b1tvLmxlbmd0aC0xXS5sZW5ndGg7cysrKWlmKG9bby5sZW5ndGgtMV1bc10hPT1vWzBdW3NdKXRocm93IG5ldyBFcnJvcigiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LiIpfXJldHVybiBuKHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMiKTtyZXR1cm4gbih7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBzKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciByPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiJ9O3JldHVybiBlLmlkJiYoci5pZD1lLmlkKSxlLmJib3gmJihyLmJib3g9ZS5iYm94KSxyLmZlYXR1cmVzPXQscn1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gZih0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0Km59ZnVuY3Rpb24gaCh0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0L259ZnVuY3Rpb24gcCh0KXtyZXR1cm4gMTgwKih0JSgyKk1hdGguUEkpKS9NYXRoLlBJfWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpJiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZWFydGhSYWRpdXM9NjM3MTAwOC44LHIuZmFjdG9ycz17Y2VudGltZXRlcnM6MTAwKnIuZWFydGhSYWRpdXMsY2VudGltZXRyZXM6MTAwKnIuZWFydGhSYWRpdXMsZGVncmVlczpyLmVhcnRoUmFkaXVzLzExMTMyNSxmZWV0OjMuMjgwODQqci5lYXJ0aFJhZGl1cyxpbmNoZXM6MzkuMzcqci5lYXJ0aFJhZGl1cyxraWxvbWV0ZXJzOnIuZWFydGhSYWRpdXMvMWUzLGtpbG9tZXRyZXM6ci5lYXJ0aFJhZGl1cy8xZTMsbWV0ZXJzOnIuZWFydGhSYWRpdXMsbWV0cmVzOnIuZWFydGhSYWRpdXMsbWlsZXM6ci5lYXJ0aFJhZGl1cy8xNjA5LjM0NCxtaWxsaW1ldGVyczoxZTMqci5lYXJ0aFJhZGl1cyxtaWxsaW1ldHJlczoxZTMqci5lYXJ0aFJhZGl1cyxuYXV0aWNhbG1pbGVzOnIuZWFydGhSYWRpdXMvMTg1MixyYWRpYW5zOjEseWFyZHM6MS4wOTM2KnIuZWFydGhSYWRpdXN9LHIudW5pdHNGYWN0b3JzPXtjZW50aW1ldGVyczoxMDAsY2VudGltZXRyZXM6MTAwLGRlZ3JlZXM6MS8xMTEzMjUsZmVldDozLjI4MDg0LGluY2hlczozOS4zNyxraWxvbWV0ZXJzOi4wMDEsa2lsb21ldHJlczouMDAxLG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjEvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzLG1pbGxpbWV0cmVzOjFlMyxuYXV0aWNhbG1pbGVzOjEvMTg1MixyYWRpYW5zOjEvci5lYXJ0aFJhZGl1cyx5YXJkczoxLjA5MzYxMzN9LHIuYXJlYUZhY3RvcnM9e2FjcmVzOjI0NzEwNWUtOSxjZW50aW1ldGVyczoxZTQsY2VudGltZXRyZXM6MWU0LGZlZXQ6MTAuNzYzOTEwNDE3LGhlY3RhcmVzOjFlLTQsaW5jaGVzOjE1NTAuMDAzMTAwMDA2LGtpbG9tZXRlcnM6MWUtNixraWxvbWV0cmVzOjFlLTYsbWV0ZXJzOjEsbWV0cmVzOjEsbWlsZXM6Mzg2ZS05LG1pbGxpbWV0ZXJzOjFlNixtaWxsaW1ldHJlczoxZTYseWFyZHM6MS4xOTU5OTAwNDZ9LHIuZmVhdHVyZT1uLHIuZ2VvbWV0cnk9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh2b2lkIDA9PT1yJiYocj17fSksdCl7Y2FzZSJQb2ludCI6cmV0dXJuIGkoZSkuZ2VvbWV0cnk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gbyhlKS5nZW9tZXRyeTtjYXNlIlBvbHlnb24iOnJldHVybiBhKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2ludCI6cmV0dXJuIGMoZSkuZ2VvbWV0cnk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBsKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gdShlKS5nZW9tZXRyeTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcih0KyIgaXMgaW52YWxpZCIpfX0sci5wb2ludD1pLHIucG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHModC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSl9KSkscil9LHIucG9seWdvbj1hLHIucG9seWdvbnM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSkscyh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEodCxlKX0pKSxyKX0sci5saW5lU3RyaW5nPW8sci5saW5lU3RyaW5ncz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyh0LGUpfSkpLHIpfSxyLmZlYXR1cmVDb2xsZWN0aW9uPXMsci5tdWx0aUxpbmVTdHJpbmc9bCxyLm11bHRpUG9pbnQ9YyxyLm11bHRpUG9seWdvbj11LHIuZ2VvbWV0cnlDb2xsZWN0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0fSxlLHIpfSxyLnJvdW5kPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksZSYmIShlPj0wKSl0aHJvdyBuZXcgRXJyb3IoInByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIHI9TWF0aC5wb3coMTAsZXx8MCk7cmV0dXJuIE1hdGgucm91bmQodCpyKS9yfSxyLnJhZGlhbnNUb0xlbmd0aD1mLHIubGVuZ3RoVG9SYWRpYW5zPWgsci5sZW5ndGhUb0RlZ3JlZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcChoKHQsZSkpfSxyLmJlYXJpbmdUb0F6aW11dGg9ZnVuY3Rpb24odCl7dmFyIGU9dCUzNjA7cmV0dXJuIGU8MCYmKGUrPTM2MCksZX0sci5yYWRpYW5zVG9EZWdyZWVzPXAsci5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MCpNYXRoLlBJLzE4MH0sci5jb252ZXJ0TGVuZ3RoPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpLHZvaWQgMD09PXImJihyPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImxlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGYoaCh0LGUpLHIpfSxyLmNvbnZlcnRBcmVhPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1lJiYoZT0ibWV0ZXJzIiksdm9pZCAwPT09biYmKG49ImtpbG9tZXRlcnMiKSwhKHQ+PTApKXRocm93IG5ldyBFcnJvcigiYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIGk9ci5hcmVhRmFjdG9yc1tlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgb3JpZ2luYWwgdW5pdHMiKTt2YXIgYT1yLmFyZWFGYWN0b3JzW25dO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaW5hbCB1bml0cyIpO3JldHVybiB0L2kqYX0sci5pc051bWJlcj1kLHIuaXNPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0fSxyLnZhbGlkYXRlQkJveD1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImJib3ggaXMgcmVxdWlyZWQiKTtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSIpO2lmKDQhPT10Lmxlbmd0aCYmNiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzIik7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighZCh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycyIpfSkpfSxyLnZhbGlkYXRlSWQ9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJpZCBpcyByZXF1aXJlZCIpO2lmKC0xPT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiB0KSl0aHJvdyBuZXcgRXJyb3IoImlkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmciKX19LHt9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvaGVscGVycyIpO2Z1bmN0aW9uIGkodCxlLHIpe2lmKG51bGwhPT10KWZvcih2YXIgbixhLG8scyxsLGMsdSxmLGg9MCxwPTAsZD10LnR5cGUsbT0iRmVhdHVyZUNvbGxlY3Rpb24iPT09ZCxnPSJGZWF0dXJlIj09PWQsdj1tP3QuZmVhdHVyZXMubGVuZ3RoOjEseT0wO3k8djt5Kyspe2w9KGY9ISEodT1tP3QuZmVhdHVyZXNbeV0uZ2VvbWV0cnk6Zz90Lmdlb21ldHJ5OnQpJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXUudHlwZSk/dS5nZW9tZXRyaWVzLmxlbmd0aDoxO2Zvcih2YXIgeD0wO3g8bDt4Kyspe3ZhciBiPTAsXz0wO2lmKG51bGwhPT0ocz1mP3UuZ2VvbWV0cmllc1t4XTp1KSl7Yz1zLmNvb3JkaW5hdGVzO3ZhciB3PXMudHlwZTtzd2l0Y2goaD0hcnx8IlBvbHlnb24iIT09dyYmIk11bHRpUG9seWdvbiIhPT13PzA6MSx3KXtjYXNlIG51bGw6YnJlYWs7Y2FzZSJQb2ludCI6aWYoITE9PT1lKGMscCx5LGIsXykpcmV0dXJuITE7cCsrLGIrKzticmVhaztjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2ludCI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7aWYoITE9PT1lKGNbbl0scCx5LGIsXykpcmV0dXJuITE7cCsrLCJNdWx0aVBvaW50Ij09PXcmJmIrK30iTGluZVN0cmluZyI9PT13JiZiKys7YnJlYWs7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKGE9MDthPGNbbl0ubGVuZ3RoLWg7YSsrKXtpZighMT09PWUoY1tuXVthXSxwLHksYixfKSlyZXR1cm4hMTtwKyt9Ik11bHRpTGluZVN0cmluZyI9PT13JiZiKyssIlBvbHlnb24iPT09dyYmXysrfSJQb2x5Z29uIj09PXcmJmIrKzticmVhaztjYXNlIk11bHRpUG9seWdvbiI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKF89MCxhPTA7YTxjW25dLmxlbmd0aDthKyspe2ZvcihvPTA7bzxjW25dW2FdLmxlbmd0aC1oO28rKyl7aWYoITE9PT1lKGNbbl1bYV1bb10scCx5LGIsXykpcmV0dXJuITE7cCsrfV8rK31iKyt9YnJlYWs7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihuPTA7bjxzLmdlb21ldHJpZXMubGVuZ3RoO24rKylpZighMT09PWkocy5nZW9tZXRyaWVzW25dLGUscikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfX19fX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoJiYhMSE9PWUodC5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLHIpO3IrKyk7YnJlYWs7Y2FzZSJGZWF0dXJlIjplKHQucHJvcGVydGllcywwKX19ZnVuY3Rpb24gbyh0LGUpe2lmKCJGZWF0dXJlIj09PXQudHlwZSllKHQsMCk7ZWxzZSBpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgcj0wO3I8dC5mZWF0dXJlcy5sZW5ndGgmJiExIT09ZSh0LmZlYXR1cmVzW3JdLHIpO3IrKyk7fWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZixoPTAscD0iRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlLGQ9IkZlYXR1cmUiPT09dC50eXBlLG09cD90LmZlYXR1cmVzLmxlbmd0aDoxO2ZvcihyPTA7cjxtO3IrKyl7Zm9yKHM9cD90LmZlYXR1cmVzW3JdLmdlb21ldHJ5OmQ/dC5nZW9tZXRyeTp0LGM9cD90LmZlYXR1cmVzW3JdLnByb3BlcnRpZXM6ZD90LnByb3BlcnRpZXM6e30sdT1wP3QuZmVhdHVyZXNbcl0uYmJveDpkP3QuYmJveDp2b2lkIDAsZj1wP3QuZmVhdHVyZXNbcl0uaWQ6ZD90LmlkOnZvaWQgMCxvPShsPSEhcyYmIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1zLnR5cGUpP3MuZ2VvbWV0cmllcy5sZW5ndGg6MSxpPTA7aTxvO2krKylpZihudWxsIT09KGE9bD9zLmdlb21ldHJpZXNbaV06cykpc3dpdGNoKGEudHlwZSl7Y2FzZSJQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjppZighMT09PWUoYSxoLGMsdSxmKSlyZXR1cm4hMTticmVhaztjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG49MDtuPGEuZ2VvbWV0cmllcy5sZW5ndGg7bisrKWlmKCExPT09ZShhLmdlb21ldHJpZXNbbl0saCxjLHUsZikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfWVsc2UgaWYoITE9PT1lKG51bGwsaCxjLHUsZikpcmV0dXJuITE7aCsrfX1mdW5jdGlvbiBsKHQsZSl7cyh0LChmdW5jdGlvbih0LHIsaSxhLG8pe3ZhciBzLGw9bnVsbD09PXQ/bnVsbDp0LnR5cGU7c3dpdGNoKGwpe2Nhc2UgbnVsbDpjYXNlIlBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6cmV0dXJuITEhPT1lKG4uZmVhdHVyZSh0LGkse2Jib3g6YSxpZDpvfSksciwwKSYmdm9pZCAwfXN3aXRjaChsKXtjYXNlIk11bHRpUG9pbnQiOnM9IlBvaW50IjticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6cz0iTGluZVN0cmluZyI7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOnM9IlBvbHlnb24ifWZvcih2YXIgYz0wO2M8dC5jb29yZGluYXRlcy5sZW5ndGg7YysrKXt2YXIgdT17dHlwZTpzLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXNbY119O2lmKCExPT09ZShuLmZlYXR1cmUodSxpKSxyLGMpKXJldHVybiExfX0pKX1mdW5jdGlvbiBjKHQsZSl7bCh0LChmdW5jdGlvbih0LHIsYSl7dmFyIG89MDtpZih0Lmdlb21ldHJ5KXt2YXIgcz10Lmdlb21ldHJ5LnR5cGU7aWYoIlBvaW50IiE9PXMmJiJNdWx0aVBvaW50IiE9PXMpe3ZhciBsLGM9MCx1PTAsZj0wO3JldHVybiExIT09aSh0LChmdW5jdGlvbihpLHMsaCxwLGQpe2lmKHZvaWQgMD09PWx8fHI+Y3x8cD51fHxkPmYpcmV0dXJuIGw9aSxjPXIsdT1wLGY9ZCx2b2lkKG89MCk7dmFyIG09bi5saW5lU3RyaW5nKFtsLGldLHQucHJvcGVydGllcyk7aWYoITE9PT1lKG0scixhLGQsbykpcmV0dXJuITE7bysrLGw9aX0pKSYmdm9pZCAwfX19KSl9ZnVuY3Rpb24gdSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyByZXF1aXJlZCIpO2wodCwoZnVuY3Rpb24odCxyLGkpe2lmKG51bGwhPT10Lmdlb21ldHJ5KXt2YXIgYT10Lmdlb21ldHJ5LnR5cGUsbz10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3N3aXRjaChhKXtjYXNlIkxpbmVTdHJpbmciOmlmKCExPT09ZSh0LHIsaSwwLDApKXJldHVybiExO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspaWYoITE9PT1lKG4ubGluZVN0cmluZyhvW3NdLHQucHJvcGVydGllcykscixpLHMpKXJldHVybiExfX19KSl9ci5jb29yZEVhY2g9aSxyLmNvb3JkUmVkdWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXI7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxuLGksbyxzKXthPTA9PT1uJiZ2b2lkIDA9PT1yP3Q6ZShhLHQsbixpLG8scyl9KSxuKSxhfSxyLnByb3BFYWNoPWEsci5wcm9wUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBhKHQsKGZ1bmN0aW9uKHQsaSl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGkpfSkpLG59LHIuZmVhdHVyZUVhY2g9byxyLmZlYXR1cmVSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIG8odCwoZnVuY3Rpb24odCxpKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSl9KSksbn0sci5jb29yZEFsbD1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gaSh0LChmdW5jdGlvbih0KXtlLnB1c2godCl9KSksZX0sci5nZW9tRWFjaD1zLHIuZ2VvbVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gcyh0LChmdW5jdGlvbih0LGksYSxvLHMpe249MD09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxpLGEsbyxzKX0pKSxufSxyLmZsYXR0ZW5FYWNoPWwsci5mbGF0dGVuUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBsKHQsKGZ1bmN0aW9uKHQsaSxhKXtuPTA9PT1pJiYwPT09YSYmdm9pZCAwPT09cj90OmUobix0LGksYSl9KSksbn0sci5zZWdtZW50RWFjaD1jLHIuc2VnbWVudFJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cixpPSExO3JldHVybiBjKHQsKGZ1bmN0aW9uKHQsYSxvLHMsbCl7bj0hMT09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxhLG8scyxsKSxpPSEwfSkpLG59LHIubGluZUVhY2g9dSxyLmxpbmVSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIHUodCwoZnVuY3Rpb24odCxpLGEsbyl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGksYSxvKX0pKSxufSxyLmZpbmRTZWdtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZT1lfHx7fSwhbi5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMgaXMgaW52YWxpZCIpO3ZhciByLGk9ZS5mZWF0dXJlSW5kZXh8fDAsYT1lLm11bHRpRmVhdHVyZUluZGV4fHwwLG89ZS5nZW9tZXRyeUluZGV4fHwwLHM9ZS5zZWdtZW50SW5kZXh8fDAsbD1lLnByb3BlcnRpZXM7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6aTwwJiYoaT10LmZlYXR1cmVzLmxlbmd0aCtpKSxsPWx8fHQuZmVhdHVyZXNbaV0ucHJvcGVydGllcyxyPXQuZmVhdHVyZXNbaV0uZ2VvbWV0cnk7YnJlYWs7Y2FzZSJGZWF0dXJlIjpsPWx8fHQucHJvcGVydGllcyxyPXQuZ2VvbWV0cnk7YnJlYWs7Y2FzZSJQb2ludCI6Y2FzZSJNdWx0aVBvaW50IjpyZXR1cm4gbnVsbDtjYXNlIkxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjpyPXQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdlb2pzb24gaXMgaW52YWxpZCIpfWlmKG51bGw9PT1yKXJldHVybiBudWxsO3ZhciBjPXIuY29vcmRpbmF0ZXM7c3dpdGNoKHIudHlwZSl7Y2FzZSJQb2ludCI6Y2FzZSJNdWx0aVBvaW50IjpyZXR1cm4gbnVsbDtjYXNlIkxpbmVTdHJpbmciOnJldHVybiBzPDAmJihzPWMubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW3NdLGNbcysxXV0sbCxlKTtjYXNlIlBvbHlnb24iOnJldHVybiBvPDAmJihvPWMubGVuZ3RoK28pLHM8MCYmKHM9Y1tvXS5sZW5ndGgrcy0xKSxuLmxpbmVTdHJpbmcoW2Nbb11bc10sY1tvXVtzKzFdXSxsLGUpO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxzPDAmJihzPWNbYV0ubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW2FdW3NdLGNbYV1bcysxXV0sbCxlKTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksbzwwJiYobz1jW2FdLmxlbmd0aCtvKSxzPDAmJihzPWNbYV1bb10ubGVuZ3RoLXMtMSksbi5saW5lU3RyaW5nKFtjW2FdW29dW3NdLGNbYV1bb11bcysxXV0sbCxlKX10aHJvdyBuZXcgRXJyb3IoImdlb2pzb24gaXMgaW52YWxpZCIpfSxyLmZpbmRQb2ludD1mdW5jdGlvbih0LGUpe2lmKGU9ZXx8e30sIW4uaXNPYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zIGlzIGludmFsaWQiKTt2YXIgcixpPWUuZmVhdHVyZUluZGV4fHwwLGE9ZS5tdWx0aUZlYXR1cmVJbmRleHx8MCxvPWUuZ2VvbWV0cnlJbmRleHx8MCxzPWUuY29vcmRJbmRleHx8MCxsPWUucHJvcGVydGllcztzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjppPDAmJihpPXQuZmVhdHVyZXMubGVuZ3RoK2kpLGw9bHx8dC5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLHI9dC5mZWF0dXJlc1tpXS5nZW9tZXRyeTticmVhaztjYXNlIkZlYXR1cmUiOmw9bHx8dC5wcm9wZXJ0aWVzLHI9dC5nZW9tZXRyeTticmVhaztjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOnJldHVybiBudWxsO2Nhc2UiTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvbHlnb24iOnI9dDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9aWYobnVsbD09PXIpcmV0dXJuIG51bGw7dmFyIGM9ci5jb29yZGluYXRlcztzd2l0Y2goci50eXBlKXtjYXNlIlBvaW50IjpyZXR1cm4gbi5wb2ludChjLGwsZSk7Y2FzZSJNdWx0aVBvaW50IjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxuLnBvaW50KGNbYV0sbCxlKTtjYXNlIkxpbmVTdHJpbmciOnJldHVybiBzPDAmJihzPWMubGVuZ3RoK3MpLG4ucG9pbnQoY1tzXSxsLGUpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG88MCYmKG89Yy5sZW5ndGgrbyksczwwJiYocz1jW29dLmxlbmd0aCtzKSxuLnBvaW50KGNbb11bc10sbCxlKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksczwwJiYocz1jW2FdLmxlbmd0aCtzKSxuLnBvaW50KGNbYV1bc10sbCxlKTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksbzwwJiYobz1jW2FdLmxlbmd0aCtvKSxzPDAmJihzPWNbYV1bb10ubGVuZ3RoLXMpLG4ucG9pbnQoY1thXVtvXVtzXSxsLGUpfXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9fSx7IkB0dXJmL2hlbHBlcnMiOjYyfV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL21ldGEiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF07cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe2VbMF0+dFswXSYmKGVbMF09dFswXSksZVsxXT50WzFdJiYoZVsxXT10WzFdKSxlWzJdPHRbMF0mJihlWzJdPXRbMF0pLGVbM108dFsxXSYmKGVbM109dFsxXSl9KSksZX1pLmRlZmF1bHQ9aSxyLmRlZmF1bHQ9aX0seyJAdHVyZi9tZXRhIjo2Nn1dLDY1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzYyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6NjJ9XSw2NjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs2M11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7IkB0dXJmL2hlbHBlcnMiOjY1LGR1cDo2M31dLDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIiksaT10KCJAdHVyZi9oZWxwZXJzIik7ci5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciByPTAsYT0wLG89MDtyZXR1cm4gbi5jb29yZEVhY2godCwoZnVuY3Rpb24odCl7cis9dFswXSxhKz10WzFdLG8rK30pKSxpLnBvaW50KFtyL28sYS9vXSxlLnByb3BlcnRpZXMpfX0seyJAdHVyZi9oZWxwZXJzIjo2OCwiQHR1cmYvbWV0YSI6Njl9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7dmFyIG49e3R5cGU6IkZlYXR1cmUifTtyZXR1cm4oMD09PXIuaWR8fHIuaWQpJiYobi5pZD1yLmlkKSxyLmJib3gmJihuLmJib3g9ci5iYm94KSxuLnByb3BlcnRpZXM9ZXx8e30sbi5nZW9tZXRyeT10LG59ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBhKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7Zm9yKHZhciBpPTAsYT10O2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO2lmKG8ubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLiIpO2Zvcih2YXIgcz0wO3M8b1tvLmxlbmd0aC0xXS5sZW5ndGg7cysrKWlmKG9bby5sZW5ndGgtMV1bc10hPT1vWzBdW3NdKXRocm93IG5ldyBFcnJvcigiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LiIpfXJldHVybiBuKHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMiKTtyZXR1cm4gbih7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBzKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciByPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiJ9O3JldHVybiBlLmlkJiYoci5pZD1lLmlkKSxlLmJib3gmJihyLmJib3g9ZS5iYm94KSxyLmZlYXR1cmVzPXQscn1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gZih0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0Km59ZnVuY3Rpb24gaCh0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0L259ZnVuY3Rpb24gcCh0KXtyZXR1cm4gMTgwKih0JSgyKk1hdGguUEkpKS9NYXRoLlBJfWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpJiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCkmJiEvXlxzKiQvLnRlc3QodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZWFydGhSYWRpdXM9NjM3MTAwOC44LHIuZmFjdG9ycz17Y2VudGltZXRlcnM6MTAwKnIuZWFydGhSYWRpdXMsY2VudGltZXRyZXM6MTAwKnIuZWFydGhSYWRpdXMsZGVncmVlczpyLmVhcnRoUmFkaXVzLzExMTMyNSxmZWV0OjMuMjgwODQqci5lYXJ0aFJhZGl1cyxpbmNoZXM6MzkuMzcqci5lYXJ0aFJhZGl1cyxraWxvbWV0ZXJzOnIuZWFydGhSYWRpdXMvMWUzLGtpbG9tZXRyZXM6ci5lYXJ0aFJhZGl1cy8xZTMsbWV0ZXJzOnIuZWFydGhSYWRpdXMsbWV0cmVzOnIuZWFydGhSYWRpdXMsbWlsZXM6ci5lYXJ0aFJhZGl1cy8xNjA5LjM0NCxtaWxsaW1ldGVyczoxZTMqci5lYXJ0aFJhZGl1cyxtaWxsaW1ldHJlczoxZTMqci5lYXJ0aFJhZGl1cyxuYXV0aWNhbG1pbGVzOnIuZWFydGhSYWRpdXMvMTg1MixyYWRpYW5zOjEseWFyZHM6ci5lYXJ0aFJhZGl1cy8xLjA5MzZ9LHIudW5pdHNGYWN0b3JzPXtjZW50aW1ldGVyczoxMDAsY2VudGltZXRyZXM6MTAwLGRlZ3JlZXM6MS8xMTEzMjUsZmVldDozLjI4MDg0LGluY2hlczozOS4zNyxraWxvbWV0ZXJzOi4wMDEsa2lsb21ldHJlczouMDAxLG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjEvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzLG1pbGxpbWV0cmVzOjFlMyxuYXV0aWNhbG1pbGVzOjEvMTg1MixyYWRpYW5zOjEvci5lYXJ0aFJhZGl1cyx5YXJkczoxLzEuMDkzNn0sci5hcmVhRmFjdG9ycz17YWNyZXM6MjQ3MTA1ZS05LGNlbnRpbWV0ZXJzOjFlNCxjZW50aW1ldHJlczoxZTQsZmVldDoxMC43NjM5MTA0MTcsaW5jaGVzOjE1NTAuMDAzMTAwMDA2LGtpbG9tZXRlcnM6MWUtNixraWxvbWV0cmVzOjFlLTYsbWV0ZXJzOjEsbWV0cmVzOjEsbWlsZXM6Mzg2ZS05LG1pbGxpbWV0ZXJzOjFlNixtaWxsaW1ldHJlczoxZTYseWFyZHM6MS4xOTU5OTAwNDZ9LHIuZmVhdHVyZT1uLHIuZ2VvbWV0cnk9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh2b2lkIDA9PT1yJiYocj17fSksdCl7Y2FzZSJQb2ludCI6cmV0dXJuIGkoZSkuZ2VvbWV0cnk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gbyhlKS5nZW9tZXRyeTtjYXNlIlBvbHlnb24iOnJldHVybiBhKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2ludCI6cmV0dXJuIGMoZSkuZ2VvbWV0cnk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBsKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gdShlKS5nZW9tZXRyeTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcih0KyIgaXMgaW52YWxpZCIpfX0sci5wb2ludD1pLHIucG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHModC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSl9KSkscil9LHIucG9seWdvbj1hLHIucG9seWdvbnM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSkscyh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEodCxlKX0pKSxyKX0sci5saW5lU3RyaW5nPW8sci5saW5lU3RyaW5ncz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyh0LGUpfSkpLHIpfSxyLmZlYXR1cmVDb2xsZWN0aW9uPXMsci5tdWx0aUxpbmVTdHJpbmc9bCxyLm11bHRpUG9pbnQ9YyxyLm11bHRpUG9seWdvbj11LHIuZ2VvbWV0cnlDb2xsZWN0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0fSxlLHIpfSxyLnJvdW5kPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksZSYmIShlPj0wKSl0aHJvdyBuZXcgRXJyb3IoInByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIHI9TWF0aC5wb3coMTAsZXx8MCk7cmV0dXJuIE1hdGgucm91bmQodCpyKS9yfSxyLnJhZGlhbnNUb0xlbmd0aD1mLHIubGVuZ3RoVG9SYWRpYW5zPWgsci5sZW5ndGhUb0RlZ3JlZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcChoKHQsZSkpfSxyLmJlYXJpbmdUb0F6aW11dGg9ZnVuY3Rpb24odCl7dmFyIGU9dCUzNjA7cmV0dXJuIGU8MCYmKGUrPTM2MCksZX0sci5yYWRpYW5zVG9EZWdyZWVzPXAsci5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MCpNYXRoLlBJLzE4MH0sci5jb252ZXJ0TGVuZ3RoPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpLHZvaWQgMD09PXImJihyPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImxlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGYoaCh0LGUpLHIpfSxyLmNvbnZlcnRBcmVhPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1lJiYoZT0ibWV0ZXJzIiksdm9pZCAwPT09biYmKG49ImtpbG9tZXRlcnMiKSwhKHQ+PTApKXRocm93IG5ldyBFcnJvcigiYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIGk9ci5hcmVhRmFjdG9yc1tlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgb3JpZ2luYWwgdW5pdHMiKTt2YXIgYT1yLmFyZWFGYWN0b3JzW25dO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaW5hbCB1bml0cyIpO3JldHVybiB0L2kqYX0sci5pc051bWJlcj1kLHIuaXNPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0fSxyLnZhbGlkYXRlQkJveD1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImJib3ggaXMgcmVxdWlyZWQiKTtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSIpO2lmKDQhPT10Lmxlbmd0aCYmNiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzIik7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighZCh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycyIpfSkpfSxyLnZhbGlkYXRlSWQ9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJpZCBpcyByZXF1aXJlZCIpO2lmKC0xPT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiB0KSl0aHJvdyBuZXcgRXJyb3IoImlkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmciKX0sci5yYWRpYW5zMmRlZ3JlZXM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9EZWdyZWVzYCIpfSxyLmRlZ3JlZXMycmFkaWFucz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRlZ3JlZXNUb1JhZGlhbnNgIil9LHIuZGlzdGFuY2VUb0RlZ3JlZXM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb0RlZ3JlZXNgIil9LHIuZGlzdGFuY2VUb1JhZGlhbnM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb1JhZGlhbnNgIil9LHIucmFkaWFuc1RvRGlzdGFuY2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9MZW5ndGhgIil9LHIuYmVhcmluZ1RvQW5nbGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBiZWFyaW5nVG9BemltdXRoYCIpfSxyLmNvbnZlcnREaXN0YW5jZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbnZlcnRMZW5ndGhgIil9fSx7fV0sNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL2hlbHBlcnMiKTtmdW5jdGlvbiBpKHQsZSxyKXtpZihudWxsIT09dClmb3IodmFyIG4sYSxvLHMsbCxjLHUsZixoPTAscD0wLGQ9dC50eXBlLG09IkZlYXR1cmVDb2xsZWN0aW9uIj09PWQsZz0iRmVhdHVyZSI9PT1kLHY9bT90LmZlYXR1cmVzLmxlbmd0aDoxLHk9MDt5PHY7eSsrKXtsPShmPSEhKHU9bT90LmZlYXR1cmVzW3ldLmdlb21ldHJ5Omc/dC5nZW9tZXRyeTp0KSYmIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT11LnR5cGUpP3UuZ2VvbWV0cmllcy5sZW5ndGg6MTtmb3IodmFyIHg9MDt4PGw7eCsrKXt2YXIgYj0wLF89MDtpZihudWxsIT09KHM9Zj91Lmdlb21ldHJpZXNbeF06dSkpe2M9cy5jb29yZGluYXRlczt2YXIgdz1zLnR5cGU7c3dpdGNoKGg9IXJ8fCJQb2x5Z29uIiE9PXcmJiJNdWx0aVBvbHlnb24iIT09dz8wOjEsdyl7Y2FzZSBudWxsOmJyZWFrO2Nhc2UiUG9pbnQiOmlmKCExPT09ZShjLHAseSxiLF8pKXJldHVybiExO3ArKyxiKys7YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9pbnQiOmZvcihuPTA7bjxjLmxlbmd0aDtuKyspe2lmKCExPT09ZShjW25dLHAseSxiLF8pKXJldHVybiExO3ArKywiTXVsdGlQb2ludCI9PT13JiZiKyt9IkxpbmVTdHJpbmciPT09dyYmYisrO2JyZWFrO2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmZvcihuPTA7bjxjLmxlbmd0aDtuKyspe2ZvcihhPTA7YTxjW25dLmxlbmd0aC1oO2ErKyl7aWYoITE9PT1lKGNbbl1bYV0scCx5LGIsXykpcmV0dXJuITE7cCsrfSJNdWx0aUxpbmVTdHJpbmciPT09dyYmYisrLCJQb2x5Z29uIj09PXcmJl8rK30iUG9seWdvbiI9PT13JiZiKys7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihuPTA7bjxjLmxlbmd0aDtuKyspe2ZvcihfPTAsYT0wO2E8Y1tuXS5sZW5ndGg7YSsrKXtmb3Iobz0wO288Y1tuXVthXS5sZW5ndGgtaDtvKyspe2lmKCExPT09ZShjW25dW2FdW29dLHAseSxiLF8pKXJldHVybiExO3ArK31fKyt9YisrfWJyZWFrO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpmb3Iobj0wO248cy5nZW9tZXRyaWVzLmxlbmd0aDtuKyspaWYoITE9PT1pKHMuZ2VvbWV0cmllc1tuXSxlLHIpKXJldHVybiExO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEdlb21ldHJ5IFR5cGUiKX19fX19ZnVuY3Rpb24gYSh0LGUpe3ZhciByO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmZvcihyPTA7cjx0LmZlYXR1cmVzLmxlbmd0aCYmITEhPT1lKHQuZmVhdHVyZXNbcl0ucHJvcGVydGllcyxyKTtyKyspO2JyZWFrO2Nhc2UiRmVhdHVyZSI6ZSh0LnByb3BlcnRpZXMsMCl9fWZ1bmN0aW9uIG8odCxlKXtpZigiRmVhdHVyZSI9PT10LnR5cGUpZSh0LDApO2Vsc2UgaWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZSlmb3IodmFyIHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoJiYhMSE9PWUodC5mZWF0dXJlc1tyXSxyKTtyKyspO31mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGYsaD0wLHA9IkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZSxkPSJGZWF0dXJlIj09PXQudHlwZSxtPXA/dC5mZWF0dXJlcy5sZW5ndGg6MTtmb3Iocj0wO3I8bTtyKyspe2ZvcihzPXA/dC5mZWF0dXJlc1tyXS5nZW9tZXRyeTpkP3QuZ2VvbWV0cnk6dCxjPXA/dC5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzOmQ/dC5wcm9wZXJ0aWVzOnt9LHU9cD90LmZlYXR1cmVzW3JdLmJib3g6ZD90LmJib3g6dm9pZCAwLGY9cD90LmZlYXR1cmVzW3JdLmlkOmQ/dC5pZDp2b2lkIDAsbz0obD0hIXMmJiJHZW9tZXRyeUNvbGxlY3Rpb24iPT09cy50eXBlKT9zLmdlb21ldHJpZXMubGVuZ3RoOjEsaT0wO2k8bztpKyspaWYobnVsbCE9PShhPWw/cy5nZW9tZXRyaWVzW2ldOnMpKXN3aXRjaChhLnR5cGUpe2Nhc2UiUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvaW50IjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6aWYoITE9PT1lKGEsaCxjLHUsZikpcmV0dXJuITE7YnJlYWs7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihuPTA7bjxhLmdlb21ldHJpZXMubGVuZ3RoO24rKylpZighMT09PWUoYS5nZW9tZXRyaWVzW25dLGgsYyx1LGYpKXJldHVybiExO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEdlb21ldHJ5IFR5cGUiKX1lbHNlIGlmKCExPT09ZShudWxsLGgsYyx1LGYpKXJldHVybiExO2grK319ZnVuY3Rpb24gbCh0LGUpe3ModCwoZnVuY3Rpb24odCxyLGksYSxvKXt2YXIgcyxsPW51bGw9PT10P251bGw6dC50eXBlO3N3aXRjaChsKXtjYXNlIG51bGw6Y2FzZSJQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOnJldHVybiExIT09ZShuLmZlYXR1cmUodCxpLHtiYm94OmEsaWQ6b30pLHIsMCkmJnZvaWQgMH1zd2l0Y2gobCl7Y2FzZSJNdWx0aVBvaW50IjpzPSJQb2ludCI7YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnM9IkxpbmVTdHJpbmciO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjpzPSJQb2x5Z29uIn1mb3IodmFyIGM9MDtjPHQuY29vcmRpbmF0ZXMubGVuZ3RoO2MrKyl7dmFyIHU9e3R5cGU6cyxjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzW2NdfTtpZighMT09PWUobi5mZWF0dXJlKHUsaSkscixjKSlyZXR1cm4hMX19KSl9ZnVuY3Rpb24gYyh0LGUpe2wodCwoZnVuY3Rpb24odCxyLGEpe3ZhciBvPTA7aWYodC5nZW9tZXRyeSl7dmFyIHM9dC5nZW9tZXRyeS50eXBlO2lmKCJQb2ludCIhPT1zJiYiTXVsdGlQb2ludCIhPT1zKXt2YXIgbCxjPTAsdT0wLGY9MDtyZXR1cm4hMSE9PWkodCwoZnVuY3Rpb24oaSxzLGgscCxkKXtpZih2b2lkIDA9PT1sfHxyPmN8fHA+dXx8ZD5mKXJldHVybiBsPWksYz1yLHU9cCxmPWQsdm9pZChvPTApO3ZhciBtPW4ubGluZVN0cmluZyhbbCxpXSx0LnByb3BlcnRpZXMpO2lmKCExPT09ZShtLHIsYSxkLG8pKXJldHVybiExO28rKyxsPWl9KSkmJnZvaWQgMH19fSkpfWZ1bmN0aW9uIHUodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImdlb2pzb24gaXMgcmVxdWlyZWQiKTtsKHQsKGZ1bmN0aW9uKHQscixpKXtpZihudWxsIT09dC5nZW9tZXRyeSl7dmFyIGE9dC5nZW9tZXRyeS50eXBlLG89dC5nZW9tZXRyeS5jb29yZGluYXRlcztzd2l0Y2goYSl7Y2FzZSJMaW5lU3RyaW5nIjppZighMT09PWUodCxyLGksMCwwKSlyZXR1cm4hMTticmVhaztjYXNlIlBvbHlnb24iOmZvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKWlmKCExPT09ZShuLmxpbmVTdHJpbmcob1tzXSx0LnByb3BlcnRpZXMpLHIsaSxzKSlyZXR1cm4hMX19fSkpfXIuY29vcmRFYWNoPWksci5jb29yZFJlZHVjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1yO3JldHVybiBpKHQsKGZ1bmN0aW9uKHQsbixpLG8scyl7YT0wPT09biYmdm9pZCAwPT09cj90OmUoYSx0LG4saSxvLHMpfSksbiksYX0sci5wcm9wRWFjaD1hLHIucHJvcFJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gYSh0LChmdW5jdGlvbih0LGkpe249MD09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxpKX0pKSxufSxyLmZlYXR1cmVFYWNoPW8sci5mZWF0dXJlUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsaSl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGkpfSkpLG59LHIuY29vcmRBbGw9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGkodCwoZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSkpLGV9LHIuZ2VvbUVhY2g9cyxyLmdlb21SZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIHModCwoZnVuY3Rpb24odCxpLGEsbyxzKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8scyl9KSksbn0sci5mbGF0dGVuRWFjaD1sLHIuZmxhdHRlblJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gbCh0LChmdW5jdGlvbih0LGksYSl7bj0wPT09aSYmMD09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxpLGEpfSkpLG59LHIuc2VnbWVudEVhY2g9YyxyLnNlZ21lbnRSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIsaT0hMTtyZXR1cm4gYyh0LChmdW5jdGlvbih0LGEsbyxzLGwpe249ITE9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsYSxvLHMsbCksaT0hMH0pKSxufSxyLmxpbmVFYWNoPXUsci5saW5lUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQsaSxhLG8pe249MD09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxpLGEsbyl9KSksbn0sci5maW5kU2VnbWVudD1mdW5jdGlvbih0LGUpe2lmKGU9ZXx8e30sIW4uaXNPYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zIGlzIGludmFsaWQiKTt2YXIgcixpPWUuZmVhdHVyZUluZGV4fHwwLGE9ZS5tdWx0aUZlYXR1cmVJbmRleHx8MCxvPWUuZ2VvbWV0cnlJbmRleHx8MCxzPWUuc2VnbWVudEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gczwwJiYocz1jLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1tzXSxjW3MrMV1dLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW29dW3NdLGNbb11bcysxXV0sbCxlKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksczwwJiYocz1jW2FdLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1thXVtzXSxjW2FdW3MrMV1dLGwsZSk7Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG88MCYmKG89Y1thXS5sZW5ndGgrbyksczwwJiYocz1jW2FdW29dLmxlbmd0aC1zLTEpLG4ubGluZVN0cmluZyhbY1thXVtvXVtzXSxjW2FdW29dW3MrMV1dLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX0sci5maW5kUG9pbnQ9ZnVuY3Rpb24odCxlKXtpZihlPWV8fHt9LCFuLmlzT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcigib3B0aW9ucyBpcyBpbnZhbGlkIik7dmFyIHIsaT1lLmZlYXR1cmVJbmRleHx8MCxhPWUubXVsdGlGZWF0dXJlSW5kZXh8fDAsbz1lLmdlb21ldHJ5SW5kZXh8fDAscz1lLmNvb3JkSW5kZXh8fDAsbD1lLnByb3BlcnRpZXM7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6aTwwJiYoaT10LmZlYXR1cmVzLmxlbmd0aCtpKSxsPWx8fHQuZmVhdHVyZXNbaV0ucHJvcGVydGllcyxyPXQuZmVhdHVyZXNbaV0uZ2VvbWV0cnk7YnJlYWs7Y2FzZSJGZWF0dXJlIjpsPWx8fHQucHJvcGVydGllcyxyPXQuZ2VvbWV0cnk7YnJlYWs7Y2FzZSJQb2ludCI6Y2FzZSJNdWx0aVBvaW50IjpyZXR1cm4gbnVsbDtjYXNlIkxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjpyPXQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdlb2pzb24gaXMgaW52YWxpZCIpfWlmKG51bGw9PT1yKXJldHVybiBudWxsO3ZhciBjPXIuY29vcmRpbmF0ZXM7c3dpdGNoKHIudHlwZSl7Y2FzZSJQb2ludCI6cmV0dXJuIG4ucG9pbnQoYyxsLGUpO2Nhc2UiTXVsdGlQb2ludCI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksbi5wb2ludChjW2FdLGwsZSk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gczwwJiYocz1jLmxlbmd0aCtzKSxuLnBvaW50KGNbc10sbCxlKTtjYXNlIlBvbHlnb24iOnJldHVybiBvPDAmJihvPWMubGVuZ3RoK28pLHM8MCYmKHM9Y1tvXS5sZW5ndGgrcyksbi5wb2ludChjW29dW3NdLGwsZSk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLHM8MCYmKHM9Y1thXS5sZW5ndGgrcyksbi5wb2ludChjW2FdW3NdLGwsZSk7Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG88MCYmKG89Y1thXS5sZW5ndGgrbyksczwwJiYocz1jW2FdW29dLmxlbmd0aC1zKSxuLnBvaW50KGNbYV1bb11bc10sbCxlKX10aHJvdyBuZXcgRXJyb3IoImdlb2pzb24gaXMgaW52YWxpZCIpfX0seyJAdHVyZi9oZWxwZXJzIjo2OH1dLDcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXt2YXIgYT0odD10LnNsaWNlKCkpWzBdLG89YS50b1VwcGVyQ2FzZSgpO2lmKGEhPW8pc3dpdGNoKHRbMF09byxhKXtjYXNlImEiOnRbNl0rPW4sdFs3XSs9aTticmVhaztjYXNlInYiOnRbMV0rPWk7YnJlYWs7Y2FzZSJoIjp0WzFdKz1uO2JyZWFrO2RlZmF1bHQ6Zm9yKHZhciBzPTE7czx0Lmxlbmd0aDspdFtzKytdKz1uLHRbcysrXSs9aX1zd2l0Y2gobyl7Y2FzZSJaIjpuPWUsaT1yO2JyZWFrO2Nhc2UiSCI6bj10WzFdO2JyZWFrO2Nhc2UiViI6aT10WzFdO2JyZWFrO2Nhc2UiTSI6bj1lPXRbMV0saT1yPXRbMl07YnJlYWs7ZGVmYXVsdDpuPXRbdC5sZW5ndGgtMl0saT10W3QubGVuZ3RoLTFdfXJldHVybiB0fSkpfX0se31dLDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcigiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7ZT1udWxsPT1lPzE6TWF0aC5mbG9vcihlKTtmb3IodmFyIHI9QXJyYXkoMiplKSxuPTA7bjxlO24rKyl7Zm9yKHZhciBpPS0xLzAsYT0xLzAsbz1uLHM9dC5sZW5ndGg7bzxzO28rPWUpdFtvXT5pJiYoaT10W29dKSx0W29dPGEmJihhPXRbb10pO3Jbbl09YSxyW2Urbl09aX1yZXR1cm4gcn19LHt9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KXJldHVybiB0LmZpbmRJbmRleChlLHIpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoInByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgbj1PYmplY3QodCksaT1uLmxlbmd0aDtpZigwPT09aSlyZXR1cm4tMTtmb3IodmFyIGE9MDthPGk7YSsrKWlmKGUuY2FsbChyLG5bYV0sYSxuKSlyZXR1cm4gYTtyZXR1cm4tMX19LHt9XSw3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcigiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7bnVsbD09ZSYmKGU9MSk7bnVsbD09ciYmKHI9bih0LGUpKTtmb3IodmFyIGk9MDtpPGU7aSsrKXt2YXIgYT1yW2UraV0sbz1yW2ldLHM9aSxsPXQubGVuZ3RoO2lmKGE9PT0xLzAmJm89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09YT8xOnRbc109PT1vPzA6LjU7ZWxzZSBpZihhPT09MS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09YT8xOjA7ZWxzZSBpZihvPT09LTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PW8/MDoxO2Vsc2V7dmFyIGM9YS1vO2ZvcihzPWk7czxsO3MrPWUpaXNOYU4odFtzXSl8fCh0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2MpfX1yZXR1cm4gdH19LHsiYXJyYXktYm91bmRzIjo3MX1dLDc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Im51bWJlciI9PXR5cGVvZiB0LG49Im51bWJlciI9PXR5cGVvZiBlO3ImJiFuPyhlPXQsdD0wKTpyfHxufHwodD0wLGU9MCk7dmFyIGk9KGV8PTApLSh0fD0wKTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJhcnJheSBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSIpO2Zvcih2YXIgYT1uZXcgQXJyYXkoaSksbz0wLHM9dDtvPGk7bysrLHMrKylhW29dPXM7cmV0dXJuIGF9fSx7fV0sNzU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKTsKLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi9mdW5jdGlvbiBpKHQsZSl7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLGE9TWF0aC5taW4ocixuKTtpPGE7KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH1mdW5jdGlvbiBhKHQpe3JldHVybiByLkJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIHIuQnVmZmVyLmlzQnVmZmVyP3IuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX12YXIgbz10KCJ1dGlsLyIpLHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsPUFycmF5LnByb3RvdHlwZS5zbGljZSxjPSJmb28iPT09ZnVuY3Rpb24oKXt9Lm5hbWU7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIWEodCkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfXZhciBoPWUuZXhwb3J0cz15LHA9L1xzKmZ1bmN0aW9uXHMrKFteXChcc10qKVxzKi87ZnVuY3Rpb24gZCh0KXtpZihvLmlzRnVuY3Rpb24odCkpe2lmKGMpcmV0dXJuIHQubmFtZTt2YXIgZT10LnRvU3RyaW5nKCkubWF0Y2gocCk7cmV0dXJuIGUmJmVbMV19fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5sZW5ndGg8ZT90OnQuc2xpY2UoMCxlKTp0fWZ1bmN0aW9uIGcodCl7aWYoY3x8IW8uaXNGdW5jdGlvbih0KSlyZXR1cm4gby5pbnNwZWN0KHQpO3ZhciBlPWQodCk7cmV0dXJuIltGdW5jdGlvbiIrKGU/IjogIitlOiIiKSsiXSJ9ZnVuY3Rpb24gdih0LGUscixuLGkpe3Rocm93IG5ldyBoLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24geSh0LGUpe3R8fHYodCwhMCxlLCI9PSIsaC5vayl9ZnVuY3Rpb24geCh0LGUscixuKXtpZih0PT09ZSlyZXR1cm4hMDtpZihhKHQpJiZhKGUpKXJldHVybiAwPT09aSh0LGUpO2lmKG8uaXNEYXRlKHQpJiZvLmlzRGF0ZShlKSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZihvLmlzUmVnRXhwKHQpJiZvLmlzUmVnRXhwKGUpKXJldHVybiB0LnNvdXJjZT09PWUuc291cmNlJiZ0Lmdsb2JhbD09PWUuZ2xvYmFsJiZ0Lm11bHRpbGluZT09PWUubXVsdGlsaW5lJiZ0Lmxhc3RJbmRleD09PWUubGFzdEluZGV4JiZ0Lmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2U7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8bnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYoZih0KSYmZihlKSYmdSh0KT09PXUoZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1pKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGEodCkhPT1hKGUpKXJldHVybiExO3ZhciBzPShuPW58fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119KS5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4tMSE9PXMmJnM9PT1uLmV4cGVjdGVkLmluZGV4T2YoZSl8fChuLmFjdHVhbC5wdXNoKHQpLG4uZXhwZWN0ZWQucHVzaChlKSxmdW5jdGlvbih0LGUscixuKXtpZihudWxsPT10fHxudWxsPT1lKXJldHVybiExO2lmKG8uaXNQcmltaXRpdmUodCl8fG8uaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgaT1iKHQpLGE9YihlKTtpZihpJiYhYXx8IWkmJmEpcmV0dXJuITE7aWYoaSlyZXR1cm4gdD1sLmNhbGwodCksZT1sLmNhbGwoZSkseCh0LGUscik7dmFyIHMsYyx1PVQodCksZj1UKGUpO2lmKHUubGVuZ3RoIT09Zi5sZW5ndGgpcmV0dXJuITE7Zm9yKHUuc29ydCgpLGYuc29ydCgpLGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZih1W2NdIT09ZltjXSlyZXR1cm4hMTtmb3IoYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKHM9dVtjXSwheCh0W3NdLGVbc10scixuKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxlLHIsbikpfXJldHVybiByP3Q9PT1lOnQ9PWV9ZnVuY3Rpb24gYih0KXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCxlKXtpZighdHx8IWUpcmV0dXJuITE7aWYoIltvYmplY3QgUmVnRXhwXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJiEwPT09ZS5jYWxsKHt9LHQpfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignImJsb2NrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTsic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfShlKSxuPShyJiZyLm5hbWU/IiAoIityLm5hbWUrIikuIjoiLiIpKyhuPyIgIituOiIuIiksdCYmIWkmJnYoaSxyLCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbiIrbik7dmFyIGE9InN0cmluZyI9PXR5cGVvZiBuLHM9IXQmJmkmJiFyO2lmKCghdCYmby5pc0Vycm9yKGkpJiZhJiZfKGkscil8fHMpJiZ2KGksciwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrbiksdCYmaSYmciYmIV8oaSxyKXx8IXQmJmkpdGhyb3cgaX1oLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1mdW5jdGlvbih0KXtyZXR1cm4gbShnKHQuYWN0dWFsKSwxMjgpKyIgIit0Lm9wZXJhdG9yKyIgIittKGcodC5leHBlY3RlZCksMTI4KX0odGhpcyksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgZT10LnN0YWNrU3RhcnRGdW5jdGlvbnx8djtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGUpO2Vsc2V7dmFyIHI9bmV3IEVycm9yO2lmKHIuc3RhY2spe3ZhciBuPXIuc3RhY2ssaT1kKGUpLGE9bi5pbmRleE9mKCJcbiIraSk7aWYoYT49MCl7dmFyIG89bi5pbmRleE9mKCJcbiIsYSsxKTtuPW4uc3Vic3RyaW5nKG8rMSl9dGhpcy5zdGFjaz1ufX19LG8uaW5oZXJpdHMoaC5Bc3NlcnRpb25FcnJvcixFcnJvciksaC5mYWlsPXYsaC5vaz15LGguZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJnYodCxlLHIsIj09IixoLmVxdWFsKX0saC5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmdih0LGUsciwiIT0iLGgubm90RXF1YWwpfSxoLmRlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eCh0LGUsITEpfHx2KHQsZSxyLCJkZWVwRXF1YWwiLGguZGVlcEVxdWFsKX0saC5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3godCxlLCEwKXx8dih0LGUsciwiZGVlcFN0cmljdEVxdWFsIixoLmRlZXBTdHJpY3RFcXVhbCl9LGgubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt4KHQsZSwhMSkmJnYodCxlLHIsIm5vdERlZXBFcXVhbCIsaC5ub3REZWVwRXF1YWwpfSxoLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiB0KGUscixuKXt4KGUsciwhMCkmJnYoZSxyLG4sIm5vdERlZXBTdHJpY3RFcXVhbCIsdCl9LGguc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZ2KHQsZSxyLCI9PT0iLGguc3RyaWN0RXF1YWwpfSxoLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmdih0LGUsciwiIT09IixoLm5vdFN0cmljdEVxdWFsKX0saC50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe3coITAsdCxlLHIpfSxoLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7dyghMSx0LGUscil9LGguaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9LGguc3RyaWN0PW4oKGZ1bmN0aW9uIHQoZSxyKXtlfHx2KGUsITAsciwiPT0iLHQpfSksaCx7ZXF1YWw6aC5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6aC5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6aC5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6aC5ub3REZWVwU3RyaWN0RXF1YWx9KSxoLnN0cmljdC5zdHJpY3Q9aC5zdHJpY3Q7dmFyIFQ9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KXMuY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJvYmplY3QtYXNzaWduIjoyNDcsInV0aWwvIjo3OH1dLDc2OltmdW5jdGlvbih0LGUscil7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LHt9XSw3NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWFkVUludDh9fSx7fV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXsoZnVuY3Rpb24oKXt2YXIgaT0vJVtzZGolXS9nO3IuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCF2KHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKHMoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbigiICIpfXI9MTtmb3IodmFyIG49YXJndW1lbnRzLGE9bi5sZW5ndGgsbz1TdHJpbmcodCkucmVwbGFjZShpLChmdW5jdGlvbih0KXtpZigiJSUiPT09dClyZXR1cm4iJSI7aWYocj49YSlyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2godCl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIHR9fSkpLGw9bltyXTtyPGE7bD1uWysrcl0pbShsKXx8IWIobCk/bys9IiAiK2w6bys9IiAiK3MobCk7cmV0dXJuIG99LHIuZGVwcmVjYXRlPWZ1bmN0aW9uKHQsaSl7aWYoeShuLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiByLmRlcHJlY2F0ZSh0LGkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1lLm5vRGVwcmVjYXRpb24pcmV0dXJuIHQ7dmFyIGE9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWEpe2lmKGUudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoaSk7ZS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoaSk6Y29uc29sZS5lcnJvcihpKSxhPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBhLG89e307ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6Y307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksZChlKT9uLnNob3dIaWRkZW49ZTplJiZyLl9leHRlbmQobixlKSx5KG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLHkobi5kZXB0aCkmJihuLmRlcHRoPTIpLHkobi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLHkobi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9bCksdShuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXMuc3R5bGVzW2VdO3JldHVybiByPyJceDFiWyIrcy5jb2xvcnNbcl1bMF0rIm0iK3QrIlx4MWJbIitzLmNvbG9yc1tyXVsxXSsibSI6dH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHR9ZnVuY3Rpb24gdSh0LGUsbil7aWYodC5jdXN0b21JbnNwZWN0JiZlJiZUKGUuaW5zcGVjdCkmJmUuaW5zcGVjdCE9PXIuaW5zcGVjdCYmKCFlLmNvbnN0cnVjdG9yfHxlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWUpKXt2YXIgaT1lLmluc3BlY3Qobix0KTtyZXR1cm4gdihpKXx8KGk9dSh0LGksbikpLGl9dmFyIGE9ZnVuY3Rpb24odCxlKXtpZih5KGUpKXJldHVybiB0LnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHYoZSkpe3ZhciByPSInIitKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiB0LnN0eWxpemUociwic3RyaW5nIil9aWYoZyhlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsIm51bWJlciIpO2lmKGQoZSkpcmV0dXJuIHQuc3R5bGl6ZSgiIitlLCJib29sZWFuIik7aWYobShlKSlyZXR1cm4gdC5zdHlsaXplKCJudWxsIiwibnVsbCIpfSh0LGUpO2lmKGEpcmV0dXJuIGE7dmFyIG89T2JqZWN0LmtleXMoZSkscz1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2VbdF09ITB9KSksZX0obyk7aWYodC5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksdyhlKSYmKG8uaW5kZXhPZigibWVzc2FnZSIpPj0wfHxvLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBmKGUpO2lmKDA9PT1vLmxlbmd0aCl7aWYoVChlKSl7dmFyIGw9ZS5uYW1lPyI6ICIrZS5uYW1lOiIiO3JldHVybiB0LnN0eWxpemUoIltGdW5jdGlvbiIrbCsiXSIsInNwZWNpYWwiKX1pZih4KGUpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTtpZihfKGUpKXJldHVybiB0LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwiZGF0ZSIpO2lmKHcoZSkpcmV0dXJuIGYoZSl9dmFyIGMsYj0iIixrPSExLEE9WyJ7IiwifSJdOyhwKGUpJiYoaz0hMCxBPVsiWyIsIl0iXSksVChlKSkmJihiPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSIpO3JldHVybiB4KGUpJiYoYj0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxfKGUpJiYoYj0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChlKSksdyhlKSYmKGI9IiAiK2YoZSkpLDAhPT1vLmxlbmd0aHx8ayYmMCE9ZS5sZW5ndGg/bjwwP3goZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKToodC5zZWVuLnB1c2goZSksYz1rP2Z1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPWUubGVuZ3RoO288czsrK28pRShlLFN0cmluZyhvKSk/YS5wdXNoKGgodCxlLHIsbixTdHJpbmcobyksITApKTphLnB1c2goIiIpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cZCskLyl8fGEucHVzaChoKHQsZSxyLG4saSwhMCkpfSkpLGF9KHQsZSxuLHMsbyk6by5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiBoKHQsZSxuLHMscixrKX0pKSx0LnNlZW4ucG9wKCksZnVuY3Rpb24odCxlLHIpe2lmKHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmluZGV4T2YoIlxuIik+PTAmJjAsdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSksMCk+NjApcmV0dXJuIHJbMF0rKCIiPT09ZT8iIjplKyJcbiAiKSsiICIrdC5qb2luKCIsXG4gICIpKyIgIityWzFdO3JldHVybiByWzBdK2UrIiAiK3Quam9pbigiLCAiKSsiICIrclsxXX0oYyxiLEEpKTpBWzBdK2IrQVsxXX1mdW5jdGlvbiBmKHQpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSsiXSJ9ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG8scyxsO2lmKChsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKXx8e3ZhbHVlOmVbaV19KS5nZXQ/cz1sLnNldD90LnN0eWxpemUoIltHZXR0ZXIvU2V0dGVyXSIsInNwZWNpYWwiKTp0LnN0eWxpemUoIltHZXR0ZXJdIiwic3BlY2lhbCIpOmwuc2V0JiYocz10LnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxFKG4saSl8fChvPSJbIitpKyJdIiksc3x8KHQuc2Vlbi5pbmRleE9mKGwudmFsdWUpPDA/KHM9bShyKT91KHQsbC52YWx1ZSxudWxsKTp1KHQsbC52YWx1ZSxyLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYocz1hP3Muc3BsaXQoIlxuIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iICAiK3R9KSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitzLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiAgICIrdH0pKS5qb2luKCJcbiIpKTpzPXQuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSkseShvKSl7aWYoYSYmaS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gczsobz1KU09OLnN0cmluZ2lmeSgiIitpKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8obz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpLG89dC5zdHlsaXplKG8sIm5hbWUiKSk6KG89by5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksbz10LnN0eWxpemUobywic3RyaW5nIikpfXJldHVybiBvKyI6ICIrc31mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdH1mdW5jdGlvbiBtKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBnKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdH1mdW5jdGlvbiB5KHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIHgodCl7cmV0dXJuIGIodCkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09ayh0KX1mdW5jdGlvbiBiKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gYih0KSYmIltvYmplY3QgRGF0ZV0iPT09ayh0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBiKHQpJiYoIltvYmplY3QgRXJyb3JdIj09PWsodCl8fHQgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gVCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1mdW5jdGlvbiBrKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gdDwxMD8iMCIrdC50b1N0cmluZygxMCk6dC50b1N0cmluZygxMCl9ci5kZWJ1Z2xvZz1mdW5jdGlvbih0KXtpZih5KGEpJiYoYT1lLmVudi5OT0RFX0RFQlVHfHwiIiksdD10LnRvVXBwZXJDYXNlKCksIW9bdF0paWYobmV3IFJlZ0V4cCgiXFxiIit0KyJcXGIiLCJpIikudGVzdChhKSl7dmFyIG49ZS5waWQ7b1t0XT1mdW5jdGlvbigpe3ZhciBlPXIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKCIlcyAlZDogJXMiLHQsbixlKX19ZWxzZSBvW3RdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gb1t0XX0sci5pbnNwZWN0PXMscy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LHMuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sci5pc0FycmF5PXAsci5pc0Jvb2xlYW49ZCxyLmlzTnVsbD1tLHIuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LHIuaXNOdW1iZXI9ZyxyLmlzU3RyaW5nPXYsci5pc1N5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9LHIuaXNVbmRlZmluZWQ9eSxyLmlzUmVnRXhwPXgsci5pc09iamVjdD1iLHIuaXNEYXRlPV8sci5pc0Vycm9yPXcsci5pc0Z1bmN0aW9uPVQsci5pc1ByaW1pdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHwic3ltYm9sIj09dHlwZW9mIHR8fHZvaWQgMD09PXR9LHIuaXNCdWZmZXI9dCgiLi9zdXBwb3J0L2lzQnVmZmVyIik7dmFyIE09WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBTKCl7dmFyIHQ9bmV3IERhdGUsZT1bQSh0LmdldEhvdXJzKCkpLEEodC5nZXRNaW51dGVzKCkpLEEodC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3QuZ2V0RGF0ZSgpLE1bdC5nZXRNb250aCgpXSxlXS5qb2luKCIgIil9ZnVuY3Rpb24gRSh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1yLmxvZz1mdW5jdGlvbigpe2NvbnNvbGUubG9nKCIlcyAtICVzIixTKCksci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpKX0sci5pbmhlcml0cz10KCJpbmhlcml0cyIpLHIuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2lmKCFlfHwhYihlKSlyZXR1cm4gdDtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj1yLmxlbmd0aDtuLS07KXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9zdXBwb3J0L2lzQnVmZmVyIjo3NyxfcHJvY2VzczoyNzcsaW5oZXJpdHM6NzZ9XSw3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiAzKihyK24pLzQtbn0sci50b0J5dGVBcnJheT1mdW5jdGlvbih0KXt2YXIgZSxyLG49Yyh0KSxvPW5bMF0scz1uWzFdLGw9bmV3IGEoZnVuY3Rpb24odCxlLHIpe3JldHVybiAzKihlK3IpLzQtcn0oMCxvLHMpKSx1PTAsZj1zPjA/by00Om87Zm9yKHI9MDtyPGY7cis9NCllPWlbdC5jaGFyQ29kZUF0KHIpXTw8MTh8aVt0LmNoYXJDb2RlQXQocisxKV08PDEyfGlbdC5jaGFyQ29kZUF0KHIrMildPDw2fGlbdC5jaGFyQ29kZUF0KHIrMyldLGxbdSsrXT1lPj4xNiYyNTUsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZTsyPT09cyYmKGU9aVt0LmNoYXJDb2RlQXQocildPDwyfGlbdC5jaGFyQ29kZUF0KHIrMSldPj40LGxbdSsrXT0yNTUmZSk7MT09PXMmJihlPWlbdC5jaGFyQ29kZUF0KHIpXTw8MTB8aVt0LmNoYXJDb2RlQXQocisxKV08PDR8aVt0LmNoYXJDb2RlQXQocisyKV0+PjIsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZSk7cmV0dXJuIGx9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpYS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09aT8oZT10W3ItMV0sYS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXSsiPT0iKSk6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdKyI9IikpO3JldHVybiBhLmpvaW4oIiIpfTtmb3IodmFyIG49W10saT1bXSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3MpbltzXT1vW3NdLGlbby5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIGModCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIHI9dC5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGksYSxvPVtdLHM9ZTtzPHI7cys9MylpPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhhPWkpPj4xOCY2M10rblthPj4xMiY2M10rblthPj42JjYzXStuWzYzJmFdKTtyZXR1cm4gby5qb2luKCIiKX1pWyItIi5jaGFyQ29kZUF0KDApXT02MixpWyJfIi5jaGFyQ29kZUF0KDApXT02M30se31dLDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXtmb3IodmFyIGE9aSsxO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKT49MD8oYT1vLGk9by0xKTpuPW8rMX1yZXR1cm4gYX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7Zm9yKHZhciBhPWkrMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk+MD8oYT1vLGk9by0xKTpuPW8rMX1yZXR1cm4gYX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4tMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk8MD8oYT1vLG49bysxKTppPW8tMX1yZXR1cm4gYX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBhPW4tMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk8PTA/KGE9byxuPW8rMSk6aT1vLTF9cmV0dXJuIGF9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2Zvcig7bjw9aTspe3ZhciBhPW4raT4+PjEsbz10W2FdLHM9dm9pZCAwIT09cj9yKG8sZSk6by1lO2lmKDA9PT1zKXJldHVybiBhO3M8PTA/bj1hKzE6aT1hLTF9cmV0dXJuLTF9ZnVuY3Rpb24gbCh0LGUscixuLGksYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/YSh0LGUscix2b2lkIDA9PT1uPzA6MHxuLHZvaWQgMD09PWk/dC5sZW5ndGgtMTowfGkpOmEodCxlLHZvaWQgMCx2b2lkIDA9PT1yPzA6MHxyLHZvaWQgMD09PW4/dC5sZW5ndGgtMTowfG4pfWUuZXhwb3J0cz17Z2U6ZnVuY3Rpb24odCxlLHIsaSxhKXtyZXR1cm4gbCh0LGUscixpLGEsbil9LGd0OmZ1bmN0aW9uKHQsZSxyLG4sYSl7cmV0dXJuIGwodCxlLHIsbixhLGkpfSxsdDpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBsKHQsZSxyLG4saSxhKX0sbGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbCh0LGUscixuLGksbyl9LGVxOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGwodCxlLHIsbixpLHMpfX19LHt9XSw4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTMyO3JldHVybih0Jj0tdCkmJmUtLSw2NTUzNSZ0JiYoZS09MTYpLDE2NzExOTM1JnQmJihlLT04KSwyNTI2NDUxMzUmdCYmKGUtPTQpLDg1ODk5MzQ1OSZ0JiYoZS09MiksMTQzMTY1NTc2NSZ0JiYoZS09MSksZX1yLklOVF9CSVRTPTMyLHIuSU5UX01BWD0yMTQ3NDgzNjQ3LHIuSU5UX01JTj0tMTw8MzEsci5zaWduPWZ1bmN0aW9uKHQpe3JldHVybih0PjApLSh0PDApfSxyLmFicz1mdW5jdGlvbih0KXt2YXIgZT10Pj4zMTtyZXR1cm4odF5lKS1lfSxyLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiBlXih0XmUpJi0odDxlKX0sci5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4odF5lKSYtKHQ8ZSl9LHIuaXNQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiEodCZ0LTF8fCF0KX0sci5sb2cyPWZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuIGU9KHQ+NjU1MzUpPDw0LGV8PXI9KCh0Pj4+PWUpPjI1NSk8PDMsZXw9cj0oKHQ+Pj49cik+MTUpPDwyLChlfD1yPSgodD4+Pj1yKT4zKTw8MSl8KHQ+Pj49cik+PjF9LHIubG9nMTA9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTFlOT85OnQ+PTFlOD84OnQ+PTFlNz83OnQ+PTFlNj82OnQ+PTFlNT81OnQ+PTFlND80OnQ+PTFlMz8zOnQ+PTEwMD8yOnQ+PTEwPzE6MH0sci5wb3BDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gMTY4NDMwMDkqKCh0PSg4NTg5OTM0NTkmKHQtPXQ+Pj4xJjE0MzE2NTU3NjUpKSsodD4+PjImODU4OTkzNDU5KSkrKHQ+Pj40KSYyNTI2NDUxMzUpPj4+MjR9LHIuY291bnRUcmFpbGluZ1plcm9zPW4sci5uZXh0UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdCs9MD09PXQsLS10LHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpKzF9LHIucHJldlBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpLSh0Pj4+MSl9LHIucGFyaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Xj10Pj4+MTYsdF49dD4+PjgsdF49dD4+PjQsMjcwMzA+Pj4odCY9MTUpJjF9O3ZhciBpPW5ldyBBcnJheSgyNTYpOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDI1NjsrK2Upe3ZhciByPWUsbj1lLGk9Nztmb3Iocj4+Pj0xO3I7cj4+Pj0xKW48PD0xLG58PTEmciwtLWk7dFtlXT1uPDxpJjI1NX19KGkpLHIucmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gaVsyNTUmdF08PDI0fGlbdD4+PjgmMjU1XTw8MTZ8aVt0Pj4+MTYmMjU1XTw8OHxpW3Q+Pj4yNCYyNTVdfSxyLmludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodCY9NjU1MzUpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlJj02NTUzNSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfSxyLmRlaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD02NTUzNSYoKHQ9MTY3MTE5MzUmKCh0PTI1MjY0NTEzNSYoKHQ9ODU4OTkzNDU5JigodD10Pj4+ZSYxNDMxNjU1NzY1KXx0Pj4+MSkpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+MTYpKTw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0xMjI3MTMzNTEzJigodD0zMjcyMzU2MDM1JigodD0yNTE3MTk2OTUmKCh0PTQyNzgxOTAzMzUmKCh0Jj0xMDIzKXx0PDwxNikpfHQ8PDgpKXx0PDw0KSl8dDw8MiksKHR8PShlPTEyMjcxMzM1MTMmKChlPTMyNzIzNTYwMzUmKChlPTI1MTcxOTY5NSYoKGU9NDI3ODE5MDMzNSYoKGUmPTEwMjMpfGU8PDE2KSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSk8PDEpfChyPTEyMjcxMzM1MTMmKChyPTMyNzIzNTYwMzUmKChyPTI1MTcxOTY5NSYoKHI9NDI3ODE5MDMzNSYoKHImPTEwMjMpfHI8PDE2KSl8cjw8OCkpfHI8PDQpKXxyPDwyKSk8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybih0PTEwMjMmKCh0PTQyNzgxOTAzMzUmKCh0PTI1MTcxOTY5NSYoKHQ9MzI3MjM1NjAzNSYoKHQ9dD4+PmUmMTIyNzEzMzUxMyl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj44KSl8dD4+PjE2KSk8PDIyPj4yMn0sci5uZXh0Q29tYmluYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dHx0LTE7cmV0dXJuIGUrMXwofmUmLX5lKS0xPj4+bih0KSsxfX0se31dLDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pO3ZhciByLG8scyxsLGMsdSxmLGgscCxkLG0sZz1udWxsPT1lLmN1dG9mZj8uMjU6ZS5jdXRvZmYsdj1udWxsPT1lLnJhZGl1cz84OmUucmFkaXVzLHk9ZS5jaGFubmVsfHwwO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8QXJyYXkuaXNBcnJheSh0KSl7aWYoIWUud2lkdGh8fCFlLmhlaWdodCl0aHJvdyBFcnJvcigiRm9yIHJhdyBkYXRhIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG9wdGlvbnMiKTtyPWUud2lkdGgsbz1lLmhlaWdodCxsPXQsdT1lLnN0cmlkZT9lLnN0cmlkZTpNYXRoLmZsb29yKHQubGVuZ3RoL3Ivbyl9ZWxzZSB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ/KGY9KGg9dCkuZ2V0Q29udGV4dCgiMmQiKSxyPWgud2lkdGgsbz1oLmhlaWdodCxwPWYuZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ/KGg9dC5jYW52YXMsZj10LHI9aC53aWR0aCxvPWguaGVpZ2h0LHA9Zi5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2Ygd2luZG93LkltYWdlRGF0YSYmKHA9dCxyPXQud2lkdGgsbz10LmhlaWdodCxsPXAuZGF0YSx1PTQpO2lmKHM9TWF0aC5tYXgocixvKSx3aW5kb3cuVWludDhDbGFtcGVkQXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhDbGFtcGVkQXJyYXl8fHdpbmRvdy5VaW50OEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4QXJyYXkpZm9yKGM9bCxsPUFycmF5KHIqbyksZD0wLG09Yy5sZW5ndGg7ZDxtO2QrKylsW2RdPWNbZCp1K3ldLzI1NTtlbHNlIGlmKDEhPT11KXRocm93IEVycm9yKCJSYXcgZGF0YSBjYW4gaGF2ZSBvbmx5IDEgdmFsdWUgcGVyIHBpeGVsIik7dmFyIHg9QXJyYXkocipvKSxiPUFycmF5KHIqbyksXz1BcnJheShzKSx3PUFycmF5KHMpLFQ9QXJyYXkocysxKSxrPUFycmF5KHMpO2ZvcihkPTAsbT1yKm87ZDxtO2QrKyl7dmFyIEE9bFtkXTt4W2RdPTE9PT1BPzA6MD09PUE/aTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LUEpLDIpLGJbZF09MT09PUE/aTowPT09QT8wOk1hdGgucG93KE1hdGgubWF4KDAsQS0uNSksMil9YSh4LHIsbyxfLHcsayxUKSxhKGIscixvLF8sdyxrLFQpO3ZhciBNPXdpbmRvdy5GbG9hdDMyQXJyYXk/bmV3IEZsb2F0MzJBcnJheShyKm8pOm5ldyBBcnJheShyKm8pO2ZvcihkPTAsbT1yKm87ZDxtO2QrKylNW2RdPW4oMS0oKHhbZF0tYltkXSkvditnKSwwLDEpO3JldHVybiBNfTt2YXIgaT0xZTIwO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPTA7bDxlO2wrKyl7Zm9yKHZhciBjPTA7YzxyO2MrKyluW2NdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsciksYz0wO2M8cjtjKyspdFtjKmUrbF09aVtjXX1mb3IoYz0wO2M8cjtjKyspe2ZvcihsPTA7bDxlO2wrKyluW2xdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsZSksbD0wO2w8ZTtsKyspdFtjKmUrbF09TWF0aC5zcXJ0KGlbbF0pfX1mdW5jdGlvbiBvKHQsZSxyLG4sYSl7clswXT0wLG5bMF09LWksblsxXT0raTtmb3IodmFyIG89MSxzPTA7bzxhO28rKyl7Zm9yKHZhciBsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7bDw9bltzXTspcy0tLGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtyWysrc109byxuW3NdPWwsbltzKzFdPStpfWZvcihvPTAscz0wO288YTtvKyspe2Zvcig7bltzKzFdPG87KXMrKztlW29dPShvLXJbc10pKihvLXJbc10pK3RbcltzXV19fX0se2NsYW1wOjg2fV0sODM6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsYT1pJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5hcHBseT9pLmFwcGx5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodCxlLHIpfTtuPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLm93bktleXM/aS5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpKX06ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpfTt2YXIgbz1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKHQpe3JldHVybiB0IT10fTtmdW5jdGlvbiBzKCl7cy5pbml0LmNhbGwodGhpcyl9ZS5leHBvcnRzPXMsZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7ZnVuY3Rpb24gaSgpe3ZvaWQgMCE9PWEmJnQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixhKSxyKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9dmFyIGE7ImVycm9yIiE9PWUmJihhPWZ1bmN0aW9uKHIpe3QucmVtb3ZlTGlzdGVuZXIoZSxpKSxuKHIpfSx0Lm9uY2UoImVycm9yIixhKSksdC5vbmNlKGUsaSl9KSl9LHMuRXZlbnRFbWl0dGVyPXMscy5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAscy5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAscy5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIGw9MTA7ZnVuY3Rpb24gYyh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09dC5fbWF4TGlzdGVuZXJzP3MuZGVmYXVsdE1heExpc3RlbmVyczp0Ll9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaSxhLG8scztpZihjKHIpLHZvaWQgMD09PShhPXQuX2V2ZW50cyk/KGE9dC5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdC5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PWEubmV3TGlzdGVuZXImJih0LmVtaXQoIm5ld0xpc3RlbmVyIixlLHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxhPXQuX2V2ZW50cyksbz1hW2VdKSx2b2lkIDA9PT1vKW89YVtlXT1yLCsrdC5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vPWFbZV09bj9bcixvXTpbbyxyXTpuP28udW5zaGlmdChyKTpvLnB1c2gociksKGk9dSh0KSk+MCYmby5sZW5ndGg+aSYmIW8ud2FybmVkKXtvLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitvLmxlbmd0aCsiICIrU3RyaW5nKGUpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2wubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PW8ubGVuZ3RoLHM9bCxjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihzKX1yZXR1cm4gdH1mdW5jdGlvbiBoKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dCx0eXBlOmUsbGlzdGVuZXI6cn0saT1oLmJpbmQobik7cmV0dXJuIGkubGlzdGVuZXI9cixuLndyYXBGbj1pLGl9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49dC5fZXZlbnRzO2lmKHZvaWQgMD09PW4pcmV0dXJuW107dmFyIGk9bltlXTtyZXR1cm4gdm9pZCAwPT09aT9bXToiZnVuY3Rpb24iPT10eXBlb2YgaT9yP1tpLmxpc3RlbmVyfHxpXTpbaV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShpKTpnKGksaS5sZW5ndGgpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWUpe3ZhciByPWVbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYodm9pZCAwIT09cilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc2V0OmZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxvKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrdCsiLiIpO2w9dH19KSxzLmluaXQ9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50cyE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxzLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fG8odCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyt0KyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz10LHRoaXN9LHMucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMpfSxzLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2goYXJndW1lbnRzW3JdKTt2YXIgbj0iZXJyb3IiPT09dCxpPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1pKW49biYmdm9pZCAwPT09aS5lcnJvcjtlbHNlIGlmKCFuKXJldHVybiExO2lmKG4pe3ZhciBvO2lmKGUubGVuZ3RoPjAmJihvPWVbMF0pLG8gaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBvO3ZhciBzPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKG8/IiAoIitvLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgcy5jb250ZXh0PW8sc312YXIgbD1pW3RdO2lmKHZvaWQgMD09PWwpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpYShsLHRoaXMsZSk7ZWxzZXt2YXIgYz1sLmxlbmd0aCx1PWcobCxjKTtmb3Iocj0wO3I8YzsrK3IpYSh1W3JdLHRoaXMsZSl9cmV0dXJuITB9LHMucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodGhpcyx0LGUsITEpfSxzLnByb3RvdHlwZS5vbj1zLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixzLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0aGlzLHQsZSwhMCl9LHMucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYyhlKSx0aGlzLm9uKHQscCh0aGlzLHQsZSkpLHRoaXN9LHMucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYyhlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcih0LHAodGhpcyx0LGUpKSx0aGlzfSxzLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG87aWYoYyhlKSx2b2lkIDA9PT0obj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShyPW5bdF0pKXJldHVybiB0aGlzO2lmKHI9PT1lfHxyLmxpc3RlbmVyPT09ZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgblt0XSxuLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LHIubGlzdGVuZXJ8fGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiByKXtmb3IoaT0tMSxhPXIubGVuZ3RoLTE7YT49MDthLS0paWYoclthXT09PWV8fHJbYV0ubGlzdGVuZXI9PT1lKXtvPXJbYV0ubGlzdGVuZXIsaT1hO2JyZWFrfWlmKGk8MClyZXR1cm4gdGhpczswPT09aT9yLnNoaWZ0KCk6ZnVuY3Rpb24odCxlKXtmb3IoO2UrMTx0Lmxlbmd0aDtlKyspdFtlXT10W2UrMV07dC5wb3AoKX0ocixpKSwxPT09ci5sZW5ndGgmJihuW3RdPXJbMF0pLHZvaWQgMCE9PW4ucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHQsb3x8ZSl9cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLm9mZj1zLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcixzLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscixuO2lmKHZvaWQgMD09PShyPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09ci5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PXJbdF0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgaSxhPU9iamVjdC5rZXlzKHIpO2ZvcihuPTA7bjxhLmxlbmd0aDsrK24pInJlbW92ZUxpc3RlbmVyIiE9PShpPWFbbl0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhpKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihlPXJbdF0pKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlKTtlbHNlIGlmKHZvaWQgMCE9PWUpZm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsZVtuXSk7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZCh0aGlzLHQsITApfSxzLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGQodGhpcyx0LCExKX0scy5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQubGlzdGVuZXJDb3VudD90Lmxpc3RlbmVyQ291bnQoZSk6bS5jYWxsKHQsZSl9LHMucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9bSxzLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/bih0aGlzLl9ldmVudHMpOltdfX0se31dLDg1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpewovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCiJ1c2Ugc3RyaWN0Ijt2YXIgZT10KCJiYXNlNjQtanMiKSxuPXQoImllZWU3NTQiKTtyLkJ1ZmZlcj1hLHIuU2xvd0J1ZmZlcj1mdW5jdGlvbih0KXsrdCE9dCYmKHQ9MCk7cmV0dXJuIGEuYWxsb2MoK3QpfSxyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2Z1bmN0aW9uIGkodCl7aWYodD4yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIGUuX19wcm90b19fPWEucHJvdG90eXBlLGV9ZnVuY3Rpb24gYSh0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIGwodCl9cmV0dXJuIG8odCxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZXx8KGU9InV0ZjgiKTtpZighYS5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7dmFyIHI9MHxmKHQsZSksbj1pKHIpLG89bi53cml0ZSh0LGUpO28hPT1yJiYobj1uLnNsaWNlKDAsbykpO3JldHVybiBufSh0LGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gYyh0KTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCk7aWYoQih0LEFycmF5QnVmZmVyKXx8dCYmQih0LmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlPDB8fHQuYnl0ZUxlbmd0aDxlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBuO249dm9pZCAwPT09ZSYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsZSk6bmV3IFVpbnQ4QXJyYXkodCxlLHIpO3JldHVybiBuLl9fcHJvdG9fXz1hLnByb3RvdHlwZSxufSh0LGUscik7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBuPXQudmFsdWVPZiYmdC52YWx1ZU9mKCk7aWYobnVsbCE9biYmbiE9PXQpcmV0dXJuIGEuZnJvbShuLGUscik7dmFyIG89ZnVuY3Rpb24odCl7aWYoYS5pc0J1ZmZlcih0KSl7dmFyIGU9MHx1KHQubGVuZ3RoKSxyPWkoZSk7cmV0dXJuIDA9PT1yLmxlbmd0aHx8dC5jb3B5KHIsMCwwLGUpLHJ9aWYodm9pZCAwIT09dC5sZW5ndGgpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8Tih0Lmxlbmd0aCk/aSgwKTpjKHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZBcnJheS5pc0FycmF5KHQuZGF0YSkpcmV0dXJuIGModC5kYXRhKX0odCk7aWYobylyZXR1cm4gbztpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgdFtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBhLmZyb20odFtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxlLHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIHQpfWZ1bmN0aW9uIHModCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcyh0KSxpKHQ8MD8wOjB8dSh0KSl9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8dSh0Lmxlbmd0aCkscj1pKGUpLG49MDtuPGU7bis9MSlyW25dPTI1NSZ0W25dO3JldHVybiByfWZ1bmN0aW9uIHUodCl7aWYodD49MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrMjE0NzQ4MzY0Ny4udG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIGYodCxlKXtpZihhLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fEIodCxBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3ZhciByPXQubGVuZ3RoLG49YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighbiYmMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRCh0KS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFIodCkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gbj8tMTpEKHQpLmxlbmd0aDtlPSgiIitlKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVybiIiO2Zvcih0fHwodD0idXRmOCIpOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gTSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGsodGhpcyxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEEodGhpcyxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdyh0aGlzLGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBTKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0KTt0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBkKHQsZSxyLG4saSl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCksTihyPStyKSYmKHI9aT8wOnQubGVuZ3RoLTEpLHI8MCYmKHI9dC5sZW5ndGgrcikscj49dC5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7cj10Lmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighaSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1hLmZyb20oZSxuKSksYS5pc0J1ZmZlcihlKSlyZXR1cm4gMD09PWUubGVuZ3RoPy0xOm0odCxlLHIsbixpKTtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LGUscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LGUscik6bSh0LFtlXSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gbSh0LGUscixuLGkpe3ZhciBhLG89MSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4tMTtvPTIscy89MixsLz0yLHIvPTJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiAxPT09bz90W2VdOnQucmVhZFVJbnQxNkJFKGUqbyl9aWYoaSl7dmFyIHU9LTE7Zm9yKGE9cjthPHM7YSsrKWlmKGModCxhKT09PWMoZSwtMT09PXU/MDphLXUpKXtpZigtMT09PXUmJih1PWEpLGEtdSsxPT09bClyZXR1cm4gdSpvfWVsc2UtMSE9PXUmJihhLT1hLXUpLHU9LTF9ZWxzZSBmb3IocitsPnMmJihyPXMtbCksYT1yO2E+PTA7YS0tKXtmb3IodmFyIGY9ITAsaD0wO2g8bDtoKyspaWYoYyh0LGEraCkhPT1jKGUsaCkpe2Y9ITE7YnJlYWt9aWYoZilyZXR1cm4gYX1yZXR1cm4tMX1mdW5jdGlvbiBnKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgYT1lLmxlbmd0aDtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKE4ocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24gdih0LGUscixuKXtyZXR1cm4gRihEKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIEYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9KGUpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiB5KHQsZSxyLG4pfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIEYoUihlKSx0LHIsbil9ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gRihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksYT1bXSxvPTA7bzx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KytvKXI9dC5jaGFyQ29kZUF0KG8pLG49cj4+OCxpPXIlMjU2LGEucHVzaChpKSxhLnB1c2gobik7cmV0dXJuIGF9KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHcodCxyLG4pe3JldHVybiAwPT09ciYmbj09PXQubGVuZ3RoP2UuZnJvbUJ5dGVBcnJheSh0KTplLmZyb21CeXRlQXJyYXkodC5zbGljZShyLG4pKX1mdW5jdGlvbiBUKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPWU7aTxyOyl7dmFyIGEsbyxzLGwsYz10W2ldLHU9bnVsbCxmPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStmPD1yKXN3aXRjaChmKXtjYXNlIDE6YzwxMjgmJih1PWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKGE9dFtpKzFdKSkmJihsPSgzMSZjKTw8Nnw2MyZhKT4xMjcmJih1PWwpO2JyZWFrO2Nhc2UgMzphPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKGw9KDE1JmMpPDwxMnwoNjMmYSk8PDZ8NjMmbyk+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYodT1sKTticmVhaztjYXNlIDQ6YT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGw9KDE1JmMpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT42NTUzNSYmbDwxMTE0MTEyJiYodT1sKX1udWxsPT09dT8odT02NTUzMyxmPTEpOnU+NjU1MzUmJih1LT02NTUzNixuLnB1c2godT4+PjEwJjEwMjN8NTUyOTYpLHU9NTYzMjB8MTAyMyZ1KSxuLnB1c2godSksaSs9Zn1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7dmFyIHI9IiIsbj0wO2Zvcig7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1yLmtNYXhMZW5ndGg9MjE0NzQ4MzY0NyxhLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpfWNhdGNoKHQpe3JldHVybiExfX0oKSxhLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihhLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoYS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wuc3BlY2llcyYmYVtTeW1ib2wuc3BlY2llc109PT1hJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMX0pLGEucG9vbFNpemU9ODE5MixhLmZyb209ZnVuY3Rpb24odCxlLHIpe3JldHVybiBvKHQsZSxyKX0sYS5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGEuX19wcm90b19fPVVpbnQ4QXJyYXksYS5hbGxvYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcyh0KSx0PD0wP2kodCk6dm9pZCAwIT09ZT8ic3RyaW5nIj09dHlwZW9mIHI/aSh0KS5maWxsKGUscik6aSh0KS5maWxsKGUpOmkodCl9KHQsZSxyKX0sYS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LGEuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiEwPT09dC5faXNCdWZmZXImJnQhPT1hLnByb3RvdHlwZX0sYS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7aWYoQih0LFVpbnQ4QXJyYXkpJiYodD1hLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSxCKGUsVWludDhBcnJheSkmJihlPWEuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCkpLCFhLmlzQnVmZmVyKHQpfHwhYS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxhLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGEuY29uY2F0PWZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gYS5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT1lKWZvcihlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl0ubGVuZ3RoO3ZhciBuPWEuYWxsb2NVbnNhZmUoZSksaT0wO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBvPXRbcl07aWYoQihvLFVpbnQ4QXJyYXkpJiYobz1hLmZyb20obykpLCFhLmlzQnVmZmVyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sYS5ieXRlTGVuZ3RoPWYsYS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGEucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilwKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpcCh0aGlzLGUsZSszKSxwKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClwKHRoaXMsZSxlKzcpLHAodGhpcyxlKzEsZSs2KSxwKHRoaXMsZSsyLGUrNSkscCh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9UKHRoaXMsMCx0KTpoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9YS5wcm90b3R5cGUudG9TdHJpbmcsYS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1hLmNvbXBhcmUodGhpcyx0KX0sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdD10aGlzLnRvU3RyaW5nKCJoZXgiLDAsZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5lJiYodCs9IiAuLi4gIiksIjxCdWZmZXIgIit0KyI+In0sYS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKEIodCxVaW50OEFycmF5KSYmKHQ9YS5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJmU+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLShlPj4+PTApLGw9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UobixpKSx1PXQuc2xpY2UoZSxyKSxmPTA7ZjxsOysrZilpZihjW2ZdIT09dVtmXSl7bz1jW2ZdLHM9dVtmXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGEucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0LGUscil9LGEucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBkKHRoaXMsdCxlLHIsITApfSxhLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQodGhpcyx0LGUsciwhMSl9LGEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj0idXRmOCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlPj4+PTAsaXNGaW5pdGUocik/KHI+Pj49MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBhPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gZyh0aGlzLHQsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB2KHRoaXMsdCxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiB5KHRoaXMsdCxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHgodGhpcyx0LGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBiKHRoaXMsdCxlLHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gXyh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsYT1lO2E8cjsrK2EpaSs9eih0W2FdKTtyZXR1cm4gaX1mdW5jdGlvbiBTKHQsZSxyKXtmb3IodmFyIG49dC5zbGljZShlLHIpLGk9IiIsYT0wO2E8bi5sZW5ndGg7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bYV0rMjU2Km5bYSsxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gRSh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gTCh0LGUscixuLGksbyl7aWYoIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+aXx8ZTxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEModCxlLHIsbixpLGEpe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKHQsZSxyLGksYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fEModCwwLHIsNCksbi53cml0ZSh0LGUscixpLDIzLDQpLHIrNH1mdW5jdGlvbiBJKHQsZSxyLGksYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fEModCwwLHIsOCksbi53cml0ZSh0LGUscixpLDUyLDgpLHIrOH1hLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoOyh0PX5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSwoZT12b2lkIDA9PT1lP3I6fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1hLnByb3RvdHlwZSxufSxhLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LGEucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0sYS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0sYS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LGEucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxhLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxhLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxhLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LGEucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gYT49KGkqPTEyOCkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LGEucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LGEucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sYS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxhLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0sYS5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LGEucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsdCwhMCwyMyw0KX0sYS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCExLDIzLDQpfSxhLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw4LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxhLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw4LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCExLDUyLDgpfSxhLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHxMKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHxMKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLGE9MTtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxhLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sYS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGEucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxhLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7TCh0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthLTFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7TCh0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZSthXT0yNTUmdDstLWE+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ErMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LGEucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sYS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxhLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LGEucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFAodGhpcyx0LGUsITAscil9LGEucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFAodGhpcyx0LGUsITEscil9LGEucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBJKHRoaXMsdCxlLCEwLHIpfSxhLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMSxyKX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZighYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLGU+PXQubGVuZ3RoJiYoZT10Lmxlbmd0aCksZXx8KGU9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT10Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGk9bi1yO2lmKHRoaXM9PT10JiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4oZSxyLG4pO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcih2YXIgbz1pLTE7bz49MDstLW8pdFtvK2VdPXRoaXNbbytyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLG4pLGUpO3JldHVybiBpfSxhLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWEuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1uJiZpPDEyOHx8ImxhdGluMSI9PT1uKSYmKHQ9aSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHQmJih0Jj0yNTUpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9ZSlyZXR1cm4gdGhpczt2YXIgbztpZihlPj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLHR8fCh0PTApLCJudW1iZXIiPT10eXBlb2YgdClmb3Iobz1lO288cjsrK28pdGhpc1tvXT10O2Vsc2V7dmFyIHM9YS5pc0J1ZmZlcih0KT90OmEuZnJvbSh0LG4pLGw9cy5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihvPTA7bzxyLWU7KytvKXRoaXNbbytlXT1zW28lbF19cmV0dXJuIHRoaXN9O3ZhciBPPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24geih0KXtyZXR1cm4gdDwxNj8iMCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gRCh0LGUpe3ZhciByO2U9ZXx8MS8wO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9dC5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhazthLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO2EucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhazthLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChlLT00KTwwKWJyZWFrO2EucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIGF9ZnVuY3Rpb24gUih0KXtyZXR1cm4gZS50b0J5dGVBcnJheShmdW5jdGlvbih0KXtpZigodD0odD10LnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKE8sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO3QubGVuZ3RoJTQhPTA7KXQrPSI9IjtyZXR1cm4gdH0odCkpfWZ1bmN0aW9uIEYodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gQih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8bnVsbCE9dCYmbnVsbCE9dC5jb25zdHJ1Y3RvciYmbnVsbCE9dC5jb25zdHJ1Y3Rvci5uYW1lJiZ0LmNvbnN0cnVjdG9yLm5hbWU9PT1lLm5hbWV9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdCE9dH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYmFzZTY0LWpzIjo3OSxidWZmZXI6ODUsaWVlZTc1NDoyMzB9XSw4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU8cj90PGU/ZTp0PnI/cjp0OnQ8cj9yOnQ+ZT9lOnR9fSx7fV0sODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY2xhbXAiKTtmdW5jdGlvbiBpKHQsZSl7bnVsbD09ZSYmKGU9ITApO3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM107cmV0dXJuIG51bGw9PW8mJihvPWU/MToyNTUpLGUmJihyKj0yNTUsaSo9MjU1LGEqPTI1NSxvKj0yNTUpLDE2Nzc3MjE2KihyPTI1NSZuKHIsMCwyNTUpKSsoKGk9MjU1Jm4oaSwwLDI1NSkpPDwxNikrKChhPTI1NSZuKGEsMCwyNTUpKTw8OCkrKG89MjU1Jm4obywwLDI1NSkpfWUuZXhwb3J0cz1pLGUuZXhwb3J0cy50bz1pLGUuZXhwb3J0cy5mcm9tPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQ9K3QpPj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixpPSg2NTI4MCZ0KT4+PjgsYT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19fSx7Y2xhbXA6ODZ9XSw4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSw4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1yZ2JhIiksaT10KCJjbGFtcCIpLGE9dCgiZHR5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZmxvYXQiIT09ZSYmZXx8KGU9ImFycmF5IiksInVpbnQiPT09ZSYmKGU9InVpbnQ4IiksInVpbnRfY2xhbXBlZCI9PT1lJiYoZT0idWludDhfY2xhbXBlZCIpO3ZhciByPW5ldyhhKGUpKSg0KSxvPSJ1aW50OCIhPT1lJiYidWludDhfY2xhbXBlZCIhPT1lO3JldHVybiB0Lmxlbmd0aCYmInN0cmluZyIhPXR5cGVvZiB0fHwoKHQ9bih0KSlbMF0vPTI1NSx0WzFdLz0yNTUsdFsyXS89MjU1KSxmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ISEoQXJyYXkuaXNBcnJheSh0KSYmKHRbMF0+MXx8MD09PXRbMF0pJiYodFsxXT4xfHwwPT09dFsxXSkmJih0WzJdPjF8fDA9PT10WzJdKSYmKCF0WzNdfHx0WzNdPjEpKX0odCk/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjI1NSxvJiYoclswXS89MjU1LHJbMV0vPTI1NSxyWzJdLz0yNTUsclszXS89MjU1KSxyKToobz8oclswXT10WzBdLHJbMV09dFsxXSxyWzJdPXRbMl0sclszXT1udWxsIT10WzNdP3RbM106MSk6KHJbMF09aShNYXRoLmZsb29yKDI1NSp0WzBdKSwwLDI1NSksclsxXT1pKE1hdGguZmxvb3IoMjU1KnRbMV0pLDAsMjU1KSxyWzJdPWkoTWF0aC5mbG9vcigyNTUqdFsyXSksMCwyNTUpLHJbM109bnVsbD09dFszXT8yNTU6aShNYXRoLmZsb29yKDI1NSp0WzNdKSwwLDI1NSkpLHIpfX0se2NsYW1wOjg2LCJjb2xvci1yZ2JhIjo5MSxkdHlwZToxMjd9XSw5MDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItbmFtZSIpLGk9dCgiaXMtcGxhaW4tb2JqIiksYT10KCJkZWZpbmVkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHMsbD1bXSxjPTE7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKG5bdF0pbD1uW3RdLnNsaWNlKCkscz0icmdiIjtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PT10KWM9MCxzPSJyZ2IiLGw9WzAsMCwwXTtlbHNlIGlmKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QodCkpe3ZhciB1PShwPXQuc2xpY2UoMSkpLmxlbmd0aDtjPTEsdTw9ND8obD1bcGFyc2VJbnQocFswXStwWzBdLDE2KSxwYXJzZUludChwWzFdK3BbMV0sMTYpLHBhcnNlSW50KHBbMl0rcFsyXSwxNildLDQ9PT11JiYoYz1wYXJzZUludChwWzNdK3BbM10sMTYpLzI1NSkpOihsPVtwYXJzZUludChwWzBdK3BbMV0sMTYpLHBhcnNlSW50KHBbMl0rcFszXSwxNikscGFyc2VJbnQocFs0XStwWzVdLDE2KV0sOD09PXUmJihjPXBhcnNlSW50KHBbNl0rcFs3XSwxNikvMjU1KSksbFswXXx8KGxbMF09MCksbFsxXXx8KGxbMV09MCksbFsyXXx8KGxbMl09MCkscz0icmdiIn1lbHNlIGlmKGU9L14oKD86cmdifGhzW2x2Yl18aHdifGNteWs/fHh5W3p5XXxncmF5fGxhYnxsY2h1P3Y/fFtseV11dnxsbXMpYT8pXHMqXCgoW15cKV0qKVwpLy5leGVjKHQpKXt2YXIgZj1lWzFdLGg9InJnYiI9PT1mLHA9Zi5yZXBsYWNlKC9hJC8sIiIpO3M9cDt1PSJjbXlrIj09PXA/NDoiZ3JheSI9PT1wPzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChmdW5jdGlvbih0LGUpe2lmKC8lJC8udGVzdCh0KSlyZXR1cm4gZT09PXU/cGFyc2VGbG9hdCh0KS8xMDA6InJnYiI9PT1wPzI1NSpwYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpO2lmKCJoIj09PXBbZV0pe2lmKC9kZWckLy50ZXN0KHQpKXJldHVybiBwYXJzZUZsb2F0KHQpO2lmKHZvaWQgMCE9PW9bdF0pcmV0dXJuIG9bdF19cmV0dXJuIHBhcnNlRmxvYXQodCl9KSksZj09PXAmJmwucHVzaCgxKSxjPWh8fHZvaWQgMD09PWxbdV0/MTpsW3VdLGw9bC5zbGljZSgwLHUpfWVsc2UgdC5sZW5ndGg+MTAmJi9bMC05XSg/OlxzfFwvKS8udGVzdCh0KSYmKGw9dC5tYXRjaCgvKFswLTldKykvZykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKSxzPXQubWF0Y2goLyhbYS16XSkvZ2kpLmpvaW4oIiIpLnRvTG93ZXJDYXNlKCkpO2Vsc2UgaWYoaXNOYU4odCkpaWYoaSh0KSl7dmFyIGQ9YSh0LnIsdC5yZWQsdC5SLG51bGwpO251bGwhPT1kPyhzPSJyZ2IiLGw9W2QsYSh0LmcsdC5ncmVlbix0LkcpLGEodC5iLHQuYmx1ZSx0LkIpXSk6KHM9ImhzbCIsbD1bYSh0LmgsdC5odWUsdC5IKSxhKHQucyx0LnNhdHVyYXRpb24sdC5TKSxhKHQubCx0LmxpZ2h0bmVzcyx0LkwsdC5iLHQuYnJpZ2h0bmVzcyldKSxjPWEodC5hLHQuYWxwaGEsdC5vcGFjaXR5LDEpLG51bGwhPXQub3BhY2l0eSYmKGMvPTEwMCl9ZWxzZShBcnJheS5pc0FycmF5KHQpfHxyLkFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KSkmJihsPVt0WzBdLHRbMV0sdFsyXV0scz0icmdiIixjPTQ9PT10Lmxlbmd0aD90WzNdOjEpO2Vsc2Ugcz0icmdiIixsPVt0Pj4+MTYsKDY1MjgwJnQpPj4+OCwyNTUmdF07cmV0dXJue3NwYWNlOnMsdmFsdWVzOmwsYWxwaGE6Y319O3ZhciBvPXtyZWQ6MCxvcmFuZ2U6NjAseWVsbG93OjEyMCxncmVlbjoxODAsYmx1ZToyNDAscHVycGxlOjMwMH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7ImNvbG9yLW5hbWUiOjg4LGRlZmluZWQ6MTI0LCJpcy1wbGFpbi1vYmoiOjIzNn1dLDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksaT10KCJjb2xvci1zcGFjZS9oc2wiKSxhPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1pLnJnYihlKSksZS5wdXNoKGEoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDo4NiwiY29sb3ItcGFyc2UiOjkwLCJjb2xvci1zcGFjZS9oc2wiOjkyfV0sOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZ2IiKTtlLmV4cG9ydHM9e25hbWU6ImhzbCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiXSxhbGlhczpbIkhTTCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVyblthPTI1NSpsLGEsYV07ZT0yKmwtKHI9bDwuNT9sKigxK3MpOmwrcy1sKnMpLGk9WzAsMCwwXTtmb3IodmFyIGM9MDtjPDM7YysrKShuPW8rMS8zKi0oYy0xKSk8MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVtjXT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10WzBdLzI1NSxpPXRbMV0vMjU1LGE9dFsyXS8yNTUsbz1NYXRoLm1pbihuLGksYSkscz1NYXRoLm1heChuLGksYSksbD1zLW87cmV0dXJuIHM9PT1vP2U9MDpuPT09cz9lPShpLWEpL2w6aT09PXM/ZT0yKyhhLW4pL2w6YT09PXMmJihlPTQrKG4taSkvbCksKGU9TWF0aC5taW4oNjAqZSwzNjApKTwwJiYoZSs9MzYwKSxyPShvK3MpLzIsW2UsMTAwKihzPT09bz8wOnI8PS41P2wvKHMrbyk6bC8oMi1zLW8pKSwxMDAqcl19fSx7Ii4vcmdiIjo5M31dLDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSw5NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOiJhZmdoYW4iLEFMQToiXFxiXFx3bGFuZCIsQUxCOiJhbGJhbmlhIixEWkE6ImFsZ2VyaWEiLEFTTToiXig/PS4qYW1lcmljKS4qc2Ftb2EiLEFORDoiYW5kb3JyYSIsQUdPOiJhbmdvbGEiLEFJQToiYW5ndWlsbD9hIixBVEE6ImFudGFyY3RpY2EiLEFURzoiYW50aWd1YSIsQVJHOiJhcmdlbnRpbiIsQVJNOiJhcm1lbmlhIixBQlc6Il4oPyEuKmJvbmFpcmUpLipcXGJhcnViYSIsQVVTOiJhdXN0cmFsaWEiLEFVVDoiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxiYXVzdHJpLipcXGJlbXAiLEFaRToiYXplcmJhaWphbiIsQkhTOiJiYWhhbWFzIixCSFI6ImJhaHJhaW4iLEJHRDoiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuIixCUkI6ImJhcmJhZG9zIixCTFI6ImJlbGFydXN8YnllbG8iLEJFTDoiXig/IS4qbHV4ZW0pLipiZWxnaXVtIixCTFo6ImJlbGl6ZXxeKD89Lipicml0aXNoKS4qaG9uZHVyYXMiLEJFTjoiYmVuaW58ZGFob21lIixCTVU6ImJlcm11ZGEiLEJUTjoiYmh1dGFuIixCT0w6ImJvbGl2aWEiLEJFUzoiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcYmJlcy4/aXNsYW5kcyIsQklIOiJoZXJ6ZWdvdmluYXxib3NuaWEiLEJXQToiYm90c3dhbmF8YmVjaHVhbmEiLEJWVDoiYm91dmV0IixCUkE6ImJyYXppbCIsSU9UOiJicml0aXNoLj9pbmRpYW4uP29jZWFuIixCUk46ImJydW5laSIsQkdSOiJidWxnYXJpYSIsQkZBOiJidXJraW5hfFxcYmZhc298dXBwZXIuP3ZvbHRhIixCREk6ImJ1cnVuZGkiLENQVjoidmVyZGUiLEtITToiY2FtYm9kaWF8a2FtcHVjaGVhfGtobWVyIixDTVI6ImNhbWVyb29uIixDQU46ImNhbmFkYSIsQ1lNOiJjYXltYW4iLENBRjoiXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljIixUQ0Q6IlxcYmNoYWQiLENITDoiXFxiY2hpbGUiLENITjoiXig/IS4qXFxibWFjKSg/IS4qXFxiaG9uZykoPyEuKlxcYnRhaSkoPyEuKlxcYnJlcCkuKmNoaW5hfF4oPz0uKnBlbykoPz0uKnJlcCkuKmNoaW5hIixDWFI6ImNocmlzdG1hcyIsQ0NLOiJcXGJjb2Nvc3xrZWVsaW5nIixDT0w6ImNvbG9tYmlhIixDT006ImNvbW9ybyIsQ09HOiJeKD8hLipcXGJkZW0pKD8hLipcXGJkW1xcLl0/cikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcYmNvbmdvIixDT0s6IlxcYmNvb2siLENSSToiY29zdGEuP3JpY2EiLENJVjoiaXZvaXJlfGl2b3J5IixIUlY6ImNyb2F0aWEiLENVQjoiXFxiY3ViYSIsQ1VXOiJeKD8hLipib25haXJlKS4qXFxiY3VyYShjfFx4ZTcpYW8iLENZUDoiY3lwcnVzIixDU0s6ImN6ZWNob3Nsb3Zha2lhIixDWkU6Il4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYSIsQ09EOiJcXGJkZW0uKmNvbmdvfGNvbmdvLipcXGJkZW18Y29uZ28uKlxcYmRbXFwuXT9yfFxcYmRbXFwuXT9yLipjb25nb3xiZWxnaWFuLj9jb25nb3xjb25nby4/ZnJlZS4/c3RhdGV8a2luc2hhc2F8emFpcmV8bC5vcG9sZHZpbGxlfGRyY3xkcm9jfHJkYyIsRE5LOiJkZW5tYXJrIixESkk6ImRqaWJvdXRpIixETUE6ImRvbWluaWNhKD8hbikiLERPTToiZG9taW5pY2FuLnJlcCIsRUNVOiJlY3VhZG9yIixFR1k6ImVneXB0IixTTFY6ImVsLj9zYWx2YWRvciIsR05ROiJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWEiLEVSSToiZXJpdHJlYSIsRVNUOiJlc3RvbmlhIixFVEg6ImV0aGlvcGlhfGFieXNzaW5pYSIsRkxLOiJmYWxrbGFuZHxtYWx2aW5hcyIsRlJPOiJmYXJvZXxmYWVyb2UiLEZKSToiZmlqaSIsRklOOiJmaW5sYW5kIixGUkE6Il4oPyEuKlxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXGJnYXVsIixHVUY6Il4oPz0uKmZyZW5jaCkuKmd1aWFuYSIsUFlGOiJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGkiLEFURjoiZnJlbmNoLj9zb3V0aGVybiIsR0FCOiJnYWJvbiIsR01COiJnYW1iaWEiLEdFTzoiXig/IS4qc291dGgpLipnZW9yZ2lhIixERFI6Imdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55IixERVU6Il4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcYmZlZC4qXFxicmVwKS4qZ2VybWFuIixHSEE6ImdoYW5hfGdvbGQuP2NvYXN0IixHSUI6ImdpYnJhbHRhciIsR1JDOiJncmVlY2V8aGVsbGVuaWN8aGVsbGFzIixHUkw6ImdyZWVubGFuZCIsR1JEOiJncmVuYWRhIixHTFA6Imd1YWRlbG91cGUiLEdVTToiXFxiZ3VhbSIsR1RNOiJndWF0ZW1hbGEiLEdHWToiZ3Vlcm5zZXkiLEdJTjoiXig/IS4qZXEpKD8hLipzcGFuKSg/IS4qYmlzc2F1KSg/IS4qcG9ydHUpKD8hLipuZXcpLipndWluZWEiLEdOQjoiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhIixHVVk6Imd1eWFuYXxicml0aXNoLj9ndWlhbmEiLEhUSToiaGFpdGkiLEhNRDoiaGVhcmQuKm1jZG9uYWxkIixWQVQ6ImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdCIsSE5EOiJeKD8hLipicml0KS4qaG9uZHVyYXMiLEhLRzoiaG9uZy4/a29uZyIsSFVOOiJeKD8hLiphdXN0cikuKmh1bmdhcnkiLElTTDoiaWNlbGFuZCIsSU5EOiJpbmRpYSg/IS4qb2NlYSkiLElETjoiaW5kb25lc2lhIixJUk46IlxcYmlyYW58cGVyc2lhIixJUlE6IlxcYmlyYXF8bWVzb3BvdGFtaWEiLElSTDoiKF5pcmVsYW5kKXwoXnJlcHVibGljLippcmVsYW5kKSIsSU1OOiJeKD89Lippc2xlKS4qXFxibWFuIixJU1I6ImlzcmFlbCIsSVRBOiJpdGFseSIsSkFNOiJqYW1haWNhIixKUE46ImphcGFuIixKRVk6ImplcnNleSIsSk9SOiJqb3JkYW4iLEtBWjoia2F6YWsiLEtFTjoia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdCIsS0lSOiJraXJpYmF0aSIsUFJLOiJeKD89LipkZW1vY3JhdHxwZW9wbGV8bm9ydGh8ZC4qcC4qLnIpLipcXGJrb3JlYXxkcHJrfGtvcmVhLiooZC4qcC4qcikiLEtXVDoia3V3YWl0IixLR1o6Imt5cmd5enxraXJnaGl6IixMQU86IlxcYmxhb3M/XFxiIixMVkE6ImxhdHZpYSIsTEJOOiJsZWJhbm9uIixMU086Imxlc290aG98YmFzdXRvIixMQlI6ImxpYmVyaWEiLExCWToibGlieWEiLExJRToibGllY2h0ZW5zdGVpbiIsTFRVOiJsaXRodWFuaWEiLExVWDoiXig/IS4qYmVsZykuKmx1eGVtIixNQUM6Im1hY2Eob3x1KSIsTURHOiJtYWRhZ2FzY2FyfG1hbGFnYXN5IixNV0k6Im1hbGF3aXxueWFzYSIsTVlTOiJtYWxheXNpYSIsTURWOiJtYWxkaXZlIixNTEk6IlxcYm1hbGlcXGIiLE1MVDoiXFxibWFsdGEiLE1ITDoibWFyc2hhbGwiLE1UUToibWFydGluaXF1ZSIsTVJUOiJtYXVyaXRhbmlhIixNVVM6Im1hdXJpdGl1cyIsTVlUOiJcXGJtYXlvdHRlIixNRVg6IlxcYm1leGljIixGU006ImZlZC4qbWljcm9uZXNpYXxtaWNyb25lc2lhLipmZWQiLE1DTzoibW9uYWNvIixNTkc6Im1vbmdvbGlhIixNTkU6Il4oPyEuKnNlcmJpYSkuKm1vbnRlbmVncm8iLE1TUjoibW9udHNlcnJhdCIsTUFSOiJtb3JvY2NvfFxcYm1hcm9jIixNT1o6Im1vemFtYmlxdWUiLE1NUjoibXlhbm1hcnxidXJtYSIsTkFNOiJuYW1pYmlhIixOUlU6Im5hdXJ1IixOUEw6Im5lcGFsIixOTEQ6Il4oPyEuKlxcYmFudCkoPyEuKlxcYmNhcmliKS4qbmV0aGVybGFuZHMiLEFOVDoiXig/PS4qXFxiYW50KS4qKG5ldGhlcnxkdXRjaCkiLE5DTDoibmV3Lj9jYWxlZG9uaWEiLE5aTDoibmV3Lj96ZWFsYW5kIixOSUM6Im5pY2FyYWd1YSIsTkVSOiJcXGJuaWdlcig/IWlhKSIsTkdBOiJuaWdlcmlhIixOSVU6Im5pdWUiLE5GSzoibm9yZm9sayIsTU5QOiJtYXJpYW5hIixOT1I6Im5vcndheSIsT01OOiJcXGJvbWFufHRydWNpYWwiLFBBSzoiXig/IS4qZWFzdCkuKnBha2k/c3RhbiIsUExXOiJwYWxhdSIsUFNFOiJwYWxlc3RpbnxcXGJnYXphfHdlc3QuP2JhbmsiLFBBTjoicGFuYW1hIixQTkc6InBhcHVhfG5ldy4/Z3VpbmVhIixQUlk6InBhcmFndWF5IixQRVI6InBlcnUiLFBITDoicGhpbGlwcGluZXMiLFBDTjoicGl0Y2Fpcm4iLFBPTDoicG9sYW5kIixQUlQ6InBvcnR1Z2FsIixQUkk6InB1ZXJ0by4/cmljbyIsUUFUOiJxYXRhciIsS09SOiJeKD8hLipkLipwLipyKSg/IS4qZGVtb2NyYXQpKD8hLipwZW9wbGUpKD8hLipub3J0aCkuKlxcYmtvcmVhKD8hLipkLipwLipyKSIsTURBOiJtb2xkb3Z8YihhfGUpc3NhcmFiaWEiLFJFVToicihlfFx4ZTkpdW5pb24iLFJPVToicihvfHV8b3UpbWFuaWEiLFJVUzoiXFxicnVzc2lhfHNvdmlldC4/dW5pb258dVxcLj9zXFwuP3NcXC4/cnxzb2NpYWxpc3QuP3JlcHVibGljcyIsUldBOiJyd2FuZGEiLEJMTToiYmFydGgoZXxceGU5KWxlbXkiLFNITjoiaGVsZW5hIixLTkE6ImtpdHRzfFxcYm5ldmlzIixMQ0E6IlxcYmx1Y2lhIixNQUY6Il4oPz0uKmNvbGxlY3Rpdml0eSkuKm1hcnRpbnxeKD89LipmcmFuY2UpLiptYXJ0aW4oPyFpcXVlKXxeKD89LipmcmVuY2gpLiptYXJ0aW4oPyFpcXVlKSIsU1BNOiJtaXF1ZWxvbiIsVkNUOiJ2aW5jZW50IixXU006Il4oPyEuKmFtZXIpLipzYW1vYSIsU01SOiJzYW4uP21hcmlubyIsU1RQOiJcXGJzKGF8XHhlMylvLj90b20oZXxceGU5KSIsU0FVOiJcXGJzYVxcdyouP2FyYWJpYSIsU0VOOiJzZW5lZ2FsIixTUkI6Il4oPyEuKm1vbnRlKS4qc2VyYmlhIixTWUM6InNleWNoZWxsIixTTEU6InNpZXJyYSIsU0dQOiJzaW5nYXBvcmUiLFNYTToiXig/IS4qbWFydGluKSg/IS4qc2FiYSkuKm1hYXJ0ZW4iLFNWSzoiXig/IS4qY3plKS4qc2xvdmFrIixTVk46InNsb3ZlbmlhIixTTEI6InNvbG9tb24iLFNPTToic29tYWxpIixaQUY6InNvdXRoLmFmcmljYXxzXFxcXC4uP2FmcmljYSIsU0dTOiJzb3V0aC4/Z2VvcmdpYXxzYW5kd2ljaCIsU1NEOiJcXGJzXFx3Ki4/c3VkYW4iLEVTUDoic3BhaW4iLExLQToic3JpLj9sYW5rYXxjZXlsb24iLFNETjoiXig/IS4qXFxicyg/IXUpKS4qc3VkYW4iLFNVUjoic3VyaW5hbXxkdXRjaC4/Z3VpYW5hIixTSk06InN2YWxiYXJkIixTV1o6InN3YXppbGFuZCIsU1dFOiJzd2VkZW4iLENIRToic3dpdHp8c3dpc3MiLFNZUjoic3lyaWEiLFRXTjoidGFpd2FufHRhaXBlaXxmb3Jtb3NhfF4oPyEuKnBlbykoPz0uKnJlcCkuKmNoaW5hIixUSks6InRhamlrIixUSEE6InRoYWlsYW5kfFxcYnNpYW0iLE1LRDoibWFjZWRvbmlhfGZ5cm9tIixUTFM6Il4oPz0uKmxlc3RlKS4qdGltb3J8Xig/PS4qZWFzdCkuKnRpbW9yIixUR086InRvZ28iLFRLTDoidG9rZWxhdSIsVE9OOiJ0b25nYSIsVFRPOiJ0cmluaWRhZHx0b2JhZ28iLFRVTjoidHVuaXNpYSIsVFVSOiJ0dXJrZXkiLFRLTToidHVya21lbiIsVENBOiJ0dXJrcyIsVFVWOiJ0dXZhbHUiLFVHQToidWdhbmRhIixVS1I6InVrcmFpbiIsQVJFOiJlbWlyYXRlc3xedVxcLj9hXFwuP2VcXC4/JHx1bml0ZWQuP2FyYWIuP2VtIixHQlI6InVuaXRlZC4/a2luZ2RvbXxicml0YWlufF51XFwuP2tcXC4/JCIsVFpBOiJ0YW56YW5pYSIsVVNBOiJ1bml0ZWQuP3N0YXRlc1xcYig/IS4qaXNsYW5kcyl8XFxidVxcLj9zXFwuP2FcXC4/XFxifF5cXHMqdVxcLj9zXFwuP1xcYig/IS4qaXNsYW5kcykiLFVNSToibWlub3IuP291dGx5aW5nLj9pcyIsVVJZOiJ1cnVndWF5IixVWkI6InV6YmVrIixWVVQ6InZhbnVhdHV8bmV3Lj9oZWJyaWRlcyIsVkVOOiJ2ZW5lenVlbGEiLFZOTToiXig/IS4qcmVwdWJsaWMpLip2aWV0Lj9uYW18Xig/PS4qc29jaWFsaXN0KS4qdmlldC4/bmFtIixWR0I6Il4oPz0uKlxcYnVcXC4/XFxzP2spLip2aXJnaW58Xig/PS4qYnJpdCkuKnZpcmdpbnxeKD89LipraW5nZG9tKS4qdmlyZ2luIixWSVI6Il4oPz0uKlxcYnVcXC4/XFxzP3MpLip2aXJnaW58Xig/PS4qc3RhdGVzKS4qdmlyZ2luIixXTEY6ImZ1dHVuYXx3YWxsaXMiLEVTSDoid2VzdGVybi5zYWhhcmEiLFlFTToiXig/IS4qYXJhYikoPyEuKm5vcnRoKSg/IS4qc2FuYSkoPyEuKnBlbykoPyEuKmRlbSkoPyEuKnNvdXRoKSg/IS4qYWRlbikoPyEuKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlNRDoiXig/PS4qcGVvKS4qeWVtZW58Xig/IS4qcmVwKSg/PS4qZGVtKS4qeWVtZW58Xig/PS4qc291dGgpLip5ZW1lbnxeKD89LiphZGVuKS4qeWVtZW58Xig/PS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWVVHOiJ5dWdvc2xhdmlhIixaTUI6InphbWJpYXxub3J0aGVybi4/cmhvZGVzaWEiLEVBWjoiemFuemliYXIiLFpXRToiemltYmFid2V8Xig/IS4qbm9ydGhlcm4pLipyaG9kZXNpYSJ9fSx7fV0sOTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJ4eC1zbWFsbCIsIngtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieC1sYXJnZSIsInh4LWxhcmdlIiwibGFyZ2VyIiwic21hbGxlciJdfSx7fV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJjb25kZW5zZWQiLCJzZW1pLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsInVsdHJhLWNvbmRlbnNlZCIsImV4cGFuZGVkIiwic2VtaS1leHBhbmRlZCIsImV4dHJhLWV4cGFuZGVkIiwidWx0cmEtZXhwYW5kZWQiXX0se31dLDk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiaXRhbGljIiwib2JsaXF1ZSJdfSx7fV0sOTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCJdfSx7fV0sOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwYXJzZTp0KCIuL3BhcnNlIiksc3RyaW5naWZ5OnQoIi4vc3RyaW5naWZ5Iil9fSx7Ii4vcGFyc2UiOjEwMSwiLi9zdHJpbmdpZnkiOjEwMn1dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC1zaXplLWtleXdvcmRzIik7ZS5leHBvcnRzPXtpc1NpemU6ZnVuY3Rpb24odCl7cmV0dXJuL15bXGRcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKCIvIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHsiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyI6OTV9XSwxMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidW5xdW90ZSIpLGk9dCgiY3NzLWdsb2JhbC1rZXl3b3JkcyIpLGE9dCgiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIiksbz10KCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiKSxzPXQoImNzcy1mb250LXN0eWxlLWtleXdvcmRzIiksbD10KCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIiksYz10KCJzdHJpbmctc3BsaXQtYnkiKSx1PXQoIi4vbGliL3V0aWwiKS5pc1NpemU7ZS5leHBvcnRzPWg7dmFyIGY9aC5jYWNoZT17fTtmdW5jdGlvbiBoKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIkZvbnQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKTtpZihmW3RdKXJldHVybiBmW3RdO2lmKCIiPT09dCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSBhbiBlbXB0eSBzdHJpbmcuIik7aWYoLTEhPT1hLmluZGV4T2YodCkpcmV0dXJuIGZbdF09e3N5c3RlbTp0fTtmb3IodmFyIGUscj17c3R5bGU6Im5vcm1hbCIsdmFyaWFudDoibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc3RyZXRjaDoibm9ybWFsIixsaW5lSGVpZ2h0OiJub3JtYWwiLHNpemU6IjFyZW0iLGZhbWlseTpbInNlcmlmIl19LGg9Yyh0LC9ccysvKTtlPWguc2hpZnQoKTspe2lmKC0xIT09aS5pbmRleE9mKGUpKXJldHVyblsic3R5bGUiLCJ2YXJpYW50Iiwid2VpZ2h0Iiwic3RyZXRjaCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdF09ZX0pKSxmW3RdPXI7aWYoLTE9PT1zLmluZGV4T2YoZSkpaWYoIm5vcm1hbCIhPT1lJiYic21hbGwtY2FwcyIhPT1lKWlmKC0xPT09bC5pbmRleE9mKGUpKXtpZigtMT09PW8uaW5kZXhPZihlKSl7aWYodShlKSl7dmFyIGQ9YyhlLCIvIik7aWYoci5zaXplPWRbMF0sbnVsbCE9ZFsxXT9yLmxpbmVIZWlnaHQ9cChkWzFdKToiLyI9PT1oWzBdJiYoaC5zaGlmdCgpLHIubGluZUhlaWdodD1wKGguc2hpZnQoKSkpLCFoLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgZm9udC1mYW1pbHkuIik7cmV0dXJuIHIuZmFtaWx5PWMoaC5qb2luKCIgIiksL1xzKixccyovKS5tYXAobiksZlt0XT1yfXRocm93IG5ldyBFcnJvcigiVW5rbm93biBvciB1bnN1cHBvcnRlZCBmb250IHRva2VuOiAiK2UpfXIud2VpZ2h0PWV9ZWxzZSByLnN0cmV0Y2g9ZTtlbHNlIHIudmFyaWFudD1lO2Vsc2Ugci5zdHlsZT1lfXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LXNpemUuIil9ZnVuY3Rpb24gcCh0KXt2YXIgZT1wYXJzZUZsb2F0KHQpO3JldHVybiBlLnRvU3RyaW5nKCk9PT10P2U6dH19LHsiLi9saWIvdXRpbCI6MTAwLCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjo5NiwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjk3LCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiOjk4LCJjc3MtZ2xvYmFsLWtleXdvcmRzIjoxMDMsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6MTA0LCJzdHJpbmctc3BsaXQtYnkiOjMwNSx1bnF1b3RlOjMyOH1dLDEwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIiksaT10KCIuL2xpYi91dGlsIikuaXNTaXplLGE9bSh0KCJjc3MtZ2xvYmFsLWtleXdvcmRzIikpLG89bSh0KCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiKSkscz1tKHQoImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyIpKSxsPW0odCgiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiKSksYz1tKHQoImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiKSksdT17bm9ybWFsOjEsInNtYWxsLWNhcHMiOjF9LGY9e3NlcmlmOjEsInNhbnMtc2VyaWYiOjEsbW9ub3NwYWNlOjEsY3Vyc2l2ZToxLGZhbnRhc3k6MSwic3lzdGVtLXVpIjoxfSxoPSIxcmVtIixwPSJzZXJpZiI7ZnVuY3Rpb24gZCh0LGUpe2lmKHQmJiFlW3RdJiYhYVt0XSl0aHJvdyBFcnJvcigiVW5rbm93biBrZXl3b3JkIGAiK3QrImAiKTtyZXR1cm4gdH1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdXT0xO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigodD1uKHQse3N0eWxlOiJzdHlsZSBmb250c3R5bGUgZm9udFN0eWxlIGZvbnQtc3R5bGUgc2xvcGUgZGlzdGluY3Rpb24iLHZhcmlhbnQ6InZhcmlhbnQgZm9udC12YXJpYW50IGZvbnRWYXJpYW50IGZvbnR2YXJpYW50IHZhciBjYXBpdGFsaXphdGlvbiIsd2VpZ2h0OiJ3ZWlnaHQgdyBmb250LXdlaWdodCBmb250V2VpZ2h0IGZvbnR3ZWlnaHQiLHN0cmV0Y2g6InN0cmV0Y2ggZm9udC1zdHJldGNoIGZvbnRTdHJldGNoIGZvbnRzdHJldGNoIHdpZHRoIixzaXplOiJzaXplIHMgZm9udC1zaXplIGZvbnRTaXplIGZvbnRzaXplIGhlaWdodCBlbSBlbVNpemUiLGxpbmVIZWlnaHQ6ImxoIGxpbmUtaGVpZ2h0IGxpbmVIZWlnaHQgbGluZWhlaWdodCBsZWFkaW5nIixmYW1pbHk6ImZvbnQgZmFtaWx5IGZvbnRGYW1pbHkgZm9udC1mYW1pbHkgZm9udGZhbWlseSB0eXBlIHR5cGVmYWNlIGZhY2UiLHN5c3RlbToic3lzdGVtIHJlc2VydmVkIGRlZmF1bHQgZ2xvYmFsIn0pKS5zeXN0ZW0pcmV0dXJuIHQuc3lzdGVtJiZkKHQuc3lzdGVtLG8pLHQuc3lzdGVtO2lmKGQodC5zdHlsZSxsKSxkKHQudmFyaWFudCx1KSxkKHQud2VpZ2h0LHMpLGQodC5zdHJldGNoLGMpLG51bGw9PXQuc2l6ZSYmKHQuc2l6ZT1oKSwibnVtYmVyIj09dHlwZW9mIHQuc2l6ZSYmKHQuc2l6ZSs9InB4IiksIWkpdGhyb3cgRXJyb3IoIkJhZCBzaXplIHZhbHVlIGAiK3Quc2l6ZSsiYCIpO3QuZmFtaWx5fHwodC5mYW1pbHk9cCksQXJyYXkuaXNBcnJheSh0LmZhbWlseSkmJih0LmZhbWlseS5sZW5ndGh8fCh0LmZhbWlseT1bcF0pLHQuZmFtaWx5PXQuZmFtaWx5Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGZbdF0/dDonIicrdCsnIid9KSkuam9pbigiLCAiKSk7dmFyIGU9W107cmV0dXJuIGUucHVzaCh0LnN0eWxlKSx0LnZhcmlhbnQhPT10LnN0eWxlJiZlLnB1c2godC52YXJpYW50KSx0LndlaWdodCE9PXQudmFyaWFudCYmdC53ZWlnaHQhPT10LnN0eWxlJiZlLnB1c2godC53ZWlnaHQpLHQuc3RyZXRjaCE9PXQud2VpZ2h0JiZ0LnN0cmV0Y2ghPT10LnZhcmlhbnQmJnQuc3RyZXRjaCE9PXQuc3R5bGUmJmUucHVzaCh0LnN0cmV0Y2gpLGUucHVzaCh0LnNpemUrKG51bGw9PXQubGluZUhlaWdodHx8Im5vcm1hbCI9PT10LmxpbmVIZWlnaHR8fHQubGluZUhlaWdodCsiIj09IjEiPyIiOiIvIit0LmxpbmVIZWlnaHQpKSxlLnB1c2godC5mYW1pbHkpLGUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX19LHsiLi9saWIvdXRpbCI6MTAwLCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjo5NiwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjk3LCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiOjk4LCJjc3MtZ2xvYmFsLWtleXdvcmRzIjoxMDMsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6MTA0LCJwaWNrLWJ5LWFsaWFzIjoyNTN9XSwxMDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il19LHt9XSwxMDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJjYXB0aW9uIiwiaWNvbiIsIm1lbnUiLCJtZXNzYWdlLWJveCIsInNtYWxsLWNhcHRpb24iLCJzdGF0dXMtYmFyIl19LHt9XSwxMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJ0eXBlL3ZhbHVlL2lzIiksYT10KCJ0eXBlL3ZhbHVlL2Vuc3VyZSIpLG89dCgidHlwZS9wbGFpbi1mdW5jdGlvbi9lbnN1cmUiKSxzPXQoImVzNS1leHQvb2JqZWN0L2NvcHkiKSxsPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIiksYz10KCJlczUtZXh0L29iamVjdC9tYXAiKSx1PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPWEoZSkmJm8oZS52YWx1ZSk7cmV0dXJuIGRlbGV0ZShuPXMoZSkpLndyaXRhYmxlLGRlbGV0ZSBuLnZhbHVlLG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIXIub3ZlcndyaXRlRGVmaW5pdGlvbiYmaC5jYWxsKHRoaXMsdCk/aTooZS52YWx1ZT11LmNhbGwoaSxyLnJlc29sdmVDb250ZXh0P3IucmVzb2x2ZUNvbnRleHQodGhpcyk6dGhpcyksZih0aGlzLHQsZSksdGhpc1t0XSl9LG59LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1sKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGkoZS5yZXNvbHZlQ29udGV4dCkmJm8oZS5yZXNvbHZlQ29udGV4dCksYyh0LChmdW5jdGlvbih0LHIpe3JldHVybiBuKHIsdCxlKX0pKX19LHsiZXM1LWV4dC9vYmplY3QvY29weSI6MTQ3LCJlczUtZXh0L29iamVjdC9tYXAiOjE1NSwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiOjE1NiwidHlwZS9wbGFpbi1mdW5jdGlvbi9lbnN1cmUiOjMyMSwidHlwZS92YWx1ZS9lbnN1cmUiOjMyNSwidHlwZS92YWx1ZS9pcyI6MzI2fV0sMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGUvdmFsdWUvaXMiKSxpPXQoInR5cGUvcGxhaW4tZnVuY3Rpb24vaXMiKSxhPXQoImVzNS1leHQvb2JqZWN0L2Fzc2lnbiIpLG89dCgiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiKSxzPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxsLGMsdTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHwic3RyaW5nIiE9dHlwZW9mIHQ/KGM9ZSxlPXQsdD1udWxsKTpjPWFyZ3VtZW50c1syXSxuKHQpPyhyPXMuY2FsbCh0LCJjIiksaT1zLmNhbGwodCwiZSIpLGw9cy5jYWxsKHQsInciKSk6KHI9bD0hMCxpPSExKSx1PXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6aSx3cml0YWJsZTpsfSxjP2EobyhjKSx1KTp1fSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBsLGMsdSxmO3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8odT1yLHI9ZSxlPXQsdD1udWxsKTp1PWFyZ3VtZW50c1szXSxuKGUpP2koZSk/bihyKT9pKHIpfHwodT1yLHI9dm9pZCAwKTpyPXZvaWQgMDoodT1lLGU9cj12b2lkIDApOmU9dm9pZCAwLG4odCk/KGw9cy5jYWxsKHQsImMiKSxjPXMuY2FsbCh0LCJlIikpOihsPSEwLGM9ITEpLGY9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpsLGVudW1lcmFibGU6Y30sdT9hKG8odSksZik6Zn19LHsiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxNDQsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoxNTYsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjE2MywidHlwZS9wbGFpbi1mdW5jdGlvbi9pcyI6MzIyLCJ0eXBlL3ZhbHVlL2lzIjozMjZ9XSwxMDc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXtuKCJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgZj1BcnJheS5wcm90b3R5cGUsaD1mLnNsaWNlLHA9Zi5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciB2PU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj12PzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49dj8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PXY/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIFQodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9ayh0LE0pLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9bSxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGY9Y1sxXSxoPXIobCx1LGYpO0FycmF5LmlzQXJyYXkoaCl8fChoPV8odSxmLGgpLGg9ZyhNYXRoLmNlaWwodS9oKSpoLGYsaCkpO2Zvcih2YXIgcD1oLmxlbmd0aDtoWzBdPD11OyloLnNoaWZ0KCksLS1wO2Zvcig7aFtwLTFdPmY7KWgucG9wKCksLS1wO3ZhciBkLG09bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1tW2FdPVtdKS54MD1hPjA/aFthLTFdOnUsZC54MT1hPHA/aFthXTpmO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9ZiYmbVtpKGgsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBtfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmQoW3RbMF0sdFsxXV0pLG4pOmV9LG4udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChoLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooVCh0LC43NSktVCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBUKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49ayx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPVQsdC5yYW5nZT1nLHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09PShlPStlKSYmcj4wKXJldHVyblt0XTtpZigobj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1iKHQsZSxyKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfSx0LnRpY2tJbmNyZW1lbnQ9Yix0LnRpY2tTdGVwPV8sdC50cmFuc3Bvc2U9QSx0LnZhcmlhbmNlPWwsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gQShhcmd1bWVudHMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxMDg6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXtuKCJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBuKCl7cmV0dXJue319ZnVuY3Rpb24gaSh0LGUscil7dFtlXT1yfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpfWZ1bmN0aW9uIG8odCxlLHIpe3Quc2V0KGUscil9ZnVuY3Rpb24gcygpe31lLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgbD1yLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9bmV3IHM7aWYodCBpbnN0YW5jZW9mIHMpdC5lYWNoKChmdW5jdGlvbih0KXtyLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciBuPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrbjxpOylyLmFkZCh0W25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKGUodFtuXSxuLHQpKX1yZXR1cm4gcn1zLnByb3RvdHlwZT1jLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxoYXM6bC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpsLnJlbW92ZSxjbGVhcjpsLmNsZWFyLHZhbHVlczpsLmtleXMsc2l6ZTpsLnNpemUsZW1wdHk6bC5lbXB0eSxlYWNoOmwuZWFjaH0sdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsZSxzLGw9W10sYz1bXTtmdW5jdGlvbiB1KG4saSxhLG8pe2lmKGk+PWwubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciBzLGMsZixoPS0xLHA9bi5sZW5ndGgsZD1sW2krK10sbT1yKCksZz1hKCk7KytoPHA7KShmPW0uZ2V0KHM9ZChjPW5baF0pKyIiKSk/Zi5wdXNoKGMpOm0uc2V0KHMsW2NdKTtyZXR1cm4gbS5lYWNoKChmdW5jdGlvbih0LGUpe28oZyxlLHUodCxpLGEsbykpfSkpLGd9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaCgoZnVuY3Rpb24oZSxyKXtpLnB1c2goe2tleTpyLHZhbHVlczp0KGUsbil9KX0pKSksbnVsbCE9YT9pLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSkpOml9KHUodCwwLGEsbyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gbC5wdXNoKHQpLHN9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBjW2wubGVuZ3RoLTFdPXQsc30sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLHN9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LHN9fX0sdC5zZXQ9Yyx0Lm1hcD1yLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlLHIpe3QucHJvdG90eXBlPWUucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIHIodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbigpe312YXIgaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixvPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixzPS9eIyhbMC05YS1mXXszLDh9KSQvLGw9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2ksaSxpXSsiXFwpJCIpLGM9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW28sbyxvXSsiXFwpJCIpLHU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tpLGksaSxhXSsiXFwpJCIpLGY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tvLG8sbyxhXSsiXFwpJCIpLGg9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2EsbyxvXSsiXFwpJCIpLHA9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1thLG8sbyxhXSsiXFwpJCIpLGQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gbSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGcoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiB2KHQpe3ZhciBlLHI7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXMuZXhlYyh0KSk/KHI9ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09cj95KGUpOjM9PT1yP25ldyB3KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09cj94KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1yP3goZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1sLmV4ZWModCkpP25ldyB3KGVbMV0sZVsyXSxlWzNdLDEpOihlPWMuZXhlYyh0KSk/bmV3IHcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9dS5leGVjKHQpKT94KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWYuZXhlYyh0KSk/eCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1oLmV4ZWModCkpP00oZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1wLmV4ZWModCkpP00oZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpkLmhhc093blByb3BlcnR5KHQpP3koZFt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IHcoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB5KHQpe3JldHVybiBuZXcgdyh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24geCh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IHcodCxlLHIsbil9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLHQ/bmV3IHcoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IHd9ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Yih0KTpuZXcgdyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gdyh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gVCgpe3JldHVybiIjIitBKHRoaXMucikrQSh0aGlzLmcpK0EodGhpcy5iKX1mdW5jdGlvbiBrKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gQSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE0odCxlLHIsbil7cmV0dXJuIG48PTA/dD1lPXI9TmFOOnI8PTB8fHI+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBMKHQsZSxyLG4pfWZ1bmN0aW9uIFModCl7aWYodCBpbnN0YW5jZW9mIEwpcmV0dXJuIG5ldyBMKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLCF0KXJldHVybiBuZXcgTDtpZih0IGluc3RhbmNlb2YgTClyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LGE9TWF0aC5taW4oZSxyLGkpLG89TWF0aC5tYXgoZSxyLGkpLHM9TmFOLGw9by1hLGM9KG8rYSkvMjtyZXR1cm4gbD8ocz1lPT09bz8oci1pKS9sKzYqKHI8aSk6cj09PW8/KGktZSkvbCsyOihlLXIpL2wrNCxsLz1jPC41P28rYToyLW8tYSxzKj02MCk6bD1jPjAmJmM8MT8wOnMsbmV3IEwocyxsLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9TKHQpOm5ldyBMKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBMKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBDKHQsZSxyKXtyZXR1cm4gMjU1Kih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKX1lKG4sdix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDptLGZvcm1hdEhleDptLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6Zyx0b1N0cmluZzpnfSksZSh3LF8scihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgdyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlQsZm9ybWF0SGV4OlQsZm9ybWF0UmdiOmssdG9TdHJpbmc6a30pKSxlKEwsRSxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBMKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IEwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyB3KEModD49MjQwP3QtMjQwOnQrMTIwLGksbiksQyh0LGksbiksQyh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBQPU1hdGguUEkvMTgwLEk9MTgwL01hdGguUEksTz02LzI5LHo9MypPKk87ZnVuY3Rpb24gRCh0KXtpZih0IGluc3RhbmNlb2YgRilyZXR1cm4gbmV3IEYodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcSlyZXR1cm4gRyh0KTt0IGluc3RhbmNlb2Ygd3x8KHQ9Yih0KSk7dmFyIGUscixuPVUodC5yKSxpPVUodC5nKSxhPVUodC5iKSxvPUIoKC4yMjI1MDQ1Km4rLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gbj09PWkmJmk9PT1hP2U9cj1vOihlPUIoKC40MzYwNzQ3Km4rLjM4NTA2NDkqaSsuMTQzMDgwNCphKS8uOTY0MjIpLHI9QigoLjAxMzkzMjIqbisuMDk3MTA0NSppKy43MTQxNzMzKmEpLy44MjUyMSkpLG5ldyBGKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tciksdC5vcGFjaXR5KX1mdW5jdGlvbiBSKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9EKHQpOm5ldyBGKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBCKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQveis0LzI5fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ+Tz90KnQqdDp6Kih0LTQvMjkpfWZ1bmN0aW9uIGoodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBVKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFYodCl7aWYodCBpbnN0YW5jZW9mIHEpcmV0dXJuIG5ldyBxKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEZ8fCh0PUQodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBxKE5hTiwwPHQubCYmdC5sPDEwMD8wOk5hTix0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKkk7cmV0dXJuIG5ldyBxKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEgodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1YodCk6bmV3IHEodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHEodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEcodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IEYodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpQO3JldHVybiBuZXcgRih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfWUoRixSLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgdyhqKDMuMTMzODU2MSooZT0uOTY0MjIqTihlKSktMS42MTY4NjY3Kih0PTEqTih0KSktLjQ5MDYxNDYqKHI9LjgyNTIxKk4ocikpKSxqKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqciksaiguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpLGUocSxILHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBHKHRoaXMpLnJnYigpfX0pKTt2YXIgWT0tLjE0ODYxLFc9MS43ODI3NyxYPS0uMjkyMjcsWj0tLjkwNjQ5LEo9MS45NzI5NCxLPUoqWixRPUoqVywkPVcqWC1aKlk7ZnVuY3Rpb24gdHQodCl7aWYodCBpbnN0YW5jZW9mIHJ0KXJldHVybiBuZXcgcnQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Ygd3x8KHQ9Yih0KSk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9KCQqbitLKmUtUSpyKS8oJCtLLVEpLGE9bi1pLG89KEoqKHItaSktWCphKS9aLHM9TWF0aC5zcXJ0KG8qbythKmEpLyhKKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKG8sYSkqSS0xMjA6TmFOO3JldHVybiBuZXcgcnQobDwwP2wrMzYwOmwscyxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gZXQodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3R0KHQpOm5ldyBydCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gcnQodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUocnQsZXQscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgcnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgcnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKlAsZT0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IHcoMjU1KihlK3IqKFkqbitXKmkpKSwyNTUqKGUrciooWCpuK1oqaSkpLDI1NSooZStyKihKKm4pKSx0aGlzLm9wYWNpdHkpfX0pKSx0LmNvbG9yPXYsdC5jdWJlaGVsaXg9ZXQsdC5ncmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBGKHQsMCwwLG51bGw9PWU/MTplKX0sdC5oY2w9SCx0LmhzbD1FLHQubGFiPVIsdC5sY2g9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1YodCk6bmV3IHEocixlLHQsbnVsbD09bj8xOm4pfSx0LnJnYj1fLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDExMDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gcigpe2Zvcih2YXIgdCxlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxyOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBuKGkpfWZ1bmN0aW9uIG4odCl7dGhpcy5fPXR9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6cn19KSl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIG8odCxyLG4pe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxhOysraSlpZih0W2ldLm5hbWU9PT1yKXt0W2ldPWUsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTpyLHZhbHVlOm59KSx0fW4ucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLl8scz1pKHQrIiIsbiksbD0tMSxjPXMubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytsPGM7KWlmKHI9KHQ9c1tsXSkudHlwZSluW3JdPW8obltyXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihyIGluIG4pbltyXT1vKG5bcl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytsPGM7KWlmKChyPSh0PXNbbF0pLnR5cGUpJiYocj1hKG5bcl0sdC5uYW1lKSkpcmV0dXJuIHJ9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IG4odCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAscj0obj10aGlzLl9bdF0pLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX19LHQuZGlzcGF0Y2g9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLXF1YWR0cmVlIiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLWRpc3BhdGNoIiksdCgiZDMtdGltZXIiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC55fXZhciBwPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTt0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbigpe3ZhciBuLGksYT1yLmxlbmd0aCxvPTAscz0wO2ZvcihuPTA7bjxhOysrbilvKz0oaT1yW25dKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLG49MDtuPGE7KytuKShpPXJbbl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxuLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbik6dH0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LG59LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciByLG4saT0xLGM9MTtmdW5jdGlvbiB1KCl7Zm9yKHZhciB0LGEsdSxoLHAsZCxtLGc9ci5sZW5ndGgsdj0wO3Y8YzsrK3YpZm9yKGE9ZS5xdWFkdHJlZShyLHMsbCkudmlzaXRBZnRlcihmKSx0PTA7dDxnOysrdCl1PXJbdF0sZD1uW3UuaW5kZXhdLG09ZCpkLGg9dS54K3UudngscD11LnkrdS52eSxhLnZpc2l0KHkpO2Z1bmN0aW9uIHkodCxlLHIsbixhKXt2YXIgcz10LmRhdGEsbD10LnIsYz1kK2w7aWYoIXMpcmV0dXJuIGU+aCtjfHxuPGgtY3x8cj5wK2N8fGE8cC1jO2lmKHMuaW5kZXg+dS5pbmRleCl7dmFyIGY9aC1zLngtcy52eCxnPXAtcy55LXMudnksdj1mKmYrZypnO3Y8YypjJiYoMD09PWYmJih2Kz0oZj1vKCkpKmYpLDA9PT1nJiYodis9KGc9bygpKSpnKSx2PShjLSh2PU1hdGguc3FydCh2KSkpL3YqaSx1LnZ4Kz0oZio9dikqKGM9KGwqPWwpLyhtK2wpKSx1LnZ5Kz0oZyo9dikqYyxzLnZ4LT1mKihjPTEtYykscy52eS09ZypjKX19fWZ1bmN0aW9uIGYodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBoKCl7aWYocil7dmFyIGUsaSxhPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSlpPXJbZV0sbltpLmluZGV4XT0rdChpLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MTordCkpLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsaCgpfSx1Lml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsdSk6Y30sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KTppfSx1LnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLGgoKSx1KTp0fSx1fSx0LmZvcmNlTGluaz1mdW5jdGlvbih0KXt2YXIgZSxuLGkscyxsLGY9YyxoPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKHNbdC5zb3VyY2UuaW5kZXhdLHNbdC50YXJnZXQuaW5kZXhdKX0scD1hKDMwKSxkPTE7ZnVuY3Rpb24gbShyKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8ZDsrK2kpZm9yKHZhciBzLGMsdSxmLGgscCxtLGc9MDtnPGE7KytnKWM9KHM9dFtnXSkuc291cmNlLGY9KHU9cy50YXJnZXQpLngrdS52eC1jLngtYy52eHx8bygpLGg9dS55K3UudnktYy55LWMudnl8fG8oKSxmKj1wPSgocD1NYXRoLnNxcnQoZipmK2gqaCkpLW5bZ10pL3AqciplW2ddLGgqPXAsdS52eC09ZioobT1sW2ddKSx1LnZ5LT1oKm0sYy52eCs9ZioobT0xLW0pLGMudnkrPWgqbX1mdW5jdGlvbiBnKCl7aWYoaSl7dmFyIGEsbyxjPWkubGVuZ3RoLGg9dC5sZW5ndGgscD1yLm1hcChpLGYpO2ZvcihhPTAscz1uZXcgQXJyYXkoYyk7YTxoOysrYSkobz10W2FdKS5pbmRleD1hLCJvYmplY3QiIT10eXBlb2Ygby5zb3VyY2UmJihvLnNvdXJjZT11KHAsby5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIG8udGFyZ2V0JiYoby50YXJnZXQ9dShwLG8udGFyZ2V0KSksc1tvLnNvdXJjZS5pbmRleF09KHNbby5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbby50YXJnZXQuaW5kZXhdPShzW28udGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoYT0wLGw9bmV3IEFycmF5KGgpO2E8aDsrK2Epbz10W2FdLGxbYV09c1tvLnNvdXJjZS5pbmRleF0vKHNbby5zb3VyY2UuaW5kZXhdK3Nbby50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShoKSx2KCksbj1uZXcgQXJyYXkoaCkseSgpfX1mdW5jdGlvbiB2KCl7aWYoaSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT0raCh0W3JdLHIsdCl9ZnVuY3Rpb24geSgpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K3AodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxnKCl9LG0ubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxnKCksbSk6dH0sbS5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LG0pOmZ9LG0uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxtKTpkfSxtLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksdigpLG0pOmh9LG0uZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSx5KCksbSk6cH0sbX0sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7dmFyIHQscixuLGkscz1hKC0zMCksbD0xLGM9MS8wLHU9LjgxO2Z1bmN0aW9uIHAoaSl7dmFyIGEsbz10Lmxlbmd0aCxzPWUucXVhZHRyZWUodCxmLGgpLnZpc2l0QWZ0ZXIobSk7Zm9yKG49aSxhPTA7YTxvOysrYSlyPXRbYV0scy52aXNpdChnKX1mdW5jdGlvbiBkKCl7aWYodCl7dmFyIGUscixuPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXRbZV0saVtyLmluZGV4XT0rcyhyLGUsdCl9fWZ1bmN0aW9uIG0odCl7dmFyIGUscixuLGEsbyxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iobj1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYocj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPXIsbis9ciplLngsYSs9ciplLnkpO3QueD1uL2wsdC55PWEvbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGcodCxlLGEscyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGY9dC54LXIueCxoPXQueS1yLnkscD1zLWUsZD1mKmYraCpoO2lmKHAqcC91PGQpcmV0dXJuIGQ8YyYmKDA9PT1mJiYoZCs9KGY9bygpKSpmKSwwPT09aCYmKGQrPShoPW8oKSkqaCksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSksci52eCs9Zip0LnZhbHVlKm4vZCxyLnZ5Kz1oKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1jKSl7KHQuZGF0YSE9PXJ8fHQubmV4dCkmJigwPT09ZiYmKGQrPShmPW8oKSkqZiksMD09PWgmJihkKz0oaD1vKCkpKmgpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpKTtkb3t0LmRhdGEhPT1yJiYocD1pW3QuZGF0YS5pbmRleF0qbi9kLHIudngrPWYqcCxyLnZ5Kz1oKnApfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIHAuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsZCgpfSxwLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksZCgpLHApOnN9LHAuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCp0LHApOk1hdGguc3FydChsKX0scC5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQscCk6TWF0aC5zcXJ0KGMpfSxwLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxwKTpNYXRoLnNxcnQodSl9LHB9LHQuZm9yY2VSYWRpYWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzPWEoLjEpO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKXt2YXIgbD1uW2FdLGM9bC54LWV8fDFlLTYsdT1sLnktcnx8MWUtNixmPU1hdGguc3FydChjKmMrdSp1KSxoPShvW2FdLWYpKmlbYV0qdC9mO2wudngrPWMqaCxsLnZ5Kz11Kmh9fWZ1bmN0aW9uIGMoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlvW2VdPSt0KG5bZV0sZSxuKSxpW2VdPWlzTmFOKG9bZV0pPzA6K3MobltlXSxlLG4pfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YSgrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PXImJihyPTApLGwuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYygpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksYygpLGwpOnN9LGwucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksYygpLGwpOnR9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsbCk6cn0sbH0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7dmFyIGUsYT0xLG89LjAwMSxzPTEtTWF0aC5wb3cobywxLzMwMCksbD0wLGM9LjYsdT1yLm1hcCgpLGY9aS50aW1lcihkKSxoPW4uZGlzcGF0Y2goInRpY2siLCJlbmQiKTtmdW5jdGlvbiBkKCl7bSgpLGguY2FsbCgidGljayIsZSksYTxvJiYoZi5zdG9wKCksaC5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBtKHIpe3ZhciBuLGksbz10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGY9MDtmPHI7KytmKWZvcihhKz0obC1hKSpzLHUuZWFjaCgoZnVuY3Rpb24odCl7dChhKX0pKSxuPTA7bjxvOysrbiludWxsPT0oaT10W25dKS5meD9pLngrPWkudngqPWM6KGkueD1pLmZ4LGkudng9MCksbnVsbD09aS5meT9pLnkrPWkudnkqPWM6KGkueT1pLmZ5LGkudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZygpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQociksYT1yKnA7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnKCksZT17dGljazptLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5yZXN0YXJ0KGQpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZi5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cixnKCksdS5lYWNoKHYpLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZSk6K3N9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9MS10LGUpOjEtY30sZm9yY2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1yP3UucmVtb3ZlKHQpOnUuc2V0KHQsdihyKSksZSk6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PW4/bj0xLzA6bio9bixjPTA7Yzx1OysrYykobz0oaT1lLShzPXRbY10pLngpKmkrKGE9ci1zLnkpKmEpPG4mJihsPXMsbj1vKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhoLm9uKHQsciksZSk6aC5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oblthXS1pLngpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSx0LmZvcmNlWT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oblthXS1pLnkpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtY29sbGVjdGlvbiI6MTA4LCJkMy1kaXNwYXRjaCI6MTEwLCJkMy1xdWFkdHJlZSI6MTE4LCJkMy10aW1lciI6MTIzfV0sMTEyOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7aWYoKHI9KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49dC5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCt0LnNsaWNlKHIrMSldfWZ1bmN0aW9uIHIodCl7cmV0dXJuKHQ9ZShNYXRoLmFicyh0KSkpP3RbMV06TmFOfXZhciBuLGk9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gYSh0KXtpZighKGU9aS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgbyh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBvKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIHModCxyKXt2YXIgbj1lKHQscik7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxhPW5bMV07cmV0dXJuIGE8MD8iMC4iK25ldyBBcnJheSgtYSkuam9pbigiMCIpK2k6aS5sZW5ndGg+YSsxP2kuc2xpY2UoMCxhKzEpKyIuIitpLnNsaWNlKGErMSk6aStuZXcgQXJyYXkoYS1pLmxlbmd0aCsyKS5qb2luKCIwIil9YS5wcm90b3R5cGU9by5wcm90b3R5cGUsby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgbD17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcygxMDAqdCxlKX0scjpzLHM6ZnVuY3Rpb24odCxyKXt2YXIgaT1lKHQscik7aWYoIWkpcmV0dXJuIHQrIiI7dmFyIGE9aVswXSxvPWlbMV0scz1vLShuPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKG8vMykpKSkrMSxsPWEubGVuZ3RoO3JldHVybiBzPT09bD9hOnM+bD9hK25ldyBBcnJheShzLWwrMSkuam9pbigiMCIpOnM+MD9hLnNsaWNlKDAscykrIi4iK2Euc2xpY2Uocyk6IjAuIituZXcgQXJyYXkoMS1zKS5qb2luKCIwIikrZSh0LE1hdGgubWF4KDAscitzLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBjKHQpe3JldHVybiB0fXZhciB1LGY9QXJyYXkucHJvdG90eXBlLm1hcCxoPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHAodCl7dmFyIGUsaSxvPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2M6KGU9Zi5jYWxsKHQuZ3JvdXBpbmcsTnVtYmVyKSxpPXQudGhvdXNhbmRzKyIiLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPXQubGVuZ3RoLGE9W10sbz0wLHM9ZVswXSxsPTA7bj4wJiZzPjAmJihsK3MrMT5yJiYocz1NYXRoLm1heCgxLHItbCkpLGEucHVzaCh0LnN1YnN0cmluZyhuLT1zLG4rcykpLCEoKGwrPXMrMSk+cikpOylzPWVbbz0obysxKSVlLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oaSl9KSxzPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIix1PXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixwPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLGQ9dm9pZCAwPT09dC5udW1lcmFscz9jOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fShmLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxtPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGc9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIix2PXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIHkodCl7dmFyIGU9KHQ9YSh0KSkuZmlsbCxyPXQuYWxpZ24saT10LnNpZ24sYz10LnN5bWJvbCxmPXQuemVybyx5PXQud2lkdGgseD10LmNvbW1hLGI9dC5wcmVjaXNpb24sXz10LnRyaW0sdz10LnR5cGU7Im4iPT09dz8oeD0hMCx3PSJnIik6bFt3XXx8KHZvaWQgMD09PWImJihiPTEyKSxfPSEwLHc9ImciKSwoZnx8IjAiPT09ZSYmIj0iPT09cikmJihmPSEwLGU9IjAiLHI9Ij0iKTt2YXIgVD0iJCI9PT1jP3M6IiMiPT09YyYmL1tib3hYXS8udGVzdCh3KT8iMCIrdy50b0xvd2VyQ2FzZSgpOiIiLGs9IiQiPT09Yz91Oi9bJXBdLy50ZXN0KHcpP206IiIsQT1sW3ddLE09L1tkZWZncHJzJV0vLnRlc3Qodyk7ZnVuY3Rpb24gUyh0KXt2YXIgYSxzLGwsYz1ULHU9aztpZigiYyI9PT13KXU9QSh0KSt1LHQ9IiI7ZWxzZXt2YXIgbT0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT92OkEoTWF0aC5hYnModCksYiksXyYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUscj10Lmxlbmd0aCxuPTEsaT0tMTtuPHI7KytuKXN3aXRjaCh0W25dKXtjYXNlIi4iOmk9ZT1uO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPW4pLGU9bjticmVhaztkZWZhdWx0OmlmKCErdFtuXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxtJiYwPT0rdCYmIisiIT09aSYmKG09ITEpLGM9KG0/IigiPT09aT9pOmc6Ii0iPT09aXx8IigiPT09aT8iIjppKStjLHU9KCJzIj09PXc/aFs4K24vM106IiIpK3UrKG0mJiIoIj09PWk/IikiOiIiKSxNKWZvcihhPS0xLHM9dC5sZW5ndGg7KythPHM7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChhKSl8fGw+NTcpe3U9KDQ2PT09bD9wK3Quc2xpY2UoYSsxKTp0LnNsaWNlKGEpKSt1LHQ9dC5zbGljZSgwLGEpO2JyZWFrfX14JiYhZiYmKHQ9byh0LDEvMCkpO3ZhciBTPWMubGVuZ3RoK3QubGVuZ3RoK3UubGVuZ3RoLEU9Uzx5P25ldyBBcnJheSh5LVMrMSkuam9pbihlKToiIjtzd2l0Y2goeCYmZiYmKHQ9byhFK3QsRS5sZW5ndGg/eS11Lmxlbmd0aDoxLzApLEU9IiIpLHIpe2Nhc2UiPCI6dD1jK3QrdStFO2JyZWFrO2Nhc2UiPSI6dD1jK0UrdCt1O2JyZWFrO2Nhc2UiXiI6dD1FLnNsaWNlKDAsUz1FLmxlbmd0aD4+MSkrYyt0K3UrRS5zbGljZShTKTticmVhaztkZWZhdWx0OnQ9RStjK3QrdX1yZXR1cm4gZCh0KX1yZXR1cm4gYj12b2lkIDA9PT1iPzY6L1tncHJzXS8udGVzdCh3KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGIpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGIpKSxTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LFN9cmV0dXJue2Zvcm1hdDp5LGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPXkoKCh0PWEodCkpLnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIoZSkvMykpKSxvPU1hdGgucG93KDEwLC1pKSxzPWhbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihvKnQpK3N9fX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gdT1wKGUpLHQuZm9ybWF0PXUuZm9ybWF0LHQuZm9ybWF0UHJlZml4PXUuZm9ybWF0UHJlZml4LHV9ZCh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSksdC5Gb3JtYXRTcGVjaWZpZXI9byx0LmZvcm1hdERlZmF1bHRMb2NhbGU9ZCx0LmZvcm1hdExvY2FsZT1wLHQuZm9ybWF0U3BlY2lmaWVyPWEsdC5wcmVjaXNpb25GaXhlZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtcihNYXRoLmFicyh0KSkpfSx0LnByZWNpc2lvblByZWZpeD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIoZSkvMykpKS1yKE1hdGguYWJzKHQpKSl9LHQucHJlY2lzaW9uUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxyKGUpLXIodCkpKzF9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDExMzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtZ2VvIiksdCgiZDMtYXJyYXkiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4sYT1NYXRoLmF0YW4yLG89TWF0aC5jb3Mscz1NYXRoLmV4cCxsPU1hdGguZmxvb3IsYz1NYXRoLmxvZyx1PU1hdGgubWF4LGY9TWF0aC5taW4saD1NYXRoLnBvdyxwPU1hdGgucm91bmQsZD1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sbT1NYXRoLnNpbixnPU1hdGgudGFuLHY9MWUtNix5PU1hdGguUEkseD15LzIsYj15LzQsXz1NYXRoLlNRUlQxXzIsdz1MKDIpLFQ9TCh5KSxrPTIqeSxBPTE4MC95LE09eS8xODA7ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdD4xP3g6dDwtMT8teDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdD4xPzA6dDwtMT95Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiB0PjA/TWF0aC5zcXJ0KHQpOjB9ZnVuY3Rpb24gQyh0KXtyZXR1cm4ocyh0KS1zKC10KSkvMn1mdW5jdGlvbiBQKHQpe3JldHVybihzKHQpK3MoLXQpKS8yfWZ1bmN0aW9uIEkodCl7dmFyIGU9Zyh0LzIpLHI9MipjKG8odC8yKSkvKGUqZSk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPW8odCksaT1vKGUpLGE9bShlKSxzPWkqbixsPS0oKDEtcz9jKCgxK3MpLzIpLygxLXMpOi0uNSkrci8oMStzKSk7cmV0dXJuW2wqaSptKHQpLGwqYV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKGUsaSl7dmFyIHMsbD1MKGUqZStpKmkpLHU9LXQvMixmPTUwO2lmKCFsKXJldHVyblswLDBdO2Rve3ZhciBoPXUvMixwPW8oaCksZD1tKGgpLGc9ZC9wLHk9LWMobihwKSk7dS09cz0oMi9nKnktcipnLWwpLygteS8oZCpkKSsxLXIvKDIqcCpwKSkqKHA8MD8uNzoxKX13aGlsZShuKHMpPnYmJi0tZj4wKTt2YXIgeD1tKHUpO3JldHVyblthKGUqeCxsKm8odSkpLFMoaSp4L2wpXX0saX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9byhlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiB0P3QvTWF0aC5zaW4odCk6MX0oRShyKm8odC89MikpKTtyZXR1cm5bMipyKm0odCkqbixtKGUpKm5dfWZ1bmN0aW9uIHoodCl7dmFyIGU9bSh0KSxyPW8odCksaT10Pj0wPzE6LTEscz1nKGkqdCksbD0oMStlLXIpLzI7ZnVuY3Rpb24gYyh0LG4pe3ZhciBjPW8obiksdT1vKHQvPTIpO3JldHVyblsoMStjKSptKHQpLChpKm4+LWEodSxzKS0uMDAxPzA6MTAqLWkpK2wrbShuKSpyLSgxK2MpKmUqdV19cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQsYyl7dmFyIHU9MCxmPTAsaD01MDtkb3t2YXIgcD1vKHUpLGQ9bSh1KSxnPW8oZikseT1tKGYpLHg9MStnLGI9eCpkLXQsXz1sK3kqci14KmUqcC1jLHc9eCpwLzIsVD0tZCp5LGs9ZSp4KmQvMixBPXIqZytlKnAqeSxNPVQqay1BKncsUz0oXypULWIqQSkvTS8yLEU9KGIqay1fKncpL007bihFKT4yJiYoRS89MiksdS09UyxmLT1FfXdoaWxlKChuKFMpPnZ8fG4oRSk+dikmJi0taD4wKTtyZXR1cm4gaSpmPi1hKG8odSkscyktLjAwMT9bMip1LGZdOm51bGx9LGN9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPWcoZS8yKSxuPUwoMS1yKnIpLGk9MStuKm8odC89MiksYT1tKHQpKm4vaSxzPXIvaSxsPWEqYSxjPXMqcztyZXR1cm5bNC8zKmEqKDMrbC0zKmMpLDQvMypzKigzKzMqbC1jKV19Ty5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT55Knkrdikpe3ZhciByPXQsaT1lLGE9MjU7ZG97dmFyIHMsbD1tKHIpLGM9bShyLzIpLHU9byhyLzIpLGY9bShpKSxoPW8oaSkscD1tKDIqaSksZD1mKmYsZz1oKmgseD1jKmMsYj0xLWcqdSp1LF89Yj9FKGgqdSkqTChzPTEvYik6cz0wLHc9MipfKmgqYy10LFQ9XypmLWUsaz1zKihnKngrXypoKnUqZCksQT1zKiguNSpsKnAtMipfKmYqYyksTT0uMjUqcyoocCpjLV8qZipnKmwpLFM9cyooZCp1K18qeCpoKSxDPUEqTS1TKms7aWYoIUMpYnJlYWs7dmFyIFA9KFQqQS13KlMpL0MsST0odypNLVQqaykvQztyLT1QLGktPUl9d2hpbGUoKG4oUCk+dnx8bihJKT52KSYmLS1hPjApO3JldHVybltyLGldfX0sRC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZihlKj0zLzgsISh0Kj0zLzgpJiZuKGUpPjEpcmV0dXJuIG51bGw7dmFyIHI9MSt0KnQrZSplLGk9TCgoci1MKHIqci00KmUqZSkpLzIpLHM9UyhpKS8zLGw9aT9mdW5jdGlvbih0KXtyZXR1cm4gYyh0K0wodCp0LTEpKX0obihlL2kpKS8zOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQrTCh0KnQrMSkpfShuKHQpKS8zLHU9byhzKSxmPVAobCksaD1mKmYtdSp1O3JldHVyblsyKmQodCkqYShDKGwpKnUsLjI1LWgpLDIqZChlKSphKGYqbShzKSwuMjUraCldfTt2YXIgUj1MKDgpLEY9YygxK3cpO2Z1bmN0aW9uIEIodCxlKXt2YXIgcj1uKGUpO3JldHVybiByPGI/W3QsYyhnKGIrZS8yKSldOlt0Km8ocikqKDIqdy0xL20ocikpLGQoZSkqKDIqdyooci1iKS1jKGcoci8yKSkpXX1mdW5jdGlvbiBOKHQpe3ZhciByPTIqeS90O2Z1bmN0aW9uIHModCxpKXt2YXIgcz1lLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3KHQsaSk7aWYobih0KT54KXt2YXIgbD1hKHNbMV0sc1swXSksYz1MKHNbMF0qc1swXStzWzFdKnNbMV0pLHU9cipwKChsLXgpL3IpK3gsZj1hKG0obC09dSksMi1vKGwpKTtsPXUrUyh5L2MqbShmKSktZixzWzBdPWMqbyhsKSxzWzFdPWMqbShsKX1yZXR1cm4gc31yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgcz1MKHQqdCtuKm4pO2lmKHM+eCl7dmFyIGw9YShuLHQpLGM9cipwKChsLXgpL3IpK3gsdT1sPmM/LTE6MSxmPXMqbyhjLWwpLGg9MS9nKHUqRSgoZi15KS9MKHkqKHktMipmKStzKnMpKSk7bD1jKzIqaSgoaCt1KkwoaCpoLTMpKS8zKSx0PXMqbyhsKSxuPXMqbShsKX1yZXR1cm4gZS5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQodCxuKX0sc31mdW5jdGlvbiBqKHQscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyJiYocj10KSwxPT09cilyZXR1cm4gZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXc7aWYocj09PTEvMClyZXR1cm4gVTtmdW5jdGlvbiBuKG4saSl7dmFyIGE9ZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXcobi9yLGkpO3JldHVybiBhWzBdKj10LGF9cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXcuaW52ZXJ0KG4vdCxpKTtyZXR1cm4gYVswXSo9cixhfSxufWZ1bmN0aW9uIFUodCxlKXtyZXR1cm5bdCpvKGUpL28oZS89MiksMiptKGUpXX1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgaSxhLG8scz0xMDA7cj12b2lkIDA9PT1yPzA6K3IsZT0rZTtkb3soYT10KHIpKT09PShvPXQocit2KSkmJihvPWErdiksci09aT0tMSp2KihhLWUpLyhhLW8pfXdoaWxlKHMtLSA+MCYmbihpKT52KTtyZXR1cm4gczwwP05hTjpyfWZ1bmN0aW9uIEgodCxlLHIpe3JldHVybiB2b2lkIDA9PT1lJiYoZT00MCksdm9pZCAwPT09ciYmKHI9MWUtMTIpLGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsLGMsdTtvPXZvaWQgMD09PW8/MDorbyxzPXZvaWQgMD09PXM/MDorcztmb3IodmFyIGY9MDtmPGU7ZisrKXt2YXIgaD10KG8scykscD1oWzBdLWksZD1oWzFdLWE7aWYobihwKTxyJiZuKGQpPHIpYnJlYWs7dmFyIG09cCpwK2QqZDtpZihtPmwpby09Yy89MixzLT11Lz0yO2Vsc2V7bD1tO3ZhciBnPShvPjA/LTE6MSkqcix2PShzPjA/LTE6MSkqcix5PXQobytnLHMpLHg9dChvLHMrdiksYj0oeVswXS1oWzBdKS9nLF89KHlbMV0taFsxXSkvZyx3PSh4WzBdLWhbMF0pL3YsVD0oeFsxXS1oWzFdKS92LGs9VCpiLV8qdyxBPShuKGspPC41Py41OjEpL2s7aWYobys9Yz0oZCp3LXAqVCkqQSxzKz11PShwKl8tZCpiKSpBLG4oYyk8ciYmbih1KTxyKWJyZWFrfX1yZXR1cm5bbyxzXX19ZnVuY3Rpb24gcSgpe3ZhciB0PWooMS42OCwyKTtmdW5jdGlvbiBlKGUscil7aWYoZStyPC0xLjQpe3ZhciBuPShlLXIrMS42KSooZStyKzEuNCkvODtlKz1uLHItPS44Km4qbShyK3kvMil9dmFyIGk9dChlLHIpLGE9KDEtbyhlKnIpKS8xMjtyZXR1cm4gaVsxXTwwJiYoaVswXSo9MSthKSxpWzFdPjAmJihpWzFdKj0xK2EvMS41KmlbMF0qaVswXSksaX1yZXR1cm4gZS5pbnZlcnQ9SChlKSxlfWZ1bmN0aW9uIEcodCxlKXt2YXIgcixpPXQqbShlKSxhPTMwO2Rve2UtPXI9KGUrbShlKS1pKS8oMStvKGUpKX13aGlsZShuKHIpPnYmJi0tYT4wKTtyZXR1cm4gZS8yfWZ1bmN0aW9uIFkodCxlLHIpe2Z1bmN0aW9uIG4obixpKXtyZXR1cm5bdCpuKm8oaT1HKHIsaSkpLGUqbShpKV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGk9UyhpL2UpLFtuLyh0Km8oaSkpLFMoKDIqaSttKDIqaSkpL3IpXX0sbn1CLmludmVydD1mdW5jdGlvbih0LGUpe2lmKChhPW4oZSkpPEYpcmV0dXJuW3QsMippKHMoZSkpLXhdO3ZhciByLGEsbD1iLHU9MjU7ZG97dmFyIGY9byhsLzIpLGg9ZyhsLzIpO2wtPXI9KFIqKGwtYiktYyhoKS1hKS8oUi1mKmYvKDIqaCkpfXdoaWxlKG4ocik+MWUtMTImJi0tdT4wKTtyZXR1cm5bdC8obyhsKSooUi0xL20obCkpKSxkKGUpKmxdfSxVLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqUyhlLzIpO3JldHVyblt0Km8oci8yKS9vKHIpLHJdfTt2YXIgVz1ZKHcveCx3LHkpO3ZhciBYPTIuMDAyNzYsWj0xLjExMDcyO2Z1bmN0aW9uIEoodCxlKXt2YXIgcj1HKHksZSk7cmV0dXJuW1gqdC8oMS9vKGUpK1ovbyhyKSksKGUrdyptKHIpKS9YXX1mdW5jdGlvbiBLKHQpe3ZhciByPTAsbj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKHQpLGk9bihyKTtyZXR1cm4gaS5wYXJhbGxlbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHI9dCpNKTpyKkF9LGl9ZnVuY3Rpb24gUSh0LGUpe3JldHVyblt0Km8oZSksZV19ZnVuY3Rpb24gJCh0KXtpZighdClyZXR1cm4gUTt2YXIgZT0xL2codCk7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPWUrdC1uLGE9aT9yKm8obikvaTppO3JldHVybltpKm0oYSksZS1pKm8oYSldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLG4pe3ZhciBpPUwocipyKyhuPWUtbikqbikscz1lK3QtaTtyZXR1cm5baS9vKHMpKmEocixuKSxzXX0scn1mdW5jdGlvbiB0dCh0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49eC1yLGk9bj9lKnQqbShuKS9uOm47cmV0dXJuW24qbShpKS90LHgtbipvKGkpXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lKnQsaT14LXIsbz1MKG4qbitpKmkpLHM9YShuLGkpO3JldHVyblsobz9vL20obyk6MSkqcy90LHgtb119LGV9Si5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9WCplLHM9ZTwwPy1iOmIsbD0yNTtkb3tpPWEtdyptKHMpLHMtPXI9KG0oMipzKSsyKnMteSptKGkpKS8oMipvKDIqcykrMit5Km8oaSkqdypvKHMpKX13aGlsZShuKHIpPnYmJi0tbD4wKTtyZXR1cm4gaT1hLXcqbShzKSxbdCooMS9vKGkpK1ovbyhzKSkvWCxpXX0sUS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9vKGUpLGVdfTt2YXIgZXQ9WSgxLDQveSx5KTtmdW5jdGlvbiBydCh0LGUscixpLHMsbCl7dmFyIGMsdT1vKGwpO2lmKG4odCk+MXx8bihsKT4xKWM9RShyKnMrZSppKnUpO2Vsc2V7dmFyIGY9bSh0LzIpLGg9bShsLzIpO2M9MipTKEwoZipmK2UqaSpoKmgpKX1yZXR1cm4gbihjKT52P1tjLGEoaSptKGwpLGUqcy1yKmkqdSldOlswLDBdfWZ1bmN0aW9uIG50KHQsZSxyKXtyZXR1cm4gRSgodCp0K2UqZS1yKnIpLygyKnQqZSkpfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0LTIqeSpsKCh0K3kpLygyKnkpKX1mdW5jdGlvbiBhdCh0LGUscil7Zm9yKHZhciBuLGk9W1t0WzBdLHRbMV0sbSh0WzFdKSxvKHRbMV0pXSxbZVswXSxlWzFdLG0oZVsxXSksbyhlWzFdKV0sW3JbMF0sclsxXSxtKHJbMV0pLG8oclsxXSldXSxhPWlbMl0scz0wO3M8MzsrK3MsYT1uKW49aVtzXSxhLnY9cnQoblsxXS1hWzFdLGFbM10sYVsyXSxuWzNdLG5bMl0sblswXS1hWzBdKSxhLnBvaW50PVswLDBdO3ZhciBsPW50KGlbMF0udlswXSxpWzJdLnZbMF0saVsxXS52WzBdKSxjPW50KGlbMF0udlswXSxpWzFdLnZbMF0saVsyXS52WzBdKSx1PXktbDtpWzJdLnBvaW50WzFdPTAsaVswXS5wb2ludFswXT0tKGlbMV0ucG9pbnRbMF09aVswXS52WzBdLzIpO3ZhciBmPVtpWzJdLnBvaW50WzBdPWlbMF0ucG9pbnRbMF0raVsyXS52WzBdKm8obCksMiooaVswXS5wb2ludFsxXT1pWzFdLnBvaW50WzFdPWlbMl0udlswXSptKGwpKV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1tKGUpLGE9byhlKSxzPW5ldyBBcnJheSgzKTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBsPWlbcl07aWYoc1tyXT1ydChlLWxbMV0sbFszXSxsWzJdLGEsbix0LWxbMF0pLCFzW3JdWzBdKXJldHVybiBsLnBvaW50O3Nbcl1bMV09aXQoc1tyXVsxXS1sLnZbMV0pfXZhciBoPWYuc2xpY2UoKTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBwPTI9PXI/MDpyKzEsZD1udChpW3JdLnZbMF0sc1tyXVswXSxzW3BdWzBdKTtzW3JdWzFdPDAmJihkPS1kKSxyPzE9PXI/KGQ9Yy1kLGhbMF0tPXNbcl1bMF0qbyhkKSxoWzFdLT1zW3JdWzBdKm0oZCkpOihkPXUtZCxoWzBdKz1zW3JdWzBdKm8oZCksaFsxXSs9c1tyXVswXSptKGQpKTooaFswXSs9c1tyXVswXSpvKGQpLGhbMV0tPXNbcl1bMF0qbShkKSl9cmV0dXJuIGhbMF0vPTMsaFsxXS89MyxofX1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gdFswXSo9TSx0WzFdKj1NLHR9ZnVuY3Rpb24gc3QodCxyLG4pe3ZhciBpPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOlt0LHIsbl19KSxhPVstaVswXSwtaVsxXV0sbz1lLmdlb1JvdGF0aW9uKGEpLHM9YXQob3Qobyh0KSksb3QobyhyKSksb3QobyhuKSkpO3MuaW52ZXJ0PUgocyk7dmFyIGw9ZS5nZW9Qcm9qZWN0aW9uKHMpLnJvdGF0ZShhKSxjPWwuY2VudGVyO3JldHVybiBkZWxldGUgbC5yb3RhdGUsbC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YyhvKHQpKTpvLmludmVydChjKCkpfSxsLmNsaXBBbmdsZSg5MCl9ZnVuY3Rpb24gbHQodCxlKXt2YXIgcj1MKDEtbShlKSk7cmV0dXJuWzIvVCp0KnIsVCooMS1yKV19ZnVuY3Rpb24gY3QodCl7dmFyIGU9Zyh0KTtmdW5jdGlvbiByKHQscil7cmV0dXJuW3QsKHQ/dC9tKHQpOjEpKihtKHIpKm8odCktZSpvKHIpKV19cmV0dXJuIHIuaW52ZXJ0PWU/ZnVuY3Rpb24odCxyKXt0JiYocio9bSh0KS90KTt2YXIgbj1vKHQpO3JldHVyblt0LDIqYShMKG4qbitlKmUtcipyKS1uLGUtcildfTpmdW5jdGlvbih0LGUpe3JldHVyblt0LFModD9lKmcodCkvdDplKV19LHJ9bHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHI9ZS9ULTEpKnI7cmV0dXJuW3I+MD90KkwoeS9yKS8yOjAsUygxLXIpXX07dmFyIHV0PUwoMyk7ZnVuY3Rpb24gZnQodCxlKXtyZXR1cm5bdXQqdCooMipvKDIqZS8zKS0xKS9ULHV0KlQqbShlLzMpXX1mdW5jdGlvbiBodCh0KXt2YXIgZT1vKHQpO2Z1bmN0aW9uIHIodCxyKXtyZXR1cm5bdCplLG0ocikvZV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7cmV0dXJuW3QvZSxTKHIqZSldfSxyfWZ1bmN0aW9uIHB0KHQpe3ZhciBlPW8odCk7ZnVuY3Rpb24gcih0LHIpe3JldHVyblt0KmUsKDErZSkqZyhyLzIpXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCxyKXtyZXR1cm5bdC9lLDIqaShyLygxK2UpKV19LHJ9ZnVuY3Rpb24gZHQodCxlKXt2YXIgcj1MKDgvKDMqeSkpO3JldHVybltyKnQqKDEtbihlKS95KSxyKmVdfWZ1bmN0aW9uIG10KHQsZSl7dmFyIHI9TCg0LTMqbShuKGUpKSk7cmV0dXJuWzIvTCg2KnkpKnQqcixkKGUpKkwoMip5LzMpKigyLXIpXX1mdW5jdGlvbiBndCh0LGUpe3ZhciByPUwoeSooNCt5KSk7cmV0dXJuWzIvcip0KigxK0woMS00KmUqZS8oeSp5KSkpLDQvciplXX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPSgyK3gpKm0oZSk7ZS89Mjtmb3IodmFyIGk9MCxhPTEvMDtpPDEwJiZuKGEpPnY7aSsrKXt2YXIgcz1vKGUpO2UtPWE9KGUrbShlKSoocysyKS1yKS8oMipzKigxK3MpKX1yZXR1cm5bMi9MKHkqKDQreSkpKnQqKDErbyhlKSksMipMKHkvKDQreSkpKm0oZSldfWZ1bmN0aW9uIHl0KHQsZSl7cmV0dXJuW3QqKDErbyhlKSkvTCgyK3kpLDIqZS9MKDIreSldfWZ1bmN0aW9uIHh0KHQsZSl7Zm9yKHZhciByPSgxK3gpKm0oZSksaT0wLGE9MS8wO2k8MTAmJm4oYSk+djtpKyspZS09YT0oZSttKGUpLXIpLygxK28oZSkpO3JldHVybiByPUwoMit5KSxbdCooMStvKGUpKS9yLDIqZS9yXX1mdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0zKlMoZS8odXQqVCkpO3JldHVybltUKnQvKHV0KigyKm8oMipyLzMpLTEpKSxyXX0sZHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TCg4LygzKnkpKSxpPWUvcjtyZXR1cm5bdC8ociooMS1uKGkpL3kpKSxpXX0sbXQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9Mi1uKGUpL0woMip5LzMpO3JldHVyblt0KkwoNip5KS8oMipyKSxkKGUpKlMoKDQtcipyKS8zKV19LGd0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPUwoeSooNCt5KSkvMjtyZXR1cm5bdCpyLygxK0woMS1lKmUqKDQreSkvKDQqeSkpKSxlKnIvMl19LHZ0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUqTCgoNCt5KS95KS8yLG49UyhyKSxpPW8obik7cmV0dXJuW3QvKDIvTCh5Kig0K3kpKSooMStpKSksUygobityKihpKzIpKS8oMit4KSldfSx5dC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1MKDIreSksbj1lKnIvMjtyZXR1cm5bcip0LygxK28obikpLG5dfSx4dC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0xK3gsbj1MKHIvMik7cmV0dXJuWzIqdCpuLygxK28oZSo9bikpLFMoKGUrbShlKSkvcildfTt2YXIgYnQ9MysyKnc7ZnVuY3Rpb24gX3QodCxlKXt2YXIgcj1tKHQvPTIpLG49byh0KSxhPUwobyhlKSkscz1vKGUvPTIpLGw9bShlKS8ocyt3Km4qYSksdT1MKDIvKDErbCpsKSksZj1MKCh3KnMrKG4rcikqYSkvKHcqcysobi1yKSphKSk7cmV0dXJuW2J0Kih1KihmLTEvZiktMipjKGYpKSxidCoodSpsKihmKzEvZiktMippKGwpKV19X3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIShyPUQuaW52ZXJ0KHQvMS4yLDEuMDY1KmUpKSlyZXR1cm4gbnVsbDt2YXIgcixhPXJbMF0scz1yWzFdLGw9MjA7dC89YnQsZS89YnQ7ZG97dmFyIGg9YS8yLHA9cy8yLGQ9bShoKSxnPW8oaCkseT1tKHApLGI9byhwKSxUPW8ocyksaz1MKFQpLEE9eS8oYit3KmcqayksTT1BKkEsUz1MKDIvKDErTSkpLEU9KHcqYisoZytkKSprKS8odypiKyhnLWQpKmspLEM9TChFKSxQPUMtMS9DLEk9QysxL0MsTz1TKlAtMipjKEMpLXQsej1TKkEqSS0yKmkoQSktZSxSPXkmJl8qaypkKk0veSxGPSh3KmcqYitrKS8oMiooYit3KmcqaykqKGIrdypnKmspKmspLEI9LS41KkEqUypTKlMsTj1CKlIsaj1CKkYsVT0oVT0yKmIrdyprKihnLWQpKSpVKkMsVj0odypnKmIqaytUKS9VLEg9LXcqZCp5LyhrKlUpLHE9UCpOLTIqVi9DK1MqKFYrVi9FKSxHPVAqai0yKkgvQytTKihIK0gvRSksWT1BKkkqTi0yKlIvKDErTSkrUypJKlIrUypBKihWLVYvRSksVz1BKkkqai0yKkYvKDErTSkrUypJKkYrUypBKihILUgvRSksWD1HKlktVypxO2lmKCFYKWJyZWFrO3ZhciBaPSh6KkctTypXKS9YLEo9KE8qWS16KnEpL1g7YS09WixzPXUoLXgsZih4LHMtSikpfXdoaWxlKChuKFopPnZ8fG4oSik+dikmJi0tbD4wKTtyZXR1cm4gbihuKHMpLXgpPHY/WzAsc106bCYmW2Esc119O3ZhciB3dD1vKDM1Kk0pO2Z1bmN0aW9uIFR0KHQsZSl7dmFyIHI9ZyhlLzIpO3JldHVyblt0Knd0KkwoMS1yKnIpLCgxK3d0KSpyXX1mdW5jdGlvbiBrdCh0LGUpe3ZhciByPWUvMixuPW8ocik7cmV0dXJuWzIqdC9UKm8oZSkqbipuLFQqZyhyKV19ZnVuY3Rpb24gQXQodCl7dmFyIGU9MS10LHI9aSh5LDApWzBdLWkoLXksMClbMF0sbj1MKDIqKGkoMCx4KVsxXS1pKDAsLXgpWzFdKS9yKTtmdW5jdGlvbiBpKHIsbil7dmFyIGk9byhuKSxhPW0obik7cmV0dXJuW2kvKGUrdCppKSpyLGUqbit0KmFdfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1pKHQsZSk7cmV0dXJuW3JbMF0qbixyWzFdL25dfWZ1bmN0aW9uIHModCl7cmV0dXJuIGEoMCx0KVsxXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocixpKXt2YXIgYT1WKHMsaSk7cmV0dXJuW3IvbioodCtlL28oYSkpLGFdfSxhfWZ1bmN0aW9uIE10KHQpe3JldHVyblt0WzBdLzIsUyhnKHRbMV0vMipNKSkqQV19ZnVuY3Rpb24gU3QodCl7cmV0dXJuWzIqdFswXSwyKmkobSh0WzFdKk0pKSpBXX1mdW5jdGlvbiBFdCh0LHIpe3ZhciBpPTIqeS9yLHM9dCp0O2Z1bmN0aW9uIGwocixsKXt2YXIgYz1lLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3KHIsbCksdT1jWzBdLGY9Y1sxXSxoPXUqdStmKmY7aWYoaD5zKXt2YXIgZD1MKGgpLGc9YShmLHUpLGI9aSpwKGcvaSksXz1nLWIsdz10Km8oXyksVD0odCptKF8pLV8qbSh3KSkvKHgtdyksaz1MdChfLFQpLEE9KHktdCkvQ3Qoayx3LHkpO3U9ZDt2YXIgTSxTPTUwO2Rve3UtPU09KHQrQ3Qoayx3LHUpKkEtZCkvKGsodSkqQSl9d2hpbGUobihNKT52JiYtLVM+MCk7Zj1fKm0odSksdTx4JiYoZi09VCoodS14KSk7dmFyIEU9bShiKSxDPW8oYik7Y1swXT11KkMtZipFLGNbMV09dSpFK2YqQ31yZXR1cm4gY31yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24ocixsKXt2YXIgYz1yKnIrbCpsO2lmKGM+cyl7dmFyIHU9TChjKSxmPWEobCxyKSxoPWkqcChmL2kpLGQ9Zi1oO3I9dSpvKGQpLGw9dSptKGQpO2Zvcih2YXIgZz1yLXgsdj1tKHIpLGI9bC92LF89cjx4PzEvMDowLHc9MTA7Oyl7dmFyIFQ9dCptKGIpLGs9dCpvKGIpLEE9bShrKSxNPXgtayxTPShULWIqQSkvTSxFPUx0KGIsUyk7aWYobihfKTwxZS0xMnx8IS0tdylicmVhaztiLT1fPShiKnYtUypnLWwpLyh2LTIqZyooTSooaytiKlQqbyhrKS1BKS1UKihULWIqQSkpLyhNKk0pKX1yPSh1PXQrQ3QoRSxrLHIpKih5LXQpL0N0KEUsayx5KSkqbyhmPWgrYiksbD11Km0oZil9cmV0dXJuIGUuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXcuaW52ZXJ0KHIsbCl9LGx9ZnVuY3Rpb24gTHQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dCpvKHIpO3JldHVybiByPHgmJihuLT1lKSxMKDErbipuKX19ZnVuY3Rpb24gQ3QodCxlLHIpe2Zvcih2YXIgbj0oci1lKS81MCxpPXQoZSkrdChyKSxhPTEsbz1lO2E8NTA7KythKWkrPTIqdChvKz1uKTtyZXR1cm4uNSppKm59ZnVuY3Rpb24gUHQodCxlLHIsaSxhLHMsbCxjKXtmdW5jdGlvbiB1KG4sdSl7aWYoIXUpcmV0dXJuW3Qqbi95LDBdO3ZhciBmPXUqdSxoPXQrZiooZStmKihyK2YqaSkpLHA9dSooYS0xK2YqKHMtYytmKmwpKSxkPShoKmgrcCpwKS8oMipwKSxnPW4qUyhoL2QpL3k7cmV0dXJuW2QqbShnKSx1KigxK2YqYykrZCooMS1vKGcpKV19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8OCYmKGM9MCksdS5pbnZlcnQ9ZnVuY3Rpb24odSxmKXt2YXIgaCxwLGQ9eSp1L3QsZz1mLHg9NTA7ZG97dmFyIGI9ZypnLF89dCtiKihlK2IqKHIrYippKSksdz1nKihhLTErYioocy1jK2IqbCkpLFQ9XypfK3cqdyxrPTIqdyxBPVQvayxNPUEqQSxFPVMoXy9BKS95LEM9ZCpFLFA9XypfLEk9KDIqZStiKig0KnIrNipiKmkpKSpnLE89YStiKigzKnMrNSpiKmwpLHo9KDIqKF8qSSt3KihPLTEpKSprLVQqKDIqKE8tMSkpKS8oayprKSxEPW8oQyksUj1tKEMpLEY9QSpELEI9QSpSLE49ZC95KigxL0woMS1QL00pKSooSSpBLV8qeikvTSxqPUItdSxVPWcqKDErYipjKStBLUYtZixWPXoqUitGKk4sSD1GKkUscT0xK3otKHoqRC1CKk4pLEc9QipFLFk9VipHLXEqSDtpZighWSlicmVhaztkLT1oPShVKlYtaipxKS9ZLGctPXA9KGoqRy1VKkgpL1l9d2hpbGUoKG4oaCk+dnx8bihwKT52KSYmLS14PjApO3JldHVybltkLGddfSx1fVR0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUvKDErd3QpO3JldHVyblt0JiZ0Lyh3dCpMKDEtcipyKSksMippKHIpXX0sa3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlL1QpLG49byhyKSxhPTIqcjtyZXR1cm5bdCpULzIvKG8oYSkqbipuKSxhXX07dmFyIEl0PVB0KDIuODI4NCwtMS42OTg4LC43NTQzMiwtLjE4MDcxLDEuNzYwMDMsLS4zODkxNCwuMDQyNTU1KTt2YXIgT3Q9UHQoMi41ODM4MTksLS44MzU4MjcsLjE3MDM1NCwtLjAzODA5NCwxLjU0MzMxMywtLjQxMTQzNSwuMDgyNzQyKTt2YXIgenQ9UHQoNS82KnksLS42MjYzNiwtLjAzNDQsMCwxLjM0OTMsLS4wNTUyNCwwLC4wNDUpO2Z1bmN0aW9uIER0KHQsZSl7dmFyIHI9dCp0LG49ZSplO3JldHVyblt0KigxLS4xNjIzODgqbikqKC44Ny05NTI0MjZlLTkqcipyKSxlKigxK24vMTIpXX1EdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQsYT1lLG89NTA7ZG97dmFyIHM9YSphO2EtPXI9KGEqKDErcy8xMiktZSkvKDErcy80KX13aGlsZShuKHIpPnYmJi0tbz4wKTtvPTUwLHQvPTEtLjE2MjM4OCpzO2Rve3ZhciBsPShsPWkqaSkqbDtpLT1yPShpKiguODctOTUyNDI2ZS05KmwpLXQpLyguODctLjAwNDc2MjEzKmwpfXdoaWxlKG4ocik+diYmLS1vPjApO3JldHVybltpLGFdfTt2YXIgUnQ9UHQoMi42NTE2LC0uNzY1MzQsLjE5MTIzLC0uMDQ3MDk0LDEuMzYyODksLS4xMzk2NSwuMDMxNzYyKTtmdW5jdGlvbiBGdCh0KXt2YXIgZT10KHgsMClbMF0tdCgteCwwKVswXTtmdW5jdGlvbiByKHIsbil7dmFyIGk9cj4wPy0uNTouNSxhPXQocitpKnksbik7cmV0dXJuIGFbMF0tPWkqZSxhfXJldHVybiB0LmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9cj4wPy0uNTouNSxhPXQuaW52ZXJ0KHIraSplLG4pLG89YVswXS1pKnk7cmV0dXJuIG88LXk/bys9Mip5Om8+eSYmKG8tPTIqeSksYVswXT1vLGF9KSxyfWZ1bmN0aW9uIEJ0KHQsZSl7dmFyIHI9ZCh0KSxpPWQoZSkscz1vKGUpLGw9byh0KSpzLGM9bSh0KSpzLHU9bShpKmUpO3Q9bihhKGMsdSkpLGU9UyhsKSxuKHQteCk+diYmKHQlPXgpO3ZhciBmPWZ1bmN0aW9uKHQsZSl7aWYoZT09PXgpcmV0dXJuWzAsMF07dmFyIHIsaSxhPW0oZSkscz1hKmEsbD1zKnMsYz0xK2wsdT0xKzMqbCxmPTEtbCxoPVMoMS9MKGMpKSxwPWYrcypjKmgsZD0oMS1hKS9wLGc9TChkKSxiPWQqYyxfPUwoYiksdz1nKmY7aWYoMD09PXQpcmV0dXJuWzAsLSh3K3MqXyldO3ZhciBULGs9byhlKSxBPTEvayxNPTIqYSprLEU9KC1wKmstKC0zKnMraCp1KSpNKigxLWEpKS8ocCpwKSxDPS1BKk0sUD0tQSoocypjKkUrZCp1Kk0pLEk9LTIqQSooZiooLjUqRS9nKS0yKnMqZypNKSxPPTQqdC95O2lmKHQ+LjIyMip5fHxlPHkvNCYmdD4uMTc1Knkpe2lmKHI9KHcrcypMKGIqKDErbCktdyp3KSkvKDErbCksdD55LzQpcmV0dXJuW3Iscl07dmFyIHo9cixEPS41KnI7cj0uNSooRCt6KSxpPTUwO2Rve3ZhciBSPUwoYi1yKnIpLEY9ciooSStDKlIpK1AqUyhyL18pLU87aWYoIUYpYnJlYWs7RjwwP0Q9cjp6PXIscj0uNSooRCt6KX13aGlsZShuKHotRCk+diYmLS1pPjApfWVsc2V7cj12LGk9MjU7ZG97dmFyIEI9cipyLE49TChiLUIpLGo9SStDKk4sVT1yKmorUCpTKHIvXyktTyxWPWorKFAtQypCKS9OO3ItPVQ9Tj9VL1Y6MH13aGlsZShuKFQpPnYmJi0taT4wKX1yZXR1cm5bciwtdy1zKkwoYi1yKnIpXX0odD55LzQ/eC10OnQsZSk7cmV0dXJuIHQ+eS80JiYodT1mWzBdLGZbMF09LWZbMV0sZlsxXT0tdSksZlswXSo9cixmWzFdKj0taSxmfWZ1bmN0aW9uIE50KHQsZSl7dmFyIHIsYSxsLGMsdSxmO2lmKGU8dilyZXR1cm5bKGM9bSh0KSktKHI9ZSoodC1jKihhPW8odCkpKS80KSphLGErcipjLDEtZSpjKmMvMix0LXJdO2lmKGU+PTEtdilyZXR1cm4gcj0oMS1lKS80LGw9MS8oYT1QKHQpKSxbKGM9KChmPXMoMiooZj10KSkpLTEpLyhmKzEpKStyKigodT1hKkModCkpLXQpLyhhKmEpLGwtcipjKmwqKHUtdCksbCtyKmMqbCoodSt0KSwyKmkocyh0KSkteCtyKih1LXQpL2FdO3ZhciBoPVsxLDAsMCwwLDAsMCwwLDAsMF0scD1bTChlKSwwLDAsMCwwLDAsMCwwLDBdLGQ9MDtmb3IoYT1MKDEtZSksdT0xO24ocFtkXS9oW2RdKT52JiZkPDg7KXI9aFtkKytdLHBbZF09KHItYSkvMixoW2RdPShyK2EpLzIsYT1MKHIqYSksdSo9MjtsPXUqaFtkXSp0O2Rve2w9KFMoYz1wW2RdKm0oYT1sKS9oW2RdKStsKS8yfXdoaWxlKC0tZCk7cmV0dXJuW20obCksYz1vKGwpLGMvbyhsLWEpLGxdfWZ1bmN0aW9uIGp0KHQsZSl7aWYoIWUpcmV0dXJuIHQ7aWYoMT09PWUpcmV0dXJuIGMoZyh0LzIrYikpO2Zvcih2YXIgcj0xLGE9TCgxLWUpLG89TChlKSxzPTA7bihvKT52O3MrKyl7aWYodCV5KXt2YXIgbD1pKGEqZyh0KS9yKTtsPDAmJihsKz15KSx0Kz1sK35+KHQveSkqeX1lbHNlIHQrPXQ7bz0ocithKS8yLGE9TChyKmEpLG89KChyPW8pLWEpLzJ9cmV0dXJuIHQvKGgoMixzKSpyKX1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPSh3LTEpLyh3KzEpLGw9TCgxLXIqciksdT1qdCh4LGwqbCksZj1jKGcoeS80K24oZSkvMikpLGg9cygtMSpmKS9MKHIpLHA9ZnVuY3Rpb24odCxlKXt2YXIgcj10KnQsbj1lKzEsaT0xLXItZSplO3JldHVyblsuNSooKHQ+PTA/eDoteCktYShpLDIqdCkpLC0uMjUqYyhpKmkrNCpyKSsuNSpjKG4qbityKV19KGgqbygtMSp0KSxoKm0oLTEqdCkpLHY9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4odCksbz1DKG4oZSkpO2lmKGEpe3ZhciBzPTEvbShhKSxsPTEvKGcoYSkqZyhhKSksYz0tKGwrcioobypvKnMqcyktMStyKSx1PSgtYytMKGMqYy00Kigoci0xKSpsKSkpLzI7cmV0dXJuW2p0KGkoMS9MKHUpKSxyKSpkKHQpLGp0KGkoTCgodS9sLTEpL3IpKSwxLXIpKmQoZSldfXJldHVyblswLGp0KGkobyksMS1yKSpkKGUpXX0ocFswXSxwWzFdLGwqbCk7cmV0dXJuWy12WzFdLChlPj0wPzE6LTEpKiguNSp1LXZbMF0pXX1mdW5jdGlvbiBWdCh0KXt2YXIgZT1tKHQpLHI9byh0KSxpPUh0KHQpO2Z1bmN0aW9uIHModCxhKXt2YXIgcz1pKHQsYSk7dD1zWzBdLGE9c1sxXTt2YXIgbD1tKGEpLGM9byhhKSx1PW8odCksZj1FKGUqbCtyKmMqdSksaD1tKGYpLHA9bihoKT52P2YvaDoxO3JldHVybltwKnIqbSh0KSwobih0KT54P3A6LXApKihlKmMtcipsKnUpXX1yZXR1cm4gaS5pbnZlcnQ9SHQoLXQpLHMuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TCh0KnQrcipyKSxzPS1tKG4pLGw9byhuKSxjPW4qbCx1PS1yKnMsZj1uKmUsaD1MKGMqYyt1KnUtZipmKSxwPWEoYypmK3UqaCx1KmYtYypoKSxkPShuPng/LTE6MSkqYSh0KnMsbipvKHApKmwrciptKHApKnMpO3JldHVybiBpLmludmVydChkLHApfSxzfWZ1bmN0aW9uIEh0KHQpe3ZhciBlPW0odCkscj1vKHQpO3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBpPW8obikscz1vKHQpKmksbD1tKHQpKmksYz1tKG4pO3JldHVyblthKGwscypyLWMqZSksUyhjKnIrcyplKV19fUJ0LmludmVydD1mdW5jdGlvbih0LGUpe24odCk+MSYmKHQ9MipkKHQpLXQpLG4oZSk+MSYmKGU9MipkKGUpLWUpO3ZhciByPWQodCksaT1kKGUpLHM9LXIqdCxsPS1pKmUsYz1sL3M8MSx1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MCxpPTEsYT0uNSxzPTUwO2Zvcig7Oyl7dmFyIGw9YSphLGM9TChhKSx1PVMoMS9MKDErbCkpLGY9MS1sK2EqKDErbCkqdSxoPSgxLWMpL2YscD1MKGgpLGQ9aCooMStsKSxtPXAqKDEtbCksZz1MKGQtdCp0KSx2PWUrbSthKmc7aWYobihpLXIpPDFlLTEyfHwwPT0tLXN8fDA9PT12KWJyZWFrO3Y+MD9yPWE6aT1hLGE9LjUqKHIraSl9aWYoIXMpcmV0dXJuIG51bGw7dmFyIHg9UyhjKSxiPW8oeCksXz0xL2Isdz0yKmMqYixUPSgtZipiLSgtMyphK3UqKDErMypsKSkqdyooMS1jKSkvKGYqZik7cmV0dXJuW3kvNCoodCooLTIqXyooLjUqVC9wKigxLWwpLTIqYSpwKncpKy1fKncqZykrLV8qKGEqKDErbCkqVCtoKigxKzMqbCkqdykqUyh0L0woZCkpKSx4XX0oYz9sOnMsYz9zOmwpLGY9dVswXSxoPXVbMV0scD1vKGgpO3JldHVybiBjJiYoZj0teC1mKSxbciooYShtKGYpKnAsLW0oaCkpK3kpLGkqUyhvKGYpKnApXX0sVXQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvLGwsdSxmLGg9KHctMSkvKHcrMSkscD1MKDEtaCpoKSxkPWp0KHgscCpwKSxtPShuPS10LG89cCpwLChyPS41KmQtZSk/KGw9TnQocixvKSxuPyhmPSh1PU50KG4sMS1vKSlbMV0qdVsxXStvKmxbMF0qbFswXSp1WzBdKnVbMF0sW1tsWzBdKnVbMl0vZixsWzFdKmxbMl0qdVswXSp1WzFdL2ZdLFtsWzFdKnVbMV0vZiwtbFswXSpsWzJdKnVbMF0qdVsyXS9mXSxbbFsyXSp1WzFdKnVbMl0vZiwtbypsWzBdKmxbMV0qdVswXS9mXV0pOltbbFswXSwwXSxbbFsxXSwwXSxbbFsyXSwwXV0pOltbMCwodT1OdChuLDEtbykpWzBdL3VbMV1dLFsxL3VbMV0sMF0sW3VbMl0vdVsxXSwwXV0pLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdKmVbMF0rZVsxXSplWzFdO3JldHVyblsodFswXSplWzBdK3RbMV0qZVsxXSkvciwodFsxXSplWzBdLXRbMF0qZVsxXSkvcl19KG1bMF0sbVsxXSk7cmV0dXJuW2EoZ1sxXSxnWzBdKS8tMSwyKmkocygtLjUqYyhoKmdbMF0qZ1swXStoKmdbMV0qZ1sxXSkpKS14XX07dmFyIHF0PVMoMS0xLzMpKkEsR3Q9aHQoMCk7ZnVuY3Rpb24gWXQodCl7dmFyIGU9cXQqTSxyPWx0KHksZSlbMF0tbHQoLXksZSlbMF0saT1HdCgwLGUpWzFdLGE9bHQoMCxlKVsxXSxvPVQtYSxzPWsvdCxjPTQvayxoPWkrbypvKjQvaztmdW5jdGlvbiBwKHAsZCl7dmFyIG0sZz1uKGQpO2lmKGc+ZSl7dmFyIHY9Zih0LTEsdSgwLGwoKHAreSkvcykpKTsobT1sdChwKz15Kih0LTEpL3QtdipzLGcpKVswXT1tWzBdKmsvci1rKih0LTEpLygyKnQpK3Yqay90LG1bMV09aSs0KihtWzFdLWEpKm8vayxkPDAmJihtWzFdPS1tWzFdKX1lbHNlIG09R3QocCxkKTtyZXR1cm4gbVswXSo9YyxtWzFdLz1oLG19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKGUscCl7ZS89Yzt2YXIgZD1uKHAqPWgpO2lmKGQ+aSl7dmFyIG09Zih0LTEsdSgwLGwoKGUreSkvcykpKTtlPShlK3kqKHQtMSkvdC1tKnMpKnIvazt2YXIgZz1sdC5pbnZlcnQoZSwuMjUqKGQtaSkqay9vK2EpO3JldHVybiBnWzBdLT15Kih0LTEpL3QtbSpzLHA8MCYmKGdbMV09LWdbMV0pLGd9cmV0dXJuIEd0LmludmVydChlLHApfSxwfWZ1bmN0aW9uIFd0KHQsZSl7cmV0dXJuW3QsMSZlPzkwLXY6cXRdfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuW3QsMSZlPy05MCt2Oi1xdF19ZnVuY3Rpb24gWnQodCl7cmV0dXJuW3RbMF0qKDEtdiksdFsxXV19ZnVuY3Rpb24gSnQodCl7dmFyIGUscj0xK3QsaT1TKG0oMS9yKSkscz0yKkwoeS8oZT15KzQqaSpyKSksbD0uNSpzKihyK0wodCooMit0KSkpLGM9dCp0LHU9cipyO2Z1bmN0aW9uIGYoZixoKXt2YXIgcCxkLGc9MS1tKGgpO2lmKGcmJmc8Mil7dmFyIHYsYj14LWgsXz0yNTtkb3t2YXIgdz1tKGIpLFQ9byhiKSxrPWkrYSh3LHItVCksQT0xK3UtMipyKlQ7Yi09dj0oYi1jKmktcip3K0Eqay0uNSpnKmUpLygyKnIqdyprKX13aGlsZShuKHYpPjFlLTEyJiYtLV8+MCk7cD1zKkwoQSksZD1mKmsveX1lbHNlIHA9cyoodCtnKSxkPWYqaS95O3JldHVybltwKm0oZCksbC1wKm8oZCldfXJldHVybiBmLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBvPXQqdCsobi09bCkqbixmPSgxK3Utby8ocypzKSkvKDIqciksaD1FKGYpLHA9bShoKSxkPWkrYShwLHItZik7cmV0dXJuW1ModC9MKG8pKSp5L2QsUygxLTIqKGgtYyppLXIqcCsoMSt1LTIqcipmKSpkKS9lKV19LGZ9ZnVuY3Rpb24gS3QodCxlKXtyZXR1cm4gZT4tLjcxMDk4ODk1OTYyMDc1Njc/KCh0PVcodCxlKSlbMV0rPS4wNTI4MDM1Mjc0NTQyLHQpOlEodCxlKX1mdW5jdGlvbiBRdCh0LGUpe3JldHVybiBuKGUpPi43MTA5ODg5NTk2MjA3NTY3PygodD1XKHQsZSkpWzFdLT1lPjA/LjA1MjgwMzUyNzQ1NDI6LS4wNTI4MDM1Mjc0NTQyLHQpOlEodCxlKX1mdW5jdGlvbiAkdCh0LGUscixuKXt2YXIgaT1MKDQqeS8oMipyKygxK3QtZS8yKSptKDIqcikrKHQrZSkvMiptKDQqcikrZS8yKm0oNipyKSkpLGE9TChuKm0ocikqTCgoMSt0Km8oMipyKStlKm8oNCpyKSkvKDErdCtlKSkpLHM9cipjKDEpO2Z1bmN0aW9uIGwocil7cmV0dXJuIEwoMSt0Km8oMipyKStlKm8oNCpyKSl9ZnVuY3Rpb24gYyhuKXt2YXIgaT1uKnI7cmV0dXJuKDIqaSsoMSt0LWUvMikqbSgyKmkpKyh0K2UpLzIqbSg0KmkpK2UvMiptKDYqaSkpL3J9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbCh0KSptKHQpfXZhciBmPWZ1bmN0aW9uKHQsZSl7dmFyIG49cipWKGMscyptKGUpL3IsZS95KTtpc05hTihuKSYmKG49cipkKGUpKTt2YXIgdT1pKmwobik7cmV0dXJuW3UqYSp0L3kqbyhuKSx1L2EqbShuKV19O3JldHVybiBmLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPVYodSxlKmEvaSk7cmV0dXJuW3QqeS8obyhuKSppKmEqbChuKSksUyhyKmMobi9yKS9zKV19LDA9PT1yJiYoaT1MKG4veSksKGY9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCppLG0oZSkvaV19KS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9pLFMoZSppKV19KSxmfWZ1bmN0aW9uIHRlKHQsZSxyLG4saSl7dm9pZCAwPT09biYmKG49MWUtOCksdm9pZCAwPT09aSYmKGk9MjApO3ZhciBhPXQoZSksbz10KC41KihlK3IpKSxzPXQocik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSxhLG8scyxsLGMsdSxmKXtpZihmLm5hbkVuY291bnRlcmVkKXJldHVybiBOYU47dmFyIGgscCxkLG0sZyx2LHkseCxiLF87aWYocD1lKHIrLjI1KihoPW4tcikpLGQ9ZShuLS4yNSpoKSxpc05hTihwKSlmLm5hbkVuY291bnRlcmVkPSEwO2Vsc2V7aWYoIWlzTmFOKGQpKXJldHVybiBfPSgodj0obT1oKihpKzQqcCthKS8xMikrKGc9aCooYSs0KmQrbykvMTIpKS1zKS8xNSx1PmM/KGYubWF4RGVwdGhDb3VudCsrLHYrXyk6TWF0aC5hYnMoXyk8bD92K186KHg9dChlLHIseT1yKy41KmgsaSxwLGEsbSwuNSpsLGMsdSsxLGYpLGlzTmFOKHgpPyhmLm5hbkVuY291bnRlcmVkPSEwLE5hTik6KGI9dChlLHksbixhLGQsbyxnLC41KmwsYyx1KzEsZiksaXNOYU4oYik/KGYubmFuRW5jb3VudGVyZWQ9ITAsTmFOKTp4K2IpKTtmLm5hbkVuY291bnRlcmVkPSEwfX0odCxlLHIsYSxvLHMsKGErNCpvK3MpKihyLWUpLzYsbixpLDEse21heERlcHRoQ291bnQ6MCxuYW5FbmNvdW50ZXJlZDohMX0pfWZ1bmN0aW9uIGVlKHQsZSxyKXtmdW5jdGlvbiBpKHIpe3JldHVybiB0KygxLXQpKmgoMS1oKHIsZSksMS9lKX1mdW5jdGlvbiBhKHQpe3JldHVybiB0ZShpLDAsdCwxZS00KX1mb3IodmFyIG89MS9hKDEpLHM9MWUzLGw9KDErMWUtOCkqbyxjPVtdLHU9MDt1PD1zO3UrKyljLnB1c2goYSh1L3MpKmwpO2Z1bmN0aW9uIGYodCl7dmFyIGU9MCxyPXMsbj01MDA7ZG97Y1tuXT50P3I9bjplPW4sbj1lK3I+PjF9d2hpbGUobj5lKTt2YXIgaT1jW24rMV0tY1tuXTtyZXR1cm4gaSYmKGk9KHQtY1tuKzFdKS9pKSwobisxK2kpL3N9dmFyIHA9MipmKDEpL3kqby9yLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1mKG4obShlKSkpLGE9aShyKSp0O3JldHVybiByLz1wLFthLGU+PTA/cjotcl19O3JldHVybiBnLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBuKGUqPXApPDEmJihyPWQoZSkqUyhhKG4oZSkpKm8pKSxbdC9pKG4oZSkpLHJdfSxnfWZ1bmN0aW9uIHJlKHQsZSl7cmV0dXJuIG4odFswXS1lWzBdKTx2JiZuKHRbMV0tZVsxXSk8dn1mdW5jdGlvbiBuZSh0LGUpe2Zvcih2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoLHM9dFswXSxsPVtdOysrYTxvOyl7bj0oKHI9dFthXSlbMF0tc1swXSkvZSxpPShyWzFdLXNbMV0pL2U7Zm9yKHZhciBjPTA7YzxlOysrYylsLnB1c2goW3NbMF0rYypuLHNbMV0rYyppXSk7cz1yfXJldHVybiBsLnB1c2gociksbH1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuLGksYSxvLHMsbCxjPVtdLHU9dFswXS5sZW5ndGg7Zm9yKGw9MDtsPHU7KytsKW49KGU9dFswXVtsXSlbMF1bMF0saT1lWzBdWzFdLGE9ZVsxXVsxXSxvPWVbMl1bMF0scz1lWzJdWzFdLGMucHVzaChuZShbW24rdixpK3ZdLFtuK3YsYS12XSxbby12LGEtdl0sW28tdixzK3ZdXSwzMCkpO2ZvcihsPXRbMV0ubGVuZ3RoLTE7bD49MDstLWwpbj0oZT10WzFdW2xdKVswXVswXSxpPWVbMF1bMV0sYT1lWzFdWzFdLG89ZVsyXVswXSxzPWVbMl1bMV0sYy5wdXNoKG5lKFtbby12LHMtdl0sW28tdixhK3ZdLFtuK3YsYSt2XSxbbit2LGktdl1dLDMwKSk7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltyLm1lcmdlKGMpXX19ZnVuY3Rpb24gYWUodCxyLG4pe3ZhciBpLGE7ZnVuY3Rpb24gbyhlLG4pe2Zvcih2YXIgaT1uPDA/LTE6MSxhPXJbKyhuPDApXSxvPTAscz1hLmxlbmd0aC0xO288cyYmZT5hW29dWzJdWzBdOysrbyk7dmFyIGw9dChlLWFbb11bMV1bMF0sbik7cmV0dXJuIGxbMF0rPXQoYVtvXVsxXVswXSxpKm4+aSphW29dWzBdWzFdP2Fbb11bMF1bMV06bilbMF0sbH1uP28uaW52ZXJ0PW4obyk6dC5pbnZlcnQmJihvLmludmVydD1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT1hWysobjwwKV0scz1yWysobjwwKV0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbCl7dmFyIHU9aVtsXTtpZih1WzBdWzBdPD1lJiZlPHVbMV1bMF0mJnVbMF1bMV08PW4mJm48dVsxXVsxXSl7dmFyIGY9dC5pbnZlcnQoZS10KHNbbF1bMV1bMF0sMClbMF0sbik7cmV0dXJuIGZbMF0rPXNbbF1bMV1bMF0scmUobyhmWzBdLGZbMV0pLFtlLG5dKT9mOm51bGx9fX0pO3ZhciBzPWUuZ2VvUHJvamVjdGlvbihvKSxsPXMuc3RyZWFtO3JldHVybiBzLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgcj1zLnJvdGF0ZSgpLG49bCh0KSxhPShzLnJvdGF0ZShbMCwwXSksbCh0KSk7cmV0dXJuIHMucm90YXRlKHIpLG4uc3BoZXJlPWZ1bmN0aW9uKCl7ZS5nZW9TdHJlYW0oaSxhKX0sbn0scy5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1pZShlKSxyPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltbdFswXVswXSpNLHRbMF1bMV0qTV0sW3RbMV1bMF0qTSx0WzFdWzFdKk1dLFt0WzJdWzBdKk0sdFsyXVsxXSpNXV19KSl9KSksYT1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXt2YXIgcixuPXQoZVswXVswXSxlWzBdWzFdKVswXSxpPXQoZVsyXVswXSxlWzJdWzFdKVswXSxhPXQoZVsxXVswXSxlWzBdWzFdKVsxXSxvPXQoZVsxXVswXSxlWzFdWzFdKVsxXTtyZXR1cm4gYT5vJiYocj1hLGE9byxvPXIpLFtbbixhXSxbaSxvXV19KSl9KSkscyk6ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKkEsdFswXVsxXSpBXSxbdFsxXVswXSpBLHRbMV1bMV0qQV0sW3RbMl1bMF0qQSx0WzJdWzFdKkFdXX0pKX0pKX0sbnVsbCE9ciYmcy5sb2JlcyhyKSxzfUt0LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybiBlPi0uNzEwOTg4OTU5NjIwNzU2Nz9XLmludmVydCh0LGUtLjA1MjgwMzUyNzQ1NDIpOlEuaW52ZXJ0KHQsZSl9LFF0LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUpPi43MTA5ODg5NTk2MjA3NTY3P1cuaW52ZXJ0KHQsZSsoZT4wPy4wNTI4MDM1Mjc0NTQyOi0uMDUyODAzNTI3NDU0MikpOlEuaW52ZXJ0KHQsZSl9O3ZhciBvZT1bW1tbLTE4MCwwXSxbLTEwMCw5MF0sWy00MCwwXV0sW1stNDAsMF0sWzMwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTE2MCwtOTBdLFstMTAwLDBdXSxbWy0xMDAsMF0sWy02MCwtOTBdLFstMjAsMF1dLFtbLTIwLDBdLFsyMCwtOTBdLFs4MCwwXV0sW1s4MCwwXSxbMTQwLC05MF0sWzE4MCwwXV1dXTt2YXIgc2U9W1tbWy0xODAsMF0sWy0xMDAsOTBdLFstNDAsMF1dLFtbLTQwLDBdLFszMCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy0xNjAsLTkwXSxbLTEwMCwwXV0sW1stMTAwLDBdLFstNjAsLTkwXSxbLTIwLDBdXSxbWy0yMCwwXSxbMjAsLTkwXSxbODAsMF1dLFtbODAsMF0sWzE0MCwtOTBdLFsxODAsMF1dXV07dmFyIGxlPVtbW1stMTgwLDBdLFstMTAwLDkwXSxbLTQwLDBdXSxbWy00MCwwXSxbMzAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstMTYwLC05MF0sWy0xMDAsMF1dLFtbLTEwMCwwXSxbLTYwLC05MF0sWy0yMCwwXV0sW1stMjAsMF0sWzIwLC05MF0sWzgwLDBdXSxbWzgwLDBdLFsxNDAsLTkwXSxbMTgwLDBdXV1dO3ZhciBjZT1bW1tbLTE4MCwwXSxbLTkwLDkwXSxbMCwwXV0sW1swLDBdLFs5MCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy05MCwtOTBdLFswLDBdXSxbWzAsMF0sWzkwLC05MF0sWzE4MCwwXV1dXTt2YXIgdWU9W1tbWy0xODAsMzVdLFstMzAsOTBdLFswLDM1XV0sW1swLDM1XSxbMzAsOTBdLFsxODAsMzVdXV0sW1tbLTE4MCwtMTBdLFstMTAyLC05MF0sWy02NSwtMTBdXSxbWy02NSwtMTBdLFs1LC05MF0sWzc3LC0xMF1dLFtbNzcsLTEwXSxbMTAzLC05MF0sWzE4MCwtMTBdXV1dO3ZhciBmZT1bW1tbLTE4MCwwXSxbLTExMCw5MF0sWy00MCwwXV0sW1stNDAsMF0sWzAsOTBdLFs0MCwwXV0sW1s0MCwwXSxbMTEwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTExMCwtOTBdLFstNDAsMF1dLFtbLTQwLDBdLFswLC05MF0sWzQwLDBdXSxbWzQwLDBdLFsxMTAsLTkwXSxbMTgwLDBdXV1dO2Z1bmN0aW9uIGhlKHQsZSl7cmV0dXJuWzMvayp0KkwoeSp5LzMtZSplKSxlXX1mdW5jdGlvbiBwZSh0KXtmdW5jdGlvbiBlKGUscil7aWYobihuKHIpLXgpPHYpcmV0dXJuWzAscjwwPy0yOjJdO3ZhciBpPW0ociksYT1oKCgxK2kpLygxLWkpLHQvMikscz0uNSooYSsxL2EpK28oZSo9dCk7cmV0dXJuWzIqbShlKS9zLChhLTEvYSkvc119cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7dmFyIGk9bihyKTtpZihuKGktMik8dilyZXR1cm4gZT9udWxsOlswLGQocikqeF07aWYoaT4yKXJldHVybiBudWxsO3ZhciBvPShlLz0yKSplLHM9KHIvPTIpKnIsbD0yKnIvKDErbytzKTtyZXR1cm4gbD1oKCgxK2wpLygxLWwpLDEvdCksW2EoMiplLDEtby1zKS90LFMoKGwtMSkvKGwrMSkpXX0sZX1oZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bay8zKnQvTCh5KnkvMy1lKmUpLGVdfTt2YXIgZGU9eS93O2Z1bmN0aW9uIG1lKHQsZSl7cmV0dXJuW3QqKDErTChvKGUpKSkvMixlLyhvKGUvMikqbyh0LzYpKV19ZnVuY3Rpb24gZ2UodCxlKXt2YXIgcj10KnQsbj1lKmU7cmV0dXJuW3QqKC45NzU1MzQrbiooLS4wMTQzMDU5KnItLjExOTE2MSstLjA1NDcwMDkqbikpLGUqKDEuMDAzODQrciooLjA4MDI4OTQrLS4wMjg1NSpuKzE5OTAyNWUtOSpyKStuKiguMDk5ODkwOSstLjA0OTEwMzIqbikpXX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVyblttKHQpL28oZSksZyhlKSpvKHQpXX1mdW5jdGlvbiB5ZSh0KXt2YXIgZT1vKHQpLHI9ZyhiK3QvMik7ZnVuY3Rpb24gaShpLGEpe3ZhciBvPWEtdCxzPW4obyk8dj9pKmU6bihzPWIrYS8yKTx2fHxuKG4ocykteCk8dj8wOmkqby9jKGcocykvcik7cmV0dXJuW3Msb119cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKGksYSl7dmFyIG8scz1hK3Q7cmV0dXJuW24oYSk8dj9pL2U6bihvPWIrcy8yKTx2fHxuKG4obykteCk8dj8wOmkqYyhnKG8pL3IpL2Esc119LGl9ZnVuY3Rpb24geGUodCxlKXtyZXR1cm5bdCwxLjI1KmMoZyhiKy40KmUpKV19ZnVuY3Rpb24gYmUodCl7dmFyIGU9dC5sZW5ndGgtMTtmdW5jdGlvbiByKHIsbil7Zm9yKHZhciBpLGE9byhuKSxzPTIvKDErYSpvKHIpKSxsPXMqYSptKHIpLGM9cyptKG4pLHU9ZSxmPXRbdV0saD1mWzBdLHA9ZlsxXTstLXU+PTA7KWg9KGY9dFt1XSlbMF0rbCooaT1oKS1jKnAscD1mWzFdK2wqcCtjKmk7cmV0dXJuW2g9bCooaT1oKS1jKnAscD1sKnArYyppXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixzKXt2YXIgbD0yMCxjPXIsdT1zO2Rve2Zvcih2YXIgZixoPWUscD10W2hdLGQ9cFswXSxnPXBbMV0sdj0wLHk9MDstLWg+PTA7KXY9ZCtjKihmPXYpLXUqeSx5PWcrYyp5K3UqZixkPShwPXRbaF0pWzBdK2MqKGY9ZCktdSpnLGc9cFsxXStjKmcrdSpmO3ZhciB4LGIsXz0odj1kK2MqKGY9diktdSp5KSp2Kyh5PWcrYyp5K3UqZikqeTtjLT14PSgoZD1jKihmPWQpLXUqZy1yKSp2KyhnPWMqZyt1KmYtcykqeSkvXyx1LT1iPShnKnYtZCp5KS9ffXdoaWxlKG4oeCkrbihiKT4xZS0xMiYmLS1sPjApO2lmKGwpe3ZhciB3PUwoYypjK3UqdSksVD0yKmkoLjUqdyksaz1tKFQpO3JldHVyblthKGMqayx3Km8oVCkpLHc/Uyh1Kmsvdyk6MF19fSxyfW1lLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPW4odCksaT1uKGUpLGE9dixzPXg7aTxkZT9zKj1pL2RlOmErPTYqRShkZS9pKTtmb3IodmFyIGw9MDtsPDI1O2wrKyl7dmFyIGM9bShzKSx1PUwobyhzKSksZj1tKHMvMiksaD1vKHMvMikscD1tKGEvNiksZD1vKGEvNiksZz0uNSphKigxK3UpLXIseT1zLyhoKmQpLWksYj11Py0uMjUqYSpjL3U6MCxfPS41KigxK3UpLHc9KDErLjUqcypmL2gpLyhoKmQpLFQ9cy9oKihwLzYpLyhkKmQpLGs9YipULXcqXyxBPShnKlQteSpfKS9rLE09KHkqYi1nKncpL2s7aWYocy09QSxhLT1NLG4oQSk8diYmbihNKTx2KWJyZWFrfXJldHVyblt0PDA/LWE6YSxlPDA/LXM6c119LGdlLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWQodCkqeSxpPWUvMixhPTUwO2Rve3ZhciBvPXIqcixzPWkqaSxsPXIqaSxjPXIqKC45NzU1MzQrcyooLS4wMTQzMDU5Km8tLjExOTE2MSstLjA1NDcwMDkqcykpLXQsdT1pKigxLjAwMzg0K28qKC4wODAyODk0Ky0uMDI4NTUqcysxOTkwMjVlLTkqbykrcyooLjA5OTg5MDkrLS4wNDkxMDMyKnMpKS1lLGY9Ljk3NTUzNC1zKiguMTE5MTYxKzMqbyouMDE0MzA1OSsuMDU0NzAwOSpzKSxoPS1sKiguMjM4MzIyKy4yMTg4MDM2KnMrLjAyODYxMTgqbykscD1sKiguMTYwNTc4OCs3OTYxZS03Km8rLS4wNTcxKnMpLG09MS4wMDM4NCtvKiguMDgwMjg5NCsxOTkwMjVlLTkqbykrcyooMyooLjA5OTg5MDktLjAyODU1Km8pLS4yNDU1MTYqcyksZz1oKnAtbSpmLHg9KHUqaC1jKm0pL2csYj0oYypwLXUqZikvZztyLT14LGktPWJ9d2hpbGUoKG4oeCk+dnx8bihiKT52KSYmLS1hPjApO3JldHVybiBhJiZbcixpXX0sdmUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCp0LG49ZSplKzEsaT1yK24sYT10P18qTCgoaS1MKGkqaS00KnIpKS9yKToxL0wobik7cmV0dXJuW1ModCphKSxkKGUpKkUoYSldfSx4ZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyLjUqaShzKC44KmUpKS0uNjI1KnldfTt2YXIgX2U9W1suOTk3MjUyMywwXSxbLjAwNTI1MTMsLS4wMDQxMTc1XSxbLjAwNzQ2MDYsLjAwNDgxMjVdLFstLjAxNTM3ODMsLS4xOTY4MjUzXSxbLjA2MzY4NzEsLS4xNDA4MDI3XSxbLjM2NjA5NzYsLS4yOTM3MzgyXV0sd2U9W1suOTg4NzksMF0sWzAsMF0sWy0uMDUwOTA5LDBdLFswLDBdLFsuMDc1NTI4LDBdXSxUZT1bWy45ODQyOTksMF0sWy4wMjExNjQyLC4wMDM3NjA4XSxbLS4xMDM2MDE4LC0uMDU3NTEwMl0sWy0uMDMyOTA5NSwtLjAzMjAxMTldLFsuMDQ5OTQ3MSwuMTIyMzMzNV0sWy4wMjYwNDYsLjA4OTk4MDVdLFs3Mzg4ZS03LC0uMTQzNTc5Ml0sWy4wMDc1ODQ4LC0uMTMzNDEwOF0sWy0uMDIxNjQ3MywuMDc3NjY0NV0sWy0uMDIyNTE2MSwuMDg1MzY3M11dLGtlPVtbLjkyNDUsMF0sWzAsMF0sWy4wMTk0MywwXV0sQWU9W1suNzIxMzE2LDBdLFswLDBdLFstLjAwODgxNjI1LC0uMDA2MTczMjVdXTtmdW5jdGlvbiBNZSh0LHIpe3ZhciBuPWUuZ2VvUHJvamVjdGlvbihiZSh0KSkucm90YXRlKHIpLmNsaXBBbmdsZSg5MCksaT1lLmdlb1JvdGF0aW9uKHIpLGE9bi5jZW50ZXI7cmV0dXJuIGRlbGV0ZSBuLnJvdGF0ZSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKGkodCkpOmkuaW52ZXJ0KGEoKSl9LG59dmFyIFNlPUwoNiksRWU9TCg3KTtmdW5jdGlvbiBMZSh0LGUpe3ZhciByPVMoNyptKGUpLygzKlNlKSk7cmV0dXJuW1NlKnQqKDIqbygyKnIvMyktMSkvRWUsOSptKHIvMykvRWVdfWZ1bmN0aW9uIENlKHQsZSl7Zm9yKHZhciByLGk9KDErXykqbShlKSxhPWUscz0wO3M8MjUmJihhLT1yPShtKGEvMikrbShhKS1pKS8oLjUqbyhhLzIpK28oYSkpLCEobihyKTx2KSk7cysrKTtyZXR1cm5bdCooMSsyKm8oYSkvbyhhLzIpKS8oMyp3KSwyKkwoMykqbShhLzIpL0woMit3KV19ZnVuY3Rpb24gUGUodCxlKXtmb3IodmFyIHIsaT1MKDYvKDQreSkpLGE9KDEreS80KSptKGUpLHM9ZS8yLGw9MDtsPDI1JiYocy09cj0ocy8yK20ocyktYSkvKC41K28ocykpLCEobihyKTx2KSk7bCsrKTtyZXR1cm5baSooLjUrbyhzKSkqdC8xLjUsaSpzXX1mdW5jdGlvbiBJZSh0LGUpe3ZhciByPWUqZSxuPXIqcixpPXIqbjtyZXR1cm5bdCooLjg0NzE5LS4xMzA2MypyK2kqaSooLjA1NDk0KnItLjA0NTE1LS4wMjMyNipuKy4wMDMzMSppKSksZSooMS4wMTE4MytuKm4qKC4wMTkyNipyLS4wMjYyNS0uMDAzOTYqbikpXX1mdW5jdGlvbiBPZSh0LGUpe3JldHVyblt0KigxK28oZSkpLzIsMiooZS1nKGUvMikpXX1MZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0zKlMoZSpFZS85KTtyZXR1cm5bdCpFZS8oU2UqKDIqbygyKnIvMyktMSkpLFMoMyptKHIpKlNlLzcpXX0sQ2UuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpMKDIrdykvKDIqTCgzKSksbj0yKlMocik7cmV0dXJuWzMqdyp0LygxKzIqbyhuKS9vKG4vMikpLFMoKHIrbShuKSkvKDErXykpXX0sUGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TCg2Lyg0K3kpKSxpPWUvcjtyZXR1cm4gbihuKGkpLXgpPHYmJihpPWk8MD8teDp4KSxbMS41KnQvKHIqKC41K28oaSkpKSxTKChpLzIrbShpKSkvKDEreS80KSldfSxJZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPWUsbD0yNTtkb3tzLT1yPShzKigxLjAxMTgzKyhhPShpPXMqcykqaSkqYSooLjAxOTI2KmktLjAyNjI1LS4wMDM5NiphKSktZSkvKDEuMDExODMrYSphKiguMjExODYqaS0uMjM2MjUrLS4wNTE0OCphKSl9d2hpbGUobihyKT4xZS0xMiYmLS1sPjApO3JldHVyblt0LyguODQ3MTktLjEzMDYzKihpPXMqcykrKG89aSooYT1pKmkpKSpvKiguMDU0OTQqaS0uMDQ1MTUtLjAyMzI2KmErLjAwMzMxKm8pKSxzXX0sT2UuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUvMixpPTAsYT0xLzA7aTwxMCYmbihhKT52OysraSl7dmFyIHM9byhlLzIpO2UtPWE9KGUtZyhlLzIpLXIpLygxLS41LyhzKnMpKX1yZXR1cm5bMip0LygxK28oZSkpLGVdfTt2YXIgemU9W1tbWy0xODAsMF0sWy05MCw5MF0sWzAsMF1dLFtbMCwwXSxbOTAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstOTAsLTkwXSxbMCwwXV0sW1swLDBdLFs5MCwtOTBdLFsxODAsMF1dXV07ZnVuY3Rpb24gRGUodCxlKXt2YXIgcj1tKGUpLGk9byhlKSxhPWQodCk7aWYoMD09PXR8fG4oZSk9PT14KXJldHVyblswLGVdO2lmKDA9PT1lKXJldHVyblt0LDBdO2lmKG4odCk9PT14KXJldHVyblt0KmkseCpyXTt2YXIgcz15LygyKnQpLTIqdC95LGw9MiplL3ksYz0oMS1sKmwpLyhyLWwpLHU9cypzLGY9YypjLGg9MSt1L2YscD0xK2YvdSxnPShzKnIvYy1zLzIpL2gsdj0oZipyL3UrYy8yKS9wLGI9dip2LShmKnIqci91K2Mqci0xKS9wO3JldHVyblt4KihnK0woZypnK2kqaS9oKSphKSx4Kih2K0woYjwwPzA6YikqZCgtZSpzKSphKV19RGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQvPXgpKnQsbj1yKyhlLz14KSplLGk9eSp5O3JldHVyblt0PyhuLTErTCgoMS1uKSooMS1uKSs0KnIpKS8oMip0KSp4OjAsVigoZnVuY3Rpb24odCl7cmV0dXJuIG4qKHkqbSh0KS0yKnQpKnkrNCp0KnQqKGUtbSh0KSkrMip5KnQtaSplfSksMCldfTtmdW5jdGlvbiBSZSh0LGUpe3ZhciByPWUqZTtyZXR1cm5bdCxlKigxLjAxNDgrcipyKiguMjMxODUrciooLjAyNDA2KnItLjE0NDk5KSkpXX1mdW5jdGlvbiBGZSh0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcj1nKGUpLGk9dCptKGUpO3JldHVyblttKGkpL3IsZSsoMS1vKGkpKS9yXX1mdW5jdGlvbiBCZSh0LGUpe3ZhciByPWplKHRbMV0sdFswXSksbj1qZShlWzFdLGVbMF0pLGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0WzBdKmVbMV0tdFsxXSplWzBdLHRbMF0qZVswXSt0WzFdKmVbMV0pfShyLG4pLHM9VWUocikvVWUobik7cmV0dXJuIE5lKFsxLDAsdFswXVswXSwwLDEsdFswXVsxXV0sTmUoW3MsMCwwLDAscywwXSxOZShbbyhpKSxtKGkpLDAsLW0oaSksbyhpKSwwXSxbMSwwLC1lWzBdWzBdLDAsMSwtZVswXVsxXV0pKSl9ZnVuY3Rpb24gTmUodCxlKXtyZXR1cm5bdFswXSplWzBdK3RbMV0qZVszXSx0WzBdKmVbMV0rdFsxXSplWzRdLHRbMF0qZVsyXSt0WzFdKmVbNV0rdFsyXSx0WzNdKmVbMF0rdFs0XSplWzNdLHRbM10qZVsxXSt0WzRdKmVbNF0sdFszXSplWzJdK3RbNF0qZVs1XSt0WzVdXX1mdW5jdGlvbiBqZSh0LGUpe3JldHVyblt0WzBdLWVbMF0sdFsxXS1lWzFdXX1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gTCh0WzBdKnRbMF0rdFsxXSp0WzFdKX1mdW5jdGlvbiBWZSh0LHIsaSl7ZnVuY3Rpb24gYSh0LGUpe3ZhciBuLGk9cih0LGUpLGE9aS5wcm9qZWN0KFt0KkEsZSpBXSk7cmV0dXJuKG49aS50cmFuc2Zvcm0pP1tuWzBdKmFbMF0rblsxXSphWzFdK25bMl0sLShuWzNdKmFbMF0rbls0XSphWzFdK25bNV0pXTooYVsxXT0tYVsxXSxhKX0hZnVuY3Rpb24gdChlLHIpe2lmKGUuZWRnZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9W10sbj10W2UtMV0saT0wO2k8ZTsrK2kpci5wdXNoKFtuLG49dFtpXV0pO3JldHVybiByfShlLmZhY2UpLHIuZmFjZSl7dmFyIG49ZS5zaGFyZWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPXQubGVuZ3RoLGE9bnVsbCxvPTA7bzxpOysrbyl7cj10W29dO2Zvcih2YXIgcz1lLmxlbmd0aDstLXM+PTA7KWlmKG49ZVtzXSxyWzBdPT09blswXSYmclsxXT09PW5bMV0pe2lmKGEpcmV0dXJuW2Escl07YT1yfX19KGUuZmFjZSxyLmZhY2UpLGk9QmUobi5tYXAoci5wcm9qZWN0KSxuLm1hcChlLnByb2plY3QpKTtlLnRyYW5zZm9ybT1yLnRyYW5zZm9ybT9OZShyLnRyYW5zZm9ybSxpKTppO2Zvcih2YXIgYT1yLmVkZ2VzLG89MCxzPWEubGVuZ3RoO288czsrK28pSGUoblswXSxhW29dWzFdKSYmSGUoblsxXSxhW29dWzBdKSYmKGFbb109ZSksSGUoblswXSxhW29dWzBdKSYmSGUoblsxXSxhW29dWzFdKSYmKGFbb109ZSk7Zm9yKGE9ZS5lZGdlcyxvPTAscz1hLmxlbmd0aDtvPHM7KytvKUhlKG5bMF0sYVtvXVswXSkmJkhlKG5bMV0sYVtvXVsxXSkmJihhW29dPXIpLEhlKG5bMF0sYVtvXVsxXSkmJkhlKG5bMV0sYVtvXVswXSkmJihhW29dPXIpfWVsc2UgZS50cmFuc2Zvcm09ci50cmFuc2Zvcm07ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihyKXt0KHIsZSl9KSk7cmV0dXJuIGV9KHQse3RyYW5zZm9ybTpudWxsfSkscWUodCkmJihhLmludmVydD1mdW5jdGlvbihlLG4pe3ZhciBpPWZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1lLnByb2plY3QuaW52ZXJ0LGE9ZS50cmFuc2Zvcm0sbz1uO2EmJihhPWZ1bmN0aW9uKHQpe3ZhciBlPTEvKHRbMF0qdFs0XS10WzFdKnRbM10pO3JldHVybltlKnRbNF0sLWUqdFsxXSxlKih0WzFdKnRbNV0tdFsyXSp0WzRdKSwtZSp0WzNdLGUqdFswXSxlKih0WzJdKnRbM10tdFswXSp0WzVdKV19KGEpLG89W2FbMF0qb1swXSthWzFdKm9bMV0rYVsyXSxhWzNdKm9bMF0rYVs0XSpvWzFdK2FbNV1dKTtpZihpJiZlPT09ZnVuY3Rpb24odCl7cmV0dXJuIHIodFswXSpNLHRbMV0qTSl9KHM9aShvKSkpcmV0dXJuIHM7Zm9yKHZhciBzLGw9ZS5jaGlsZHJlbixjPTAsdT1sJiZsLmxlbmd0aDtjPHU7KytjKWlmKHM9dChsW2NdLG4pKXJldHVybiBzfSh0LFtlLC1uXSk7cmV0dXJuIGkmJihpWzBdKj1NLGlbMV0qPU0saSl9KTt2YXIgbz1lLmdlb1Byb2plY3Rpb24oYSkscz1vLnN0cmVhbTtyZXR1cm4gby5zdHJlYW09ZnVuY3Rpb24ocil7dmFyIGk9by5yb3RhdGUoKSxhPXMociksbD0oby5yb3RhdGUoWzAsMF0pLHMocikpO3JldHVybiBvLnJvdGF0ZShpKSxhLnNwaGVyZT1mdW5jdGlvbigpe2wucG9seWdvblN0YXJ0KCksbC5saW5lU3RhcnQoKSxmdW5jdGlvbiB0KHIsaSxhKXt2YXIgbyxzLGw9aS5lZGdlcyxjPWwubGVuZ3RoLHU9e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOmkuZmFjZX0sZj1pLmZhY2UuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gOTAhPT1uKHRbMV0pfSkpLGg9ZS5nZW9Cb3VuZHMoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOmZ9KSxwPSExLGQ9LTEsbT1oWzFdWzBdLWhbMF1bMF0sZz0xODA9PT1tfHwzNjA9PT1tP1soaFswXVswXStoWzFdWzBdKS8yLChoWzBdWzFdK2hbMV1bMV0pLzJdOmUuZ2VvQ2VudHJvaWQodSk7aWYoYSlmb3IoOysrZDxjJiZsW2RdIT09YTspOysrZDtmb3IodmFyIHk9MDt5PGM7Kyt5KXM9bFsoeStkKSVjXSxBcnJheS5pc0FycmF5KHMpPyhwfHwoci5wb2ludCgobz1lLmdlb0ludGVycG9sYXRlKHNbMF0sZykodikpWzBdLG9bMV0pLHA9ITApLHIucG9pbnQoKG89ZS5nZW9JbnRlcnBvbGF0ZShzWzFdLGcpKHYpKVswXSxvWzFdKSk6KHA9ITEscyE9PWEmJnQocixzLGkpKX0obCx0KSxsLmxpbmVFbmQoKSxsLnBvbHlnb25FbmQoKX0sYX0sby5hbmdsZShudWxsPT1pPy0zMDppKkEpfWZ1bmN0aW9uIEhlKHQsZSl7cmV0dXJuIHQmJmUmJnRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gdC5wcm9qZWN0LmludmVydHx8dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb21lKHFlKX1SZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtlPjEuNzkwODU3MTgzP2U9MS43OTA4NTcxODM6ZTwtMS43OTA4NTcxODMmJihlPS0xLjc5MDg1NzE4Myk7dmFyIHIsaT1lO2Rve3ZhciBhPWkqaTtpLT1yPShpKigxLjAxNDgrYSphKiguMjMxODUrYSooLjAyNDA2KmEtLjE0NDk5KSkpLWUpLygxLjAxNDgrYSphKig1Ki4yMzE4NSthKiguMjE2NTQqYS0xLjAxNDkzKSkpfXdoaWxlKG4ocik+dik7cmV0dXJuW3QsaV19LEZlLmludmVydD1mdW5jdGlvbih0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcixpPXQqdCtlKmUsYT0uNSplLHM9MTA7ZG97dmFyIGw9ZyhhKSxjPTEvbyhhKSx1PWktMiplKmErYSphO2EtPXI9KGwqdSsyKihhLWUpKS8oMit1KmMqYysyKihhLWUpKmwpfXdoaWxlKG4ocik+diYmLS1zPjApO3JldHVybiBsPWcoYSksWyhuKGUpPG4oYSsxL2wpP1ModCpsKTpkKGUpKmQodCkqKEUobih0KmwpKSt4KSkvbShhKSxhXX07dmFyIEdlPVtbMCw5MF0sWy05MCwwXSxbMCwwXSxbOTAsMF0sWzE4MCwwXSxbMCwtOTBdXSxZZT1bWzAsMiwxXSxbMCwzLDJdLFs1LDEsMl0sWzUsMiwzXSxbMCwxLDRdLFswLDQsM10sWzUsNCwxXSxbNSwzLDRdXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEdlW3RdfSkpfSkpO3ZhciBXZT0yL0woMyk7ZnVuY3Rpb24gWGUodCxlKXt2YXIgcj1sdCh0LGUpO3JldHVybltyWzBdKldlLHJbMV1dfWZ1bmN0aW9uIFplKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpPTA7cjxuOysrcilpKz10W3JdKmVbcl07cmV0dXJuIGl9ZnVuY3Rpb24gSmUodCl7cmV0dXJuW2EodFsxXSx0WzBdKSpBLFModSgtMSxmKDEsdFsyXSkpKSpBXX1mdW5jdGlvbiBLZSh0KXt2YXIgZT10WzBdKk0scj10WzFdKk0sbj1vKHIpO3JldHVybltuKm8oZSksbiptKGUpLG0ocildfWZ1bmN0aW9uIFFlKCl7fWZ1bmN0aW9uICRlKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRyKHQsZSl9KSl9fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6ZXIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gZXIodCxyKXtpZighdClyZXR1cm4gbnVsbDtpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXQudHlwZSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LGUpfSkpfX0odCxyKTt2YXIgbjtzd2l0Y2godC50eXBlKXtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOm49aXI7YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6bj1hcjticmVhaztjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlQb2x5Z29uIjpjYXNlIlNwaGVyZSI6bj1vcjticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBlLmdlb1N0cmVhbSh0LHIobikpLG4ucmVzdWx0KCl9WGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGx0LmludmVydCh0L1dlLGUpfTt2YXIgcnI9W10sbnI9W10saXI9e3BvaW50OmZ1bmN0aW9uKHQsZSl7cnIucHVzaChbdCxlXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXJyLmxlbmd0aD9yci5sZW5ndGg8Mj97dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOnJyWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6cnJ9Om51bGw7cmV0dXJuIHJyPVtdLHR9fSxhcj17bGluZVN0YXJ0OlFlLHBvaW50OmZ1bmN0aW9uKHQsZSl7cnIucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtyci5sZW5ndGgmJihuci5wdXNoKHJyKSxycj1bXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PW5yLmxlbmd0aD9uci5sZW5ndGg8Mj97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6bnJbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm5yfTpudWxsO3JldHVybiBucj1bXSx0fX0sb3I9e3BvbHlnb25TdGFydDpRZSxsaW5lU3RhcnQ6UWUscG9pbnQ6ZnVuY3Rpb24odCxlKXtyci5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXJyLmxlbmd0aDtpZih0KXtkb3tyci5wdXNoKHJyWzBdLnNsaWNlKCkpfXdoaWxlKCsrdDw0KTtuci5wdXNoKHJyKSxycj1bXX19LHBvbHlnb25FbmQ6UWUscmVzdWx0OmZ1bmN0aW9uKCl7aWYoIW5yLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1bXSxlPVtdO3JldHVybiBuci5mb3JFYWNoKChmdW5jdGlvbihyKXshZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7Zm9yKHZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrcjxlOyluKz10W3ItMV1bMV0qdFtyXVswXS10W3ItMV1bMF0qdFtyXVsxXTtyZXR1cm4gbjw9MH0ocik/ZS5wdXNoKHIpOnQucHVzaChbcl0pfSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTt0LnNvbWUoKGZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGk9ITEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD10W2FdLGM9bFswXSx1PWxbMV0sZj10W3NdLGg9ZlswXSxwPWZbMV07dT5uXnA+biYmcjwoaC1jKSoobi11KS8ocC11KStjJiYoaT0haSl9cmV0dXJuIGl9KHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pKXx8dC5wdXNoKFtlXSl9KSksbnI9W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19O2Z1bmN0aW9uIHNyKHQpe3ZhciByPXQoeCwwKVswXS10KC14LDApWzBdO2Z1bmN0aW9uIGkoZSxpKXt2YXIgYT1uKGUpPHgsbz10KGE/ZTplPjA/ZS15OmUreSxpKSxzPShvWzBdLW9bMV0pKl8sbD0ob1swXStvWzFdKSpfO2lmKGEpcmV0dXJuW3MsbF07dmFyIGM9cipfLHU9cz4wXmw+MD8tMToxO3JldHVyblt1KnMtZChsKSpjLHUqbC1kKHMpKmNdfXJldHVybiB0LmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKGUsaSl7dmFyIGE9KGUraSkqXyxvPShpLWUpKl8scz1uKGEpPC41KnImJm4obyk8LjUqcjtpZighcyl7dmFyIGw9cipfLGM9YT4wXm8+MD8tMToxLHU9LWMqZSsobz4wPzE6LTEpKmwsZj0tYyppKyhhPjA/MTotMSkqbDthPSgtdS1mKSpfLG89KHUtZikqX312YXIgaD10LmludmVydChhLG8pO3JldHVybiBzfHwoaFswXSs9YT4wP3k6LXkpLGh9KSxlLmdlb1Byb2plY3Rpb24oaSkucm90YXRlKFstOTAsLTkwLDQ1XSkuY2xpcEFuZ2xlKDE3OS45OTkpfWZ1bmN0aW9uIGxyKCl7cmV0dXJuIHNyKFV0KS5zY2FsZSgxMTEuNDgpfWZ1bmN0aW9uIGNyKHQpe3ZhciBlPW0odCk7ZnVuY3Rpb24gcihyLG4pe3ZhciBhPWU/ZyhyKmUvMikvZTpyLzI7aWYoIW4pcmV0dXJuWzIqYSwtdF07dmFyIHM9MippKGEqbShuKSksbD0xL2cobik7cmV0dXJuW20ocykqbCxuKygxLW8ocykpKmwtdF19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsYSl7aWYobihhKz10KTx2KXJldHVybltlPzIqaShlKnIvMikvZTpyLDBdO3ZhciBzLGw9cipyK2EqYSxjPTAsdT0xMDtkb3t2YXIgZj1nKGMpLGg9MS9vKGMpLHA9bC0yKmEqYytjKmM7Yy09cz0oZipwKzIqKGMtYSkpLygyK3AqaCpoKzIqKGMtYSkqZil9d2hpbGUobihzKT52JiYtLXU+MCk7dmFyIGQ9ciooZj1nKGMpKSx4PWcobihhKTxuKGMrMS9mKT8uNSpTKGQpOi41KkUoZCkreS80KS9tKGMpO3JldHVybltlPzIqaShlKngpL2U6Mip4LGNdfSxyfXZhciB1cj1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ZnVuY3Rpb24gZnIodCxlKXt2YXIgcixpPWYoMTgsMzYqbihlKS95KSxhPWwoaSksbz1pLWEscz0ocj11clthXSlbMF0sYz1yWzFdLHU9KHI9dXJbKythXSlbMF0saD1yWzFdLHA9KHI9dXJbZigxOSwrK2EpXSlbMF0sZD1yWzFdO3JldHVyblt0Kih1K28qKHAtcykvMitvKm8qKHAtMip1K3MpLzIpLChlPjA/eDoteCkqKGgrbyooZC1jKS8yK28qbyooZC0yKmgrYykvMildfWZ1bmN0aW9uIGhyKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPW8ociksaT0odC0xKS8odC1uKm8oZSkpO3JldHVybltpKm4qbShlKSxpKm0ocildfXJldHVybiBlLmludmVydD1mdW5jdGlvbihlLHIpe3ZhciBuPWUqZStyKnIsaT1MKG4pLG89KHQtTCgxLW4qKHQrMSkvKHQtMSkpKS8oKHQtMSkvaStpLyh0LTEpKTtyZXR1cm5bYShlKm8saSpMKDEtbypvKSksaT9TKHIqby9pKTowXX0sZX0odCk7aWYoIWUpcmV0dXJuIHI7dmFyIG49byhlKSxpPW0oZSk7ZnVuY3Rpb24gcyhlLGEpe3ZhciBvPXIoZSxhKSxzPW9bMV0sbD1zKmkvKHQtMSkrbjtyZXR1cm5bb1swXSpuL2wscy9sXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24oZSxhKXt2YXIgbz0odC0xKS8odC0xLWEqaSk7cmV0dXJuIHIuaW52ZXJ0KG8qZSxvKmEqbil9LHN9dXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dFsxXSo9MS4wMTQ0fSkpLGZyLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUveCxpPTkwKnIsYT1mKDE4LG4oaS81KSksbz11KDAsbChhKSk7ZG97dmFyIHM9dXJbb11bMV0sYz11cltvKzFdWzFdLGg9dXJbZigxOSxvKzIpXVsxXSxwPWgtcyxkPWgtMipjK3MsbT0yKihuKHIpLWMpL3AsZz1kL3Asdj1tKigxLWcqbSooMS0yKmcqbSkpO2lmKHY+PTB8fDE9PT1vKXtpPShlPj0wPzU6LTUpKih2K2EpO3ZhciB5LGI9NTA7ZG97dj0oYT1mKDE4LG4oaSkvNSkpLShvPWwoYSkpLHM9dXJbb11bMV0sYz11cltvKzFdWzFdLGg9dXJbZigxOSxvKzIpXVsxXSxpLT0oeT0oZT49MD94Oi14KSooYyt2KihoLXMpLzIrdip2KihoLTIqYytzKS8yKS1lKSpBfXdoaWxlKG4oeSk+MWUtMTImJi0tYj4wKTticmVha319d2hpbGUoLS1vPj0wKTt2YXIgXz11cltvXVswXSx3PXVyW28rMV1bMF0sVD11cltmKDE5LG8rMildWzBdO3JldHVyblt0Lyh3K3YqKFQtXykvMit2KnYqKFQtMip3K18pLzIpLGkqTV19O3ZhciBwcj0tMTc5Ljk5OTksZHI9MTc5Ljk5OTksbXI9LTg5Ljk5OTk7ZnVuY3Rpb24gZ3IodCl7cmV0dXJuIHQubGVuZ3RoPjB9ZnVuY3Rpb24gdnIodCl7cmV0dXJuLTkwPT09dHx8OTA9PT10P1swLHRdOlstMTgwLChlPXQsTWF0aC5mbG9vcigxZTQqZSkvMWU0KV07dmFyIGV9ZnVuY3Rpb24geXIodCl7dmFyIGU9dFswXSxyPXRbMV0sbj0hMTtyZXR1cm4gZTw9cHI/KGU9LTE4MCxuPSEwKTplPj1kciYmKGU9MTgwLG49ITApLHI8PW1yPyhyPS05MCxuPSEwKTpyPj04OS45OTk5JiYocj05MCxuPSEwKSxuP1tlLHJdOnR9ZnVuY3Rpb24geHIodCl7cmV0dXJuIHQubWFwKHlyKX1mdW5jdGlvbiBicih0LGUscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXt2YXIgYT10W25dLnNsaWNlKCk7ci5wdXNoKHtpbmRleDotMSxwb2x5Z29uOmUscmluZzphfSk7Zm9yKHZhciBvPTAscz1hLmxlbmd0aDtvPHM7KytvKXt2YXIgbD1hW29dLGM9bFswXSx1PWxbMV07aWYoYzw9cHJ8fGM+PWRyfHx1PD1tcnx8dT49ODkuOTk5OSl7YVtvXT15cihsKTtmb3IodmFyIGY9bysxO2Y8czsrK2Ype3ZhciBoPWFbZl0scD1oWzBdLGQ9aFsxXTtpZihwPnByJiZwPGRyJiZkPm1yJiZkPDg5Ljk5OTkpYnJlYWt9aWYoZj09PW8rMSljb250aW51ZTtpZihvKXt2YXIgbT17aW5kZXg6LTEscG9seWdvbjplLHJpbmc6YS5zbGljZSgwLG8rMSl9O20ucmluZ1ttLnJpbmcubGVuZ3RoLTFdPXZyKHUpLHJbci5sZW5ndGgtMV09bX1lbHNlIHIucG9wKCk7aWYoZj49cylicmVhaztyLnB1c2goe2luZGV4Oi0xLHBvbHlnb246ZSxyaW5nOmE9YS5zbGljZShmLTEpfSksYVswXT12cihhWzBdWzFdKSxvPS0xLHM9YS5sZW5ndGh9fX19ZnVuY3Rpb24gX3IodCl7dmFyIGUscixuLGksYSxvLHM9dC5sZW5ndGgsbD17fSxjPXt9O2ZvcihlPTA7ZTxzOysrZSluPShyPXRbZV0pLnJpbmdbMF0sYT1yLnJpbmdbci5yaW5nLmxlbmd0aC0xXSxuWzBdIT09YVswXXx8blsxXSE9PWFbMV0/KHIuaW5kZXg9ZSxsW25dPWNbYV09cik6KHIucG9seWdvbi5wdXNoKHIucmluZyksdFtlXT1udWxsKTtmb3IoZT0wO2U8czsrK2UpaWYocj10W2VdKXtpZihuPXIucmluZ1swXSxhPXIucmluZ1tyLnJpbmcubGVuZ3RoLTFdLGk9Y1tuXSxvPWxbYV0sZGVsZXRlIGxbbl0sZGVsZXRlIGNbYV0sblswXT09PWFbMF0mJm5bMV09PT1hWzFdKXtyLnBvbHlnb24ucHVzaChyLnJpbmcpO2NvbnRpbnVlfWk/KGRlbGV0ZSBjW25dLGRlbGV0ZSBsW2kucmluZ1swXV0saS5yaW5nLnBvcCgpLHRbaS5pbmRleF09bnVsbCxyPXtpbmRleDotMSxwb2x5Z29uOmkucG9seWdvbixyaW5nOmkucmluZy5jb25jYXQoci5yaW5nKX0saT09PW8/ci5wb2x5Z29uLnB1c2goci5yaW5nKTooci5pbmRleD1zKyssdC5wdXNoKGxbci5yaW5nWzBdXT1jW3IucmluZ1tyLnJpbmcubGVuZ3RoLTFdXT1yKSkpOm8/KGRlbGV0ZSBsW2FdLGRlbGV0ZSBjW28ucmluZ1tvLnJpbmcubGVuZ3RoLTFdXSxyLnJpbmcucG9wKCkscj17aW5kZXg6cysrLHBvbHlnb246by5wb2x5Z29uLHJpbmc6ci5yaW5nLmNvbmNhdChvLnJpbmcpfSx0W28uaW5kZXhdPW51bGwsdC5wdXNoKGxbci5yaW5nWzBdXT1jW3IucmluZ1tyLnJpbmcubGVuZ3RoLTFdXT1yKSk6KHIucmluZy5wdXNoKHIucmluZ1swXSksci5wb2x5Z29uLnB1c2goci5yaW5nKSl9fWZ1bmN0aW9uIHdyKHQpe3ZhciBlPXt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTpUcih0Lmdlb21ldHJ5KX07cmV0dXJuIG51bGwhPXQuaWQmJihlLmlkPXQuaWQpLG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLG51bGwhPXQucHJvcGVydGllcyYmKGUucHJvcGVydGllcz10LnByb3BlcnRpZXMpLGV9ZnVuY3Rpb24gVHIodCl7aWYobnVsbD09dClyZXR1cm4gdDt2YXIgZSxyLG4saTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAoVHIpfTticmVhaztjYXNlIlBvaW50IjplPXt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6eXIodC5jb29yZGluYXRlcyl9O2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjplPXt0eXBlOnQudHlwZSxjb29yZGluYXRlczp4cih0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmU9e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlcy5tYXAoeHIpfTticmVhaztjYXNlIlBvbHlnb24iOnZhciBhPVtdO2JyKHQuY29vcmRpbmF0ZXMsYSxyPVtdKSxfcihyKSxlPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczphfTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1bXSxuPS0xLGk9dC5jb29yZGluYXRlcy5sZW5ndGg7Zm9yKHZhciBvPW5ldyBBcnJheShpKTsrK248aTspYnIodC5jb29yZGluYXRlc1tuXSxvW25dPVtdLHIpO19yKHIpLGU9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6by5maWx0ZXIoZ3IpfTticmVhaztkZWZhdWx0OnJldHVybiB0fXJldHVybiBudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxlfWZ1bmN0aW9uIGtyKHQsZSl7dmFyIHI9ZyhlLzIpLG49bShiKnIpO3JldHVyblt0KiguNzQ0ODItLjM0NTg4Km4qbiksMS43MDcxMSpyXX1mdW5jdGlvbiBBcih0LHIsbil7dmFyIGk9ZS5nZW9JbnRlcnBvbGF0ZShyLG4pLGE9aSguNSksbz1lLmdlb1JvdGF0aW9uKFstYVswXSwtYVsxXV0pKHIpLHM9aS5kaXN0YW5jZS8yLGw9LVMobShvWzFdKk0pL20ocykpLGM9Wy1hWzBdLC1hWzFdLC0ob1swXT4wP3ktbDpsKSpBXSx1PWUuZ2VvUHJvamVjdGlvbih0KHMpKS5yb3RhdGUoYyksZj1lLmdlb1JvdGF0aW9uKGMpLGg9dS5jZW50ZXI7cmV0dXJuIGRlbGV0ZSB1LnJvdGF0ZSx1LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKGYodCkpOmYuaW52ZXJ0KGgoKSl9LHUuY2xpcEFuZ2xlKDkwKX1mdW5jdGlvbiBNcih0KXt2YXIgcj1vKHQpO2Z1bmN0aW9uIG4odCxuKXt2YXIgaT1lLmdlb0dub21vbmljUmF3KHQsbik7cmV0dXJuIGlbMF0qPXIsaX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5nZW9Hbm9tb25pY1Jhdy5pbnZlcnQodC9yLG4pfSxufWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIEFyKE1yLHQsZSl9ZnVuY3Rpb24gRXIodCl7aWYoISh0Kj0yKSlyZXR1cm4gZS5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzt2YXIgcj0tdC8yLG49LXIsaT10KnQscz1nKG4pLGw9LjUvbShuKTtmdW5jdGlvbiBjKGUsYSl7dmFyIHM9RShvKGEpKm8oZS1yKSksbD1FKG8oYSkqbyhlLW4pKTtyZXR1cm5bKChzKj1zKS0obCo9bCkpLygyKnQpLChhPDA/LTE6MSkqTCg0KmkqbC0oaS1zK2wpKihpLXMrbCkpLygyKnQpXX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxjLHU9ZSplLGY9byhMKHUrKGk9dCtyKSppKSksaD1vKEwodSsoaT10K24pKmkpKTtyZXR1cm5bYShjPWYtaCxpPShmK2gpKnMpLChlPDA/LTE6MSkqRShMKGkqaStjKmMpKmwpXX0sY31mdW5jdGlvbiBMcih0LGUpe3JldHVybiBBcihFcix0LGUpfWZ1bmN0aW9uIENyKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO3ZhciByPW4oZS94KSxpPVMocik7aWYobih0KTx2fHxuKG4oZSkteCk8dilyZXR1cm5bMCxkKGUpKnkqZyhpLzIpXTt2YXIgYT1vKGkpLHM9bih5L3QtdC95KS8yLGw9cypzLGM9YS8ocithLTEpLHU9YyooMi9yLTEpLGY9dSp1LGg9ZitsLHA9Yy1mLG09bCtjO3JldHVybltkKHQpKnkqKHMqcCtMKGwqcCpwLWgqKGMqYy1mKSkpL2gsZChlKSp5Kih1Km0tcypMKChsKzEpKmgtbSptKSkvaF19ZnVuY3Rpb24gUHIodCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07dmFyIHI9bihlL3gpLGk9UyhyKTtpZihuKHQpPHZ8fG4obihlKS14KTx2KXJldHVyblswLGQoZSkqeSpnKGkvMildO3ZhciBhPW8oaSkscz1uKHkvdC10L3kpLzIsbD1zKnMsYz1hKihMKDErbCktcyphKS8oMStsKnIqcik7cmV0dXJuW2QodCkqeSpjLGQoZSkqeSpMKDEtYyooMipzK2MpKV19ZnVuY3Rpb24gSXIodCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07dmFyIHI9ZS94LGk9UyhyKTtpZihuKHQpPHZ8fG4obihlKS14KTx2KXJldHVyblswLHkqZyhpLzIpXTt2YXIgYT0oeS90LXQveSkvMixzPXIvKDErbyhpKSk7cmV0dXJuW3kqKGQodCkqTChhKmErMS1zKnMpLWEpLHkqc119ZnVuY3Rpb24gT3IodCxlKXtpZighZSlyZXR1cm5bdCwwXTt2YXIgcj1uKGUpO2lmKCF0fHxyPT09eClyZXR1cm5bMCxlXTt2YXIgaT1yL3gsYT1pKmksbz0oOCppLWEqKGErMiktNSkvKDIqYSooaS0xKSkscz1vKm8sbD1pKm8sYz1hK3MrMipsLHU9aSszKm8sZj10L3gsaD1mKzEvZixwPWQobih0KS14KSpMKGgqaC00KSxtPXAqcCxnPShwKihjK3MtMSkrMipMKGMqKGErcyptLTEpKygxLWEpKihhKih1KnUrNCpzKSsxMipsKnMrNCpzKnMpKSkvKDQqYyttKTtyZXR1cm5bZCh0KSp4KmcsZChlKSp4KkwoMStwKm4oZyktZypnKV19ZnVuY3Rpb24genIodCxlLHIsbil7dmFyIGk9eS8zO3Q9dSh0LHYpLGU9dShlLHYpLHQ9Zih0LHgpLGU9ZihlLHktdikscj11KHIsMCkscj1mKHIsMTAwLXYpO3ZhciBzPShuPXUobix2KSkvMTAwLGw9RSgoci8xMDArMSkqbyhpKSkvaSxjPW0odCkvbShsKngpLGg9ZS95LHA9TChzKm0odC8yKS9tKGUvMikpO3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe2Z1bmN0aW9uIHMoYSxzKXt2YXIgbD1yKm0obipzKSxjPUwoMS1sKmwpLHU9TCgyLygxK2MqbyhhKj1pKSkpO3JldHVyblt0KmMqdSptKGEpLGUqbCp1XX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24obyxzKXt2YXIgbD1vL3QsYz1zL2UsdT1MKGwqbCtjKmMpLGY9MipTKHUvMik7cmV0dXJuW2EobypnKGYpLHQqdSkvaSx1JiZTKHMqbShmKS8oZSpyKnUpKS9uXX0sc30ocC9MKGgqYypsKSwxLyhwKkwoaCpjKmwpKSxjLGwsaCl9ZnVuY3Rpb24gRHIoKXt2YXIgdD02NSpNLHI9NjAqTSxuPTIwLGk9MjAwLGE9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcih6ciksbz1hKHQscixuLGkpO3JldHVybiBvLnBvbGVsaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodD0rZSpNLHIsbixpKTp0KkF9LG8ucGFyYWxsZWxzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyPStlKk0sbixpKTpyKkF9LG8uaW5mbGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG49K2UsaSk6bn0sby5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQscixuLGk9K2UpOml9LG8uc2NhbGUoMTYzLjc3NSl9a3IuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS8xLjcwNzExLG49bShiKnIpO3JldHVyblt0LyguNzQ0ODItLjM0NTg4Km4qbiksMippKHIpXX0sQ3IuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO2lmKG4odCk8dilyZXR1cm5bMCx4Km0oMippKGUveSkpXTt2YXIgcj0odC89eSkqdCxhPShlLz15KSplLHM9cithLGw9cypzLGM9LW4oZSkqKDErcyksdT1jLTIqYStyLGY9LTIqYysxKzIqYStsLGg9YS9mKygyKnUqdSp1LyhmKmYqZiktOSpjKnUvKGYqZikpLzI3LHA9KGMtdSp1LygzKmYpKS9mLGc9MipMKC1wLzMpLGI9RSgzKmgvKHAqZykpLzM7cmV0dXJuW3kqKHMtMStMKDErMiooci1hKStsKSkvKDIqdCksZChlKSp5KigtZypvKGIreS8zKS11LygzKmYpKV19LFByLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVyblswLHgqbSgyKmkoZS95KSldO3ZhciByPW4odC95KSxvPSgxLXIqci0oZS89eSkqZSkvKDIqcikscz1MKG8qbysxKTtyZXR1cm5bZCh0KSp5KihzLW8pLGQoZSkqeCptKDIqYShMKCgxLTIqbypyKSoobytzKS1yKSxMKHMrbytyKSkpXX0sSXIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuW3QsMF07dmFyIHI9ZS95LG49KHkqeSooMS1yKnIpLXQqdCkvKDIqeSp0KTtyZXR1cm5bdD95KihkKHQpKkwobipuKzEpLW4pOjAseCptKDIqaShyKSldfSxPci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZighdHx8IWUpcmV0dXJuW3QsZV07ZS89eTt2YXIgaT1kKHQpKnQveCxhPShpKmktMSs0KmUqZSkvbihpKSxvPWEqYSxzPTIqZSxsPTUwO2Rve3ZhciBjPXMqcyx1PSg4KnMtYyooYysyKS01KS8oMipjKihzLTEpKSxmPSgzKnMtYypzLTEwKS8oMipjKnMpLGg9dSp1LHA9cyp1LG09cyt1LGc9bSptLGI9cyszKnUsXz0tMiptKig0KnAqaCsoMS00KmMrMypjKmMpKigxK2YpK2gqKDE0KmMtNi1vKyg4KmMtOC0yKm8pKmYpK3AqKDEyKmMtOCsoMTAqYy0xMC1vKSpmKSksdz1MKGcqKGMraCpvLTEpKygxLWMpKihjKihiKmIrNCpoKStoKigxMipwKzQqaCkpKTtzLT1yPShhKihnK2gtMSkrMip3LWkqKDQqZytvKSkvKGEqKDIqdSpmKzIqbSooMStmKSkrXy93LTgqbSooYSooLTEraCtnKSsyKncpKigxK2YpLyhvKzQqZykpfXdoaWxlKHI+diYmLS1sPjApO3JldHVybltkKHQpKihMKGEqYSs0KSthKSp5LzQseCpzXX07dmFyIFJyPTQqeSszKkwoMyksRnI9MipMKDIqeSpMKDMpL1JyKSxCcj1ZKEZyKkwoMykveSxGcixSci82KTtmdW5jdGlvbiBOcih0LGUpe3JldHVyblt0KkwoMS0zKmUqZS8oeSp5KSksZV19ZnVuY3Rpb24ganIodCxlKXt2YXIgcj1vKGUpLG49byh0KSpyLGk9MS1uLHM9byh0PWEobSh0KSpyLC1tKGUpKSksbD1tKHQpO3JldHVybltsKihyPUwoMS1uKm4pKS1zKmksLXMqci1sKmldfWZ1bmN0aW9uIFVyKHQsZSl7dmFyIHI9Tyh0LGUpO3JldHVyblsoclswXSt0L3gpLzIsKHJbMV0rZSkvMl19TnIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTCgxLTMqZSplLyh5KnkpKSxlXX0sanIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQqdCtlKmUpLy0yLG49TCgtciooMityKSksaT1lKnIrdCpuLG89dCpyLWUqbixzPUwobypvK2kqaSk7cmV0dXJuW2EobippLHMqKDErcikpLHM/LVMobipvL3MpOjBdfSxVci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LGk9ZSxhPTI1O2Rve3ZhciBzLGw9byhpKSxjPW0oaSksdT1tKDIqaSksZj1jKmMsaD1sKmwscD1tKHIpLGQ9byhyLzIpLGc9bShyLzIpLHk9ZypnLGI9MS1oKmQqZCxfPWI/RShsKmQpKkwocz0xL2IpOnM9MCx3PS41KigyKl8qbCpnK3IveCktdCxUPS41KihfKmMraSktZSxrPS41KnMqKGgqeStfKmwqZCpmKSsuNS94LEE9cyoocCp1LzQtXypjKmcpLE09LjEyNSpzKih1KmctXypjKmgqcCksUz0uNSpzKihmKmQrXyp5KmwpKy41LEM9QSpNLVMqayxQPShUKkEtdypTKS9DLEk9KHcqTS1UKmspL0M7ci09UCxpLT1JfXdoaWxlKChuKFApPnZ8fG4oSSk+dikmJi0tYT4wKTtyZXR1cm5bcixpXX0sdC5nZW9OYXR1cmFsRWFydGg9ZS5nZW9OYXR1cmFsRWFydGgxLHQuZ2VvTmF0dXJhbEVhcnRoUmF3PWUuZ2VvTmF0dXJhbEVhcnRoMVJhdyx0Lmdlb0Fpcnk9ZnVuY3Rpb24oKXt2YXIgdD14LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihJKSxuPXIodCk7cmV0dXJuIG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD1lKk0pOnQqQX0sbi5zY2FsZSgxNzkuOTc2KS5jbGlwQW5nbGUoMTQ3KX0sdC5nZW9BaXJ5UmF3PUksdC5nZW9BaXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE8pLnNjYWxlKDE1Mi42Myl9LHQuZ2VvQWl0b2ZmUmF3PU8sdC5nZW9Bcm1hZGlsbG89ZnVuY3Rpb24oKXt2YXIgdD0yMCpNLHI9dD49MD8xOi0xLG49ZyhyKnQpLGk9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcih6KSxzPWkodCksbD1zLnN0cmVhbTtyZXR1cm4gcy5wYXJhbGxlbD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1nKChyPSh0PWUqTSk+PTA/MTotMSkqdCksaSh0KSk6dCpBfSxzLnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgaT1zLnJvdGF0ZSgpLGM9bChlKSx1PShzLnJvdGF0ZShbMCwwXSksbChlKSksZj1zLnByZWNpc2lvbigpO3JldHVybiBzLnJvdGF0ZShpKSxjLnNwaGVyZT1mdW5jdGlvbigpe3UucG9seWdvblN0YXJ0KCksdS5saW5lU3RhcnQoKTtmb3IodmFyIGU9LTE4MCpyO3IqZTwxODA7ZSs9OTAqcil1LnBvaW50KGUsOTAqcik7aWYodClmb3IoO3IqKGUtPTMqcipmKT49LTE4MDspdS5wb2ludChlLHIqLWEobyhlKk0vMiksbikqQSk7dS5saW5lRW5kKCksdS5wb2x5Z29uRW5kKCl9LGN9LHMuc2NhbGUoMjE4LjY5NSkuY2VudGVyKFswLDI4LjA5NzRdKX0sdC5nZW9Bcm1hZGlsbG9SYXc9eix0Lmdlb0F1Z3VzdD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRCkuc2NhbGUoNjYuMTYwMyl9LHQuZ2VvQXVndXN0UmF3PUQsdC5nZW9CYWtlcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oQikuc2NhbGUoMTEyLjMxNCl9LHQuZ2VvQmFrZXJSYXc9Qix0Lmdlb0JlcmdoYXVzPWZ1bmN0aW9uKCl7dmFyIHQ9NSxyPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IoTiksbj1yKHQpLGk9bi5zdHJlYW0scz0tbyguMDEqTSksbD1tKC4wMSpNKTtyZXR1cm4gbi5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPW4ucm90YXRlKCksYz1pKGUpLHU9KG4ucm90YXRlKFswLDBdKSxpKGUpKTtyZXR1cm4gbi5yb3RhdGUociksYy5zcGhlcmU9ZnVuY3Rpb24oKXt1LnBvbHlnb25TdGFydCgpLHUubGluZVN0YXJ0KCk7Zm9yKHZhciBlPTAscj0zNjAvdCxuPTIqeS90LGk9OTAtMTgwL3QsYz14O2U8dDsrK2UsaS09cixjLT1uKXUucG9pbnQoYShsKm8oYykscykqQSxTKGwqbShjKSkqQSksaTwtOTA/KHUucG9pbnQoLTkwLC0xODAtaS0uMDEpLHUucG9pbnQoLTkwLC0xODAtaSsuMDEpKToodS5wb2ludCg5MCxpKy4wMSksdS5wb2ludCg5MCxpLS4wMSkpO3UubGluZUVuZCgpLHUucG9seWdvbkVuZCgpfSxjfSxuLnNjYWxlKDg3LjgwNzYpLmNlbnRlcihbMCwxNy4xODc1XSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0JlcmdoYXVzUmF3PU4sdC5nZW9CZXJ0aW4xOTUzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihxKCkpLnJvdGF0ZShbLTE2LjUsLTQyXSkuc2NhbGUoMTc2LjU3KS5jZW50ZXIoWzcuOTMsLjA5XSl9LHQuZ2VvQmVydGluMTk1M1Jhdz1xLHQuZ2VvQm9nZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEopLnNjYWxlKDE2MC44NTcpfSx0Lmdlb0JvZ2dzUmF3PUosdC5nZW9Cb25uZT1mdW5jdGlvbigpe3JldHVybiBLKCQpLnNjYWxlKDEyMy4wODIpLmNlbnRlcihbMCwyNi4xNDQxXSkucGFyYWxsZWwoNDUpfSx0Lmdlb0Jvbm5lUmF3PSQsdC5nZW9Cb3R0b21sZXk9ZnVuY3Rpb24oKXt2YXIgdD0uNSxyPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IodHQpLG49cih0KTtyZXR1cm4gbi5mcmFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc2NhbGUoMTU4LjgzNyl9LHQuZ2VvQm90dG9tbGV5UmF3PXR0LHQuZ2VvQnJvbWxleT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oZXQpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvQnJvbWxleVJhdz1ldCx0Lmdlb0NoYW1iZXJsaW49c3QsdC5nZW9DaGFtYmVybGluUmF3PWF0LHQuZ2VvQ2hhbWJlcmxpbkFmcmljYT1mdW5jdGlvbigpe3JldHVybiBzdChbMCwyMl0sWzQ1LDIyXSxbMjIuNSwtMjJdKS5zY2FsZSgzODApLmNlbnRlcihbMjIuNSwyXSl9LHQuZ2VvQ29sbGlnbm9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihsdCkuc2NhbGUoOTUuNjQ2NCkuY2VudGVyKFswLDMwXSl9LHQuZ2VvQ29sbGlnbm9uUmF3PWx0LHQuZ2VvQ3JhaWc9ZnVuY3Rpb24oKXtyZXR1cm4gSyhjdCkuc2NhbGUoMjQ5LjgyOCkuY2xpcEFuZ2xlKDkwKX0sdC5nZW9DcmFpZ1Jhdz1jdCx0Lmdlb0NyYXN0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGZ0KS5zY2FsZSgxNTYuMTkpfSx0Lmdlb0NyYXN0ZXJSYXc9ZnQsdC5nZW9DeWxpbmRyaWNhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBLKGh0KS5wYXJhbGxlbCgzOC41OCkuc2NhbGUoMTk1LjA0NCl9LHQuZ2VvQ3lsaW5kcmljYWxFcXVhbEFyZWFSYXc9aHQsdC5nZW9DeWxpbmRyaWNhbFN0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gSyhwdCkuc2NhbGUoMTI0Ljc1KX0sdC5nZW9DeWxpbmRyaWNhbFN0ZXJlb2dyYXBoaWNSYXc9cHQsdC5nZW9FY2tlcnQxPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihkdCkuc2NhbGUoMTY1LjY2NCl9LHQuZ2VvRWNrZXJ0MVJhdz1kdCx0Lmdlb0Vja2VydDI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKG10KS5zY2FsZSgxNjUuNjY0KX0sdC5nZW9FY2tlcnQyUmF3PW10LHQuZ2VvRWNrZXJ0Mz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oZ3QpLnNjYWxlKDE4MC43MzkpfSx0Lmdlb0Vja2VydDNSYXc9Z3QsdC5nZW9FY2tlcnQ0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih2dCkuc2NhbGUoMTgwLjczOSl9LHQuZ2VvRWNrZXJ0NFJhdz12dCx0Lmdlb0Vja2VydDU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHl0KS5zY2FsZSgxNzMuMDQ0KX0sdC5nZW9FY2tlcnQ1UmF3PXl0LHQuZ2VvRWNrZXJ0Nj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oeHQpLnNjYWxlKDE3My4wNDQpfSx0Lmdlb0Vja2VydDZSYXc9eHQsdC5nZW9FaXNlbmxvaHI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKF90KS5zY2FsZSg2Mi41MjcxKX0sdC5nZW9FaXNlbmxvaHJSYXc9X3QsdC5nZW9GYWhleT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oVHQpLnNjYWxlKDEzNy4xNTIpfSx0Lmdlb0ZhaGV5UmF3PVR0LHQuZ2VvRm91Y2F1dD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oa3QpLnNjYWxlKDEzNS4yNjQpfSx0Lmdlb0ZvdWNhdXRSYXc9a3QsdC5nZW9Gb3VjYXV0U2ludXNvaWRhbD1mdW5jdGlvbigpe3ZhciB0PS41LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihBdCksbj1yKHQpO3JldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD0rZSk6dH0sbi5zY2FsZSgxNjguNzI1KX0sdC5nZW9Gb3VjYXV0U2ludXNvaWRhbFJhdz1BdCx0Lmdlb0dpbGJlcnQ9ZnVuY3Rpb24odCl7bnVsbD09dCYmKHQ9ZS5nZW9PcnRob2dyYXBoaWMpO3ZhciByPXQoKSxuPWUuZ2VvRXF1aXJlY3Rhbmd1bGFyKCkuc2NhbGUoQSkucHJlY2lzaW9uKDApLmNsaXBBbmdsZShudWxsKS50cmFuc2xhdGUoWzAsMF0pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIoTXQodCkpfWZ1bmN0aW9uIGEodCl7aVt0XT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyW3RdLmFwcGx5KHIsYXJndW1lbnRzKSxpKTpyW3RdKCl9fXJldHVybiByLmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBTdChyLmludmVydCh0KSl9KSxpLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgZT1yLnN0cmVhbSh0KSxpPW4uc3RyZWFtKHtwb2ludDpmdW5jdGlvbih0LHIpe2UucG9pbnQodC8yLFMoZygtci8yKk0pKSpBKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCl9fSk7cmV0dXJuIGkuc3BoZXJlPWUuc3BoZXJlLGl9LGkucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLnJvdGF0ZSh0KSxpKTpuLnJvdGF0ZSgpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5jZW50ZXIoTXQodCkpLGkpOlN0KHIuY2VudGVyKCkpfSxhKCJhbmdsZSIpLGEoImNsaXBBbmdsZSIpLGEoImNsaXBFeHRlbnQiKSxhKCJmaXRFeHRlbnQiKSxhKCJmaXRIZWlnaHQiKSxhKCJmaXRTaXplIiksYSgiZml0V2lkdGgiKSxhKCJzY2FsZSIpLGEoInRyYW5zbGF0ZSIpLGEoInByZWNpc2lvbiIpLGkuc2NhbGUoMjQ5LjUpfSx0Lmdlb0dpbmdlcnk9ZnVuY3Rpb24oKXt2YXIgdD02LHI9MzAqTSxuPW8ociksaT1tKHIpLHM9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihFdCksbD1zKHIsdCksYz1sLnN0cmVhbSx1PS1vKC4wMSpNKSxmPW0oLjAxKk0pO3JldHVybiBsLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1vKHI9ZSpNKSxpPW0ocikscyhyLHQpKTpyKkF9LGwubG9iZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cyhyLHQ9K2UpOnR9LGwuc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPWwucm90YXRlKCkscz1jKGUpLGg9KGwucm90YXRlKFswLDBdKSxjKGUpKTtyZXR1cm4gbC5yb3RhdGUocikscy5zcGhlcmU9ZnVuY3Rpb24oKXtoLnBvbHlnb25TdGFydCgpLGgubGluZVN0YXJ0KCk7Zm9yKHZhciBlPTAscj0yKnkvdCxzPTA7ZTx0OysrZSxzLT1yKWgucG9pbnQoYShmKm8ocyksdSkqQSxTKGYqbShzKSkqQSksaC5wb2ludChhKGkqbyhzLXIvMiksbikqQSxTKGkqbShzLXIvMikpKkEpO2gubGluZUVuZCgpLGgucG9seWdvbkVuZCgpfSxzfSxsLnJvdGF0ZShbOTAsLTQwXSkuc2NhbGUoOTEuNzA5NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0dpbmdlcnlSYXc9RXQsdC5nZW9HaW56YnVyZzQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEl0KS5zY2FsZSgxNDkuOTk1KX0sdC5nZW9HaW56YnVyZzRSYXc9SXQsdC5nZW9HaW56YnVyZzU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE90KS5zY2FsZSgxNTMuOTMpfSx0Lmdlb0dpbnpidXJnNVJhdz1PdCx0Lmdlb0dpbnpidXJnNj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oenQpLnNjYWxlKDEzMC45NDUpfSx0Lmdlb0dpbnpidXJnNlJhdz16dCx0Lmdlb0dpbnpidXJnOD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRHQpLnNjYWxlKDEzMS43NDcpfSx0Lmdlb0dpbnpidXJnOFJhdz1EdCx0Lmdlb0dpbnpidXJnOT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oUnQpLnNjYWxlKDEzMS4wODcpfSx0Lmdlb0dpbnpidXJnOVJhdz1SdCx0Lmdlb0dyaW5nb3J0ZW49ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEZ0KEJ0KSkuc2NhbGUoMjM5Ljc1KX0sdC5nZW9HcmluZ29ydGVuUmF3PUJ0LHQuZ2VvR3V5b3U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEZ0KFV0KSkuc2NhbGUoMTUxLjQ5Nil9LHQuZ2VvR3V5b3VSYXc9VXQsdC5nZW9IYW1tZXI9ZnVuY3Rpb24oKXt2YXIgdD0yLHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihqKSxuPXIodCk7cmV0dXJuIG4uY29lZmZpY2llbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDE2OS41MjkpfSx0Lmdlb0hhbW1lclJhdz1qLHQuZ2VvSGFtbWVyUmV0cm9hemltdXRoYWw9ZnVuY3Rpb24oKXt2YXIgdD0wLHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihWdCksbj1yKHQpLGk9bi5yb3RhdGUsYT1uLnN0cmVhbSxvPWUuZ2VvQ2lyY2xlKCk7cmV0dXJuIG4ucGFyYWxsZWw9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQqQTt2YXIgaT1uLnJvdGF0ZSgpO3JldHVybiByKHQ9ZSpNKS5yb3RhdGUoaSl9LG4ucm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLmNhbGwobixbZVswXSxlWzFdLXQqQV0pLG8uY2VudGVyKFstZVswXSwtZVsxXV0pLG4pOigoZT1pLmNhbGwobikpWzFdKz10KkEsZSl9LG4uc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybih0PWEodCkpLnNwaGVyZT1mdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCk7dmFyIGUscj1vLnJhZGl1cyg4OS45OSkoKS5jb29yZGluYXRlc1swXSxuPXIubGVuZ3RoLTEsaT0tMTtmb3IodC5saW5lU3RhcnQoKTsrK2k8bjspdC5wb2ludCgoZT1yW2ldKVswXSxlWzFdKTtmb3IodC5saW5lRW5kKCksbj0ocj1vLnJhZGl1cyg5MC4wMSkoKS5jb29yZGluYXRlc1swXSkubGVuZ3RoLTEsdC5saW5lU3RhcnQoKTstLWk+PTA7KXQucG9pbnQoKGU9cltpXSlbMF0sZVsxXSk7dC5saW5lRW5kKCksdC5wb2x5Z29uRW5kKCl9LHR9LG4uc2NhbGUoNzkuNDE4NykucGFyYWxsZWwoNDUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9IYW1tZXJSZXRyb2F6aW11dGhhbFJhdz1WdCx0Lmdlb0hlYWxwaXg9ZnVuY3Rpb24oKXt2YXIgdD00LG49ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihZdCksaT1uKHQpLGE9aS5zdHJlYW07cmV0dXJuIGkubG9iZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih0PStlKTp0fSxpLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgbz1pLnJvdGF0ZSgpLHM9YShuKSxsPShpLnJvdGF0ZShbMCwwXSksYShuKSk7cmV0dXJuIGkucm90YXRlKG8pLHMuc3BoZXJlPWZ1bmN0aW9uKCl7dmFyIG4saTtlLmdlb1N0cmVhbSgobj0xODAvdCxpPVtdLmNvbmNhdChyLnJhbmdlKC0xODAsMTgwK24vMixuKS5tYXAoV3QpLHIucmFuZ2UoMTgwLC0xODAtbi8yLC1uKS5tYXAoWHQpKSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6WzE4MD09PW4/aS5tYXAoWnQpOmldfSksbCl9LHN9LGkuc2NhbGUoMjM5Ljc1KX0sdC5nZW9IZWFscGl4UmF3PVl0LHQuZ2VvSGlsbD1mdW5jdGlvbigpe3ZhciB0PTEscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKEp0KSxuPXIodCk7cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDE2Ny43NzQpLmNlbnRlcihbMCwxOC42N10pfSx0Lmdlb0hpbGxSYXc9SnQsdC5nZW9Ib21vbG9zaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihRdCkuc2NhbGUoMTUyLjYzKX0sdC5nZW9Ib21vbG9zaW5lUmF3PVF0LHQuZ2VvSHVmbmFnZWw9ZnVuY3Rpb24oKXt2YXIgdD0xLHI9MCxuPTQ1Kk0saT0yLGE9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcigkdCksbz1hKHQscixuLGkpO3JldHVybiBvLmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0PStlLHIsbixpKTp0fSxvLmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0LHI9K2UsbixpKTpyfSxvLnBzaU1heD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQscixuPStlKk0saSk6bipBfSxvLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG4saT0rZSk6aX0sby5zY2FsZSgxODAuNzM5KX0sdC5nZW9IdWZuYWdlbFJhdz0kdCx0Lmdlb0h5cGVyZWxsaXB0aWNhbD1mdW5jdGlvbigpe3ZhciB0PTAscj0yLjUsbj0xLjE4MzEzNixpPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IoZWUpLGE9aSh0LHIsbik7cmV0dXJuIGEuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aSh0PStlLHIsbik6dH0sYS5rPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kodCxyPStlLG4pOnJ9LGEuZ2FtbWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aSh0LHIsbj0rZSk6bn0sYS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0h5cGVyZWxsaXB0aWNhbFJhdz1lZSx0Lmdlb0ludGVycnVwdD1hZSx0Lmdlb0ludGVycnVwdGVkQm9nZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoSixvZSkuc2NhbGUoMTYwLjg1Nyl9LHQuZ2VvSW50ZXJydXB0ZWRIb21vbG9zaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFF0LHNlKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0ludGVycnVwdGVkTW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFcsbGUpLnNjYWxlKDE2OS41MjkpfSx0Lmdlb0ludGVycnVwdGVkTW9sbHdlaWRlSGVtaXNwaGVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoVyxjZSkuc2NhbGUoMTY5LjUyOSkucm90YXRlKFsyMCwwXSl9LHQuZ2VvSW50ZXJydXB0ZWRTaW51TW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKEt0LHVlLEgpLnJvdGF0ZShbLTIwLC01NV0pLnNjYWxlKDE2NC4yNjMpLmNlbnRlcihbMCwtNS40MDM2XSl9LHQuZ2VvSW50ZXJydXB0ZWRTaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFEsZmUpLnNjYWxlKDE1Mi42Mykucm90YXRlKFstMjAsMF0pfSx0Lmdlb0thdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihoZSkuc2NhbGUoMTU4LjgzNyl9LHQuZ2VvS2F2cmF5c2tpeTdSYXc9aGUsdC5nZW9MYWdyYW5nZT1mdW5jdGlvbigpe3ZhciB0PS41LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihwZSksbj1yKHQpO3JldHVybiBuLnNwYWNpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDEyNC43NSl9LHQuZ2VvTGFncmFuZ2VSYXc9cGUsdC5nZW9MYXJyaXZlZT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24obWUpLnNjYWxlKDk3LjI2NzIpfSx0Lmdlb0xhcnJpdmVlUmF3PW1lLHQuZ2VvTGFza293c2tpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihnZSkuc2NhbGUoMTM5Ljk4KX0sdC5nZW9MYXNrb3dza2lSYXc9Z2UsdC5nZW9MaXR0cm93PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih2ZSkuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDg5Ljk5OSl9LHQuZ2VvTGl0dHJvd1Jhdz12ZSx0Lmdlb0xveGltdXRoYWw9ZnVuY3Rpb24oKXtyZXR1cm4gSyh5ZSkucGFyYWxsZWwoNDApLnNjYWxlKDE1OC44MzcpfSx0Lmdlb0xveGltdXRoYWxSYXc9eWUsdC5nZW9NaWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHhlKS5zY2FsZSgxMDguMzE4KX0sdC5nZW9NaWxsZXJSYXc9eGUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWM9TWUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNSYXc9YmUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNBbGFza2E9ZnVuY3Rpb24oKXtyZXR1cm4gTWUoX2UsWzE1MiwtNjRdKS5zY2FsZSgxNDAwKS5jZW50ZXIoWy0xNjAuOTA4LDYyLjQ4NjRdKS5jbGlwQW5nbGUoMzApLmFuZ2xlKDcuOCl9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljR3M0OD1mdW5jdGlvbigpe3JldHVybiBNZSh3ZSxbOTUsLTM4XSkuc2NhbGUoMWUzKS5jbGlwQW5nbGUoNTUpLmNlbnRlcihbLTk2LjU1NjMsMzguODY3NV0pfSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY0dzNTA9ZnVuY3Rpb24oKXtyZXR1cm4gTWUoVGUsWzEyMCwtNDVdKS5zY2FsZSgzNTkuNTEzKS5jbGlwQW5nbGUoNTUpLmNlbnRlcihbLTExNy40NzQsNTMuMDYyOF0pfSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY01pbGxlcj1mdW5jdGlvbigpe3JldHVybiBNZShrZSxbLTIwLC0xOF0pLnNjYWxlKDIwOS4wOTEpLmNlbnRlcihbMjAsMTYuNzIxNF0pLmNsaXBBbmdsZSg4Mil9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljTGVlPWZ1bmN0aW9uKCl7cmV0dXJuIE1lKEFlLFsxNjUsMTBdKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxMzApLmNlbnRlcihbLTE2NSwtMTBdKX0sdC5nZW9Nb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFcpLnNjYWxlKDE2OS41MjkpfSx0Lmdlb01vbGx3ZWlkZVJhdz1XLHQuZ2VvTXRGbGF0UG9sYXJQYXJhYm9saWM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKExlKS5zY2FsZSgxNjQuODU5KX0sdC5nZW9NdEZsYXRQb2xhclBhcmFib2xpY1Jhdz1MZSx0Lmdlb010RmxhdFBvbGFyUXVhcnRpYz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oQ2UpLnNjYWxlKDE4OC4yMDkpfSx0Lmdlb010RmxhdFBvbGFyUXVhcnRpY1Jhdz1DZSx0Lmdlb010RmxhdFBvbGFyU2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oUGUpLnNjYWxlKDE2Ni41MTgpfSx0Lmdlb010RmxhdFBvbGFyU2ludXNvaWRhbFJhdz1QZSx0Lmdlb05hdHVyYWxFYXJ0aDI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEllKS5zY2FsZSgxNzUuMjk1KX0sdC5nZW9OYXR1cmFsRWFydGgyUmF3PUllLHQuZ2VvTmVsbEhhbW1lcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oT2UpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvTmVsbEhhbW1lclJhdz1PZSx0Lmdlb0ludGVycnVwdGVkUXVhcnRpY0F1dGhhbGljPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKGooMS8wKSx6ZSkucm90YXRlKFsyMCwwXSkuc2NhbGUoMTUyLjYzKX0sdC5nZW9OaWNvbG9zaT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRGUpLnNjYWxlKDEyNy4yNjcpfSx0Lmdlb05pY29sb3NpUmF3PURlLHQuZ2VvUGF0dGVyc29uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihSZSkuc2NhbGUoMTM5LjMxOSl9LHQuZ2VvUGF0dGVyc29uUmF3PVJlLHQuZ2VvUG9seWNvbmljPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihGZSkuc2NhbGUoMTAzLjc0KX0sdC5nZW9Qb2x5Y29uaWNSYXc9RmUsdC5nZW9Qb2x5aGVkcmFsPVZlLHQuZ2VvUG9seWhlZHJhbEJ1dHRlcmZseT1mdW5jdGlvbih0KXt0PXR8fGZ1bmN0aW9uKHQpe3ZhciByPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTtyZXR1cm4gZS5nZW9Hbm9tb25pYygpLnNjYWxlKDEpLnRyYW5zbGF0ZShbMCwwXSkucm90YXRlKFstclswXSwtclsxXV0pfTt2YXIgcj1ZZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntmYWNlOmUscHJvamVjdDp0KGUpfX0pKTtyZXR1cm5bLTEsMCwwLDEsMCwxLDQsNV0uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgbj1yW3RdO24mJihuLmNoaWxkcmVufHwobi5jaGlsZHJlbj1bXSkpLnB1c2gocltlXSl9KSksVmUoclswXSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gclt0PC15LzI/ZTwwPzY6NDp0PDA/ZTwwPzI6MDp0PHkvMj9lPDA/MzoxOmU8MD83OjVdfSkpLmFuZ2xlKC0zMCkuc2NhbGUoMTAxLjg1OCkuY2VudGVyKFswLDQ1XSl9LHQuZ2VvUG9seWhlZHJhbENvbGxpZ25vbj1mdW5jdGlvbih0KXt0PXR8fGZ1bmN0aW9uKHQpe3ZhciByPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFhlKS50cmFuc2xhdGUoWzAsMF0pLnNjYWxlKDEpLnJvdGF0ZShyWzFdPjA/Wy1yWzBdLDBdOlsxODAtclswXSwxODBdKX07dmFyIHI9WWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm57ZmFjZTplLHByb2plY3Q6dChlKX19KSk7cmV0dXJuWy0xLDAsMCwxLDAsMSw0LDVdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIG49clt0XTtuJiYobi5jaGlsZHJlbnx8KG4uY2hpbGRyZW49W10pKS5wdXNoKHJbZV0pfSkpLFZlKHJbMF0sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbdDwteS8yP2U8MD82OjQ6dDwwP2U8MD8yOjA6dDx5LzI/ZTwwPzM6MTplPDA/Nzo1XX0pKS5hbmdsZSgtMzApLnNjYWxlKDEyMS45MDYpLmNlbnRlcihbMCw0OC41OTA0XSl9LHQuZ2VvUG9seWhlZHJhbFdhdGVybWFuPWZ1bmN0aW9uKHQpe3Q9dHx8ZnVuY3Rpb24odCl7dmFyIHI9Nj09PXQubGVuZ3RoP2UuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTp0WzBdO3JldHVybiBlLmdlb0dub21vbmljKCkuc2NhbGUoMSkudHJhbnNsYXRlKFswLDBdKS5yb3RhdGUoWy1yWzBdLC1yWzFdXSl9O3ZhciByPVllLm1hcCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5tYXAoS2UpLG49ci5sZW5ndGgsaT1yW24tMV0sYT1bXSxvPTA7bzxuOysrbyllPXJbb10sYS5wdXNoKEplKFsuOTQ4NjgzMjk4MDUwNTEzOCppWzBdKy4zMTYyMjc3NjYwMTY4Mzc5NCplWzBdLC45NDg2ODMyOTgwNTA1MTM4KmlbMV0rLjMxNjIyNzc2NjAxNjgzNzk0KmVbMV0sLjk0ODY4MzI5ODA1MDUxMzgqaVsyXSsuMzE2MjI3NzY2MDE2ODM3OTQqZVsyXV0pLEplKFsuOTQ4NjgzMjk4MDUwNTEzOCplWzBdKy4zMTYyMjc3NjYwMTY4Mzc5NCppWzBdLC45NDg2ODMyOTgwNTA1MTM4KmVbMV0rLjMxNjIyNzc2NjAxNjgzNzk0KmlbMV0sLjk0ODY4MzI5ODA1MDUxMzgqZVsyXSsuMzE2MjI3NzY2MDE2ODM3OTQqaVsyXV0pKSxpPWU7cmV0dXJuIGF9KSksbj1bXSxpPVstMSwwLDAsMSwwLDEsNCw1XTtyLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBhLG8scz1ZZVtlXSxsPXMubGVuZ3RoLGM9bltlXT1bXSx1PTA7dTxsOysrdSlyLnB1c2goW3NbdV0sdFsoMip1KzIpJSgyKmwpXSx0WygyKnUrMSklKDIqbCldXSksaS5wdXNoKGUpLGMucHVzaCgoYT1LZSh0WygyKnUrMiklKDIqbCldKSxvPUtlKHRbKDIqdSsxKSUoMipsKV0pLFthWzFdKm9bMl0tYVsyXSpvWzFdLGFbMl0qb1swXS1hWzBdKm9bMl0sYVswXSpvWzFdLWFbMV0qb1swXV0pKX0pKTt2YXIgYT1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3Q6dChlKSxmYWNlOmV9fSkpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIHI9YVt0XTtyJiYoci5jaGlsZHJlbnx8KHIuY2hpbGRyZW49W10pKS5wdXNoKGFbZV0pfSkpLFZlKGFbMF0sKGZ1bmN0aW9uKHQsZSl7dmFyIHI9byhlKSxpPVtyKm8odCksciptKHQpLG0oZSldLHM9dDwteS8yP2U8MD82OjQ6dDwwP2U8MD8yOjA6dDx5LzI/ZTwwPzM6MTplPDA/Nzo1LGw9bltzXTtyZXR1cm4gYVtaZShsWzBdLGkpPDA/OCszKnM6WmUobFsxXSxpKTwwPzgrMypzKzE6WmUobFsyXSxpKTwwPzgrMypzKzI6c119KSkuYW5nbGUoLTMwKS5zY2FsZSgxMTAuNjI1KS5jZW50ZXIoWzAsNDVdKX0sdC5nZW9Qcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLnN0cmVhbTtpZighbil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcHJvamVjdGlvbiIpO3N3aXRjaCh0JiZ0LnR5cGUpe2Nhc2UiRmVhdHVyZSI6cj10cjticmVhaztjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjpyPSRlO2JyZWFrO2RlZmF1bHQ6cj1lcn1yZXR1cm4gcih0LG4pfSx0Lmdlb0dyaW5nb3J0ZW5RdWluY3VuY2lhbD1mdW5jdGlvbigpe3JldHVybiBzcihCdCkuc2NhbGUoMTc2LjQyMyl9LHQuZ2VvUGVpcmNlUXVpbmN1bmNpYWw9bHIsdC5nZW9QaWVyY2VRdWluY3VuY2lhbD1scix0Lmdlb1F1YW50aXplPWZ1bmN0aW9uKHQsZSl7aWYoISgwPD0oZT0rZSkmJmU8PTIwKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZGlnaXRzIik7ZnVuY3Rpb24gcih0KXt2YXIgcj10Lmxlbmd0aCxuPTIsaT1uZXcgQXJyYXkocik7Zm9yKGlbMF09K3RbMF0udG9GaXhlZChlKSxpWzFdPSt0WzFdLnRvRml4ZWQoZSk7bjxyOylpW25dPXRbbl0sKytuO3JldHVybiBpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQubWFwKHIpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXIodFswXSksbj1bZV0saT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1yKHRbaV0pOyhhLmxlbmd0aD4yfHxhWzBdIT1lWzBdfHxhWzFdIT1lWzFdKSYmKG4ucHVzaChhKSxlPWEpfXJldHVybiAxPT09bi5sZW5ndGgmJnQubGVuZ3RoPjEmJm4ucHVzaChyKHRbdC5sZW5ndGgtMV0pKSxufWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQubWFwKGkpfWZ1bmN0aW9uIG8odCl7aWYobnVsbD09dClyZXR1cm4gdDt2YXIgZTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAobyl9O2JyZWFrO2Nhc2UiUG9pbnQiOmU9e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpyKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpUG9pbnQiOmU9e3R5cGU6dC50eXBlLGNvb3JkaW5hdGVzOm4odC5jb29yZGluYXRlcyl9O2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6ZT17dHlwZTp0LnR5cGUsY29vcmRpbmF0ZXM6aSh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6ZT17dHlwZTp0LnR5cGUsY29vcmRpbmF0ZXM6YSh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmU9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlcy5tYXAoYSl9O2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHR9cmV0dXJuIG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGV9ZnVuY3Rpb24gcyh0KXt2YXIgZT17dHlwZToiRmVhdHVyZSIscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6byh0Lmdlb21ldHJ5KX07cmV0dXJuIG51bGwhPXQuaWQmJihlLmlkPXQuaWQpLG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGV9aWYobnVsbCE9dClzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmUiOnJldHVybiBzKHQpO2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnZhciBsPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6dC5mZWF0dXJlcy5tYXAocyl9O3JldHVybiBudWxsIT10LmJib3gmJihsLmJib3g9dC5iYm94KSxsO2RlZmF1bHQ6cmV0dXJuIG8odCl9cmV0dXJuIHR9LHQuZ2VvUXVpbmN1bmNpYWw9c3IsdC5nZW9SZWN0YW5ndWxhclBvbHljb25pYz1mdW5jdGlvbigpe3JldHVybiBLKGNyKS5zY2FsZSgxMzEuMjE1KX0sdC5nZW9SZWN0YW5ndWxhclBvbHljb25pY1Jhdz1jcix0Lmdlb1JvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihmcikuc2NhbGUoMTUyLjYzKX0sdC5nZW9Sb2JpbnNvblJhdz1mcix0Lmdlb1NhdGVsbGl0ZT1mdW5jdGlvbigpe3ZhciB0PTIscj0wLG49ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihociksaT1uKHQscik7cmV0dXJuIGkuZGlzdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih0PStlLHIpOnR9LGkudGlsdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQscj1lKk0pOnIqQX0saS5zY2FsZSg0MzIuMTQ3KS5jbGlwQW5nbGUoRSgxL3QpKkEtMWUtNil9LHQuZ2VvU2F0ZWxsaXRlUmF3PWhyLHQuZ2VvU2ludU1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oS3QpLnJvdGF0ZShbLTIwLC01NV0pLnNjYWxlKDE2NC4yNjMpLmNlbnRlcihbMCwtNS40MDM2XSl9LHQuZ2VvU2ludU1vbGx3ZWlkZVJhdz1LdCx0Lmdlb1NpbnVzb2lkYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFEpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvU2ludXNvaWRhbFJhdz1RLHQuZ2VvU3RpdGNoPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHQ7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlIjpyZXR1cm4gd3IodCk7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6dmFyIGU9e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcCh3cil9O3JldHVybiBudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxlO2RlZmF1bHQ6cmV0dXJuIFRyKHQpfX0sdC5nZW9UaW1lcz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oa3IpLnNjYWxlKDE0Ni4xNTMpfSx0Lmdlb1RpbWVzUmF3PWtyLHQuZ2VvVHdvUG9pbnRBemltdXRoYWw9U3IsdC5nZW9Ud29Qb2ludEF6aW11dGhhbFJhdz1Ncix0Lmdlb1R3b1BvaW50QXppbXV0aGFsVXNhPWZ1bmN0aW9uKCl7cmV0dXJuIFNyKFstMTU4LDIxLjVdLFstNzcsMzldKS5jbGlwQW5nbGUoNjApLnNjYWxlKDQwMCl9LHQuZ2VvVHdvUG9pbnRFcXVpZGlzdGFudD1Mcix0Lmdlb1R3b1BvaW50RXF1aWRpc3RhbnRSYXc9RXIsdC5nZW9Ud29Qb2ludEVxdWlkaXN0YW50VXNhPWZ1bmN0aW9uKCl7cmV0dXJuIExyKFstMTU4LDIxLjVdLFstNzcsMzldKS5jbGlwQW5nbGUoMTMwKS5zY2FsZSgxMjIuNTcxKX0sdC5nZW9WYW5EZXJHcmludGVuPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihDcikuc2NhbGUoNzkuNDE4Myl9LHQuZ2VvVmFuRGVyR3JpbnRlblJhdz1Dcix0Lmdlb1ZhbkRlckdyaW50ZW4yPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihQcikuc2NhbGUoNzkuNDE4Myl9LHQuZ2VvVmFuRGVyR3JpbnRlbjJSYXc9UHIsdC5nZW9WYW5EZXJHcmludGVuMz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oSXIpLnNjYWxlKDc5LjQxODMpfSx0Lmdlb1ZhbkRlckdyaW50ZW4zUmF3PUlyLHQuZ2VvVmFuRGVyR3JpbnRlbjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE9yKS5zY2FsZSgxMjcuMTYpfSx0Lmdlb1ZhbkRlckdyaW50ZW40UmF3PU9yLHQuZ2VvV2FnbmVyPURyLHQuZ2VvV2FnbmVyNz1mdW5jdGlvbigpe3JldHVybiBEcigpLnBvbGVsaW5lKDY1KS5wYXJhbGxlbHMoNjApLmluZmxhdGlvbigwKS5yYXRpbygyMDApLnNjYWxlKDE3Mi42MzMpfSx0Lmdlb1dhZ25lclJhdz16cix0Lmdlb1dhZ25lcjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEJyKS5zY2FsZSgxNzYuODQpfSx0Lmdlb1dhZ25lcjRSYXc9QnIsdC5nZW9XYWduZXI2PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihOcikuc2NhbGUoMTUyLjYzKX0sdC5nZW9XYWduZXI2UmF3PU5yLHQuZ2VvV2llY2hlbD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oanIpLnJvdGF0ZShbMCwtOTAsNDVdKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9XaWVjaGVsUmF3PWpyLHQuZ2VvV2lua2VsMz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oVXIpLnNjYWxlKDE1OC44MzcpfSx0Lmdlb1dpbmtlbDNSYXc9VXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxMDcsImQzLWdlbyI6MTE0fV0sMTE0OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1hcnJheSIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBufWZ1bmN0aW9uIG4oKXt0aGlzLnJlc2V0KCl9bi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXthKGksdCx0aGlzLnQpLGEodGhpcyxpLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1pLnQ6dGhpcy5zPWkudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgaT1uZXcgbjtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnM9ZStyLGk9bi1lLGE9bi1pO3QudD1lLWErKHItaSl9dmFyIG89MWUtNixzPU1hdGguUEksbD1zLzIsYz1zLzQsdT0yKnMsZj0xODAvcyxoPXMvMTgwLHA9TWF0aC5hYnMsZD1NYXRoLmF0YW4sbT1NYXRoLmF0YW4yLGc9TWF0aC5jb3Msdj1NYXRoLmNlaWwseT1NYXRoLmV4cCx4PU1hdGgubG9nLGI9TWF0aC5wb3csXz1NYXRoLnNpbix3PU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxUPU1hdGguc3FydCxrPU1hdGgudGFuO2Z1bmN0aW9uIEEodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/czpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdD4xP2w6dDwtMT8tbDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4odD1fKHQvMikpKnR9ZnVuY3Rpb24gRSgpe31mdW5jdGlvbiBMKHQsZSl7dCYmUC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZQW3QudHlwZV0odCxlKX12YXIgQz17RmVhdHVyZTpmdW5jdGlvbih0LGUpe0wodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KUwocltuXS5nZW9tZXRyeSxlKX19LFA9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7dD10LmNvb3JkaW5hdGVzLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyl0PXJbbl0sZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtJKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylJKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe08odC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylPKHJbbl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylMKHJbbl0sZSl9fTtmdW5jdGlvbiBJKHQsZSxyKXt2YXIgbixpPS0xLGE9dC5sZW5ndGgtcjtmb3IoZS5saW5lU3RhcnQoKTsrK2k8YTspbj10W2ldLGUucG9pbnQoblswXSxuWzFdLG5bMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylJKHRbcl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiB6KHQsZSl7dCYmQy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0NbdC50eXBlXSh0LGUpOkwodCxlKX12YXIgRCxSLEYsQixOLGo9cigpLFU9cigpLFY9e3BvaW50OkUsbGluZVN0YXJ0OkUsbGluZUVuZDpFLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2oucmVzZXQoKSxWLmxpbmVTdGFydD1ILFYubGluZUVuZD1xfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2o7VS5hZGQodDwwP3UrdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1FfSxzcGhlcmU6ZnVuY3Rpb24oKXtVLmFkZCh1KX19O2Z1bmN0aW9uIEgoKXtWLnBvaW50PUd9ZnVuY3Rpb24gcSgpe1koRCxSKX1mdW5jdGlvbiBHKHQsZSl7Vi5wb2ludD1ZLEQ9dCxSPWUsRj10Kj1oLEI9ZyhlPShlKj1oKS8yK2MpLE49XyhlKX1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9KHQqPWgpLUYsbj1yPj0wPzE6LTEsaT1uKnIsYT1nKGU9KGUqPWgpLzIrYyksbz1fKGUpLHM9TipvLGw9QiphK3MqZyhpKSx1PXMqbipfKGkpO2ouYWRkKG0odSxsKSksRj10LEI9YSxOPW99ZnVuY3Rpb24gVyh0KXtyZXR1cm5bbSh0WzFdLHRbMF0pLE0odFsyXSldfWZ1bmN0aW9uIFgodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1nKHIpO3JldHVybltuKmcoZSksbipfKGUpLF8ocildfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gSih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gSyh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIFEodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uICQodCl7dmFyIGU9VCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9dmFyIHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LGN0LHV0LGZ0LGh0LHB0LGR0LG10LGd0LHZ0LHl0LHh0LGJ0LF90LHd0LFR0LGt0LEF0LE10PXIoKSxTdD17cG9pbnQ6RXQsbGluZVN0YXJ0OkN0LGxpbmVFbmQ6UHQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7U3QucG9pbnQ9SXQsU3QubGluZVN0YXJ0PU90LFN0LmxpbmVFbmQ9enQsTXQucmVzZXQoKSxWLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Vi5wb2x5Z29uRW5kKCksU3QucG9pbnQ9RXQsU3QubGluZVN0YXJ0PUN0LFN0LmxpbmVFbmQ9UHQsajwwPyh0dD0tKHJ0PTE4MCksZXQ9LShudD05MCkpOk10Pm8/bnQ9OTA6TXQ8LW8mJihldD0tOTApLGN0WzBdPXR0LGN0WzFdPXJ0fSxzcGhlcmU6ZnVuY3Rpb24oKXt0dD0tKHJ0PTE4MCksZXQ9LShudD05MCl9fTtmdW5jdGlvbiBFdCh0LGUpe2x0LnB1c2goY3Q9W3R0PXQscnQ9dF0pLGU8ZXQmJihldD1lKSxlPm50JiYobnQ9ZSl9ZnVuY3Rpb24gTHQodCxlKXt2YXIgcj1YKFt0KmgsZSpoXSk7aWYoc3Qpe3ZhciBuPUooc3QsciksaT1KKFtuWzFdLC1uWzBdLDBdLG4pOyQoaSksaT1XKGkpO3ZhciBhLG89dC1pdCxzPW8+MD8xOi0xLGw9aVswXSpmKnMsYz1wKG8pPjE4MDtjXihzKml0PGwmJmw8cyp0KT8oYT1pWzFdKmYpPm50JiYobnQ9YSk6Y14ocyppdDwobD0obCszNjApJTM2MC0xODApJiZsPHMqdCk/KGE9LWlbMV0qZik8ZXQmJihldD1hKTooZTxldCYmKGV0PWUpLGU+bnQmJihudD1lKSksYz90PGl0P0R0KHR0LHQpPkR0KHR0LHJ0KSYmKHJ0PXQpOkR0KHQscnQpPkR0KHR0LHJ0KSYmKHR0PXQpOnJ0Pj10dD8odDx0dCYmKHR0PXQpLHQ+cnQmJihydD10KSk6dD5pdD9EdCh0dCx0KT5EdCh0dCxydCkmJihydD10KTpEdCh0LHJ0KT5EdCh0dCxydCkmJih0dD10KX1lbHNlIGx0LnB1c2goY3Q9W3R0PXQscnQ9dF0pO2U8ZXQmJihldD1lKSxlPm50JiYobnQ9ZSksc3Q9cixpdD10fWZ1bmN0aW9uIEN0KCl7U3QucG9pbnQ9THR9ZnVuY3Rpb24gUHQoKXtjdFswXT10dCxjdFsxXT1ydCxTdC5wb2ludD1FdCxzdD1udWxsfWZ1bmN0aW9uIEl0KHQsZSl7aWYoc3Qpe3ZhciByPXQtaXQ7TXQuYWRkKHAocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cil9ZWxzZSBhdD10LG90PWU7Vi5wb2ludCh0LGUpLEx0KHQsZSl9ZnVuY3Rpb24gT3QoKXtWLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHp0KCl7SXQoYXQsb3QpLFYubGluZUVuZCgpLHAoTXQpPm8mJih0dD0tKHJ0PTE4MCkpLGN0WzBdPXR0LGN0WzFdPXJ0LHN0PW51bGx9ZnVuY3Rpb24gRHQodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBGdCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9dmFyIEJ0PXtzcGhlcmU6RSxwb2ludDpOdCxsaW5lU3RhcnQ6VXQsbGluZUVuZDpxdCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtCdC5saW5lU3RhcnQ9R3QsQnQubGluZUVuZD1ZdH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0J0LmxpbmVTdGFydD1VdCxCdC5saW5lRW5kPXF0fX07ZnVuY3Rpb24gTnQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCk7anQocipnKHQpLHIqXyh0KSxfKGUpKX1mdW5jdGlvbiBqdCh0LGUscil7Kyt1dCxodCs9KHQtaHQpL3V0LHB0Kz0oZS1wdCkvdXQsZHQrPShyLWR0KS91dH1mdW5jdGlvbiBVdCgpe0J0LnBvaW50PVZ0fWZ1bmN0aW9uIFZ0KHQsZSl7dCo9aDt2YXIgcj1nKGUqPWgpO1R0PXIqZyh0KSxrdD1yKl8odCksQXQ9XyhlKSxCdC5wb2ludD1IdCxqdChUdCxrdCxBdCl9ZnVuY3Rpb24gSHQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCksbj1yKmcodCksaT1yKl8odCksYT1fKGUpLG89bShUKChvPWt0KmEtQXQqaSkqbysobz1BdCpuLVR0KmEpKm8rKG89VHQqaS1rdCpuKSpvKSxUdCpuK2t0KmkrQXQqYSk7ZnQrPW8sbXQrPW8qKFR0KyhUdD1uKSksZ3QrPW8qKGt0KyhrdD1pKSksdnQrPW8qKEF0KyhBdD1hKSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIHF0KCl7QnQucG9pbnQ9TnR9ZnVuY3Rpb24gR3QoKXtCdC5wb2ludD1XdH1mdW5jdGlvbiBZdCgpe1h0KF90LHd0KSxCdC5wb2ludD1OdH1mdW5jdGlvbiBXdCh0LGUpe190PXQsd3Q9ZSx0Kj1oLGUqPWgsQnQucG9pbnQ9WHQ7dmFyIHI9ZyhlKTtUdD1yKmcodCksa3Q9cipfKHQpLEF0PV8oZSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIFh0KHQsZSl7dCo9aDt2YXIgcj1nKGUqPWgpLG49cipnKHQpLGk9cipfKHQpLGE9XyhlKSxvPWt0KmEtQXQqaSxzPUF0Km4tVHQqYSxsPVR0Kmkta3QqbixjPVQobypvK3MqcytsKmwpLHU9TShjKSxmPWMmJi11L2M7eXQrPWYqbyx4dCs9ZipzLGJ0Kz1mKmwsZnQrPXUsbXQrPXUqKFR0KyhUdD1uKSksZ3QrPXUqKGt0KyhrdD1pKSksdnQrPXUqKEF0KyhBdD1hKSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIFp0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBKdCh0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gcj10KHIsbiksZShyWzBdLHJbMV0pfXJldHVybiB0LmludmVydCYmZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihyLG4pe3JldHVybihyPWUuaW52ZXJ0KHIsbikpJiZ0LmludmVydChyWzBdLHJbMV0pfSkscn1mdW5jdGlvbiBLdCh0LGUpe3JldHVybltwKHQpPnM/dCtNYXRoLnJvdW5kKC10L3UpKnU6dCxlXX1mdW5jdGlvbiBRdCh0LGUscil7cmV0dXJuKHQlPXUpP2V8fHI/SnQodGUodCksZWUoZSxyKSk6dGUodCk6ZXx8cj9lZShlLHIpOkt0fWZ1bmN0aW9uICR0KHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+cz9lLXU6ZTwtcz9lK3U6ZSxyXX19ZnVuY3Rpb24gdGUodCl7dmFyIGU9JHQodCk7cmV0dXJuIGUuaW52ZXJ0PSR0KC10KSxlfWZ1bmN0aW9uIGVlKHQsZSl7dmFyIHI9Zyh0KSxuPV8odCksaT1nKGUpLGE9XyhlKTtmdW5jdGlvbiBvKHQsZSl7dmFyIG89ZyhlKSxzPWcodCkqbyxsPV8odCkqbyxjPV8oZSksdT1jKnIrcypuO3JldHVyblttKGwqaS11KmEscypyLWMqbiksTSh1KmkrbCphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG89ZyhlKSxzPWcodCkqbyxsPV8odCkqbyxjPV8oZSksdT1jKmktbCphO3JldHVyblttKGwqaStjKmEscypyK3UqbiksTSh1KnItcypuKV19LG99ZnVuY3Rpb24gcmUodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qaCxlWzFdKmgpKVswXSo9ZixlWzFdKj1mLGV9cmV0dXJuIHQ9UXQodFswXSpoLHRbMV0qaCx0Lmxlbmd0aD4yP3RbMl0qaDowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKmgsZVsxXSpoKSlbMF0qPWYsZVsxXSo9ZixlfSxlfWZ1bmN0aW9uIG5lKHQsZSxyLG4saSxhKXtpZihyKXt2YXIgbz1nKGUpLHM9XyhlKSxsPW4qcjtudWxsPT1pPyhpPWUrbip1LGE9ZS1sLzIpOihpPWllKG8saSksYT1pZShvLGEpLChuPjA/aTxhOmk+YSkmJihpKz1uKnUpKTtmb3IodmFyIGMsZj1pO24+MD9mPmE6ZjxhO2YtPWwpYz1XKFtvLC1zKmcoZiksLXMqXyhmKV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gaWUodCxlKXsoZT1YKGUpKVswXS09dCwkKGUpO3ZhciByPUEoLWVbMV0pO3JldHVybigoLWVbMl08MD8tcjpyKSt1LW8pJXV9ZnVuY3Rpb24gYWUoKXt2YXIgdCxlPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihlLHIsbil7dC5wdXNoKFtlLHIsbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6RSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBvZSh0LGUpe3JldHVybiBwKHRbMF0tZVswXSk8byYmcCh0WzFdLWVbMV0pPG99ZnVuY3Rpb24gc2UodCxlLHIsbil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBsZSh0LGUscixuLGkpe3ZhciBhLHMsbD1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLHIsbj10WzBdLHM9dFtlXTtpZihvZShuLHMpKXtpZighblsyXSYmIXNbMl0pe2ZvcihpLmxpbmVTdGFydCgpLGE9MDthPGU7KythKWkucG9pbnQoKG49dFthXSlbMF0sblsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9c1swXSs9MipvfWwucHVzaChyPW5ldyBzZShuLHQsbnVsbCwhMCkpLGMucHVzaChyLm89bmV3IHNlKG4sbnVsbCxyLCExKSksbC5wdXNoKHI9bmV3IHNlKHMsdCxudWxsLCExKSksYy5wdXNoKHIubz1uZXcgc2UocyxudWxsLHIsITApKX19KSksbC5sZW5ndGgpe2ZvcihjLnNvcnQoZSksY2UobCksY2UoYyksYT0wLHM9Yy5sZW5ndGg7YTxzOysrYSljW2FdLmU9cj0hcjtmb3IodmFyIHUsZixoPWxbMF07Oyl7Zm9yKHZhciBwPWgsZD0hMDtwLnY7KWlmKChwPXAubik9PT1oKXJldHVybjt1PXAueixpLmxpbmVTdGFydCgpO2Rve2lmKHAudj1wLm8udj0hMCxwLmUpe2lmKGQpZm9yKGE9MCxzPXUubGVuZ3RoO2E8czsrK2EpaS5wb2ludCgoZj11W2FdKVswXSxmWzFdKTtlbHNlIG4ocC54LHAubi54LDEsaSk7cD1wLm59ZWxzZXtpZihkKWZvcih1PXAucC56LGE9dS5sZW5ndGgtMTthPj0wOy0tYSlpLnBvaW50KChmPXVbYV0pWzBdLGZbMV0pO2Vsc2UgbihwLngscC5wLngsLTEsaSk7cD1wLnB9dT0ocD1wLm8pLnosZD0hZH13aGlsZSghcC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGNlKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fUt0LmludmVydD1LdDt2YXIgdWU9cigpO2Z1bmN0aW9uIGZlKHQpe3JldHVybiBwKHRbMF0pPD1zP3RbMF06dyh0WzBdKSooKHAodFswXSkrcykldS1zKX1mdW5jdGlvbiBoZSh0LGUpe3ZhciByPWZlKGUpLG49ZVsxXSxpPV8obiksYT1bXyhyKSwtZyhyKSwwXSxmPTAsaD0wO3VlLnJlc2V0KCksMT09PWk/bj1sK286LTE9PT1pJiYobj0tbC1vKTtmb3IodmFyIHA9MCxkPXQubGVuZ3RoO3A8ZDsrK3ApaWYoeT0odj10W3BdKS5sZW5ndGgpZm9yKHZhciB2LHkseD12W3ktMV0sYj1mZSh4KSx3PXhbMV0vMitjLFQ9Xyh3KSxrPWcodyksQT0wO0E8eTsrK0EsYj1FLFQ9QyxrPVAseD1TKXt2YXIgUz12W0FdLEU9ZmUoUyksTD1TWzFdLzIrYyxDPV8oTCksUD1nKEwpLEk9RS1iLE89ST49MD8xOi0xLHo9TypJLEQ9ej5zLFI9VCpDO2lmKHVlLmFkZChtKFIqTypfKHopLGsqUCtSKmcoeikpKSxmKz1EP0krTyp1OkksRF5iPj1yXkU+PXIpe3ZhciBGPUooWCh4KSxYKFMpKTskKEYpO3ZhciBCPUooYSxGKTskKEIpO3ZhciBOPShEXkk+PTA/LTE6MSkqTShCWzJdKTsobj5OfHxuPT09TiYmKEZbMF18fEZbMV0pKSYmKGgrPUReST49MD8xOi0xKX19cmV0dXJuKGY8LW98fGY8byYmdWU8LW8pXjEmaH1mdW5jdGlvbiBwZSh0LHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIG8scyxsLGM9cihhKSx1PWFlKCksZj1yKHUpLGg9ITEscD17cG9pbnQ6ZCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cC5wb2ludD15LHAubGluZVN0YXJ0PXgscC5saW5lRW5kPWIscz1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cC5wb2ludD1kLHAubGluZVN0YXJ0PWcscC5saW5lRW5kPXYscz1lLm1lcmdlKHMpO3ZhciB0PWhlKG8saSk7cy5sZW5ndGg/KGh8fChhLnBvbHlnb25TdGFydCgpLGg9ITApLGxlKHMsbWUsdCxuLGEpKTp0JiYoaHx8KGEucG9seWdvblN0YXJ0KCksaD0hMCksYS5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSxoJiYoYS5wb2x5Z29uRW5kKCksaD0hMSkscz1vPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2EucG9seWdvblN0YXJ0KCksYS5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpLGEucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gZChlLHIpe3QoZSxyKSYmYS5wb2ludChlLHIpfWZ1bmN0aW9uIG0odCxlKXtjLnBvaW50KHQsZSl9ZnVuY3Rpb24gZygpe3AucG9pbnQ9bSxjLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHYoKXtwLnBvaW50PWQsYy5saW5lRW5kKCl9ZnVuY3Rpb24geSh0LGUpe2wucHVzaChbdCxlXSksZi5wb2ludCh0LGUpfWZ1bmN0aW9uIHgoKXtmLmxpbmVTdGFydCgpLGw9W119ZnVuY3Rpb24gYigpe3kobFswXVswXSxsWzBdWzFdKSxmLmxpbmVFbmQoKTt2YXIgdCxlLHIsbixpPWYuY2xlYW4oKSxjPXUucmVzdWx0KCkscD1jLmxlbmd0aDtpZihsLnBvcCgpLG8ucHVzaChsKSxsPW51bGwscClpZigxJmkpe2lmKChlPShyPWNbMF0pLmxlbmd0aC0xKT4wKXtmb3IoaHx8KGEucG9seWdvblN0YXJ0KCksaD0hMCksYS5saW5lU3RhcnQoKSx0PTA7dDxlOysrdClhLnBvaW50KChuPXJbdF0pWzBdLG5bMV0pO2EubGluZUVuZCgpfX1lbHNlIHA+MSYmMiZpJiZjLnB1c2goYy5wb3AoKS5jb25jYXQoYy5zaGlmdCgpKSkscy5wdXNoKGMuZmlsdGVyKGRlKSl9cmV0dXJuIHB9fWZ1bmN0aW9uIGRlKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIG1lKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLWwtbzpsLXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS1sLW86bC1lWzFdKX12YXIgZ2U9cGUoKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSwoZnVuY3Rpb24odCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLGMpe3ZhciB1PWE+MD9zOi1zLGY9cChhLXIpO3AoZi1zKTxvPyh0LnBvaW50KHIsbj0obitjKS8yPjA/bDotbCksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh1LG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT11JiZmPj1zJiYocChyLWkpPG8mJihyLT1pKm8pLHAoYS11KTxvJiYoYS09dSpvKSxuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscz1fKHQtcik7cmV0dXJuIHAocyk+bz9kKChfKGUpKihhPWcobikpKl8ociktXyhuKSooaT1nKGUpKSpfKHQpKS8oaSphKnMpKTooZStuKS8yfShyLG4sYSxjKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsbiksZT0wKSx0LnBvaW50KHI9YSxuPWMpLGk9dX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSksKGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpO2lmKG51bGw9PXQpaT1yKmwsbi5wb2ludCgtcyxpKSxuLnBvaW50KDAsaSksbi5wb2ludChzLGkpLG4ucG9pbnQocywwKSxuLnBvaW50KHMsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtcywtaSksbi5wb2ludCgtcywwKSxuLnBvaW50KC1zLGkpO2Vsc2UgaWYocCh0WzBdLWVbMF0pPm8pe3ZhciBhPXRbMF08ZVswXT9zOi1zO2k9ciphLzIsbi5wb2ludCgtYSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChhLGkpfWVsc2Ugbi5wb2ludChlWzBdLGVbMV0pfSksWy1zLC1sXSk7ZnVuY3Rpb24gdmUodCl7dmFyIGU9Zyh0KSxyPTYqaCxuPWU+MCxpPXAoZSk+bztmdW5jdGlvbiBhKHQscil7cmV0dXJuIGcodCkqZyhyKT5lfWZ1bmN0aW9uIGwodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1KKFgodCksWChyKSksbD1aKGEsYSksYz1hWzBdLHU9bC1jKmM7aWYoIXUpcmV0dXJuIW4mJnQ7dmFyIGY9ZSpsL3UsaD0tZSpjL3UsZD1KKGksYSksbT1RKGksZik7SyhtLFEoYSxoKSk7dmFyIGc9ZCx2PVoobSxnKSx5PVooZyxnKSx4PXYqdi15KihaKG0sbSktMSk7aWYoISh4PDApKXt2YXIgYj1UKHgpLF89UShnLCgtdi1iKS95KTtpZihLKF8sbSksXz1XKF8pLCFuKXJldHVybiBfO3ZhciB3LGs9dFswXSxBPXJbMF0sTT10WzFdLFM9clsxXTtBPGsmJih3PWssaz1BLEE9dyk7dmFyIEU9QS1rLEw9cChFLXMpPG87aWYoIUwmJlM8TSYmKHc9TSxNPVMsUz13KSxMfHxFPG8/TD9NK1M+MF5fWzFdPChwKF9bMF0tayk8bz9NOlMpOk08PV9bMV0mJl9bMV08PVM6RT5zXihrPD1fWzBdJiZfWzBdPD1BKSl7dmFyIEM9UShnLCgtditiKS95KTtyZXR1cm4gSyhDLG0pLFtfLFcoQyldfX19ZnVuY3Rpb24gYyhlLHIpe3ZhciBpPW4/dDpzLXQsYT0wO3JldHVybiBlPC1pP2F8PTE6ZT5pJiYoYXw9MikscjwtaT9hfD00OnI+aSYmKGF8PTgpLGF9cmV0dXJuIHBlKGEsKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbyx1LGY7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3U9bz0hMSxmPTF9LHBvaW50OmZ1bmN0aW9uKGgscCl7dmFyIGQsbT1baCxwXSxnPWEoaCxwKSx2PW4/Zz8wOmMoaCxwKTpnP2MoaCsoaDwwP3M6LXMpLHApOjA7aWYoIWUmJih1PW89ZykmJnQubGluZVN0YXJ0KCksZyE9PW8mJighKGQ9bChlLG0pKXx8b2UoZSxkKXx8b2UobSxkKSkmJihtWzJdPTEpLGchPT1vKWY9MCxnPyh0LmxpbmVTdGFydCgpLGQ9bChtLGUpLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9bChlLG0pLHQucG9pbnQoZFswXSxkWzFdLDIpLHQubGluZUVuZCgpKSxlPWQ7ZWxzZSBpZihpJiZlJiZuXmcpe3ZhciB5O3Ymcnx8ISh5PWwobSxlLCEwKSl8fChmPTAsbj8odC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSksdC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh5WzBdWzBdLHlbMF1bMV0sMykpKX0hZ3x8ZSYmb2UoZSxtKXx8dC5wb2ludChtWzBdLG1bMV0pLGU9bSxvPWcscj12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7byYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBmfCh1JiZvKTw8MX19fSksKGZ1bmN0aW9uKGUsbixpLGEpe25lKGEsdCxyLGksZSxuKX0pLG4/WzAsLXRdOlstcyx0LXNdKX1mdW5jdGlvbiB5ZSh0LHIsbixpKXtmdW5jdGlvbiBhKGUsYSl7cmV0dXJuIHQ8PWUmJmU8PW4mJnI8PWEmJmE8PWl9ZnVuY3Rpb24gcyhlLGEsbyxzKXt2YXIgYz0wLGY9MDtpZihudWxsPT1lfHwoYz1sKGUsbykpIT09KGY9bChhLG8pKXx8dShlLGEpPDBebz4wKWRve3MucG9pbnQoMD09PWN8fDM9PT1jP3Q6bixjPjE/aTpyKX13aGlsZSgoYz0oYytvKzQpJTQpIT09Zik7ZWxzZSBzLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gbChlLGkpe3JldHVybiBwKGVbMF0tdCk8bz9pPjA/MDozOnAoZVswXS1uKTxvP2k+MD8yOjE6cChlWzFdLXIpPG8/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdSh0LngsZS54KX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bCh0LDEpLG49bChlLDEpO3JldHVybiByIT09bj9yLW46MD09PXI/ZVsxXS10WzFdOjE9PT1yP3RbMF0tZVswXToyPT09cj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihvKXt2YXIgbCx1LGYsaCxwLGQsbSxnLHYseSx4LGI9byxfPWFlKCksdz17cG9pbnQ6VCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt3LnBvaW50PWssdSYmdS5wdXNoKGY9W10pO3k9ITAsdj0hMSxtPWc9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmKGsoaCxwKSxkJiZ2JiZfLnJlam9pbigpLGwucHVzaChfLnJlc3VsdCgpKSk7dy5wb2ludD1ULHYmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPV8sbD1bXSx1PVtdLHg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgcj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MCxuPXUubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBhLG8scz11W3JdLGw9MSxjPXMubGVuZ3RoLGY9c1swXSxoPWZbMF0scD1mWzFdO2w8YzsrK2wpYT1oLG89cCxmPXNbbF0saD1mWzBdLHA9ZlsxXSxvPD1pP3A+aSYmKGgtYSkqKGktbyk+KHAtbykqKHQtYSkmJisrZTpwPD1pJiYoaC1hKSooaS1vKTwocC1vKSoodC1hKSYmLS1lO3JldHVybiBlfSgpLG49eCYmcixhPShsPWUubWVyZ2UobCkpLmxlbmd0aDsobnx8YSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLHMobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGEmJmxlKGwsYyxyLHMsbyksby5wb2x5Z29uRW5kKCkpO2I9byxsPXU9Zj1udWxsfX07ZnVuY3Rpb24gVCh0LGUpe2EodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIGsoZSxvKXt2YXIgcz1hKGUsbyk7aWYodSYmZi5wdXNoKFtlLG9dKSx5KWg9ZSxwPW8sZD1zLHk9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChlLG8pKTtlbHNlIGlmKHMmJnYpYi5wb2ludChlLG8pO2Vsc2V7dmFyIGw9W209TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksbSkpLGc9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksZykpXSxjPVtlPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGUpKSxvPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LG8pKV07IWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzPXRbMF0sbD10WzFdLGM9MCx1PTEsZj1lWzBdLXMsaD1lWzFdLWw7aWYobz1yLXMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzxjKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9aWYobz1pLXMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz51KXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoZj4wKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9aWYobz1uLWwsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxjKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9aWYobz1hLWwsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz51KXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoaD4wKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9cmV0dXJuIGM+MCYmKHRbMF09cytjKmYsdFsxXT1sK2MqaCksdTwxJiYoZVswXT1zK3UqZixlWzFdPWwrdSpoKSwhMH19fX19KGwsYyx0LHIsbixpKT9zJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGUsbykseD0hMSk6KHZ8fChiLmxpbmVTdGFydCgpLGIucG9pbnQobFswXSxsWzFdKSksYi5wb2ludChjWzBdLGNbMV0pLHN8fGIubGluZUVuZCgpLHg9ITEpfW09ZSxnPW8sdj1zfXJldHVybiB3fX12YXIgeGUsYmUsX2Usd2U9cigpLFRlPXtzcGhlcmU6RSxwb2ludDpFLGxpbmVTdGFydDpmdW5jdGlvbigpe1RlLnBvaW50PUFlLFRlLmxpbmVFbmQ9a2V9LGxpbmVFbmQ6RSxwb2x5Z29uU3RhcnQ6RSxwb2x5Z29uRW5kOkV9O2Z1bmN0aW9uIGtlKCl7VGUucG9pbnQ9VGUubGluZUVuZD1FfWZ1bmN0aW9uIEFlKHQsZSl7eGU9dCo9aCxiZT1fKGUqPWgpLF9lPWcoZSksVGUucG9pbnQ9TWV9ZnVuY3Rpb24gTWUodCxlKXt0Kj1oO3ZhciByPV8oZSo9aCksbj1nKGUpLGk9cCh0LXhlKSxhPWcoaSksbz1uKl8oaSkscz1fZSpyLWJlKm4qYSxsPWJlKnIrX2UqbiphO3dlLmFkZChtKFQobypvK3MqcyksbCkpLHhlPXQsYmU9cixfZT1ufWZ1bmN0aW9uIFNlKHQpe3JldHVybiB3ZS5yZXNldCgpLHoodCxUZSksK3dlfXZhciBFZT1bbnVsbCxudWxsXSxMZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6RWV9O2Z1bmN0aW9uIENlKHQsZSl7cmV0dXJuIEVlWzBdPXQsRWVbMV09ZSxTZShMZSl9dmFyIFBlPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9lKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihPZShyW25dLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0sSWU9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiB6ZSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih6ZShyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIERlKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoRGUocltuXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBSZSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJlKHJbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihPZShyW25dLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gT2UodCxlKXtyZXR1cm4hKCF0fHwhSWUuaGFzT3duUHJvcGVydHkodC50eXBlKSkmJkllW3QudHlwZV0odCxlKX1mdW5jdGlvbiB6ZSh0LGUpe3JldHVybiAwPT09Q2UodCxlKX1mdW5jdGlvbiBEZSh0LGUpe2Zvcih2YXIgcixuLGksYT0wLG89dC5sZW5ndGg7YTxvO2ErKyl7aWYoMD09PShuPUNlKHRbYV0sZSkpKXJldHVybiEwO2lmKGE+MCYmKGk9Q2UodFthXSx0W2EtMV0pKT4wJiZyPD1pJiZuPD1pJiYocituLWkpKigxLU1hdGgucG93KChyLW4pL2ksMikpPDFlLTEyKmkpcmV0dXJuITA7cj1ufXJldHVybiExfWZ1bmN0aW9uIFJlKHQsZSl7cmV0dXJuISFoZSh0Lm1hcChGZSksQmUoZSkpfWZ1bmN0aW9uIEZlKHQpe3JldHVybih0PXQubWFwKEJlKSkucG9wKCksdH1mdW5jdGlvbiBCZSh0KXtyZXR1cm5bdFswXSpoLHRbMV0qaF19ZnVuY3Rpb24gTmUodCxyLG4pe3ZhciBpPWUucmFuZ2UodCxyLW8sbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBqZSh0LHIsbil7dmFyIGk9ZS5yYW5nZSh0LHItbyxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIFVlKCl7dmFyIHQscixuLGksYSxzLGwsYyx1LGYsaCxkLG09MTAsZz1tLHk9OTAseD0zNjAsYj0yLjU7ZnVuY3Rpb24gXygpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOncoKX19ZnVuY3Rpb24gdygpe3JldHVybiBlLnJhbmdlKHYoaS95KSp5LG4seSkubWFwKGgpLmNvbmNhdChlLnJhbmdlKHYoYy94KSp4LGwseCkubWFwKGQpKS5jb25jYXQoZS5yYW5nZSh2KHIvbSkqbSx0LG0pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHAodCV5KT5vfSkpLm1hcCh1KSkuY29uY2F0KGUucmFuZ2UodihzL2cpKmcsYSxnKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBwKHQleCk+b30pKS5tYXAoZikpfXJldHVybiBfLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHcoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pKX0sXy5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChkKGwpLnNsaWNlKDEpLGgobikucmV2ZXJzZSgpLnNsaWNlKDEpLGQoYykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSxfLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9fLmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOl8uZXh0ZW50TWlub3IoKX0sXy5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGM9K3RbMF1bMV0sbD0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksYz5sJiYodD1jLGM9bCxsPXQpLF8ucHJlY2lzaW9uKGIpKTpbW2ksY10sW24sbF1dfSxfLmV4dGVudE1pbm9yPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStlWzBdWzBdLHQ9K2VbMV1bMF0scz0rZVswXVsxXSxhPStlWzFdWzFdLHI+dCYmKGU9cixyPXQsdD1lKSxzPmEmJihlPXMscz1hLGE9ZSksXy5wcmVjaXNpb24oYikpOltbcixzXSxbdCxhXV19LF8uc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9fLnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6Xy5zdGVwTWlub3IoKX0sXy5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3RbMF0seD0rdFsxXSxfKTpbeSx4XX0sXy5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3RbMF0sZz0rdFsxXSxfKTpbbSxnXX0sXy5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K2UsdT1OZShzLGEsOTApLGY9amUocix0LGIpLGg9TmUoYyxsLDkwKSxkPWplKGksbixiKSxfKTpifSxfLmV4dGVudE1ham9yKFtbLTE4MCwtOTArb10sWzE4MCw5MC1vXV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAtb10sWzE4MCw4MCtvXV0pfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0fXZhciBIZSxxZSxHZSxZZSxXZT1yKCksWGU9cigpLFplPXtwb2ludDpFLGxpbmVTdGFydDpFLGxpbmVFbmQ6RSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtaZS5saW5lU3RhcnQ9SmUsWmUubGluZUVuZD0kZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1plLmxpbmVTdGFydD1aZS5saW5lRW5kPVplLnBvaW50PUUsV2UuYWRkKHAoWGUpKSxYZS5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1XZS8yO3JldHVybiBXZS5yZXNldCgpLHR9fTtmdW5jdGlvbiBKZSgpe1plLnBvaW50PUtlfWZ1bmN0aW9uIEtlKHQsZSl7WmUucG9pbnQ9UWUsSGU9R2U9dCxxZT1ZZT1lfWZ1bmN0aW9uIFFlKHQsZSl7WGUuYWRkKFllKnQtR2UqZSksR2U9dCxZZT1lfWZ1bmN0aW9uICRlKCl7UWUoSGUscWUpfXZhciB0cj0xLzAsZXI9dHIscnI9LXRyLG5yPXJyLGlyPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8dHImJih0cj10KTt0PnJyJiYocnI9dCk7ZTxlciYmKGVyPWUpO2U+bnImJihucj1lKX0sbGluZVN0YXJ0OkUsbGluZUVuZDpFLHBvbHlnb25TdGFydDpFLHBvbHlnb25FbmQ6RSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW3RyLGVyXSxbcnIsbnJdXTtyZXR1cm4gcnI9bnI9LShlcj10cj0xLzApLHR9fTt2YXIgYXIsb3Isc3IsbHIsY3I9MCx1cj0wLGZyPTAsaHI9MCxwcj0wLGRyPTAsbXI9MCxncj0wLHZyPTAseXI9e3BvaW50OnhyLGxpbmVTdGFydDpicixsaW5lRW5kOlRyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3lyLmxpbmVTdGFydD1rcix5ci5saW5lRW5kPUFyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7eXIucG9pbnQ9eHIseXIubGluZVN0YXJ0PWJyLHlyLmxpbmVFbmQ9VHJ9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXZyP1ttci92cixnci92cl06ZHI/W2hyL2RyLHByL2RyXTpmcj9bY3IvZnIsdXIvZnJdOltOYU4sTmFOXTtyZXR1cm4gY3I9dXI9ZnI9aHI9cHI9ZHI9bXI9Z3I9dnI9MCx0fX07ZnVuY3Rpb24geHIodCxlKXtjcis9dCx1cis9ZSwrK2ZyfWZ1bmN0aW9uIGJyKCl7eXIucG9pbnQ9X3J9ZnVuY3Rpb24gX3IodCxlKXt5ci5wb2ludD13cix4cihzcj10LGxyPWUpfWZ1bmN0aW9uIHdyKHQsZSl7dmFyIHI9dC1zcixuPWUtbHIsaT1UKHIqcituKm4pO2hyKz1pKihzcit0KS8yLHByKz1pKihscitlKS8yLGRyKz1pLHhyKHNyPXQsbHI9ZSl9ZnVuY3Rpb24gVHIoKXt5ci5wb2ludD14cn1mdW5jdGlvbiBrcigpe3lyLnBvaW50PU1yfWZ1bmN0aW9uIEFyKCl7U3IoYXIsb3IpfWZ1bmN0aW9uIE1yKHQsZSl7eXIucG9pbnQ9U3IseHIoYXI9c3I9dCxvcj1scj1lKX1mdW5jdGlvbiBTcih0LGUpe3ZhciByPXQtc3Isbj1lLWxyLGk9VChyKnIrbipuKTtocis9aSooc3IrdCkvMixwcis9aSoobHIrZSkvMixkcis9aSxtcis9KGk9bHIqdC1zciplKSooc3IrdCksZ3IrPWkqKGxyK2UpLHZyKz0zKmkseHIoc3I9dCxscj1lKX1mdW5jdGlvbiBFcih0KXt0aGlzLl9jb250ZXh0PXR9RXIucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLHUpfX0scmVzdWx0OkV9O3ZhciBMcixDcixQcixJcixPcix6cj1yKCksRHI9e3BvaW50OkUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7RHIucG9pbnQ9UnJ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtMciYmRnIoQ3IsUHIpLERyLnBvaW50PUV9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0xyPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7THI9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K3pyO3JldHVybiB6ci5yZXNldCgpLHR9fTtmdW5jdGlvbiBScih0LGUpe0RyLnBvaW50PUZyLENyPUlyPXQsUHI9T3I9ZX1mdW5jdGlvbiBGcih0LGUpe0lyLT10LE9yLT1lLHpyLmFkZChUKElyKklyK09yKk9yKSksSXI9dCxPcj1lfWZ1bmN0aW9uIEJyKCl7dGhpcy5fc3RyaW5nPVtdfWZ1bmN0aW9uIE5yKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifWZ1bmN0aW9uIGpyKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1uZXcgVXI7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByLnN0cmVhbT1lLHJ9fWZ1bmN0aW9uIFVyKCl7fWZ1bmN0aW9uIFZyKHQsZSxyKXt2YXIgbj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1uJiZ0LmNsaXBFeHRlbnQobnVsbCkseihyLHQuc3RyZWFtKGlyKSksZShpci5yZXN1bHQoKSksbnVsbCE9biYmdC5jbGlwRXh0ZW50KG4pLHR9ZnVuY3Rpb24gSHIodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj1lWzFdWzBdLWVbMF1bMF0saT1lWzFdWzFdLWVbMF1bMV0sYT1NYXRoLm1pbihuLyhyWzFdWzBdLXJbMF1bMF0pLGkvKHJbMV1bMV0tclswXVsxXSkpLG89K2VbMF1bMF0rKG4tYSooclsxXVswXStyWzBdWzBdKSkvMixzPStlWzBdWzFdKyhpLWEqKHJbMV1bMV0rclswXVsxXSkpLzI7dC5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtvLHNdKX0pLHIpfWZ1bmN0aW9uIHFyKHQsZSxyKXtyZXR1cm4gSHIodCxbWzAsMF0sZV0scil9ZnVuY3Rpb24gR3IodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj0rZSxpPW4vKHJbMV1bMF0tclswXVswXSksYT0obi1pKihyWzFdWzBdK3JbMF1bMF0pKS8yLG89LWkqclswXVsxXTt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW2Esb10pfSkscil9ZnVuY3Rpb24gWXIodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj0rZSxpPW4vKHJbMV1bMV0tclswXVsxXSksYT0taSpyWzBdWzBdLG89KG4taSooclsxXVsxXStyWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW2Esb10pfSkscil9QnIucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOk5yKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9TnIodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fSxVci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVyLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBXcj1nKDMwKmgpO2Z1bmN0aW9uIFhyKHQsZSl7cmV0dXJuK2U/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKG4saSxhLHMsbCxjLHUsZixoLGQsZyx2LHkseCl7dmFyIGI9dS1uLF89Zi1pLHc9YipiK18qXztpZih3PjQqZSYmeS0tKXt2YXIgaz1zK2QsQT1sK2csUz1jK3YsRT1UKGsqaytBKkErUypTKSxMPU0oUy89RSksQz1wKHAoUyktMSk8b3x8cChhLWgpPG8/KGEraCkvMjptKEEsayksUD10KEMsTCksST1QWzBdLE89UFsxXSx6PUktbixEPU8taSxSPV8qei1iKkQ7KFIqUi93PmV8fHAoKGIqeitfKkQpL3ctLjUpPi4zfHxzKmQrbCpnK2MqdjxXcikmJihyKG4saSxhLHMsbCxjLEksTyxDLGsvPUUsQS89RSxTLHkseCkseC5wb2ludChJLE8pLHIoSSxPLEMsayxBLFMsdSxmLGgsZCxnLHYseSx4KSl9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbT17cG9pbnQ6ZyxsaW5lU3RhcnQ6dixsaW5lRW5kOngscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxtLmxpbmVTdGFydD1ifSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksbS5saW5lU3RhcnQ9dn19O2Z1bmN0aW9uIGcocixuKXtyPXQocixuKSxlLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gdigpe3U9TmFOLG0ucG9pbnQ9eSxlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHkobixpKXt2YXIgYT1YKFtuLGldKSxvPXQobixpKTtyKHUsZixjLGgscCxkLHU9b1swXSxmPW9bMV0sYz1uLGg9YVswXSxwPWFbMV0sZD1hWzJdLDE2LGUpLGUucG9pbnQodSxmKX1mdW5jdGlvbiB4KCl7bS5wb2ludD1nLGUubGluZUVuZCgpfWZ1bmN0aW9uIGIoKXt2KCksbS5wb2ludD1fLG0ubGluZUVuZD13fWZ1bmN0aW9uIF8odCxlKXt5KG49dCxlKSxpPXUsYT1mLG89aCxzPXAsbD1kLG0ucG9pbnQ9eX1mdW5jdGlvbiB3KCl7cih1LGYsYyxoLHAsZCxpLGEsbixvLHMsbCwxNixlKSxtLmxpbmVFbmQ9eCx4KCl9cmV0dXJuIG19fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiBqcih7cG9pbnQ6ZnVuY3Rpb24oZSxyKXtlPXQoZSxyKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX12YXIgWnI9anIoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCpoLGUqaCl9fSk7ZnVuY3Rpb24gSnIodCxlLHIsbixpKXtmdW5jdGlvbiBhKGEsbyl7cmV0dXJuW2UrdCooYSo9biksci10KihvKj1pKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKGEsbyl7cmV0dXJuWyhhLWUpL3Qqbiwoci1vKS90KmldfSxhfWZ1bmN0aW9uIEtyKHQsZSxyLG4saSxhKXt2YXIgbz1nKGEpLHM9XyhhKSxsPW8qdCxjPXMqdCx1PW8vdCxmPXMvdCxoPShzKnItbyplKS90LHA9KHMqZStvKnIpL3Q7ZnVuY3Rpb24gZCh0LGEpe3JldHVybltsKih0Kj1uKS1jKihhKj1pKStlLHItYyp0LWwqYV19cmV0dXJuIGQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW24qKHUqdC1mKmUraCksaSoocC1mKnQtdSplKV19LGR9ZnVuY3Rpb24gUXIodCl7cmV0dXJuICRyKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gJHIodCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUscD0xNTAsZD00ODAsbT0yNTAsZz0wLHY9MCx5PTAseD0wLGI9MCxfPTAsdz0xLGs9MSxBPW51bGwsTT1nZSxTPW51bGwsRT1WZSxMPS41O2Z1bmN0aW9uIEModCl7cmV0dXJuIGwodFswXSpoLHRbMV0qaCl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4odD1sLmludmVydCh0WzBdLHRbMV0pKSYmW3RbMF0qZix0WzFdKmZdfWZ1bmN0aW9uIEkoKXt2YXIgdD1LcihwLDAsMCx3LGssXykuYXBwbHkobnVsbCxlKGcsdikpLG49KF8/S3I6SnIpKHAsZC10WzBdLG0tdFsxXSx3LGssXyk7cmV0dXJuIHI9UXQoeSx4LGIpLHM9SnQoZSxuKSxsPUp0KHIscyksbz1YcihzLEwpLE8oKX1mdW5jdGlvbiBPKCl7cmV0dXJuIGM9dT1udWxsLEN9cmV0dXJuIEMuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9WnIoZnVuY3Rpb24odCl7cmV0dXJuIGpyKHtwb2ludDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX0ocikoTShvKEUodT10KSkpKSl9LEMucHJlY2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT10LEE9dm9pZCAwLE8oKSk6TX0sQy5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT10LFM9bj1pPWE9bnVsbCxPKCkpOkV9LEMuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0P3ZlKEE9dCpoKTooQT1udWxsLGdlKSxPKCkpOkEqZn0sQy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFM9bj1pPWE9bnVsbCxWZSk6eWUoUz0rdFswXVswXSxuPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTygpKTpudWxsPT1TP251bGw6W1tTLG5dLFtpLGFdXX0sQy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdCxJKCkpOnB9LEMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLG09K3RbMV0sSSgpKTpbZCxtXX0sQy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dFswXSUzNjAqaCx2PXRbMV0lMzYwKmgsSSgpKTpbZypmLHYqZl19LEMucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXRbMF0lMzYwKmgseD10WzFdJTM2MCpoLGI9dC5sZW5ndGg+Mj90WzJdJTM2MCpoOjAsSSgpKTpbeSpmLHgqZixiKmZdfSxDLmFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQlMzYwKmgsSSgpKTpfKmZ9LEMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dD8tMToxLEkoKSk6dzwwfSxDLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXQ/LTE6MSxJKCkpOms8MH0sQy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89WHIocyxMPXQqdCksTygpKTpUKEwpfSxDLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBIcihDLHQsZSl9LEMuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBxcihDLHQsZSl9LEMuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3IoQyx0LGUpfSxDLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBZcihDLHQsZSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksQy5pbnZlcnQ9ZS5pbnZlcnQmJlAsSSgpfX1mdW5jdGlvbiB0bih0KXt2YXIgZT0wLHI9cy8zLG49JHIodCksaT1uKGUscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZT10WzBdKmgscj10WzFdKmgpOltlKmYscipmXX0saX1mdW5jdGlvbiBlbih0LGUpe3ZhciByPV8odCksbj0ocitfKGUpKS8yO2lmKHAobik8bylyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zyh0KTtmdW5jdGlvbiByKHQscil7cmV0dXJuW3QqZSxfKHIpL2VdfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3JldHVyblt0L2UsTShyKmUpXX0scn0odCk7dmFyIGk9MStyKigyKm4tciksYT1UKGkpL247ZnVuY3Rpb24gbCh0LGUpe3ZhciByPVQoaS0yKm4qXyhlKSkvbjtyZXR1cm5bcipfKHQqPW4pLGEtcipnKHQpXX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWUsbz1tKHQscChyKSkqdyhyKTtyZXR1cm4gcipuPDAmJihvLT1zKncodCkqdyhyKSksW28vbixNKChpLSh0KnQrcipyKSpuKm4pLygyKm4pKV19LGx9ZnVuY3Rpb24gcm4oKXtyZXR1cm4gdG4oZW4pLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gcm4oKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBhbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1nKGUpLGk9ZyhyKSxhPXQobippKTtyZXR1cm5bYSppKl8oZSksYSpfKHIpXX19ZnVuY3Rpb24gb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49VChlKmUrcipyKSxpPXQobiksYT1fKGkpLG89ZyhpKTtyZXR1cm5bbShlKmEsbipvKSxNKG4mJnIqYS9uKV19fXZhciBzbj1hbigoZnVuY3Rpb24odCl7cmV0dXJuIFQoMi8oMSt0KSl9KSk7c24uaW52ZXJ0PW9uKChmdW5jdGlvbih0KXtyZXR1cm4gMipNKHQvMil9KSk7dmFyIGxuPWFuKChmdW5jdGlvbih0KXtyZXR1cm4odD1BKHQpKSYmdC9fKHQpfSkpO2Z1bmN0aW9uIGNuKHQsZSl7cmV0dXJuW3QseChrKChsK2UpLzIpKV19ZnVuY3Rpb24gdW4odCl7dmFyIGUscixuLGk9UXIodCksYT1pLmNlbnRlcixvPWkuc2NhbGUsbD1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCx1PW51bGw7ZnVuY3Rpb24gZigpe3ZhciBhPXMqbygpLGw9aShyZShpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT11P1tbbFswXS1hLGxbMV0tYV0sW2xbMF0rYSxsWzFdK2FdXTp0PT09Y24/W1tNYXRoLm1heChsWzBdLWEsdSksZV0sW01hdGgubWluKGxbMF0rYSxyKSxuXV06W1t1LE1hdGgubWF4KGxbMV0tYSxlKV0sW3IsTWF0aC5taW4obFsxXSthLG4pXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLGYoKSk6bygpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obCh0KSxmKCkpOmwoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksZigpKTphKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD91PWU9cj1uPW51bGw6KHU9K3RbMF1bMF0sZT0rdFswXVsxXSxyPSt0WzFdWzBdLG49K3RbMV1bMV0pLGYoKSk6bnVsbD09dT9udWxsOltbdSxlXSxbcixuXV19LGYoKX1mdW5jdGlvbiBmbih0KXtyZXR1cm4gaygobCt0KS8yKX1mdW5jdGlvbiBobih0LGUpe3ZhciByPWcodCksbj10PT09ZT9fKHQpOngoci9nKGUpKS94KGZuKGUpL2ZuKHQpKSxpPXIqYihmbih0KSxuKS9uO2lmKCFuKXJldHVybiBjbjtmdW5jdGlvbiBhKHQsZSl7aT4wP2U8LWwrbyYmKGU9LWwrbyk6ZT5sLW8mJihlPWwtbyk7dmFyIHI9aS9iKGZuKGUpLG4pO3JldHVybltyKl8obip0KSxpLXIqZyhuKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLWUsYT13KG4pKlQodCp0K3Iqciksbz1tKHQscChyKSkqdyhyKTtyZXR1cm4gcipuPDAmJihvLT1zKncodCkqdyhyKSksW28vbiwyKmQoYihpL2EsMS9uKSktbF19LGF9ZnVuY3Rpb24gcG4odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBkbih0LGUpe3ZhciByPWcodCksbj10PT09ZT9fKHQpOihyLWcoZSkpLyhlLXQpLGk9ci9uK3Q7aWYocChuKTxvKXJldHVybiBwbjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lLGE9bip0O3JldHVybltyKl8oYSksaS1yKmcoYSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZSxhPW0odCxwKHIpKSp3KHIpO3JldHVybiByKm48MCYmKGEtPXMqdyh0KSp3KHIpKSxbYS9uLGktdyhuKSpUKHQqdCtyKnIpXX0sYX1sbi5pbnZlcnQ9b24oKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLGNuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqZCh5KGUpKS1sXX0scG4uaW52ZXJ0PXBuO3ZhciBtbj0xLjM0MDI2NCxnbj0tLjA4MTEwNix2bj04OTNlLTYseW49LjAwMzc5Nix4bj1UKDMpLzI7ZnVuY3Rpb24gYm4odCxlKXt2YXIgcj1NKHhuKl8oZSkpLG49cipyLGk9bipuKm47cmV0dXJuW3QqZyhyKS8oeG4qKG1uKzMqZ24qbitpKig3KnZuKzkqeW4qbikpKSxyKihtbitnbipuK2kqKHZuK3luKm4pKV19ZnVuY3Rpb24gX24odCxlKXt2YXIgcj1nKGUpLG49Zyh0KSpyO3JldHVybltyKl8odCkvbixfKGUpL25dfWZ1bmN0aW9uIHduKHQsZSl7dmFyIHI9ZSplLG49cipyO3JldHVyblt0KiguODcwNy0uMTMxOTc5KnIrbioobiooLjAwMzk3MSpyLS4wMDE1MjkqbiktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLjAyODg3NCpyLS4wNDQ0NzUtLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBUbih0LGUpe3JldHVybltnKGUpKl8odCksXyhlKV19ZnVuY3Rpb24ga24odCxlKXt2YXIgcj1nKGUpLG49MStnKHQpKnI7cmV0dXJuW3IqXyh0KS9uLF8oZSkvbl19ZnVuY3Rpb24gQW4odCxlKXtyZXR1cm5beChrKChsK2UpLzIpKSwtdF19Ym4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49ZSxpPW4qbixhPWkqaSppLG89MDtvPDEyJiYoYT0oaT0obi09cj0obioobW4rZ24qaSthKih2bit5bippKSktZSkvKG1uKzMqZ24qaSthKig3KnZuKzkqeW4qaSkpKSpuKSppKmksIShwKHIpPDFlLTEyKSk7KytvKTtyZXR1cm5beG4qdCoobW4rMypnbippK2EqKDcqdm4rOSp5bippKSkvZyhuKSxNKF8obikveG4pXX0sX24uaW52ZXJ0PW9uKGQpLHduLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPTI1O2Rve3ZhciBhPW4qbixzPWEqYTtuLT1yPShuKigxLjAwNzIyNithKiguMDE1MDg1K3MqKC4wMjg4NzQqYS0uMDQ0NDc1LS4wMDU5MTYqcykpKS1lKS8oMS4wMDcyMjYrYSooLjA0NTI1NStzKiguMjU5ODY2KmEtLjMxMTMyNS0uMDA1OTE2KjExKnMpKSl9d2hpbGUocChyKT5vJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSxUbi5pbnZlcnQ9b24oTSksa24uaW52ZXJ0PW9uKChmdW5jdGlvbih0KXtyZXR1cm4gMipkKHQpfSkpLEFuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblstZSwyKmQoeSh0KSktbF19LHQuZ2VvQWxiZXJzPW5uLHQuZ2VvQWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxhLHM9bm4oKSxsPXJuKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxjPXJuKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLHU9e3BvaW50OmZ1bmN0aW9uKHQsZSl7YT1bdCxlXX19O2Z1bmN0aW9uIGYodCl7dmFyIGU9dFswXSxvPXRbMV07cmV0dXJuIGE9bnVsbCxyLnBvaW50KGUsbyksYXx8KG4ucG9pbnQoZSxvKSxhKXx8KGkucG9pbnQoZSxvKSxhKX1mdW5jdGlvbiBoKCl7cmV0dXJuIHQ9ZT1udWxsLGZ9cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXMuc2NhbGUoKSxyPXMudHJhbnNsYXRlKCksbj0odFswXS1yWzBdKS9lLGk9KHRbMV0tclsxXSkvZTtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJm4+PS0uNDI1JiZuPC0uMjE0P2w6aT49LjE2NiYmaTwuMjM0JiZuPj0tLjIxNCYmbjwtLjExNT9jOnMpLmludmVydCh0KX0sZi5zdHJlYW09ZnVuY3Rpb24ocil7cmV0dXJuIHQmJmU9PT1yP3Q6KG49W3Muc3RyZWFtKGU9ciksbC5zdHJlYW0ociksYy5zdHJlYW0ocildLGk9bi5sZW5ndGgsdD17cG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTE7KytyPGk7KW5bcl0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOyluW3RdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ucG9seWdvbkVuZCgpfX0pO3ZhciBuLGl9LGYucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzLnByZWNpc2lvbih0KSxsLnByZWNpc2lvbih0KSxjLnByZWNpc2lvbih0KSxoKCkpOnMucHJlY2lzaW9uKCl9LGYuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHMuc2NhbGUodCksbC5zY2FsZSguMzUqdCksYy5zY2FsZSh0KSxmLnRyYW5zbGF0ZShzLnRyYW5zbGF0ZSgpKSk6cy5zY2FsZSgpfSxmLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcy50cmFuc2xhdGUoKTt2YXIgZT1zLnNjYWxlKCksYT0rdFswXSxmPSt0WzFdO3JldHVybiByPXMudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1thLS40NTUqZSxmLS4yMzgqZV0sW2ErLjQ1NSplLGYrLjIzOCplXV0pLnN0cmVhbSh1KSxuPWwudHJhbnNsYXRlKFthLS4zMDcqZSxmKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1thLS40MjUqZStvLGYrLjEyKmUrb10sW2EtLjIxNCplLW8sZisuMjM0KmUtb11dKS5zdHJlYW0odSksaT1jLnRyYW5zbGF0ZShbYS0uMjA1KmUsZisuMjEyKmVdKS5jbGlwRXh0ZW50KFtbYS0uMjE0KmUrbyxmKy4xNjYqZStvXSxbYS0uMTE1KmUtbyxmKy4yMzQqZS1vXV0pLnN0cmVhbSh1KSxoKCl9LGYuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhyKGYsdCxlKX0sZi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFyKGYsdCxlKX0sZi5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBHcihmLHQsZSl9LGYuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlyKGYsdCxlKX0sZi5zY2FsZSgxMDcwKX0sdC5nZW9BcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBVLnJlc2V0KCkseih0LFYpLDIqVX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoc24pLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdz1zbix0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFyKGxuKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc9bG4sdC5nZW9Cb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYobnQ9cnQ9LSh0dD1ldD0xLzApLGx0PVtdLHoodCxTdCkscj1sdC5sZW5ndGgpe2ZvcihsdC5zb3J0KFJ0KSxlPTEsYT1bbj1sdFswXV07ZTxyOysrZSlGdChuLChpPWx0W2VdKVswXSl8fEZ0KG4saVsxXSk/KER0KG5bMF0saVsxXSk+RHQoblswXSxuWzFdKSYmKG5bMV09aVsxXSksRHQoaVswXSxuWzFdKT5EdChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6YS5wdXNoKG49aSk7Zm9yKG89LTEvMCxlPTAsbj1hW3I9YS5sZW5ndGgtMV07ZTw9cjtuPWksKytlKWk9YVtlXSwocz1EdChuWzFdLGlbMF0pKT5vJiYobz1zLHR0PWlbMF0scnQ9blsxXSl9cmV0dXJuIGx0PWN0PW51bGwsdHQ9PT0xLzB8fGV0PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3R0LGV0XSxbcnQsbnRdXX0sdC5nZW9DZW50cm9pZD1mdW5jdGlvbih0KXt1dD1mdD1odD1wdD1kdD1tdD1ndD12dD15dD14dD1idD0wLHoodCxCdCk7dmFyIGU9eXQscj14dCxuPWJ0LGk9ZSplK3IqcituKm47cmV0dXJuIGk8MWUtMTImJihlPW10LHI9Z3Qsbj12dCxmdDxvJiYoZT1odCxyPXB0LG49ZHQpLChpPWUqZStyKnIrbipuKTwxZS0xMik/W05hTixOYU5dOlttKHIsZSkqZixNKG4vVChpKSkqZl19LHQuZ2VvQ2lyY2xlPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVp0KFswLDBdKSxuPVp0KDkwKSxpPVp0KDYpLGE9e3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKHI9ZShyLG4pKSxyWzBdKj1mLHJbMV0qPWZ9fTtmdW5jdGlvbiBvKCl7dmFyIG89ci5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpoLGw9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqaDtyZXR1cm4gdD1bXSxlPVF0KC1vWzBdKmgsLW9bMV0qaCwwKS5pbnZlcnQsbmUoYSxzLGwsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Olp0KFsrdFswXSwrdFsxXV0pLG8pOnJ9LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WnQoK3QpLG8pOm59LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WnQoK3QpLG8pOml9LG99LHQuZ2VvQ2xpcEFudGltZXJpZGlhbj1nZSx0Lmdlb0NsaXBDaXJjbGU9dmUsdC5nZW9DbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49MCxpPTAsYT05NjAsbz01MDA7cmV0dXJuIHI9e3N0cmVhbTpmdW5jdGlvbihyKXtyZXR1cm4gdCYmZT09PXI/dDp0PXllKG4saSxhLG8pKGU9cil9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rc1swXVswXSxpPStzWzBdWzFdLGE9K3NbMV1bMF0sbz0rc1sxXVsxXSx0PWU9bnVsbCxyKTpbW24saV0sW2Esb11dfX19LHQuZ2VvQ2xpcFJlY3RhbmdsZT15ZSx0Lmdlb0NvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRuKGhuKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSx0Lmdlb0NvbmljQ29uZm9ybWFsUmF3PWhuLHQuZ2VvQ29uaWNFcXVhbEFyZWE9cm4sdC5nZW9Db25pY0VxdWFsQXJlYVJhdz1lbix0Lmdlb0NvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdG4oZG4pLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LHQuZ2VvQ29uaWNFcXVpZGlzdGFudFJhdz1kbix0Lmdlb0NvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJlBlLmhhc093blByb3BlcnR5KHQudHlwZSk/UGVbdC50eXBlXTpPZSkodCxlKX0sdC5nZW9EaXN0YW5jZT1DZSx0Lmdlb0VxdWFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoYm4pLnNjYWxlKDE3Ny4xNTgpfSx0Lmdlb0VxdWFsRWFydGhSYXc9Ym4sdC5nZW9FcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gUXIocG4pLnNjYWxlKDE1Mi42Myl9LHQuZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3PXBuLHQuZ2VvR25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoX24pLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LHQuZ2VvR25vbW9uaWNSYXc9X24sdC5nZW9HcmF0aWN1bGU9VWUsdC5nZW9HcmF0aWN1bGUxMD1mdW5jdGlvbigpe3JldHVybiBVZSgpKCl9LHQuZ2VvSWRlbnRpdHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbyxzPTEsbD0wLGM9MCx1PTEscD0xLGQ9MCxtPW51bGwsdj0xLHk9MSx4PWpyKHtwb2ludDpmdW5jdGlvbih0LGUpe3ZhciByPVQoW3QsZV0pO3RoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSksYj1WZTtmdW5jdGlvbiB3KCl7cmV0dXJuIHY9cyp1LHk9cypwLGE9bz1udWxsLFR9ZnVuY3Rpb24gVChyKXt2YXIgbj1yWzBdKnYsaT1yWzFdKnk7aWYoZCl7dmFyIGE9aSp0LW4qZTtuPW4qdCtpKmUsaT1hfXJldHVybltuK2wsaStjXX1yZXR1cm4gVC5pbnZlcnQ9ZnVuY3Rpb24ocil7dmFyIG49clswXS1sLGk9clsxXS1jO2lmKGQpe3ZhciBhPWkqdCtuKmU7bj1uKnQtaSplLGk9YX1yZXR1cm5bbi92LGkveV19LFQuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBhJiZvPT09dD9hOmE9eChiKG89dCkpfSxULnBvc3RjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQsbT1yPW49aT1udWxsLHcoKSk6Yn0sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPW51bGw9PXQ/KG09cj1uPWk9bnVsbCxWZSk6eWUobT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksdygpKTpudWxsPT1tP251bGw6W1ttLHJdLFtuLGldXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCx3KCkpOnN9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0WzBdLGM9K3RbMV0sdygpKTpbbCxjXX0sVC5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1fKGQ9ciUzNjAqaCksdD1nKGQpLHcoKSk6ZCpmfSxULnJlZmxlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/LTE6MSx3KCkpOnU8MH0sVC5yZWZsZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10Py0xOjEsdygpKTpwPDB9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhyKFQsdCxlKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFyKFQsdCxlKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBHcihULHQsZSl9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlyKFQsdCxlKX0sVH0sdC5nZW9JbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0qaCxuPXRbMV0qaCxpPWVbMF0qaCxhPWVbMV0qaCxvPWcobikscz1fKG4pLGw9ZyhhKSxjPV8oYSksdT1vKmcocikscD1vKl8ociksZD1sKmcoaSksdj1sKl8oaSkseT0yKk0oVChTKGEtbikrbypsKlMoaS1yKSkpLHg9Xyh5KSxiPXk/ZnVuY3Rpb24odCl7dmFyIGU9Xyh0Kj15KS94LHI9Xyh5LXQpL3gsbj1yKnUrZSpkLGk9cipwK2UqdixhPXIqcytlKmM7cmV0dXJuW20oaSxuKSpmLG0oYSxUKG4qbitpKmkpKSpmXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipmLG4qZl19O3JldHVybiBiLmRpc3RhbmNlPXksYn0sdC5nZW9MZW5ndGg9U2UsdC5nZW9NZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiB1bihjbikuc2NhbGUoOTYxL3UpfSx0Lmdlb01lcmNhdG9yUmF3PWNuLHQuZ2VvTmF0dXJhbEVhcnRoMT1mdW5jdGlvbigpe3JldHVybiBRcih3bikuc2NhbGUoMTc1LjI5NSl9LHQuZ2VvTmF0dXJhbEVhcnRoMVJhdz13bix0Lmdlb09ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBRcihUbikuc2NhbGUoMjQ5LjUpLmNsaXBBbmdsZSg5MCtvKX0sdC5nZW9PcnRob2dyYXBoaWNSYXc9VG4sdC5nZW9QYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPTQuNTtmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4ucG9pbnRSYWRpdXMoK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx6KHQscihuKSkpLG4ucmVzdWx0KCl9cmV0dXJuIGEuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoWmUpKSxaZS5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQscihEcikpLERyLnJlc3VsdCgpfSxhLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoaXIpKSxpci5yZXN1bHQoKX0sYS5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoeXIpKSx5ci5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PWU/KHQ9bnVsbCxWZSk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10PyhlPW51bGwsbmV3IEJyKTpuZXcgRXIoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmbi5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KG4ucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sdC5nZW9Qcm9qZWN0aW9uPVFyLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9JHIsdC5nZW9Sb3RhdGlvbj1yZSx0Lmdlb1N0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoa24pLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz1rbix0Lmdlb1N0cmVhbT16LHQuZ2VvVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06anIodCl9fSx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PXVuKEFuKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9QW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxMDd9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBpKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYobilmb3IoOy0tbj49MDspZSs9cltuXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gYSh0LGUpe3ZhciByLG4saSxhLHMsdT1uZXcgYyh0KSxmPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxoPVt1XTtmb3IobnVsbD09ZSYmKGU9byk7cj1oLnBvcCgpOylpZihmJiYoci52YWx1ZT0rci5kYXRhLnZhbHVlKSwoaT1lKHIuZGF0YSkpJiYocz1pLmxlbmd0aCkpZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHMpLGE9cy0xO2E+PTA7LS1hKWgucHVzaChuPXIuY2hpbGRyZW5bYV09bmV3IGMoaVthXSkpLG4ucGFyZW50PXIsbi5kZXB0aD1yLmRlcHRoKzE7cmV0dXJuIHUuZWFjaEJlZm9yZShsKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHModCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIGwodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBjKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWMucHJvdG90eXBlPWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGkpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxyPWEuY2hpbGRyZW4pZm9yKG49MCxpPXIubGVuZ3RoO248aTsrK24pby5wdXNoKHJbbl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihyPTAsbj1lLmxlbmd0aDtyPG47KytyKWEucHVzaChlW3JdKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXRoaXMsaT1bbl07bj1pLnBvcCgpOylpZih0KG4pLGU9bi5jaGlsZHJlbilmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWkucHVzaChlW3JdKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDt0PXIucG9wKCksZT1uLnBvcCgpO2Zvcig7dD09PWU7KWk9dCx0PXIucG9wKCksZT1uLnBvcCgpO3JldHVybiBpfShlLHQpLG49W2VdO2UhPT1yOyllPWUucGFyZW50LG4ucHVzaChlKTtmb3IodmFyIGk9bi5sZW5ndGg7dCE9PXI7KW4uc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiBufSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pKSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuZWFjaEJlZm9yZShzKX19O3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBmKHQpe2Zvcih2YXIgZSxyLG49MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5sZW5ndGg7bjspcj1NYXRoLnJhbmRvbSgpKm4tLXwwLGU9dFtuXSx0W25dPXRbcl0sdFtyXT1lO3JldHVybiB0fSh1LmNhbGwodCkpKS5sZW5ndGgsYT1bXTtuPGk7KWU9dFtuXSxyJiZkKHIsZSk/KytuOihyPWcoYT1oKGEsZSkpLG49MCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe3ZhciByLG47aWYobShlLHQpKXJldHVybltlXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWlmKHAoZSx0W3JdKSYmbSh2KHRbcl0sZSksdCkpcmV0dXJuW3Rbcl0sZV07Zm9yKHI9MDtyPHQubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPHQubGVuZ3RoOysrbilpZihwKHYodFtyXSx0W25dKSxlKSYmcCh2KHRbcl0sZSksdFtuXSkmJnAodih0W25dLGUpLHRbcl0pJiZtKHkodFtyXSx0W25dLGUpLHQpKXJldHVyblt0W3JdLHRbbl0sZV07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj10LnItZS5yLG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuci1lLnIrMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcilpZighZCh0LGVbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGcodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiB2KHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiB5KHRbMF0sdFsxXSx0WzJdKX12YXIgZX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC54LG49dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGw9YS1yLGM9by1uLHU9cy1pLGY9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK2ErbC9mKnUpLzIseToobitvK2MvZip1KS8yLHI6KGYraStzKS8yfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LngsaT10LnksYT10LnIsbz1lLngscz1lLnksbD1lLnIsYz1yLngsdT1yLnksZj1yLnIsaD1uLW8scD1uLWMsZD1pLXMsbT1pLXUsZz1sLWEsdj1mLWEseT1uKm4raSppLWEqYSx4PXktbypvLXMqcytsKmwsYj15LWMqYy11KnUrZipmLF89cCpkLWgqbSx3PShkKmItbSp4KS8oMipfKS1uLFQ9KG0qZy1kKnYpL18saz0ocCp4LWgqYikvKDIqXyktaSxBPShoKnYtcCpnKS9fLE09VCpUK0EqQS0xLFM9MiooYSt3KlQraypBKSxFPXcqdytrKmstYSphLEw9LShNPyhTK01hdGguc3FydChTKlMtNCpNKkUpKS8oMipNKTpFL1MpO3JldHVybnt4Om4rdytUKkwseTppK2srQSpMLHI6TH19ZnVuY3Rpb24geCh0LGUscil7dmFyIG4saSxhLG8scz10LngtZS54LGw9dC55LWUueSxjPXMqcytsKmw7Yz8oaT1lLnIrci5yLGkqPWksbz10LnIrci5yLGk+KG8qPW8pPyhuPShjK28taSkvKDIqYyksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtbipuKSksci54PXQueC1uKnMtYSpsLHIueT10LnktbipsK2Eqcyk6KG49KGMraS1vKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLGkvYy1uKm4pKSxyLng9ZS54K24qcy1hKmwsci55PWUueStuKmwrYSpzKSk6KHIueD1lLngrci5yLHIueT1lLnkpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LnIrZS5yLTFlLTYsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBfKHQpe3ZhciBlPXQuXyxyPXQubmV4dC5fLG49ZS5yK3IucixpPShlLngqci5yK3IueCplLnIpL24sYT0oZS55KnIucityLnkqZS5yKS9uO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIHcodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihyPXRbMV0sZS54PS1yLnIsci54PWUucixyLnk9MCwhKGk+MikpcmV0dXJuIGUucityLnI7eChyLGUsbj10WzJdKSxlPW5ldyB3KGUpLHI9bmV3IHcociksbj1uZXcgdyhuKSxlLm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD1lLnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9ZTt0OmZvcihzPTM7czxpOysrcyl7eChlLl8sci5fLG49dFtzXSksbj1uZXcgdyhuKSxsPXIubmV4dCxjPWUucHJldmlvdXMsdT1yLl8ucixoPWUuXy5yO2Rve2lmKHU8PWgpe2lmKGIobC5fLG4uXykpe3I9bCxlLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9dSs9bC5fLnIsbD1sLm5leHR9ZWxzZXtpZihiKGMuXyxuLl8pKXsoZT1jKS5uZXh0PXIsci5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9ZSxuLm5leHQ9cixlLm5leHQ9ci5wcmV2aW91cz1yPW4sYT1fKGUpOyhuPW4ubmV4dCkhPT1yOykobz1fKG4pKTxhJiYoZT1uLGE9byk7cj1lLm5leHR9Zm9yKGU9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyllLnB1c2gobi5fKTtmb3Iobj1mKGUpLHM9MDtzPGk7KytzKShlPXRbc10pLngtPW4ueCxlLnktPW4ueTtyZXR1cm4gbi5yfWZ1bmN0aW9uIGsodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpBKHQpfWZ1bmN0aW9uIEEodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIE0oKXtyZXR1cm4gMH1mdW5jdGlvbiBTKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBFKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLGEsbz1uLmxlbmd0aCxzPXQocikqZXx8MDtpZihzKWZvcihpPTA7aTxvOysraSluW2ldLnIrPXM7aWYoYT1UKG4pLHMpZm9yKGk9MDtpPG87KytpKW5baV0uci09cztyLnI9YStzfX19ZnVuY3Rpb24gUCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZS5wYXJlbnQ7ZS5yKj10LHImJihlLng9ci54K3QqZS54LGUueT1yLnkrdCplLnkpfX1mdW5jdGlvbiBJKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBPKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS55MD1yLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKmN9dmFyIHo9e2RlcHRoOi0xfSxEPXt9O2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIE4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBWKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIEgodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYoaS1yKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS54MD1lLGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9SC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7dmFyIEc9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIFkodCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHY9W10seT1lLmNoaWxkcmVuLHg9MCxiPTAsXz15Lmxlbmd0aCx3PWUudmFsdWU7eDxfOyl7bD1pLXIsYz1hLW47ZG97dT15W2IrK10udmFsdWV9d2hpbGUoIXUmJmI8Xyk7Zm9yKGY9aD11LGc9dSp1KihtPU1hdGgubWF4KGMvbCxsL2MpLyh3KnQpKSxkPU1hdGgubWF4KGgvZyxnL2YpO2I8XzsrK2Ipe2lmKHUrPXM9eVtiXS52YWx1ZSxzPGYmJihmPXMpLHM+aCYmKGg9cyksZz11KnUqbSwocD1NYXRoLm1heChoL2csZy9mKSk+ZCl7dS09czticmVha31kPXB9di5wdXNoKG89e3ZhbHVlOnUsZGljZTpsPGMsY2hpbGRyZW46eS5zbGljZSh4LGIpfSksby5kaWNlP08obyxyLG4saSx3P24rPWMqdS93OmEpOnEobyxyLG4sdz9yKz1sKnUvdzppLGEpLHctPXUseD1ifXJldHVybiB2fXZhciBXPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe1koZSx0LHIsbixpLGEpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LHJ9KEcpO3ZhciBYPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsbCxjLHUsZj0tMSxoPW8ubGVuZ3RoLHA9dC52YWx1ZTsrK2Y8aDspe2ZvcihsPShzPW9bZl0pLmNoaWxkcmVuLGM9cy52YWx1ZT0wLHU9bC5sZW5ndGg7Yzx1OysrYylzLnZhbHVlKz1sW2NdLnZhbHVlO3MuZGljZT9PKHMscixuLGksbis9KGEtbikqcy52YWx1ZS9wKTpxKHMscixuLHIrPShpLXIpKnMudmFsdWUvcCxhKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1ZKGUsdCxyLG4saSxhKSxvLnJhdGlvPWV9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZSxpPTEsYT0xLG89ITE7ZnVuY3Rpb24gcyhlKXt2YXIgcyxsPTA7ZS5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBpPWUuY2hpbGRyZW47aT8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShyLDApL3QubGVuZ3RofShpKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UobiwwKX0oaSkpOihlLng9cz9sKz10KGUscyk6MCxlLnk9MCxzPWUpfSkpO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGY9Yy54LXQoYyx1KS8yLGg9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWYpLyhoLWYpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPU07ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEwodCkpLmVhY2hBZnRlcihDKG4sLjUpKS5lYWNoQmVmb3JlKFAoMSkpOmkuZWFjaEJlZm9yZShMKEUpKS5lYWNoQWZ0ZXIoQyhNLDEpKS5lYWNoQWZ0ZXIoQyhuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShQKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWsoZSksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saSk6W2Uscl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLGkpOm59LGl9LHQucGFja0VuY2xvc2U9Zix0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gVCh0KSx0fSx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLHI9MCxuPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGE9aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPXIsaS54MT10LGkueTE9ZS9hLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiZPKG4sbi54MCx0KihuLmRlcHRoKzEpL2Usbi54MSx0KihuLmRlcHRoKzIpL2UpO3ZhciBpPW4ueDAsYT1uLnkwLG89bi54MS1yLHM9bi55MS1yO288aSYmKGk9bz0oaStvKS8yKSxzPGEmJihhPXM9KGErcykvMiksbi54MD1pLG4ueTA9YSxuLngxPW8sbi55MT1zfX0oZSxhKSksbiYmaS5lYWNoQmVmb3JlKEkpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISF0LGkpOm59LGkuc2l6ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rclswXSxlPStyWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsaSk6cn0saX0sdC5zdHJhdGlmeT1mdW5jdGlvbigpe3ZhciB0PVIsZT1GO2Z1bmN0aW9uIHIocil7dmFyIG4saSxhLG8scyx1LGYsaD1yLmxlbmd0aCxwPW5ldyBBcnJheShoKSxkPXt9O2ZvcihpPTA7aTxoOysraSluPXJbaV0scz1wW2ldPW5ldyBjKG4pLG51bGwhPSh1PXQobixpLHIpKSYmKHUrPSIiKSYmKGRbZj0iJCIrKHMuaWQ9dSldPWYgaW4gZD9EOnMpO2ZvcihpPTA7aTxoOysraSlpZihzPXBbaV0sbnVsbCE9KHU9ZShyW2ldLGkscikpJiYodSs9IiIpKXtpZighKG89ZFsiJCIrdV0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit1KTtpZihvPT09RCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIit1KTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PXosYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1ofSkpLmVhY2hCZWZvcmUobCksYS5wYXJlbnQ9bnVsbCxoPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBhfXJldHVybiByLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUEoZSkscik6dH0sci5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BKHQpLHIpOmV9LHJ9LHQudHJlZT1mdW5jdGlvbigpe3ZhciB0PUIsZT0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPW5ldyBIKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihuPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1uLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKHI9ZS5jaGlsZHJlbltpXT1uZXcgSChuW2ldLGkpKSxyLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgSChudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYobC5lYWNoQWZ0ZXIoYSksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShvKSxuKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciBjPWksdT1pLGY9aTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD51LngmJih1PXQpLHQuZGVwdGg+Zi5kZXB0aCYmKGY9dCl9KSk7dmFyIGg9Yz09PXU/MTp0KGMsdSkvMixwPWgtYy54LGQ9ZS8odS54K2grcCksbT1yLyhmLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K3ApKmQsdC55PXQuZGVwdGgqbX0pKX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciByPWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9uW2UuaS0xXTpudWxsO2lmKHIpeyFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0oZSk7dmFyIGE9KHJbMF0ueityW3IubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUscixuKXtpZihyKXtmb3IodmFyIGksYT1lLG89ZSxzPXIsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxmPXMubSxoPWwubTtzPWoocyksYT1OKGEpLHMmJmE7KWw9TihsKSwobz1qKG8pKS5hPWUsKGk9cy56K2YtYS56LWMrdChzLl8sYS5fKSk+MCYmKFUoVihzLGUsbiksZSxpKSxjKz1pLHUrPWkpLGYrPXMubSxjKz1hLm0saCs9bC5tLHUrPW8ubTtzJiYhaihvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhTihsKSYmKGwudD1hLGwubSs9Yy1oLG49ZSl9cmV0dXJuIG59KGUsaSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsZT0rdFswXSxyPSt0WzFdLGkpOm4/bnVsbDpbZSxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCxlPSt0WzBdLHI9K3RbMV0saSk6bj9bZSxyXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1XLGU9ITEscj0xLG49MSxpPVswXSxhPU0sbz1NLHM9TSxsPU0sYz1NO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9cix0LnkxPW4sdC5lYWNoQmVmb3JlKGYpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShJKSx0fWZ1bmN0aW9uIGYoZSl7dmFyIHI9aVtlLmRlcHRoXSxuPWUueDArcix1PWUueTArcixmPWUueDEtcixoPWUueTEtcjtmPG4mJihuPWY9KG4rZikvMiksaDx1JiYodT1oPSh1K2gpLzIpLGUueDA9bixlLnkwPXUsZS54MT1mLGUueTE9aCxlLmNoaWxkcmVuJiYocj1pW2UuZGVwdGgrMV09YShlKS8yLG4rPWMoZSktcix1Kz1vKGUpLXIsKGYtPXMoZSktcik8biYmKG49Zj0obitmKS8yKSwoaC09bChlKS1yKTx1JiYodT1oPSh1K2gpLzIpLHQoZSxuLHUsZixoKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXSxuPSt0WzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QShlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6YX0sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpvfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpjfSx1fSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09bz1hPTA7YTxsOysrYSljW2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyxsKXtpZihlPj1yLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9aSx1LnkwPWEsdS54MT1vLHZvaWQodS55MT1sKX12YXIgZj1jW2VdLGg9bi8yK2YscD1lKzEsZD1yLTE7Zm9yKDtwPGQ7KXt2YXIgbT1wK2Q+Pj4xO2NbbV08aD9wPW0rMTpkPW19aC1jW3AtMV08Y1twXS1oJiZlKzE8cCYmLS1wO3ZhciBnPWNbcF0tZix2PW4tZztpZihvLWk+bC1hKXt2YXIgeT0oaSp2K28qZykvbjt0KGUscCxnLGksYSx5LGwpLHQocCxyLHYseSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSp2K2wqZykvbjt0KGUscCxnLGksYSxvLHgpLHQocCxyLHYsaSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT1PLHQudHJlZW1hcFJlc3F1YXJpZnk9WCx0LnRyZWVtYXBTbGljZT1xLHQudHJlZW1hcFNsaWNlRGljZT1mdW5jdGlvbih0LGUscixuLGkpeygxJnQuZGVwdGg/cTpPKSh0LGUscixuLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1XLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDExNjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtY29sb3IiKSk6aSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUscixuLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKnIrKDErMyp0KzMqYS0zKm8pKm4rbyppKS82fWZ1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGE9dFtpXSxvPXRbaSsxXSxzPWk+MD90W2ktMV06MiphLW8sbD1pPGUtMT90W2krMl06MipvLWE7cmV0dXJuIHIoKG4taS9lKSplLHMsYSxvLGwpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksYT10WyhpK2UtMSklZV0sbz10W2klZV0scz10WyhpKzEpJWVdLGw9dFsoaSsyKSVlXTtyZXR1cm4gcigobi1pL2UpKmUsYSxvLHMsbCl9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmEoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiAxPT0odD0rdCk/YzpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX0oZSxyLHQpOmEoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscik6YShpc05hTih0KT9lOnQpfXZhciB1PWZ1bmN0aW9uIHQocil7dmFyIG49bChyKTtmdW5jdGlvbiBpKHQscil7dmFyIGk9bigodD1lLnJnYih0KSkuciwocj1lLnJnYihyKSkuciksYT1uKHQuZyxyLmcpLG89bih0LmIsci5iKSxzPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9YShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9cyhlKSx0KyIifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrIiJ9fX12YXIgaD1mKG4pLHA9ZihpKTtmdW5jdGlvbiBkKHQsZSl7ZXx8KGU9W10pO3ZhciByLG49dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHI9MDtyPG47KytyKWlbcl09dFtyXSooMS1hKStlW3JdKmE7cmV0dXJuIGl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcixuPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4obix0Lmxlbmd0aCk6MCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShuKTtmb3Iocj0wO3I8aTsrK3IpYVtyXT1UKHRbcl0sZVtyXSk7Zm9yKDtyPG47KytyKW9bcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPGk7KytyKW9bcl09YVtyXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gdih0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0KigxLW4pK2Uqbikscn19ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiB4KHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1UKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dmFyIGI9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLF89bmV3IFJlZ0V4cChiLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHcodCxlKXt2YXIgcixuLGksYT1iLmxhc3RJbmRleD1fLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1iLmV4ZWModCkpJiYobj1fLmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp5KHIsbil9KSksYT1fLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVCh0LHIpe3ZhciBuLGk9dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PWk/YShyKTooIm51bWJlciI9PT1pP3k6InN0cmluZyI9PT1pPyhuPWUuY29sb3IocikpPyhyPW4sdSk6dzpyIGluc3RhbmNlb2YgZS5jb2xvcj91OnIgaW5zdGFuY2VvZiBEYXRlP3Y6bShyKT9kOkFycmF5LmlzQXJyYXkocik/ZzoiZnVuY3Rpb24iIT10eXBlb2Ygci52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Ygci50b1N0cmluZ3x8aXNOYU4ocik/eDp5KSh0LHIpfXZhciBrLEEsTSxTLEU9MTgwL01hdGguUEksTD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBDKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGw9dCpyK2UqbikmJihyLT10Kmwsbi09ZSpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLHQqbjxlKnImJih0PS10LGU9LWUsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKkUsc2tld1g6TWF0aC5hdGFuKGwpKkUsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIFAodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sbD1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LG4saSxhLG8scyl7aWYodCE9PWl8fG4hPT1hKXt2YXIgbD1vLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLHIpO3MucHVzaCh7aTpsLTQseDp5KHQsaSl9LHtpOmwtMix4OnkobixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Ercil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6ci5wdXNoKGkocikrInJvdGF0ZSgiLG51bGwsbiktMix4OnkodCxlKX0pKTplJiZyLnB1c2goaShyKSsicm90YXRlKCIrZStuKX0oYS5yb3RhdGUsby5yb3RhdGUscyxsKSxmdW5jdGlvbih0LGUscixhKXt0IT09ZT9hLnB1c2goe2k6ci5wdXNoKGkocikrInNrZXdYKCIsbnVsbCxuKS0yLHg6eSh0LGUpfSk6ZSYmci5wdXNoKGkocikrInNrZXdYKCIrZStuKX0oYS5za2V3WCxvLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLHIsbixhLG8pe2lmKHQhPT1yfHxlIT09bil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDp5KHQscil9LHtpOnMtMix4OnkoZSxuKX0pfWVsc2UgMT09PXImJjE9PT1ufHxhLnB1c2goaShhKSsic2NhbGUoIityKyIsIituKyIpIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsbCksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj1sLmxlbmd0aDsrK3I8bjspc1soZT1sW3JdKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgST1QKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P0w6KGt8fChrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LE09ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGsuc3R5bGUudHJhbnNmb3JtPXQsdD1NLmdldENvbXB1dGVkU3R5bGUoQS5hcHBlbmRDaGlsZChrKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxBLnJlbW92ZUNoaWxkKGspLEMoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLE89UCgoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TDooU3x8KFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksUy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9Uy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9DKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOkwpfSksIiwgIiwiKSIsIikiKSx6PU1hdGguU1FSVDI7ZnVuY3Rpb24gRCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGE9YyhyLnMsbi5zKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5zPWEodCksci5sPW8odCksci5vcGFjaXR5PXModCkscisiIn19fXZhciBGPVIocyksQj1SKGMpO2Z1bmN0aW9uIE4odCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksYT1jKHIuYyxuLmMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLmM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIGo9TihzKSxVPU4oYyk7ZnVuY3Rpb24gVih0KXtyZXR1cm4gZnVuY3Rpb24gcihuKXtmdW5jdGlvbiBpKHIsaSl7dmFyIGE9dCgocj1lLmN1YmVoZWxpeChyKSkuaCwoaT1lLmN1YmVoZWxpeChpKSkuaCksbz1jKHIucyxpLnMpLHM9YyhyLmwsaS5sKSxsPWMoci5vcGFjaXR5LGkub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9YSh0KSxyLnM9byh0KSxyLmw9cyhNYXRoLnBvdyh0LG4pKSxyLm9wYWNpdHk9bCh0KSxyKyIifX1yZXR1cm4gbj0rbixpLmdhbW1hPXIsaX0oMSl9dmFyIEg9VihzKSxxPVYoYyk7dC5pbnRlcnBvbGF0ZT1ULHQuaW50ZXJwb2xhdGVBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybihtKGUpP2Q6ZykodCxlKX0sdC5pbnRlcnBvbGF0ZUJhc2lzPW4sdC5pbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkPWksdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ILHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPXEsdC5pbnRlcnBvbGF0ZURhdGU9dix0LmludGVycG9sYXRlRGlzY3JldGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IociplKSkpXX19LHQuaW50ZXJwb2xhdGVIY2w9aix0LmludGVycG9sYXRlSGNsTG9uZz1VLHQuaW50ZXJwb2xhdGVIc2w9Rix0LmludGVycG9sYXRlSHNsTG9uZz1CLHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9cih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQscil7dmFyIG49YygodD1lLmxhYih0KSkubCwocj1lLmxhYihyKSkubCksaT1jKHQuYSxyLmEpLGE9Yyh0LmIsci5iKSxvPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX0sdC5pbnRlcnBvbGF0ZU51bWJlcj15LHQuaW50ZXJwb2xhdGVOdW1iZXJBcnJheT1kLHQuaW50ZXJwb2xhdGVPYmplY3Q9eCx0LmludGVycG9sYXRlUmdiPXUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPWgsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPXAsdC5pbnRlcnBvbGF0ZVJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLXIpK2Uqcil9fSx0LmludGVycG9sYXRlU3RyaW5nPXcsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1JLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9Tyx0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksZj1sLWEsaD11KnUrZipmO2lmKGg8MWUtMTIpbj1NYXRoLmxvZyhjL28pL3oscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmYsbypNYXRoLmV4cCh6KnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChoKSxkPShjKmMtbypvKzQqaCkvKDIqbyoyKnApLG09KGMqYy1vKm8tNCpoKS8oMipjKjIqcCksZz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KG0qbSsxKS1tKTtuPSh2LWcpL3oscj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPUQoZyksbD1vLygyKnApKihzKihlPXoqcitnLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGcpKTtyZXR1cm5baStsKnUsYStsKmYsbypzL0QoeipyK2cpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT10KGksaT1lWysrcl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKHQqPW4pKSk7cmV0dXJuIGFbZV0odC1lKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWNvbG9yIjoxMDl9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsZj1zLXIsaD11KnUrZipmO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIithKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMoZipsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLG09bCpsK2MqYyxnPXAqcCtkKmQsdj1NYXRoLnNxcnQobSkseT1NYXRoLnNxcnQoaCkseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygobStoLWcpLygyKnYqeSkpKS8yKSxiPXgveSxfPXgvdjtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisocitiKmYpKSx0aGlzLl8rPSJBIithKyIsIithKyIsMCwwLCIrICsoZipwPnUqZCkrIiwiKyh0aGlzLl94MT10K18qbCkrIiwiKyh0aGlzLl95MT1yK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2ksbD0hIWw7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxmPXQrYyxoPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrYSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2YrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLWYpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWgpPjFlLTYpJiYodGhpcy5fKz0iTCIrZisiLCIraCksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPSJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHQtYykrIiwiKyhpLXUpKyJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHRoaXMuX3gxPWYpKyIsIisodGhpcy5feTE9aCk6ZD4xZS02JiYodGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsIisgKyhkPj1lKSsiLCIrcCsiLCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrIiwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTE4OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD10Ll9yb290LGQ9e2RhdGE6bn0sbT10Ll94MCxnPXQuX3kwLHY9dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGE9KG0rdikvMikpP209YTp2PWEsKHU9cj49KG89KGcreSkvMikpP2c9bzp5PW8saT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIGlbZl09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGk/aVtmXT1kOnQuX3Jvb3Q9ZCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oYT0obSt2KS8yKSk/bT1hOnY9YSwodT1yPj0obz0oZyt5KS8yKSk/Zz1vOnk9b313aGlsZSgoZj11PDwxfGMpPT0oaD0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2hdPXAsaVtmXT1kLHR9ZnVuY3Rpb24gcih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX1mdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gYSh0LGUscil7dmFyIGE9bmV3IG8obnVsbD09ZT9uOmUsbnVsbD09cj9pOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9hOmEuYWRkQWxsKHQpfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgbD1hLnByb3RvdHlwZT1vLnByb3RvdHlwZTtsLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IG8odGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PXMobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1zKGUpKTtyZXR1cm4gcn0sbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIHI9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBlKHRoaXMuY292ZXIocixuKSxyLG4sdCl9LGwuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciByLG4saSxhLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0xLzAsdT0xLzAsZj0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwscj10W25dKSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHIpKXx8KHNbbl09aSxsW25dPWEsaTxjJiYoYz1pKSxpPmYmJihmPWkpLGE8dSYmKHU9YSksYT5oJiYoaD1hKSk7aWYoYz5mfHx1PmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIoYyx1KS5jb3ZlcihmLGgpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4ocikpaT0ocj1NYXRoLmZsb29yKHQpKSsxLGE9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2Zvcih2YXIgbyxzLGw9aS1yLGM9dGhpcy5fcm9vdDtyPnR8fHQ+PWl8fG4+ZXx8ZT49YTspc3dpdGNoKHM9KGU8bik8PDF8dDxyLChvPW5ldyBBcnJheSg0KSlbc109YyxjPW8sbCo9MixzKXtjYXNlIDA6aT1yK2wsYT1uK2w7YnJlYWs7Y2FzZSAxOnI9aS1sLGE9bitsO2JyZWFrO2Nhc2UgMjppPXIrbCxuPWEtbDticmVhaztjYXNlIDM6cj1pLWwsbj1hLWx9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGwuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxsLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGY9dGhpcy5feDAsaD10aGlzLl95MCxwPXRoaXMuX3gxLGQ9dGhpcy5feTEsbT1bXSxnPXRoaXMuX3Jvb3Q7Zm9yKGcmJm0ucHVzaChuZXcgcihnLGYsaCxwLGQpKSxudWxsPT1uP249MS8wOihmPXQtbixoPWUtbixwPXQrbixkPWUrbixuKj1uKTtjPW0ucG9wKCk7KWlmKCEoIShnPWMubm9kZSl8fChhPWMueDApPnB8fChvPWMueTApPmR8fChzPWMueDEpPGZ8fChsPWMueTEpPGgpKWlmKGcubGVuZ3RoKXt2YXIgdj0oYStzKS8yLHk9KG8rbCkvMjttLnB1c2gobmV3IHIoZ1szXSx2LHkscyxsKSxuZXcgcihnWzJdLGEseSx2LGwpLG5ldyByKGdbMV0sdixvLHMseSksbmV3IHIoZ1swXSxhLG8sdix5KSksKHU9KGU+PXkpPDwxfHQ+PXYpJiYoYz1tW20ubGVuZ3RoLTFdLG1bbS5sZW5ndGgtMV09bVttLmxlbmd0aC0xLXVdLG1bbS5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciB4PXQtK3RoaXMuX3guY2FsbChudWxsLGcuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxnLmRhdGEpLF89eCp4K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2Y9dC13LGg9ZS13LHA9dCt3LGQ9ZSt3LGk9Zy5kYXRhfX1yZXR1cm4gaX0sbC5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZixoLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLG09dGhpcy5feTAsZz10aGlzLl94MSx2PXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9YT49KHM9KGQrZykvMikpP2Q9czpnPXMsKHU9bz49KGw9KG0rdikvMikpP209bDp2PWwsZT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2YrMSYzXXx8ZVtmKzImM118fGVbZiszJjNdKSYmKHI9ZSxoPWYpfWZvcig7cC5kYXRhIT09dDspaWYobj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsbj8oaT9uLm5leHQ9aTpkZWxldGUgbi5uZXh0LHRoaXMpOmU/KGk/ZVtmXT1pOmRlbGV0ZSBlW2ZdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihyP3JbaF09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGwucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGwuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixpLGEsbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsaT1lLngwLGE9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShpK28pLzIsZj0oYStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGYsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGksZix1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxhLG8sZikpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixpLGEsdSxmKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGE9ZS5ub2RlO2lmKGEubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsZj0ocytjKS8yLGg9KGwrdSkvMjsobz1hWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGYsaCkpLChvPWFbMV0pJiZuLnB1c2gobmV3IHIobyxmLGwsYyxoKSksKG89YVsyXSkmJm4ucHVzaChuZXcgcihvLHMsaCxmLHUpKSwobz1hWzNdKSYmbi5wdXNoKG5ldyByKG8sZixoLGMsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxMTk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLXBhdGgiKSk6aSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4yLGE9TWF0aC5jb3Msbz1NYXRoLm1heCxzPU1hdGgubWluLGw9TWF0aC5zaW4sYz1NYXRoLnNxcnQsdT1NYXRoLlBJLGY9dS8yLGg9Mip1O2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/dTpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdD49MT9mOnQ8PS0xPy1mOk1hdGguYXNpbih0KX1mdW5jdGlvbiBtKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBiKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9bi1lLHU9by1pLGY9cy1hLGg9ZipsLXUqYztpZighKGgqaDwxZS0xMikpcmV0dXJuW3QrKGg9KHUqKGUtYSktZioodC1pKSkvaCkqbCxlK2gqY119ZnVuY3Rpb24gXyh0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4sZj0ocz9hOi1hKS9jKGwqbCt1KnUpLGg9Zip1LHA9LWYqbCxkPXQraCxtPWUrcCxnPXIraCx2PW4rcCx5PShkK2cpLzIseD0obSt2KS8yLGI9Zy1kLF89di1tLHc9YipiK18qXyxUPWktYSxrPWQqdi1nKm0sQT0oXzwwPy0xOjEpKmMobygwLFQqVCp3LWsqaykpLE09KGsqXy1iKkEpL3csUz0oLWsqYi1fKkEpL3csRT0oaypfK2IqQSkvdyxMPSgtaypiK18qQSkvdyxDPU0teSxQPVMteCxJPUUteSxPPUwteDtyZXR1cm4gQypDK1AqUD5JKkkrTypPJiYoTT1FLFM9TCkse2N4Ok0sY3k6Uyx4MDE6LWgseTAxOi1wLHgxMTpNKihpL1QtMSkseTExOlMqKGkvVC0xKX19ZnVuY3Rpb24gdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gbmV3IHcodCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBBKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIE0oKXt2YXIgdD1rLG49QSxpPXIoITApLGE9bnVsbCxvPVQscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGY9ci5sZW5ndGgsaD0hMTtmb3IobnVsbD09YSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWY7KytsKSEobDxmJiZpKGM9cltsXSxsLHIpKT09PWgmJigoaD0haCk/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksaCYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksbCk6YX0sbH1mdW5jdGlvbiBTKCl7dmFyIHQ9ayxuPW51bGwsaT1yKDApLGE9QSxvPXIoITApLHM9bnVsbCxsPVQsYz1udWxsO2Z1bmN0aW9uIHUocil7dmFyIHUsZixoLHAsZCxtPXIubGVuZ3RoLGc9ITEsdj1uZXcgQXJyYXkobSkseT1uZXcgQXJyYXkobSk7Zm9yKG51bGw9PXMmJihjPWwoZD1lLnBhdGgoKSkpLHU9MDt1PD1tOysrdSl7aWYoISh1PG0mJm8ocD1yW3VdLHUscikpPT09ZylpZihnPSFnKWY9dSxjLmFyZWFTdGFydCgpLGMubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYy5saW5lRW5kKCksYy5saW5lU3RhcnQoKSxoPXUtMTtoPj1mOy0taCljLnBvaW50KHZbaF0seVtoXSk7Yy5saW5lRW5kKCksYy5hcmVhRW5kKCl9ZyYmKHZbdV09K3QocCx1LHIpLHlbdV09K2kocCx1LHIpLGMucG9pbnQobj8rbihwLHUscik6dlt1XSxhPythKHAsdSxyKTp5W3VdKSl9aWYoZClyZXR1cm4gYz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gZigpe3JldHVybiBNKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYT1udWxsLHUpOml9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTppfSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOmF9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoaSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoYSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KG4pLnkoaSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gRSh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBMKHQpe3JldHVybiB0fXcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEM9SShUKTtmdW5jdGlvbiBQKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gSSh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgUCh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoSSh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiB6KCl7cmV0dXJuIE8oTSgpLmN1cnZlKEMpKX1mdW5jdGlvbiBEKCl7dmFyIHQ9UygpLmN1cnZlKEMpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKEkodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1QLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIEY9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEIodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGoodCl7dmFyIG49QixpPU4sYT1rLG89QSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ri5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1pLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCthLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwrYS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyKyIifHxudWxsfXJldHVybiBsLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbCk6aX0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6YX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gVSh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFYodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBIKHQsZSxyLG4saSl7dmFyIGE9UihlLHIpLG89UihlLHI9KHIraSkvMikscz1SKG4sciksbD1SKG4saSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvdSk7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLGgpfX0sRz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxZPU1hdGguc3FydCgxLzMpLFc9MipZLFg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9XKSxuPXIqWTt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFo9TWF0aC5zaW4odS8xMCkvTWF0aC5zaW4oNyp1LzEwKSxKPU1hdGguc2luKGgvMTApKlosSz0tTWF0aC5jb3MoaC8xMCkqWixRPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49SipyLGk9SypyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4saSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89aCphLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfXQuY2xvc2VQYXRoKCl9fSwkPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSx0dD1NYXRoLnNxcnQoMyksZXQ9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj0tTWF0aC5zcXJ0KGUvKDMqdHQpKTt0Lm1vdmVUbygwLDIqciksdC5saW5lVG8oLXR0KnIsLXIpLHQubGluZVRvKHR0KnIsLXIpLHQuY2xvc2VQYXRoKCl9fSxydD0tLjUsbnQ9TWF0aC5zcXJ0KDMpLzIsaXQ9MS9NYXRoLnNxcnQoMTIpLGF0PTMqKGl0LzIrMSksb3Q9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9hdCksbj1yLzIsaT1yKml0LGE9bixvPXIqaXQrcixzPS1hLGw9bzt0Lm1vdmVUbyhuLGkpLHQubGluZVRvKGEsbyksdC5saW5lVG8ocyxsKSx0LmxpbmVUbyhydCpuLW50KmksbnQqbitydCppKSx0LmxpbmVUbyhydCphLW50Km8sbnQqYStydCpvKSx0LmxpbmVUbyhydCpzLW50KmwsbnQqcytydCpsKSx0LmxpbmVUbyhydCpuK250KmkscnQqaS1udCpuKSx0LmxpbmVUbyhydCphK250Km8scnQqby1udCphKSx0LmxpbmVUbyhydCpzK250KmwscnQqbC1udCpzKSx0LmNsb3NlUGF0aCgpfX0sc3Q9W3EsRyxYLCQsUSxldCxvdF07ZnVuY3Rpb24gbHQoKXt9ZnVuY3Rpb24gY3QodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK3IpLzYpfWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gaHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHB0KHQsZSl7dGhpcy5fYmFzaXM9bmV3IHV0KHQpLHRoaXMuX2JldGE9ZX11dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOmN0KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OmN0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpjdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0saHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpjdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0scHQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbixpPXRbMF0sYT1lWzBdLG89dFtyXS1pLHM9ZVtyXS1hLGw9LTE7KytsPD1yOyluPWwvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKGkrbipvKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKGErbipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBkdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIDE9PT1lP25ldyB1dCh0KTpuZXcgcHQodCxlKX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjg1KTtmdW5jdGlvbiBtdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtciksdC5feDIsdC5feTIpfWZ1bmN0aW9uIGd0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1ndC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6bXQodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Om10KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgdnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgZ3QodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geXQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXl0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDptdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHh0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IHl0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIGJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1idC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDptdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIF90PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IGJ0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIHd0KHQsZSxyKXt2YXIgbj10Ll94MSxpPXQuX3kxLGE9dC5feDIsbz10Ll95MjtpZih0Ll9sMDFfYT4xZS0xMil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7bj0obipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+MWUtMTIpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL3Usbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvdX10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gVHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1UdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ond0KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgVHQodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBBdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUF0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6d3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgTXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBBdCh0LGUpOm5ldyB5dCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIFN0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9U3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ond0KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEV0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgU3QodCxlKTpuZXcgYnQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBMdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIFB0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxvPShyLXQuX3kxKS8oaXx8bjwwJiYtMCkscz0oYSppK28qbikvKG4raSk7cmV0dXJuKEN0KGEpK0N0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gSXQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqZSxhLXMsby1zKnIsYSxvKX1mdW5jdGlvbiB6dCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD1uZXcgUnQodCl9ZnVuY3Rpb24gUnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBCdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtuLTFdPTIsYVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1pW2VdL2FbZS0xXSxhW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihpW24tMV09b1tuLTFdL2Fbbi0xXSxlPW4tMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtuLTFdPSh0W25dK2lbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIE50KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBqdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKG49byxvPXRbZVthXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24gVXQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gSHQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBVdCh0KS5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBlW3RdLWVbcl19KSl9ZnVuY3Rpb24gcXQodCl7Zm9yKHZhciBlLHI9LTEsbj0wLGk9dC5sZW5ndGgsYT0tMS8wOysrcjxpOykoZT0rdFtyXVsxXSk+YSYmKGE9ZSxuPXIpO3JldHVybiBufWZ1bmN0aW9uIEd0KHQpe3ZhciBlPXQubWFwKFl0KTtyZXR1cm4gVXQodCkuc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSkpfWZ1bmN0aW9uIFl0KHQpe2Zvcih2YXIgZSxyPTAsbj0tMSxpPXQubGVuZ3RoOysrbjxpOykoZT0rdFtuXVsxXSkmJihyKz1lKTtyZXR1cm4gcn1MdC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LHp0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpPdCh0aGlzLHRoaXMuX3QwLEl0KHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxPdCh0aGlzLEl0KHRoaXMscj1QdCh0aGlzLHQsZSkpLHIpO2JyZWFrO2RlZmF1bHQ6T3QodGhpcyx0aGlzLl90MCxyPVB0KHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPXJ9fX0sKER0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHp0LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7enQucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxSdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsaSl9fSxGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoO2lmKHIpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PXIpdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgbj1CdCh0KSxpPUJ0KGUpLGE9MCxvPTE7bzxyOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bYV0saVswXVthXSxuWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1yKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxOdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fSx0LmFyYz1mdW5jdGlvbigpe3ZhciB0PW0sbz1nLHc9cigwKSxUPW51bGwsaz12LEE9eSxNPXgsUz1udWxsO2Z1bmN0aW9uIEUoKXt2YXIgcixtLGc9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHY9K28uYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyktZix4PUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsRT1uKHgteSksTD14Pnk7aWYoU3x8KFM9cj1lLnBhdGgoKSksdjxnJiYobT12LHY9ZyxnPW0pLHY+MWUtMTIpaWYoRT5oLTFlLTEyKVMubW92ZVRvKHYqYSh5KSx2KmwoeSkpLFMuYXJjKDAsMCx2LHkseCwhTCksZz4xZS0xMiYmKFMubW92ZVRvKGcqYSh4KSxnKmwoeCkpLFMuYXJjKDAsMCxnLHgseSxMKSk7ZWxzZXt2YXIgQyxQLEk9eSxPPXgsej15LEQ9eCxSPUUsRj1FLEI9TS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPUI+MWUtMTImJihUPytULmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKGcqZyt2KnYpKSxqPXMobih2LWcpLzIsK3cuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxVPWosVj1qO2lmKE4+MWUtMTIpe3ZhciBIPWQoTi9nKmwoQikpLHE9ZChOL3YqbChCKSk7KFItPTIqSCk+MWUtMTI/KHorPUgqPUw/MTotMSxELT1IKTooUj0wLHo9RD0oeSt4KS8yKSwoRi09MipxKT4xZS0xMj8oSSs9cSo9TD8xOi0xLE8tPXEpOihGPTAsST1PPSh5K3gpLzIpfXZhciBHPXYqYShJKSxZPXYqbChJKSxXPWcqYShEKSxYPWcqbChEKTtpZihqPjFlLTEyKXt2YXIgWixKPXYqYShPKSxLPXYqbChPKSxRPWcqYSh6KSwkPWcqbCh6KTtpZihFPHUmJihaPWIoRyxZLFEsJCxKLEssVyxYKSkpe3ZhciB0dD1HLVpbMF0sZXQ9WS1aWzFdLHJ0PUotWlswXSxudD1LLVpbMV0saXQ9MS9sKHAoKHR0KnJ0K2V0Km50KS8oYyh0dCp0dCtldCpldCkqYyhydCpydCtudCpudCkpKS8yKSxhdD1jKFpbMF0qWlswXStaWzFdKlpbMV0pO1U9cyhqLChnLWF0KS8oaXQtMSkpLFY9cyhqLCh2LWF0KS8oaXQrMSkpfX1GPjFlLTEyP1Y+MWUtMTI/KEM9XyhRLCQsRyxZLHYsVixMKSxQPV8oSixLLFcsWCx2LFYsTCksUy5tb3ZlVG8oQy5jeCtDLngwMSxDLmN5K0MueTAxKSxWPGo/Uy5hcmMoQy5jeCxDLmN5LFYsaShDLnkwMSxDLngwMSksaShQLnkwMSxQLngwMSksIUwpOihTLmFyYyhDLmN4LEMuY3ksVixpKEMueTAxLEMueDAxKSxpKEMueTExLEMueDExKSwhTCksUy5hcmMoMCwwLHYsaShDLmN5K0MueTExLEMuY3grQy54MTEpLGkoUC5jeStQLnkxMSxQLmN4K1AueDExKSwhTCksUy5hcmMoUC5jeCxQLmN5LFYsaShQLnkxMSxQLngxMSksaShQLnkwMSxQLngwMSksIUwpKSk6KFMubW92ZVRvKEcsWSksUy5hcmMoMCwwLHYsSSxPLCFMKSk6Uy5tb3ZlVG8oRyxZKSxnPjFlLTEyJiZSPjFlLTEyP1U+MWUtMTI/KEM9XyhXLFgsSixLLGcsLVUsTCksUD1fKEcsWSxRLCQsZywtVSxMKSxTLmxpbmVUbyhDLmN4K0MueDAxLEMuY3krQy55MDEpLFU8aj9TLmFyYyhDLmN4LEMuY3ksVSxpKEMueTAxLEMueDAxKSxpKFAueTAxLFAueDAxKSwhTCk6KFMuYXJjKEMuY3gsQy5jeSxVLGkoQy55MDEsQy54MDEpLGkoQy55MTEsQy54MTEpLCFMKSxTLmFyYygwLDAsZyxpKEMuY3krQy55MTEsQy5jeCtDLngxMSksaShQLmN5K1AueTExLFAuY3grUC54MTEpLEwpLFMuYXJjKFAuY3gsUC5jeSxVLGkoUC55MTEsUC54MTEpLGkoUC55MDEsUC54MDEpLCFMKSkpOlMuYXJjKDAsMCxnLEQseixMKTpTLmxpbmVUbyhXLFgpfWVsc2UgUy5tb3ZlVG8oMCwwKTtpZihTLmNsb3NlUGF0aCgpLHIpcmV0dXJuIFM9bnVsbCxyKyIifHxudWxsfXJldHVybiBFLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK0EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXUvMjtyZXR1cm5bYShyKSplLGwocikqZV19LEUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxFKTp0fSxFLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6b30sRS5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTp3fSxFLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpUfSxFLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTprfSxFLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6QX0sRS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOk19LEUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1udWxsPT10P251bGw6dCxFKTpTfSxFfSx0LmFyZWE9Uyx0LmFyZWFSYWRpYWw9RCx0LmN1cnZlQmFzaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1dCh0KX0sdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZnQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sdC5jdXJ2ZUJ1bmRsZT1kdCx0LmN1cnZlQ2FyZGluYWw9dnQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXh0LHQuY3VydmVDYXJkaW5hbE9wZW49X3QsdC5jdXJ2ZUNhdG11bGxSb209a3QsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9TXQsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPUV0LHQuY3VydmVMaW5lYXI9VCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTHQodCl9LHQuY3VydmVNb25vdG9uZVg9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6dCh0KX0sdC5jdXJ2ZU1vbm90b25lWT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IER0KHQpfSx0LmN1cnZlTmF0dXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEZ0KHQpfSx0LmN1cnZlU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE50KHQsLjUpfSx0LmN1cnZlU3RlcEFmdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTnQodCwxKX0sdC5jdXJ2ZVN0ZXBCZWZvcmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOdCh0LDApfSx0LmxpbmU9TSx0LmxpbmVSYWRpYWw9eix0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGooVSl9LHQubGlua1JhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWooSCk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5saW5rVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gaihWKX0sdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1MLGU9RSxuPW51bGwsaT1yKDApLGE9cihoKSxvPXIoMCk7ZnVuY3Rpb24gcyhyKXt2YXIgcyxsLGMsdSxmLHA9ci5sZW5ndGgsZD0wLG09bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApLHY9K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4oaCxNYXRoLm1heCgtaCxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKS12KSkseD1NYXRoLm1pbihNYXRoLmFicyh5KS9wLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXgqKHk8MD8tMToxKTtmb3Iocz0wO3M8cDsrK3MpKGY9Z1ttW3NdPXNdPSt0KHJbc10scyxyKSk+MCYmKGQrPWYpO2ZvcihudWxsIT1lP20uc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZShnW3RdLGdbcl0pfSkpOm51bGwhPW4mJm0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihyW3RdLHJbZV0pfSkpLHM9MCxjPWQ/KHktcCpiKS9kOjA7czxwOysrcyx2PXUpbD1tW3NdLHU9disoKGY9Z1tsXSk+MD9mKmM6MCkrYixnW2xdPXtkYXRhOnJbbF0saW5kZXg6cyx2YWx1ZTpmLHN0YXJ0QW5nbGU6dixlbmRBbmdsZTp1LHBhZEFuZ2xlOnh9O3JldHVybiBnfXJldHVybiBzLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6YX0scy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOm99LHN9LHQucG9pbnRSYWRpYWw9Uix0LnJhZGlhbEFyZWE9RCx0LnJhZGlhbExpbmU9eix0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIHQ9cihbXSksZT1VdCxuPWp0LGk9VnQ7ZnVuY3Rpb24gYShyKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD1yLmxlbmd0aCxjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMpO2ZvcihhPTA7YTxjOysrYSl7Zm9yKHZhciBmLGg9c1thXSxwPXVbYV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKXBbZF09Zj1bMCwraShyW2RdLGgsZCxyKV0sZi5kYXRhPXJbZF07cC5rZXk9aH1mb3IoYT0wLG89ZSh1KTthPGM7KythKXVbb1thXV0uaW5kZXg9YTtyZXR1cm4gbih1LG8pLHV9cmV0dXJuIGEua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoRi5jYWxsKGUpKSxhKTp0fSxhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYSk6aX0sYS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P1V0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cihGLmNhbGwodCkpLGEpOmV9LGEub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/anQ6dCxhKTpufSxhfSx0LnN0YWNrT2Zmc2V0RGl2ZXJnaW5nPWZ1bmN0aW9uKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciByLG4saSxhLG8scyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihhPW89MCxyPTA7cjxzOysrcikoaT0obj10W2Vbcl1dW2xdKVsxXS1uWzBdKT4wPyhuWzBdPWEsblsxXT1hKz1pKTppPDA/KG5bMV09byxuWzBdPW8rPWkpOihuWzBdPTAsblsxXT1pKX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPXI9MDtyPG47KytyKWkrPXRbcl1bYV1bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpdFtyXVthXVsxXS89aX1qdCh0LGUpfX0sdC5zdGFja09mZnNldE5vbmU9anQsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxlKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciByLG49MCxpPXRbZVswXV0sYT1pLmxlbmd0aDtuPGE7KytuKXtmb3IodmFyIG89MCxzPTA7bzxyOysrbylzKz10W29dW25dWzFdfHwwO2lbbl1bMV0rPWlbbl1bMF09LXMvMn1qdCh0LGUpfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4wJiYobj0ocj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksYT0wLG89MTtvPG47KytvKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8aTsrK3Mpe2Zvcih2YXIgdT10W2Vbc11dLGY9dVtvXVsxXXx8MCxoPShmLSh1W28tMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZD10W2VbcF1dO2grPShkW29dWzFdfHwwKS0oZFtvLTFdWzFdfHwwKX1sKz1mLGMrPWgqZn1yW28tMV1bMV0rPXJbby0xXVswXT1hLGwmJihhLT1jL2wpfXJbby0xXVsxXSs9cltvLTFdWzBdPWEsanQodCxlKX19LHQuc3RhY2tPcmRlckFwcGVhcmFuY2U9SHQsdC5zdGFja09yZGVyQXNjZW5kaW5nPUd0LHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIEd0KHQpLnJldmVyc2UoKX0sdC5zdGFja09yZGVySW5zaWRlT3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lmxlbmd0aCxpPXQubWFwKFl0KSxhPUh0KHQpLG89MCxzPTAsbD1bXSxjPVtdO2ZvcihlPTA7ZTxuOysrZSlyPWFbZV0sbzxzPyhvKz1pW3JdLGwucHVzaChyKSk6KHMrPWlbcl0sYy5wdXNoKHIpKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfSx0LnN0YWNrT3JkZXJOb25lPVV0LHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIFV0KHQpLnJldmVyc2UoKX0sdC5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1yKHEpLG49cig2NCksaT1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcjtpZihpfHwoaT1yPWUucGF0aCgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGksK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBpPW51bGwscisiInx8bnVsbH1yZXR1cm4gYS50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cihlKSxhKTp0fSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOnQsYSk6aX0sYX0sdC5zeW1ib2xDaXJjbGU9cSx0LnN5bWJvbENyb3NzPUcsdC5zeW1ib2xEaWFtb25kPVgsdC5zeW1ib2xTcXVhcmU9JCx0LnN5bWJvbFN0YXI9USx0LnN5bWJvbFRyaWFuZ2xlPWV0LHQuc3ltYm9sV3llPW90LHQuc3ltYm9scz1zdCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtcGF0aCI6MTE3fV0sMTIwOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy10aW1lIikpOmkoKG49bnx8c2VsZikuZDM9bi5kM3x8e30sbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIG4odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJue3k6dCxtOmUsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gYSh0KXt2YXIgYT10LmRhdGVUaW1lLG89dC5kYXRlLGw9dC50aW1lLGM9dC5wZXJpb2RzLHU9dC5kYXlzLGY9dC5zaG9ydERheXMsaD10Lm1vbnRocyx5dD10LnNob3J0TW9udGhzLHh0PXAoYyksYnQ9ZChjKSxfdD1wKHUpLHd0PWQodSksVHQ9cChmKSxrdD1kKGYpLEF0PXAoaCksTXQ9ZChoKSxTdD1wKHl0KSxFdD1kKHl0KSxMdD17YTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4geXRbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gaFt0LmdldE1vbnRoKCldfSxjOm51bGwsZDpELGU6RCxmOmosSDpSLEk6RixqOkIsTDpOLG06VSxNOlYscDpmdW5jdGlvbih0KXtyZXR1cm4gY1srKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6Z3Qsczp2dCxTOkgsdTpxLFU6RyxWOlksdzpXLFc6WCx4Om51bGwsWDpudWxsLHk6WixZOkosWjpLLCIlIjptdH0sQ3Q9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGZbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHl0W3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGhbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6USxlOlEsZjpudCxIOiQsSTp0dCxqOmV0LEw6cnQsbTppdCxNOmF0LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGNbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROmd0LHM6dnQsUzpvdCx1OnN0LFU6bHQsVjpjdCx3OnV0LFc6ZnQseDpudWxsLFg6bnVsbCx5Omh0LFk6cHQsWjpkdCwiJSI6bXR9LFB0PXthOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1UdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9a3RbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUscil7dmFyIG49X3QuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PXd0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVN0LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1FdFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1BdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09TXRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHp0KHQsYSxlLHIpfSxkOkEsZTpBLGY6UCxIOlMsSTpTLGo6TSxMOkMsbTprLE06RSxwOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj14dC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnA9YnRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0scTpULFE6TyxzOnosUzpMLHU6ZyxVOnYsVjp5LHc6bSxXOngseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHp0KHQsbyxlLHIpfSxYOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4genQodCxsLGUscil9LHk6XyxZOmIsWjp3LCIlIjpJfTtmdW5jdGlvbiBJdCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGEsbz1bXSxsPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihyIGluc3RhbmNlb2YgRGF0ZXx8KHI9bmV3IERhdGUoK3IpKTsrK2w8dTspMzc9PT10LmNoYXJDb2RlQXQobCkmJihvLnB1c2godC5zbGljZShjLGwpKSxudWxsIT0oaT1zW249dC5jaGFyQXQoKytsKV0pP249dC5jaGFyQXQoKytsKTppPSJlIj09PW4/IiAiOiIwIiwoYT1lW25dKSYmKG49YShyLGkpKSxvLnB1c2gobiksYz1sKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLGwpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiBPdCh0LGEpe3JldHVybiBmdW5jdGlvbihvKXt2YXIgcyxsLGM9aSgxOTAwLHZvaWQgMCwxKTtpZih6dChjLHQsbys9IiIsMCkhPW8ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGMpcmV0dXJuIG5ldyBEYXRlKGMuUSk7aWYoInMiaW4gYylyZXR1cm4gbmV3IERhdGUoMWUzKmMucysoIkwiaW4gYz9jLkw6MCkpO2lmKGEmJiEoIloiaW4gYykmJihjLlo9MCksInAiaW4gYyYmKGMuSD1jLkglMTIrMTIqYy5wKSx2b2lkIDA9PT1jLm0mJihjLm09InEiaW4gYz9jLnE6MCksIlYiaW4gYyl7aWYoYy5WPDF8fGMuVj41MylyZXR1cm4gbnVsbDsidyJpbiBjfHwoYy53PTEpLCJaImluIGM/KGw9KHM9bihpKGMueSwwLDEpKSkuZ2V0VVRDRGF5KCkscz1sPjR8fDA9PT1sP2UudXRjTW9uZGF5LmNlaWwocyk6ZS51dGNNb25kYXkocykscz1lLnV0Y0RheS5vZmZzZXQocyw3KihjLlYtMSkpLGMueT1zLmdldFVUQ0Z1bGxZZWFyKCksYy5tPXMuZ2V0VVRDTW9udGgoKSxjLmQ9cy5nZXRVVENEYXRlKCkrKGMudys2KSU3KToobD0ocz1yKGkoYy55LDAsMSkpKS5nZXREYXkoKSxzPWw+NHx8MD09PWw/ZS50aW1lTW9uZGF5LmNlaWwocyk6ZS50aW1lTW9uZGF5KHMpLHM9ZS50aW1lRGF5Lm9mZnNldChzLDcqKGMuVi0xKSksYy55PXMuZ2V0RnVsbFllYXIoKSxjLm09cy5nZXRNb250aCgpLGMuZD1zLmdldERhdGUoKSsoYy53KzYpJTcpfWVsc2UoIlciaW4gY3x8IlUiaW4gYykmJigidyJpbiBjfHwoYy53PSJ1ImluIGM/Yy51JTc6IlciaW4gYz8xOjApLGw9IloiaW4gYz9uKGkoYy55LDAsMSkpLmdldFVUQ0RheSgpOnIoaShjLnksMCwxKSkuZ2V0RGF5KCksYy5tPTAsYy5kPSJXImluIGM/KGMudys2KSU3KzcqYy5XLShsKzUpJTc6Yy53KzcqYy5VLShsKzYpJTcpO3JldHVybiJaImluIGM/KGMuSCs9Yy5aLzEwMHwwLGMuTSs9Yy5aJTEwMCxuKGMpKTpyKGMpfX1mdW5jdGlvbiB6dCh0LGUscixuKXtmb3IodmFyIGksYSxvPTAsbD1lLmxlbmd0aCxjPXIubGVuZ3RoO288bDspe2lmKG4+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQobysrKSkpe2lmKGk9ZS5jaGFyQXQobysrKSwhKGE9UHRbaSBpbiBzP2UuY2hhckF0KG8rKyk6aV0pfHwobj1hKHQscixuKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPXIuY2hhckNvZGVBdChuKyspKXJldHVybi0xfXJldHVybiBufXJldHVybiBMdC54PUl0KG8sTHQpLEx0Llg9SXQobCxMdCksTHQuYz1JdChhLEx0KSxDdC54PUl0KG8sQ3QpLEN0Llg9SXQobCxDdCksQ3QuYz1JdChhLEN0KSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPUl0KHQrPSIiLEx0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1PdCh0Kz0iIiwhMSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPUl0KHQrPSIiLEN0KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1PdCh0Kz0iIiwhMCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fXZhciBvLHM9eyItIjoiIixfOiIgIiwwOiIwIn0sbD0vXlxzKlxkKy8sYz0vXiUvLHU9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIGYodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC5yZXBsYWNlKHUsIlxcJCYiKX1mdW5jdGlvbiBwKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChoKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9e30scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllW3Rbcl0udG9Mb3dlckNhc2UoKV09cjtyZXR1cm4gZX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC51PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlY9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lnk9K25bMF0rKCtuWzBdPjY4PzE5MDA6MmUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC5xPTMqblswXS0zLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQubT0wLHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8odC5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPWMuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBPKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIGYodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIGYodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gRih0LGUpe3JldHVybiBmKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBCKHQscil7cmV0dXJuIGYoMStlLnRpbWVEYXkuY291bnQoZS50aW1lWWVhcih0KSx0KSxyLDMpfWZ1bmN0aW9uIE4odCxlKXtyZXR1cm4gZih0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBOKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gVSh0LGUpe3JldHVybiBmKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gVih0LGUpe3JldHVybiBmKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBmKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gcSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gRyh0LHIpe3JldHVybiBmKGUudGltZVN1bmRheS5jb3VudChlLnRpbWVZZWFyKHQpLTEsdCksciwyKX1mdW5jdGlvbiBZKHQscil7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9lLnRpbWVUaHVyc2RheSh0KTplLnRpbWVUaHVyc2RheS5jZWlsKHQpLGYoZS50aW1lVGh1cnNkYXkuY291bnQoZS50aW1lWWVhcih0KSx0KSsoND09PWUudGltZVllYXIodCkuZ2V0RGF5KCkpLHIsMil9ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBYKHQscil7cmV0dXJuIGYoZS50aW1lTW9uZGF5LmNvdW50KGUudGltZVllYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gZih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSih0LGUpe3JldHVybiBmKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBLKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrZihlLzYwfDAsIjAiLDIpK2YoZSU2MCwiMCIsMil9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBmKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIHR0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIGV0KHQscil7cmV0dXJuIGYoMStlLnV0Y0RheS5jb3VudChlLnV0Y1llYXIodCksdCksciwzKX1mdW5jdGlvbiBydCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBudCh0LGUpe3JldHVybiBydCh0LGUpKyIwMDAifWZ1bmN0aW9uIGl0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBhdCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gb3QodCxlKXtyZXR1cm4gZih0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIHN0KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBsdCh0LHIpe3JldHVybiBmKGUudXRjU3VuZGF5LmNvdW50KGUudXRjWWVhcih0KS0xLHQpLHIsMil9ZnVuY3Rpb24gY3QodCxyKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP2UudXRjVGh1cnNkYXkodCk6ZS51dGNUaHVyc2RheS5jZWlsKHQpLGYoZS51dGNUaHVyc2RheS5jb3VudChlLnV0Y1llYXIodCksdCkrKDQ9PT1lLnV0Y1llYXIodCkuZ2V0VVRDRGF5KCkpLHIsMil9ZnVuY3Rpb24gdXQodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZnQodCxyKXtyZXR1cm4gZihlLnV0Y01vbmRheS5jb3VudChlLnV0Y1llYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIGh0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHB0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGR0KCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBtdCgpe3JldHVybiIlIn1mdW5jdGlvbiBndCh0KXtyZXR1cm4rdH1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWZ1bmN0aW9uIHl0KGUpe3JldHVybiBvPWEoZSksdC50aW1lRm9ybWF0PW8uZm9ybWF0LHQudGltZVBhcnNlPW8ucGFyc2UsdC51dGNGb3JtYXQ9by51dGNGb3JtYXQsdC51dGNQYXJzZT1vLnV0Y1BhcnNlLG99eXQoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgeHQ9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBidD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9OnQudXRjUGFyc2UoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3QuaXNvRm9ybWF0PXh0LHQuaXNvUGFyc2U9YnQsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT15dCx0LnRpbWVGb3JtYXRMb2NhbGU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtdGltZSI6MTIxfV0sMTIxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT1uZXcgRGF0ZSxyPW5ldyBEYXRlO2Z1bmN0aW9uIG4odCxpLGEsbyl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdChlPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtlKSksZX1yZXR1cm4gcy5mbG9vcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX0scy5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksaShlLDEpLHQoZSksZX0scy5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1zKHQpLHI9cy5jZWlsKHQpO3JldHVybiB0LWU8ci10P2U6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0scy5yYW5nZT1mdW5jdGlvbihlLHIsbil7dmFyIGEsbz1bXTtpZihlPXMuY2VpbChlKSxuPW51bGw9PW4/MTpNYXRoLmZsb29yKG4pLCEoZTxyJiZuPjApKXJldHVybiBvO2Rve28ucHVzaChhPW5ldyBEYXRlKCtlKSksaShlLG4pLHQoZSl9d2hpbGUoYTxlJiZlPHIpO3JldHVybiBvfSxzLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbigoZnVuY3Rpb24ocil7aWYocj49cilmb3IoO3QociksIWUocik7KXIuc2V0VGltZShyLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7aSh0LC0xKSwhZSh0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7aSh0LDEpLCFlKHQpOyk7fSkpfSxhJiYocy5jb3VudD1mdW5jdGlvbihuLGkpe3JldHVybiBlLnNldFRpbWUoK24pLHIuc2V0VGltZSgraSksdChlKSx0KHIpLE1hdGguZmxvb3IoYShlLHIpKX0scy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3MuZmlsdGVyKG8/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY291bnQoMCxlKSV0PT0wfSk6czpudWxsfSksc312YXIgaT1uKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7aS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP24oKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxyKXtlLnNldFRpbWUoK2Urcip0KX0pLChmdW5jdGlvbihlLHIpe3JldHVybihyLWUpL3R9KSk6aTpudWxsfTt2YXIgYT1pLnJhbmdlLG89bigoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxzPW8ucmFuZ2UsbD1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjPWwucmFuZ2UsdT1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKS02ZTQqdC5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksZj11LnJhbmdlLGg9bigoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSkscD1oLnJhbmdlO2Z1bmN0aW9uIGQodCl7cmV0dXJuIG4oKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvNjA0OGU1fSkpfXZhciBtPWQoMCksZz1kKDEpLHY9ZCgyKSx5PWQoMykseD1kKDQpLGI9ZCg1KSxfPWQoNiksdz1tLnJhbmdlLFQ9Zy5yYW5nZSxrPXYucmFuZ2UsQT15LnJhbmdlLE09eC5yYW5nZSxTPWIucmFuZ2UsRT1fLnJhbmdlLEw9bigoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLEM9TC5yYW5nZSxQPW4oKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO1AuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9uKChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUscil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrcip0KX0pKTpudWxsfTt2YXIgST1QLnJhbmdlLE89bigoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSx6PU8ucmFuZ2UsRD1uKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksUj1ELnJhbmdlLEY9bigoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLEI9Ri5yYW5nZTtmdW5jdGlvbiBOKHQpe3JldHVybiBuKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82MDQ4ZTV9KSl9dmFyIGo9TigwKSxVPU4oMSksVj1OKDIpLEg9TigzKSxxPU4oNCksRz1OKDUpLFk9Tig2KSxXPWoucmFuZ2UsWD1VLnJhbmdlLFo9Vi5yYW5nZSxKPUgucmFuZ2UsSz1xLnJhbmdlLFE9Ry5yYW5nZSwkPVkucmFuZ2UsdHQ9bigoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGV0PXR0LnJhbmdlLHJ0PW4oKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO3J0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHIpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3IqdCl9KSk6bnVsbH07dmFyIG50PXJ0LnJhbmdlO3QudGltZURheT1oLHQudGltZURheXM9cCx0LnRpbWVGcmlkYXk9Yix0LnRpbWVGcmlkYXlzPVMsdC50aW1lSG91cj11LHQudGltZUhvdXJzPWYsdC50aW1lSW50ZXJ2YWw9bix0LnRpbWVNaWxsaXNlY29uZD1pLHQudGltZU1pbGxpc2Vjb25kcz1hLHQudGltZU1pbnV0ZT1sLHQudGltZU1pbnV0ZXM9Yyx0LnRpbWVNb25kYXk9Zyx0LnRpbWVNb25kYXlzPVQsdC50aW1lTW9udGg9TCx0LnRpbWVNb250aHM9Qyx0LnRpbWVTYXR1cmRheT1fLHQudGltZVNhdHVyZGF5cz1FLHQudGltZVNlY29uZD1vLHQudGltZVNlY29uZHM9cyx0LnRpbWVTdW5kYXk9bSx0LnRpbWVTdW5kYXlzPXcsdC50aW1lVGh1cnNkYXk9eCx0LnRpbWVUaHVyc2RheXM9TSx0LnRpbWVUdWVzZGF5PXYsdC50aW1lVHVlc2RheXM9ayx0LnRpbWVXZWRuZXNkYXk9eSx0LnRpbWVXZWRuZXNkYXlzPUEsdC50aW1lV2Vlaz1tLHQudGltZVdlZWtzPXcsdC50aW1lWWVhcj1QLHQudGltZVllYXJzPUksdC51dGNEYXk9Rix0LnV0Y0RheXM9Qix0LnV0Y0ZyaWRheT1HLHQudXRjRnJpZGF5cz1RLHQudXRjSG91cj1ELHQudXRjSG91cnM9Uix0LnV0Y01pbGxpc2Vjb25kPWksdC51dGNNaWxsaXNlY29uZHM9YSx0LnV0Y01pbnV0ZT1PLHQudXRjTWludXRlcz16LHQudXRjTW9uZGF5PVUsdC51dGNNb25kYXlzPVgsdC51dGNNb250aD10dCx0LnV0Y01vbnRocz1ldCx0LnV0Y1NhdHVyZGF5PVksdC51dGNTYXR1cmRheXM9JCx0LnV0Y1NlY29uZD1vLHQudXRjU2Vjb25kcz1zLHQudXRjU3VuZGF5PWosdC51dGNTdW5kYXlzPVcsdC51dGNUaHVyc2RheT1xLHQudXRjVGh1cnNkYXlzPUssdC51dGNUdWVzZGF5PVYsdC51dGNUdWVzZGF5cz1aLHQudXRjV2VkbmVzZGF5PUgsdC51dGNXZWRuZXNkYXlzPUosdC51dGNXZWVrPWosdC51dGNXZWVrcz1XLHQudXRjWWVhcj1ydCx0LnV0Y1llYXJzPW50LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDEyMjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMjFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMjF9XSwxMjM6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbj0wLGk9MCxhPTAsbz0wLHM9MCxsPTAsYz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx1PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGYoKXtyZXR1cm4gc3x8KHUoaCkscz1jLm5vdygpK2wpfWZ1bmN0aW9uIGgoKXtzPTB9ZnVuY3Rpb24gcCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49bmV3IHA7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiBtKCl7ZigpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PXMtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gZygpe3M9KG89Yy5ub3coKSkrbCxuPWk9MDt0cnl7bSgpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixpPWUsYT0xLzA7Zm9yKDtpOylpLl9jYWxsPyhhPmkuX3RpbWUmJihhPWkuX3RpbWUpLHQ9aSxpPWkuX25leHQpOihuPWkuX25leHQsaS5fbmV4dD1udWxsLGk9dD90Ll9uZXh0PW46ZT1uKTtyPXQseShhKX0oKSxzPTB9fWZ1bmN0aW9uIHYoKXt2YXIgdD1jLm5vdygpLGU9dC1vO2U+MWUzJiYobC09ZSxvPXQpfWZ1bmN0aW9uIHkodCl7bnx8KGkmJihpPWNsZWFyVGltZW91dChpKSksdC1zPjI0Pyh0PDEvMCYmKGk9c2V0VGltZW91dChnLHQtYy5ub3coKS1sKSksYSYmKGE9Y2xlYXJJbnRlcnZhbChhKSkpOihhfHwobz1jLm5vdygpLGE9c2V0SW50ZXJ2YWwodiwxZTMpKSxuPTEsdShnKSkpfXAucHJvdG90eXBlPWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwLHJlc3RhcnQ6ZnVuY3Rpb24odCxuLGkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7aT0obnVsbD09aT9mKCk6K2kpKyhudWxsPT1uPzA6K24pLHRoaXMuX25leHR8fHI9PT10aGlzfHwocj9yLl9uZXh0PXRoaXM6ZT10aGlzLHI9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9aSx5KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHkoKSl9fSx0LmludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgcCxpPWU7cmV0dXJuIG51bGw9PWU/KG4ucmVzdGFydCh0LGUsciksbik6KGU9K2Uscj1udWxsPT1yP2YoKTorcixuLnJlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxuLnJlc3RhcnQoYSxpKz1lLHIpLHQobyl9KSxlLHIpLG4pfSx0Lm5vdz1mLHQudGltZW91dD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IHA7cmV0dXJuIGU9bnVsbD09ZT8wOitlLG4ucmVzdGFydCgoZnVuY3Rpb24ocil7bi5zdG9wKCksdChyK2UpfSksZSxyKSxufSx0LnRpbWVyPWQsdC50aW1lckZsdXNoPW0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylpZih2b2lkIDAhPT1hcmd1bWVudHNbdF0pcmV0dXJuIGFyZ3VtZW50c1t0XX19LHt9XSwxMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49KGEuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS5nZXRDb250ZXh0KCIyZCIpLGk9byhbMzIsMTI2XSk7ZnVuY3Rpb24gYSh0LGUpe0FycmF5LmlzQXJyYXkodCkmJih0PXQuam9pbigiLCAiKSk7dmFyIHIsYT17fSxzPTE2LGw9LjA1O2UmJigyPT09ZS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgZVswXT9yPW8oZSk6QXJyYXkuaXNBcnJheShlKT9yPWU6KGUubz9yPW8oZS5vKTplLnBhaXJzJiYocj1lLnBhaXJzKSxlLmZvbnRTaXplJiYocz1lLmZvbnRTaXplKSxudWxsIT1lLnRocmVzaG9sZCYmKGw9ZS50aHJlc2hvbGQpKSkscnx8KHI9aSksbi5mb250PXMrInB4ICIrdDtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIHU9cltjXSxmPW4ubWVhc3VyZVRleHQodVswXSkud2lkdGgrbi5tZWFzdXJlVGV4dCh1WzFdKS53aWR0aCxoPW4ubWVhc3VyZVRleHQodSkud2lkdGg7aWYoTWF0aC5hYnMoZi1oKT5zKmwpe3ZhciBwPShoLWYpL3M7YVt1XT0xZTMqcH19cmV0dXJuIGF9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj10WzBdO3I8PXRbMV07cisrKWZvcih2YXIgbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLGk9dFswXTtpPHRbMV07aSsrKXt2YXIgYT1uK1N0cmluZy5mcm9tQ2hhckNvZGUoaSk7ZS5wdXNoKGEpfXJldHVybiBlfWEuY3JlYXRlUGFpcnM9byxhLmFzY2lpPWl9LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJhYnMtc3ZnLXBhdGgiKSxpPXQoIm5vcm1hbGl6ZS1zdmctcGF0aCIpLGE9e006Im1vdmVUbyIsQzoiYmV6aWVyQ3VydmVUbyJ9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3QuYmVnaW5QYXRoKCksaShuKGUpKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLG49ZS5zbGljZSgxKTt0W2Fbcl1dLmFwcGx5KHQsbil9KSksdC5jbG9zZVBhdGgoKX19LHsiYWJzLXN2Zy1wYXRoIjo3MCwibm9ybWFsaXplLXN2Zy1wYXRoIjoyNDZ9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiaW50OCI6cmV0dXJuIEludDhBcnJheTtjYXNlImludDE2IjpyZXR1cm4gSW50MTZBcnJheTtjYXNlImludDMyIjpyZXR1cm4gSW50MzJBcnJheTtjYXNlInVpbnQ4IjpyZXR1cm4gVWludDhBcnJheTtjYXNlInVpbnQxNiI6cmV0dXJuIFVpbnQxNkFycmF5O2Nhc2UidWludDMyIjpyZXR1cm4gVWludDMyQXJyYXk7Y2FzZSJmbG9hdDMyIjpyZXR1cm4gRmxvYXQzMkFycmF5O2Nhc2UiZmxvYXQ2NCI6cmV0dXJuIEZsb2F0NjRBcnJheTtjYXNlImFycmF5IjpyZXR1cm4gQXJyYXk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gVWludDhDbGFtcGVkQXJyYXl9fX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtzd2l0Y2godm9pZCAwPT09ZSYmKGU9MCksdHlwZW9mIHQpe2Nhc2UibnVtYmVyIjppZih0PjApcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfSgwfHQsZSk7YnJlYWs7Y2FzZSJvYmplY3QiOmlmKCJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTB8ZVtuXTtpZihpPD0wKXJldHVybltdO3ZhciBhLG89bmV3IEFycmF5KGkpO2lmKG49PT1lLmxlbmd0aC0xKWZvcihhPTA7YTxpOysrYSlvW2FdPXI7ZWxzZSBmb3IoYT0wO2E8aTsrK2Epb1thXT10KGUscixuKzEpO3JldHVybiBvfSh0LGUsMCl9cmV0dXJuW119fSx7fV0sMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3I9cnx8Mjt2YXIgbixzLGwsYyx1LHAsZCxnPWUmJmUubGVuZ3RoLHY9Zz9lWzBdKnI6dC5sZW5ndGgseT1pKHQsMCx2LHIsITApLHg9W107aWYoIXl8fHkubmV4dD09PXkucHJldilyZXR1cm4geDtpZihnJiYoeT1mdW5jdGlvbih0LGUscixuKXt2YXIgbyxzLGwsYyx1LHA9W107Zm9yKG89MCxzPWUubGVuZ3RoO288cztvKyspbD1lW29dKm4sYz1vPHMtMT9lW28rMV0qbjp0Lmxlbmd0aCwodT1pKHQsbCxjLG4sITEpKT09PXUubmV4dCYmKHUuc3RlaW5lcj0hMCkscC5wdXNoKG0odSkpO2ZvcihwLnNvcnQoZiksbz0wO288cC5sZW5ndGg7bysrKWgocFtvXSxyKSxyPWEocixyLm5leHQpO3JldHVybiByfSh0LGUseSxyKSksdC5sZW5ndGg+ODAqcil7bj1sPXRbMF0scz1jPXRbMV07Zm9yKHZhciBiPXI7Yjx2O2IrPXIpKHU9dFtiXSk8biYmKG49dSksKHA9dFtiKzFdKTxzJiYocz1wKSx1PmwmJihsPXUpLHA+YyYmKGM9cCk7ZD0wIT09KGQ9TWF0aC5tYXgobC1uLGMtcykpPzEvZDowfXJldHVybiBvKHkseCxyLG4scyxkKSx4fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1FKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPUEoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1BKGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJngobyxvLm5leHQpJiYoTShvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBhKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwheChuLG4ubmV4dCkmJjAhPT15KG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihNKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscixuLGksZixoKXtpZih0KXshaCYmZiYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PWQoaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGYpO2Zvcih2YXIgcCxtLGc9dDt0LnByZXYhPT10Lm5leHQ7KWlmKHA9dC5wcmV2LG09dC5uZXh0LGY/bCh0LG4saSxmKTpzKHQpKWUucHVzaChwLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2gobS5pL3IpLE0odCksdD1tLm5leHQsZz1tLm5leHQ7ZWxzZSBpZigodD1tKT09PWcpe2g/MT09PWg/byh0PWMoYSh0KSxlLHIpLGUscixuLGksZiwyKToyPT09aCYmdSh0LGUscixuLGksZik6byhhKHQpLGUscixuLGksZiwxKTticmVha319fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZih5KGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKGcoZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJnkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoeShpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxmPWQocyxsLGUscixuKSxoPWQoYyx1LGUscixuKSxwPXQucHJldlosbT10Lm5leHRaO3AmJnAuej49ZiYmbSYmbS56PD1oOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmeShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixtIT09dC5wcmV2JiZtIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LG0ueCxtLnkpJiZ5KG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafWZvcig7cCYmcC56Pj1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmeShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO20mJm0uejw9aDspe2lmKG0hPT10LnByZXYmJm0hPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksbS54LG0ueSkmJnkobS5wcmV2LG0sbS5uZXh0KT49MClyZXR1cm4hMTttPW0ubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsbz1uLm5leHQubmV4dDsheChpLG8pJiZiKGksbixuLm5leHQsbykmJlQoaSxvKSYmVChvLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChvLmkvciksTShuKSxNKG4ubmV4dCksbj10PW8pLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gYShuKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgYz1sLm5leHQubmV4dDtjIT09bC5wcmV2Oyl7aWYobC5pIT09Yy5pJiZ2KGwsYykpe3ZhciB1PWsobCxjKTtyZXR1cm4gbD1hKGwsbC5uZXh0KSx1PWEodSx1Lm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyh1LGUscixuLGkscyl9Yz1jLm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBoKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHI7dmFyIGwsYz1yLHU9ci54LGY9ci55LGg9MS8wO249cjtkb3tpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmZyhhPGY/aTpvLGEsdSxmLGE8Zj9vOmksYSxuLngsbi55KSYmKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCksVChuLHQpJiYobDxofHxsPT09aCYmKG4ueD5yLnh8fG4ueD09PXIueCYmcChyLG4pKSkmJihyPW4saD1sKSksbj1uLm5leHR9d2hpbGUobiE9PWMpO3JldHVybiByfSh0LGUpKXt2YXIgcj1rKGUsdCk7YShlLGUubmV4dCksYShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4geSh0LnByZXYsdCxlLnByZXYpPDAmJnkoZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIGQodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBtKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gZyh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmYihyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKFQodCxlKSYmVChlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpJiYoeSh0LnByZXYsdCxlLnByZXYpfHx5KHQsZS5wcmV2LGUpKXx8eCh0LGUpJiZ5KHQucHJldix0LHQubmV4dCk+MCYmeShlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIHkodCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9dyh5KHQsZSxyKSksYT13KHkodCxlLG4pKSxvPXcoeShyLG4sdCkpLHM9dyh5KHIsbixlKSk7cmV0dXJuIGkhPT1hJiZvIT09c3x8KCEoMCE9PWl8fCFfKHQscixlKSl8fCghKDAhPT1hfHwhXyh0LG4sZSkpfHwoISgwIT09b3x8IV8ocix0LG4pKXx8ISgwIT09c3x8IV8ocixlLG4pKSkpKX1mdW5jdGlvbiBfKHQsZSxyKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsci54KSYmZS54Pj1NYXRoLm1pbih0Lngsci54KSYmZS55PD1NYXRoLm1heCh0Lnksci55KSYmZS55Pj1NYXRoLm1pbih0Lnksci55KX1mdW5jdGlvbiB3KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHkodC5wcmV2LHQsdC5uZXh0KTwwP3kodCxlLHQubmV4dCk+PTAmJnkodCx0LnByZXYsZSk+PTA6eSh0LGUsdC5wcmV2KTwwfHx5KHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gayh0LGUpe3ZhciByPW5ldyBTKHQuaSx0LngsdC55KSxuPW5ldyBTKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBBKHQsZSxyLG4pe3ZhciBpPW5ldyBTKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gTSh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIFModCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIEUodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9ZS5leHBvcnRzPW4sZS5leHBvcnRzLmRlZmF1bHQ9bixuLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoRSh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKEUodCxjLHUscikpfXZhciBmPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBoPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7Zis9TWF0aC5hYnMoKHRbaF0tdFtkXSkqKHRbcCsxXS10W2grMV0pLSh0W2hdLXRbcF0pKih0W2QrMV0tdFtoKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09Zj8wOk1hdGguYWJzKChmLW8pL28pfSxuLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfX0se31dLDEzMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1bXSxhPVtdLG89W10scz17fSxsPVtdO2Z1bmN0aW9uIGModCl7dmFyIGUsbixpPSExO2ZvcihhLnB1c2godCksb1t0XT0hMCxlPTA7ZTxsW3RdLmxlbmd0aDtlKyspKG49bFt0XVtlXSk9PT1yPyh1KHIsYSksaT0hMCk6b1tuXXx8KGk9YyhuKSk7aWYoaSkhZnVuY3Rpb24gdChlKXtvW2VdPSExLHMuaGFzT3duUHJvcGVydHkoZSkmJk9iamVjdC5rZXlzKHNbZV0pLmZvckVhY2goKGZ1bmN0aW9uKHIpe2RlbGV0ZSBzW2VdW3JdLG9bcl0mJnQocil9KSl9KHQpO2Vsc2UgZm9yKGU9MDtlPGxbdF0ubGVuZ3RoO2UrKyl7bj1sW3RdW2VdO3ZhciBmPXNbbl07Znx8KGY9e30sc1tuXT1mKSxmW25dPSEwfXJldHVybiBhLnBvcCgpLGl9ZnVuY3Rpb24gdSh0LHIpe3ZhciBuPVtdLmNvbmNhdChyKS5jb25jYXQodCk7ZT9lKGMpOmkucHVzaChuKX1mdW5jdGlvbiBmKGUpeyFmdW5jdGlvbihlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylyPGUmJih0W3JdPVtdKSx0W3JdPXRbcl0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pKX0oZSk7Zm9yKHZhciByLGk9bih0KS5jb21wb25lbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPjF9KSksYT0xLzAsbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8aVtvXS5sZW5ndGg7cysrKWlbb11bc108YSYmKGE9aVtvXVtzXSxyPW8pO3ZhciBsPWlbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6YSxhZGpMaXN0OnQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybi0xPT09bC5pbmRleE9mKGUpP1tdOnQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMSE9PWwuaW5kZXhPZih0KX0pKX0pKX19cj0wO2Zvcih2YXIgaD10Lmxlbmd0aDtyPGg7KXt2YXIgcD1mKHIpO2lmKHI9cC5sZWFzdFZlcnRleCxsPXAuYWRqTGlzdCl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspZm9yKHZhciBtPTA7bTxsW2RdLmxlbmd0aDttKyspe3ZhciBnPWxbZF1bbV07b1srZ109ITEsc1tnXT17fX1jKHIpLHIrPTF9ZWxzZSByPWh9cmV0dXJuIGU/dm9pZCAwOml9fSx7InN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjozMDZ9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcykubGVuZ3RoPTAsdGhpc319LHsiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIjoxNjJ9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP0FycmF5LmZyb206dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTMzLCIuL3NoaW0iOjEzNH1dLDEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9QXJyYXkuZnJvbTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgciYmKGU9cih0PVsicmF6IiwiZHdhIl0pLEJvb2xlYW4oZSYmZSE9PXQmJiJkd2EiPT09ZVsxXSkpfX0se31dLDEzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczYtc3ltYm9sIikuaXRlcmF0b3IsaT10KCIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxhPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWZ1bmN0aW9uIiksbz10KCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiKSxzPXQoIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGw9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIiksYz10KCIuLi8uLi9vYmplY3QvaXMtdmFsdWUiKSx1PXQoIi4uLy4uL3N0cmluZy9pcy1zdHJpbmciKSxmPUFycmF5LmlzQXJyYXksaD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxwPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixtLGcsdix5LHgsYixfLHcsVD1hcmd1bWVudHNbMV0saz1hcmd1bWVudHNbMl07aWYodD1PYmplY3QobCh0KSksYyhUKSYmcyhUKSx0aGlzJiZ0aGlzIT09QXJyYXkmJmEodGhpcykpZT10aGlzO2Vsc2V7aWYoIVQpe2lmKGkodCkpcmV0dXJuIDEhPT0odj10Lmxlbmd0aCk/QXJyYXkuYXBwbHkobnVsbCx0KTooKGc9bmV3IEFycmF5KDEpKVswXT10WzBdLGcpO2lmKGYodCkpe2ZvcihnPW5ldyBBcnJheSh2PXQubGVuZ3RoKSxyPTA7cjx2OysrcilnW3JdPXRbcl07cmV0dXJuIGd9fWc9W119aWYoIWYodCkpaWYodm9pZCAwIT09KF89dFtuXSkpe2Zvcih4PXMoXykuY2FsbCh0KSxlJiYoZz1uZXcgZSksYj14Lm5leHQoKSxyPTA7IWIuZG9uZTspdz1UP2guY2FsbChULGssYi52YWx1ZSxyKTpiLnZhbHVlLGU/KHAudmFsdWU9dyxkKGcscixwKSk6Z1tyXT13LGI9eC5uZXh0KCksKytyO3Y9cn1lbHNlIGlmKHUodCkpe2Zvcih2PXQubGVuZ3RoLGUmJihnPW5ldyBlKSxyPTAsbT0wO3I8djsrK3Ipdz10W3JdLHIrMTx2JiYoeT13LmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmeTw9NTYzMTkmJih3Kz10Wysrcl0pLHc9VD9oLmNhbGwoVCxrLHcsbSk6dyxlPyhwLnZhbHVlPXcsZChnLG0scCkpOmdbbV09dywrK207dj1tfWlmKHZvaWQgMD09PXYpZm9yKHY9byh0Lmxlbmd0aCksZSYmKGc9bmV3IGUodikpLHI9MDtyPHY7KytyKXc9VD9oLmNhbGwoVCxrLHRbcl0scik6dFtyXSxlPyhwLnZhbHVlPXcsZChnLHIscCkpOmdbcl09dztyZXR1cm4gZSYmKHAudmFsdWU9bnVsbCxnLmxlbmd0aD12KSxnfX0seyIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjEzNSwiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iOjEzNiwiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyIjoxNDIsIi4uLy4uL29iamVjdC9pcy12YWx1ZSI6MTUxLCIuLi8uLi9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjE2MCwiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIjoxNjIsIi4uLy4uL3N0cmluZy9pcy1zdHJpbmciOjE2NiwiZXM2LXN5bWJvbCI6MTc1fV0sMTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0KT09PWl9fSx7fV0sMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1SZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXltvYmplY3QgW0EtWmEtejAtOV0qRnVuY3Rpb25dJC8pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmaShuLmNhbGwodCkpfX0se31dLDEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9NYXRoLnNpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTM5LCIuL3NoaW0iOjE0MH1dLDEzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJigxPT09dCgxMCkmJi0xPT09dCgtMjApKX19LHt9XSwxNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbWF0aC9zaWduIiksaT1NYXRoLmFicyxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KT8wOjAhPT0odD1OdW1iZXIodCkpJiZpc0Zpbml0ZSh0KT9uKHQpKmEoaSh0KSk6dH19LHsiLi4vbWF0aC9zaWduIjoxMzh9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90by1pbnRlZ2VyIiksaT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkoMCxuKHQpKX19LHsiLi90by1pbnRlZ2VyIjoxNDF9XSwxNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi92YWxpZC12YWx1ZSIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxmPWFyZ3VtZW50c1syXSxoPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksaCYmdS5zb3J0KCJmdW5jdGlvbiI9PXR5cGVvZiBoP2EuY2FsbChoLHIpOnZvaWQgMCksImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVbdF0pLG8uY2FsbCh0LHUsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbChyLHQpP28uY2FsbChjLGYsclt0XSx0LHIsbik6ZX0pKX19fSx7Ii4vdmFsaWQtY2FsbGFibGUiOjE2MCwiLi92YWxpZC12YWx1ZSI6MTYyfV0sMTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3QuYXNzaWduOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE0NSwiLi9zaGltIjoxNDZ9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1PYmplY3QuYXNzaWduO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZSh0PXtmb286InJheiJ9LHtiYXI6ImR3YSJ9LHt0cnp5OiJ0cnp5In0pLHQuZm9vK3QuYmFyK3QudHJ6eT09PSJyYXpkd2F0cnp5Iil9fSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2tleXMiKSxpPXQoIi4uL3ZhbGlkLXZhbHVlIiksYT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvLHMsbD1hKGFyZ3VtZW50cy5sZW5ndGgsMik7Zm9yKHQ9T2JqZWN0KGkodCkpLHM9ZnVuY3Rpb24obil7dHJ5e3Rbbl09ZVtuXX1jYXRjaCh0KXtyfHwocj10KX19LG89MTtvPGw7KytvKW4oZT1hcmd1bWVudHNbb10pLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0seyIuLi9rZXlzIjoxNTIsIi4uL3ZhbGlkLXZhbHVlIjoxNjJ9XSwxNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYXJyYXkvZnJvbSIpLGk9dCgiLi9hc3NpZ24iKSxhPXQoIi4vdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ociwoZnVuY3Rpb24oZSl7KG8uZW5zdXJlfHxlIGluIHQpJiYoc1tlXT10W2VdKX0pKTppKHMsdCksc319LHsiLi4vYXJyYXkvZnJvbSI6MTMyLCIuL2Fzc2lnbiI6MTQ0LCIuL3ZhbGlkLXZhbHVlIjoxNjJ9XSwxNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG8scz1PYmplY3QuY3JlYXRlO3QoIi4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCIpKCl8fChuPXQoIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltIikpLGUuZXhwb3J0cz1uPzEhPT1uLmxldmVsP3M6KGk9e30sYT17fSxvPXtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbdF09Il9fcHJvdG9fXyIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaSxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibnVsbFBvbHlmaWxsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMobnVsbD09PXQ/aTp0LGUpfSk6c30seyIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiOjE1OCwiLi9zZXQtcHJvdG90eXBlLW9mL3NoaW0iOjE1OX1dLDE0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9faXRlcmF0ZSIpKCJmb3JFYWNoIil9LHsiLi9faXRlcmF0ZSI6MTQzfV0sMTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKSxpPXtmdW5jdGlvbjohMCxvYmplY3Q6ITB9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0KSYmaVt0eXBlb2YgdF18fCExfX0seyIuL2lzLXZhbHVlIjoxNTF9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZnVuY3Rpb24vbm9vcCIpKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT09biYmbnVsbCE9PXR9fSx7Ii4uL2Z1bmN0aW9uL25vb3AiOjEzN31dLDE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmtleXM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTUzLCIuL3NoaW0iOjE1NH1dLDE1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5rZXlzKCJwcmltaXRpdmUiKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSx7fV0sMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2lzLXZhbHVlIiksaT1PYmplY3Qua2V5cztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KT9PYmplY3QodCk6dCl9fSx7Ii4uL2lzLXZhbHVlIjoxNTF9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi9mb3ItZWFjaCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbz1hcmd1bWVudHNbMl07cmV0dXJuIG4oZSksaSh0LChmdW5jdGlvbih0LG4saSxzKXtyW25dPWEuY2FsbChlLG8sdCxuLGkscyl9KSkscn19LHsiLi9mb3ItZWFjaCI6MTQ5LCIuL3ZhbGlkLWNhbGxhYmxlIjoxNjB9XSwxNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy12YWx1ZSIpLGk9QXJyYXkucHJvdG90eXBlLmZvckVhY2gsYT1PYmplY3QuY3JlYXRlLG89ZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKHQpe24odCkmJm8oT2JqZWN0KHQpLGUpfSkpLGV9fSx7Ii4vaXMtdmFsdWUiOjE1MX1dLDE1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LnNldFByb3RvdHlwZU9mOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE1OCwiLi9zaGltIjoxNTl9XSwxNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmNyZWF0ZSxpPU9iamVjdC5nZXRQcm90b3R5cGVPZixhPXt9O2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZixlPWFyZ3VtZW50c1swXXx8bjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmaSh0KGUobnVsbCksYSkpPT09YX19LHt9XSwxNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCIuLi9pcy1vYmplY3QiKSxhPXQoIi4uL3ZhbGlkLXZhbHVlIiksbz1PYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yscz1PYmplY3QuZGVmaW5lUHJvcGVydHksbD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfTtuPWZ1bmN0aW9uKHQsZSl7aWYoYSh0KSxudWxsPT09ZXx8aShlKSlyZXR1cm4gdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm90b3R5cGUgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCIpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gdD8oMj09PXQubGV2ZWw/dC5zZXQ/KHI9dC5zZXQsZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwobih0LGUpLGUpLHR9KTplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTplPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPW8uY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnModC5udWxsUG9seWZpbGwsIl9fcHJvdG9fXyIsbCksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxldmVsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6dC5sZXZlbH0pKTpudWxsfShmdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKSx0KCIuLi9jcmVhdGUiKX0seyIuLi9jcmVhdGUiOjE0OCwiLi4vaXMtb2JqZWN0IjoxNTAsIi4uL3ZhbGlkLXZhbHVlIjoxNjJ9XSwxNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIHR9fSx7fV0sMTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhbiBPYmplY3QiKTtyZXR1cm4gdH19LHsiLi9pcy1vYmplY3QiOjE1MH1dLDE2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdH19LHsiLi9pcy12YWx1ZSI6MTUxfV0sMTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9TdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE2NCwiLi9zaGltIjoxNjV9XSwxNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InJhemR3YXRyenkiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbnRhaW5zJiYoITA9PT1uLmNvbnRhaW5zKCJkd2EiKSYmITE9PT1uLmNvbnRhaW5zKCJmb28iKSl9fSx7fV0sMTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsYXJndW1lbnRzWzFdKT4tMX19LHt9XSwxNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCgiIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodCBpbnN0YW5jZW9mIFN0cmluZ3x8bi5jYWxsKHQpPT09aSl8fCExfX0se31dLDE2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9TWF0aC5yYW5kb207ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7ZG97dD1pKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfXdoaWxlKG5bdF0pO3JldHVybiB0fX0se31dLDE2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKSxvPXQoImQiKSxzPXQoImVzNi1zeW1ib2wiKSxsPXQoIi4vIiksYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7bj1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO2wuY2FsbCh0aGlzLHQpLGU9ZT9hLmNhbGwoZSwia2V5K3ZhbHVlIik/ImtleSt2YWx1ZSI6YS5jYWxsKGUsImtleSIpPyJrZXkiOiJ2YWx1ZSI6InZhbHVlIixjKHRoaXMsIl9fa2luZF9fIixvKCIiLGUpKX0saSYmaShuLGwpLGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlLHtfcmVzb2x2ZTpvKChmdW5jdGlvbih0KXtyZXR1cm4idmFsdWUiPT09dGhpcy5fX2tpbmRfXz90aGlzLl9fbGlzdF9fW3RdOiJrZXkrdmFsdWUiPT09dGhpcy5fX2tpbmRfXz9bdCx0aGlzLl9fbGlzdF9fW3RdXTp0fSkpfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oImMiLCJBcnJheSBJdGVyYXRvciIpKX0seyIuLyI6MTcxLGQ6MTA2LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxNTcsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjE2MywiZXM2LXN5bWJvbCI6MTc1fV0sMTY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCIuL2dldCIpLHM9QXJyYXkuaXNBcnJheSxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGM9QXJyYXkucHJvdG90eXBlLnNvbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscCxkLG0sZyx2PWFyZ3VtZW50c1syXTtpZihzKHQpfHxuKHQpP3I9ImFycmF5IjphKHQpP3I9InN0cmluZyI6dD1vKHQpLGkoZSksZj1mdW5jdGlvbigpe2g9ITB9LCJhcnJheSIhPT1yKWlmKCJzdHJpbmciIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsdix1LnZhbHVlLGYpLGgpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYobT10W3BdLHArMTxkJiYoZz1tLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZzw9NTYzMTkmJihtKz10WysrcF0pLGwuY2FsbChlLHYsbSxmKSwhaCk7KytwKTtlbHNlIGMuY2FsbCh0LChmdW5jdGlvbih0KXtyZXR1cm4gbC5jYWxsKGUsdix0LGYpLGh9KSl9fSx7Ii4vZ2V0IjoxNzAsImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxMzUsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoxNjAsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MTY2fV0sMTcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxhPXQoIi4vYXJyYXkiKSxvPXQoIi4vc3RyaW5nIikscz10KCIuL3ZhbGlkLWl0ZXJhYmxlIiksbD10KCJlczYtc3ltYm9sIikuaXRlcmF0b3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzKHQpW2xdP3RbbF0oKTpuKHQpP25ldyBhKHQpOmkodCk/bmV3IG8odCk6bmV3IGEodCl9fSx7Ii4vYXJyYXkiOjE2OCwiLi9zdHJpbmciOjE3MywiLi92YWxpZC1pdGVyYWJsZSI6MTc0LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTM1LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjE2NiwiZXM2LXN5bWJvbCI6MTc1fV0sMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9hcnJheS8jL2NsZWFyIiksYT10KCJlczUtZXh0L29iamVjdC9hc3NpZ24iKSxvPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZCIpLGM9dCgiZC9hdXRvLWJpbmQiKSx1PXQoImVzNi1zeW1ib2wiKSxmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldyciKTtoKHRoaXMse19fbGlzdF9fOmwoInciLHModCkpLF9fY29udGV4dF9fOmwoInciLGUpLF9fbmV4dEluZGV4X186bCgidyIsMCl9KSxlJiYobyhlLm9uKSxlLm9uKCJfYWRkIix0aGlzLl9vbkFkZCksZS5vbigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLGUub24oIl9jbGVhciIsdGhpcy5fb25DbGVhcikpfSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3IsaChuLnByb3RvdHlwZSxhKHtfbmV4dDpsKChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pKSxuZXh0OmwoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVJlc3VsdCh0aGlzLl9uZXh0KCkpfSkpLF9jcmVhdGVSZXN1bHQ6bCgoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/e2RvbmU6ITAsdmFsdWU6dm9pZCAwfTp7ZG9uZTohMSx2YWx1ZTp0aGlzLl9yZXNvbHZlKHQpfX0pKSxfcmVzb2x2ZTpsKChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pKSxfdW5CaW5kOmwoKGZ1bmN0aW9uKCl7dGhpcy5fX2xpc3RfXz1udWxsLGRlbGV0ZSB0aGlzLl9fcmVkb19fLHRoaXMuX19jb250ZXh0X18mJih0aGlzLl9fY29udGV4dF9fLm9mZigiX2FkZCIsdGhpcy5fb25BZGQpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfZGVsZXRlIix0aGlzLl9vbkRlbGV0ZSksdGhpcy5fX2NvbnRleHRfXy5vZmYoIl9jbGVhciIsdGhpcy5fb25DbGVhciksdGhpcy5fX2NvbnRleHRfXz1udWxsKX0pKSx0b1N0cmluZzpsKChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrKHRoaXNbdS50b1N0cmluZ1RhZ118fCJPYmplY3QiKSsiXSJ9KSl9LGMoe19vbkFkZDpsKChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goKGZ1bmN0aW9uKGUscil7ZT49dCYmKHRoaXMuX19yZWRvX19bcl09KytlKX0pLHRoaXMpLHRoaXMuX19yZWRvX18ucHVzaCh0KSk6Zih0aGlzLCJfX3JlZG9fXyIsbCgiYyIsW3RdKSkpfSkpLF9vbkRlbGV0ZTpsKChmdW5jdGlvbih0KXt2YXIgZTt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgtLXRoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fJiYoLTEhPT0oZT10aGlzLl9fcmVkb19fLmluZGV4T2YodCkpJiZ0aGlzLl9fcmVkb19fLnNwbGljZShlLDEpLHRoaXMuX19yZWRvX18uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtlPnQmJih0aGlzLl9fcmVkb19fW3JdPS0tZSl9KSx0aGlzKSkpfSkpLF9vbkNsZWFyOmwoKGZ1bmN0aW9uKCl7dGhpcy5fX3JlZG9fXyYmaS5jYWxsKHRoaXMuX19yZWRvX18pLHRoaXMuX19uZXh0SW5kZXhfXz0wfSkpfSkpKSxmKG4ucHJvdG90eXBlLHUuaXRlcmF0b3IsbCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSl9LHtkOjEwNiwiZC9hdXRvLWJpbmQiOjEwNSwiZXM1LWV4dC9hcnJheS8jL2NsZWFyIjoxMzEsImVzNS1leHQvb2JqZWN0L2Fzc2lnbiI6MTQ0LCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTYwLCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSI6MTYyLCJlczYtc3ltYm9sIjoxNzV9XSwxNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxpPXQoImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIiksYT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxvPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixzPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCEhcyh0KXx8KCEhYSh0KXx8KCEhbih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHRbb10pKSl9fSx7ImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxMzUsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoxNTEsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MTY2LCJlczYtc3ltYm9sIjoxNzV9XSwxNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIiksYT10KCJkIiksbz10KCJlczYtc3ltYm9sIikscz10KCIuLyIpLGw9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7dD1TdHJpbmcodCkscy5jYWxsKHRoaXMsdCksbCh0aGlzLCJfX2xlbmd0aF9fIixhKCIiLHQubGVuZ3RoKSl9LGkmJmkobixzKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzLnByb3RvdHlwZSx7X25leHQ6YSgoZnVuY3Rpb24oKXtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xlbmd0aF9fP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSksX3Jlc29sdmU6YSgoZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9fbGlzdF9fW3RdO3JldHVybiB0aGlzLl9fbmV4dEluZGV4X189PT10aGlzLl9fbGVuZ3RoX18/cjooZT1yLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZTw9NTYzMTk/cit0aGlzLl9fbGlzdF9fW3RoaXMuX19uZXh0SW5kZXhfXysrXTpyfSkpfSksbChuLnByb3RvdHlwZSxvLnRvU3RyaW5nVGFnLGEoImMiLCJTdHJpbmcgSXRlcmF0b3IiKSl9LHsiLi8iOjE3MSxkOjEwNiwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MTU3LCJlczYtc3ltYm9sIjoxNzV9XSwxNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1pdGVyYWJsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gdH19LHsiLi9pcy1pdGVyYWJsZSI6MTcyfV0sMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT90KCJleHQvZ2xvYmFsLXRoaXMiKS5TeW1ib2w6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE3NiwiLi9wb2x5ZmlsbCI6MTgxLCJleHQvZ2xvYmFsLXRoaXMiOjE4OH1dLDE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJleHQvZ2xvYmFsLXRoaXMiKSxpPXtvYmplY3Q6ITAsc3ltYm9sOiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPW4uU3ltYm9sO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiExO3Q9ZSgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhaVt0eXBlb2YgZS5pdGVyYXRvcl0mJighIWlbdHlwZW9mIGUudG9QcmltaXRpdmVdJiYhIWlbdHlwZW9mIGUudG9TdHJpbmdUYWddKX19LHsiZXh0L2dsb2JhbC10aGlzIjoxODh9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDE3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkIiksaT1PYmplY3QuY3JlYXRlLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5LG89T2JqZWN0LnByb3RvdHlwZSxzPWkobnVsbCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9MDtzW3QrKGl8fCIiKV07KSsraTtyZXR1cm4gc1t0Kz1pfHwiIl09ITAsYShvLGU9IkBAIit0LG4uZ3MobnVsbCwoZnVuY3Rpb24odCl7cnx8KHI9ITAsYSh0aGlzLGUsbih0KSkscj0hMSl9KSkpLGV9fSx7ZDoxMDZ9XSwxNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZCIpLGk9dCgiZXh0L2dsb2JhbC10aGlzIikuU3ltYm9sO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7aGFzSW5zdGFuY2U6bigiIixpJiZpLmhhc0luc3RhbmNlfHx0KCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6bigiIixpJiZpLmlzQ29uY2F0U3ByZWFkYWJsZXx8dCgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOm4oIiIsaSYmaS5pdGVyYXRvcnx8dCgiaXRlcmF0b3IiKSksbWF0Y2g6bigiIixpJiZpLm1hdGNofHx0KCJtYXRjaCIpKSxyZXBsYWNlOm4oIiIsaSYmaS5yZXBsYWNlfHx0KCJyZXBsYWNlIikpLHNlYXJjaDpuKCIiLGkmJmkuc2VhcmNofHx0KCJzZWFyY2giKSksc3BlY2llczpuKCIiLGkmJmkuc3BlY2llc3x8dCgic3BlY2llcyIpKSxzcGxpdDpuKCIiLGkmJmkuc3BsaXR8fHQoInNwbGl0IikpLHRvUHJpbWl0aXZlOm4oIiIsaSYmaS50b1ByaW1pdGl2ZXx8dCgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6bigiIixpJiZpLnRvU3RyaW5nVGFnfHx0KCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpuKCIiLGkmJmkudW5zY29wYWJsZXN8fHQoInVuc2NvcGFibGVzIikpfSl9fSx7ZDoxMDYsImV4dC9nbG9iYWwtdGhpcyI6MTg4fV0sMTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQiKSxpPXQoIi4uLy4uLy4uL3ZhbGlkYXRlLXN5bWJvbCIpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQse2ZvcjpuKChmdW5jdGlvbihlKXtyZXR1cm4gYVtlXT9hW2VdOmFbZV09dChTdHJpbmcoZSkpfSkpLGtleUZvcjpuKChmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiBpKHQpLGEpaWYoYVtlXT09PXQpcmV0dXJuIGV9KSl9KX19LHsiLi4vLi4vLi4vdmFsaWRhdGUtc3ltYm9sIjoxODIsZDoxMDZ9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiZCIpLHM9dCgiLi92YWxpZGF0ZS1zeW1ib2wiKSxsPXQoImV4dC9nbG9iYWwtdGhpcyIpLlN5bWJvbCxjPXQoIi4vbGliL3ByaXZhdGUvZ2VuZXJhdGUtbmFtZSIpLHU9dCgiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIiksZj10KCIuL2xpYi9wcml2YXRlL3NldHVwL3N5bWJvbC1yZWdpc3RyeSIpLGg9T2JqZWN0LmNyZWF0ZSxwPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXRyeXtTdHJpbmcobCgpKSxhPSEwfWNhdGNoKHQpe31lbHNlIGw9bnVsbDtpPWZ1bmN0aW9uKHQpe2lmKHRoaXMgaW5zdGFuY2VvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBuKHQpfSxlLmV4cG9ydHM9bj1mdW5jdGlvbiB0KGUpe3ZhciByO2lmKHRoaXMgaW5zdGFuY2VvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBhP2woZSk6KHI9aChpLnByb3RvdHlwZSksZT12b2lkIDA9PT1lPyIiOlN0cmluZyhlKSxwKHIse19fZGVzY3JpcHRpb25fXzpvKCIiLGUpLF9fbmFtZV9fOm8oIiIsYyhlKSl9KSl9LHUobiksZihuKSxwKGkucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpvKG4pLHRvU3RyaW5nOm8oIiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KSl9KSxwKG4ucHJvdG90eXBlLHt0b1N0cmluZzpvKChmdW5jdGlvbigpe3JldHVybiJTeW1ib2wgKCIrcyh0aGlzKS5fX2Rlc2NyaXB0aW9uX18rIikifSkpLHZhbHVlT2Y6bygoZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKX0pKX0pLGQobi5wcm90b3R5cGUsbi50b1ByaW1pdGl2ZSxvKCIiLChmdW5jdGlvbigpe3ZhciB0PXModGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpKSxkKG4ucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsIlN5bWJvbCIpKSxkKGkucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsbi5wcm90b3R5cGVbbi50b1N0cmluZ1RhZ10pKSxkKGkucHJvdG90eXBlLG4udG9QcmltaXRpdmUsbygiYyIsbi5wcm90b3R5cGVbbi50b1ByaW1pdGl2ZV0pKX0seyIuL2xpYi9wcml2YXRlL2dlbmVyYXRlLW5hbWUiOjE3OCwiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIjoxNzksIi4vbGliL3ByaXZhdGUvc2V0dXAvc3ltYm9sLXJlZ2lzdHJ5IjoxODAsIi4vdmFsaWRhdGUtc3ltYm9sIjoxODIsZDoxMDYsImV4dC9nbG9iYWwtdGhpcyI6MTg4fV0sMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtc3ltYm9sIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO3JldHVybiB0fX0seyIuL2lzLXN5bWJvbCI6MTc3fV0sMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9XZWFrTWFwOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoxODQsIi4vcG9seWZpbGwiOjE4Nn1dLDE4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExO3RyeXt0PW5ldyBXZWFrTWFwKFtbZT17fSwib25lIl0sW3t9LCJ0d28iXSxbe30sInRocmVlIl1dKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1TdHJpbmcodCkmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5zZXQmJih0LnNldCh7fSwxKT09PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWxldGUmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5oYXMmJiJvbmUiPT09dC5nZXQoZSkpKSkpfX0se31dLDE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXAmJiJbb2JqZWN0IFdlYWtNYXBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgV2Vha01hcCl9LHt9XSwxODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0Iikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXEiKSxjPXQoImQiKSx1PXQoImVzNi1pdGVyYXRvci9nZXQiKSxmPXQoImVzNi1pdGVyYXRvci9mb3Itb2YiKSxoPXQoImVzNi1zeW1ib2wiKS50b1N0cmluZ1RhZyxwPXQoIi4vaXMtbmF0aXZlLWltcGxlbWVudGVkIiksZD1BcnJheS5pc0FycmF5LG09T2JqZWN0LmRlZmluZVByb3BlcnR5LGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx2PU9iamVjdC5nZXRQcm90b3R5cGVPZjtlLmV4cG9ydHM9bj1mdW5jdGlvbigpe3ZhciB0LGU9YXJndW1lbnRzWzBdO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7cmV0dXJuIHQ9cCYmYSYmV2Vha01hcCE9PW4/YShuZXcgV2Vha01hcCx2KHRoaXMpKTp0aGlzLGkoZSkmJihkKGUpfHwoZT11KGUpKSksbSh0LCJfX3dlYWtNYXBEYXRhX18iLGMoImMiLCIkd2Vha01hcCQiK2woKSkpLGU/KGYoZSwoZnVuY3Rpb24oZSl7cyhlKSx0LnNldChlWzBdLGVbMV0pfSkpLHQpOnR9LHAmJihhJiZhKG4sV2Vha01hcCksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShXZWFrTWFwLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6YyhuKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSx7ZGVsZXRlOmMoKGZ1bmN0aW9uKHQpe3JldHVybiEhZy5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pJiYoZGVsZXRlIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dLCEwKX0pKSxnZXQ6YygoZnVuY3Rpb24odCl7aWYoZy5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pKXJldHVybiB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXX0pKSxoYXM6YygoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pKSxzZXQ6YygoZnVuY3Rpb24odCxlKXtyZXR1cm4gbShvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fLGMoImMiLGUpKSx0aGlzfSkpLHRvU3RyaW5nOmMoKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifSkpfSksbShuLnByb3RvdHlwZSxoLGMoImMiLCJXZWFrTWFwIikpfSx7Ii4vaXMtbmF0aXZlLWltcGxlbWVudGVkIjoxODUsZDoxMDYsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoxNTEsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjE1NywiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0IjoxNjEsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoxNjIsImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIjoxNjcsImVzNi1pdGVyYXRvci9mb3Itb2YiOjE2OSwiZXM2LWl0ZXJhdG9yL2dldCI6MTcwLCJlczYtc3ltYm9sIjoxNzV9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZilyZXR1cm4gc2VsZjtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXJldHVybiB3aW5kb3c7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBnbG9iYWwgYHRoaXNgIil9O2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKHRoaXMpcmV0dXJuIHRoaXM7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCJfX2dsb2JhbF9fIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGNvbmZpZ3VyYWJsZTohMH0pfWNhdGNoKHQpe3JldHVybiBuKCl9dHJ5e3JldHVybiBfX2dsb2JhbF9ffHxuKCl9ZmluYWxseXtkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX2dsb2JhbF9ffX0oKX0se31dLDE4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/Z2xvYmFsVGhpczp0KCIuL2ltcGxlbWVudGF0aW9uIil9LHsiLi9pbXBsZW1lbnRhdGlvbiI6MTg3LCIuL2lzLWltcGxlbWVudGVkIjoxODl9XSwxODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiYoISFnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLkFycmF5PT09QXJyYXkpfX0se31dLDE5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1zdHJpbmctYmxhbmsiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PWUpcmV0dXJuITE7cmV0dXJuIHQtdDwxfX0seyJpcy1zdHJpbmctYmxhbmsiOjIzN31dLDE5MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgZGF0YSBhcyBmaXJzdCBwYXJhbWV0ZXIiKTtpZihyPTB8KyhyfHwwKSxBcnJheS5pc0FycmF5KHQpJiZ0WzBdJiYibnVtYmVyIj09dHlwZW9mIHRbMF1bMF0pe3ZhciBpLGEsbyxzLGw9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCpsO2UmJiJzdHJpbmciIT10eXBlb2YgZXx8KGU9bmV3KG4oZXx8ImZsb2F0MzIiKSkoYytyKSk7dmFyIHU9ZS5sZW5ndGgtcjtpZihjIT09dSl0aHJvdyBuZXcgRXJyb3IoInNvdXJjZSBsZW5ndGggIitjKyIgKCIrbCsieCIrdC5sZW5ndGgrIikgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gbGVuZ3RoICIrdSk7Zm9yKGk9MCxvPXI7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGw7YSsrKWVbbysrXT1udWxsPT09dFtpXVthXT9OYU46dFtpXVthXX1lbHNlIGlmKGUmJiJzdHJpbmciIT10eXBlb2YgZSllLnNldCh0LHIpO2Vsc2V7dmFyIGY9bihlfHwiZmxvYXQzMiIpO2lmKEFycmF5LmlzQXJyYXkodCl8fCJhcnJheSI9PT1lKWZvcihlPW5ldyBmKHQubGVuZ3RoK3IpLGk9MCxvPXIscz1lLmxlbmd0aDtvPHM7bysrLGkrKyllW29dPW51bGw9PT10W2ldP05hTjp0W2ldO2Vsc2UgMD09PXI/ZT1uZXcgZih0KTooZT1uZXcgZih0Lmxlbmd0aCtyKSkuc2V0KHQscil9cmV0dXJuIGV9fSx7ZHR5cGU6MTI3fV0sMTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250L3N0cmluZ2lmeSIpLGk9WzMyLDEyNl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZT90LnNoYXBlOnQuY2FudmFzP1t0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdOls1MTIsNTEyXSxyPXQuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhPXQuZm9udCxvPSJudW1iZXIiPT10eXBlb2YgdC5zdGVwP1t0LnN0ZXAsdC5zdGVwXTp0LnN0ZXB8fFszMiwzMl0scz10LmNoYXJzfHxpO2EmJiJzdHJpbmciIT10eXBlb2YgYSYmKGE9bihhKSk7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoMj09PXMubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHNbMF0mJiJudW1iZXIiPT10eXBlb2Ygc1sxXSl7Zm9yKHZhciBsPVtdLGM9c1swXSx1PTA7Yzw9c1sxXTtjKyspbFt1KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7cz1sfX1lbHNlIHM9U3RyaW5nKHMpLnNwbGl0KCIiKTtlPWUuc2xpY2UoKSxyLndpZHRoPWVbMF0sci5oZWlnaHQ9ZVsxXTt2YXIgZj1yLmdldENvbnRleHQoIjJkIik7Zi5maWxsU3R5bGU9IiMwMDAiLGYuZmlsbFJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpLGYuZm9udD1hLGYudGV4dEFsaWduPSJjZW50ZXIiLGYudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGYuZmlsbFN0eWxlPSIjZmZmIjt2YXIgaD1vWzBdLzIscD1vWzFdLzI7Zm9yKGM9MDtjPHMubGVuZ3RoO2MrKylmLmZpbGxUZXh0KHNbY10saCxwKSwoaCs9b1swXSk+ZVswXS1vWzBdLzImJihoPW9bMF0vMixwKz1vWzFdKTtyZXR1cm4gcn19LHsiY3NzLWZvbnQvc3RyaW5naWZ5IjoxMDJ9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoInN0cmluZyI9PXR5cGVvZiB0fHxBcnJheS5pc0FycmF5KHQpKSYmKGUuZmFtaWx5PXQpO3ZhciByPUFycmF5LmlzQXJyYXkoZS5mYW1pbHkpP2UuZmFtaWx5LmpvaW4oIiwgIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoImBmYW1pbHlgIG11c3QgYmUgZGVmaW5lZCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHwiIixjPSh0PVtlLnN0eWxlfHxlLmZvbnRTdHlsZXx8IiIsbCxzXS5qb2luKCIgIikrInB4ICIrcixlLm9yaWdpbnx8InRvcCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGkobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsZj11LmdldENvbnRleHQoIjJkIiksaD17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOiJIIixsb3dlcjp2b2lkIDAhPT1lLmxvd2VyP2UubG93ZXI6IngiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDoicCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OiJoIix0aXR0bGU6dm9pZCAwIT09ZS50aXR0bGU/ZS50aXR0bGU6ImkiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDoiTyJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxmLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2YuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFN0eWxlPSJibGFjayIsZi5maWxsVGV4dCgiSCIsMCwwKTt2YXIgbT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYm90dG9tIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBnPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLWcrbSxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgdj1wLWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLTErbTtkLmJhc2VsaW5lPWQuYWxwaGFiZXRpYz12LGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGYuZmlsbFRleHQoIkgiLDAsLjUqcCk7dmFyIHk9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErbS0uNSpwLGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJoYW5naW5nIixmLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB4PWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMSttLS41KnAsZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImlkZW9ncmFwaGljIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBiPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2lmKGQuaWRlb2dyYXBoaWM9cC1iLTErbSxoLnVwcGVyJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnVwcGVyLDAsMCksZC51cHBlcj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGgubG93ZXImJihmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgubG93ZXIsMCwwKSxkLmxvd2VyPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGgudGl0dGxlJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnRpdHRsZSwwLDApLGQudGl0dGxlPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxoLmFzY2VudCYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC5hc2NlbnQsMCwwKSxkLmFzY2VudD1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksaC5kZXNjZW50JiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGgub3ZlcnNob290KXtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgub3ZlcnNob290LDAsMCk7dmFyIF89byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5vdmVyc2hvb3Q9Xy12fWZvcih2YXIgdyBpbiBkKWRbd10vPXM7cmV0dXJuIGQuZW09cyxuLmNhY2hlW3JdPWQsaShkLGMpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpImVtIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuLmNhY2hlPXt9fSx7fV0sMTk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZyIpO2lmKGU9ZXx8e30sInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsibnVtYmVyIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpOyJudW1iZXIiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZigid2ViZ2wiKSYmYS5wdXNoKCJleHBlcmltZW50YWwtIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH19LHt9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj1lWzldLGg9ZVsxMF0scD1lWzExXSxkPWVbMTJdLG09ZVsxM10sZz1lWzE0XSx2PWVbMTVdO3JldHVybiB0WzBdPXMqKGgqdi1wKmcpLWYqKGwqdi1jKmcpK20qKGwqcC1jKmgpLHRbMV09LShuKihoKnYtcCpnKS1mKihpKnYtYSpnKSttKihpKnAtYSpoKSksdFsyXT1uKihsKnYtYypnKS1zKihpKnYtYSpnKSttKihpKmMtYSpsKSx0WzNdPS0obioobCpwLWMqaCktcyooaSpwLWEqaCkrZiooaSpjLWEqbCkpLHRbNF09LShvKihoKnYtcCpnKS11KihsKnYtYypnKStkKihsKnAtYypoKSksdFs1XT1yKihoKnYtcCpnKS11KihpKnYtYSpnKStkKihpKnAtYSpoKSx0WzZdPS0ocioobCp2LWMqZyktbyooaSp2LWEqZykrZCooaSpjLWEqbCkpLHRbN109cioobCpwLWMqaCktbyooaSpwLWEqaCkrdSooaSpjLWEqbCksdFs4XT1vKihmKnYtcCptKS11KihzKnYtYyptKStkKihzKnAtYypmKSx0WzldPS0ociooZip2LXAqbSktdSoobip2LWEqbSkrZCoobipwLWEqZikpLHRbMTBdPXIqKHMqdi1jKm0pLW8qKG4qdi1hKm0pK2QqKG4qYy1hKnMpLHRbMTFdPS0ocioocypwLWMqZiktbyoobipwLWEqZikrdSoobipjLWEqcykpLHRbMTJdPS0obyooZipnLWgqbSktdSoocypnLWwqbSkrZCoocypoLWwqZikpLHRbMTNdPXIqKGYqZy1oKm0pLXUqKG4qZy1pKm0pK2QqKG4qaC1pKmYpLHRbMTRdPS0ocioocypnLWwqbSktbyoobipnLWkqbSkrZCoobipsLWkqcykpLHRbMTVdPXIqKHMqaC1sKmYpLW8qKG4qaC1pKmYpK3UqKG4qbC1pKnMpLHR9fSx7fV0sMTk2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX19LHt9XSwxOTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9fSx7fV0sMTk4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDE5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdLGE9dFs0XSxvPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sdT10WzldLGY9dFsxMF0saD10WzExXSxwPXRbMTJdLGQ9dFsxM10sbT10WzE0XSxnPXRbMTVdO3JldHVybihlKm8tciphKSooZipnLWgqbSktKGUqcy1uKmEpKih1KmctaCpkKSsoZSpsLWkqYSkqKHUqbS1mKmQpKyhyKnMtbipvKSooYypnLWgqcCktKHIqbC1pKm8pKihjKm0tZipwKSsobipsLWkqcykqKGMqZC11KnApfX0se31dLDIwMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksYz1yKm8sdT1uKm8sZj1uKnMsaD1pKm8scD1pKnMsZD1pKmwsbT1hKm8sZz1hKnMsdj1hKmw7cmV0dXJuIHRbMF09MS1mLWQsdFsxXT11K3YsdFsyXT1oLWcsdFszXT0wLHRbNF09dS12LHRbNV09MS1jLWQsdFs2XT1wK20sdFs3XT0wLHRbOF09aCtnLHRbOV09cC1tLHRbMTBdPTEtYy1mLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDIwMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89clswXSxzPXJbMV0sbD1yWzJdLGM9TWF0aC5zcXJ0KG8qbytzKnMrbCpsKTtpZihNYXRoLmFicyhjKTwxZS02KXJldHVybiBudWxsO3JldHVybiBvKj1jPTEvYyxzKj1jLGwqPWMsbj1NYXRoLnNpbihlKSxpPU1hdGguY29zKGUpLGE9MS1pLHRbMF09bypvKmEraSx0WzFdPXMqbyphK2wqbix0WzJdPWwqbyphLXMqbix0WzNdPTAsdFs0XT1vKnMqYS1sKm4sdFs1XT1zKnMqYStpLHRbNl09bCpzKmErbypuLHRbN109MCx0WzhdPW8qbCphK3Mqbix0WzldPXMqbCphLW8qbix0WzEwXT1sKmwqYStpLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDIwMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPW4rbixsPWkraSxjPWErYSx1PW4qcyxmPW4qbCxoPW4qYyxwPWkqbCxkPWkqYyxtPWEqYyxnPW8qcyx2PW8qbCx5PW8qYztyZXR1cm4gdFswXT0xLShwK20pLHRbMV09Zit5LHRbMl09aC12LHRbM109MCx0WzRdPWYteSx0WzVdPTEtKHUrbSksdFs2XT1kK2csdFs3XT0wLHRbOF09aCt2LHRbOV09ZC1nLHRbMTBdPTEtKHUrcCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1lWzFdLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT1lWzJdLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDIwNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPWVbMF0sdFsxM109ZVsxXSx0WzE0XT1lWzJdLHRbMTVdPTEsdH19LHt9XSwyMDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09bix0WzZdPXIsdFs3XT0wLHRbOF09MCx0WzldPS1yLHRbMTBdPW4sdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjA2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09MCx0WzJdPS1yLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT1yLHRbOV09MCx0WzEwXT1uLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDIwNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109MCx0WzRdPS1yLHRbNV09bix0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oci1lKSxsPTEvKGktbiksYz0xLyhhLW8pO3JldHVybiB0WzBdPTIqYSpzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTIqYSpsLHRbNl09MCx0WzddPTAsdFs4XT0ocitlKSpzLHRbOV09KGkrbikqbCx0WzEwXT0obythKSpjLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1vKmEqMipjLHRbMTVdPTAsdH19LHt9XSwyMDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDIxMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGNvcHk6dCgiLi9jb3B5IiksaWRlbnRpdHk6dCgiLi9pZGVudGl0eSIpLHRyYW5zcG9zZTp0KCIuL3RyYW5zcG9zZSIpLGludmVydDp0KCIuL2ludmVydCIpLGFkam9pbnQ6dCgiLi9hZGpvaW50IiksZGV0ZXJtaW5hbnQ6dCgiLi9kZXRlcm1pbmFudCIpLG11bHRpcGx5OnQoIi4vbXVsdGlwbHkiKSx0cmFuc2xhdGU6dCgiLi90cmFuc2xhdGUiKSxzY2FsZTp0KCIuL3NjYWxlIikscm90YXRlOnQoIi4vcm90YXRlIikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZnJvbVJvdGF0aW9uOnQoIi4vZnJvbVJvdGF0aW9uIiksZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246dCgiLi9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiIpLGZyb21TY2FsaW5nOnQoIi4vZnJvbVNjYWxpbmciKSxmcm9tVHJhbnNsYXRpb246dCgiLi9mcm9tVHJhbnNsYXRpb24iKSxmcm9tWFJvdGF0aW9uOnQoIi4vZnJvbVhSb3RhdGlvbiIpLGZyb21ZUm90YXRpb246dCgiLi9mcm9tWVJvdGF0aW9uIiksZnJvbVpSb3RhdGlvbjp0KCIuL2Zyb21aUm90YXRpb24iKSxmcm9tUXVhdDp0KCIuL2Zyb21RdWF0IiksZnJ1c3R1bTp0KCIuL2ZydXN0dW0iKSxwZXJzcGVjdGl2ZTp0KCIuL3BlcnNwZWN0aXZlIikscGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXc6dCgiLi9wZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldyIpLG9ydGhvOnQoIi4vb3J0aG8iKSxsb29rQXQ6dCgiLi9sb29rQXQiKSxzdHI6dCgiLi9zdHIiKX19LHsiLi9hZGpvaW50IjoxOTUsIi4vY2xvbmUiOjE5NiwiLi9jb3B5IjoxOTcsIi4vY3JlYXRlIjoxOTgsIi4vZGV0ZXJtaW5hbnQiOjE5OSwiLi9mcm9tUXVhdCI6MjAwLCIuL2Zyb21Sb3RhdGlvbiI6MjAxLCIuL2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIjoyMDIsIi4vZnJvbVNjYWxpbmciOjIwMywiLi9mcm9tVHJhbnNsYXRpb24iOjIwNCwiLi9mcm9tWFJvdGF0aW9uIjoyMDUsIi4vZnJvbVlSb3RhdGlvbiI6MjA2LCIuL2Zyb21aUm90YXRpb24iOjIwNywiLi9mcnVzdHVtIjoyMDgsIi4vaWRlbnRpdHkiOjIwOSwiLi9pbnZlcnQiOjIxMSwiLi9sb29rQXQiOjIxMiwiLi9tdWx0aXBseSI6MjEzLCIuL29ydGhvIjoyMTQsIi4vcGVyc3BlY3RpdmUiOjIxNSwiLi9wZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldyI6MjE2LCIuL3JvdGF0ZSI6MjE3LCIuL3JvdGF0ZVgiOjIxOCwiLi9yb3RhdGVZIjoyMTksIi4vcm90YXRlWiI6MjIwLCIuL3NjYWxlIjoyMjEsIi4vc3RyIjoyMjIsIi4vdHJhbnNsYXRlIjoyMjMsIi4vdHJhbnNwb3NlIjoyMjR9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj1lWzldLGg9ZVsxMF0scD1lWzExXSxkPWVbMTJdLG09ZVsxM10sZz1lWzE0XSx2PWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsVD1pKmMtYSpsLGs9dSptLWYqZCxBPXUqZy1oKmQsTT11KnYtcCpkLFM9ZipnLWgqbSxFPWYqdi1wKm0sTD1oKnYtcCpnLEM9eSpMLXgqRStiKlMrXypNLXcqQStUKms7aWYoIUMpcmV0dXJuIG51bGw7cmV0dXJuIEM9MS9DLHRbMF09KHMqTC1sKkUrYypTKSpDLHRbMV09KGkqRS1uKkwtYSpTKSpDLHRbMl09KG0qVC1nKncrdipfKSpDLHRbM109KGgqdy1mKlQtcCpfKSpDLHRbNF09KGwqTS1vKkwtYypBKSpDLHRbNV09KHIqTC1pKk0rYSpBKSpDLHRbNl09KGcqYi1kKlQtdip4KSpDLHRbN109KHUqVC1oKmIrcCp4KSpDLHRbOF09KG8qRS1zKk0rYyprKSpDLHRbOV09KG4qTS1yKkUtYSprKSpDLHRbMTBdPShkKnctbSpiK3YqeSkqQyx0WzExXT0oZipiLXUqdy1wKnkpKkMsdFsxMl09KHMqQS1vKlMtbCprKSpDLHRbMTNdPShyKlMtbipBK2kqaykqQyx0WzE0XT0obSp4LWQqXy1nKnkpKkMsdFsxNV09KHUqXy1mKngraCp5KSpDLHR9fSx7fV0sMjEyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9pZGVudGl0eSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxtPWVbMF0sZz1lWzFdLHY9ZVsyXSx5PWlbMF0seD1pWzFdLGI9aVsyXSxfPXJbMF0sdz1yWzFdLFQ9clsyXTtpZihNYXRoLmFicyhtLV8pPDFlLTYmJk1hdGguYWJzKGctdyk8MWUtNiYmTWF0aC5hYnModi1UKTwxZS02KXJldHVybiBuKHQpO2Y9bS1fLGg9Zy13LHA9di1ULGQ9MS9NYXRoLnNxcnQoZipmK2gqaCtwKnApLGE9eCoocCo9ZCktYiooaCo9ZCksbz1iKihmKj1kKS15KnAscz15KmgteCpmLChkPU1hdGguc3FydChhKmErbypvK3MqcykpPyhhKj1kPTEvZCxvKj1kLHMqPWQpOihhPTAsbz0wLHM9MCk7bD1oKnMtcCpvLGM9cCphLWYqcyx1PWYqby1oKmEsKGQ9TWF0aC5zcXJ0KGwqbCtjKmMrdSp1KSk/KGwqPWQ9MS9kLGMqPWQsdSo9ZCk6KGw9MCxjPTAsdT0wKTtyZXR1cm4gdFswXT1hLHRbMV09bCx0WzJdPWYsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1oLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKGEqbStvKmcrcyp2KSx0WzEzXT0tKGwqbStjKmcrdSp2KSx0WzE0XT0tKGYqbStoKmcrcCp2KSx0WzE1XT0xLHR9fSx7Ii4vaWRlbnRpdHkiOjIwOX1dLDIxMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10sZj1lWzhdLGg9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sbT1lWzEyXSxnPWVbMTNdLHY9ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmYrdyptLHRbMV09eCppK2IqbCtfKmgrdypnLHRbMl09eCphK2IqYytfKnArdyp2LHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypmK3cqbSx0WzVdPXgqaStiKmwrXypoK3cqZyx0WzZdPXgqYStiKmMrXypwK3cqdix0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypmK3cqbSx0WzldPXgqaStiKmwrXypoK3cqZyx0WzEwXT14KmErYipjK18qcCt3KnYsdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmYrdyptLHRbMTNdPXgqaStiKmwrXypoK3cqZyx0WzE0XT14KmErYipjK18qcCt3KnYsdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9fSx7fV0sMjE0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19LHt9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWkpO3JldHVybiB0WzBdPWEvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oaStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmkqbipvLHRbMTVdPTAsdH19LHt9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9TWF0aC50YW4oZS51cERlZ3JlZXMqTWF0aC5QSS8xODApLGE9TWF0aC50YW4oZS5kb3duRGVncmVlcypNYXRoLlBJLzE4MCksbz1NYXRoLnRhbihlLmxlZnREZWdyZWVzKk1hdGguUEkvMTgwKSxzPU1hdGgudGFuKGUucmlnaHREZWdyZWVzKk1hdGguUEkvMTgwKSxsPTIvKG8rcyksYz0yLyhpK2EpO3JldHVybiB0WzBdPWwsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09Yyx0WzZdPTAsdFs3XT0wLHRbOF09LShvLXMpKmwqLjUsdFs5XT0oaS1hKSpjKi41LHRbMTBdPW4vKHItbiksdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPW4qci8oci1uKSx0WzE1XT0wLHR9fSx7fV0sMjE3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQsayxBLE0sUyxFPW5bMF0sTD1uWzFdLEM9blsyXSxQPU1hdGguc3FydChFKkUrTCpMK0MqQyk7aWYoTWF0aC5hYnMoUCk8MWUtNilyZXR1cm4gbnVsbDtFKj1QPTEvUCxMKj1QLEMqPVAsaT1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLG89MS1hLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9ZVszXSxmPWVbNF0saD1lWzVdLHA9ZVs2XSxkPWVbN10sbT1lWzhdLGc9ZVs5XSx2PWVbMTBdLHk9ZVsxMV0seD1FKkUqbythLGI9TCpFKm8rQyppLF89QypFKm8tTCppLHc9RSpMKm8tQyppLFQ9TCpMKm8rYSxrPUMqTCpvK0UqaSxBPUUqQypvK0wqaSxNPUwqQypvLUUqaSxTPUMqQypvK2EsdFswXT1zKngrZipiK20qXyx0WzFdPWwqeCtoKmIrZypfLHRbMl09Yyp4K3AqYit2Kl8sdFszXT11KngrZCpiK3kqXyx0WzRdPXMqdytmKlQrbSprLHRbNV09bCp3K2gqVCtnKmssdFs2XT1jKncrcCpUK3Yqayx0WzddPXUqdytkKlQreSprLHRbOF09cypBK2YqTSttKlMsdFs5XT1sKkEraCpNK2cqUyx0WzEwXT1jKkErcCpNK3YqUyx0WzExXT11KkErZCpNK3kqUyxlIT09dCYmKHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdH19LHt9XSwyMTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0sZj1lWzEwXSxoPWVbMTFdO2UhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFs0XT1hKmkrYypuLHRbNV09byppK3Uqbix0WzZdPXMqaStmKm4sdFs3XT1sKmkraCpuLHRbOF09YyppLWEqbix0WzldPXUqaS1vKm4sdFsxMF09ZippLXMqbix0WzExXT1oKmktbCpuLHR9fSx7fV0sMjE5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppLWMqbix0WzFdPW8qaS11Km4sdFsyXT1zKmktZipuLHRbM109bCppLWgqbix0WzhdPWEqbitjKmksdFs5XT1vKm4rdSppLHRbMTBdPXMqbitmKmksdFsxMV09bCpuK2gqaSx0fX0se31dLDIyMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxmPWVbNl0saD1lWzddO2UhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkrZipuLHRbM109bCppK2gqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09ZippLXMqbix0WzddPWgqaS1sKm4sdH19LHt9XSwyMjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9fSx7fV0sMjIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQ0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIsICIrdFs5XSsiLCAiK3RbMTBdKyIsICIrdFsxMV0rIiwgIit0WzEyXSsiLCAiK3RbMTNdKyIsICIrdFsxNF0rIiwgIit0WzE1XSsiKSJ9fSx7fV0sMjIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbT1yWzBdLGc9clsxXSx2PXJbMl07ZT09PXQ/KHRbMTJdPWVbMF0qbStlWzRdKmcrZVs4XSp2K2VbMTJdLHRbMTNdPWVbMV0qbStlWzVdKmcrZVs5XSp2K2VbMTNdLHRbMTRdPWVbMl0qbStlWzZdKmcrZVsxMF0qditlWzE0XSx0WzE1XT1lWzNdKm0rZVs3XSpnK2VbMTFdKnYrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1mLHRbOV09aCx0WzEwXT1wLHRbMTFdPWQsdFsxMl09biptK3MqZytmKnYrZVsxMl0sdFsxM109aSptK2wqZytoKnYrZVsxM10sdFsxNF09YSptK2MqZytwKnYrZVsxNF0sdFsxNV09byptK3UqZytkKnYrZVsxNV0pO3JldHVybiB0fX0se31dLDIyNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXt2YXIgcj1lWzFdLG49ZVsyXSxpPWVbM10sYT1lWzZdLG89ZVs3XSxzPWVbMTFdO3RbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPXIsdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1uLHRbOV09YSx0WzExXT1lWzE0XSx0WzEyXT1pLHRbMTNdPW8sdFsxNF09c31lbHNlIHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1lWzFdLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPWVbMl0sdFs5XT1lWzZdLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWVbM10sdFsxM109ZVs3XSx0WzE0XT1lWzExXSx0WzE1XT1lWzE1XTtyZXR1cm4gdH19LHt9XSwyMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQiKSxpPXQoInBpY2stYnktYWxpYXMiKSxhPXQoInJlZ2wiKSxvPXQoImdsLXV0aWwvY29udGV4dCIpLHM9dCgiZXM2LXdlYWstbWFwIiksbD10KCJjb2xvci1ub3JtYWxpemUiKSxjPXQoImZvbnQtYXRsYXMiKSx1PXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgicGFyc2UtcmVjdCIpLGg9dCgiaXMtcGxhaW4tb2JqIikscD10KCJwYXJzZS11bml0IiksZD10KCJ0by1weCIpLG09dCgiZGV0ZWN0LWtlcm5pbmciKSxnPXQoIm9iamVjdC1hc3NpZ24iKSx2PXQoImZvbnQtbWVhc3VyZSIpLHk9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHg9dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MixiPW5ldyBzLF89ITE7aWYoZG9jdW1lbnQuYm9keSl7dmFyIHc9ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dy5zdHlsZS5mb250PSJpdGFsaWMgc21hbGwtY2FwcyBib2xkIGNvbmRlbnNlZCAxNnB4LzIgY3Vyc2l2ZSIsZ2V0Q29tcHV0ZWRTdHlsZSh3KS5mb250U3RyZXRjaCYmKF89ITApLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodyl9dmFyIFQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9nbCYmdC5wcm9wJiZ0LnRleHR1cmUmJnQuYnVmZmVyfSh0KT90aGlzLmdsPW8odCk6KHQ9e3JlZ2w6dH0sdGhpcy5nbD10LnJlZ2wuX2dsKSx0aGlzLnNoYWRlcj1iLmdldCh0aGlzLmdsKSx0aGlzLnNoYWRlcj90aGlzLnJlZ2w9dGhpcy5zaGFkZXIucmVnbDp0aGlzLnJlZ2w9dC5yZWdsfHxhKHtnbDp0aGlzLmdsfSksdGhpcy5jaGFyQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOiJmbG9hdCIsdXNhZ2U6InN0cmVhbSJ9KSx0aGlzLnNoYWRlcnx8KHRoaXMuc2hhZGVyPXRoaXMuY3JlYXRlU2hhZGVyKCksYi5zZXQodGhpcy5nbCx0aGlzLnNoYWRlcikpLHRoaXMuYmF0Y2g9W10sdGhpcy5mb250U2l6ZT1bXSx0aGlzLmZvbnQ9W10sdGhpcy5mb250QXRsYXM9W10sdGhpcy5kcmF3PXRoaXMuc2hhZGVyLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVnbC5fcmVmcmVzaCgpLHRoaXMuZHJhdyh0aGlzLmJhdGNoKX0sdGhpcy5jYW52YXM9dGhpcy5nbC5jYW52YXMsdGhpcy51cGRhdGUoaCh0KT90Ont9KX07VC5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWdsLGU9dCh7YmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IiksYXR0cmlidXRlczp7Y2hhck9mZnNldDp7b2Zmc2V0OjQsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSx3aWR0aDp7b2Zmc2V0OjAsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSxjaGFyOnQudGhpcygiY2hhckJ1ZmZlciIpLHBvc2l0aW9uOnQudGhpcygicG9zaXRpb24iKX0sdW5pZm9ybXM6e2F0bGFzU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLndpZHRoLGUuYXRsYXMuaGVpZ2h0XX0sYXRsYXNEaW06ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy5jb2xzLGUuYXRsYXMucm93c119LGF0bGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMudGV4dHVyZX0sY2hhclN0ZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5zdGVwfSxlbTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLmVtfSxjb2xvcjp0LnByb3AoImNvbG9yIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSx2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0QXJyYXkiKSxzY2FsZTp0LnRoaXMoInNjYWxlIiksYWxpZ246dC5wcm9wKCJhbGlnbiIpLGJhc2VsaW5lOnQucHJvcCgiYmFzZWxpbmUiKSx0cmFuc2xhdGU6dC50aGlzKCJ0cmFuc2xhdGUiKSxwb3NpdGlvbk9mZnNldDp0LnByb3AoInBvc2l0aW9uT2Zmc2V0Iil9LHByaW1pdGl2ZToicG9pbnRzIix2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0IiksdmVydDoiXG5cdFx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cdFx0XHRhdHRyaWJ1dGUgZmxvYXQgd2lkdGgsIGNoYXJPZmZzZXQsIGNoYXI7XG5cdFx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBlbSwgYWxpZ24sIGJhc2VsaW5lO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dW5pZm9ybSB2ZWM0IGNvbG9yO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZSwgYXRsYXNEaW0sIHNjYWxlLCB0cmFuc2xhdGUsIHBvc2l0aW9uT2Zmc2V0O1xuXHRcdFx0dmFyeWluZyB2ZWMyIGNoYXJDb29yZCwgY2hhcklkO1xuXHRcdFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XG5cdFx0XHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xuXHRcdFx0dm9pZCBtYWluICgpIHtcblx0XHRcdFx0dmVjMiBvZmZzZXQgPSBmbG9vcihlbSAqICh2ZWMyKGFsaWduICsgY2hhck9mZnNldCwgYmFzZWxpbmUpXG5cdFx0XHRcdFx0KyB2ZWMyKHBvc2l0aW9uT2Zmc2V0LngsIC1wb3NpdGlvbk9mZnNldC55KSkpXG5cdFx0XHRcdFx0LyAodmlld3BvcnQuencgKiBzY2FsZS54eSk7XG5cblx0XHRcdFx0dmVjMiBwb3NpdGlvbiA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZTtcblx0XHRcdFx0cG9zaXRpb24gKz0gb2Zmc2V0ICogc2NhbGU7XG5cblx0XHRcdFx0Y2hhckNvb3JkID0gcG9zaXRpb24gKiB2aWV3cG9ydC56dyArIHZpZXdwb3J0Lnh5O1xuXG5cdFx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuIC0gMS4sIDAsIDEpO1xuXG5cdFx0XHRcdGdsX1BvaW50U2l6ZSA9IGNoYXJTdGVwO1xuXG5cdFx0XHRcdGNoYXJJZC54ID0gbW9kKGNoYXIsIGF0bGFzRGltLngpO1xuXHRcdFx0XHRjaGFySWQueSA9IGZsb29yKGNoYXIgLyBhdGxhc0RpbS54KTtcblxuXHRcdFx0XHRjaGFyV2lkdGggPSB3aWR0aCAqIGVtO1xuXG5cdFx0XHRcdGZvbnRDb2xvciA9IGNvbG9yIC8gMjU1Ljtcblx0XHRcdH0iLGZyYWc6IlxuXHRcdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgYXRsYXM7XG5cdFx0XHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xuXHRcdFx0dmFyeWluZyB2ZWMyIGNoYXJDb29yZCwgY2hhcklkO1xuXHRcdFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XG5cblx0XHRcdGZsb2F0IGxpZ2h0bmVzcyh2ZWM0IGNvbG9yKSB7XG5cdFx0XHRcdHJldHVybiBjb2xvci5yICogMC4yOTkgKyBjb2xvci5nICogMC41ODcgKyBjb2xvci5iICogMC4xMTQ7XG5cdFx0XHR9XG5cblx0XHRcdHZvaWQgbWFpbiAoKSB7XG5cdFx0XHRcdHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLSBjaGFyQ29vcmQgKyBjaGFyU3RlcCAqIC41O1xuXHRcdFx0XHRmbG9hdCBoYWxmQ2hhclN0ZXAgPSBmbG9vcihjaGFyU3RlcCAqIC41ICsgLjUpO1xuXG5cdFx0XHRcdC8vIGludmVydCB5IGFuZCBzaGlmdCBieSAxcHggKEZGIGV4cGVjaWFsbHkgbmVlZHMgdGhhdClcblx0XHRcdFx0dXYueSA9IGNoYXJTdGVwIC0gdXYueTtcblxuXHRcdFx0XHQvLyBpZ25vcmUgcG9pbnRzIG91dHNpZGUgb2YgY2hhcmFjdGVyIGJvdW5kaW5nIGJveFxuXHRcdFx0XHRmbG9hdCBoYWxmQ2hhcldpZHRoID0gY2VpbChjaGFyV2lkdGggKiAuNSk7XG5cdFx0XHRcdGlmIChmbG9vcih1di54KSA+IGhhbGZDaGFyU3RlcCArIGhhbGZDaGFyV2lkdGggfHxcblx0XHRcdFx0XHRmbG9vcih1di54KSA8IGhhbGZDaGFyU3RlcCAtIGhhbGZDaGFyV2lkdGgpIHJldHVybjtcblxuXHRcdFx0XHR1diArPSBjaGFySWQgKiBjaGFyU3RlcDtcblx0XHRcdFx0dXYgPSB1diAvIGF0bGFzU2l6ZTtcblxuXHRcdFx0XHR2ZWM0IGNvbG9yID0gZm9udENvbG9yO1xuXHRcdFx0XHR2ZWM0IG1hc2sgPSB0ZXh0dXJlMkQoYXRsYXMsIHV2KTtcblxuXHRcdFx0XHRmbG9hdCBtYXNrWSA9IGxpZ2h0bmVzcyhtYXNrKTtcblx0XHRcdFx0Ly8gZmxvYXQgY29sb3JZID0gbGlnaHRuZXNzKGNvbG9yKTtcblx0XHRcdFx0Y29sb3IuYSAqPSBtYXNrWTtcblx0XHRcdFx0Y29sb3IuYSAqPSBvcGFjaXR5O1xuXG5cdFx0XHRcdC8vIGNvbG9yLmEgKz0gLjE7XG5cblx0XHRcdFx0Ly8gYW50aWFsaWFzaW5nLCBzZWUgeWlxIGNvbG9yIHNwYWNlIHktY2hhbm5lbCBmb3JtdWxhXG5cdFx0XHRcdC8vIGNvbG9yLnJnYiArPSAoMS4gLSBjb2xvci5yZ2IpICogKDEuIC0gbWFzay5yZ2IpO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xuXHRcdFx0fSJ9KTtyZXR1cm57cmVnbDp0LGRyYXc6ZSxhdGxhczp7fX19LFQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgdCl0PXt0ZXh0OnR9O2Vsc2UgaWYoIXQpcmV0dXJuO251bGwhPSh0PWkodCx7cG9zaXRpb246InBvc2l0aW9uIHBvc2l0aW9ucyBjb29yZCBjb29yZHMgY29vcmRpbmF0ZXMiLGZvbnQ6ImZvbnQgZm9udEZhY2UgZm9udGZhY2UgdHlwZWZhY2UgY3NzRm9udCBjc3MtZm9udCBmYW1pbHkgZm9udEZhbWlseSIsZm9udFNpemU6ImZvbnRTaXplIGZvbnRzaXplIHNpemUgZm9udC1zaXplIix0ZXh0OiJ0ZXh0IHRleHRzIGNoYXJzIGNoYXJhY3RlcnMgdmFsdWUgdmFsdWVzIHN5bWJvbHMiLGFsaWduOiJhbGlnbiBhbGlnbm1lbnQgdGV4dEFsaWduIHRleHRiYXNlbGluZSIsYmFzZWxpbmU6ImJhc2VsaW5lIHRleHRCYXNlbGluZSB0ZXh0YmFzZWxpbmUiLGRpcmVjdGlvbjoiZGlyIGRpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uIixjb2xvcjoiY29sb3IgY29sb3VyIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IgdGV4dENvbG9yIHRleHRjb2xvciIsa2VybmluZzoia2VybmluZyBrZXJuIixyYW5nZToicmFuZ2UgZGF0YUJveCIsdmlld3BvcnQ6InZwIHZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCB2aWV3UG9ydCIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgdmlzaWJsZSB2aXNpYmlsaXR5IG9wYXF1ZSIsb2Zmc2V0OiJvZmZzZXQgcG9zaXRpb25PZmZzZXQgcGFkZGluZyBzaGlmdCBpbmRlbnQgaW5kZW50YXRpb24ifSwhMCkpLm9wYWNpdHkmJihBcnJheS5pc0FycmF5KHQub3BhY2l0eSk/dGhpcy5vcGFjaXR5PXQub3BhY2l0eS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSkpOnRoaXMub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PWYodC52aWV3cG9ydCksdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsPT10aGlzLnZpZXdwb3J0JiYodGhpcy52aWV3cG9ydD17eDowLHk6MCx3aWR0aDp0aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxoZWlnaHQ6dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0fSx0aGlzLnZpZXdwb3J0QXJyYXk9W3RoaXMudmlld3BvcnQueCx0aGlzLnZpZXdwb3J0LnksdGhpcy52aWV3cG9ydC53aWR0aCx0aGlzLnZpZXdwb3J0LmhlaWdodF0pLG51bGwhPXQua2VybmluZyYmKHRoaXMua2VybmluZz10Lmtlcm5pbmcpLG51bGwhPXQub2Zmc2V0JiYoIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmKHQub2Zmc2V0PVt0Lm9mZnNldCwwXSksdGhpcy5wb3NpdGlvbk9mZnNldD15KHQub2Zmc2V0KSksdC5kaXJlY3Rpb24mJih0aGlzLmRpcmVjdGlvbj10LmRpcmVjdGlvbiksdC5yYW5nZSYmKHRoaXMucmFuZ2U9dC5yYW5nZSx0aGlzLnNjYWxlPVsxLyh0LnJhbmdlWzJdLXQucmFuZ2VbMF0pLDEvKHQucmFuZ2VbM10tdC5yYW5nZVsxXSldLHRoaXMudHJhbnNsYXRlPVstdC5yYW5nZVswXSwtdC5yYW5nZVsxXV0pLHQuc2NhbGUmJih0aGlzLnNjYWxlPXQuc2NhbGUpLHQudHJhbnNsYXRlJiYodGhpcy50cmFuc2xhdGU9dC50cmFuc2xhdGUpLHRoaXMuc2NhbGV8fCh0aGlzLnNjYWxlPVsxL3RoaXMudmlld3BvcnQud2lkdGgsMS90aGlzLnZpZXdwb3J0LmhlaWdodF0pLHRoaXMudHJhbnNsYXRlfHwodGhpcy50cmFuc2xhdGU9WzAsMF0pLHRoaXMuZm9udC5sZW5ndGh8fHQuZm9udHx8KHQuZm9udD1ULmJhc2VGb250U2l6ZSsicHggc2Fucy1zZXJpZiIpO3ZhciByLGE9ITEsbz0hMTtpZih0LmZvbnQmJihBcnJheS5pc0FycmF5KHQuZm9udCk/dC5mb250Olt0LmZvbnRdKS5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZShULmJhc2VGb250U2l6ZSsicHggIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6VC5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Xz90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09VC5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbigiLCAiKSx1PVt0LnN0eWxlXTt0LnN0eWxlIT10LnZhcmlhbnQmJnUucHVzaCh0LnZhcmlhbnQpLHQudmFyaWFudCE9dC53ZWlnaHQmJnUucHVzaCh0LndlaWdodCksXyYmdC53ZWlnaHQhPXQuc3RyZXRjaCYmdS5wdXNoKHQuc3RyZXRjaCksZS5mb250W3JdPXtiYXNlU3RyaW5nOmksZmFtaWx5OmMsd2VpZ2h0OnQud2VpZ2h0LHN0cmV0Y2g6dC5zdHJldGNoLHN0eWxlOnQuc3R5bGUsdmFyaWFudDp0LnZhcmlhbnQsd2lkdGg6e30sa2VybmluZzp7fSxtZXRyaWNzOnYoYyx7b3JpZ2luOiJ0b3AiLGZvbnRTaXplOlQuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oIiAiKX0pfSxULmZvbnRzW2ldPWUuZm9udFtyXX19KSksKGF8fG8pJiZ0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXt2YXIgYT1uLnN0cmluZ2lmeSh7c2l6ZTplLmZvbnRTaXplW2ldLGZhbWlseTpyLmZhbWlseSxzdHJldGNoOl8/ci5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnIudmFyaWFudCx3ZWlnaHQ6ci53ZWlnaHQsc3R5bGU6ci5zdHlsZX0pO2lmKGUuZm9udEF0bGFzW2ldPWUuc2hhZGVyLmF0bGFzW2FdLCFlLmZvbnRBdGxhc1tpXSl7dmFyIG89ci5tZXRyaWNzO2Uuc2hhZGVyLmF0bGFzW2FdPWUuZm9udEF0bGFzW2ldPXtmb250U3RyaW5nOmEsc3RlcDoyKk1hdGguY2VpbChlLmZvbnRTaXplW2ldKm8uYm90dG9tKi41KSxlbTplLmZvbnRTaXplW2ldLGNvbHM6MCxyb3dzOjAsaGVpZ2h0OjAsd2lkdGg6MCxjaGFyczpbXSxpZHM6e30sdGV4dHVyZTplLnJlZ2wudGV4dHVyZSgpfX1udWxsPT10LnRleHQmJih0LnRleHQ9ZS50ZXh0KX0pKSwic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdC5wb3NpdGlvbiYmdC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciBzPUFycmF5KC41KnQucG9zaXRpb24ubGVuZ3RoKSxoPTA7aDxzLmxlbmd0aDtoKyspc1toXT10LnRleHQ7dC50ZXh0PXN9aWYobnVsbCE9dC50ZXh0fHxhKXtpZih0aGlzLnRleHRPZmZzZXRzPVswXSxBcnJheS5pc0FycmF5KHQudGV4dCkpe3RoaXMuY291bnQ9dC50ZXh0WzBdLmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07Zm9yKHZhciBiPTE7Yjx0LnRleHQubGVuZ3RoO2IrKyl0aGlzLnRleHRPZmZzZXRzW2JdPXRoaXMudGV4dE9mZnNldHNbYi0xXSt0LnRleHRbYi0xXS5sZW5ndGgsdGhpcy5jb3VudCs9dC50ZXh0W2JdLmxlbmd0aCx0aGlzLmNvdW50cy5wdXNoKHQudGV4dFtiXS5sZW5ndGgpO3RoaXMudGV4dD10LnRleHQuam9pbigiIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtULmF0bGFzQ29udGV4dC5mb250PXQuYmFzZVN0cmluZztmb3IodmFyIGk9ZS5mb250QXRsYXNbbl0sYT0wO2E8ZS50ZXh0Lmxlbmd0aDthKyspe3ZhciBvPWUudGV4dC5jaGFyQXQoYSk7aWYobnVsbD09aS5pZHNbb10mJihpLmlkc1tvXT1pLmNoYXJzLmxlbmd0aCxpLmNoYXJzLnB1c2gobyksci5wdXNoKG8pKSxudWxsPT10LndpZHRoW29dJiYodC53aWR0aFtvXT1ULmF0bGFzQ29udGV4dC5tZWFzdXJlVGV4dChvKS53aWR0aC9ULmJhc2VGb250U2l6ZSxlLmtlcm5pbmcpKXt2YXIgcz1bXTtmb3IodmFyIGwgaW4gdC53aWR0aClzLnB1c2gobCtvLG8rbCk7Zyh0Lmtlcm5pbmcsbSh0LmZhbWlseSx7cGFpcnM6c30pKX19fSkpfWlmKHQucG9zaXRpb24paWYodC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciB3PSF0LnBvc2l0aW9uWzBdLmxlbmd0aCxrPXUubWFsbG9jRmxvYXQoMip0aGlzLmNvdW50KSxBPTAsTT0wO0E8dGhpcy5jb3VudHMubGVuZ3RoO0ErKyl7dmFyIFM9dGhpcy5jb3VudHNbQV07aWYodylmb3IodmFyIEU9MDtFPFM7RSsrKWtbTSsrXT10LnBvc2l0aW9uWzIqQV0sa1tNKytdPXQucG9zaXRpb25bMipBKzFdO2Vsc2UgZm9yKHZhciBMPTA7TDxTO0wrKylrW00rK109dC5wb3NpdGlvbltBXVswXSxrW00rK109dC5wb3NpdGlvbltBXVsxXX10aGlzLnBvc2l0aW9uLmNhbGw/dGhpcy5wb3NpdGlvbih7dHlwZToiZmxvYXQiLGRhdGE6a30pOnRoaXMucG9zaXRpb249dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToiZmxvYXQiLGRhdGE6a30pLHUuZnJlZUZsb2F0KGspfWVsc2UgdGhpcy5wb3NpdGlvbi5kZXN0cm95JiZ0aGlzLnBvc2l0aW9uLmRlc3Ryb3koKSx0aGlzLnBvc2l0aW9uPXtjb25zdGFudDp0LnBvc2l0aW9ufTtpZih0LnRleHR8fGEpe3ZhciBDPXUubWFsbG9jVWludDgodGhpcy5jb3VudCksUD11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCk7dGhpcy50ZXh0V2lkdGg9W107Zm9yKHZhciBJPTAsTz0wO0k8dGhpcy5jb3VudHMubGVuZ3RoO0krKyl7Zm9yKHZhciB6PXRoaXMuY291bnRzW0ldLEQ9dGhpcy5mb250W0ldfHx0aGlzLmZvbnRbMF0sUj10aGlzLmZvbnRBdGxhc1tJXXx8dGhpcy5mb250QXRsYXNbMF0sRj0wO0Y8ejtGKyspe3ZhciBCPXRoaXMudGV4dC5jaGFyQXQoTyksTj10aGlzLnRleHQuY2hhckF0KE8tMSk7aWYoQ1tPXT1SLmlkc1tCXSxQWzIqT109RC53aWR0aFtCXSxGKXt2YXIgaj1QWzIqTy0yXSxVPVBbMipPXSxWPVBbMipPLTFdKy41KmorLjUqVTtpZih0aGlzLmtlcm5pbmcpe3ZhciBIPUQua2VybmluZ1tOK0JdO0gmJihWKz0uMDAxKkgpfVBbMipPKzFdPVZ9ZWxzZSBQWzIqTysxXT0uNSpQWzIqT107TysrfXRoaXMudGV4dFdpZHRoLnB1c2goUC5sZW5ndGg/LjUqUFsyKk8tMl0rUFsyKk8tMV06MCl9dC5hbGlnbnx8KHQuYWxpZ249dGhpcy5hbGlnbiksdGhpcy5jaGFyQnVmZmVyKHtkYXRhOkMsdHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaXplQnVmZmVyKHtkYXRhOlAsdHlwZToiZmxvYXQiLHVzYWdlOiJzdHJlYW0ifSksdS5mcmVlVWludDgoQyksdS5mcmVlRmxvYXQoUCksci5sZW5ndGgmJnRoaXMuZm9udC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcihULm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9eChvKmkpLHU9eChzKmkpO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6VC5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSkpfWlmKHQuYWxpZ24mJih0aGlzLmFsaWduPXQuYWxpZ24sdGhpcy5hbGlnbk9mZnNldD10aGlzLnRleHRXaWR0aC5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmFsaWduKT9lLmFsaWduLmxlbmd0aD4xP2UuYWxpZ25bcl06ZS5hbGlnblswXTplLmFsaWduO2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gbjtzd2l0Y2gobil7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOnJldHVybi10O2Nhc2UiY2VudGVyIjpjYXNlImNlbnRyZSI6Y2FzZSJtaWRkbGUiOnJldHVybi41Ki10fXJldHVybiAwfSkpKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcCgoZnVuY3Rpb24odCxyKXt2YXIgbj0oZS5mb250W3JdfHxlLmZvbnRbMF0pLm1ldHJpY3MsaT0wO3JldHVybiBpKz0uNSpuLmJvdHRvbSxpKz0ibnVtYmVyIj09dHlwZW9mIHQ/dC1uLmJhc2VsaW5lOi1uW3RdLGkqPS0xfSkpKSxudWxsIT10LmNvbG9yKWlmKHQuY29sb3J8fCh0LmNvbG9yPSJ0cmFuc3BhcmVudCIpLCJzdHJpbmciIT10eXBlb2YgdC5jb2xvciYmaXNOYU4odC5jb2xvcikpe3ZhciBxO2lmKCJudW1iZXIiPT10eXBlb2YgdC5jb2xvclswXSYmdC5jb2xvci5sZW5ndGg+dGhpcy5jb3VudHMubGVuZ3RoKXt2YXIgRz10LmNvbG9yLmxlbmd0aDtxPXUubWFsbG9jVWludDgoRyk7Zm9yKHZhciBZPSh0LmNvbG9yLnN1YmFycmF5fHx0LmNvbG9yLnNsaWNlKS5iaW5kKHQuY29sb3IpLFc9MDtXPEc7Vys9NClxLnNldChsKFkoVyxXKzQpLCJ1aW50OCIpLFcpfWVsc2V7dmFyIFg9dC5jb2xvci5sZW5ndGg7cT11Lm1hbGxvY1VpbnQ4KDQqWCk7Zm9yKHZhciBaPTA7WjxYO1orKylxLnNldChsKHQuY29sb3JbWl18fDAsInVpbnQ4IiksNCpaKX10aGlzLmNvbG9yPXF9ZWxzZSB0aGlzLmNvbG9yPWwodC5jb2xvciwidWludDgiKTtpZih0LnBvc2l0aW9ufHx0LnRleHR8fHQuY29sb3J8fHQuYmFzZWxpbmV8fHQuYWxpZ258fHQuZm9udHx8dC5vZmZzZXR8fHQub3BhY2l0eSlpZih0aGlzLmNvbG9yLmxlbmd0aD40fHx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aD4xfHx0aGlzLmFsaWduJiZ0aGlzLmFsaWduLmxlbmd0aD4xfHx0aGlzLmZvbnRBdGxhcy5sZW5ndGg+MXx8dGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGg+Mil7dmFyIEo9TWF0aC5tYXgoLjUqdGhpcy5wb3NpdGlvbi5sZW5ndGh8fDAsLjI1KnRoaXMuY29sb3IubGVuZ3RofHwwLHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RofHwwLHRoaXMuYWxpZ25PZmZzZXQubGVuZ3RofHwwLHRoaXMuZm9udC5sZW5ndGh8fDAsdGhpcy5vcGFjaXR5Lmxlbmd0aHx8MCwuNSp0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aHx8MCk7dGhpcy5iYXRjaD1BcnJheShKKTtmb3IodmFyIEs9MDtLPHRoaXMuYmF0Y2gubGVuZ3RoO0srKyl0aGlzLmJhdGNoW0tdPXtjb3VudDp0aGlzLmNvdW50cy5sZW5ndGg+MT90aGlzLmNvdW50c1tLXTp0aGlzLmNvdW50c1swXSxvZmZzZXQ6dGhpcy50ZXh0T2Zmc2V0cy5sZW5ndGg+MT90aGlzLnRleHRPZmZzZXRzW0tdOnRoaXMudGV4dE9mZnNldHNbMF0sY29sb3I6dGhpcy5jb2xvcj90aGlzLmNvbG9yLmxlbmd0aDw9ND90aGlzLmNvbG9yOnRoaXMuY29sb3Iuc3ViYXJyYXkoNCpLLDQqSys0KTpbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbS106dGhpcy5vcGFjaXR5LGJhc2VsaW5lOm51bGwhPXRoaXMuYmFzZWxpbmVPZmZzZXRbS10/dGhpcy5iYXNlbGluZU9mZnNldFtLXTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ24/bnVsbCE9dGhpcy5hbGlnbk9mZnNldFtLXT90aGlzLmFsaWduT2Zmc2V0W0tdOnRoaXMuYWxpZ25PZmZzZXRbMF06MCxhdGxhczp0aGlzLmZvbnRBdGxhc1tLXXx8dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGg+Mj90aGlzLnBvc2l0aW9uT2Zmc2V0LnN1YmFycmF5KDIqSywyKksrMik6dGhpcy5wb3NpdGlvbk9mZnNldH19ZWxzZSB0aGlzLmNvdW50P3RoaXMuYmF0Y2g9W3tjb3VudDp0aGlzLmNvdW50LG9mZnNldDowLGNvbG9yOnRoaXMuY29sb3J8fFswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheSh0aGlzLm9wYWNpdHkpP3RoaXMub3BhY2l0eVswXTp0aGlzLm9wYWNpdHksYmFzZWxpbmU6dGhpcy5iYXNlbGluZU9mZnNldFswXSxhbGlnbjp0aGlzLmFsaWduT2Zmc2V0P3RoaXMuYWxpZ25PZmZzZXRbMF06MCxhdGxhczp0aGlzLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDp0aGlzLnBvc2l0aW9uT2Zmc2V0fV06dGhpcy5iYXRjaD1bXX0sVC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sVC5wcm90b3R5cGUua2VybmluZz0hMCxULnByb3RvdHlwZS5wb3NpdGlvbj17Y29uc3RhbnQ6bmV3IEZsb2F0MzJBcnJheSgyKX0sVC5wcm90b3R5cGUudHJhbnNsYXRlPW51bGwsVC5wcm90b3R5cGUuc2NhbGU9bnVsbCxULnByb3RvdHlwZS5mb250PW51bGwsVC5wcm90b3R5cGUudGV4dD0iIixULnByb3RvdHlwZS5wb3NpdGlvbk9mZnNldD1bMCwwXSxULnByb3RvdHlwZS5vcGFjaXR5PTEsVC5wcm90b3R5cGUuY29sb3I9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDI1NV0pLFQucHJvdG90eXBlLmFsaWduT2Zmc2V0PVswLDBdLFQubWF4QXRsYXNTaXplPTEwMjQsVC5hdGxhc0NhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxULmF0bGFzQ29udGV4dD1ULmF0bGFzQ2FudmFzLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITF9KSxULmJhc2VGb250U2l6ZT02NCxULmZvbnRzPXt9LGUuZXhwb3J0cz1UfSx7ImJpdC10d2lkZGxlIjo4MSwiY29sb3Itbm9ybWFsaXplIjo4OSwiY3NzLWZvbnQiOjk5LCJkZXRlY3Qta2VybmluZyI6MTI1LCJlczYtd2Vhay1tYXAiOjE4MywiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MTkxLCJmb250LWF0bGFzIjoxOTIsImZvbnQtbWVhc3VyZSI6MTkzLCJnbC11dGlsL2NvbnRleHQiOjIyNiwiaXMtcGxhaW4tb2JqIjoyMzYsIm9iamVjdC1hc3NpZ24iOjI0NywicGFyc2UtcmVjdCI6MjQ5LCJwYXJzZS11bml0IjoyNTEsInBpY2stYnktYWxpYXMiOjI1MyxyZWdsOjI4MywidG8tcHgiOjMxNCwidHlwZWRhcnJheS1wb29sIjozMjd9XSwyMjY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKTtmdW5jdGlvbiBpKHQpe2lmKHQuY29udGFpbmVyKWlmKHQuY29udGFpbmVyPT1kb2N1bWVudC5ib2R5KWRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGh8fCh0LmNhbnZhcy53aWR0aD10LndpZHRofHx0LnBpeGVsUmF0aW8qci5pbm5lcldpZHRoKSxkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodHx8KHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8dC5waXhlbFJhdGlvKnIuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDb250ZXh0JiYid2lkdGgiaW4gdCYmImhlaWdodCJpbiB0fWZ1bmN0aW9uIG8oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPTAsdC5zdHlsZS5sZWZ0PTAsdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodD8ic3RyaW5nIj09dHlwZW9mIHQmJih0PXtjb250YWluZXI6dH0pOnQ9e30sYSh0KT90PXtjb250YWluZXI6dH06dD0ic3RyaW5nIj09dHlwZW9mKGU9dCkubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/e2NvbnRhaW5lcjp0fTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3RWxlbWVudHN9KHQpP3tnbDp0fTpuKHQse2NvbnRhaW5lcjoiY29udGFpbmVyIHRhcmdldCBlbGVtZW50IGVsIGNhbnZhcyBob2xkZXIgcGFyZW50IHBhcmVudE5vZGUgd3JhcHBlciB1c2UgcmVmIHJvb3Qgbm9kZSIsZ2w6ImdsIGNvbnRleHQgd2ViZ2wgZ2xDb250ZXh0IixhdHRyczoiYXR0cmlidXRlcyBhdHRycyBjb250ZXh0QXR0cmlidXRlcyIscGl4ZWxSYXRpbzoicGl4ZWxSYXRpbyBweFJhdGlvIHB4IHJhdGlvIHB4cmF0aW8gcGl4ZWxyYXRpbyIsd2lkdGg6Incgd2lkdGgiLGhlaWdodDoiaCBoZWlnaHQifSwhMCksdC5waXhlbFJhdGlvfHwodC5waXhlbFJhdGlvPXIucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZigic3RyaW5nIj09dHlwZW9mIHQuY29udGFpbmVyKXt2YXIgcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQuY29udGFpbmVyKTtpZighcyl0aHJvdyBFcnJvcigiRWxlbWVudCAiK3QuY29udGFpbmVyKyIgaXMgbm90IGZvdW5kIik7dC5jb250YWluZXI9c31hKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1vKCksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCkpfWVsc2UgaWYoIXQuY2FudmFzKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50KXRocm93IEVycm9yKCJOb3QgRE9NIGVudmlyb25tZW50LiBVc2UgaGVhZGxlc3MtZ2wuIik7dC5jb250YWluZXI9ZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQuY2FudmFzPW8oKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KX1yZXR1cm4gdC5nbHx8WyJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCIsIndlYmdsLWV4cGVyaW1lbnRhbCJdLnNvbWUoKGZ1bmN0aW9uKGUpe3RyeXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoZSx0LmF0dHJzKX1jYXRjaCh0KXt9cmV0dXJuIHQuZ2x9KSksdC5nbH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7InBpY2stYnktYWxpYXMiOjI1M31dLDIyNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSwyMjg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjoyMzJ9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtYnJvd3NlciIpO2UuZXhwb3J0cz1uJiZmdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIHR9KCl9LHsiaXMtYnJvd3NlciI6MjMyfV0sMjMwOltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxmPXI/aS0xOjAsaD1yPy0xOjEscD10W2UrZl07Zm9yKGYrPWgsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UrZl0sZis9aCx1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UrZl0sZis9aCx1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxyLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz04KmEtaS0xLHU9KDE8PGMpLTEsZj11Pj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDphLTEsZD1uPzE6LTEsbT1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytmPj0xP2gvbDpoKk1hdGgucG93KDIsMS1mKSkqbD49MiYmKG8rKyxsLz0yKSxvK2Y+PXU/KHM9MCxvPXUpOm8rZj49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsaSksbys9Zik6KHM9ZSpNYXRoLnBvdygyLGYtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsYys9aTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqbX19LHt9XSwyMzE6W2Z1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlJiYodC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fX0se31dLDIzMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDIzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L1RyaWRlbnRcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbikpfSx7fV0sMjM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1hLGUuZXhwb3J0cy5pc01vYmlsZT1hLGUuZXhwb3J0cy5kZWZhdWx0PWE7dmFyIG49LyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzWzQ2XTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLGk9LyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzWzQ2XTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWlub3xhbmRyb2lkfGlwYWR8cGxheWJvb2t8c2lsay9pO2Z1bmN0aW9uIGEodCl7dHx8KHQ9e30pO3ZhciBlPXQudWE7aWYoZXx8InVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fChlPW5hdmlnYXRvci51c2VyQWdlbnQpLGUmJmUuaGVhZGVycyYmInN0cmluZyI9PXR5cGVvZiBlLmhlYWRlcnNbInVzZXItYWdlbnQiXSYmKGU9ZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0pLCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt2YXIgcj10LnRhYmxldD9pLnRlc3QoZSk6bi50ZXN0KGUpO3JldHVybiFyJiZ0LnRhYmxldCYmdC5mZWF0dXJlRGV0ZWN0JiZuYXZpZ2F0b3ImJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xJiYtMSE9PWUuaW5kZXhPZigiTWFjaW50b3NoIikmJi0xIT09ZS5pbmRleE9mKCJTYWZhcmkiKSYmKHI9ITApLHJ9fSx7fV0sMjM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9PXQmJigib2JqZWN0Ij09PWV8fCJmdW5jdGlvbiI9PT1lKX19LHt9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1uLmNhbGwodCkmJihudWxsPT09KGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXx8ZT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpfX0se31dLDIzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYoKChlPXQuY2hhckNvZGVBdChuKSk8OXx8ZT4xMykmJjMyIT09ZSYmMTMzIT09ZSYmMTYwIT09ZSYmNTc2MCE9PWUmJjYxNTghPT1lJiYoZTw4MTkyfHxlPjgyMDUpJiY4MjMyIT09ZSYmODIzMyE9PWUmJjgyMzkhPT1lJiY4Mjg3IT09ZSYmODI4OCE9PWUmJjEyMjg4IT09ZSYmNjUyNzkhPT1lKXJldHVybiExO3JldHVybiEwfX0se31dLDIzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSwhISgvXlttemxodmNzcXRhXVxzKlstKy4wLTldW15tbGh2emNzcXRhXSsvaS50ZXN0KHQpJiYvW1xkel0kL2kudGVzdCh0KSYmdC5sZW5ndGg+NCkpfX0se31dLDIzOTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9lLmV4cG9ydHM9bigpOih0PXR8fHNlbGYpLm1hcGJveGdsPW4oKX0odGhpcywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXtpZih0KWlmKGUpe3ZhciBhPSJ2YXIgc2hhcmVkQ2h1bmsgPSB7fTsgKCIrdCsiKShzaGFyZWRDaHVuayk7ICgiK2UrIikoc2hhcmVkQ2h1bmspOyIsbz17fTt0KG8pLChyPWkobykpLndvcmtlclVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYV0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSl9ZWxzZSBlPWk7ZWxzZSB0PWl9cmV0dXJuIG4oMCwoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0KGU9e2V4cG9ydHM6e319LGUuZXhwb3J0cyksZS5leHBvcnRzfXZhciByPW47ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmN4PTMqdCx0aGlzLmJ4PTMqKHItdCktdGhpcy5jeCx0aGlzLmF4PTEtdGhpcy5jeC10aGlzLmJ4LHRoaXMuY3k9MyplLHRoaXMuYnk9Myoobi1lKS10aGlzLmN5LHRoaXMuYXk9MS10aGlzLmN5LXRoaXMuYnksdGhpcy5wMXg9dCx0aGlzLnAxeT1uLHRoaXMucDJ4PXIsdGhpcy5wMnk9bn1uLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF4KnQrdGhpcy5ieCkqdCt0aGlzLmN4KSp0fSxuLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVk9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF5KnQrdGhpcy5ieSkqdCt0aGlzLmN5KSp0fSxuLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYPWZ1bmN0aW9uKHQpe3JldHVybigzKnRoaXMuYXgqdCsyKnRoaXMuYngpKnQrdGhpcy5jeH0sbi5wcm90b3R5cGUuc29sdmVDdXJ2ZVg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2Zvcih2b2lkIDA9PT1lJiYoZT0xZS02KSxpPXQsbz0wO288ODtvKyspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSktdCxNYXRoLmFicyhhKTxlKXJldHVybiBpO3ZhciBzPXRoaXMuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWChpKTtpZihNYXRoLmFicyhzKTwxZS02KWJyZWFrO2ktPWEvc31pZigoaT10KTwocj0wKSlyZXR1cm4gcjtpZihpPihuPTEpKXJldHVybiBuO2Zvcig7cjxuOyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKSxNYXRoLmFicyhhLXQpPGUpcmV0dXJuIGk7dD5hP3I9aTpuPWksaT0uNSoobi1yKStyfXJldHVybiBpfSxuLnByb3RvdHlwZS5zb2x2ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNhbXBsZUN1cnZlWSh0aGlzLnNvbHZlQ3VydmVYKHQsZSkpfTt2YXIgaT1hO2Z1bmN0aW9uIGEodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBvKHQsZSxuLGkpe3ZhciBhPW5ldyByKHQsZSxuLGkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYS5zb2x2ZSh0KX19YS5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhKHRoaXMueCx0aGlzLnkpfSxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxtdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludCh0KX0sZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KHQpfSxtdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQodCl9LGRpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYodCl9LHJvdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUodCl9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZCh0LGUpfSxtYXRNdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQodCl9LHVuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxkaXN0OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKHQpKX0sZGlzdFNxcjpmdW5jdGlvbih0KXt2YXIgZT10LngtdGhpcy54LHI9dC55LXRoaXMueTtyZXR1cm4gZSplK3Iqcn0sYW5nbGU6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KX0sYW5nbGVUbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnktdC55LHRoaXMueC10LngpfSxhbmdsZVdpdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYW5nbGVXaXRoU2VwKHQueCx0LnkpfSxhbmdsZVdpdGhTZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLngqZS10aGlzLnkqdCx0aGlzLngqdCt0aGlzLnkqZSl9LF9tYXRNdWx0OmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qdGhpcy54K3RbMV0qdGhpcy55LHI9dFsyXSp0aGlzLngrdFszXSp0aGlzLnk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1yLHRoaXN9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LF9zdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LF9tdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LF9kaXY6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sX211bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfSxfZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc30sX3VuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGl2KHRoaXMubWFnKCkpLHRoaXN9LF9wZXJwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55O3JldHVybiB0aGlzLnk9dGhpcy54LHRoaXMueD0tdCx0aGlzfSxfcm90YXRlOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCksbj1lKnRoaXMueC1yKnRoaXMueSxpPXIqdGhpcy54K2UqdGhpcy55O3JldHVybiB0aGlzLng9bix0aGlzLnk9aSx0aGlzfSxfcm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KSxpPWUueCtyKih0aGlzLngtZS54KS1uKih0aGlzLnktZS55KSxhPWUueStuKih0aGlzLngtZS54KStyKih0aGlzLnktZS55KTtyZXR1cm4gdGhpcy54PWksdGhpcy55PWEsdGhpc30sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfX0sYS5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYT90OkFycmF5LmlzQXJyYXkodCk/bmV3IGEodFswXSx0WzFdKTp0fTt2YXIgcz1vKC4yNSwuMSwuMjUsMSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgoZSx0KSl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ci1lLGk9KCh0LWUpJW4rbiklbitlO3JldHVybiBpPT09ZT9yOml9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07Zm9yKHZhciBvIGluIGEpdFtvXT1hW29dfXJldHVybiB0fXZhciBmPTE7ZnVuY3Rpb24gaCgpe3JldHVybiBmKyt9ZnVuY3Rpb24gcCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlPyhlXjE2Kk1hdGgucmFuZG9tKCk+PmUvNCkudG9TdHJpbmcoMTYpOihbMWU3XSstWzFlM10rLTRlMystOGUzKy0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLHQpfSgpfWZ1bmN0aW9uIGQodCl7cmV0dXJuISF0JiYvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVs0XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaS50ZXN0KHQpfWZ1bmN0aW9uIG0odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KSl9ZnVuY3Rpb24gZyh0LGUpe3JldHVybi0xIT09dC5pbmRleE9mKGUsdC5sZW5ndGgtZS5sZW5ndGgpfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KW5baV09ZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpO3JldHVybiBufWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KWUuY2FsbChyfHx0aGlzLHRbaV0saSx0KSYmKG5baV09dFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCh4KToib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dih0LHgpOnR9dmFyIGI9e307ZnVuY3Rpb24gXyh0KXtiW3RdfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odCksYlt0XT0hMCl9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuKHIueS10LnkpKihlLngtdC54KT4oZS55LXQueSkqKHIueC10LngpfWZ1bmN0aW9uIFQodCl7Zm9yKHZhciBlPTAscj0wLG49dC5sZW5ndGgsaT1uLTEsYT12b2lkIDAsbz12b2lkIDA7cjxuO2k9cisrKWE9dFtyXSxlKz0oKG89dFtpXSkueC1hLngpKihhLnkrby55KTtyZXR1cm4gZX1mdW5jdGlvbiBrKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9ZnVuY3Rpb24gQSh0KXt2YXIgZT17fTtpZih0LnJlcGxhY2UoLyg/Ol58KD86XHMqXCxccyopKShbXlx4MDAtXHgyMFwoXCk8PkBcLDtcOlxcIlwvXFtcXVw/XD1ce1x9XHg3Rl0rKSg/Olw9KD86KFteXHgwMC1ceDIwXChcKTw+QFwsO1w6XFwiXC9cW1xdXD9cPVx7XH1ceDdGXSspfCg/OlwiKCg/OlteIlxcXXxcXC4pKilcIikpKT8vZywoZnVuY3Rpb24odCxyLG4saSl7dmFyIGE9bnx8aTtyZXR1cm4gZVtyXT0hYXx8YS50b0xvd2VyQ2FzZSgpLCIifSkpLGVbIm1heC1hZ2UiXSl7dmFyIHI9cGFyc2VJbnQoZVsibWF4LWFnZSJdLDEwKTtpc05hTihyKT9kZWxldGUgZVsibWF4LWFnZSJdOmVbIm1heC1hZ2UiXT1yfXJldHVybiBlfXZhciBNPW51bGw7ZnVuY3Rpb24gUyh0KXtpZihudWxsPT1NKXt2YXIgZT10Lm5hdmlnYXRvcj90Lm5hdmlnYXRvci51c2VyQWdlbnQ6bnVsbDtNPSEhdC5zYWZhcml8fCEoIWV8fCEoL1xiKGlQYWR8aVBob25lfGlQb2QpXGIvLnRlc3QoZSl8fGUubWF0Y2goIlNhZmFyaSIpJiYhZS5tYXRjaCgiQ2hyb21lIikpKX1yZXR1cm4gTX1mdW5jdGlvbiBFKHQpe3RyeXt2YXIgZT1zZWxmW3RdO3JldHVybiBlLnNldEl0ZW0oIl9tYXBib3hfdGVzdF8iLDEpLGUucmVtb3ZlSXRlbSgiX21hcGJveF90ZXN0XyIpLCEwfWNhdGNoKHQpe3JldHVybiExfX12YXIgTCxDLFAsSSxPPXNlbGYucGVyZm9ybWFuY2UmJnNlbGYucGVyZm9ybWFuY2Uubm93P3NlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQoc2VsZi5wZXJmb3JtYW5jZSk6RGF0ZS5ub3cuYmluZChEYXRlKSx6PXNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2VsZi53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNlbGYubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsRD1zZWxmLmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWUsUj17bm93Ok8sZnJhbWU6ZnVuY3Rpb24odCl7dmFyIGU9eih0KTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIEQoZSl9fX0sZ2V0SW1hZ2VEYXRhOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIHI9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuPXIuZ2V0Q29udGV4dCgiMmQiKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBjcmVhdGUgY2FudmFzIDJkIGNvbnRleHQiKTtyZXR1cm4gci53aWR0aD10LndpZHRoLHIuaGVpZ2h0PXQuaGVpZ2h0LG4uZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLG4uZ2V0SW1hZ2VEYXRhKC1lLC1lLHQud2lkdGgrMiplLHQuaGVpZ2h0KzIqZSl9LHJlc29sdmVVUkw6ZnVuY3Rpb24odCl7cmV0dXJuIEx8fChMPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxMLmhyZWY9dCxMLmhyZWZ9LGhhcmR3YXJlQ29uY3VycmVuY3k6c2VsZi5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxnZXQgZGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiBzZWxmLmRldmljZVBpeGVsUmF0aW99LGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpe3JldHVybiEhc2VsZi5tYXRjaE1lZGlhJiYobnVsbD09QyYmKEM9c2VsZi5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpKSxDLm1hdGNoZXMpfX0sRj17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsZ2V0IEVWRU5UU19VUkwoKXtyZXR1cm4gdGhpcy5BUElfVVJMPzA9PT10aGlzLkFQSV9VUkwuaW5kZXhPZigiaHR0cHM6Ly9hcGkubWFwYm94LmNuIik/Imh0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjIiOjA9PT10aGlzLkFQSV9VUkwuaW5kZXhPZigiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIpPyJodHRwczovL2V2ZW50cy5tYXBib3guY29tL2V2ZW50cy92MiI6bnVsbDpudWxsfSxGRUVEQkFDS19VUkw6Imh0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrIixSRVFVSVJFX0FDQ0VTU19UT0tFTjohMCxBQ0NFU1NfVE9LRU46bnVsbCxNQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFM6MTZ9LEI9e3N1cHBvcnRlZDohMSx0ZXN0U3VwcG9ydDpmdW5jdGlvbih0KXtpZihOfHwhSSlyZXR1cm47aj9VKHQpOlA9dH19LE49ITEsaj0hMTtmdW5jdGlvbiBVKHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3QuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpO3RyeXtpZih0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsSSksdC5pc0NvbnRleHRMb3N0KCkpcmV0dXJuO0Iuc3VwcG9ydGVkPSEwfWNhdGNoKHQpe310LmRlbGV0ZVRleHR1cmUoZSksTj0hMH1zZWxmLmRvY3VtZW50JiYoKEk9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSkub25sb2FkPWZ1bmN0aW9uKCl7UCYmVShQKSxQPW51bGwsaj0hMH0sSS5vbmVycm9yPWZ1bmN0aW9uKCl7Tj0hMCxQPW51bGx9LEkuc3JjPSJkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0iKTt2YXIgVj0iMDEiO3ZhciBIPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuPXQsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW49ZSx0aGlzLl9jcmVhdGVTa3VUb2tlbigpfTtmdW5jdGlvbiBxKHQpe3JldHVybiAwPT09dC5pbmRleE9mKCJtYXBib3g6Iil9SC5wcm90b3R5cGUuX2NyZWF0ZVNrdVRva2VuPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9IiIsZT0wO2U8MTA7ZSsrKXQrPSIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiJbTWF0aC5mbG9vcig2MipNYXRoLnJhbmRvbSgpKV07cmV0dXJue3Rva2VuOlsiMSIsVix0XS5qb2luKCIiKSx0b2tlbkV4cGlyZXNBdDpEYXRlLm5vdygpKzQzMmU1fX0oKTt0aGlzLl9za3VUb2tlbj10LnRva2VuLHRoaXMuX3NrdVRva2VuRXhwaXJlc0F0PXQudG9rZW5FeHBpcmVzQXR9LEgucHJvdG90eXBlLl9pc1NrdVRva2VuRXhwaXJlZD1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpPnRoaXMuX3NrdVRva2VuRXhwaXJlc0F0fSxILnByb3RvdHlwZS50cmFuc2Zvcm1SZXF1ZXN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVJlcXVlc3RGbiYmdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuKHQsZSl8fHt1cmw6dH19LEgucHJvdG90eXBlLm5vcm1hbGl6ZVN0eWxlVVJMPWZ1bmN0aW9uKHQsZSl7aWYoIXEodCkpcmV0dXJuIHQ7dmFyIHI9WCh0KTtyZXR1cm4gci5wYXRoPSIvc3R5bGVzL3YxIityLnBhdGgsdGhpcy5fbWFrZUFQSVVSTChyLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VufHxlKX0sSC5wcm90b3R5cGUubm9ybWFsaXplR2x5cGhzVVJMPWZ1bmN0aW9uKHQsZSl7aWYoIXEodCkpcmV0dXJuIHQ7dmFyIHI9WCh0KTtyZXR1cm4gci5wYXRoPSIvZm9udHMvdjEiK3IucGF0aCx0aGlzLl9tYWtlQVBJVVJMKHIsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGUpfSxILnByb3RvdHlwZS5ub3JtYWxpemVTb3VyY2VVUkw9ZnVuY3Rpb24odCxlKXtpZighcSh0KSlyZXR1cm4gdDt2YXIgcj1YKHQpO3JldHVybiByLnBhdGg9Ii92NC8iK3IuYXV0aG9yaXR5KyIuanNvbiIsci5wYXJhbXMucHVzaCgic2VjdXJlIiksdGhpcy5fbWFrZUFQSVVSTChyLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VufHxlKX0sSC5wcm90b3R5cGUubm9ybWFsaXplU3ByaXRlVVJMPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVgodCk7cmV0dXJuIHEodCk/KGkucGF0aD0iL3N0eWxlcy92MSIraS5wYXRoKyIvc3ByaXRlIitlK3IsdGhpcy5fbWFrZUFQSVVSTChpLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VufHxuKSk6KGkucGF0aCs9IiIrZStyLFooaSkpfSxILnByb3RvdHlwZS5ub3JtYWxpemVUaWxlVVJMPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5faXNTa3VUb2tlbkV4cGlyZWQoKSYmdGhpcy5fY3JlYXRlU2t1VG9rZW4oKSx0JiYhcSh0KSlyZXR1cm4gdDt2YXIgcj1YKHQpLG49Ui5kZXZpY2VQaXhlbFJhdGlvPj0yfHw1MTI9PT1lPyJAMngiOiIiLGk9Qi5zdXBwb3J0ZWQ/Ii53ZWJwIjoiJDEiO3IucGF0aD1yLnBhdGgucmVwbGFjZSgvKFwuKHBuZ3xqcGcpXGQqKSg/PSQpLywiIituK2kpLHIucGF0aD1yLnBhdGgucmVwbGFjZSgvXi4rXC92NFwvLywiLyIpLHIucGF0aD0iL3Y0IityLnBhdGg7dmFyIGE9dGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0ubWF0Y2goL15hY2Nlc3NfdG9rZW49KC4qKSQvKTtpZihuKXJldHVybiBuWzFdfXJldHVybiBudWxsfShyLnBhcmFtcyl8fEYuQUNDRVNTX1RPS0VOO3JldHVybiBGLlJFUVVJUkVfQUNDRVNTX1RPS0VOJiZhJiZ0aGlzLl9za3VUb2tlbiYmci5wYXJhbXMucHVzaCgic2t1PSIrdGhpcy5fc2t1VG9rZW4pLHRoaXMuX21ha2VBUElVUkwocixhKX0sSC5wcm90b3R5cGUuY2Fub25pY2FsaXplVGlsZVVSTD1mdW5jdGlvbih0LGUpe3ZhciByPVgodCk7aWYoIXIucGF0aC5tYXRjaCgvKF5cL3Y0XC8pLyl8fCFyLnBhdGgubWF0Y2goL1wuW1x3XSskLykpcmV0dXJuIHQ7dmFyIG49Im1hcGJveDovL3RpbGVzLyI7bis9ci5wYXRoLnJlcGxhY2UoIi92NC8iLCIiKTt2YXIgaT1yLnBhcmFtcztyZXR1cm4gZSYmKGk9aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1hdGNoKC9eYWNjZXNzX3Rva2VuPS8pfSkpKSxpLmxlbmd0aCYmKG4rPSI/IitpLmpvaW4oIiYiKSksbn0sSC5wcm90b3R5cGUuY2Fub25pY2FsaXplVGlsZXNldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0hIWUmJnEoZSksbj1bXSxpPTAsYT10LnRpbGVzfHxbXTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07WShvKT9uLnB1c2godGhpcy5jYW5vbmljYWxpemVUaWxlVVJMKG8scikpOm4ucHVzaChvKX1yZXR1cm4gbn0sSC5wcm90b3R5cGUuX21ha2VBUElVUkw9ZnVuY3Rpb24odCxlKXt2YXIgcj0iU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMtYW5kLXRva2VuLXNjb3BlcyIsbj1YKEYuQVBJX1VSTCk7aWYodC5wcm90b2NvbD1uLnByb3RvY29sLHQuYXV0aG9yaXR5PW4uYXV0aG9yaXR5LCIvIiE9PW4ucGF0aCYmKHQucGF0aD0iIituLnBhdGgrdC5wYXRoKSwhRi5SRVFVSVJFX0FDQ0VTU19UT0tFTilyZXR1cm4gWih0KTtpZighKGU9ZXx8Ri5BQ0NFU1NfVE9LRU4pKXRocm93IG5ldyBFcnJvcigiQW4gQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IEdMLiAiK3IpO2lmKCJzIj09PWVbMF0pdGhyb3cgbmV3IEVycm9yKCJVc2UgYSBwdWJsaWMgYWNjZXNzIHRva2VuIChway4qKSB3aXRoIE1hcGJveCBHTCwgbm90IGEgc2VjcmV0IGFjY2VzcyB0b2tlbiAoc2suKikuICIrcik7cmV0dXJuIHQucGFyYW1zPXQucGFyYW1zLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10LmluZGV4T2YoImFjY2Vzc190b2tlbiIpfSkpLHQucGFyYW1zLnB1c2goImFjY2Vzc190b2tlbj0iK2UpLFoodCl9O3ZhciBHPS9eKChodHRwcz86KT9cL1wvKT8oW15cL10rXC4pP21hcGJveFwuYyhufG9tKShcL3xcP3wkKS9pO2Z1bmN0aW9uIFkodCl7cmV0dXJuIEcudGVzdCh0KX12YXIgVz0vXihcdyspOlwvXC8oW14vP10qKShcL1teP10rKT9cPz8oLispPy87ZnVuY3Rpb24gWCh0KXt2YXIgZT10Lm1hdGNoKFcpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHBhcnNlIFVSTCBvYmplY3QiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fCIvIixwYXJhbXM6ZVs0XT9lWzRdLnNwbGl0KCImIik6W119fWZ1bmN0aW9uIFoodCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoPyI/Iit0LnBhcmFtcy5qb2luKCImIik6IiI7cmV0dXJuIHQucHJvdG9jb2wrIjovLyIrdC5hdXRob3JpdHkrdC5wYXRoK2V9ZnVuY3Rpb24gSih0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgZSxyPXQuc3BsaXQoIi4iKTtpZighcnx8MyE9PXIubGVuZ3RoKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSgoZT1yWzFdLGRlY29kZVVSSUNvbXBvbmVudChzZWxmLmF0b2IoZSkuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiUiKygiMDAiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKX0pKS5qb2luKCIiKSkpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19dmFyIEs9ZnVuY3Rpb24odCl7dGhpcy50eXBlPXQsdGhpcy5hbm9uSWQ9bnVsbCx0aGlzLmV2ZW50RGF0YT17fSx0aGlzLnF1ZXVlPVtdLHRoaXMucGVuZGluZ1JlcXVlc3Q9bnVsbH07Sy5wcm90b3R5cGUuZ2V0U3RvcmFnZUtleT1mdW5jdGlvbih0KXt2YXIgZSxyPUooRi5BQ0NFU1NfVE9LRU4pLG49IiI7cmV0dXJuIHImJnIudT8oZT1yLnUsbj1zZWxmLmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyKCIweCIrZSkpfSkpKSk6bj1GLkFDQ0VTU19UT0tFTnx8IiIsdD8ibWFwYm94LmV2ZW50RGF0YS4iK3QrIjoiK246Im1hcGJveC5ldmVudERhdGE6IitufSxLLnByb3RvdHlwZS5mZXRjaEV2ZW50RGF0YT1mdW5jdGlvbigpe3ZhciB0PUUoImxvY2FsU3RvcmFnZSIpLGU9dGhpcy5nZXRTdG9yYWdlS2V5KCkscj10aGlzLmdldFN0b3JhZ2VLZXkoInV1aWQiKTtpZih0KXRyeXt2YXIgbj1zZWxmLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpO24mJih0aGlzLmV2ZW50RGF0YT1KU09OLnBhcnNlKG4pKTt2YXIgaT1zZWxmLmxvY2FsU3RvcmFnZS5nZXRJdGVtKHIpO2kmJih0aGlzLmFub25JZD1pKX1jYXRjaCh0KXtfKCJVbmFibGUgdG8gcmVhZCBmcm9tIExvY2FsU3RvcmFnZSIpfX0sSy5wcm90b3R5cGUuc2F2ZUV2ZW50RGF0YT1mdW5jdGlvbigpe3ZhciB0PUUoImxvY2FsU3RvcmFnZSIpLGU9dGhpcy5nZXRTdG9yYWdlS2V5KCkscj10aGlzLmdldFN0b3JhZ2VLZXkoInV1aWQiKTtpZih0KXRyeXtzZWxmLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHIsdGhpcy5hbm9uSWQpLE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGg+PTEmJnNlbGYubG9jYWxTdG9yYWdlLnNldEl0ZW0oZSxKU09OLnN0cmluZ2lmeSh0aGlzLmV2ZW50RGF0YSkpfWNhdGNoKHQpe18oIlVuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UiKX19LEsucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt9LEsucHJvdG90eXBlLnBvc3RFdmVudD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2lmKEYuRVZFTlRTX1VSTCl7dmFyIGE9WChGLkVWRU5UU19VUkwpO2EucGFyYW1zLnB1c2goImFjY2Vzc190b2tlbj0iKyhufHxGLkFDQ0VTU19UT0tFTnx8IiIpKTt2YXIgbz17ZXZlbnQ6dGhpcy50eXBlLGNyZWF0ZWQ6bmV3IERhdGUodCkudG9JU09TdHJpbmcoKSxzZGtJZGVudGlmaWVyOiJtYXBib3gtZ2wtanMiLHNka1ZlcnNpb246IjEuMTAuMSIsc2t1SWQ6Vix1c2VySWQ6dGhpcy5hbm9uSWR9LHM9ZT91KG8sZSk6byxsPXt1cmw6WihhKSxoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoW3NdKX07dGhpcy5wZW5kaW5nUmVxdWVzdD1idChsLChmdW5jdGlvbih0KXtpLnBlbmRpbmdSZXF1ZXN0PW51bGwscih0KSxpLnNhdmVFdmVudERhdGEoKSxpLnByb2Nlc3NSZXF1ZXN0cyhuKX0pKX19LEsucHJvdG90eXBlLnF1ZXVlUmVxdWVzdD1mdW5jdGlvbih0LGUpe3RoaXMucXVldWUucHVzaCh0KSx0aGlzLnByb2Nlc3NSZXF1ZXN0cyhlKX07dmFyIFEsJCx0dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5jYWxsKHRoaXMsIm1hcC5sb2FkIiksdGhpcy5zdWNjZXNzPXt9LHRoaXMuc2t1VG9rZW49IiJ9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3RNYXBMb2FkRXZlbnQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5za3VUb2tlbj1yLChGLkVWRU5UU19VUkwmJm58fEYuQUNDRVNTX1RPS0VOJiZBcnJheS5pc0FycmF5KHQpJiZ0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBxKHQpfHxZKHQpfSkpKSYmdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOmUsdGltZXN0YW1wOkRhdGUubm93KCl9LG4pfSxlLnByb3RvdHlwZS5wcm9jZXNzUmVxdWVzdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5wZW5kaW5nUmVxdWVzdCYmMCE9PXRoaXMucXVldWUubGVuZ3RoKXt2YXIgcj10aGlzLnF1ZXVlLnNoaWZ0KCksbj1yLmlkLGk9ci50aW1lc3RhbXA7biYmdGhpcy5zdWNjZXNzW25dfHwodGhpcy5hbm9uSWR8fHRoaXMuZmV0Y2hFdmVudERhdGEoKSxkKHRoaXMuYW5vbklkKXx8KHRoaXMuYW5vbklkPXAoKSksdGhpcy5wb3N0RXZlbnQoaSx7c2t1VG9rZW46dGhpcy5za3VUb2tlbn0sKGZ1bmN0aW9uKHQpe3R8fG4mJihlLnN1Y2Nlc3Nbbl09ITApfSksdCkpfX0sZX0oSyksZXQ9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsImFwcFVzZXJUdXJuc3RpbGUiKSx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbj1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3N0VHVybnN0aWxlRXZlbnQ9ZnVuY3Rpb24odCxlKXtGLkVWRU5UU19VUkwmJkYuQUNDRVNTX1RPS0VOJiZBcnJheS5pc0FycmF5KHQpJiZ0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBxKHQpfHxZKHQpfSkpJiZ0aGlzLnF1ZXVlUmVxdWVzdChEYXRlLm5vdygpLGUpfSxlLnByb3RvdHlwZS5wcm9jZXNzUmVxdWVzdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5wZW5kaW5nUmVxdWVzdCYmMCE9PXRoaXMucXVldWUubGVuZ3RoKXt0aGlzLmFub25JZCYmdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MmJnRoaXMuZXZlbnREYXRhLnRva2VuVXx8dGhpcy5mZXRjaEV2ZW50RGF0YSgpO3ZhciByPUooRi5BQ0NFU1NfVE9LRU4pLG49cj9yLnU6Ri5BQ0NFU1NfVE9LRU4saT1uIT09dGhpcy5ldmVudERhdGEudG9rZW5VO2QodGhpcy5hbm9uSWQpfHwodGhpcy5hbm9uSWQ9cCgpLGk9ITApO3ZhciBhPXRoaXMucXVldWUuc2hpZnQoKTtpZih0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2Vzcyl7dmFyIG89bmV3IERhdGUodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpLHM9bmV3IERhdGUoYSksbD0oYS10aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcykvODY0ZTU7aT1pfHxsPj0xfHxsPC0xfHxvLmdldERhdGUoKSE9PXMuZ2V0RGF0ZSgpfWVsc2UgaT0hMDtpZighaSlyZXR1cm4gdGhpcy5wcm9jZXNzUmVxdWVzdHMoKTt0aGlzLnBvc3RFdmVudChhLHsiZW5hYmxlZC50ZWxlbWV0cnkiOiExfSwoZnVuY3Rpb24odCl7dHx8KGUuZXZlbnREYXRhLmxhc3RTdWNjZXNzPWEsZS5ldmVudERhdGEudG9rZW5VPW4pfSksdCl9fSxlfShLKSkscnQ9ZXQucG9zdFR1cm5zdGlsZUV2ZW50LmJpbmQoZXQpLG50PW5ldyB0dCxpdD1udC5wb3N0TWFwTG9hZEV2ZW50LmJpbmQobnQpLGF0PTUwMCxvdD01MDtmdW5jdGlvbiBzdCgpe3NlbGYuY2FjaGVzJiYhUSYmKFE9c2VsZi5jYWNoZXMub3BlbigibWFwYm94LXRpbGVzIikpfWZ1bmN0aW9uIGx0KHQsZSxyKXtpZihzdCgpLFEpe3ZhciBuPXtzdGF0dXM6ZS5zdGF0dXMsc3RhdHVzVGV4dDplLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgc2VsZi5IZWFkZXJzfTtlLmhlYWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5oZWFkZXJzLnNldChlLHQpfSkpO3ZhciBpPUEoZS5oZWFkZXJzLmdldCgiQ2FjaGUtQ29udHJvbCIpfHwiIik7aWYoIWlbIm5vLXN0b3JlIl0paVsibWF4LWFnZSJdJiZuLmhlYWRlcnMuc2V0KCJFeHBpcmVzIixuZXcgRGF0ZShyKzFlMyppWyJtYXgtYWdlIl0pLnRvVVRDU3RyaW5nKCkpLG5ldyBEYXRlKG4uaGVhZGVycy5nZXQoIkV4cGlyZXMiKSkuZ2V0VGltZSgpLXI8NDJlNHx8ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT0kKXRyeXtuZXcgUmVzcG9uc2UobmV3IFJlYWRhYmxlU3RyZWFtKSwkPSEwfWNhdGNoKHQpeyQ9ITF9JD9lKHQuYm9keSk6dC5ibG9iKCkudGhlbihlKX0oZSwoZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHNlbGYuUmVzcG9uc2UoZSxuKTtzdCgpLFEmJlEudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHV0KGN0KHQudXJsKSxyKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7cmV0dXJuIF8odC5tZXNzYWdlKX0pKX0pKX19ZnVuY3Rpb24gY3QodCl7dmFyIGU9dC5pbmRleE9mKCI/Iik7cmV0dXJuIGU8MD90OnQuc2xpY2UoMCxlKX1mdW5jdGlvbiB1dCh0LGUpe2lmKHN0KCksIVEpcmV0dXJuIGUobnVsbCk7dmFyIHI9Y3QodC51cmwpO1EudGhlbigoZnVuY3Rpb24odCl7dC5tYXRjaChyKS50aGVuKChmdW5jdGlvbihuKXt2YXIgaT1mdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTt2YXIgZT1uZXcgRGF0ZSh0LmhlYWRlcnMuZ2V0KCJFeHBpcmVzIil8fDApLHI9QSh0LmhlYWRlcnMuZ2V0KCJDYWNoZS1Db250cm9sIil8fCIiKTtyZXR1cm4gZT5EYXRlLm5vdygpJiYhclsibm8tY2FjaGUiXX0obik7dC5kZWxldGUociksaSYmdC5wdXQocixuLmNsb25lKCkpLGUobnVsbCxuLGkpfSkpLmNhdGNoKGUpfSkpLmNhdGNoKGUpfXZhciBmdCxodD0xLzA7ZnVuY3Rpb24gcHQoKXtyZXR1cm4gbnVsbD09ZnQmJihmdD1zZWxmLk9mZnNjcmVlbkNhbnZhcyYmbmV3IHNlbGYuT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuY3JlYXRlSW1hZ2VCaXRtYXApLGZ0fXZhciBkdD17VW5rbm93bjoiVW5rbm93biIsU3R5bGU6IlN0eWxlIixTb3VyY2U6IlNvdXJjZSIsVGlsZToiVGlsZSIsR2x5cGhzOiJHbHlwaHMiLFNwcml0ZUltYWdlOiJTcHJpdGVJbWFnZSIsU3ByaXRlSlNPTjoiU3ByaXRlSlNPTiIsSW1hZ2U6IkltYWdlIn07ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5mcmVlemUmJk9iamVjdC5mcmVlemUoZHQpO3ZhciBtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXs0MDE9PT1yJiZZKG4pJiYoZSs9IjogeW91IG1heSBoYXZlIHByb3ZpZGVkIGFuIGludmFsaWQgTWFwYm94IGFjY2VzcyB0b2tlbi4gU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMtYW5kLXRva2VuLXNjb3BlcyIpLHQuY2FsbCh0aGlzLGUpLHRoaXMuc3RhdHVzPXIsdGhpcy51cmw9bix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMubWVzc2FnZT1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrIjogIit0aGlzLm1lc3NhZ2UrIiAoIit0aGlzLnN0YXR1cysiKTogIit0aGlzLnVybH0sZX0oRXJyb3IpLGd0PWsoKT9mdW5jdGlvbigpe3JldHVybiBzZWxmLndvcmtlciYmc2VsZi53b3JrZXIucmVmZXJyZXJ9OmZ1bmN0aW9uKCl7cmV0dXJuKCJibG9iOiI9PT1zZWxmLmxvY2F0aW9uLnByb3RvY29sP3NlbGYucGFyZW50OnNlbGYpLmxvY2F0aW9uLmhyZWZ9O2Z1bmN0aW9uIHZ0KHQsZSl7dmFyIHIsbj1uZXcgc2VsZi5BYm9ydENvbnRyb2xsZXIsaT1uZXcgc2VsZi5SZXF1ZXN0KHQudXJsLHttZXRob2Q6dC5tZXRob2R8fCJHRVQiLGJvZHk6dC5ib2R5LGNyZWRlbnRpYWxzOnQuY3JlZGVudGlhbHMsaGVhZGVyczp0LmhlYWRlcnMscmVmZXJyZXI6Z3QoKSxzaWduYWw6bi5zaWduYWx9KSxhPSExLG89ITEscz0ocj1pLnVybCkuaW5kZXhPZigic2t1PSIpPjAmJlkocik7Impzb24iPT09dC50eXBlJiZpLmhlYWRlcnMuc2V0KCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uIik7dmFyIGw9ZnVuY3Rpb24ocixuLGEpe2lmKCFvKXtpZihyJiYiU2VjdXJpdHlFcnJvciIhPT1yLm1lc3NhZ2UmJl8ociksbiYmYSlyZXR1cm4gYyhuKTt2YXIgbD1EYXRlLm5vdygpO3NlbGYuZmV0Y2goaSkudGhlbigoZnVuY3Rpb24ocil7aWYoci5vayl7dmFyIG49cz9yLmNsb25lKCk6bnVsbDtyZXR1cm4gYyhyLG4sbCl9cmV0dXJuIGUobmV3IG10KHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXsyMCE9PXQuY29kZSYmZShuZXcgRXJyb3IodC5tZXNzYWdlKSl9KSl9fSxjPWZ1bmN0aW9uKHIsbixzKXsoImFycmF5QnVmZmVyIj09PXQudHlwZT9yLmFycmF5QnVmZmVyKCk6Impzb24iPT09dC50eXBlP3IuanNvbigpOnIudGV4dCgpKS50aGVuKChmdW5jdGlvbih0KXtvfHwobiYmcyYmbHQoaSxuLHMpLGE9ITAsZShudWxsLHQsci5oZWFkZXJzLmdldCgiQ2FjaGUtQ29udHJvbCIpLHIuaGVhZGVycy5nZXQoIkV4cGlyZXMiKSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtvfHxlKG5ldyBFcnJvcih0Lm1lc3NhZ2UpKX0pKX07cmV0dXJuIHM/dXQoaSxsKTpsKG51bGwsbnVsbCkse2NhbmNlbDpmdW5jdGlvbigpe289ITAsYXx8bi5hYm9ydCgpfX19dmFyIHl0PWZ1bmN0aW9uKHQsZSl7aWYocj10LnVybCwhKC9eZmlsZTovLnRlc3Qocil8fC9eZmlsZTovLnRlc3QoZ3QoKSkmJiEvXlx3KzovLnRlc3QocikpKXtpZihzZWxmLmZldGNoJiZzZWxmLlJlcXVlc3QmJnNlbGYuQWJvcnRDb250cm9sbGVyJiZzZWxmLlJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzaWduYWwiKSlyZXR1cm4gdnQodCxlKTtpZihrKCkmJnNlbGYud29ya2VyJiZzZWxmLndvcmtlci5hY3Rvcil7cmV0dXJuIHNlbGYud29ya2VyLmFjdG9yLnNlbmQoImdldFJlc291cmNlIix0LGUsdm9pZCAwLCEwKX19dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHNlbGYuWE1MSHR0cFJlcXVlc3Q7Zm9yKHZhciBuIGluIHIub3Blbih0Lm1ldGhvZHx8IkdFVCIsdC51cmwsITApLCJhcnJheUJ1ZmZlciI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSx0LmhlYWRlcnMpci5zZXRSZXF1ZXN0SGVhZGVyKG4sdC5oZWFkZXJzW25dKTtyZXR1cm4ianNvbiI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0idGV4dCIsci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uIikpLHIud2l0aENyZWRlbnRpYWxzPSJpbmNsdWRlIj09PXQuY3JlZGVudGlhbHMsci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7aWYoKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMHx8MD09PXIuc3RhdHVzKSYmbnVsbCE9PXIucmVzcG9uc2Upe3ZhciBuPXIucmVzcG9uc2U7aWYoImpzb24iPT09dC50eXBlKXRyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4sci5nZXRSZXNwb25zZUhlYWRlcigiQ2FjaGUtQ29udHJvbCIpLHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV4cGlyZXMiKSl9ZWxzZSBlKG5ldyBtdChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKHQuYm9keSkse2NhbmNlbDpmdW5jdGlvbigpe3JldHVybiByLmFib3J0KCl9fX0odCxlKX0seHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geXQodSh0LHt0eXBlOiJhcnJheUJ1ZmZlciJ9KSxlKX0sYnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geXQodSh0LHttZXRob2Q6IlBPU1QifSksZSl9O3ZhciBfdCx3dDtfdD1bXSx3dD0wO3ZhciBUdD1mdW5jdGlvbih0LGUpe2lmKEIuc3VwcG9ydGVkJiYodC5oZWFkZXJzfHwodC5oZWFkZXJzPXt9KSx0LmhlYWRlcnMuYWNjZXB0PSJpbWFnZS93ZWJwLCovKiIpLHd0Pj1GLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUyl7dmFyIHI9e3JlcXVlc3RQYXJhbWV0ZXJzOnQsY2FsbGJhY2s6ZSxjYW5jZWxsZWQ6ITEsY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxsZWQ9ITB9fTtyZXR1cm4gX3QucHVzaChyKSxyfXd0Kys7dmFyIG49ITEsaT1mdW5jdGlvbigpe2lmKCFuKWZvcihuPSEwLHd0LS07X3QubGVuZ3RoJiZ3dDxGLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzspe3ZhciB0PV90LnNoaWZ0KCksZT10LnJlcXVlc3RQYXJhbWV0ZXJzLHI9dC5jYWxsYmFjazt0LmNhbmNlbGxlZHx8KHQuY2FuY2VsPVR0KGUscikuY2FuY2VsKX19LGE9eHQodCwoZnVuY3Rpb24odCxyLG4sYSl7aSgpLHQ/ZSh0KTpyJiYocHQoKT9mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHQpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO3NlbGYuY3JlYXRlSW1hZ2VCaXRtYXAocikudGhlbigoZnVuY3Rpb24odCl7ZShudWxsLHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtlKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgaW1hZ2UgYmVjYXVzZSBvZiAiK3QubWVzc2FnZSsiLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlIHN1Y2ggYXMgUE5HIG9yIEpQRUcuIE5vdGUgdGhhdCBTVkdzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKX0pKX0ocixlKTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uZXcgc2VsZi5JbWFnZSxhPXNlbGYuVVJMO2kub25sb2FkPWZ1bmN0aW9uKCl7ZShudWxsLGkpLGEucmV2b2tlT2JqZWN0VVJMKGkuc3JjKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGUobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCBpbWFnZS4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9O3ZhciBvPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHQpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO2kuY2FjaGVDb250cm9sPXIsaS5leHBpcmVzPW4saS5zcmM9dC5ieXRlTGVuZ3RoP2EuY3JlYXRlT2JqZWN0VVJMKG8pOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST0ifShyLGUsbixhKSl9KSk7cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe2EuY2FuY2VsKCksaSgpfX19O2Z1bmN0aW9uIGt0KHQsZSxyKXtyW3RdJiYtMSE9PXJbdF0uaW5kZXhPZihlKXx8KHJbdF09clt0XXx8W10sclt0XS5wdXNoKGUpKX1mdW5jdGlvbiBBdCh0LGUscil7aWYociYmclt0XSl7dmFyIG49clt0XS5pbmRleE9mKGUpOy0xIT09biYmclt0XS5zcGxpY2UobiwxKX19dmFyIE10PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHUodGhpcyxlKSx0aGlzLnR5cGU9dH0sU3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZvaWQgMD09PXImJihyPXt9KSx0LmNhbGwodGhpcywiZXJyb3IiLHUoe2Vycm9yOmV9LHIpKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oTXQpLEV0PWZ1bmN0aW9uKCl7fTtFdC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzPXRoaXMuX2xpc3RlbmVyc3x8e30sa3QodCxlLHRoaXMuX2xpc3RlbmVycyksdGhpc30sRXQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe3JldHVybiBBdCh0LGUsdGhpcy5fbGlzdGVuZXJzKSxBdCh0LGUsdGhpcy5fb25lVGltZUxpc3RlbmVycyksdGhpc30sRXQucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fb25lVGltZUxpc3RlbmVycz10aGlzLl9vbmVUaW1lTGlzdGVuZXJzfHx7fSxrdCh0LGUsdGhpcy5fb25lVGltZUxpc3RlbmVycyksdGhpc30sRXQucHJvdG90eXBlLmZpcmU9ZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PW5ldyBNdCh0LGV8fHt9KSk7dmFyIHI9dC50eXBlO2lmKHRoaXMubGlzdGVucyhyKSl7dC50YXJnZXQ9dGhpcztmb3IodmFyIG49MCxpPXRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW3JdP3RoaXMuX2xpc3RlbmVyc1tyXS5zbGljZSgpOltdO248aS5sZW5ndGg7bis9MSl7aVtuXS5jYWxsKHRoaXMsdCl9Zm9yKHZhciBhPTAsbz10aGlzLl9vbmVUaW1lTGlzdGVuZXJzJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3JdP3RoaXMuX29uZVRpbWVMaXN0ZW5lcnNbcl0uc2xpY2UoKTpbXTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07QXQocixzLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHMuY2FsbCh0aGlzLHQpfXZhciBsPXRoaXMuX2V2ZW50ZWRQYXJlbnQ7bCYmKHUodCwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZXZlbnRlZFBhcmVudERhdGE/dGhpcy5fZXZlbnRlZFBhcmVudERhdGEoKTp0aGlzLl9ldmVudGVkUGFyZW50RGF0YSksbC5maXJlKHQpKX1lbHNlIHQgaW5zdGFuY2VvZiBTdCYmY29uc29sZS5lcnJvcih0LmVycm9yKTtyZXR1cm4gdGhpc30sRXQucHJvdG90eXBlLmxpc3RlbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xpc3RlbmVycyYmdGhpcy5fbGlzdGVuZXJzW3RdJiZ0aGlzLl9saXN0ZW5lcnNbdF0ubGVuZ3RoPjB8fHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdF0mJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdF0ubGVuZ3RoPjB8fHRoaXMuX2V2ZW50ZWRQYXJlbnQmJnRoaXMuX2V2ZW50ZWRQYXJlbnQubGlzdGVucyh0KX0sRXQucHJvdG90eXBlLnNldEV2ZW50ZWRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZXZlbnRlZFBhcmVudD10LHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhPWUsdGhpc307dmFyIEx0PXskdmVyc2lvbjo4LCRyb290Ont2ZXJzaW9uOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WzhdfSxuYW1lOnt0eXBlOiJzdHJpbmcifSxtZXRhZGF0YTp7dHlwZToiKiJ9LGNlbnRlcjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIifSx6b29tOnt0eXBlOiJudW1iZXIifSxiZWFyaW5nOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIn0scGl0Y2g6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHVuaXRzOiJkZWdyZWVzIn0sbGlnaHQ6e3R5cGU6ImxpZ2h0In0sc291cmNlczp7cmVxdWlyZWQ6ITAsdHlwZToic291cmNlcyJ9LHNwcml0ZTp7dHlwZToic3RyaW5nIn0sZ2x5cGhzOnt0eXBlOiJzdHJpbmcifSx0cmFuc2l0aW9uOnt0eXBlOiJ0cmFuc2l0aW9uIn0sbGF5ZXJzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsdmFsdWU6ImxheWVyIn19LHNvdXJjZXM6eyIqIjp7dHlwZToic291cmNlIn19LHNvdXJjZTpbInNvdXJjZV92ZWN0b3IiLCJzb3VyY2VfcmFzdGVyIiwic291cmNlX3Jhc3Rlcl9kZW0iLCJzb3VyY2VfZ2VvanNvbiIsInNvdXJjZV92aWRlbyIsInNvdXJjZV9pbWFnZSJdLHNvdXJjZV92ZWN0b3I6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7dmVjdG9yOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExMjksMTgwLDg1LjA1MTEyOV19LHNjaGVtZTp7dHlwZToiZW51bSIsdmFsdWVzOnt4eXo6e30sdG1zOnt9fSxkZWZhdWx0OiJ4eXoifSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0scHJvbW90ZUlkOnt0eXBlOiJwcm9tb3RlSWQifSwiKiI6e3R5cGU6IioifX0sc291cmNlX3Jhc3Rlcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOntyYXN0ZXI6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEyOSwxODAsODUuMDUxMTI5XX0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1MTIsdW5pdHM6InBpeGVscyJ9LHNjaGVtZTp7dHlwZToiZW51bSIsdmFsdWVzOnt4eXo6e30sdG1zOnt9fSxkZWZhdWx0OiJ4eXoifSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9yYXN0ZXJfZGVtOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6eyJyYXN0ZXItZGVtIjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LGVuY29kaW5nOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3RlcnJhcml1bTp7fSxtYXBib3g6e319LGRlZmF1bHQ6Im1hcGJveCJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfZ2VvanNvbjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOntnZW9qc29uOnt9fX0sZGF0YTp7dHlwZToiKiJ9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxOH0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LGJ1ZmZlcjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEyOCxtYXhpbXVtOjUxMixtaW5pbXVtOjB9LHRvbGVyYW5jZTp7dHlwZToibnVtYmVyIixkZWZhdWx0Oi4zNzV9LGNsdXN0ZXI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGNsdXN0ZXJSYWRpdXM6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1MCxtaW5pbXVtOjB9LGNsdXN0ZXJNYXhab29tOnt0eXBlOiJudW1iZXIifSxjbHVzdGVyUHJvcGVydGllczp7dHlwZToiKiJ9LGxpbmVNZXRyaWNzOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxnZW5lcmF0ZUlkOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxwcm9tb3RlSWQ6e3R5cGU6InByb21vdGVJZCJ9fSxzb3VyY2VfdmlkZW86e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7dmlkZW86e319fSx1cmxzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxzb3VyY2VfaW1hZ2U6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7aW1hZ2U6e319fSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxsYXllcjp7aWQ6e3R5cGU6InN0cmluZyIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7ZmlsbDp7fSxsaW5lOnt9LHN5bWJvbDp7fSxjaXJjbGU6e30saGVhdG1hcDp7fSwiZmlsbC1leHRydXNpb24iOnt9LHJhc3Rlcjp7fSxoaWxsc2hhZGU6e30sYmFja2dyb3VuZDp7fX0scmVxdWlyZWQ6ITB9LG1ldGFkYXRhOnt0eXBlOiIqIn0sc291cmNlOnt0eXBlOiJzdHJpbmcifSwic291cmNlLWxheWVyIjp7dHlwZToic3RyaW5nIn0sbWluem9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyNH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyNH0sZmlsdGVyOnt0eXBlOiJmaWx0ZXIifSxsYXlvdXQ6e3R5cGU6ImxheW91dCJ9LHBhaW50Ont0eXBlOiJwYWludCJ9fSxsYXlvdXQ6WyJsYXlvdXRfZmlsbCIsImxheW91dF9saW5lIiwibGF5b3V0X2NpcmNsZSIsImxheW91dF9oZWF0bWFwIiwibGF5b3V0X2ZpbGwtZXh0cnVzaW9uIiwibGF5b3V0X3N5bWJvbCIsImxheW91dF9yYXN0ZXIiLCJsYXlvdXRfaGlsbHNoYWRlIiwibGF5b3V0X2JhY2tncm91bmQiXSxsYXlvdXRfYmFja2dyb3VuZDp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2ZpbGw6eyJmaWxsLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfY2lyY2xlOnsiY2lyY2xlLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfaGVhdG1hcDp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sImxheW91dF9maWxsLWV4dHJ1c2lvbiI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9saW5lOnsibGluZS1jYXAiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2J1dHQ6e30scm91bmQ6e30sc3F1YXJlOnt9fSxkZWZhdWx0OiJidXR0IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtam9pbiI6e3R5cGU6ImVudW0iLHZhbHVlczp7YmV2ZWw6e30scm91bmQ6e30sbWl0ZXI6e319LGRlZmF1bHQ6Im1pdGVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1taXRlci1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6Im1pdGVyIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS1yb3VuZC1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLjA1LHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6InJvdW5kIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X3N5bWJvbDp7InN5bWJvbC1wbGFjZW1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3BvaW50Ont9LGxpbmU6e30sImxpbmUtY2VudGVyIjp7fX0sZGVmYXVsdDoicG9pbnQiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwic3ltYm9sLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbeyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInN5bWJvbC1hdm9pZC1lZGdlcyI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJzeW1ib2wtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJzeW1ib2wtei1vcmRlciI6e3R5cGU6ImVudW0iLHZhbHVlczp7YXV0bzp7fSwidmlld3BvcnQteSI6e30sc291cmNlOnt9fSxkZWZhdWx0OiJhdXRvIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tc2l6ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx1bml0czoiZmFjdG9yIG9mIHRoZSBvcmlnaW5hbCBpY29uIHNpemUiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXRleHQtZml0Ijp7dHlwZToiZW51bSIsdmFsdWVzOntub25lOnt9LHdpZHRoOnt9LGhlaWdodDp7fSxib3RoOnt9fSxkZWZhdWx0OiJub25lIixyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXRleHQtZml0LXBhZGRpbmciOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbMCwwLDAsMF0sdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCIseyJpY29uLXRleHQtZml0IjpbImJvdGgiLCJ3aWR0aCIsImhlaWdodCJdfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWltYWdlIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdG9rZW5zOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXJvdGF0ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWtlZXAtdXByaWdodCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIix7Imljb24tcm90YXRpb24tYWxpZ25tZW50IjoibWFwIn0seyJzeW1ib2wtcGxhY2VtZW50IjpbImxpbmUiLCJsaW5lLWNlbnRlciJdfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLW9mZnNldCI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSwidG9wLWxlZnQiOnt9LCJ0b3AtcmlnaHQiOnt9LCJib3R0b20tbGVmdCI6e30sImJvdHRvbS1yaWdodCI6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtZmllbGQiOnt0eXBlOiJmb3JtYXR0ZWQiLGRlZmF1bHQ6IiIsdG9rZW5zOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWZvbnQiOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyIsZGVmYXVsdDpbIk9wZW4gU2FucyBSZWd1bGFyIiwiQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyIl0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtc2l6ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxNixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtbWF4LXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEwLG1pbmltdW06MCx1bml0czoiZW1zIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1saW5lLWhlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLjIsdW5pdHM6ImVtcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWxldHRlci1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImVtcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtanVzdGlmeSI6e3R5cGU6ImVudW0iLHZhbHVlczp7YXV0bzp7fSxsZWZ0Ont9LGNlbnRlcjp7fSxyaWdodDp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1yYWRpYWwtb2Zmc2V0Ijp7dHlwZToibnVtYmVyIix1bml0czoiZW1zIixkZWZhdWx0OjAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfX0sInRleHQtdmFyaWFibGUtYW5jaG9yIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJlbnVtIix2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxyZXF1aXJlczpbInRleHQtZmllbGQiLHsic3ltYm9sLXBsYWNlbWVudCI6WyJwb2ludCJdfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSwidG9wLWxlZnQiOnt9LCJ0b3AtcmlnaHQiOnt9LCJib3R0b20tbGVmdCI6e30sImJvdHRvbS1yaWdodCI6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7IiEiOiJ0ZXh0LXZhcmlhYmxlLWFuY2hvciJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1tYXgtYW5nbGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NDUsdW5pdHM6ImRlZ3JlZXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjpbImxpbmUiLCJsaW5lLWNlbnRlciJdfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXdyaXRpbmctbW9kZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToiZW51bSIsdmFsdWVzOntob3Jpem9udGFsOnt9LHZlcnRpY2FsOnt9fSxyZXF1aXJlczpbInRleHQtZmllbGQiLHsic3ltYm9sLXBsYWNlbWVudCI6WyJwb2ludCJdfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXJvdGF0ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWtlZXAtdXByaWdodCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InRleHQtcm90YXRpb24tYWxpZ25tZW50IjoibWFwIn0seyJzeW1ib2wtcGxhY2VtZW50IjpbImxpbmUiLCJsaW5lLWNlbnRlciJdfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXRyYW5zZm9ybSI6e3R5cGU6ImVudW0iLHZhbHVlczp7bm9uZTp7fSx1cHBlcmNhc2U6e30sbG93ZXJjYXNlOnt9fSxkZWZhdWx0OiJub25lIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsdW5pdHM6ImVtcyIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbInRleHQtZmllbGQiLHsiISI6InRleHQtcmFkaWFsLW9mZnNldCJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1hbGxvdy1vdmVybGFwIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtaWdub3JlLXBsYWNlbWVudCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LW9wdGlvbmFsIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiLCJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9oaWxsc2hhZGU6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGZpbHRlcjp7dHlwZToiYXJyYXkiLHZhbHVlOiIqIn0sZmlsdGVyX29wZXJhdG9yOnt0eXBlOiJlbnVtIix2YWx1ZXM6eyI9PSI6e30sIiE9Ijp7fSwiPiI6e30sIj49Ijp7fSwiPCI6e30sIjw9Ijp7fSxpbjp7fSwiIWluIjp7fSxhbGw6e30sYW55Ont9LG5vbmU6e30saGFzOnt9LCIhaGFzIjp7fSx3aXRoaW46e319fSxnZW9tZXRyeV90eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e1BvaW50Ont9LExpbmVTdHJpbmc6e30sUG9seWdvbjp7fX19LGZ1bmN0aW9uOntleHByZXNzaW9uOnt0eXBlOiJleHByZXNzaW9uIn0sc3RvcHM6e3R5cGU6ImFycmF5Iix2YWx1ZToiZnVuY3Rpb25fc3RvcCJ9LGJhc2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiJHpvb20ifSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2lkZW50aXR5Ont9LGV4cG9uZW50aWFsOnt9LGludGVydmFsOnt9LGNhdGVnb3JpY2FsOnt9fSxkZWZhdWx0OiJleHBvbmVudGlhbCJ9LGNvbG9yU3BhY2U6e3R5cGU6ImVudW0iLHZhbHVlczp7cmdiOnt9LGxhYjp7fSxoY2w6e319LGRlZmF1bHQ6InJnYiJ9LGRlZmF1bHQ6e3R5cGU6IioiLHJlcXVpcmVkOiExfX0sZnVuY3Rpb25fc3RvcDp7dHlwZToiYXJyYXkiLG1pbmltdW06MCxtYXhpbXVtOjI0LHZhbHVlOlsibnVtYmVyIiwiY29sb3IiXSxsZW5ndGg6Mn0sZXhwcmVzc2lvbjp7dHlwZToiYXJyYXkiLHZhbHVlOiIqIixtaW5pbXVtOjF9LGV4cHJlc3Npb25fbmFtZTp7dHlwZToiZW51bSIsdmFsdWVzOntsZXQ6e2dyb3VwOiJWYXJpYWJsZSBiaW5kaW5nIn0sdmFyOntncm91cDoiVmFyaWFibGUgYmluZGluZyJ9LGxpdGVyYWw6e2dyb3VwOiJUeXBlcyJ9LGFycmF5Ontncm91cDoiVHlwZXMifSxhdDp7Z3JvdXA6Ikxvb2t1cCJ9LGluOntncm91cDoiTG9va3VwIn0sImluZGV4LW9mIjp7Z3JvdXA6Ikxvb2t1cCJ9LHNsaWNlOntncm91cDoiTG9va3VwIn0sY2FzZTp7Z3JvdXA6IkRlY2lzaW9uIn0sbWF0Y2g6e2dyb3VwOiJEZWNpc2lvbiJ9LGNvYWxlc2NlOntncm91cDoiRGVjaXNpb24ifSxzdGVwOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0saW50ZXJwb2xhdGU6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSwiaW50ZXJwb2xhdGUtaGNsIjp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LCJpbnRlcnBvbGF0ZS1sYWIiOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sbG4yOntncm91cDoiTWF0aCJ9LHBpOntncm91cDoiTWF0aCJ9LGU6e2dyb3VwOiJNYXRoIn0sdHlwZW9mOntncm91cDoiVHlwZXMifSxzdHJpbmc6e2dyb3VwOiJUeXBlcyJ9LG51bWJlcjp7Z3JvdXA6IlR5cGVzIn0sYm9vbGVhbjp7Z3JvdXA6IlR5cGVzIn0sb2JqZWN0Ontncm91cDoiVHlwZXMifSxjb2xsYXRvcjp7Z3JvdXA6IlR5cGVzIn0sZm9ybWF0Ontncm91cDoiVHlwZXMifSxpbWFnZTp7Z3JvdXA6IlR5cGVzIn0sIm51bWJlci1mb3JtYXQiOntncm91cDoiVHlwZXMifSwidG8tc3RyaW5nIjp7Z3JvdXA6IlR5cGVzIn0sInRvLW51bWJlciI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1ib29sZWFuIjp7Z3JvdXA6IlR5cGVzIn0sInRvLXJnYmEiOntncm91cDoiQ29sb3IifSwidG8tY29sb3IiOntncm91cDoiVHlwZXMifSxyZ2I6e2dyb3VwOiJDb2xvciJ9LHJnYmE6e2dyb3VwOiJDb2xvciJ9LGdldDp7Z3JvdXA6Ikxvb2t1cCJ9LGhhczp7Z3JvdXA6Ikxvb2t1cCJ9LGxlbmd0aDp7Z3JvdXA6Ikxvb2t1cCJ9LHByb3BlcnRpZXM6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSwiZmVhdHVyZS1zdGF0ZSI6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSwiZ2VvbWV0cnktdHlwZSI6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSxpZDp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LHpvb206e2dyb3VwOiJab29tIn0sImhlYXRtYXAtZGVuc2l0eSI6e2dyb3VwOiJIZWF0bWFwIn0sImxpbmUtcHJvZ3Jlc3MiOntncm91cDoiRmVhdHVyZSBkYXRhIn0sYWNjdW11bGF0ZWQ6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSwiKyI6e2dyb3VwOiJNYXRoIn0sIioiOntncm91cDoiTWF0aCJ9LCItIjp7Z3JvdXA6Ik1hdGgifSwiLyI6e2dyb3VwOiJNYXRoIn0sIiUiOntncm91cDoiTWF0aCJ9LCJeIjp7Z3JvdXA6Ik1hdGgifSxzcXJ0Ontncm91cDoiTWF0aCJ9LGxvZzEwOntncm91cDoiTWF0aCJ9LGxuOntncm91cDoiTWF0aCJ9LGxvZzI6e2dyb3VwOiJNYXRoIn0sc2luOntncm91cDoiTWF0aCJ9LGNvczp7Z3JvdXA6Ik1hdGgifSx0YW46e2dyb3VwOiJNYXRoIn0sYXNpbjp7Z3JvdXA6Ik1hdGgifSxhY29zOntncm91cDoiTWF0aCJ9LGF0YW46e2dyb3VwOiJNYXRoIn0sbWluOntncm91cDoiTWF0aCJ9LG1heDp7Z3JvdXA6Ik1hdGgifSxyb3VuZDp7Z3JvdXA6Ik1hdGgifSxhYnM6e2dyb3VwOiJNYXRoIn0sY2VpbDp7Z3JvdXA6Ik1hdGgifSxmbG9vcjp7Z3JvdXA6Ik1hdGgifSxkaXN0YW5jZTp7Z3JvdXA6Ik1hdGgifSwiPT0iOntncm91cDoiRGVjaXNpb24ifSwiIT0iOntncm91cDoiRGVjaXNpb24ifSwiPiI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI8Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIj49Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIjw9Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sYWxsOntncm91cDoiRGVjaXNpb24ifSxhbnk6e2dyb3VwOiJEZWNpc2lvbiJ9LCIhIjp7Z3JvdXA6IkRlY2lzaW9uIn0sd2l0aGluOntncm91cDoiRGVjaXNpb24ifSwiaXMtc3VwcG9ydGVkLXNjcmlwdCI6e2dyb3VwOiJTdHJpbmcifSx1cGNhc2U6e2dyb3VwOiJTdHJpbmcifSxkb3duY2FzZTp7Z3JvdXA6IlN0cmluZyJ9LGNvbmNhdDp7Z3JvdXA6IlN0cmluZyJ9LCJyZXNvbHZlZC1sb2NhbGUiOntncm91cDoiU3RyaW5nIn19fSxsaWdodDp7YW5jaG9yOnt0eXBlOiJlbnVtIixkZWZhdWx0OiJ2aWV3cG9ydCIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCIsdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX19LHBvc2l0aW9uOnt0eXBlOiJhcnJheSIsZGVmYXVsdDpbMS4xNSwyMTAsMzBdLGxlbmd0aDozLHZhbHVlOiJudW1iZXIiLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX19LGNvbG9yOnt0eXBlOiJjb2xvciIsInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50IixkZWZhdWx0OiIjZmZmZmZmIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sdHJhbnNpdGlvbjohMH0saW50ZW5zaXR5Ont0eXBlOiJudW1iZXIiLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCIsZGVmYXVsdDouNSxtaW5pbXVtOjAsbWF4aW11bToxLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSx0cmFuc2l0aW9uOiEwfX0scGFpbnQ6WyJwYWludF9maWxsIiwicGFpbnRfbGluZSIsInBhaW50X2NpcmNsZSIsInBhaW50X2hlYXRtYXAiLCJwYWludF9maWxsLWV4dHJ1c2lvbiIsInBhaW50X3N5bWJvbCIsInBhaW50X3Jhc3RlciIsInBhaW50X2hpbGxzaGFkZSIsInBhaW50X2JhY2tncm91bmQiXSxwYWludF9maWxsOnsiZmlsbC1hbnRpYWxpYXMiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLW91dGxpbmUtY29sb3IiOnt0eXBlOiJjb2xvciIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1wYXR0ZXJuIn0seyJmaWxsLWFudGlhbGlhcyI6ITB9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn19LCJwYWludF9maWxsLWV4dHJ1c2lvbiI6eyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1leHRydXNpb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1leHRydXNpb24tcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1ldGVycyIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLWJhc2UiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1ldGVycyIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImZpbGwtZXh0cnVzaW9uLWhlaWdodCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9saW5lOnsibGluZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJsaW5lLXBhdHRlcm4ifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImxpbmUtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWdhcC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWRhc2hhcnJheSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoibGluZSB3aWR0aHMiLHJlcXVpcmVzOlt7IiEiOiJsaW5lLXBhdHRlcm4ifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQifSwibGluZS1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4ifSwibGluZS1ncmFkaWVudCI6e3R5cGU6ImNvbG9yIix0cmFuc2l0aW9uOiExLHJlcXVpcmVzOlt7IiEiOiJsaW5lLWRhc2hhcnJheSJ9LHsiISI6ImxpbmUtcGF0dGVybiJ9LHtzb3VyY2U6Imdlb2pzb24iLGhhczp7bGluZU1ldHJpY3M6ITB9fV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJsaW5lLXByb2dyZXNzIl19LCJwcm9wZXJ0eS10eXBlIjoiY29sb3ItcmFtcCJ9fSxwYWludF9jaXJjbGU6eyJjaXJjbGUtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiY2lyY2xlLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXBpdGNoLXNjYWxlIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6InZpZXdwb3J0IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS1zdHJva2Utd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS1zdHJva2UtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS1zdHJva2Utb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn19LHBhaW50X2hlYXRtYXA6eyJoZWF0bWFwLXJhZGl1cyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMCxtaW5pbXVtOjEsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImhlYXRtYXAtd2VpZ2h0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJoZWF0bWFwLWludGVuc2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGVhdG1hcC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OlsiaW50ZXJwb2xhdGUiLFsibGluZWFyIl0sWyJoZWF0bWFwLWRlbnNpdHkiXSwwLCJyZ2JhKDAsIDAsIDI1NSwgMCkiLC4xLCJyb3lhbGJsdWUiLC4zLCJjeWFuIiwuNSwibGltZSIsLjcsInllbGxvdyIsMSwicmVkIl0sdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbImhlYXRtYXAtZGVuc2l0eSJdfSwicHJvcGVydHktdHlwZSI6ImNvbG9yLXJhbXAifSwiaGVhdG1hcC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfc3ltYm9sOnsiaWNvbi1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1oYWxvLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6InJnYmEoMCwgMCwgMCwgMCkiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWhhbG8td2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24taGFsby1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImljb24taW1hZ2UiLCJpY29uLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLG92ZXJyaWRhYmxlOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1oYWxvLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6InJnYmEoMCwgMCwgMCwgMCkiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWhhbG8td2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtaGFsby1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbInRleHQtZmllbGQiLCJ0ZXh0LXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfcmFzdGVyOnsicmFzdGVyLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItaHVlLXJvdGF0ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdHJhbnNpdGlvbjohMCx1bml0czoiZGVncmVlcyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItc2F0dXJhdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItY29udHJhc3QiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLXJlc2FtcGxpbmciOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2xpbmVhcjp7fSxuZWFyZXN0Ont9fSxkZWZhdWx0OiJsaW5lYXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWZhZGUtZHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx0cmFuc2l0aW9uOiExLHVuaXRzOiJtaWxsaXNlY29uZHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfaGlsbHNoYWRlOnsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzM1LG1pbmltdW06MCxtYXhpbXVtOjM1OSx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoidmlld3BvcnQiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDouNSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiNGRkZGRkYiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9iYWNrZ3JvdW5kOnsiYmFja2dyb3VuZC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJiYWNrZ3JvdW5kLXBhdHRlcm4ifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJiYWNrZ3JvdW5kLXBhdHRlcm4iOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkIn0sImJhY2tncm91bmQtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn0sZGVsYXk6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn19LCJwcm9wZXJ0eS10eXBlIjp7ImRhdGEtZHJpdmVuIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJjcm9zcy1mYWRlZCI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4iOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImNvbG9yLXJhbXAiOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImRhdGEtY29uc3RhbnQiOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sY29uc3RhbnQ6e3R5cGU6InByb3BlcnR5LXR5cGUifX0scHJvbW90ZUlkOnsiKiI6e3R5cGU6InN0cmluZyJ9fX0sQ3Q9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5tZXNzYWdlPSh0P3QrIjogIjoiIikrcixuJiYodGhpcy5pZGVudGlmaWVyPW4pLG51bGwhPWUmJmUuX19saW5lX18mJih0aGlzLmxpbmU9ZS5fX2xpbmVfXyl9O2Z1bmN0aW9uIFB0KHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtyZXR1cm4gcj9bbmV3IEN0KGUsciwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4IildOltdfWZ1bmN0aW9uIEl0KHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9ZnVuY3Rpb24gT3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBCb29sZWFuP3QudmFsdWVPZigpOnR9ZnVuY3Rpb24genQodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5tYXAoenQpO2lmKHQgaW5zdGFuY2VvZiBPYmplY3QmJiEodCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4pKXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCllW3JdPXp0KHRbcl0pO3JldHVybiBlfXJldHVybiBPdCh0KX12YXIgRHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVycm9yKSxSdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPVtdKSx0aGlzLnBhcmVudD10LHRoaXMuYmluZGluZ3M9e307Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWlbMF0sbz1pWzFdO3RoaXMuYmluZGluZ3NbYV09b319O1J0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBSdCh0aGlzLHQpfSxSdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZGluZ3NbdF0pcmV0dXJuIHRoaXMuYmluZGluZ3NbdF07aWYodGhpcy5wYXJlbnQpcmV0dXJuIHRoaXMucGFyZW50LmdldCh0KTt0aHJvdyBuZXcgRXJyb3IodCsiIG5vdCBmb3VuZCBpbiBzY29wZS4iKX0sUnQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuYmluZGluZ3NbdF18fCEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lmhhcyh0KX07dmFyIEZ0PXtraW5kOiJudWxsIn0sQnQ9e2tpbmQ6Im51bWJlciJ9LE50PXtraW5kOiJzdHJpbmcifSxqdD17a2luZDoiYm9vbGVhbiJ9LFV0PXtraW5kOiJjb2xvciJ9LFZ0PXtraW5kOiJvYmplY3QifSxIdD17a2luZDoidmFsdWUifSxxdD17a2luZDoiY29sbGF0b3IifSxHdD17a2luZDoiZm9ybWF0dGVkIn0sWXQ9e2tpbmQ6InJlc29sdmVkSW1hZ2UifTtmdW5jdGlvbiBXdCh0LGUpe3JldHVybntraW5kOiJhcnJheSIsaXRlbVR5cGU6dCxOOmV9fWZ1bmN0aW9uIFh0KHQpe2lmKCJhcnJheSI9PT10LmtpbmQpe3ZhciBlPVh0KHQuaXRlbVR5cGUpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdC5OPyJhcnJheTwiK2UrIiwgIit0Lk4rIj4iOiJ2YWx1ZSI9PT10Lml0ZW1UeXBlLmtpbmQ/ImFycmF5IjoiYXJyYXk8IitlKyI+In1yZXR1cm4gdC5raW5kfXZhciBadD1bRnQsQnQsTnQsanQsVXQsR3QsVnQsV3QoSHQpLFl0XTtmdW5jdGlvbiBKdCh0LGUpe2lmKCJlcnJvciI9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoImFycmF5Ij09PXQua2luZCl7aWYoImFycmF5Ij09PWUua2luZCYmKDA9PT1lLk4mJiJ2YWx1ZSI9PT1lLml0ZW1UeXBlLmtpbmR8fCFKdCh0Lml0ZW1UeXBlLGUuaXRlbVR5cGUpKSYmKCJudW1iZXIiIT10eXBlb2YgdC5OfHx0Lk49PT1lLk4pKXJldHVybiBudWxsfWVsc2V7aWYodC5raW5kPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJ2YWx1ZSI9PT10LmtpbmQpZm9yKHZhciByPTAsbj1adDtyPG4ubGVuZ3RoO3IrPTEpe2lmKCFKdChuW3JdLGUpKXJldHVybiBudWxsfX1yZXR1cm4iRXhwZWN0ZWQgIitYdCh0KSsiIGJ1dCBmb3VuZCAiK1h0KGUpKyIgaW5zdGVhZC4ifWZ1bmN0aW9uIEt0KHQsZSl7cmV0dXJuIGUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2luZD09PXQua2luZH0pKX1mdW5jdGlvbiBRdCh0LGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiJudWxsIj09PWU/bnVsbD09PXQ6ImFycmF5Ij09PWU/QXJyYXkuaXNBcnJheSh0KToib2JqZWN0Ij09PWU/dCYmIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdDplPT09dHlwZW9mIHR9KSl9dmFyICR0PWUoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1LDFdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTUsMV0sYXF1YTpbMCwyNTUsMjU1LDFdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyLDFdLGF6dXJlOlsyNDAsMjU1LDI1NSwxXSxiZWlnZTpbMjQ1LDI0NSwyMjAsMV0sYmlzcXVlOlsyNTUsMjI4LDE5NiwxXSxibGFjazpbMCwwLDAsMV0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1LDFdLGJsdWU6WzAsMCwyNTUsMV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNiwxXSxicm93bjpbMTY1LDQyLDQyLDFdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzUsMV0sY2FkZXRibHVlOls5NSwxNTgsMTYwLDFdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMCwxXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzAsMV0sY29yYWw6WzI1NSwxMjcsODAsMV0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3LDFdLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMCwxXSxjcmltc29uOlsyMjAsMjAsNjAsMV0sY3lhbjpbMCwyNTUsMjU1LDFdLGRhcmtibHVlOlswLDAsMTM5LDFdLGRhcmtjeWFuOlswLDEzOSwxMzksMV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMSwxXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjksMV0sZGFya2dyZWVuOlswLDEwMCwwLDFdLGRhcmtncmV5OlsxNjksMTY5LDE2OSwxXSxkYXJra2hha2k6WzE4OSwxODMsMTA3LDFdLGRhcmttYWdlbnRhOlsxMzksMCwxMzksMV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0NywxXSxkYXJrb3JhbmdlOlsyNTUsMTQwLDAsMV0sZGFya29yY2hpZDpbMTUzLDUwLDIwNCwxXSxkYXJrcmVkOlsxMzksMCwwLDFdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyLDFdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDMsMV0sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5LDFdLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5LDFdLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5LDFdLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOSwxXSxkYXJrdmlvbGV0OlsxNDgsMCwyMTEsMV0sZGVlcHBpbms6WzI1NSwyMCwxNDcsMV0sZGVlcHNreWJsdWU6WzAsMTkxLDI1NSwxXSxkaW1ncmF5OlsxMDUsMTA1LDEwNSwxXSxkaW1ncmV5OlsxMDUsMTA1LDEwNSwxXSxkb2RnZXJibHVlOlszMCwxNDQsMjU1LDFdLGZpcmVicmljazpbMTc4LDM0LDM0LDFdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MCwxXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0LDFdLGZ1Y2hzaWE6WzI1NSwwLDI1NSwxXSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwLDFdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1LDFdLGdvbGQ6WzI1NSwyMTUsMCwxXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzIsMV0sZ3JheTpbMTI4LDEyOCwxMjgsMV0sZ3JlZW46WzAsMTI4LDAsMV0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDcsMV0sZ3JleTpbMTI4LDEyOCwxMjgsMV0saG9uZXlkZXc6WzI0MCwyNTUsMjQwLDFdLGhvdHBpbms6WzI1NSwxMDUsMTgwLDFdLGluZGlhbnJlZDpbMjA1LDkyLDkyLDFdLGluZGlnbzpbNzUsMCwxMzAsMV0saXZvcnk6WzI1NSwyNTUsMjQwLDFdLGtoYWtpOlsyNDAsMjMwLDE0MCwxXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTAsMV0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDUsMV0sbGF3bmdyZWVuOlsxMjQsMjUyLDAsMV0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNSwxXSxsaWdodGJsdWU6WzE3MywyMTYsMjMwLDFdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4LDFdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTUsMV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwLDFdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTEsMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDQsMV0sbGlnaHRncmV5OlsyMTEsMjExLDIxMSwxXSxsaWdodHBpbms6WzI1NSwxODIsMTkzLDFdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMiwxXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwLDFdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTAsMV0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1MywxXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjIsMV0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0LDFdLGxpbWU6WzAsMjU1LDAsMV0sbGltZWdyZWVuOls1MCwyMDUsNTAsMV0sbGluZW46WzI1MCwyNDAsMjMwLDFdLG1hZ2VudGE6WzI1NSwwLDI1NSwxXSxtYXJvb246WzEyOCwwLDAsMV0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzAsMV0sbWVkaXVtYmx1ZTpbMCwwLDIwNSwxXSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTEsMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOSwxXSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExMywxXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4LDFdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTQsMV0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0LDFdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzMywxXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMiwxXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwLDFdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjUsMV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxLDFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3MywxXSxuYXZ5OlswLDAsMTI4LDFdLG9sZGxhY2U6WzI1MywyNDUsMjMwLDFdLG9saXZlOlsxMjgsMTI4LDAsMV0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1LDFdLG9yYW5nZTpbMjU1LDE2NSwwLDFdLG9yYW5nZXJlZDpbMjU1LDY5LDAsMV0sb3JjaGlkOlsyMTgsMTEyLDIxNCwxXSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MCwxXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyLDFdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4LDFdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3LDFdLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzLDFdLHBlYWNocHVmZjpbMjU1LDIxOCwxODUsMV0scGVydTpbMjA1LDEzMyw2MywxXSxwaW5rOlsyNTUsMTkyLDIwMywxXSxwbHVtOlsyMjEsMTYwLDIyMSwxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMCwxXSxwdXJwbGU6WzEyOCwwLDEyOCwxXSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzLDFdLHJlZDpbMjU1LDAsMCwxXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzLDFdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNSwxXSxzYWRkbGVicm93bjpbMTM5LDY5LDE5LDFdLHNhbG1vbjpbMjUwLDEyOCwxMTQsMV0sc2FuZHlicm93bjpbMjQ0LDE2NCw5NiwxXSxzZWFncmVlbjpbNDYsMTM5LDg3LDFdLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOCwxXSxzaWVubmE6WzE2MCw4Miw0NSwxXSxzaWx2ZXI6WzE5MiwxOTIsMTkyLDFdLHNreWJsdWU6WzEzNSwyMDYsMjM1LDFdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNSwxXSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0LDFdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDQsMV0sc25vdzpbMjU1LDI1MCwyNTAsMV0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyNywxXSxzdGVlbGJsdWU6WzcwLDEzMCwxODAsMV0sdGFuOlsyMTAsMTgwLDE0MCwxXSx0ZWFsOlswLDEyOCwxMjgsMV0sdGhpc3RsZTpbMjE2LDE5MSwyMTYsMV0sdG9tYXRvOlsyNTUsOTksNzEsMV0sdHVycXVvaXNlOls2NCwyMjQsMjA4LDFdLHZpb2xldDpbMjM4LDEzMCwyMzgsMV0sd2hlYXQ6WzI0NSwyMjIsMTc5LDFdLHdoaXRlOlsyNTUsMjU1LDI1NSwxXSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NSwxXSx5ZWxsb3c6WzI1NSwyNTUsMCwxXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MCwxXX07ZnVuY3Rpb24gbih0KXtyZXR1cm4odD1NYXRoLnJvdW5kKHQpKTwwPzA6dD4yNTU/MjU1OnR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDwwPzA6dD4xPzE6dH1mdW5jdGlvbiBhKHQpe3JldHVybiIlIj09PXRbdC5sZW5ndGgtMV0/bihwYXJzZUZsb2F0KHQpLzEwMCoyNTUpOm4ocGFyc2VJbnQodCkpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIiUiPT09dFt0Lmxlbmd0aC0xXT9pKHBhcnNlRmxvYXQodCkvMTAwKTppKHBhcnNlRmxvYXQodCkpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiByPDA/cis9MTpyPjEmJihyLT0xKSw2KnI8MT90KyhlLXQpKnIqNjoyKnI8MT9lOjMqcjwyP3QrKGUtdCkqKDIvMy1yKSo2OnR9dHJ5e2UucGFyc2VDU1NDb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxpPXQucmVwbGFjZSgvIC9nLCIiKS50b0xvd2VyQ2FzZSgpO2lmKGkgaW4gcilyZXR1cm4gcltpXS5zbGljZSgpO2lmKCIjIj09PWlbMF0pcmV0dXJuIDQ9PT1pLmxlbmd0aD8oZT1wYXJzZUludChpLnN1YnN0cigxKSwxNikpPj0wJiZlPD00MDk1P1soMzg0MCZlKT4+NHwoMzg0MCZlKT4+OCwyNDAmZXwoMjQwJmUpPj40LDE1JmV8KDE1JmUpPDw0LDFdOm51bGw6Nz09PWkubGVuZ3RoJiYoZT1wYXJzZUludChpLnN1YnN0cigxKSwxNikpPj0wJiZlPD0xNjc3NzIxNT9bKDE2NzExNjgwJmUpPj4xNiwoNjUyODAmZSk+PjgsMjU1JmUsMV06bnVsbDt2YXIgbD1pLmluZGV4T2YoIigiKSxjPWkuaW5kZXhPZigiKSIpO2lmKC0xIT09bCYmYysxPT09aS5sZW5ndGgpe3ZhciB1PWkuc3Vic3RyKDAsbCksZj1pLnN1YnN0cihsKzEsYy0obCsxKSkuc3BsaXQoIiwiKSxoPTE7c3dpdGNoKHUpe2Nhc2UicmdiYSI6aWYoNCE9PWYubGVuZ3RoKXJldHVybiBudWxsO2g9byhmLnBvcCgpKTtjYXNlInJnYiI6cmV0dXJuIDMhPT1mLmxlbmd0aD9udWxsOlthKGZbMF0pLGEoZlsxXSksYShmWzJdKSxoXTtjYXNlImhzbGEiOmlmKDQhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDtoPW8oZi5wb3AoKSk7Y2FzZSJoc2wiOmlmKDMhPT1mLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcD0ocGFyc2VGbG9hdChmWzBdKSUzNjArMzYwKSUzNjAvMzYwLGQ9byhmWzFdKSxtPW8oZlsyXSksZz1tPD0uNT9tKihkKzEpOm0rZC1tKmQsdj0yKm0tZztyZXR1cm5bbigyNTUqcyh2LGcscCsxLzMpKSxuKDI1NSpzKHYsZyxwKSksbigyNTUqcyh2LGcscC0xLzMpKSxoXTtkZWZhdWx0OnJldHVybiBudWxsfX1yZXR1cm4gbnVsbH19Y2F0Y2godCl7fX0pKS5wYXJzZUNTU0NvbG9yLHRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPTEpLHRoaXMucj10LHRoaXMuZz1lLHRoaXMuYj1yLHRoaXMuYT1ufTt0ZS5wYXJzZT1mdW5jdGlvbih0KXtpZih0KXtpZih0IGluc3RhbmNlb2YgdGUpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT0kdCh0KTtpZihlKXJldHVybiBuZXcgdGUoZVswXS8yNTUqZVszXSxlWzFdLzI1NSplWzNdLGVbMl0vMjU1KmVbM10sZVszXSl9fX0sdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0FycmF5KCksZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChlKSsiLCIrTWF0aC5yb3VuZChyKSsiLCIrTWF0aC5yb3VuZChuKSsiLCIraSsiKSJ9LHRlLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yLGU9dGhpcy5nLHI9dGhpcy5iLG49dGhpcy5hO3JldHVybiAwPT09bj9bMCwwLDAsMF06WzI1NSp0L24sMjU1KmUvbiwyNTUqci9uLG5dfSx0ZS5ibGFjaz1uZXcgdGUoMCwwLDAsMSksdGUud2hpdGU9bmV3IHRlKDEsMSwxLDEpLHRlLnRyYW5zcGFyZW50PW5ldyB0ZSgwLDAsMCwwKSx0ZS5yZWQ9bmV3IHRlKDEsMCwwLDEpO3ZhciBlZT1mdW5jdGlvbih0LGUscil7dGhpcy5zZW5zaXRpdml0eT10P2U/InZhcmlhbnQiOiJjYXNlIjplPyJhY2NlbnQiOiJiYXNlIix0aGlzLmxvY2FsZT1yLHRoaXMuY29sbGF0b3I9bmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10se3NlbnNpdGl2aXR5OnRoaXMuc2Vuc2l0aXZpdHksdXNhZ2U6InNlYXJjaCJ9KX07ZWUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xsYXRvci5jb21wYXJlKHQsZSl9LGVlLnByb3RvdHlwZS5yZXNvbHZlZExvY2FsZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlfTt2YXIgcmU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnRleHQ9dCx0aGlzLmltYWdlPWUsdGhpcy5zY2FsZT1yLHRoaXMuZm9udFN0YWNrPW4sdGhpcy50ZXh0Q29sb3I9aX0sbmU9ZnVuY3Rpb24odCl7dGhpcy5zZWN0aW9ucz10fTtuZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbmUoW25ldyByZSh0LG51bGwsbnVsbCxudWxsLG51bGwpXSl9LG5lLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNlY3Rpb25zLmxlbmd0aHx8IXRoaXMuc2VjdGlvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LnRleHQubGVuZ3RofHx0LmltYWdlJiYwIT09dC5pbWFnZS5uYW1lLmxlbmd0aH0pKX0sbmUuZmFjdG9yeT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG5lP3Q6bmUuZnJvbVN0cmluZyh0KX0sbmUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNlY3Rpb25zLmxlbmd0aD8iIjp0aGlzLnNlY3Rpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dH0pKS5qb2luKCIiKX0sbmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bImZvcm1hdCJdLGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKG4uaW1hZ2UpdC5wdXNoKFsiaW1hZ2UiLG4uaW1hZ2UubmFtZV0pO2Vsc2V7dC5wdXNoKG4udGV4dCk7dmFyIGk9e307bi5mb250U3RhY2smJihpWyJ0ZXh0LWZvbnQiXT1bImxpdGVyYWwiLG4uZm9udFN0YWNrLnNwbGl0KCIsIildKSxuLnNjYWxlJiYoaVsiZm9udC1zY2FsZSJdPW4uc2NhbGUpLG4udGV4dENvbG9yJiYoaVsidGV4dC1jb2xvciJdPVsicmdiYSJdLmNvbmNhdChuLnRleHRDb2xvci50b0FycmF5KCkpKSx0LnB1c2goaSl9fXJldHVybiB0fTt2YXIgaWU9ZnVuY3Rpb24odCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmF2YWlsYWJsZT10LmF2YWlsYWJsZX07ZnVuY3Rpb24gYWUodCxlLHIsbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiZ0PD0yNTUmJiJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmZTw9MjU1JiYibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJnI8PTI1NT92b2lkIDA9PT1ufHwibnVtYmVyIj09dHlwZW9mIG4mJm4+PTAmJm48PTE/bnVsbDoiSW52YWxpZCByZ2JhIHZhbHVlIFsiK1t0LGUscixuXS5qb2luKCIsICIpKyJdOiAnYScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIjoiSW52YWxpZCByZ2JhIHZhbHVlIFsiKygibnVtYmVyIj09dHlwZW9mIG4/W3QsZSxyLG5dOlt0LGUscl0pLmpvaW4oIiwgIikrIl06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuIn1mdW5jdGlvbiBvZSh0KXtpZihudWxsPT09dClyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuITA7aWYoImJvb2xlYW4iPT10eXBlb2YgdClyZXR1cm4hMDtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIHRlKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBlZSlyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgbmUpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIGllKXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe2lmKCFvZShyW2VdKSlyZXR1cm4hMX1yZXR1cm4hMH1pZigib2JqZWN0Ij09dHlwZW9mIHQpe2Zvcih2YXIgbiBpbiB0KWlmKCFvZSh0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBzZSh0KXtpZihudWxsPT09dClyZXR1cm4gRnQ7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBOdDtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiBqdDtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIEJ0O2lmKHQgaW5zdGFuY2VvZiB0ZSlyZXR1cm4gVXQ7aWYodCBpbnN0YW5jZW9mIGVlKXJldHVybiBxdDtpZih0IGluc3RhbmNlb2YgbmUpcmV0dXJuIEd0O2lmKHQgaW5zdGFuY2VvZiBpZSlyZXR1cm4gWXQ7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPXNlKGlbbl0pO2lmKGUpe2lmKGU9PT1hKWNvbnRpbnVlO2U9SHQ7YnJlYWt9ZT1hfXJldHVybiBXdChlfHxIdCxyKX1yZXR1cm4gVnR9ZnVuY3Rpb24gbGUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PT10PyIiOiJzdHJpbmciPT09ZXx8Im51bWJlciI9PT1lfHwiYm9vbGVhbiI9PT1lP1N0cmluZyh0KTp0IGluc3RhbmNlb2YgdGV8fHQgaW5zdGFuY2VvZiBuZXx8dCBpbnN0YW5jZW9mIGllP3QudG9TdHJpbmcoKTpKU09OLnN0cmluZ2lmeSh0KX1pZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxpZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0P25ldyBpZSh7bmFtZTp0LGF2YWlsYWJsZTohMX0pOm51bGx9LGllLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bImltYWdlIix0aGlzLm5hbWVdfTt2YXIgY2U9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLnZhbHVlPWV9O2NlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCInbGl0ZXJhbCcgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTtpZighb2UodFsxXSkpcmV0dXJuIGUuZXJyb3IoImludmFsaWQgdmFsdWUiKTt2YXIgcj10WzFdLG49c2UociksaT1lLmV4cGVjdGVkVHlwZTtyZXR1cm4iYXJyYXkiIT09bi5raW5kfHwwIT09bi5OfHwhaXx8ImFycmF5IiE9PWkua2luZHx8Im51bWJlciI9PXR5cGVvZiBpLk4mJjAhPT1pLk58fChuPWkpLG5ldyBjZShuLHIpfSxjZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sY2UucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sY2UucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sY2UucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiJhcnJheSI9PT10aGlzLnR5cGUua2luZHx8Im9iamVjdCI9PT10aGlzLnR5cGUua2luZD9bImxpdGVyYWwiLHRoaXMudmFsdWVdOnRoaXMudmFsdWUgaW5zdGFuY2VvZiB0ZT9bInJnYmEiXS5jb25jYXQodGhpcy52YWx1ZS50b0FycmF5KCkpOnRoaXMudmFsdWUgaW5zdGFuY2VvZiBuZT90aGlzLnZhbHVlLnNlcmlhbGl6ZSgpOnRoaXMudmFsdWV9O3ZhciB1ZT1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkV4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3IiLHRoaXMubWVzc2FnZT10fTt1ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZX07dmFyIGZlPXtzdHJpbmc6TnQsbnVtYmVyOkJ0LGJvb2xlYW46anQsb2JqZWN0OlZ0fSxoZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtoZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcixuPTEsaT10WzBdO2lmKCJhcnJheSI9PT1pKXt2YXIgYSxvO2lmKHQubGVuZ3RoPjIpe3ZhciBzPXRbMV07aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhKHMgaW4gZmUpfHwib2JqZWN0Ij09PXMpcmV0dXJuIGUuZXJyb3IoJ1RoZSBpdGVtIHR5cGUgYXJndW1lbnQgb2YgImFycmF5IiBtdXN0IGJlIG9uZSBvZiBzdHJpbmcsIG51bWJlciwgYm9vbGVhbicsMSk7YT1mZVtzXSxuKyt9ZWxzZSBhPUh0O2lmKHQubGVuZ3RoPjMpe2lmKG51bGwhPT10WzJdJiYoIm51bWJlciIhPXR5cGVvZiB0WzJdfHx0WzJdPDB8fHRbMl0hPT1NYXRoLmZsb29yKHRbMl0pKSlyZXR1cm4gZS5lcnJvcignVGhlIGxlbmd0aCBhcmd1bWVudCB0byAiYXJyYXkiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwnLDIpO289dFsyXSxuKyt9cj1XdChhLG8pfWVsc2Ugcj1mZVtpXTtmb3IodmFyIGw9W107bjx0Lmxlbmd0aDtuKyspe3ZhciBjPWUucGFyc2UodFtuXSxuLEh0KTtpZighYylyZXR1cm4gbnVsbDtsLnB1c2goYyl9cmV0dXJuIG5ldyBoZShyLGwpfSxoZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmFyZ3MubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5hcmdzW2VdLmV2YWx1YXRlKHQpO2lmKCFKdCh0aGlzLnR5cGUsc2UocikpKXJldHVybiByO2lmKGU9PT10aGlzLmFyZ3MubGVuZ3RoLTEpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlICIrWHQodGhpcy50eXBlKSsiLCBidXQgZm91bmQgIitYdChzZShyKSkrIiBpbnN0ZWFkLiIpfXJldHVybiBudWxsfSxoZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxoZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3MuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0saGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHlwZSxlPVt0LmtpbmRdO2lmKCJhcnJheSI9PT10LmtpbmQpe3ZhciByPXQuaXRlbVR5cGU7aWYoInN0cmluZyI9PT1yLmtpbmR8fCJudW1iZXIiPT09ci5raW5kfHwiYm9vbGVhbiI9PT1yLmtpbmQpe2UucHVzaChyLmtpbmQpO3ZhciBuPXQuTjsoIm51bWJlciI9PXR5cGVvZiBufHx0aGlzLmFyZ3MubGVuZ3RoPjEpJiZlLnB1c2gobil9fXJldHVybiBlLmNvbmNhdCh0aGlzLmFyZ3MubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKSl9O3ZhciBwZT1mdW5jdGlvbih0KXt0aGlzLnR5cGU9R3QsdGhpcy5zZWN0aW9ucz10fTtwZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzFdO2lmKCFBcnJheS5pc0FycmF5KHIpJiYib2JqZWN0Ij09dHlwZW9mIHIpcmV0dXJuIGUuZXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gaW1hZ2Ugb3IgdGV4dCBzZWN0aW9uLiIpO2Zvcih2YXIgbj1bXSxpPSExLGE9MTthPD10Lmxlbmd0aC0xOysrYSl7dmFyIG89dFthXTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIG8mJiFBcnJheS5pc0FycmF5KG8pKXtpPSExO3ZhciBzPW51bGw7aWYob1siZm9udC1zY2FsZSJdJiYhKHM9ZS5wYXJzZShvWyJmb250LXNjYWxlIl0sMSxCdCkpKXJldHVybiBudWxsO3ZhciBsPW51bGw7aWYob1sidGV4dC1mb250Il0mJiEobD1lLnBhcnNlKG9bInRleHQtZm9udCJdLDEsV3QoTnQpKSkpcmV0dXJuIG51bGw7dmFyIGM9bnVsbDtpZihvWyJ0ZXh0LWNvbG9yIl0mJiEoYz1lLnBhcnNlKG9bInRleHQtY29sb3IiXSwxLFV0KSkpcmV0dXJuIG51bGw7dmFyIHU9bltuLmxlbmd0aC0xXTt1LnNjYWxlPXMsdS5mb250PWwsdS50ZXh0Q29sb3I9Y31lbHNle3ZhciBmPWUucGFyc2UodFthXSwxLEh0KTtpZighZilyZXR1cm4gbnVsbDt2YXIgaD1mLnR5cGUua2luZDtpZigic3RyaW5nIiE9PWgmJiJ2YWx1ZSIhPT1oJiYibnVsbCIhPT1oJiYicmVzb2x2ZWRJbWFnZSIhPT1oKXJldHVybiBlLmVycm9yKCJGb3JtYXR0ZWQgdGV4dCB0eXBlIG11c3QgYmUgJ3N0cmluZycsICd2YWx1ZScsICdpbWFnZScgb3IgJ251bGwnLiIpO2k9ITAsbi5wdXNoKHtjb250ZW50OmYsc2NhbGU6bnVsbCxmb250Om51bGwsdGV4dENvbG9yOm51bGx9KX19cmV0dXJuIG5ldyBwZShuKX0scGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbmUodGhpcy5zZWN0aW9ucy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPWUuY29udGVudC5ldmFsdWF0ZSh0KTtyZXR1cm4gc2Uocik9PT1ZdD9uZXcgcmUoIiIscixudWxsLG51bGwsbnVsbCk6bmV3IHJlKGxlKHIpLG51bGwsZS5zY2FsZT9lLnNjYWxlLmV2YWx1YXRlKHQpOm51bGwsZS5mb250P2UuZm9udC5ldmFsdWF0ZSh0KS5qb2luKCIsIik6bnVsbCxlLnRleHRDb2xvcj9lLnRleHRDb2xvci5ldmFsdWF0ZSh0KTpudWxsKX0pKSl9LHBlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0KG4uY29udGVudCksbi5zY2FsZSYmdChuLnNjYWxlKSxuLmZvbnQmJnQobi5mb250KSxuLnRleHRDb2xvciYmdChuLnRleHRDb2xvcil9fSxwZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxwZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsiZm9ybWF0Il0sZT0wLHI9dGhpcy5zZWN0aW9ucztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5wdXNoKG4uY29udGVudC5zZXJpYWxpemUoKSk7dmFyIGk9e307bi5zY2FsZSYmKGlbImZvbnQtc2NhbGUiXT1uLnNjYWxlLnNlcmlhbGl6ZSgpKSxuLmZvbnQmJihpWyJ0ZXh0LWZvbnQiXT1uLmZvbnQuc2VyaWFsaXplKCkpLG4udGV4dENvbG9yJiYoaVsidGV4dC1jb2xvciJdPW4udGV4dENvbG9yLnNlcmlhbGl6ZSgpKSx0LnB1c2goaSl9cmV0dXJuIHR9O3ZhciBkZT1mdW5jdGlvbih0KXt0aGlzLnR5cGU9WXQsdGhpcy5pbnB1dD10fTtkZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxOdCk7cmV0dXJuIHI/bmV3IGRlKHIpOmUuZXJyb3IoIk5vIGltYWdlIG5hbWUgcHJvdmlkZWQuIil9LGRlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpLHI9aWUuZnJvbVN0cmluZyhlKTtyZXR1cm4gciYmdC5hdmFpbGFibGVJbWFnZXMmJihyLmF2YWlsYWJsZT10LmF2YWlsYWJsZUltYWdlcy5pbmRleE9mKGUpPi0xKSxyfSxkZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LGRlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGRlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bImltYWdlIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXX07dmFyIG1lPXsidG8tYm9vbGVhbiI6anQsInRvLWNvbG9yIjpVdCwidG8tbnVtYmVyIjpCdCwidG8tc3RyaW5nIjpOdH0sZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07Z2UucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7dmFyIHI9dFswXTtpZigoInRvLWJvb2xlYW4iPT09cnx8InRvLXN0cmluZyI9PT1yKSYmMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBvbmUgYXJndW1lbnQuIik7Zm9yKHZhciBuPW1lW3JdLGk9W10sYT0xO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnBhcnNlKHRbYV0sYSxIdCk7aWYoIW8pcmV0dXJuIG51bGw7aS5wdXNoKG8pfXJldHVybiBuZXcgZ2UobixpKX0sZ2UucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBCb29sZWFuKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSk7aWYoImNvbG9yIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIGUscixuPTAsaT10aGlzLmFyZ3M7bjxpLmxlbmd0aDtuKz0xKXtpZihyPW51bGwsKGU9aVtuXS5ldmFsdWF0ZSh0KSlpbnN0YW5jZW9mIHRlKXJldHVybiBlO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIGE9dC5wYXJzZUNvbG9yKGUpO2lmKGEpcmV0dXJuIGF9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpJiYhKHI9ZS5sZW5ndGg8M3x8ZS5sZW5ndGg+ND8iSW52YWxpZCByYmdhIHZhbHVlICIrSlNPTi5zdHJpbmdpZnkoZSkrIjogZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgdGhyZWUgb3IgZm91ciBudW1lcmljIHZhbHVlcy4iOmFlKGVbMF0sZVsxXSxlWzJdLGVbM10pKSlyZXR1cm4gbmV3IHRlKGVbMF0vMjU1LGVbMV0vMjU1LGVbMl0vMjU1LGVbM10pfXRocm93IG5ldyB1ZShyfHwiQ291bGQgbm90IHBhcnNlIGNvbG9yIGZyb20gdmFsdWUgJyIrKCJzdHJpbmciPT10eXBlb2YgZT9lOlN0cmluZyhKU09OLnN0cmluZ2lmeShlKSkpKyInIil9aWYoIm51bWJlciI9PT10aGlzLnR5cGUua2luZCl7Zm9yKHZhciBvPW51bGwscz0wLGw9dGhpcy5hcmdzO3M8bC5sZW5ndGg7cys9MSl7aWYobnVsbD09PShvPWxbc10uZXZhbHVhdGUodCkpKXJldHVybiAwO3ZhciBjPU51bWJlcihvKTtpZighaXNOYU4oYykpcmV0dXJuIGN9dGhyb3cgbmV3IHVlKCJDb3VsZCBub3QgY29udmVydCAiK0pTT04uc3RyaW5naWZ5KG8pKyIgdG8gbnVtYmVyLiIpfXJldHVybiJmb3JtYXR0ZWQiPT09dGhpcy50eXBlLmtpbmQ/bmUuZnJvbVN0cmluZyhsZSh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUodCkpKToicmVzb2x2ZWRJbWFnZSI9PT10aGlzLnR5cGUua2luZD9pZS5mcm9tU3RyaW5nKGxlKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSkpOmxlKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSl9LGdlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGdlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJncy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxnZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7aWYoImZvcm1hdHRlZCI9PT10aGlzLnR5cGUua2luZClyZXR1cm4gbmV3IHBlKFt7Y29udGVudDp0aGlzLmFyZ3NbMF0sc2NhbGU6bnVsbCxmb250Om51bGwsdGV4dENvbG9yOm51bGx9XSkuc2VyaWFsaXplKCk7aWYoInJlc29sdmVkSW1hZ2UiPT09dGhpcy50eXBlLmtpbmQpcmV0dXJuIG5ldyBkZSh0aGlzLmFyZ3NbMF0pLnNlcmlhbGl6ZSgpO3ZhciB0PVsidG8tIit0aGlzLnR5cGUua2luZF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIHZlPVsiVW5rbm93biIsIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXSx5ZT1mdW5jdGlvbigpe3RoaXMuZ2xvYmFscz1udWxsLHRoaXMuZmVhdHVyZT1udWxsLHRoaXMuZmVhdHVyZVN0YXRlPW51bGwsdGhpcy5mb3JtYXR0ZWRTZWN0aW9uPW51bGwsdGhpcy5fcGFyc2VDb2xvckNhY2hlPXt9LHRoaXMuYXZhaWxhYmxlSW1hZ2VzPW51bGwsdGhpcy5jYW5vbmljYWw9bnVsbH07eWUucHJvdG90eXBlLmlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmImlkImluIHRoaXMuZmVhdHVyZT90aGlzLmZlYXR1cmUuaWQ6bnVsbH0seWUucHJvdG90eXBlLmdlb21ldHJ5VHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmU/Im51bWJlciI9PXR5cGVvZiB0aGlzLmZlYXR1cmUudHlwZT92ZVt0aGlzLmZlYXR1cmUudHlwZV06dGhpcy5mZWF0dXJlLnR5cGU6bnVsbH0seWUucHJvdG90eXBlLmdlb21ldHJ5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmImdlb21ldHJ5ImluIHRoaXMuZmVhdHVyZT90aGlzLmZlYXR1cmUuZ2VvbWV0cnk6bnVsbH0seWUucHJvdG90eXBlLmNhbm9uaWNhbElEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsfSx5ZS5wcm90b3R5cGUucHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJnRoaXMuZmVhdHVyZS5wcm9wZXJ0aWVzfHx7fX0seWUucHJvdG90eXBlLnBhcnNlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyc2VDb2xvckNhY2hlW3RdO3JldHVybiBlfHwoZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF09dGUucGFyc2UodCkpLGV9O3ZhciB4ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLl9ldmFsdWF0ZT1yLHRoaXMuYXJncz1ufTt4ZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2YWx1YXRlKHQsdGhpcy5hcmdzKX0seGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0seGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0seGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblt0aGlzLm5hbWVdLmNvbmNhdCh0aGlzLmFyZ3MubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKSl9LHhlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10WzBdLGk9eGUuZGVmaW5pdGlvbnNbbl07aWYoIWkpcmV0dXJuIGUuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiAiJytuKyciLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFsuLi5dXS4nLDApO2Zvcih2YXIgYT1BcnJheS5pc0FycmF5KGkpP2lbMF06aS50eXBlLG89QXJyYXkuaXNBcnJheShpKT9bW2lbMV0saVsyXV1dOmkub3ZlcmxvYWRzLHM9by5maWx0ZXIoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07cmV0dXJuIUFycmF5LmlzQXJyYXkocil8fHIubGVuZ3RoPT09dC5sZW5ndGgtMX0pKSxsPW51bGwsYz0wLHU9cztjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD1mWzBdLHA9ZlsxXTtsPW5ldyBVZShlLnJlZ2lzdHJ5LGUucGF0aCxudWxsLGUuc2NvcGUpO2Zvcih2YXIgZD1bXSxtPSExLGc9MTtnPHQubGVuZ3RoO2crKyl7dmFyIHY9dFtnXSx5PUFycmF5LmlzQXJyYXkoaCk/aFtnLTFdOmgudHlwZSx4PWwucGFyc2UodiwxK2QubGVuZ3RoLHkpO2lmKCF4KXttPSEwO2JyZWFrfWQucHVzaCh4KX1pZighbSlpZihBcnJheS5pc0FycmF5KGgpJiZoLmxlbmd0aCE9PWQubGVuZ3RoKWwuZXJyb3IoIkV4cGVjdGVkICIraC5sZW5ndGgrIiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiK2QubGVuZ3RoKyIgaW5zdGVhZC4iKTtlbHNle2Zvcih2YXIgYj0wO2I8ZC5sZW5ndGg7YisrKXt2YXIgXz1BcnJheS5pc0FycmF5KGgpP2hbYl06aC50eXBlLHc9ZFtiXTtsLmNvbmNhdChiKzEpLmNoZWNrU3VidHlwZShfLHcudHlwZSl9aWYoMD09PWwuZXJyb3JzLmxlbmd0aClyZXR1cm4gbmV3IHhlKG4sYSxwLGQpfX1pZigxPT09cy5sZW5ndGgpKHI9ZS5lcnJvcnMpLnB1c2guYXBwbHkocixsLmVycm9ycyk7ZWxzZXtmb3IodmFyIFQ9KHMubGVuZ3RoP3M6bykubWFwKChmdW5jdGlvbih0KXt2YXIgZSxyPXRbMF07cmV0dXJuIGU9cixBcnJheS5pc0FycmF5KGUpPyIoIitlLm1hcChYdCkuam9pbigiLCAiKSsiKSI6IigiK1h0KGUudHlwZSkrIi4uLikifSkpLmpvaW4oIiB8ICIpLGs9W10sQT0xO0E8dC5sZW5ndGg7QSsrKXt2YXIgTT1lLnBhcnNlKHRbQV0sMStrLmxlbmd0aCk7aWYoIU0pcmV0dXJuIG51bGw7ay5wdXNoKFh0KE0udHlwZSkpfWUuZXJyb3IoIkV4cGVjdGVkIGFyZ3VtZW50cyBvZiB0eXBlICIrVCsiLCBidXQgZm91bmQgKCIray5qb2luKCIsICIpKyIpIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LHhlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHhlLmRlZmluaXRpb25zPWUsZSl0W3JdPXhlfTt2YXIgYmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT1xdCx0aGlzLmxvY2FsZT1yLHRoaXMuY2FzZVNlbnNpdGl2ZT10LHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlPWV9O2JlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBvbmUgYXJndW1lbnQuIik7dmFyIHI9dFsxXTtpZigib2JqZWN0IiE9dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuIGUuZXJyb3IoIkNvbGxhdG9yIG9wdGlvbnMgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuIik7dmFyIG49ZS5wYXJzZSh2b2lkIDAhPT1yWyJjYXNlLXNlbnNpdGl2ZSJdJiZyWyJjYXNlLXNlbnNpdGl2ZSJdLDEsanQpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPWUucGFyc2Uodm9pZCAwIT09clsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdJiZyWyJkaWFjcml0aWMtc2Vuc2l0aXZlIl0sMSxqdCk7aWYoIWkpcmV0dXJuIG51bGw7dmFyIGE9bnVsbDtyZXR1cm4gci5sb2NhbGUmJiEoYT1lLnBhcnNlKHIubG9jYWxlLDEsTnQpKT9udWxsOm5ldyBiZShuLGksYSl9LGJlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVlKHRoaXMuY2FzZVNlbnNpdGl2ZS5ldmFsdWF0ZSh0KSx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5ldmFsdWF0ZSh0KSx0aGlzLmxvY2FsZT90aGlzLmxvY2FsZS5ldmFsdWF0ZSh0KTpudWxsKX0sYmUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuY2FzZVNlbnNpdGl2ZSksdCh0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSksdGhpcy5sb2NhbGUmJnQodGhpcy5sb2NhbGUpfSxiZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxiZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbImNhc2Utc2Vuc2l0aXZlIl09dGhpcy5jYXNlU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpLHRbImRpYWNyaXRpYy1zZW5zaXRpdmUiXT10aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKSx0aGlzLmxvY2FsZSYmKHQubG9jYWxlPXRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpKSxbImNvbGxhdG9yIix0XX07ZnVuY3Rpb24gX2UodCxlKXt0WzBdPU1hdGgubWluKHRbMF0sZVswXSksdFsxXT1NYXRoLm1pbih0WzFdLGVbMV0pLHRbMl09TWF0aC5tYXgodFsyXSxlWzBdKSx0WzNdPU1hdGgubWF4KHRbM10sZVsxXSl9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4hKHRbMF08PWVbMF0pJiYoISh0WzJdPj1lWzJdKSYmKCEodFsxXTw9ZVsxXSkmJiEodFszXT49ZVszXSkpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByLG49KDE4MCt0WzBdKS8zNjAsaT0ocj10WzFdLCgxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3IqTWF0aC5QSS8zNjApKSkvMzYwKSxhPU1hdGgucG93KDIsZS56KTtyZXR1cm5bTWF0aC5yb3VuZChuKmEqODE5MiksTWF0aC5yb3VuZChpKmEqODE5MildfWZ1bmN0aW9uIGtlKHQsZSxyKXtyZXR1cm4gZVsxXT50WzFdIT1yWzFdPnRbMV0mJnRbMF08KHJbMF0tZVswXSkqKHRbMV0tZVsxXSkvKHJbMV0tZVsxXSkrZVswXX1mdW5jdGlvbiBBZSh0LGUpe2Zvcih2YXIgcixuLGksYSxvLHMsbCxjPSExLHU9MCxmPWUubGVuZ3RoO3U8Zjt1KyspZm9yKHZhciBoPWVbdV0scD0wLGQ9aC5sZW5ndGg7cDxkLTE7cCsrKXtpZihyPXQsbj1oW3BdLGk9aFtwKzFdLGE9dm9pZCAwLG89dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLGE9clswXS1uWzBdLG89clsxXS1uWzFdLHM9clswXS1pWzBdLGw9clsxXS1pWzFdLGEqbC1zKm89PTAmJmEqczw9MCYmbypsPD0wKXJldHVybiExO2tlKHQsaFtwXSxoW3ArMV0pJiYoYz0hYyl9cmV0dXJuIGN9ZnVuY3Rpb24gTWUodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihBZSh0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFNlKHQsZSxyLG4pe3ZhciBpPXRbMF0tclswXSxhPXRbMV0tclsxXSxvPWVbMF0tclswXSxzPWVbMV0tclsxXSxsPW5bMF0tclswXSxjPW5bMV0tclsxXSx1PWkqYy1sKmEsZj1vKmMtbCpzO3JldHVybiB1PjAmJmY8MHx8dTwwJiZmPjB9ZnVuY3Rpb24gRWUodCxlLHIpe2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpZm9yKHZhciBhPWlbbl0sbz0wO288YS5sZW5ndGgtMTsrK28paWYocz10LGw9ZSxjPWFbb10sdT1hW28rMV0sZj12b2lkIDAsaD12b2lkIDAscD12b2lkIDAsZD12b2lkIDAscD1bbFswXS1zWzBdLGxbMV0tc1sxXV0sZD1bdVswXS1jWzBdLHVbMV0tY1sxXV0sMCE9KGY9ZClbMF0qKGg9cClbMV0tZlsxXSpoWzBdJiZTZShzLGwsYyx1KSYmU2UoYyx1LHMsbCkpcmV0dXJuITA7dmFyIHMsbCxjLHUsZixoLHAsZDtyZXR1cm4hMX1mdW5jdGlvbiBMZSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKCFBZSh0W3JdLGUpKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGgtMTsrK24paWYoRWUodFtuXSx0W24rMV0sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQ2UodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihMZSh0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFBlKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9W10sbz0wO288dFtpXS5sZW5ndGg7bysrKXt2YXIgcz1UZSh0W2ldW29dLHIpO19lKGUscyksYS5wdXNoKHMpfW4ucHVzaChhKX1yZXR1cm4gbn1mdW5jdGlvbiBJZSh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9UGUodFtpXSxlLHIpO24ucHVzaChhKX1yZXR1cm4gbn1mdW5jdGlvbiBPZSh0LGUscixuKXtpZih0WzBdPHJbMF18fHRbMF0+clsyXSl7dmFyIGk9LjUqbixhPXRbMF0tclswXT5pPy1uOnJbMF0tdFswXT5pP246MDswPT09YSYmKGE9dFswXS1yWzJdPmk/LW46clsyXS10WzBdPmk/bjowKSx0WzBdKz1hfV9lKGUsdCl9ZnVuY3Rpb24gemUodCxlLHIsbil7Zm9yKHZhciBpPTgxOTIqTWF0aC5wb3coMixuLnopLGE9WzgxOTIqbi54LDgxOTIqbi55XSxvPVtdLHM9MCxsPXQ7czxsLmxlbmd0aDtzKz0xKWZvcih2YXIgYz0wLHU9bFtzXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD1bZi54K2FbMF0sZi55K2FbMV1dO09lKGgsZSxyLGkpLG8ucHVzaChoKX1yZXR1cm4gb31mdW5jdGlvbiBEZSh0LGUscixuKXtmb3IodmFyIGksYT04MTkyKk1hdGgucG93KDIsbi56KSxvPVs4MTkyKm4ueCw4MTkyKm4ueV0scz1bXSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7Zm9yKHZhciB1PVtdLGY9MCxoPWNbbF07ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdLGQ9W3AueCtvWzBdLHAueStvWzFdXTtfZShlLGQpLHUucHVzaChkKX1zLnB1c2godSl9aWYoZVsyXS1lWzBdPD1hLzIpeyhpPWUpWzBdPWlbMV09MS8wLGlbMl09aVszXT0tMS8wO2Zvcih2YXIgbT0wLGc9czttPGcubGVuZ3RoO20rPTEpZm9yKHZhciB2PTAseT1nW21dO3Y8eS5sZW5ndGg7dis9MSl7T2UoeVt2XSxlLHIsYSl9fXJldHVybiBzfXZhciBSZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1qdCx0aGlzLmdlb2pzb249dCx0aGlzLmdlb21ldHJpZXM9ZX07ZnVuY3Rpb24gRmUodCl7aWYodCBpbnN0YW5jZW9mIHhlKXtpZigiZ2V0Ij09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoImZlYXR1cmUtc3RhdGUiPT09dC5uYW1lKXJldHVybiExO2lmKCJoYXMiPT09dC5uYW1lJiYxPT09dC5hcmdzLmxlbmd0aClyZXR1cm4hMTtpZigicHJvcGVydGllcyI9PT10Lm5hbWV8fCJnZW9tZXRyeS10eXBlIj09PXQubmFtZXx8ImlkIj09PXQubmFtZSlyZXR1cm4hMTtpZigvXmZpbHRlci0vLnRlc3QodC5uYW1lKSlyZXR1cm4hMX1pZih0IGluc3RhbmNlb2YgUmUpcmV0dXJuITE7dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtlJiYhRmUodCkmJihlPSExKX0pKSxlfWZ1bmN0aW9uIEJlKHQpe2lmKHQgaW5zdGFuY2VvZiB4ZSYmImZlYXR1cmUtc3RhdGUiPT09dC5uYW1lKXJldHVybiExO3ZhciBlPSEwO3JldHVybiB0LmVhY2hDaGlsZCgoZnVuY3Rpb24odCl7ZSYmIUJlKHQpJiYoZT0hMSl9KSksZX1mdW5jdGlvbiBOZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiB4ZSYmZS5pbmRleE9mKHQubmFtZSk+PTApcmV0dXJuITE7dmFyIHI9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtyJiYhTmUodCxlKSYmKHI9ITEpfSkpLHJ9UmUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIid3aXRoaW4nIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7aWYob2UodFsxXSkpe3ZhciByPXRbMV07aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXIudHlwZSlmb3IodmFyIG49MDtuPHIuZmVhdHVyZXMubGVuZ3RoOysrbil7dmFyIGk9ci5mZWF0dXJlc1tuXS5nZW9tZXRyeS50eXBlO2lmKCJQb2x5Z29uIj09PWl8fCJNdWx0aVBvbHlnb24iPT09aSlyZXR1cm4gbmV3IFJlKHIsci5mZWF0dXJlc1tuXS5nZW9tZXRyeSl9ZWxzZSBpZigiRmVhdHVyZSI9PT1yLnR5cGUpe3ZhciBhPXIuZ2VvbWV0cnkudHlwZTtpZigiUG9seWdvbiI9PT1hfHwiTXVsdGlQb2x5Z29uIj09PWEpcmV0dXJuIG5ldyBSZShyLHIuZ2VvbWV0cnkpfWVsc2UgaWYoIlBvbHlnb24iPT09ci50eXBlfHwiTXVsdGlQb2x5Z29uIj09PXIudHlwZSlyZXR1cm4gbmV3IFJlKHIscil9cmV0dXJuIGUuZXJyb3IoIid3aXRoaW4nIGV4cHJlc3Npb24gcmVxdWlyZXMgdmFsaWQgZ2VvanNvbiBvYmplY3QgdGhhdCBjb250YWlucyBwb2x5Z29uIGdlb21ldHJ5IHR5cGUuIil9LFJlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZihudWxsIT10Lmdlb21ldHJ5KCkmJm51bGwhPXQuY2Fub25pY2FsSUQoKSl7aWYoIlBvaW50Ij09PXQuZ2VvbWV0cnlUeXBlKCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzEvMCwxLzAsLTEvMCwtMS8wXSxuPVsxLzAsMS8wLC0xLzAsLTEvMF0saT10LmNhbm9uaWNhbElEKCk7aWYoIlBvbHlnb24iPT09ZS50eXBlKXt2YXIgYT1QZShlLmNvb3JkaW5hdGVzLG4saSksbz16ZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF3ZShyLG4pKXJldHVybiExO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe2lmKCFBZShsW3NdLGEpKXJldHVybiExfX1pZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7dmFyIGM9SWUoZS5jb29yZGluYXRlcyxuLGkpLHU9emUodC5nZW9tZXRyeSgpLHIsbixpKTtpZighd2UocixuKSlyZXR1cm4hMTtmb3IodmFyIGY9MCxoPXU7ZjxoLmxlbmd0aDtmKz0xKXtpZighTWUoaFtmXSxjKSlyZXR1cm4hMX19cmV0dXJuITB9KHQsdGhpcy5nZW9tZXRyaWVzKTtpZigiTGluZVN0cmluZyI9PT10Lmdlb21ldHJ5VHlwZSgpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVsxLzAsMS8wLC0xLzAsLTEvMF0sbj1bMS8wLDEvMCwtMS8wLC0xLzBdLGk9dC5jYW5vbmljYWxJRCgpO2lmKCJQb2x5Z29uIj09PWUudHlwZSl7dmFyIGE9UGUoZS5jb29yZGluYXRlcyxuLGkpLG89RGUodC5nZW9tZXRyeSgpLHIsbixpKTtpZighd2UocixuKSlyZXR1cm4hMTtmb3IodmFyIHM9MCxsPW87czxsLmxlbmd0aDtzKz0xKXtpZighTGUobFtzXSxhKSlyZXR1cm4hMX19aWYoIk11bHRpUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBjPUllKGUuY29vcmRpbmF0ZXMsbixpKSx1PURlKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXdlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBmPTAsaD11O2Y8aC5sZW5ndGg7Zis9MSl7aWYoIUNlKGhbZl0sYykpcmV0dXJuITF9fXJldHVybiEwfSh0LHRoaXMuZ2VvbWV0cmllcyl9cmV0dXJuITF9LFJlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LFJlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFJlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bIndpdGhpbiIsdGhpcy5nZW9qc29uXX07dmFyIGplPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWUudHlwZSx0aGlzLm5hbWU9dCx0aGlzLmJvdW5kRXhwcmVzc2lvbj1lfTtqZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aHx8InN0cmluZyIhPXR5cGVvZiB0WzFdKXJldHVybiBlLmVycm9yKCIndmFyJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIHN0cmluZyBsaXRlcmFsIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07cmV0dXJuIGUuc2NvcGUuaGFzKHIpP25ldyBqZShyLGUuc2NvcGUuZ2V0KHIpKTplLmVycm9yKCdVbmtub3duIHZhcmlhYmxlICInK3IrJyIuIE1ha2Ugc3VyZSAiJytyKyciIGhhcyBiZWVuIGJvdW5kIGluIGFuIGVuY2xvc2luZyAibGV0IiBleHByZXNzaW9uIGJlZm9yZSB1c2luZyBpdC4nLDEpfSxqZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYm91bmRFeHByZXNzaW9uLmV2YWx1YXRlKHQpfSxqZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSxqZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxqZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJ2YXIiLHRoaXMubmFtZV19O3ZhciBVZT1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPVtdKSx2b2lkIDA9PT1uJiYobj1uZXcgUnQpLHZvaWQgMD09PWkmJihpPVtdKSx0aGlzLnJlZ2lzdHJ5PXQsdGhpcy5wYXRoPWUsdGhpcy5rZXk9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJbIit0KyJdIn0pKS5qb2luKCIiKSx0aGlzLnNjb3BlPW4sdGhpcy5lcnJvcnM9aSx0aGlzLmV4cGVjdGVkVHlwZT1yfTtmdW5jdGlvbiBWZSh0LGUpe2Zvcih2YXIgcixuLGk9dC5sZW5ndGgtMSxhPTAsbz1pLHM9MDthPD1vOylpZihyPXRbcz1NYXRoLmZsb29yKChhK28pLzIpXSxuPXRbcysxXSxyPD1lKXtpZihzPT09aXx8ZTxuKXJldHVybiBzO2E9cysxfWVsc2V7aWYoIShyPmUpKXRocm93IG5ldyB1ZSgiSW5wdXQgaXMgbm90IGEgbnVtYmVyLiIpO289cy0xfXJldHVybiAwfVVlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT17fSksZT90aGlzLmNvbmNhdChlLHIsbikuX3BhcnNlKHQsaSk6dGhpcy5fcGFyc2UodCxpKX0sVWUucHJvdG90eXBlLl9wYXJzZT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiJhc3NlcnQiPT09cj9uZXcgaGUoZSxbdF0pOiJjb2VyY2UiPT09cj9uZXcgZ2UoZSxbdF0pOnR9aWYobnVsbCE9PXQmJiJzdHJpbmciIT10eXBlb2YgdCYmImJvb2xlYW4iIT10eXBlb2YgdCYmIm51bWJlciIhPXR5cGVvZiB0fHwodD1bImxpdGVyYWwiLHRdKSxBcnJheS5pc0FycmF5KHQpKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMuZXJyb3IoJ0V4cGVjdGVkIGFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgW11dLicpO3ZhciBuPXRbMF07aWYoInN0cmluZyIhPXR5cGVvZiBuKXJldHVybiB0aGlzLmVycm9yKCJFeHByZXNzaW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgYnV0IGZvdW5kICIrdHlwZW9mIG4rJyBpbnN0ZWFkLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFsuLi5dXS4nLDApLG51bGw7dmFyIGk9dGhpcy5yZWdpc3RyeVtuXTtpZihpKXt2YXIgYT1pLnBhcnNlKHQsdGhpcyk7aWYoIWEpcmV0dXJuIG51bGw7aWYodGhpcy5leHBlY3RlZFR5cGUpe3ZhciBvPXRoaXMuZXhwZWN0ZWRUeXBlLHM9YS50eXBlO2lmKCJzdHJpbmciIT09by5raW5kJiYibnVtYmVyIiE9PW8ua2luZCYmImJvb2xlYW4iIT09by5raW5kJiYib2JqZWN0IiE9PW8ua2luZCYmImFycmF5IiE9PW8ua2luZHx8InZhbHVlIiE9PXMua2luZClpZigiY29sb3IiIT09by5raW5kJiYiZm9ybWF0dGVkIiE9PW8ua2luZCYmInJlc29sdmVkSW1hZ2UiIT09by5raW5kfHwidmFsdWUiIT09cy5raW5kJiYic3RyaW5nIiE9PXMua2luZCl7aWYodGhpcy5jaGVja1N1YnR5cGUobyxzKSlyZXR1cm4gbnVsbH1lbHNlIGE9cihhLG8sZS50eXBlQW5ub3RhdGlvbnx8ImNvZXJjZSIpO2Vsc2UgYT1yKGEsbyxlLnR5cGVBbm5vdGF0aW9ufHwiYXNzZXJ0Iil9aWYoIShhIGluc3RhbmNlb2YgY2UpJiYicmVzb2x2ZWRJbWFnZSIhPT1hLnR5cGUua2luZCYmZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgamUpcmV0dXJuIHQoZS5ib3VuZEV4cHJlc3Npb24pO2lmKGUgaW5zdGFuY2VvZiB4ZSYmImVycm9yIj09PWUubmFtZSlyZXR1cm4hMTtpZihlIGluc3RhbmNlb2YgYmUpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIFJlKXJldHVybiExO3ZhciByPWUgaW5zdGFuY2VvZiBnZXx8ZSBpbnN0YW5jZW9mIGhlLG49ITA7aWYoZS5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe249cj9uJiZ0KGUpOm4mJmUgaW5zdGFuY2VvZiBjZX0pKSwhbilyZXR1cm4hMTtyZXR1cm4gRmUoZSkmJk5lKGUsWyJ6b29tIiwiaGVhdG1hcC1kZW5zaXR5IiwibGluZS1wcm9ncmVzcyIsImFjY3VtdWxhdGVkIiwiaXMtc3VwcG9ydGVkLXNjcmlwdCJdKX0oYSkpe3ZhciBsPW5ldyB5ZTt0cnl7YT1uZXcgY2UoYS50eXBlLGEuZXZhbHVhdGUobCkpfWNhdGNoKHQpe3JldHVybiB0aGlzLmVycm9yKHQubWVzc2FnZSksbnVsbH19cmV0dXJuIGF9cmV0dXJuIHRoaXMuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiAiJytuKyciLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFsuLi5dXS4nLDApfXJldHVybiB2b2lkIDA9PT10P3RoaXMuZXJyb3IoIid1bmRlZmluZWQnIHZhbHVlIGludmFsaWQuIFVzZSBudWxsIGluc3RlYWQuIik6Im9iamVjdCI9PXR5cGVvZiB0P3RoaXMuZXJyb3IoJ0JhcmUgb2JqZWN0cyBpbnZhbGlkLiBVc2UgWyJsaXRlcmFsIiwgey4uLn1dIGluc3RlYWQuJyk6dGhpcy5lcnJvcigiRXhwZWN0ZWQgYW4gYXJyYXksIGJ1dCBmb3VuZCAiK3R5cGVvZiB0KyIgaW5zdGVhZC4iKX0sVWUucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih0LGUscil7dmFyIG49Im51bWJlciI9PXR5cGVvZiB0P3RoaXMucGF0aC5jb25jYXQodCk6dGhpcy5wYXRoLGk9cj90aGlzLnNjb3BlLmNvbmNhdChyKTp0aGlzLnNjb3BlO3JldHVybiBuZXcgVWUodGhpcy5yZWdpc3RyeSxuLGV8fG51bGwsaSx0aGlzLmVycm9ycyl9LFVlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO3ZhciBuPSIiK3RoaXMua2V5K2UubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KSkuam9pbigiIik7dGhpcy5lcnJvcnMucHVzaChuZXcgRHQobix0KSl9LFVlLnByb3RvdHlwZS5jaGVja1N1YnR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1KdCh0LGUpO3JldHVybiByJiZ0aGlzLmVycm9yKHIpLHJ9O3ZhciBIZT1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIG49MCxpPXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YVswXSxzPWFbMV07dGhpcy5sYWJlbHMucHVzaChvKSx0aGlzLm91dHB1dHMucHVzaChzKX19O2Z1bmN0aW9uIHFlKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9SGUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsQnQpO2lmKCFyKXJldHVybiBudWxsO3ZhciBuPVtdLGk9bnVsbDtlLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihpPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGE9MTthPHQubGVuZ3RoO2ErPTIpe3ZhciBvPTE9PT1hPy0xLzA6dFthXSxzPXRbYSsxXSxsPWEsYz1hKzE7aWYoIm51bWJlciIhPXR5cGVvZiBvKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJzdGVwIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLGwpO2lmKG4ubGVuZ3RoJiZuW24ubGVuZ3RoLTFdWzBdPj1vKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJzdGVwIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLGwpO3ZhciB1PWUucGFyc2UocyxjLGkpO2lmKCF1KXJldHVybiBudWxsO2k9aXx8dS50eXBlLG4ucHVzaChbbyx1XSl9cmV0dXJuIG5ldyBIZShpLHIsbil9LEhlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBpPWUubGVuZ3RoO3JldHVybiBuPj1lW2ktMV0/cltpLTFdLmV2YWx1YXRlKHQpOnJbVmUoZSxuKV0uZXZhbHVhdGUodCl9LEhlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KTtmb3IodmFyIGU9MCxyPXRoaXMub3V0cHV0cztlPHIubGVuZ3RoO2UrPTEpe3QocltlXSl9fSxIZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0sSGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bInN0ZXAiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLGU9MDtlPHRoaXMubGFiZWxzLmxlbmd0aDtlKyspZT4wJiZ0LnB1c2godGhpcy5sYWJlbHNbZV0pLHQucHVzaCh0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIgR2U9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsbnVtYmVyOnFlLGNvbG9yOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IHRlKHFlKHQucixlLnIscikscWUodC5nLGUuZyxyKSxxZSh0LmIsZS5iLHIpLHFlKHQuYSxlLmEscikpfSxhcnJheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LG4pe3JldHVybiBxZSh0LGVbbl0scil9KSl9fSksWWU9Ni8yOSxXZT0zKlllKlllLFhlPU1hdGguUEkvMTgwLFplPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIEplKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvV2UrNC8yOX1mdW5jdGlvbiBLZSh0KXtyZXR1cm4gdD5ZZT90KnQqdDpXZSoodC00LzI5KX1mdW5jdGlvbiBRZSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uICRlKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHRyKHQpe3ZhciBlPSRlKHQucikscj0kZSh0LmcpLG49JGUodC5iKSxpPUplKCguNDEyNDU2NCplKy4zNTc1NzYxKnIrLjE4MDQzNzUqbikvLjk1MDQ3KSxhPUplKCguMjEyNjcyOSplKy43MTUxNTIyKnIrLjA3MjE3NSpuKS8xKTtyZXR1cm57bDoxMTYqYS0xNixhOjUwMCooaS1hKSxiOjIwMCooYS1KZSgoLjAxOTMzMzkqZSsuMTE5MTkyKnIrLjk1MDMwNDEqbikvMS4wODg4MykpLGFscGhhOnQuYX19ZnVuY3Rpb24gZXIodCl7dmFyIGU9KHQubCsxNikvMTE2LHI9aXNOYU4odC5hKT9lOmUrdC5hLzUwMCxuPWlzTmFOKHQuYik/ZTplLXQuYi8yMDA7cmV0dXJuIGU9MSpLZShlKSxyPS45NTA0NypLZShyKSxuPTEuMDg4ODMqS2UobiksbmV3IHRlKFFlKDMuMjQwNDU0MipyLTEuNTM3MTM4NSplLS40OTg1MzE0Km4pLFFlKC0uOTY5MjY2KnIrMS44NzYwMTA4KmUrLjA0MTU1NipuKSxRZSguMDU1NjQzNCpyLS4yMDQwMjU5KmUrMS4wNTcyMjUyKm4pLHQuYWxwaGEpfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj1lLXQ7cmV0dXJuIHQrcioobj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKX12YXIgbnI9e2ZvcndhcmQ6dHIscmV2ZXJzZTplcixpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2w6cWUodC5sLGUubCxyKSxhOnFlKHQuYSxlLmEsciksYjpxZSh0LmIsZS5iLHIpLGFscGhhOnFlKHQuYWxwaGEsZS5hbHBoYSxyKX19fSxpcj17Zm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgZT10cih0KSxyPWUubCxuPWUuYSxpPWUuYixhPU1hdGguYXRhbjIoaSxuKSpaZTtyZXR1cm57aDphPDA/YSszNjA6YSxjOk1hdGguc3FydChuKm4raSppKSxsOnIsYWxwaGE6dC5hfX0scmV2ZXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmgqWGUscj10LmM7cmV0dXJuIGVyKHtsOnQubCxhOk1hdGguY29zKGUpKnIsYjpNYXRoLnNpbihlKSpyLGFscGhhOnQuYWxwaGF9KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntoOnJyKHQuaCxlLmgsciksYzpxZSh0LmMsZS5jLHIpLGw6cWUodC5sLGUubCxyKSxhbHBoYTpxZSh0LmFscGhhLGUuYWxwaGEscil9fX0sYXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsbGFiOm5yLGhjbDppcn0pLG9yPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPXQsdGhpcy5vcGVyYXRvcj1lLHRoaXMuaW50ZXJwb2xhdGlvbj1yLHRoaXMuaW5wdXQ9bix0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBhPTAsbz1pO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXNbMF0sYz1zWzFdO3RoaXMubGFiZWxzLnB1c2gobCksdGhpcy5vdXRwdXRzLnB1c2goYyl9fTtmdW5jdGlvbiBzcih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfW9yLmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9MDtpZigiZXhwb25lbnRpYWwiPT09dC5uYW1lKWE9c3IoZSx0LmJhc2UsbixpKTtlbHNlIGlmKCJsaW5lYXIiPT09dC5uYW1lKWE9c3IoZSwxLG4saSk7ZWxzZSBpZigiY3ViaWMtYmV6aWVyIj09PXQubmFtZSl7dmFyIG89dC5jb250cm9sUG9pbnRzO2E9bmV3IHIob1swXSxvWzFdLG9bMl0sb1szXSkuc29sdmUoc3IoZSwxLG4saSkpfXJldHVybiBhfSxvci5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPXQuc2xpY2UoMyk7aWYoIUFycmF5LmlzQXJyYXkobil8fDA9PT1uLmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uIiwxKTtpZigibGluZWFyIj09PW5bMF0pbj17bmFtZToibGluZWFyIn07ZWxzZSBpZigiZXhwb25lbnRpYWwiPT09blswXSl7dmFyIG89blsxXTtpZigibnVtYmVyIiE9dHlwZW9mIG8pcmV0dXJuIGUuZXJyb3IoIkV4cG9uZW50aWFsIGludGVycG9sYXRpb24gcmVxdWlyZXMgYSBudW1lcmljIGJhc2UuIiwxLDEpO249e25hbWU6ImV4cG9uZW50aWFsIixiYXNlOm99fWVsc2V7aWYoImN1YmljLWJlemllciIhPT1uWzBdKXJldHVybiBlLmVycm9yKCJVbmtub3duIGludGVycG9sYXRpb24gdHlwZSAiK1N0cmluZyhuWzBdKSwxLDApO3ZhciBzPW4uc2xpY2UoMSk7aWYoNCE9PXMubGVuZ3RofHxzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHx0PjF9KSkpcmV0dXJuIGUuZXJyb3IoIkN1YmljIGJlemllciBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGZvdXIgbnVtZXJpYyBhcmd1bWVudHMgd2l0aCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLiIsMSk7bj17bmFtZToiY3ViaWMtYmV6aWVyIixjb250cm9sUG9pbnRzOnN9fWlmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTtpZighKGk9ZS5wYXJzZShpLDIsQnQpKSlyZXR1cm4gbnVsbDt2YXIgbD1bXSxjPW51bGw7ImludGVycG9sYXRlLWhjbCI9PT1yfHwiaW50ZXJwb2xhdGUtbGFiIj09PXI/Yz1VdDplLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihjPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrPTIpe3ZhciBmPWFbdV0saD1hW3UrMV0scD11KzMsZD11KzQ7aWYoIm51bWJlciIhPXR5cGVvZiBmKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxwKTtpZihsLmxlbmd0aCYmbFtsLmxlbmd0aC0xXVswXT49ZilyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicscCk7dmFyIG09ZS5wYXJzZShoLGQsYyk7aWYoIW0pcmV0dXJuIG51bGw7Yz1jfHxtLnR5cGUsbC5wdXNoKFtmLG1dKX1yZXR1cm4ibnVtYmVyIj09PWMua2luZHx8ImNvbG9yIj09PWMua2luZHx8ImFycmF5Ij09PWMua2luZCYmIm51bWJlciI9PT1jLml0ZW1UeXBlLmtpbmQmJiJudW1iZXIiPT10eXBlb2YgYy5OP25ldyBvcihjLHIsbixpLGwpOmUuZXJyb3IoIlR5cGUgIitYdChjKSsiIGlzIG5vdCBpbnRlcnBvbGF0YWJsZS4iKX0sb3IucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7aWYobj49ZVtpLTFdKXJldHVybiByW2ktMV0uZXZhbHVhdGUodCk7dmFyIGE9VmUoZSxuKSxvPWVbYV0scz1lW2ErMV0sbD1vci5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvbixuLG8scyksYz1yW2FdLmV2YWx1YXRlKHQpLHU9clthKzFdLmV2YWx1YXRlKHQpO3JldHVybiJpbnRlcnBvbGF0ZSI9PT10aGlzLm9wZXJhdG9yP0dlW3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldKGMsdSxsKToiaW50ZXJwb2xhdGUtaGNsIj09PXRoaXMub3BlcmF0b3I/aXIucmV2ZXJzZShpci5pbnRlcnBvbGF0ZShpci5mb3J3YXJkKGMpLGlyLmZvcndhcmQodSksbCkpOm5yLnJldmVyc2UobnIuaW50ZXJwb2xhdGUobnIuZm9yd2FyZChjKSxuci5mb3J3YXJkKHUpLGwpKX0sb3IucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl7dChyW2VdKX19LG9yLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxvci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ7dD0ibGluZWFyIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lP1sibGluZWFyIl06ImV4cG9uZW50aWFsIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lPzE9PT10aGlzLmludGVycG9sYXRpb24uYmFzZT9bImxpbmVhciJdOlsiZXhwb25lbnRpYWwiLHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTpbImN1YmljLWJlemllciJdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyk7Zm9yKHZhciBlPVt0aGlzLm9wZXJhdG9yLHQsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0scj0wO3I8dGhpcy5sYWJlbHMubGVuZ3RoO3IrKyllLnB1c2godGhpcy5sYWJlbHNbcl0sdGhpcy5vdXRwdXRzW3JdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gZX07dmFyIGxyPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2xyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPW51bGwsbj1lLmV4cGVjdGVkVHlwZTtuJiYidmFsdWUiIT09bi5raW5kJiYocj1uKTtmb3IodmFyIGk9W10sYT0wLG89dC5zbGljZSgxKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1lLnBhcnNlKHMsMStpLmxlbmd0aCxyLHZvaWQgMCx7dHlwZUFubm90YXRpb246Im9taXQifSk7aWYoIWwpcmV0dXJuIG51bGw7cj1yfHxsLnR5cGUsaS5wdXNoKGwpfXZhciBjPW4mJmkuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIEp0KG4sdC50eXBlKX0pKTtyZXR1cm4gbmV3IGxyKGM/SHQ6cixpKX0sbHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPW51bGwsbj0wLGk9MCxhPXRoaXMuYXJncztpPGEubGVuZ3RoO2krPTEpe2lmKG4rKywocj1hW2ldLmV2YWx1YXRlKHQpKSYmciBpbnN0YW5jZW9mIGllJiYhci5hdmFpbGFibGUmJihlfHwoZT1yLm5hbWUpLHI9bnVsbCxuPT09dGhpcy5hcmdzLmxlbmd0aCYmKHI9ZSkpLG51bGwhPT1yKWJyZWFrfXJldHVybiByfSxsci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxsci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3MuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0sbHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY29hbGVzY2UiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgY3I9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMuYmluZGluZ3M9W10uY29uY2F0KHQpLHRoaXMucmVzdWx0PWV9O2NyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUodCl9LGNyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl7dChyW2VdWzFdKX10KHRoaXMucmVzdWx0KX0sY3IucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTtmb3IodmFyIHI9W10sbj0xO248dC5sZW5ndGgtMTtuKz0yKXt2YXIgaT10W25dO2lmKCJzdHJpbmciIT10eXBlb2YgaSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgIit0eXBlb2YgaSsiIGluc3RlYWQuIixuKTtpZigvW15hLXpBLVowLTlfXS8udGVzdChpKSlyZXR1cm4gZS5lcnJvcigiVmFyaWFibGUgbmFtZXMgbXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgJ18nLiIsbik7dmFyIGE9ZS5wYXJzZSh0W24rMV0sbisxKTtpZighYSlyZXR1cm4gbnVsbDtyLnB1c2goW2ksYV0pfXZhciBvPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLGUuZXhwZWN0ZWRUeXBlLHIpO3JldHVybiBvP25ldyBjcihyLG8pOm51bGx9LGNyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0Lm91dHB1dERlZmluZWQoKX0sY3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bImxldCJdLGU9MCxyPXRoaXMuYmluZGluZ3M7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07dC5wdXNoKGksYS5zZXJpYWxpemUoKSl9cmV0dXJuIHQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSksdH07dmFyIHVyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmluZGV4PWUsdGhpcy5pbnB1dD1yfTt1ci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsQnQpLG49ZS5wYXJzZSh0WzJdLDIsV3QoZS5leHBlY3RlZFR5cGV8fEh0KSk7aWYoIXJ8fCFuKXJldHVybiBudWxsO3ZhciBpPW4udHlwZTtyZXR1cm4gbmV3IHVyKGkuaXRlbVR5cGUscixuKX0sdXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5kZXguZXZhbHVhdGUodCkscj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKGU8MCl0aHJvdyBuZXcgdWUoIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICIrZSsiIDwgMC4iKTtpZihlPj1yLmxlbmd0aCl0aHJvdyBuZXcgdWUoIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICIrZSsiID4gIisoci5sZW5ndGgtMSkrIi4iKTtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgdWUoIkFycmF5IGluZGV4IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGZvdW5kICIrZSsiIGluc3RlYWQuIik7cmV0dXJuIHJbZV19LHVyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmluZGV4KSx0KHRoaXMuaW5wdXQpfSx1ci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSx1ci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJhdCIsdGhpcy5pbmRleC5zZXJpYWxpemUoKSx0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXX07dmFyIGZyPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWp0LHRoaXMubmVlZGxlPXQsdGhpcy5oYXlzdGFjaz1lfTtmci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsSHQpLG49ZS5wYXJzZSh0WzJdLDIsSHQpO3JldHVybiByJiZuP0t0KHIudHlwZSxbanQsTnQsQnQsRnQsSHRdKT9uZXcgZnIocixuKTplLmVycm9yKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK1h0KHIudHlwZSkrIiBpbnN0ZWFkIik6bnVsbH0sZnIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubmVlZGxlLmV2YWx1YXRlKHQpLHI9dGhpcy5oYXlzdGFjay5ldmFsdWF0ZSh0KTtpZighcilyZXR1cm4hMTtpZighUXQoZSxbImJvb2xlYW4iLCJzdHJpbmciLCJudW1iZXIiLCJudWxsIl0pKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgIitYdChzZShlKSkrIiBpbnN0ZWFkLiIpO2lmKCFRdChyLFsic3RyaW5nIiwiYXJyYXkiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBzZWNvbmQgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAiK1h0KHNlKHIpKSsiIGluc3RlYWQuIik7cmV0dXJuIHIuaW5kZXhPZihlKT49MH0sZnIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubmVlZGxlKSx0KHRoaXMuaGF5c3RhY2spfSxmci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxmci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJpbiIsdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKV19O3ZhciBocj1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPUJ0LHRoaXMubmVlZGxlPXQsdGhpcy5oYXlzdGFjaz1lLHRoaXMuZnJvbUluZGV4PXJ9O2hyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8PTJ8fHQubGVuZ3RoPj01KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAzIG9yIDQgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLEh0KSxuPWUucGFyc2UodFsyXSwyLEh0KTtpZighcnx8IW4pcmV0dXJuIG51bGw7aWYoIUt0KHIudHlwZSxbanQsTnQsQnQsRnQsSHRdKSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgIitYdChyLnR5cGUpKyIgaW5zdGVhZCIpO2lmKDQ9PT10Lmxlbmd0aCl7dmFyIGk9ZS5wYXJzZSh0WzNdLDMsQnQpO3JldHVybiBpP25ldyBocihyLG4saSk6bnVsbH1yZXR1cm4gbmV3IGhyKHIsbil9LGhyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm5lZWRsZS5ldmFsdWF0ZSh0KSxyPXRoaXMuaGF5c3RhY2suZXZhbHVhdGUodCk7aWYoIVF0KGUsWyJib29sZWFuIiwic3RyaW5nIiwibnVtYmVyIiwibnVsbCJdKSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrWHQoc2UoZSkpKyIgaW5zdGVhZC4iKTtpZighUXQocixbInN0cmluZyIsImFycmF5Il0pKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitYdChzZShyKSkrIiBpbnN0ZWFkLiIpO2lmKHRoaXMuZnJvbUluZGV4KXt2YXIgbj10aGlzLmZyb21JbmRleC5ldmFsdWF0ZSh0KTtyZXR1cm4gci5pbmRleE9mKGUsbil9cmV0dXJuIHIuaW5kZXhPZihlKX0saHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubmVlZGxlKSx0KHRoaXMuaGF5c3RhY2spLHRoaXMuZnJvbUluZGV4JiZ0KHRoaXMuZnJvbUluZGV4KX0saHIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuZnJvbUluZGV4JiZ2b2lkIDAhPT10aGlzLmZyb21JbmRleCl7dmFyIHQ9dGhpcy5mcm9tSW5kZXguc2VyaWFsaXplKCk7cmV0dXJuWyJpbmRleC1vZiIsdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKSx0XX1yZXR1cm5bImluZGV4LW9mIix0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSx0aGlzLmhheXN0YWNrLnNlcmlhbGl6ZSgpXX07dmFyIHByPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmlucHV0VHlwZT10LHRoaXMudHlwZT1lLHRoaXMuaW5wdXQ9cix0aGlzLmNhc2VzPW4sdGhpcy5vdXRwdXRzPWksdGhpcy5vdGhlcndpc2U9YX07cHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw1KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZih0Lmxlbmd0aCUyIT0xKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7dmFyIHIsbjtlLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihuPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGk9e30sYT1bXSxvPTI7bzx0Lmxlbmd0aC0xO28rPTIpe3ZhciBzPXRbb10sbD10W28rMV07QXJyYXkuaXNBcnJheShzKXx8KHM9W3NdKTt2YXIgYz1lLmNvbmNhdChvKTtpZigwPT09cy5sZW5ndGgpcmV0dXJuIGMuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBicmFuY2ggbGFiZWwuIik7Zm9yKHZhciB1PTAsZj1zO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtpZigibnVtYmVyIiE9dHlwZW9mIGgmJiJzdHJpbmciIT10eXBlb2YgaClyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIG51bWJlcnMgb3Igc3RyaW5ncy4iKTtpZigibnVtYmVyIj09dHlwZW9mIGgmJk1hdGguYWJzKGgpPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlcnMgbm8gbGFyZ2VyIHRoYW4gIitOdW1iZXIuTUFYX1NBRkVfSU5URUdFUisiLiIpO2lmKCJudW1iZXIiPT10eXBlb2YgaCYmTWF0aC5mbG9vcihoKSE9PWgpcmV0dXJuIGMuZXJyb3IoIk51bWVyaWMgYnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXIgdmFsdWVzLiIpO2lmKHIpe2lmKGMuY2hlY2tTdWJ0eXBlKHIsc2UoaCkpKXJldHVybiBudWxsfWVsc2Ugcj1zZShoKTtpZih2b2lkIDAhPT1pW1N0cmluZyhoKV0pcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSB1bmlxdWUuIik7aVtTdHJpbmcoaCldPWEubGVuZ3RofXZhciBwPWUucGFyc2UobCxvLG4pO2lmKCFwKXJldHVybiBudWxsO249bnx8cC50eXBlLGEucHVzaChwKX12YXIgZD1lLnBhcnNlKHRbMV0sMSxIdCk7aWYoIWQpcmV0dXJuIG51bGw7dmFyIG09ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsbik7cmV0dXJuIG0/InZhbHVlIiE9PWQudHlwZS5raW5kJiZlLmNvbmNhdCgxKS5jaGVja1N1YnR5cGUocixkLnR5cGUpP251bGw6bmV3IHByKHIsbixkLGksYSxtKTpudWxsfSxwci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtyZXR1cm4oc2UoZSk9PT10aGlzLmlucHV0VHlwZSYmdGhpcy5vdXRwdXRzW3RoaXMuY2FzZXNbZV1dfHx0aGlzLm90aGVyd2lzZSkuZXZhbHVhdGUodCl9LHByLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KSx0aGlzLm91dHB1dHMuZm9yRWFjaCh0KSx0KHRoaXMub3RoZXJ3aXNlKX0scHIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRwdXRzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSkmJnRoaXMub3RoZXJ3aXNlLm91dHB1dERlZmluZWQoKX0scHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9WyJtYXRjaCIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0scj1bXSxuPXt9LGk9MCxhPU9iamVjdC5rZXlzKHRoaXMuY2FzZXMpLnNvcnQoKTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dm9pZCAwPT09KGY9blt0aGlzLmNhc2VzW29dXSk/KG5bdGhpcy5jYXNlc1tvXV09ci5sZW5ndGgsci5wdXNoKFt0aGlzLmNhc2VzW29dLFtvXV0pKTpyW2ZdWzFdLnB1c2gobyl9Zm9yKHZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT09dC5pbnB1dFR5cGUua2luZD9OdW1iZXIoZSk6ZX0sbD0wLGM9cjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0sZj11WzBdLGg9dVsxXTsxPT09aC5sZW5ndGg/ZS5wdXNoKHMoaFswXSkpOmUucHVzaChoLm1hcChzKSksZS5wdXNoKHRoaXMub3V0cHV0c1tvdXRwdXRJbmRleCQxXS5zZXJpYWxpemUoKSl9cmV0dXJuIGUucHVzaCh0aGlzLm90aGVyd2lzZS5zZXJpYWxpemUoKSksZX07dmFyIGRyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmJyYW5jaGVzPWUsdGhpcy5vdGhlcndpc2U9cn07ZHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZih0Lmxlbmd0aCUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBvZGQgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTt2YXIgcjtlLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihyPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIG49W10saT0xO2k8dC5sZW5ndGgtMTtpKz0yKXt2YXIgYT1lLnBhcnNlKHRbaV0saSxqdCk7aWYoIWEpcmV0dXJuIG51bGw7dmFyIG89ZS5wYXJzZSh0W2krMV0saSsxLHIpO2lmKCFvKXJldHVybiBudWxsO24ucHVzaChbYSxvXSkscj1yfHxvLnR5cGV9dmFyIHM9ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEscik7cmV0dXJuIHM/bmV3IGRyKHIsbixzKTpudWxsfSxkci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJyYW5jaGVzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO2lmKGkuZXZhbHVhdGUodCkpcmV0dXJuIGEuZXZhbHVhdGUodCl9cmV0dXJuIHRoaXMub3RoZXJ3aXNlLmV2YWx1YXRlKHQpfSxkci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTt0KGkpLHQoYSl9dCh0aGlzLm90aGVyd2lzZSl9LGRyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnJhbmNoZXMuZXZlcnkoKGZ1bmN0aW9uKHQpe3RbMF07cmV0dXJuIHRbMV0ub3V0cHV0RGVmaW5lZCgpfSkpJiZ0aGlzLm90aGVyd2lzZS5vdXRwdXREZWZpbmVkKCl9LGRyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bImNhc2UiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgbXI9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lLHRoaXMuYmVnaW5JbmRleD1yLHRoaXMuZW5kSW5kZXg9bn07ZnVuY3Rpb24gZ3IodCxlKXtyZXR1cm4iPT0iPT09dHx8IiE9Ij09PXQ/ImJvb2xlYW4iPT09ZS5raW5kfHwic3RyaW5nIj09PWUua2luZHx8Im51bWJlciI9PT1lLmtpbmR8fCJudWxsIj09PWUua2luZHx8InZhbHVlIj09PWUua2luZDoic3RyaW5nIj09PWUua2luZHx8Im51bWJlciI9PT1lLmtpbmR8fCJ2YWx1ZSI9PT1lLmtpbmR9ZnVuY3Rpb24gdnIodCxlLHIsbil7cmV0dXJuIDA9PT1uLmNvbXBhcmUoZSxyKX1mdW5jdGlvbiB5cih0LGUscil7dmFyIG49Ij09IiE9PXQmJiIhPSIhPT10O3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGkodCxlLHIpe3RoaXMudHlwZT1qdCx0aGlzLmxocz10LHRoaXMucmhzPWUsdGhpcy5jb2xsYXRvcj1yLHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50PSJ2YWx1ZSI9PT10LnR5cGUua2luZHx8InZhbHVlIj09PWUudHlwZS5raW5kfXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoJiY0IT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIHR3byBvciB0aHJlZSBhcmd1bWVudHMuIik7dmFyIHI9dFswXSxhPWUucGFyc2UodFsxXSwxLEh0KTtpZighYSlyZXR1cm4gbnVsbDtpZighZ3IocixhLnR5cGUpKXJldHVybiBlLmNvbmNhdCgxKS5lcnJvcignIicrcisiXCIgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJyIrWHQoYS50eXBlKSsiJy4iKTt2YXIgbz1lLnBhcnNlKHRbMl0sMixIdCk7aWYoIW8pcmV0dXJuIG51bGw7aWYoIWdyKHIsby50eXBlKSlyZXR1cm4gZS5jb25jYXQoMikuZXJyb3IoJyInK3IrIlwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICciK1h0KG8udHlwZSkrIicuIik7aWYoYS50eXBlLmtpbmQhPT1vLnR5cGUua2luZCYmInZhbHVlIiE9PWEudHlwZS5raW5kJiYidmFsdWUiIT09by50eXBlLmtpbmQpcmV0dXJuIGUuZXJyb3IoIkNhbm5vdCBjb21wYXJlIHR5cGVzICciK1h0KGEudHlwZSkrIicgYW5kICciK1h0KG8udHlwZSkrIicuIik7biYmKCJ2YWx1ZSI9PT1hLnR5cGUua2luZCYmInZhbHVlIiE9PW8udHlwZS5raW5kP2E9bmV3IGhlKG8udHlwZSxbYV0pOiJ2YWx1ZSIhPT1hLnR5cGUua2luZCYmInZhbHVlIj09PW8udHlwZS5raW5kJiYobz1uZXcgaGUoYS50eXBlLFtvXSkpKTt2YXIgcz1udWxsO2lmKDQ9PT10Lmxlbmd0aCl7aWYoInN0cmluZyIhPT1hLnR5cGUua2luZCYmInN0cmluZyIhPT1vLnR5cGUua2luZCYmInZhbHVlIiE9PWEudHlwZS5raW5kJiYidmFsdWUiIT09by50eXBlLmtpbmQpcmV0dXJuIGUuZXJyb3IoIkNhbm5vdCB1c2UgY29sbGF0b3IgdG8gY29tcGFyZSBub24tc3RyaW5nIHR5cGVzLiIpO2lmKCEocz1lLnBhcnNlKHRbM10sMyxxdCkpKXJldHVybiBudWxsfXJldHVybiBuZXcgaShhLG8scyl9LGkucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMubGhzLmV2YWx1YXRlKGkpLG89dGhpcy5yaHMuZXZhbHVhdGUoaSk7aWYobiYmdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpe3ZhciBzPXNlKGEpLGw9c2Uobyk7aWYocy5raW5kIT09bC5raW5kfHwic3RyaW5nIiE9PXMua2luZCYmIm51bWJlciIhPT1zLmtpbmQpdGhyb3cgbmV3IHVlKCdFeHBlY3RlZCBhcmd1bWVudHMgZm9yICInK3QrJyIgdG8gYmUgKHN0cmluZywgc3RyaW5nKSBvciAobnVtYmVyLCBudW1iZXIpLCBidXQgZm91bmQgKCcrcy5raW5kKyIsICIrbC5raW5kKyIpIGluc3RlYWQuIil9aWYodGhpcy5jb2xsYXRvciYmIW4mJnRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KXt2YXIgYz1zZShhKSx1PXNlKG8pO2lmKCJzdHJpbmciIT09Yy5raW5kfHwic3RyaW5nIiE9PXUua2luZClyZXR1cm4gZShpLGEsbyl9cmV0dXJuIHRoaXMuY29sbGF0b3I/cihpLGEsbyx0aGlzLmNvbGxhdG9yLmV2YWx1YXRlKGkpKTplKGksYSxvKX0saS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5saHMpLHQodGhpcy5yaHMpLHRoaXMuY29sbGF0b3ImJnQodGhpcy5jb2xsYXRvcil9LGkucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9W3RdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24odCl7ZS5wdXNoKHQuc2VyaWFsaXplKCkpfSkpLGV9LGl9KCl9bXIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw9Mnx8dC5sZW5ndGg+PTUpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDMgb3IgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsSHQpLG49ZS5wYXJzZSh0WzJdLDIsQnQpO2lmKCFyfHwhbilyZXR1cm4gbnVsbDtpZighS3Qoci50eXBlLFtXdChIdCksTnQsSHRdKSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAiK1h0KHIudHlwZSkrIiBpbnN0ZWFkIik7aWYoND09PXQubGVuZ3RoKXt2YXIgaT1lLnBhcnNlKHRbM10sMyxCdCk7cmV0dXJuIGk/bmV3IG1yKHIudHlwZSxyLG4saSk6bnVsbH1yZXR1cm4gbmV3IG1yKHIudHlwZSxyLG4pfSxtci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KSxyPXRoaXMuYmVnaW5JbmRleC5ldmFsdWF0ZSh0KTtpZighUXQoZSxbInN0cmluZyIsImFycmF5Il0pKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAiK1h0KHNlKGUpKSsiIGluc3RlYWQuIik7aWYodGhpcy5lbmRJbmRleCl7dmFyIG49dGhpcy5lbmRJbmRleC5ldmFsdWF0ZSh0KTtyZXR1cm4gZS5zbGljZShyLG4pfXJldHVybiBlLnNsaWNlKHIpfSxtci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCksdCh0aGlzLmJlZ2luSW5kZXgpLHRoaXMuZW5kSW5kZXgmJnQodGhpcy5lbmRJbmRleCl9LG1yLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG1yLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmVuZEluZGV4JiZ2b2lkIDAhPT10aGlzLmVuZEluZGV4KXt2YXIgdD10aGlzLmVuZEluZGV4LnNlcmlhbGl6ZSgpO3JldHVyblsic2xpY2UiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCksdGhpcy5iZWdpbkluZGV4LnNlcmlhbGl6ZSgpLHRdfXJldHVyblsic2xpY2UiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCksdGhpcy5iZWdpbkluZGV4LnNlcmlhbGl6ZSgpXX07dmFyIHhyPXlyKCI9PSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT09PXJ9KSx2ciksYnI9eXIoIiE9IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlIT09cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4hdnIoMCxlLHIsbil9KSksX3I9eXIoIjwiLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik8MH0pKSx3cj15cigiPiIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT5yfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmNvbXBhcmUoZSxyKT4wfSkpLFRyPXlyKCI8PSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZTw9cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik8PTB9KSksa3I9eXIoIj49IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPj1yfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmNvbXBhcmUoZSxyKT49MH0pKSxBcj1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudHlwZT1OdCx0aGlzLm51bWJlcj10LHRoaXMubG9jYWxlPWUsdGhpcy5jdXJyZW5jeT1yLHRoaXMubWluRnJhY3Rpb25EaWdpdHM9bix0aGlzLm1heEZyYWN0aW9uRGlnaXRzPWl9O0FyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gYXJndW1lbnRzLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLEJ0KTtpZighcilyZXR1cm4gbnVsbDt2YXIgbj10WzJdO2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSlyZXR1cm4gZS5lcnJvcigiTnVtYmVyRm9ybWF0IG9wdGlvbnMgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuIik7dmFyIGk9bnVsbDtpZihuLmxvY2FsZSYmIShpPWUucGFyc2Uobi5sb2NhbGUsMSxOdCkpKXJldHVybiBudWxsO3ZhciBhPW51bGw7aWYobi5jdXJyZW5jeSYmIShhPWUucGFyc2Uobi5jdXJyZW5jeSwxLE50KSkpcmV0dXJuIG51bGw7dmFyIG89bnVsbDtpZihuWyJtaW4tZnJhY3Rpb24tZGlnaXRzIl0mJiEobz1lLnBhcnNlKG5bIm1pbi1mcmFjdGlvbi1kaWdpdHMiXSwxLEJ0KSkpcmV0dXJuIG51bGw7dmFyIHM9bnVsbDtyZXR1cm4gblsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdJiYhKHM9ZS5wYXJzZShuWyJtYXgtZnJhY3Rpb24tZGlnaXRzIl0sMSxCdCkpP251bGw6bmV3IEFyKHIsaSxhLG8scyl9LEFyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlP3RoaXMubG9jYWxlLmV2YWx1YXRlKHQpOltdLHtzdHlsZTp0aGlzLmN1cnJlbmN5PyJjdXJyZW5jeSI6ImRlY2ltYWwiLGN1cnJlbmN5OnRoaXMuY3VycmVuY3k/dGhpcy5jdXJyZW5jeS5ldmFsdWF0ZSh0KTp2b2lkIDAsbWluaW11bUZyYWN0aW9uRGlnaXRzOnRoaXMubWluRnJhY3Rpb25EaWdpdHM/dGhpcy5taW5GcmFjdGlvbkRpZ2l0cy5ldmFsdWF0ZSh0KTp2b2lkIDAsbWF4aW11bUZyYWN0aW9uRGlnaXRzOnRoaXMubWF4RnJhY3Rpb25EaWdpdHM/dGhpcy5tYXhGcmFjdGlvbkRpZ2l0cy5ldmFsdWF0ZSh0KTp2b2lkIDB9KS5mb3JtYXQodGhpcy5udW1iZXIuZXZhbHVhdGUodCkpfSxBci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5udW1iZXIpLHRoaXMubG9jYWxlJiZ0KHRoaXMubG9jYWxlKSx0aGlzLmN1cnJlbmN5JiZ0KHRoaXMuY3VycmVuY3kpLHRoaXMubWluRnJhY3Rpb25EaWdpdHMmJnQodGhpcy5taW5GcmFjdGlvbkRpZ2l0cyksdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyYmdCh0aGlzLm1heEZyYWN0aW9uRGlnaXRzKX0sQXIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sQXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmxvY2FsZSYmKHQubG9jYWxlPXRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpKSx0aGlzLmN1cnJlbmN5JiYodC5jdXJyZW5jeT10aGlzLmN1cnJlbmN5LnNlcmlhbGl6ZSgpKSx0aGlzLm1pbkZyYWN0aW9uRGlnaXRzJiYodFsibWluLWZyYWN0aW9uLWRpZ2l0cyJdPXRoaXMubWluRnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCkpLHRoaXMubWF4RnJhY3Rpb25EaWdpdHMmJih0WyJtYXgtZnJhY3Rpb24tZGlnaXRzIl09dGhpcy5tYXhGcmFjdGlvbkRpZ2l0cy5zZXJpYWxpemUoKSksWyJudW1iZXItZm9ybWF0Iix0aGlzLm51bWJlci5zZXJpYWxpemUoKSx0XX07dmFyIE1yPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1CdCx0aGlzLmlucHV0PXR9O01yLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxKTtyZXR1cm4gcj8iYXJyYXkiIT09ci50eXBlLmtpbmQmJiJzdHJpbmciIT09ci50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1yLnR5cGUua2luZD9lLmVycm9yKCJFeHBlY3RlZCBhcmd1bWVudCBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICIrWHQoci50eXBlKSsiIGluc3RlYWQuIik6bmV3IE1yKHIpOm51bGx9LE1yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZS5sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5sZW5ndGg7dGhyb3cgbmV3IHVlKCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICIrWHQoc2UoZSkpKyIgaW5zdGVhZC4iKX0sTXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpfSxNci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxNci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJsZW5ndGgiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgU3I9eyI9PSI6eHIsIiE9IjpiciwiPiI6d3IsIjwiOl9yLCI+PSI6a3IsIjw9IjpUcixhcnJheTpoZSxhdDp1cixib29sZWFuOmhlLGNhc2U6ZHIsY29hbGVzY2U6bHIsY29sbGF0b3I6YmUsZm9ybWF0OnBlLGltYWdlOmRlLGluOmZyLCJpbmRleC1vZiI6aHIsaW50ZXJwb2xhdGU6b3IsImludGVycG9sYXRlLWhjbCI6b3IsImludGVycG9sYXRlLWxhYiI6b3IsbGVuZ3RoOk1yLGxldDpjcixsaXRlcmFsOmNlLG1hdGNoOnByLG51bWJlcjpoZSwibnVtYmVyLWZvcm1hdCI6QXIsb2JqZWN0OmhlLHNsaWNlOm1yLHN0ZXA6SGUsc3RyaW5nOmhlLCJ0by1ib29sZWFuIjpnZSwidG8tY29sb3IiOmdlLCJ0by1udW1iZXIiOmdlLCJ0by1zdHJpbmciOmdlLHZhcjpqZSx3aXRoaW46UmV9O2Z1bmN0aW9uIEVyKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXTtyPXIuZXZhbHVhdGUodCksbj1uLmV2YWx1YXRlKHQpLGk9aS5ldmFsdWF0ZSh0KTt2YXIgbz1hP2EuZXZhbHVhdGUodCk6MSxzPWFlKHIsbixpLG8pO2lmKHMpdGhyb3cgbmV3IHVlKHMpO3JldHVybiBuZXcgdGUoci8yNTUqbyxuLzI1NSpvLGkvMjU1Km8sbyl9ZnVuY3Rpb24gTHIodCxlKXtyZXR1cm4gdCBpbiBlfWZ1bmN0aW9uIENyKHQsZSl7dmFyIHI9ZVt0XTtyZXR1cm4gdm9pZCAwPT09cj9udWxsOnJ9ZnVuY3Rpb24gUHIodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gSXIodCl7cmV0dXJue3Jlc3VsdDoic3VjY2VzcyIsdmFsdWU6dH19ZnVuY3Rpb24gT3IodCl7cmV0dXJue3Jlc3VsdDoiZXJyb3IiLHZhbHVlOnR9fWZ1bmN0aW9uIHpyKHQpe3JldHVybiJkYXRhLWRyaXZlbiI9PT10WyJwcm9wZXJ0eS10eXBlIl18fCJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI9PT10WyJwcm9wZXJ0eS10eXBlIl19ZnVuY3Rpb24gRHIodCl7cmV0dXJuISF0LmV4cHJlc3Npb24mJnQuZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmluZGV4T2YoInpvb20iKT4tMX1mdW5jdGlvbiBScih0KXtyZXR1cm4hIXQuZXhwcmVzc2lvbiYmdC5leHByZXNzaW9uLmludGVycG9sYXRlZH1mdW5jdGlvbiBGcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcj8ibnVtYmVyIjp0IGluc3RhbmNlb2YgU3RyaW5nPyJzdHJpbmciOnQgaW5zdGFuY2VvZiBCb29sZWFuPyJib29sZWFuIjpBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6bnVsbD09PXQ/Im51bGwiOnR5cGVvZiB0fWZ1bmN0aW9uIEJyKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJiFBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIE5yKHQpe3JldHVybiB0fWZ1bmN0aW9uIGpyKHQsZSxyKXtyZXR1cm4gdm9pZCAwIT09dD90OnZvaWQgMCE9PWU/ZTp2b2lkIDAhPT1yP3I6dm9pZCAwfWZ1bmN0aW9uIFVyKHQsZSxyLG4saSl7cmV0dXJuIGpyKHR5cGVvZiByPT09aT9uW3JdOnZvaWQgMCx0LmRlZmF1bHQsZS5kZWZhdWx0KX1mdW5jdGlvbiBWcih0LGUscil7aWYoIm51bWJlciIhPT1GcihyKSlyZXR1cm4ganIodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIG49dC5zdG9wcy5sZW5ndGg7aWYoMT09PW4pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW24tMV1bMF0pcmV0dXJuIHQuc3RvcHNbbi0xXVsxXTt2YXIgaT1WZSh0LnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkscik7cmV0dXJuIHQuc3RvcHNbaV1bMV19ZnVuY3Rpb24gSHIodCxlLHIpe3ZhciBuPXZvaWQgMCE9PXQuYmFzZT90LmJhc2U6MTtpZigibnVtYmVyIiE9PUZyKHIpKXJldHVybiBqcih0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgaT10LnN0b3BzLmxlbmd0aDtpZigxPT09aSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbaS0xXVswXSlyZXR1cm4gdC5zdG9wc1tpLTFdWzFdO3ZhciBhPVZlKHQuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxyKSxvPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9KHIsbix0LnN0b3BzW2FdWzBdLHQuc3RvcHNbYSsxXVswXSkscz10LnN0b3BzW2FdWzFdLGw9dC5zdG9wc1thKzFdWzFdLGM9R2VbZS50eXBlXXx8TnI7aWYodC5jb2xvclNwYWNlJiYicmdiIiE9PXQuY29sb3JTcGFjZSl7dmFyIHU9YXJbdC5jb2xvclNwYWNlXTtjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUucmV2ZXJzZSh1LmludGVycG9sYXRlKHUuZm9yd2FyZCh0KSx1LmZvcndhcmQoZSksbykpfX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcy5ldmFsdWF0ZT97ZXZhbHVhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT1hcmd1bWVudHMubGVuZ3RoO2UtLTspdFtlXT1hcmd1bWVudHNbZV07dmFyIHI9cy5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCksbj1sLmV2YWx1YXRlLmFwcGx5KHZvaWQgMCx0KTtpZih2b2lkIDAhPT1yJiZ2b2lkIDAhPT1uKXJldHVybiBjKHIsbixvKX19OmMocyxsLG8pfWZ1bmN0aW9uIHFyKHQsZSxyKXtyZXR1cm4iY29sb3IiPT09ZS50eXBlP3I9dGUucGFyc2Uocik6ImZvcm1hdHRlZCI9PT1lLnR5cGU/cj1uZS5mcm9tU3RyaW5nKHIudG9TdHJpbmcoKSk6InJlc29sdmVkSW1hZ2UiPT09ZS50eXBlP3I9aWUuZnJvbVN0cmluZyhyLnRvU3RyaW5nKCkpOkZyKHIpPT09ZS50eXBlfHwiZW51bSI9PT1lLnR5cGUmJmUudmFsdWVzW3JdfHwocj12b2lkIDApLGpyKHIsdC5kZWZhdWx0LGUuZGVmYXVsdCl9eGUucmVnaXN0ZXIoU3Ise2Vycm9yOlt7a2luZDoiZXJyb3IifSxbTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTt0aHJvdyBuZXcgdWUoci5ldmFsdWF0ZSh0KSl9XSx0eXBlb2Y6W050LFtIdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gWHQoc2UoZVswXS5ldmFsdWF0ZSh0KSkpfV0sInRvLXJnYmEiOltXdChCdCw0KSxbVXRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9BcnJheSgpfV0scmdiOltVdCxbQnQsQnQsQnRdLEVyXSxyZ2JhOltVdCxbQnQsQnQsQnQsQnRdLEVyXSxoYXM6e3R5cGU6anQsb3ZlcmxvYWRzOltbW050XSxmdW5jdGlvbih0LGUpe3JldHVybiBMcihlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbTnQsVnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIExyKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XV19LGdldDp7dHlwZTpIdCxvdmVybG9hZHM6W1tbTnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIENyKGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1tOdCxWdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gQ3Ioci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dXX0sImZlYXR1cmUtc3RhdGUiOltIdCxbTnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIENyKGVbMF0uZXZhbHVhdGUodCksdC5mZWF0dXJlU3RhdGV8fHt9KX1dLHByb3BlcnRpZXM6W1Z0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByb3BlcnRpZXMoKX1dLCJnZW9tZXRyeS10eXBlIjpbTnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCl9XSxpZDpbSHQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQoKX1dLHpvb206W0J0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuem9vbX1dLCJoZWF0bWFwLWRlbnNpdHkiOltCdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5fHwwfV0sImxpbmUtcHJvZ3Jlc3MiOltCdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmxpbmVQcm9ncmVzc3x8MH1dLGFjY3VtdWxhdGVkOltIdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5nbG9iYWxzLmFjY3VtdWxhdGVkP251bGw6dC5nbG9iYWxzLmFjY3VtdWxhdGVkfV0sIisiOltCdCxQcihCdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7cis9aVtuXS5ldmFsdWF0ZSh0KX1yZXR1cm4gcn1dLCIqIjpbQnQsUHIoQnQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3IqPWlbbl0uZXZhbHVhdGUodCl9cmV0dXJuIHJ9XSwiLSI6e3R5cGU6QnQsb3ZlcmxvYWRzOltbW0J0LEJ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpLW4uZXZhbHVhdGUodCl9XSxbW0J0XSxmdW5jdGlvbih0LGUpe3JldHVybi1lWzBdLmV2YWx1YXRlKHQpfV1dfSwiLyI6W0J0LFtCdCxCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KS9uLmV2YWx1YXRlKHQpfV0sIiUiOltCdCxbQnQsQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCklbi5ldmFsdWF0ZSh0KX1dLGxuMjpbQnQsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5MTjJ9XSxwaTpbQnQsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5QSX1dLGU6W0J0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguRX1dLCJeIjpbQnQsW0J0LEJ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBNYXRoLnBvdyhyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV0sc3FydDpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc3FydChyLmV2YWx1YXRlKHQpKX1dLGxvZzEwOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2coci5ldmFsdWF0ZSh0KSkvTWF0aC5MTjEwfV0sbG46W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKX1dLGxvZzI6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKS9NYXRoLkxOMn1dLHNpbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguc2luKHIuZXZhbHVhdGUodCkpfV0sY29zOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jb3Moci5ldmFsdWF0ZSh0KSl9XSx0YW46W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLnRhbihyLmV2YWx1YXRlKHQpKX1dLGFzaW46W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFzaW4oci5ldmFsdWF0ZSh0KSl9XSxhY29zOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hY29zKHIuZXZhbHVhdGUodCkpfV0sYXRhbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYXRhbihyLmV2YWx1YXRlKHQpKX1dLG1pbjpbQnQsUHIoQnQpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2YWx1YXRlKHQpfSkpKX1dLG1heDpbQnQsUHIoQnQpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KE1hdGgsZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2YWx1YXRlKHQpfSkpKX1dLGFiczpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWJzKHIuZXZhbHVhdGUodCkpfV0scm91bmQ6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLmV2YWx1YXRlKHQpO3JldHVybiByPDA/LU1hdGgucm91bmQoLXIpOk1hdGgucm91bmQocil9XSxmbG9vcjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguZmxvb3Ioci5ldmFsdWF0ZSh0KSl9XSxjZWlsOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jZWlsKHIuZXZhbHVhdGUodCkpfV0sImZpbHRlci09PSI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gdC5wcm9wZXJ0aWVzKClbci52YWx1ZV09PT1uLnZhbHVlfV0sImZpbHRlci1pZC09PSI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiB0LmlkKCk9PT1yLnZhbHVlfV0sImZpbHRlci10eXBlLT09IjpbanQsW050XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCk9PT1yLnZhbHVlfV0sImZpbHRlci08IjpbanQsW050LEh0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk8YX1dLCJmaWx0ZXItaWQtPCI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPGl9XSwiZmlsdGVyLT4iOltqdCxbTnQsSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaT5hfV0sImZpbHRlci1pZC0+IjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+aX1dLCJmaWx0ZXItPD0iOltqdCxbTnQsSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTw9YX1dLCJmaWx0ZXItaWQtPD0iOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjw9aX1dLCJmaWx0ZXItPj0iOltqdCxbTnQsSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaT49YX1dLCJmaWx0ZXItaWQtPj0iOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbj49aX1dLCJmaWx0ZXItaGFzIjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlIGluIHQucHJvcGVydGllcygpfV0sImZpbHRlci1oYXMtaWQiOltqdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQuaWQoKSYmdm9pZCAwIT09dC5pZCgpfV0sImZpbHRlci10eXBlLWluIjpbanQsW1d0KE50KV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuZ2VvbWV0cnlUeXBlKCkpPj0wfV0sImZpbHRlci1pZC1pbiI6W2p0LFtXdChIdCldLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUuaW5kZXhPZih0LmlkKCkpPj0wfV0sImZpbHRlci1pbi1zbWFsbCI6W2p0LFtOdCxXdChIdCldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gZVsxXS52YWx1ZS5pbmRleE9mKHQucHJvcGVydGllcygpW3IudmFsdWVdKT49MH1dLCJmaWx0ZXItaW4tbGFyZ2UiOltqdCxbTnQsV3QoSHQpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IoO3I8PW47KXt2YXIgaT1yK24+PjE7aWYoZVtpXT09PXQpcmV0dXJuITA7ZVtpXT50P249aS0xOnI9aSsxfXJldHVybiExfSh0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxuLnZhbHVlLDAsbi52YWx1ZS5sZW5ndGgtMSl9XSxhbGw6e3R5cGU6anQsb3ZlcmxvYWRzOltbW2p0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpJiZuLmV2YWx1YXRlKHQpfV0sW1ByKGp0KSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe2lmKCFuW3JdLmV2YWx1YXRlKHQpKXJldHVybiExfXJldHVybiEwfV1dfSxhbnk6e3R5cGU6anQsb3ZlcmxvYWRzOltbW2p0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpfHxuLmV2YWx1YXRlKHQpfV0sW1ByKGp0KSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe2lmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITB9cmV0dXJuITF9XV19LCIhIjpbanQsW2p0XSxmdW5jdGlvbih0LGUpe3JldHVybiFlWzBdLmV2YWx1YXRlKHQpfV0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOltqdCxbTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuZ2xvYmFscyYmdC5nbG9iYWxzLmlzU3VwcG9ydGVkU2NyaXB0O3JldHVybiFufHxuKHIuZXZhbHVhdGUodCkpfV0sdXBjYXNlOltOdCxbTnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9VcHBlckNhc2UoKX1dLGRvd25jYXNlOltOdCxbTnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9Mb3dlckNhc2UoKX1dLGNvbmNhdDpbTnQsUHIoSHQpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbGUoZS5ldmFsdWF0ZSh0KSl9KSkuam9pbigiIil9XSwicmVzb2x2ZWQtbG9jYWxlIjpbTnQsW3F0XSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnJlc29sdmVkTG9jYWxlKCl9XX0pO3ZhciBHcj1mdW5jdGlvbih0LGUpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMuX3dhcm5pbmdIaXN0b3J5PXt9LHRoaXMuX2V2YWx1YXRvcj1uZXcgeWUsdGhpcy5fZGVmYXVsdFZhbHVlPWU/ZnVuY3Rpb24odCl7cmV0dXJuImNvbG9yIj09PXQudHlwZSYmQnIodC5kZWZhdWx0KT9uZXcgdGUoMCwwLDAsMCk6ImNvbG9yIj09PXQudHlwZT90ZS5wYXJzZSh0LmRlZmF1bHQpfHxudWxsOnZvaWQgMD09PXQuZGVmYXVsdD9udWxsOnQuZGVmYXVsdH0oZSk6bnVsbCx0aGlzLl9lbnVtVmFsdWVzPWUmJiJlbnVtIj09PWUudHlwZT9lLnZhbHVlczpudWxsfTtmdW5jdGlvbiBZcih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiZ0WzBdaW4gU3J9ZnVuY3Rpb24gV3IodCxlKXt2YXIgcj1uZXcgVWUoU3IsW10sZT9mdW5jdGlvbih0KXt2YXIgZT17Y29sb3I6VXQsc3RyaW5nOk50LG51bWJlcjpCdCxlbnVtOk50LGJvb2xlYW46anQsZm9ybWF0dGVkOkd0LHJlc29sdmVkSW1hZ2U6WXR9O2lmKCJhcnJheSI9PT10LnR5cGUpcmV0dXJuIFd0KGVbdC52YWx1ZV18fEh0LHQubGVuZ3RoKTtyZXR1cm4gZVt0LnR5cGVdfShlKTp2b2lkIDApLG49ci5wYXJzZSh0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUmJiJzdHJpbmciPT09ZS50eXBlP3t0eXBlQW5ub3RhdGlvbjoiY29lcmNlIn06dm9pZCAwKTtyZXR1cm4gbj9JcihuZXcgR3IobixlKSk6T3Ioci5lcnJvcnMpfUdyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lLHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGU9cix0aGlzLl9ldmFsdWF0b3IuY2Fub25pY2FsPW4sdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcz1pfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPWEsdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcil9LEdyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGU9cnx8bnVsbCx0aGlzLl9ldmFsdWF0b3IuY2Fub25pY2FsPW4sdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcz1pfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPWF8fG51bGw7dHJ5e3ZhciBvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PW98fCJudW1iZXIiPT10eXBlb2YgbyYmbyE9bylyZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO2lmKHRoaXMuX2VudW1WYWx1ZXMmJiEobyBpbiB0aGlzLl9lbnVtVmFsdWVzKSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9uZSBvZiAiK09iamVjdC5rZXlzKHRoaXMuX2VudW1WYWx1ZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSkpLmpvaW4oIiwgIikrIiwgYnV0IGZvdW5kICIrSlNPTi5zdHJpbmdpZnkobykrIiBpbnN0ZWFkLiIpO3JldHVybiBvfWNhdGNoKHQpe3JldHVybiB0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdfHwodGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXT0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0Lm1lc3NhZ2UpKSx0aGlzLl9kZWZhdWx0VmFsdWV9fTt2YXIgWHI9ZnVuY3Rpb24odCxlKXt0aGlzLmtpbmQ9dCx0aGlzLl9zdHlsZUV4cHJlc3Npb249ZSx0aGlzLmlzU3RhdGVEZXBlbmRlbnQ9ImNvbnN0YW50IiE9PXQmJiFCZShlLmV4cHJlc3Npb24pfTtYci5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKHQsZSxyLG4saSxhKX0sWHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSxyLG4saSxhKX07dmFyIFpyPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMua2luZD10LHRoaXMuem9vbVN0b3BzPXIsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsdGhpcy5pc1N0YXRlRGVwZW5kZW50PSJjYW1lcmEiIT09dCYmIUJlKGUuZXhwcmVzc2lvbiksdGhpcy5pbnRlcnBvbGF0aW9uVHlwZT1ufTtmdW5jdGlvbiBKcih0LGUpe2lmKCJlcnJvciI9PT0odD1Xcih0LGUpKS5yZXN1bHQpcmV0dXJuIHQ7dmFyIHI9dC52YWx1ZS5leHByZXNzaW9uLG49RmUocik7aWYoIW4mJiF6cihlKSlyZXR1cm4gT3IoW25ldyBEdCgiIiwiZGF0YSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgaT1OZShyLFsiem9vbSJdKTtpZighaSYmIURyKGUpKXJldHVybiBPcihbbmV3IER0KCIiLCJ6b29tIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQiKV0pO3ZhciBhPWZ1bmN0aW9uIHQoZSl7dmFyIHI9bnVsbDtpZihlIGluc3RhbmNlb2YgY3Ipcj10KGUucmVzdWx0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBscilmb3IodmFyIG49MCxpPWUuYXJncztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07aWYocj10KGEpKWJyZWFrfWVsc2UoZSBpbnN0YW5jZW9mIEhlfHxlIGluc3RhbmNlb2Ygb3IpJiZlLmlucHV0IGluc3RhbmNlb2YgeGUmJiJ6b29tIj09PWUuaW5wdXQubmFtZSYmKHI9ZSk7aWYociBpbnN0YW5jZW9mIER0KXJldHVybiByO3JldHVybiBlLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dmFyIG49dChlKTtuIGluc3RhbmNlb2YgRHQ/cj1uOiFyJiZuP3I9bmV3IER0KCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBEdCgiIiwnT25seSBvbmUgem9vbS1iYXNlZCAic3RlcCIgb3IgImludGVycG9sYXRlIiBzdWJleHByZXNzaW9uIG1heSBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uJykpfSkpLHJ9KHIpO2lmKCFhJiYhaSlyZXR1cm4gT3IoW25ldyBEdCgiIiwnInpvb20iIGV4cHJlc3Npb24gbWF5IG9ubHkgYmUgdXNlZCBhcyBpbnB1dCB0byBhIHRvcC1sZXZlbCAic3RlcCIgb3IgImludGVycG9sYXRlIiBleHByZXNzaW9uLicpXSk7aWYoYSBpbnN0YW5jZW9mIER0KXJldHVybiBPcihbYV0pO2lmKGEgaW5zdGFuY2VvZiBvciYmIVJyKGUpKXJldHVybiBPcihbbmV3IER0KCIiLCciaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyBwcm9wZXJ0eScpXSk7aWYoIWEpcmV0dXJuIElyKG5ldyBYcihuPyJjb25zdGFudCI6InNvdXJjZSIsdC52YWx1ZSkpO3ZhciBvPWEgaW5zdGFuY2VvZiBvcj9hLmludGVycG9sYXRpb246dm9pZCAwO3JldHVybiBJcihuZXcgWnIobj8iY2FtZXJhIjoiY29tcG9zaXRlIix0LnZhbHVlLGEubGFiZWxzLG8pKX1aci5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKHQsZSxyLG4saSxhKX0sWnIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSxyLG4saSxhKX0sWnIucHJvdG90eXBlLmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmludGVycG9sYXRpb25UeXBlP29yLmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uVHlwZSx0LGUscik6MH07dmFyIEtyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFyYW1ldGVycz10LHRoaXMuX3NwZWNpZmljYXRpb249ZSxJdCh0aGlzLGZ1bmN0aW9uIHQoZSxyKXt2YXIgbixpLGEsbz0iY29sb3IiPT09ci50eXBlLHM9ZS5zdG9wcyYmIm9iamVjdCI9PXR5cGVvZiBlLnN0b3BzWzBdWzBdLGw9c3x8dm9pZCAwIT09ZS5wcm9wZXJ0eSxjPXN8fCFsLHU9ZS50eXBlfHwoUnIocik/ImV4cG9uZW50aWFsIjoiaW50ZXJ2YWwiKTtpZihvJiYoKGU9SXQoe30sZSkpLnN0b3BzJiYoZS5zdG9wcz1lLnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdGUucGFyc2UodFsxXSldfSkpKSxlLmRlZmF1bHQ/ZS5kZWZhdWx0PXRlLnBhcnNlKGUuZGVmYXVsdCk6ZS5kZWZhdWx0PXRlLnBhcnNlKHIuZGVmYXVsdCkpLGUuY29sb3JTcGFjZSYmInJnYiIhPT1lLmNvbG9yU3BhY2UmJiFhcltlLmNvbG9yU3BhY2VdKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2xvciBzcGFjZTogIitlLmNvbG9yU3BhY2UpO2lmKCJleHBvbmVudGlhbCI9PT11KW49SHI7ZWxzZSBpZigiaW50ZXJ2YWwiPT09dSluPVZyO2Vsc2UgaWYoImNhdGVnb3JpY2FsIj09PXUpe249VXIsaT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgZj0wLGg9ZS5zdG9wcztmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07aVtwWzBdXT1wWzFdfWE9dHlwZW9mIGUuc3RvcHNbMF1bMF19ZWxzZXtpZigiaWRlbnRpdHkiIT09dSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZnVuY3Rpb24gdHlwZSAiJyt1KyciJyk7bj1xcn1pZihzKXtmb3IodmFyIGQ9e30sbT1bXSxnPTA7ZzxlLnN0b3BzLmxlbmd0aDtnKyspe3ZhciB2PWUuc3RvcHNbZ10seT12WzBdLnpvb207dm9pZCAwPT09ZFt5XSYmKGRbeV09e3pvb206eSx0eXBlOmUudHlwZSxwcm9wZXJ0eTplLnByb3BlcnR5LGRlZmF1bHQ6ZS5kZWZhdWx0LHN0b3BzOltdfSxtLnB1c2goeSkpLGRbeV0uc3RvcHMucHVzaChbdlswXS52YWx1ZSx2WzFdXSl9Zm9yKHZhciB4PVtdLGI9MCxfPW07YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdO3gucHVzaChbZFt3XS56b29tLHQoZFt3XSxyKV0pfXZhciBUPXtuYW1lOiJsaW5lYXIifTtyZXR1cm57a2luZDoiY29tcG9zaXRlIixpbnRlcnBvbGF0aW9uVHlwZTpULGludGVycG9sYXRpb25GYWN0b3I6b3IuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHZvaWQgMCxUKSx6b29tU3RvcHM6eC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLGV2YWx1YXRlOmZ1bmN0aW9uKHQsbil7dmFyIGk9dC56b29tO3JldHVybiBIcih7c3RvcHM6eCxiYXNlOmUuYmFzZX0scixpKS5ldmFsdWF0ZShpLG4pfX19aWYoYyl7dmFyIGs9ImV4cG9uZW50aWFsIj09PXU/e25hbWU6ImV4cG9uZW50aWFsIixiYXNlOnZvaWQgMCE9PWUuYmFzZT9lLmJhc2U6MX06bnVsbDtyZXR1cm57a2luZDoiY2FtZXJhIixpbnRlcnBvbGF0aW9uVHlwZTprLGludGVycG9sYXRpb25GYWN0b3I6b3IuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHZvaWQgMCxrKSx6b29tU3RvcHM6ZS5zdG9wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLGV2YWx1YXRlOmZ1bmN0aW9uKHQpe3ZhciBvPXQuem9vbTtyZXR1cm4gbihlLHIsbyxpLGEpfX19cmV0dXJue2tpbmQ6InNvdXJjZSIsZXZhbHVhdGU6ZnVuY3Rpb24odCxvKXt2YXIgcz1vJiZvLnByb3BlcnRpZXM/by5wcm9wZXJ0aWVzW2UucHJvcGVydHldOnZvaWQgMDtyZXR1cm4gdm9pZCAwPT09cz9qcihlLmRlZmF1bHQsci5kZWZhdWx0KTpuKGUscixzLGksYSl9fX0odGhpcy5fcGFyYW1ldGVycyx0aGlzLl9zcGVjaWZpY2F0aW9uKSl9O2Z1bmN0aW9uIFFyKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjfHx7fSxpPXQub2JqZWN0RWxlbWVudFZhbGlkYXRvcnN8fHt9LGE9dC5zdHlsZSxvPXQuc3R5bGVTcGVjLHM9W10sbD1GcihyKTtpZigib2JqZWN0IiE9PWwpcmV0dXJuW25ldyBDdChlLHIsIm9iamVjdCBleHBlY3RlZCwgIitsKyIgZm91bmQiKV07Zm9yKHZhciBjIGluIHIpe3ZhciB1PWMuc3BsaXQoIi4iKVswXSxmPW5bdV18fG5bIioiXSxoPXZvaWQgMDtpZihpW3VdKWg9aVt1XTtlbHNlIGlmKG5bdV0paD1rbjtlbHNlIGlmKGlbIioiXSloPWlbIioiXTtlbHNle2lmKCFuWyIqIl0pe3MucHVzaChuZXcgQ3QoZSxyW2NdLCd1bmtub3duIHByb3BlcnR5ICInK2MrJyInKSk7Y29udGludWV9aD1rbn1zPXMuY29uY2F0KGgoe2tleTooZT9lKyIuIjplKStjLHZhbHVlOnJbY10sdmFsdWVTcGVjOmYsc3R5bGU6YSxzdHlsZVNwZWM6byxvYmplY3Q6cixvYmplY3RLZXk6Y30scikpfWZvcih2YXIgcCBpbiBuKWlbcF18fG5bcF0ucmVxdWlyZWQmJnZvaWQgMD09PW5bcF0uZGVmYXVsdCYmdm9pZCAwPT09cltwXSYmcy5wdXNoKG5ldyBDdChlLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgIicrcCsnIicpKTtyZXR1cm4gc31mdW5jdGlvbiAkcih0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LmtleSxvPXQuYXJyYXlFbGVtZW50VmFsaWRhdG9yfHxrbjtpZigiYXJyYXkiIT09RnIoZSkpcmV0dXJuW25ldyBDdChhLGUsImFycmF5IGV4cGVjdGVkLCAiK0ZyKGUpKyIgZm91bmQiKV07aWYoci5sZW5ndGgmJmUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuW25ldyBDdChhLGUsImFycmF5IGxlbmd0aCAiK3IubGVuZ3RoKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07aWYoclsibWluLWxlbmd0aCJdJiZlLmxlbmd0aDxyWyJtaW4tbGVuZ3RoIl0pcmV0dXJuW25ldyBDdChhLGUsImFycmF5IGxlbmd0aCBhdCBsZWFzdCAiK3JbIm1pbi1sZW5ndGgiXSsiIGV4cGVjdGVkLCBsZW5ndGggIitlLmxlbmd0aCsiIGZvdW5kIildO3ZhciBzPXt0eXBlOnIudmFsdWUsdmFsdWVzOnIudmFsdWVzfTtpLiR2ZXJzaW9uPDcmJihzLmZ1bmN0aW9uPXIuZnVuY3Rpb24pLCJvYmplY3QiPT09RnIoci52YWx1ZSkmJihzPXIudmFsdWUpO2Zvcih2YXIgbD1bXSxjPTA7YzxlLmxlbmd0aDtjKyspbD1sLmNvbmNhdChvKHthcnJheTplLGFycmF5SW5kZXg6Yyx2YWx1ZTplW2NdLHZhbHVlU3BlYzpzLHN0eWxlOm4sc3R5bGVTcGVjOmksa2V5OmErIlsiK2MrIl0ifSkpO3JldHVybiBsfWZ1bmN0aW9uIHRuKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjLGk9RnIocik7cmV0dXJuIm51bWJlciI9PT1pJiZyIT1yJiYoaT0iTmFOIiksIm51bWJlciIhPT1pP1tuZXcgQ3QoZSxyLCJudW1iZXIgZXhwZWN0ZWQsICIraSsiIGZvdW5kIildOiJtaW5pbXVtImluIG4mJnI8bi5taW5pbXVtP1tuZXcgQ3QoZSxyLHIrIiBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgIituLm1pbmltdW0pXToibWF4aW11bSJpbiBuJiZyPm4ubWF4aW11bT9bbmV3IEN0KGUscixyKyIgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlICIrbi5tYXhpbXVtKV06W119ZnVuY3Rpb24gZW4odCl7dmFyIGUscixuLGk9dC52YWx1ZVNwZWMsYT1PdCh0LnZhbHVlLnR5cGUpLG89e30scz0iY2F0ZWdvcmljYWwiIT09YSYmdm9pZCAwPT09dC52YWx1ZS5wcm9wZXJ0eSxsPSFzLGM9ImFycmF5Ij09PUZyKHQudmFsdWUuc3RvcHMpJiYiYXJyYXkiPT09RnIodC52YWx1ZS5zdG9wc1swXSkmJiJvYmplY3QiPT09RnIodC52YWx1ZS5zdG9wc1swXVswXSksdT1Rcih7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOnQuc3R5bGVTcGVjLmZ1bmN0aW9uLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntzdG9wczpmdW5jdGlvbih0KXtpZigiaWRlbnRpdHkiPT09YSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsJ2lkZW50aXR5IGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBhICJzdG9wcyIgcHJvcGVydHknKV07dmFyIGU9W10scj10LnZhbHVlO2U9ZS5jb25jYXQoJHIoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6Zn0pKSwiYXJyYXkiPT09RnIocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBDdCh0LmtleSxyLCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AiKSk7cmV0dXJuIGV9LGRlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGtuKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pfX19KTtyZXR1cm4iaWRlbnRpdHkiPT09YSYmcyYmdS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJwcm9wZXJ0eSInKSksImlkZW50aXR5Ij09PWF8fHQudmFsdWUuc3RvcHN8fHUucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAic3RvcHMiJykpLCJleHBvbmVudGlhbCI9PT1hJiZ0LnZhbHVlU3BlYy5leHByZXNzaW9uJiYhUnIodC52YWx1ZVNwZWMpJiZ1LnB1c2gobmV3IEN0KHQua2V5LHQudmFsdWUsImV4cG9uZW50aWFsIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpLHQuc3R5bGVTcGVjLiR2ZXJzaW9uPj04JiYobCYmIXpyKHQudmFsdWVTcGVjKT91LnB1c2gobmV3IEN0KHQua2V5LHQudmFsdWUsInByb3BlcnR5IGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpOnMmJiFEcih0LnZhbHVlU3BlYykmJnUucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwiem9vbSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKSksImNhdGVnb3JpY2FsIiE9PWEmJiFjfHx2b2lkIDAhPT10LnZhbHVlLnByb3BlcnR5fHx1LnB1c2gobmV3IEN0KHQua2V5LHQudmFsdWUsJyJwcm9wZXJ0eSIgcHJvcGVydHkgaXMgcmVxdWlyZWQnKSksdTtmdW5jdGlvbiBmKHQpe3ZhciBlPVtdLGE9dC52YWx1ZSxzPXQua2V5O2lmKCJhcnJheSIhPT1GcihhKSlyZXR1cm5bbmV3IEN0KHMsYSwiYXJyYXkgZXhwZWN0ZWQsICIrRnIoYSkrIiBmb3VuZCIpXTtpZigyIT09YS5sZW5ndGgpcmV0dXJuW25ldyBDdChzLGEsImFycmF5IGxlbmd0aCAyIGV4cGVjdGVkLCBsZW5ndGggIithLmxlbmd0aCsiIGZvdW5kIildO2lmKGMpe2lmKCJvYmplY3QiIT09RnIoYVswXSkpcmV0dXJuW25ldyBDdChzLGEsIm9iamVjdCBleHBlY3RlZCwgIitGcihhWzBdKSsiIGZvdW5kIildO2lmKHZvaWQgMD09PWFbMF0uem9vbSlyZXR1cm5bbmV3IEN0KHMsYSwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB6b29tIildO2lmKHZvaWQgMD09PWFbMF0udmFsdWUpcmV0dXJuW25ldyBDdChzLGEsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUiKV07aWYobiYmbj5PdChhWzBdLnpvb20pKXJldHVybltuZXcgQ3QocyxhWzBdLnpvb20sInN0b3Agem9vbSB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIildO090KGFbMF0uem9vbSkhPT1uJiYobj1PdChhWzBdLnpvb20pLHI9dm9pZCAwLG89e30pLGU9ZS5jb25jYXQoUXIoe2tleTpzKyJbMF0iLHZhbHVlOmFbMF0sdmFsdWVTcGVjOnt6b29tOnt9fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7em9vbTp0bix2YWx1ZTpofX0pKX1lbHNlIGU9ZS5jb25jYXQoaCh7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGEpKTtyZXR1cm4gWXIoenQoYVsxXSkpP2UuY29uY2F0KFtuZXcgQ3QocysiWzFdIixhWzFdLCJleHByZXNzaW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gc3RvcHMuIildKTplLmNvbmNhdChrbih7a2V5OnMrIlsxXSIsdmFsdWU6YVsxXSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKX1mdW5jdGlvbiBoKHQsbil7dmFyIHM9RnIodC52YWx1ZSksbD1PdCh0LnZhbHVlKSxjPW51bGwhPT10LnZhbHVlP3QudmFsdWU6bjtpZihlKXtpZihzIT09ZSlyZXR1cm5bbmV3IEN0KHQua2V5LGMscysiIHN0b3AgZG9tYWluIHR5cGUgbXVzdCBtYXRjaCBwcmV2aW91cyBzdG9wIGRvbWFpbiB0eXBlICIrZSldfWVsc2UgZT1zO2lmKCJudW1iZXIiIT09cyYmInN0cmluZyIhPT1zJiYiYm9vbGVhbiIhPT1zKXJldHVybltuZXcgQ3QodC5rZXksYywic3RvcCBkb21haW4gdmFsdWUgbXVzdCBiZSBhIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuIildO2lmKCJudW1iZXIiIT09cyYmImNhdGVnb3JpY2FsIiE9PWEpe3ZhciB1PSJudW1iZXIgZXhwZWN0ZWQsICIrcysiIGZvdW5kIjtyZXR1cm4genIoaSkmJnZvaWQgMD09PWEmJih1Kz0nXG5JZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGEgY2F0ZWdvcmljYWwgZnVuY3Rpb24sIHNwZWNpZnkgYCJ0eXBlIjogImNhdGVnb3JpY2FsImAuJyksW25ldyBDdCh0LmtleSxjLHUpXX1yZXR1cm4iY2F0ZWdvcmljYWwiIT09YXx8Im51bWJlciIhPT1zfHxpc0Zpbml0ZShsKSYmTWF0aC5mbG9vcihsKT09PWw/ImNhdGVnb3JpY2FsIiE9PWEmJiJudW1iZXIiPT09cyYmdm9pZCAwIT09ciYmbDxyP1tuZXcgQ3QodC5rZXksYywic3RvcCBkb21haW4gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlciIpXToocj1sLCJjYXRlZ29yaWNhbCI9PT1hJiZsIGluIG8/W25ldyBDdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUiKV06KG9bbF09ITAsW10pKTpbbmV3IEN0KHQua2V5LGMsImludGVnZXIgZXhwZWN0ZWQsIGZvdW5kICIrbCldfX1mdW5jdGlvbiBybih0KXt2YXIgZT0oInByb3BlcnR5Ij09PXQuZXhwcmVzc2lvbkNvbnRleHQ/SnI6V3IpKHp0KHQudmFsdWUpLHQudmFsdWVTcGVjKTtpZigiZXJyb3IiPT09ZS5yZXN1bHQpcmV0dXJuIGUudmFsdWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEN0KCIiK3Qua2V5K2Uua2V5LHQudmFsdWUsZS5tZXNzYWdlKX0pKTt2YXIgcj1lLnZhbHVlLmV4cHJlc3Npb258fGUudmFsdWUuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uO2lmKCJwcm9wZXJ0eSI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYidGV4dC1mb250Ij09PXQucHJvcGVydHlLZXkmJiFyLm91dHB1dERlZmluZWQoKSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsJ0ludmFsaWQgZGF0YSBleHByZXNzaW9uIGZvciAiJyt0LnByb3BlcnR5S2V5KyciLiBPdXRwdXQgdmFsdWVzIG11c3QgYmUgY29udGFpbmVkIGFzIGxpdGVyYWxzIHdpdGhpbiB0aGUgZXhwcmVzc2lvbi4nKV07aWYoInByb3BlcnR5Ij09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiJsYXlvdXQiPT09dC5wcm9wZXJ0eVR5cGUmJiFCZShyKSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsJyJmZWF0dXJlLXN0YXRlIiBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggbGF5b3V0IHByb3BlcnRpZXMuJyldO2lmKCJmaWx0ZXIiPT09dC5leHByZXNzaW9uQ29udGV4dCYmIUJlKHIpKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnImZlYXR1cmUtc3RhdGUiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBmaWx0ZXJzLicpXTtpZih0LmV4cHJlc3Npb25Db250ZXh0JiYwPT09dC5leHByZXNzaW9uQ29udGV4dC5pbmRleE9mKCJjbHVzdGVyIikpe2lmKCFOZShyLFsiem9vbSIsImZlYXR1cmUtc3RhdGUiXSkpcmV0dXJuW25ldyBDdCh0LmtleSx0LnZhbHVlLCciem9vbSIgYW5kICJmZWF0dXJlLXN0YXRlIiBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGNsdXN0ZXIgcHJvcGVydGllcy4nKV07aWYoImNsdXN0ZXItaW5pdGlhbCI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYhRmUocikpcmV0dXJuW25ldyBDdCh0LmtleSx0LnZhbHVlLCJGZWF0dXJlIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBpbml0aWFsIGV4cHJlc3Npb24gcGFydCBvZiBjbHVzdGVyIHByb3BlcnRpZXMuIildfXJldHVybltdfWZ1bmN0aW9uIG5uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjLGk9W107cmV0dXJuIEFycmF5LmlzQXJyYXkobi52YWx1ZXMpPy0xPT09bi52YWx1ZXMuaW5kZXhPZihPdChyKSkmJmkucHVzaChuZXcgQ3QoZSxyLCJleHBlY3RlZCBvbmUgb2YgWyIrbi52YWx1ZXMuam9pbigiLCAiKSsiXSwgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvdW5kIikpOi0xPT09T2JqZWN0LmtleXMobi52YWx1ZXMpLmluZGV4T2YoT3QocikpJiZpLnB1c2gobmV3IEN0KGUsciwiZXhwZWN0ZWQgb25lIG9mIFsiK09iamVjdC5rZXlzKG4udmFsdWVzKS5qb2luKCIsICIpKyJdLCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgZm91bmQiKSksaX1mdW5jdGlvbiBhbih0KXtpZighMD09PXR8fCExPT09dClyZXR1cm4hMDtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0WzBdKXtjYXNlImhhcyI6cmV0dXJuIHQubGVuZ3RoPj0yJiYiJGlkIiE9PXRbMV0mJiIkdHlwZSIhPT10WzFdO2Nhc2UiaW4iOnJldHVybiB0Lmxlbmd0aD49MyYmKCJzdHJpbmciIT10eXBlb2YgdFsxXXx8QXJyYXkuaXNBcnJheSh0WzJdKSk7Y2FzZSIhaW4iOmNhc2UiIWhhcyI6Y2FzZSJub25lIjpyZXR1cm4hMTtjYXNlIj09IjpjYXNlIiE9IjpjYXNlIj4iOmNhc2UiPj0iOmNhc2UiPCI6Y2FzZSI8PSI6cmV0dXJuIDMhPT10Lmxlbmd0aHx8QXJyYXkuaXNBcnJheSh0WzFdKXx8QXJyYXkuaXNBcnJheSh0WzJdKTtjYXNlImFueSI6Y2FzZSJhbGwiOmZvcih2YXIgZT0wLHI9dC5zbGljZSgxKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIWFuKG4pJiYiYm9vbGVhbiIhPXR5cGVvZiBuKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITB9fUtyLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS3IodC5fcGFyYW1ldGVycyx0Ll9zcGVjaWZpY2F0aW9uKX0sS3Iuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybntfcGFyYW1ldGVyczp0Ll9wYXJhbWV0ZXJzLF9zcGVjaWZpY2F0aW9uOnQuX3NwZWNpZmljYXRpb259fTt2YXIgb249e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEsdHJhbnNpdGlvbjohMSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19fTtmdW5jdGlvbiBzbih0KXtpZihudWxsPT10KXJldHVybntmaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmVlZEdlb21ldHJ5OiExfTthbih0KXx8KHQ9Y24odCkpO3ZhciBlPVdyKHQsb24pO2lmKCJlcnJvciI9PT1lLnJlc3VsdCl0aHJvdyBuZXcgRXJyb3IoZS52YWx1ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleSsiOiAiK3QubWVzc2FnZX0pKS5qb2luKCIsICIpKTtyZXR1cm57ZmlsdGVyOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZS52YWx1ZS5ldmFsdWF0ZSh0LHIse30sbil9LG5lZWRHZW9tZXRyeTpmdW5jdGlvbiB0KGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiExO2lmKCJ3aXRoaW4iPT09ZVswXSlyZXR1cm4hMDtmb3IodmFyIHI9MTtyPGUubGVuZ3RoO3IrKylpZih0KGVbcl0pKXJldHVybiEwO3JldHVybiExfSh0KX19ZnVuY3Rpb24gbG4odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gY24odCl7aWYoIXQpcmV0dXJuITA7dmFyIGUscj10WzBdO3JldHVybiB0Lmxlbmd0aDw9MT8iYW55IiE9PXI6Ij09Ij09PXI/dW4odFsxXSx0WzJdLCI9PSIpOiIhPSI9PT1yP3BuKHVuKHRbMV0sdFsyXSwiPT0iKSk6IjwiPT09cnx8Ij4iPT09cnx8Ijw9Ij09PXJ8fCI+PSI9PT1yP3VuKHRbMV0sdFsyXSxyKToiYW55Ij09PXI/KGU9dC5zbGljZSgxKSxbImFueSJdLmNvbmNhdChlLm1hcChjbikpKToiYWxsIj09PXI/WyJhbGwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoY24pKToibm9uZSI9PT1yP1siYWxsIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKGNuKS5tYXAocG4pKToiaW4iPT09cj9mbih0WzFdLHQuc2xpY2UoMikpOiIhaW4iPT09cj9wbihmbih0WzFdLHQuc2xpY2UoMikpKToiaGFzIj09PXI/aG4odFsxXSk6IiFoYXMiPT09cj9wbihobih0WzFdKSk6IndpdGhpbiIhPT1yfHx0fWZ1bmN0aW9uIHVuKHQsZSxyKXtzd2l0Y2godCl7Y2FzZSIkdHlwZSI6cmV0dXJuWyJmaWx0ZXItdHlwZS0iK3IsZV07Y2FzZSIkaWQiOnJldHVyblsiZmlsdGVyLWlkLSIrcixlXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLSIrcix0LGVdfX1mdW5jdGlvbiBmbih0LGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godCl7Y2FzZSIkdHlwZSI6cmV0dXJuWyJmaWx0ZXItdHlwZS1pbiIsWyJsaXRlcmFsIixlXV07Y2FzZSIkaWQiOnJldHVyblsiZmlsdGVyLWlkLWluIixbImxpdGVyYWwiLGVdXTtkZWZhdWx0OnJldHVybiBlLmxlbmd0aD4yMDAmJiFlLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdCE9dHlwZW9mIGVbMF19KSk/WyJmaWx0ZXItaW4tbGFyZ2UiLHQsWyJsaXRlcmFsIixlLnNvcnQobG4pXV06WyJmaWx0ZXItaW4tc21hbGwiLHQsWyJsaXRlcmFsIixlXV19fWZ1bmN0aW9uIGhuKHQpe3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm4hMDtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaGFzLWlkIl07ZGVmYXVsdDpyZXR1cm5bImZpbHRlci1oYXMiLHRdfX1mdW5jdGlvbiBwbih0KXtyZXR1cm5bIiEiLHRdfWZ1bmN0aW9uIGRuKHQpe3JldHVybiBhbih6dCh0LnZhbHVlKSk/cm4oSXQoe30sdCx7ZXhwcmVzc2lvbkNvbnRleHQ6ImZpbHRlciIsdmFsdWVTcGVjOnt2YWx1ZToiYm9vbGVhbiJ9fSkpOmZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS52YWx1ZSxuPWUua2V5O2lmKCJhcnJheSIhPT1GcihyKSlyZXR1cm5bbmV3IEN0KG4sciwiYXJyYXkgZXhwZWN0ZWQsICIrRnIocikrIiBmb3VuZCIpXTt2YXIgaSxhPWUuc3R5bGVTcGVjLG89W107aWYoci5sZW5ndGg8MSlyZXR1cm5bbmV3IEN0KG4sciwiZmlsdGVyIGFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCAxIGVsZW1lbnQiKV07c3dpdGNoKG89by5jb25jYXQobm4oe2tleTpuKyJbMF0iLHZhbHVlOnJbMF0sdmFsdWVTcGVjOmEuZmlsdGVyX29wZXJhdG9yLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpLE90KHJbMF0pKXtjYXNlIjwiOmNhc2UiPD0iOmNhc2UiPiI6Y2FzZSI+PSI6ci5sZW5ndGg+PTImJiIkdHlwZSI9PT1PdChyWzFdKSYmby5wdXNoKG5ldyBDdChuLHIsJyIkdHlwZSIgY2Fubm90IGJlIHVzZSB3aXRoIG9wZXJhdG9yICInK3JbMF0rJyInKSk7Y2FzZSI9PSI6Y2FzZSIhPSI6MyE9PXIubGVuZ3RoJiZvLnB1c2gobmV3IEN0KG4sciwnZmlsdGVyIGFycmF5IGZvciBvcGVyYXRvciAiJytyWzBdKyciIG11c3QgaGF2ZSAzIGVsZW1lbnRzJykpO2Nhc2UiaW4iOmNhc2UiIWluIjpyLmxlbmd0aD49MiYmInN0cmluZyIhPT0oaT1GcihyWzFdKSkmJm8ucHVzaChuZXcgQ3QobisiWzFdIixyWzFdLCJzdHJpbmcgZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2Zvcih2YXIgcz0yO3M8ci5sZW5ndGg7cysrKWk9RnIocltzXSksIiR0eXBlIj09PU90KHJbMV0pP289by5jb25jYXQobm4oe2tleTpuKyJbIitzKyJdIix2YWx1ZTpyW3NdLHZhbHVlU3BlYzphLmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6InN0cmluZyIhPT1pJiYibnVtYmVyIiE9PWkmJiJib29sZWFuIiE9PWkmJm8ucHVzaChuZXcgQ3QobisiWyIrcysiXSIscltzXSwic3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4gZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2JyZWFrO2Nhc2UiYW55IjpjYXNlImFsbCI6Y2FzZSJub25lIjpmb3IodmFyIGw9MTtsPHIubGVuZ3RoO2wrKylvPW8uY29uY2F0KHQoe2tleTpuKyJbIitsKyJdIix2YWx1ZTpyW2xdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2UiaGFzIjpjYXNlIiFoYXMiOmk9RnIoclsxXSksMiE9PXIubGVuZ3RoP28ucHVzaChuZXcgQ3QobixyLCdmaWx0ZXIgYXJyYXkgZm9yICInK3JbMF0rJyIgb3BlcmF0b3IgbXVzdCBoYXZlIDIgZWxlbWVudHMnKSk6InN0cmluZyIhPT1pJiZvLnB1c2gobmV3IEN0KG4rIlsxXSIsclsxXSwic3RyaW5nIGV4cGVjdGVkLCAiK2krIiBmb3VuZCIpKTticmVhaztjYXNlIndpdGhpbiI6aT1GcihyWzFdKSwyIT09ci5sZW5ndGg/by5wdXNoKG5ldyBDdChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgIicrclswXSsnIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKToib2JqZWN0IiE9PWkmJm8ucHVzaChuZXcgQ3QobisiWzFdIixyWzFdLCJvYmplY3QgZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpfXJldHVybiBvfSh0KX1mdW5jdGlvbiBtbih0LGUpe3ZhciByPXQua2V5LG49dC5zdHlsZSxpPXQuc3R5bGVTcGVjLGE9dC52YWx1ZSxvPXQub2JqZWN0S2V5LHM9aVtlKyJfIit0LmxheWVyVHlwZV07aWYoIXMpcmV0dXJuW107dmFyIGw9by5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtpZigicGFpbnQiPT09ZSYmbCYmc1tsWzFdXSYmc1tsWzFdXS50cmFuc2l0aW9uKXJldHVybiBrbih7a2V5OnIsdmFsdWU6YSx2YWx1ZVNwZWM6aS50cmFuc2l0aW9uLHN0eWxlOm4sc3R5bGVTcGVjOml9KTt2YXIgYyx1PXQudmFsdWVTcGVjfHxzW29dO2lmKCF1KXJldHVybltuZXcgQ3QocixhLCd1bmtub3duIHByb3BlcnR5ICInK28rJyInKV07aWYoInN0cmluZyI9PT1GcihhKSYmenIodSkmJiF1LnRva2VucyYmKGM9L157KFtefV0rKX0kLy5leGVjKGEpKSlyZXR1cm5bbmV3IEN0KHIsYSwnIicrbysnIiBkb2VzIG5vdCBzdXBwb3J0IGludGVycG9sYXRpb24gc3ludGF4XG5Vc2UgYW4gaWRlbnRpdHkgcHJvcGVydHkgZnVuY3Rpb24gaW5zdGVhZDogYHsgInR5cGUiOiAiaWRlbnRpdHkiLCAicHJvcGVydHkiOiAnK0pTT04uc3RyaW5naWZ5KGNbMV0pKyIgfWAuIildO3ZhciBmPVtdO3JldHVybiJzeW1ib2wiPT09dC5sYXllclR5cGUmJigidGV4dC1maWVsZCI9PT1vJiZuJiYhbi5nbHlwaHMmJmYucHVzaChuZXcgQ3QocixhLCd1c2Ugb2YgInRleHQtZmllbGQiIHJlcXVpcmVzIGEgc3R5bGUgImdseXBocyIgcHJvcGVydHknKSksInRleHQtZm9udCI9PT1vJiZCcih6dChhKSkmJiJpZGVudGl0eSI9PT1PdChhLnR5cGUpJiZmLnB1c2gobmV3IEN0KHIsYSwnInRleHQtZm9udCIgZG9lcyBub3Qgc3VwcG9ydCBpZGVudGl0eSBmdW5jdGlvbnMnKSkpLGYuY29uY2F0KGtuKHtrZXk6dC5rZXksdmFsdWU6YSx2YWx1ZVNwZWM6dSxzdHlsZTpuLHN0eWxlU3BlYzppLGV4cHJlc3Npb25Db250ZXh0OiJwcm9wZXJ0eSIscHJvcGVydHlUeXBlOmUscHJvcGVydHlLZXk6b30pKX1mdW5jdGlvbiBnbih0KXtyZXR1cm4gbW4odCwicGFpbnQiKX1mdW5jdGlvbiB2bih0KXtyZXR1cm4gbW4odCwibGF5b3V0Iil9ZnVuY3Rpb24geW4odCl7dmFyIGU9W10scj10LnZhbHVlLG49dC5rZXksaT10LnN0eWxlLGE9dC5zdHlsZVNwZWM7ci50eXBlfHxyLnJlZnx8ZS5wdXNoKG5ldyBDdChuLHIsJ2VpdGhlciAidHlwZSIgb3IgInJlZiIgaXMgcmVxdWlyZWQnKSk7dmFyIG8scz1PdChyLnR5cGUpLGw9T3Qoci5yZWYpO2lmKHIuaWQpZm9yKHZhciBjPU90KHIuaWQpLHU9MDt1PHQuYXJyYXlJbmRleDt1Kyspe3ZhciBmPWkubGF5ZXJzW3VdO090KGYuaWQpPT09YyYmZS5wdXNoKG5ldyBDdChuLHIuaWQsJ2R1cGxpY2F0ZSBsYXllciBpZCAiJytyLmlkKyciLCBwcmV2aW91c2x5IHVzZWQgYXQgbGluZSAnK2YuaWQuX19saW5lX18pKX1pZigicmVmImluIHIpWyJ0eXBlIiwic291cmNlIiwic291cmNlLWxheWVyIiwiZmlsdGVyIiwibGF5b3V0Il0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IEN0KG4sclt0XSwnIicrdCsnIiBpcyBwcm9oaWJpdGVkIGZvciByZWYgbGF5ZXJzJykpfSkpLGkubGF5ZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe090KHQuaWQpPT09bCYmKG89dCl9KSksbz9vLnJlZj9lLnB1c2gobmV3IEN0KG4sci5yZWYsInJlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyIikpOnM9T3Qoby50eXBlKTplLnB1c2gobmV3IEN0KG4sci5yZWYsJ3JlZiBsYXllciAiJytsKyciIG5vdCBmb3VuZCcpKTtlbHNlIGlmKCJiYWNrZ3JvdW5kIiE9PXMpaWYoci5zb3VyY2Upe3ZhciBoPWkuc291cmNlcyYmaS5zb3VyY2VzW3Iuc291cmNlXSxwPWgmJk90KGgudHlwZSk7aD8idmVjdG9yIj09PXAmJiJyYXN0ZXIiPT09cz9lLnB1c2gobmV3IEN0KG4sci5zb3VyY2UsJ2xheWVyICInK3IuaWQrJyIgcmVxdWlyZXMgYSByYXN0ZXIgc291cmNlJykpOiJyYXN0ZXIiPT09cCYmInJhc3RlciIhPT1zP2UucHVzaChuZXcgQ3QobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2UnKSk6InZlY3RvciIhPT1wfHxyWyJzb3VyY2UtbGF5ZXIiXT8icmFzdGVyLWRlbSI9PT1wJiYiaGlsbHNoYWRlIiE9PXM/ZS5wdXNoKG5ldyBDdChuLHIuc291cmNlLCJyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSAnaGlsbHNoYWRlJy4iKSk6ImxpbmUiIT09c3x8IXIucGFpbnR8fCFyLnBhaW50WyJsaW5lLWdyYWRpZW50Il18fCJnZW9qc29uIj09PXAmJmgubGluZU1ldHJpY3N8fGUucHVzaChuZXcgQ3QobixyLCdsYXllciAiJytyLmlkKyciIHNwZWNpZmllcyBhIGxpbmUtZ3JhZGllbnQsIHdoaWNoIHJlcXVpcmVzIGEgR2VvSlNPTiBzb3VyY2Ugd2l0aCBgbGluZU1ldHJpY3NgIGVuYWJsZWQuJykpOmUucHVzaChuZXcgQ3QobixyLCdsYXllciAiJytyLmlkKyciIG11c3Qgc3BlY2lmeSBhICJzb3VyY2UtbGF5ZXIiJykpOmUucHVzaChuZXcgQ3QobixyLnNvdXJjZSwnc291cmNlICInK3Iuc291cmNlKyciIG5vdCBmb3VuZCcpKX1lbHNlIGUucHVzaChuZXcgQ3QobixyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzb3VyY2UiJykpO3JldHVybiBlPWUuY29uY2F0KFFyKHtrZXk6bix2YWx1ZTpyLHZhbHVlU3BlYzphLmxheWVyLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBrbih7a2V5Om4rIi50eXBlIix2YWx1ZTpyLnR5cGUsdmFsdWVTcGVjOmEubGF5ZXIudHlwZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3Q6cixvYmplY3RLZXk6InR5cGUifSl9LGZpbHRlcjpkbixsYXlvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIFFyKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24odCl7cmV0dXJuIHZuKEl0KHtsYXllclR5cGU6c30sdCkpfX19KX0scGFpbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIFFyKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24odCl7cmV0dXJuIGduKEl0KHtsYXllclR5cGU6c30sdCkpfX19KX19fSkpfWZ1bmN0aW9uIHhuKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPUZyKGUpO3JldHVybiJzdHJpbmciIT09bj9bbmV3IEN0KHIsZSwic3RyaW5nIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpbXX12YXIgYm49e3Byb21vdGVJZDpmdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWU7aWYoInN0cmluZyI9PT1GcihyKSlyZXR1cm4geG4oe2tleTplLHZhbHVlOnJ9KTt2YXIgbj1bXTtmb3IodmFyIGkgaW4gciluLnB1c2guYXBwbHkobix4bih7a2V5OmUrIi4iK2ksdmFsdWU6cltpXX0pKTtyZXR1cm4gbn19O2Z1bmN0aW9uIF9uKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXQuc3R5bGVTcGVjLGk9dC5zdHlsZTtpZighZS50eXBlKXJldHVybltuZXcgQ3QocixlLCcidHlwZSIgaXMgcmVxdWlyZWQnKV07dmFyIGEsbz1PdChlLnR5cGUpO3N3aXRjaChvKXtjYXNlInZlY3RvciI6Y2FzZSJyYXN0ZXIiOmNhc2UicmFzdGVyLWRlbSI6cmV0dXJuIGE9UXIoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm5bInNvdXJjZV8iK28ucmVwbGFjZSgiLSIsIl8iKV0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6bixvYmplY3RFbGVtZW50VmFsaWRhdG9yczpibn0pO2Nhc2UiZ2VvanNvbiI6aWYoYT1Rcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfZ2VvanNvbixzdHlsZTppLHN0eWxlU3BlYzpuLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOmJufSksZS5jbHVzdGVyKWZvcih2YXIgcyBpbiBlLmNsdXN0ZXJQcm9wZXJ0aWVzKXt2YXIgbD1lLmNsdXN0ZXJQcm9wZXJ0aWVzW3NdLGM9bFswXSx1PWxbMV0sZj0ic3RyaW5nIj09dHlwZW9mIGM/W2MsWyJhY2N1bXVsYXRlZCJdLFsiZ2V0IixzXV06YzthLnB1c2guYXBwbHkoYSxybih7a2V5OnIrIi4iK3MrIi5tYXAiLHZhbHVlOnUsZXhwcmVzc2lvbkNvbnRleHQ6ImNsdXN0ZXItbWFwIn0pKSxhLnB1c2guYXBwbHkoYSxybih7a2V5OnIrIi4iK3MrIi5yZWR1Y2UiLHZhbHVlOmYsZXhwcmVzc2lvbkNvbnRleHQ6ImNsdXN0ZXItcmVkdWNlIn0pKX1yZXR1cm4gYTtjYXNlInZpZGVvIjpyZXR1cm4gUXIoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX3ZpZGVvLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlImltYWdlIjpyZXR1cm4gUXIoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2ltYWdlLHN0eWxlOmksc3R5bGVTcGVjOm59KTtjYXNlImNhbnZhcyI6cmV0dXJuW25ldyBDdChyLG51bGwsIlBsZWFzZSB1c2UgcnVudGltZSBBUElzIHRvIGFkZCBjYW52YXMgc291cmNlcywgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIHRoZW0gaW4gc3R5bGVzaGVldHMuIiwic291cmNlLmNhbnZhcyIpXTtkZWZhdWx0OnJldHVybiBubih7a2V5OnIrIi50eXBlIix2YWx1ZTplLnR5cGUsdmFsdWVTcGVjOnt2YWx1ZXM6WyJ2ZWN0b3IiLCJyYXN0ZXIiLCJyYXN0ZXItZGVtIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiXX0sc3R5bGU6aSxzdHlsZVNwZWM6bn0pfX1mdW5jdGlvbiB3bih0KXt2YXIgZT10LnZhbHVlLHI9dC5zdHlsZVNwZWMsbj1yLmxpZ2h0LGk9dC5zdHlsZSxhPVtdLG89RnIoZSk7aWYodm9pZCAwPT09ZSlyZXR1cm4gYTtpZigib2JqZWN0IiE9PW8pcmV0dXJuIGE9YS5jb25jYXQoW25ldyBDdCgibGlnaHQiLGUsIm9iamVjdCBleHBlY3RlZCwgIitvKyIgZm91bmQiKV0pO2Zvcih2YXIgcyBpbiBlKXt2YXIgbD1zLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2E9bCYmbltsWzFdXSYmbltsWzFdXS50cmFuc2l0aW9uP2EuY29uY2F0KGtuKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpyLnRyYW5zaXRpb24sc3R5bGU6aSxzdHlsZVNwZWM6cn0pKTpuW3NdP2EuY29uY2F0KGtuKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpuW3NdLHN0eWxlOmksc3R5bGVTcGVjOnJ9KSk6YS5jb25jYXQoW25ldyBDdChzLGVbc10sJ3Vua25vd24gcHJvcGVydHkgIicrcysnIicpXSl9cmV0dXJuIGF9dmFyIFRuPXsiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXJyYXk6JHIsYm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1GcihlKTtyZXR1cm4iYm9vbGVhbiIhPT1uP1tuZXcgQ3QocixlLCJib29sZWFuIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpbXX0sbnVtYmVyOnRuLGNvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPUZyKHIpO3JldHVybiJzdHJpbmciIT09bj9bbmV3IEN0KGUsciwiY29sb3IgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOm51bGw9PT0kdChyKT9bbmV3IEN0KGUsciwnY29sb3IgZXhwZWN0ZWQsICInK3IrJyIgZm91bmQnKV06W119LGNvbnN0YW50czpQdCxlbnVtOm5uLGZpbHRlcjpkbixmdW5jdGlvbjplbixsYXllcjp5bixvYmplY3Q6UXIsc291cmNlOl9uLGxpZ2h0OnduLHN0cmluZzp4bixmb3JtYXR0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT14bih0KS5sZW5ndGg/W106cm4odCl9LHJlc29sdmVkSW1hZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT14bih0KS5sZW5ndGg/W106cm4odCl9fTtmdW5jdGlvbiBrbih0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbj10LnN0eWxlU3BlYztyZXR1cm4gci5leHByZXNzaW9uJiZCcihPdChlKSk/ZW4odCk6ci5leHByZXNzaW9uJiZZcih6dChlKSk/cm4odCk6ci50eXBlJiZUbltyLnR5cGVdP1RuW3IudHlwZV0odCk6UXIoSXQoe30sdCx7dmFsdWVTcGVjOnIudHlwZT9uW3IudHlwZV06cn0pKX1mdW5jdGlvbiBBbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj14bih0KTtyZXR1cm4gbi5sZW5ndGh8fCgtMT09PWUuaW5kZXhPZigie2ZvbnRzdGFja30iKSYmbi5wdXNoKG5ldyBDdChyLGUsJyJnbHlwaHMiIHVybCBtdXN0IGluY2x1ZGUgYSAie2ZvbnRzdGFja30iIHRva2VuJykpLC0xPT09ZS5pbmRleE9mKCJ7cmFuZ2V9IikmJm4ucHVzaChuZXcgQ3QocixlLCciZ2x5cGhzIiB1cmwgbXVzdCBpbmNsdWRlIGEgIntyYW5nZX0iIHRva2VuJykpKSxufWZ1bmN0aW9uIE1uKHQsZSl7dm9pZCAwPT09ZSYmKGU9THQpO3ZhciByPVtdO3JldHVybiByPXIuY29uY2F0KGtuKHtrZXk6IiIsdmFsdWU6dCx2YWx1ZVNwZWM6ZS4kcm9vdCxzdHlsZVNwZWM6ZSxzdHlsZTp0LG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntnbHlwaHM6QW4sIioiOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0pKSx0LmNvbnN0YW50cyYmKHI9ci5jb25jYXQoUHQoe2tleToiY29uc3RhbnRzIix2YWx1ZTp0LmNvbnN0YW50cyxzdHlsZTp0LHN0eWxlU3BlYzplfSkpKSxTbihyKX1mdW5jdGlvbiBTbih0KXtyZXR1cm5bXS5jb25jYXQodCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5lLWUubGluZX0pKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuIFNuKHQuYXBwbHkodGhpcyxlKSl9fU1uLnNvdXJjZT1FbihfbiksTW4ubGlnaHQ9RW4od24pLE1uLmxheWVyPUVuKHluKSxNbi5maWx0ZXI9RW4oZG4pLE1uLnBhaW50UHJvcGVydHk9RW4oZ24pLE1uLmxheW91dFByb3BlcnR5PUVuKHZuKTt2YXIgTG49TW4sQ249TG4ubGlnaHQsUG49TG4ucGFpbnRQcm9wZXJ0eSxJbj1Mbi5sYXlvdXRQcm9wZXJ0eTtmdW5jdGlvbiBPbih0LGUpe3ZhciByPSExO2lmKGUmJmUubGVuZ3RoKWZvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dC5maXJlKG5ldyBTdChuZXcgRXJyb3IoYS5tZXNzYWdlKSkpLHI9ITB9cmV0dXJuIHJ9dmFyIHpuPURuO2Z1bmN0aW9uIERuKHQsZSxyKXt2YXIgbj10aGlzLmNlbGxzPVtdO2lmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7dGhpcy5hcnJheUJ1ZmZlcj10O3ZhciBpPW5ldyBJbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO3Q9aVswXSxlPWlbMV0scj1pWzJdLHRoaXMuZD1lKzIqcjtmb3IodmFyIGE9MDthPHRoaXMuZCp0aGlzLmQ7YSsrKXt2YXIgbz1pWzMrYV0scz1pWzMrYSsxXTtuLnB1c2gobz09PXM/bnVsbDppLnN1YmFycmF5KG8scykpfXZhciBsPWlbMytuLmxlbmd0aF0sYz1pWzMrbi5sZW5ndGgrMV07dGhpcy5rZXlzPWkuc3ViYXJyYXkobCxjKSx0aGlzLmJib3hlcz1pLnN1YmFycmF5KGMpLHRoaXMuaW5zZXJ0PXRoaXMuX2luc2VydFJlYWRvbmx5fWVsc2V7dGhpcy5kPWUrMipyO2Zvcih2YXIgdT0wO3U8dGhpcy5kKnRoaXMuZDt1Kyspbi5wdXNoKFtdKTt0aGlzLmtleXM9W10sdGhpcy5iYm94ZXM9W119dGhpcy5uPWUsdGhpcy5leHRlbnQ9dCx0aGlzLnBhZGRpbmc9cix0aGlzLnNjYWxlPWUvdCx0aGlzLnVpZD0wO3ZhciBmPXIvZSp0O3RoaXMubWluPS1mLHRoaXMubWF4PXQrZn1Ebi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LERuLnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHk9ZnVuY3Rpb24oKXt0aHJvdyJDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLiJ9LERuLnByb3RvdHlwZS5faW5zZXJ0Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jZWxsc1tpXS5wdXNoKGEpfSxEbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLm1pbixvPXRoaXMubWF4O2lmKHQ8PWEmJmU8PWEmJm88PXImJm88PW4mJiFpKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO3ZhciBzPVtdO3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxzLHt9LGkpLHN9LERuLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5jZWxsc1tpXTtpZihudWxsIT09bClmb3IodmFyIGM9dGhpcy5rZXlzLHU9dGhpcy5iYm94ZXMsZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgaD1sW2ZdO2lmKHZvaWQgMD09PW9baF0pe3ZhciBwPTQqaDsocz9zKHVbcCswXSx1W3ArMV0sdVtwKzJdLHVbcCszXSk6dDw9dVtwKzJdJiZlPD11W3ArM10mJnI+PXVbcCswXSYmbj49dVtwKzFdKT8ob1toXT0hMCxhLnB1c2goY1toXSkpOm9baF09ITF9fX0sRG4ucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQodCksYz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQociksZj10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQobiksaD1sO2g8PXU7aCsrKWZvcih2YXIgcD1jO3A8PWY7cCsrKXt2YXIgZD10aGlzLmQqcCtoO2lmKCghc3x8cyh0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChoKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChwKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChoKzEpLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHArMSkpKSYmaS5jYWxsKHRoaXMsdCxlLHIsbixkLGEsbyxzKSlyZXR1cm59fSxEbi5wcm90b3R5cGUuX2NvbnZlcnRGcm9tQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMucGFkZGluZykvdGhpcy5zY2FsZX0sRG4ucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSxEbi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT0zK3RoaXMuY2VsbHMubGVuZ3RoKzErMSxyPTAsbj0wO248dGhpcy5jZWxscy5sZW5ndGg7bisrKXIrPXRoaXMuY2VsbHNbbl0ubGVuZ3RoO3ZhciBpPW5ldyBJbnQzMkFycmF5KGUrcit0aGlzLmtleXMubGVuZ3RoK3RoaXMuYmJveGVzLmxlbmd0aCk7aVswXT10aGlzLmV4dGVudCxpWzFdPXRoaXMubixpWzJdPXRoaXMucGFkZGluZztmb3IodmFyIGE9ZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aVszK29dPWEsaS5zZXQocyxhKSxhKz1zLmxlbmd0aH1yZXR1cm4gaVszK3QubGVuZ3RoXT1hLGkuc2V0KHRoaXMua2V5cyxhKSxhKz10aGlzLmtleXMubGVuZ3RoLGlbMyt0Lmxlbmd0aCsxXT1hLGkuc2V0KHRoaXMuYmJveGVzLGEpLGErPXRoaXMuYmJveGVzLmxlbmd0aCxpLmJ1ZmZlcn07dmFyIFJuPXNlbGYuSW1hZ2VEYXRhLEZuPXNlbGYuSW1hZ2VCaXRtYXAsQm49e307ZnVuY3Rpb24gTm4odCxlLHIpe3ZvaWQgMD09PXImJihyPXt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2NsYXNzUmVnaXN0cnlLZXkiLHt2YWx1ZTp0LHdyaXRlYWJsZTohMX0pLEJuW3RdPXtrbGFzczplLG9taXQ6ci5vbWl0fHxbXSxzaGFsbG93OnIuc2hhbGxvd3x8W119fWZvcih2YXIgam4gaW4gTm4oIk9iamVjdCIsT2JqZWN0KSx6bi5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvQXJyYXlCdWZmZXIoKTtyZXR1cm4gZSYmZS5wdXNoKHIpLHtidWZmZXI6cn19LHpuLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgem4odC5idWZmZXIpfSxObigiR3JpZCIsem4pLE5uKCJDb2xvciIsdGUpLE5uKCJFcnJvciIsRXJyb3IpLE5uKCJSZXNvbHZlZEltYWdlIixpZSksTm4oIlN0eWxlUHJvcGVydHlGdW5jdGlvbiIsS3IpLE5uKCJTdHlsZUV4cHJlc3Npb24iLEdyLHtvbWl0OlsiX2V2YWx1YXRvciJdfSksTm4oIlpvb21EZXBlbmRlbnRFeHByZXNzaW9uIixaciksTm4oIlpvb21Db25zdGFudEV4cHJlc3Npb24iLFhyKSxObigiQ29tcG91bmRFeHByZXNzaW9uIix4ZSx7b21pdDpbIl9ldmFsdWF0ZSJdfSksU3IpU3Jbam5dLl9jbGFzc1JlZ2lzdHJ5S2V5fHxObigiRXhwcmVzc2lvbl8iK2puLFNyW2puXSk7ZnVuY3Rpb24gVW4odCl7cmV0dXJuIHQmJiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fHQuY29uc3RydWN0b3ImJiJBcnJheUJ1ZmZlciI9PT10LmNvbnN0cnVjdG9yLm5hbWUpfWZ1bmN0aW9uIFZuKHQpe3JldHVybiBGbiYmdCBpbnN0YW5jZW9mIEZufWZ1bmN0aW9uIEhuKHQsZSl7aWYobnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gdDtpZihVbih0KXx8Vm4odCkpcmV0dXJuIGUmJmUucHVzaCh0KSx0O2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSl7dmFyIHI9dDtyZXR1cm4gZSYmZS5wdXNoKHIuYnVmZmVyKSxyfWlmKHQgaW5zdGFuY2VvZiBSbilyZXR1cm4gZSYmZS5wdXNoKHQuZGF0YS5idWZmZXIpLHQ7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPVtdLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24ucHVzaChIbihvLGUpKX1yZXR1cm4gbn1pZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBzPXQuY29uc3RydWN0b3IsbD1zLl9jbGFzc1JlZ2lzdHJ5S2V5O2lmKCFsKXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB1bnJlZ2lzdGVyZWQgY2xhc3MiKTt2YXIgYz1zLnNlcmlhbGl6ZT9zLnNlcmlhbGl6ZSh0LGUpOnt9O2lmKCFzLnNlcmlhbGl6ZSl7Zm9yKHZhciB1IGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eSh1KSYmIShCbltsXS5vbWl0LmluZGV4T2YodSk+PTApKXt2YXIgZj10W3VdO2NbdV09Qm5bbF0uc2hhbGxvdy5pbmRleE9mKHUpPj0wP2Y6SG4oZixlKX10IGluc3RhbmNlb2YgRXJyb3ImJihjLm1lc3NhZ2U9dC5tZXNzYWdlKX1pZihjLiRuYW1lKXRocm93IG5ldyBFcnJvcigiJG5hbWUgcHJvcGVydHkgaXMgcmVzZXJ2ZWQgZm9yIHdvcmtlciBzZXJpYWxpemF0aW9uIGxvZ2ljLiIpO3JldHVybiJPYmplY3QiIT09bCYmKGMuJG5hbWU9bCksY310aHJvdyBuZXcgRXJyb3IoImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAiK3R5cGVvZiB0KX1mdW5jdGlvbiBxbih0KXtpZihudWxsPT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIEJvb2xlYW58fHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBEYXRlfHx0IGluc3RhbmNlb2YgUmVnRXhwfHxVbih0KXx8Vm4odCl8fEFycmF5QnVmZmVyLmlzVmlldyh0KXx8dCBpbnN0YW5jZW9mIFJuKXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQubWFwKHFuKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlPXQuJG5hbWV8fCJPYmplY3QiLHI9Qm5bZV0ua2xhc3M7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBkZXNlcmlhbGl6ZSB1bnJlZ2lzdGVyZWQgY2xhc3MgIitlKTtpZihyLmRlc2VyaWFsaXplKXJldHVybiByLmRlc2VyaWFsaXplKHQpO2Zvcih2YXIgbj1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlKSxpPTAsYT1PYmplY3Qua2V5cyh0KTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07aWYoIiRuYW1lIiE9PW8pe3ZhciBzPXRbb107bltvXT1CbltlXS5zaGFsbG93LmluZGV4T2Yobyk+PTA/czpxbihzKX19cmV0dXJuIG59dGhyb3cgbmV3IEVycm9yKCJjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAiK3R5cGVvZiB0KX12YXIgR249ZnVuY3Rpb24oKXt0aGlzLmZpcnN0PSEwfTtHbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5mbG9vcih0KTtyZXR1cm4gdGhpcy5maXJzdD8odGhpcy5maXJzdD0hMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT0wLHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCk6KHRoaXMubGFzdEZsb29yWm9vbT5yPyh0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yKzEsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpOnRoaXMubGFzdEZsb29yWm9vbTxyJiYodGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSksdCE9PXRoaXMubGFzdFpvb20mJih0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApKX07dmFyIFluPXsiTGF0aW4tMSBTdXBwbGVtZW50IjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI4JiZ0PD0yNTV9LEFyYWJpYzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTUzNiYmdDw9MTc5MX0sIkFyYWJpYyBTdXBwbGVtZW50IjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTg3MiYmdDw9MTkxOX0sIkFyYWJpYyBFeHRlbmRlZC1BIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjIwOCYmdDw9MjMwM30sIkhhbmd1bCBKYW1vIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDM1MiYmdDw9NDYwN30sIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01MTIwJiZ0PD01NzU5fSxLaG1lcjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjAxNiYmdDw9NjE0M30sIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MzIwJiZ0PD02Mzk5fSwiR2VuZXJhbCBQdW5jdHVhdGlvbiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTgxOTImJnQ8PTgzMDN9LCJMZXR0ZXJsaWtlIFN5bWJvbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04NDQ4JiZ0PD04NTI3fSwiTnVtYmVyIEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODUyOCYmdDw9ODU5MX0sIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODk2MCYmdDw9OTIxNX0sIkNvbnRyb2wgUGljdHVyZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MjE2JiZ0PD05Mjc5fSwiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MjgwJiZ0PD05MzExfSwiRW5jbG9zZWQgQWxwaGFudW1lcmljcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkzMTImJnQ8PTk0NzF9LCJHZW9tZXRyaWMgU2hhcGVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTYzMiYmdDw9OTcyN30sIk1pc2NlbGxhbmVvdXMgU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk3MjgmJnQ8PTk5ODN9LCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExMDA4JiZ0PD0xMTI2M30sIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTE5MDQmJnQ8PTEyMDMxfSwiS2FuZ3hpIFJhZGljYWxzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIwMzImJnQ8PTEyMjU1fSwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMjcyJiZ0PD0xMjI4N30sIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMjg4JiZ0PD0xMjM1MX0sSGlyYWdhbmE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMzUyJiZ0PD0xMjQ0N30sS2F0YWthbmE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNDQ4JiZ0PD0xMjU0M30sQm9wb21vZm86ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNTQ0JiZ0PD0xMjU5MX0sIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU5MiYmdDw9MTI2ODd9LEthbmJ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI2ODgmJnQ8PTEyNzAzfSwiQm9wb21vZm8gRXh0ZW5kZWQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjcwNCYmdDw9MTI3MzV9LCJDSksgU3Ryb2tlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzM2JiZ0PD0xMjc4M30sIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjc4NCYmdDw9MTI3OTl9LCJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI4MDAmJnQ8PTEzMDU1fSwiQ0pLIENvbXBhdGliaWxpdHkiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMzA1NiYmdDw9MTMzMTF9LCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMzMTImJnQ8PTE5OTAzfSwiWWlqaW5nIEhleGFncmFtIFN5bWJvbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTkwNCYmdDw9MTk5Njd9LCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTk5NjgmJnQ8PTQwOTU5fSwiWWkgU3lsbGFibGVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDA5NjAmJnQ8PTQyMTI3fSwiWWkgUmFkaWNhbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MjEyOCYmdDw9NDIxOTF9LCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDMzNjAmJnQ8PTQzMzkxfSwiSGFuZ3VsIFN5bGxhYmxlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQ0MDMyJiZ0PD01NTIxNX0sIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUIiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NTIxNiYmdDw9NTUyOTV9LCJQcml2YXRlIFVzZSBBcmVhIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTczNDQmJnQ8PTYzNzQzfSwiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzNzQ0JiZ0PD02NDI1NX0sIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY0MzM2JiZ0PD02NTAyM30sIlZlcnRpY2FsIEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUwNDAmJnQ8PTY1MDU1fSwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA3MiYmdDw9NjUxMDN9LCJTbWFsbCBGb3JtIFZhcmlhbnRzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUxMDQmJnQ8PTY1MTM1fSwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUxMzYmJnQ8PTY1Mjc5fSwiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTI4MCYmdDw9NjU1MTl9fTtmdW5jdGlvbiBXbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXtpZihabihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFhuKHQpe3JldHVybiFZbi5BcmFiaWModCkmJighWW5bIkFyYWJpYyBTdXBwbGVtZW50Il0odCkmJighWW5bIkFyYWJpYyBFeHRlbmRlZC1BIl0odCkmJighWW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKHQpJiYhWW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKHQpKSkpfWZ1bmN0aW9uIFpuKHQpe3JldHVybiA3NDY9PT10fHw3NDc9PT10fHwhKHQ8NDM1MikmJighIVluWyJCb3BvbW9mbyBFeHRlbmRlZCJdKHQpfHwoISFZbi5Cb3BvbW9mbyh0KXx8KCEoIVluWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKHQpfHx0Pj02NTA5NyYmdDw9NjUxMDMpfHwoISFZblsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKHQpfHwoISFZblsiQ0pLIENvbXBhdGliaWxpdHkiXSh0KXx8KCEhWW5bIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0odCl8fCghIVluWyJDSksgU3Ryb2tlcyJdKHQpfHwoISghWW5bIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiJdKHQpfHx0Pj0xMjI5NiYmdDw9MTIzMDV8fHQ+PTEyMzA4JiZ0PD0xMjMxOXx8MTIzMzY9PT10KXx8KCEhWW5bIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiXSh0KXx8KCEhWW5bIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiXSh0KXx8KCEhWW5bIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiXSh0KXx8KCEhWW5bIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iXSh0KXx8KCEhWW5bIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUEiXSh0KXx8KCEhWW5bIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUIiXSh0KXx8KCEhWW5bIkhhbmd1bCBKYW1vIl0odCl8fCghIVluWyJIYW5ndWwgU3lsbGFibGVzIl0odCl8fCghIVluLkhpcmFnYW5hKHQpfHwoISFZblsiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyJdKHQpfHwoISFZbi5LYW5idW4odCl8fCghIVluWyJLYW5neGkgUmFkaWNhbHMiXSh0KXx8KCEhWW5bIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMiXSh0KXx8KCEoIVluLkthdGFrYW5hKHQpfHwxMjU0MD09PXQpfHwoISghWW5bIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fDY1Mjg4PT09dHx8NjUyODk9PT10fHw2NTI5Mz09PXR8fHQ+PTY1MzA2JiZ0PD02NTMxMHx8NjUzMzk9PT10fHw2NTM0MT09PXR8fDY1MzQzPT09dHx8dD49NjUzNzEmJnQ8PTY1NTAzfHw2NTUwNz09PXR8fHQ+PTY1NTEyJiZ0PD02NTUxOSl8fCghKCFZblsiU21hbGwgRm9ybSBWYXJpYW50cyJdKHQpfHx0Pj02NTExMiYmdDw9NjUxMTh8fHQ+PTY1MTIzJiZ0PD02NTEyNil8fCghIVluWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIl0odCl8fCghIVluWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIl0odCl8fCghIVluWyJWZXJ0aWNhbCBGb3JtcyJdKHQpfHwoISFZblsiWWlqaW5nIEhleGFncmFtIFN5bWJvbHMiXSh0KXx8KCEhWW5bIllpIFN5bGxhYmxlcyJdKHQpfHwhIVluWyJZaSBSYWRpY2FscyJdKHQpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSl9ZnVuY3Rpb24gSm4odCl7cmV0dXJuIShabih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISghWW5bIkxhdGluLTEgU3VwcGxlbWVudCJdKHQpfHwxNjchPT10JiYxNjkhPT10JiYxNzQhPT10JiYxNzchPT10JiYxODghPT10JiYxODkhPT10JiYxOTAhPT10JiYyMTUhPT10JiYyNDchPT10KXx8KCEoIVluWyJHZW5lcmFsIFB1bmN0dWF0aW9uIl0odCl8fDgyMTQhPT10JiY4MjI0IT09dCYmODIyNSE9PXQmJjgyNDAhPT10JiY4MjQxIT09dCYmODI1MSE9PXQmJjgyNTIhPT10JiY4MjU4IT09dCYmODI2MyE9PXQmJjgyNjQhPT10JiY4MjY1IT09dCYmODI3MyE9PXQpfHwoISFZblsiTGV0dGVybGlrZSBTeW1ib2xzIl0odCl8fCghIVluWyJOdW1iZXIgRm9ybXMiXSh0KXx8KCEoIVluWyJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCJdKHQpfHwhKHQ+PTg5NjAmJnQ8PTg5Njd8fHQ+PTg5NzImJnQ8PTg5OTF8fHQ+PTg5OTYmJnQ8PTllM3x8OTAwMz09PXR8fHQ+PTkwODUmJnQ8PTkxMTR8fHQ+PTkxNTAmJnQ8PTkxNjV8fDkxNjc9PT10fHx0Pj05MTY5JiZ0PD05MTc5fHx0Pj05MTg2JiZ0PD05MjE1KSl8fCghKCFZblsiQ29udHJvbCBQaWN0dXJlcyJdKHQpfHw5MjUxPT09dCl8fCghIVluWyJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiJdKHQpfHwoISFZblsiRW5jbG9zZWQgQWxwaGFudW1lcmljcyJdKHQpfHwoISFZblsiR2VvbWV0cmljIFNoYXBlcyJdKHQpfHwoISghWW5bIk1pc2NlbGxhbmVvdXMgU3ltYm9scyJdKHQpfHx0Pj05NzU0JiZ0PD05NzU5KXx8KCEoIVluWyJNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyJdKHQpfHwhKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpKXx8KCEhWW5bIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiJdKHQpfHwoISFZbi5LYXRha2FuYSh0KXx8KCEhWW5bIlByaXZhdGUgVXNlIEFyZWEiXSh0KXx8KCEhWW5bIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIl0odCl8fCghIVluWyJTbWFsbCBGb3JtIFZhcmlhbnRzIl0odCl8fCghIVluWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKHQpfHwoODczND09PXR8fDg3NTY9PT10fHw4NzU3PT09dHx8dD49OTk4NCYmdDw9MTAwODd8fHQ+PTEwMTAyJiZ0PD0xMDEzMXx8NjU1MzI9PT10fHw2NTUzMz09PXQpKSkpKSkpKSkpKSkpKSkpKX0odCkpfWZ1bmN0aW9uIEtuKHQpe3JldHVybiB0Pj0xNDI0JiZ0PD0yMzAzfHxZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCl8fFluWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXSh0KX1mdW5jdGlvbiBRbih0LGUpe3JldHVybiEoIWUmJktuKHQpKSYmISh0Pj0yMzA0JiZ0PD0zNTgzfHx0Pj0zODQwJiZ0PD00MjU1fHxZbi5LaG1lcih0KSl9ZnVuY3Rpb24gJG4odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7aWYoS24ocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgdGk9ImRlZmVycmVkIixlaT0ibG9hZGluZyIscmk9ImxvYWRlZCIsbmk9ImVycm9yIixpaT1udWxsLGFpPSJ1bmF2YWlsYWJsZSIsb2k9bnVsbCxzaT1mdW5jdGlvbih0KXt0JiYic3RyaW5nIj09dHlwZW9mIHQmJnQuaW5kZXhPZigiTmV0d29ya0Vycm9yIik+LTEmJihhaT1uaSksaWkmJmlpKHQpfTtmdW5jdGlvbiBsaSgpe2NpLmZpcmUobmV3IE10KCJwbHVnaW5TdGF0ZUNoYW5nZSIse3BsdWdpblN0YXR1czphaSxwbHVnaW5VUkw6b2l9KSl9dmFyIGNpPW5ldyBFdCx1aT1mdW5jdGlvbigpe3JldHVybiBhaX0sZmk9ZnVuY3Rpb24oKXtpZihhaSE9PXRpfHwhb2kpdGhyb3cgbmV3IEVycm9yKCJydGwtdGV4dC1wbHVnaW4gY2Fubm90IGJlIGRvd25sb2FkZWQgdW5sZXNzIGEgcGx1Z2luVVJMIGlzIHNwZWNpZmllZCIpO2FpPWVpLGxpKCksb2kmJnh0KHt1cmw6b2l9LChmdW5jdGlvbih0KXt0P3NpKHQpOihhaT1yaSxsaSgpKX0pKX0saGk9e2FwcGx5QXJhYmljU2hhcGluZzpudWxsLHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDpudWxsLHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dDpudWxsLGlzTG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGFpPT09cml8fG51bGwhPWhpLmFwcGx5QXJhYmljU2hhcGluZ30saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGFpPT09ZWl9LHNldFN0YXRlOmZ1bmN0aW9uKHQpe2FpPXQucGx1Z2luU3RhdHVzLG9pPXQucGx1Z2luVVJMfSxpc1BhcnNlZDpmdW5jdGlvbigpe3JldHVybiBudWxsIT1oaS5hcHBseUFyYWJpY1NoYXBpbmcmJm51bGwhPWhpLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCYmbnVsbCE9aGkucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0fSxnZXRQbHVnaW5VUkw6ZnVuY3Rpb24oKXtyZXR1cm4gb2l9fSxwaT1mdW5jdGlvbih0LGUpe3RoaXMuem9vbT10LGU/KHRoaXMubm93PWUubm93LHRoaXMuZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuem9vbUhpc3Rvcnk9ZS56b29tSGlzdG9yeSx0aGlzLnRyYW5zaXRpb249ZS50cmFuc2l0aW9uKToodGhpcy5ub3c9MCx0aGlzLmZhZGVEdXJhdGlvbj0wLHRoaXMuem9vbUhpc3Rvcnk9bmV3IEduLHRoaXMudHJhbnNpdGlvbj17fSl9O3BpLnByb3RvdHlwZS5pc1N1cHBvcnRlZFNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXtpZighUW4obltyXS5jaGFyQ29kZUF0KDApLGUpKXJldHVybiExfXJldHVybiEwfSh0LGhpLmlzTG9hZGVkKCkpfSxwaS5wcm90b3R5cGUuY3Jvc3NGYWRpbmdGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6TWF0aC5taW4oKHRoaXMubm93LXRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkvdGhpcy5mYWRlRHVyYXRpb24sMSl9LHBpLnByb3RvdHlwZS5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy56b29tLGU9dC1NYXRoLmZsb29yKHQpLHI9dGhpcy5jcm9zc0ZhZGluZ0ZhY3RvcigpO3JldHVybiB0PnRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tU2NhbGU6Mix0b1NjYWxlOjEsdDplKygxLWUpKnJ9Ontmcm9tU2NhbGU6LjUsdG9TY2FsZToxLHQ6MS0oMS1yKSplfX07dmFyIGRpPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmV4cHJlc3Npb249ZnVuY3Rpb24odCxlKXtpZihCcih0KSlyZXR1cm4gbmV3IEtyKHQsZSk7aWYoWXIodCkpe3ZhciByPUpyKHQsZSk7aWYoImVycm9yIj09PXIucmVzdWx0KXRocm93IG5ldyBFcnJvcihyLnZhbHVlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkpLmpvaW4oIiwgIikpO3JldHVybiByLnZhbHVlfXZhciBuPXQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiY29sb3IiPT09ZS50eXBlJiYobj10ZS5wYXJzZSh0KSkse2tpbmQ6ImNvbnN0YW50IixldmFsdWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX19KHZvaWQgMD09PWU/dC5zcGVjaWZpY2F0aW9uLmRlZmF1bHQ6ZSx0LnNwZWNpZmljYXRpb24pfTtkaS5wcm90b3R5cGUuaXNEYXRhRHJpdmVuPWZ1bmN0aW9uKCl7cmV0dXJuInNvdXJjZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZHx8ImNvbXBvc2l0ZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZH0sZGkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGUodGhpcyx0LGUscil9O3ZhciBtaT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1uZXcgZGkodCx2b2lkIDApfTttaS5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB2aSh0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsZSx1KHt9LHQudHJhbnNpdGlvbix0aGlzLnRyYW5zaXRpb24pLHQubm93KX0sbWkucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2aSh0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsbnVsbCx7fSwwKX07dmFyIGdpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKX07Z2kucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZS52YWx1ZSl9LGdpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgbWkodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnZhbHVlPW5ldyBkaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxnaS5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbil9LGdpLnByb3RvdHlwZS5zZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBtaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbj14KGUpfHx2b2lkIDB9LGdpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpO3ZhciBhPXRoaXMuZ2V0VHJhbnNpdGlvbihuKTt2b2lkIDAhPT1hJiYodFtuKyItdHJhbnNpdGlvbiJdPWEpfXJldHVybiB0fSxnaS5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyB5aSh0aGlzLl9wcm9wZXJ0aWVzKSxuPTAsaT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl92YWx1ZXNbYV09dGhpcy5fdmFsdWVzW2FdLnRyYW5zaXRpb25lZCh0LGUuX3ZhbHVlc1thXSl9cmV0dXJuIHJ9LGdpLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgeWkodGhpcy5fcHJvcGVydGllcyksZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5fdmFsdWVzW25dPXRoaXMuX3ZhbHVlc1tuXS51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0fTt2YXIgdmk9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuYmVnaW49aStuLmRlbGF5fHwwLHRoaXMuZW5kPXRoaXMuYmVnaW4rbi5kdXJhdGlvbnx8MCx0LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiYmKG4uZGVsYXl8fG4uZHVyYXRpb24pJiYodGhpcy5wcmlvcj1yKX07dmkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubm93fHwwLGk9dGhpcy52YWx1ZS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKSxhPXRoaXMucHJpb3I7aWYoYSl7aWYobj50aGlzLmVuZClyZXR1cm4gdGhpcy5wcmlvcj1udWxsLGk7aWYodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSlyZXR1cm4gdGhpcy5wcmlvcj1udWxsLGk7aWYobjx0aGlzLmJlZ2luKXJldHVybiBhLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpO3ZhciBvPShuLXRoaXMuYmVnaW4pLyh0aGlzLmVuZC10aGlzLmJlZ2luKTtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShhLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpLGksZnVuY3Rpb24odCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfShvKSl9cmV0dXJuIGl9O3ZhciB5aT1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzKX07eWkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgX2kodGhpcy5fcHJvcGVydGllcyksaT0wLGE9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bi5fdmFsdWVzW29dPXRoaXMuX3ZhbHVlc1tvXS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKX1yZXR1cm4gbn0seWkucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2lmKHRoaXMuX3ZhbHVlc1tyXS5wcmlvcilyZXR1cm4hMH1yZXR1cm4hMX07dmFyIHhpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyl9O3hpLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUpfSx4aS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXNbdF09bmV3IGRpKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSxudWxsPT09ZT92b2lkIDA6eChlKSl9LHhpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpfXJldHVybiB0fSx4aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBfaSh0aGlzLl9wcm9wZXJ0aWVzKSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLl92YWx1ZXNbb109dGhpcy5fdmFsdWVzW29dLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpfXJldHVybiBufTt2YXIgYmk9ZnVuY3Rpb24odCxlLHIpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5wYXJhbWV0ZXJzPXJ9O2JpLnByb3RvdHlwZS5pc0NvbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZH0sYmkucHJvdG90eXBlLmNvbnN0YW50T3I9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZD90aGlzLnZhbHVlLnZhbHVlOnR9LGJpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5ldmFsdWF0ZSh0aGlzLnZhbHVlLHRoaXMucGFyYW1ldGVycyx0LGUscixuKX07dmFyIF9pPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyl9O19pLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlc1t0XX07dmFyIHdpPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTt3aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LHdpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49R2VbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP24odCxlLHIpOnR9O3ZhciBUaT1mdW5jdGlvbih0LGUpe3RoaXMuc3BlY2lmaWNhdGlvbj10LHRoaXMub3ZlcnJpZGVzPWV9O1RpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiJjb25zdGFudCI9PT10LmV4cHJlc3Npb24ua2luZHx8ImNhbWVyYSI9PT10LmV4cHJlc3Npb24ua2luZD9uZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKX0sZSk6bmV3IGJpKHRoaXMsdC5leHByZXNzaW9uLGUpfSxUaS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCJjb25zdGFudCIhPT10LnZhbHVlLmtpbmR8fCJjb25zdGFudCIhPT1lLnZhbHVlLmtpbmQpcmV0dXJuIHQ7aWYodm9pZCAwPT09dC52YWx1ZS52YWx1ZXx8dm9pZCAwPT09ZS52YWx1ZS52YWx1ZSlyZXR1cm4gbmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp2b2lkIDB9LHQucGFyYW1ldGVycyk7dmFyIG49R2VbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP25ldyBiaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6bih0LnZhbHVlLnZhbHVlLGUudmFsdWUudmFsdWUscil9LHQucGFyYW1ldGVycyk6dH0sVGkucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4iY29uc3RhbnQiPT09dC5raW5kP3QudmFsdWU6dC5ldmFsdWF0ZShlLHIsbixpLGEpfTt2YXIga2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQudmFsdWUpcmV0dXJuIG5ldyBiaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSxlKTtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciBpPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKSxhPSJyZXNvbHZlZEltYWdlIj09PXQucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlJiYic3RyaW5nIiE9dHlwZW9mIGk/aS5uYW1lOmksbz10aGlzLl9jYWxjdWxhdGUoYSxhLGEsZSk7cmV0dXJuIG5ldyBiaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6b30sZSl9aWYoImNhbWVyYSI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIHM9dGhpcy5fY2FsY3VsYXRlKHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb20tMX0pLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb219KSx0LmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206ZS56b29tKzF9KSxlKTtyZXR1cm4gbmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpzfSxlKX1yZXR1cm4gbmV3IGJpKHRoaXMsdC5leHByZXNzaW9uLGUpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoInNvdXJjZSI9PT10LmtpbmQpe3ZhciBvPXQuZXZhbHVhdGUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKG8sbyxvLGUpfXJldHVybiJjb21wb3NpdGUiPT09dC5raW5kP3RoaXMuX2NhbGN1bGF0ZSh0LmV2YWx1YXRlKHt6b29tOk1hdGguZmxvb3IoZS56b29tKS0xfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pKzF9LHIsbiksZSk6dC52YWx1ZX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi56b29tPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZX06e2Zyb206cix0bzplfX0sZS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGV9KFRpKSxBaT1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07QWkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwIT09dC52YWx1ZSl7aWYoImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kKXt2YXIgaT10LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbik7cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShpLGksaSxlKX1yZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkoTWF0aC5mbG9vcihlLnpvb20tMSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkoTWF0aC5mbG9vcihlLnpvb20pLGUpKSx0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IHBpKE1hdGguZmxvb3IoZS56b29tKzEpLGUpKSxlKX19LEFpLnByb3RvdHlwZS5fY2FsY3VsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLnpvb20+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplfTp7ZnJvbTpyLHRvOmV9fSxBaS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBNaT1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07TWkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbil9LE1pLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgU2k9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvcGVydGllcz10LHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzPXt9LHRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzPVtdLHQpe3ZhciByPXRbZV07ci5zcGVjaWZpY2F0aW9uLm92ZXJyaWRhYmxlJiZ0aGlzLm92ZXJyaWRhYmxlUHJvcGVydGllcy5wdXNoKGUpO3ZhciBuPXRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW2VdPW5ldyBkaShyLHZvaWQgMCksaT10aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW2VdPW5ldyBtaShyKTt0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbZV09aS51bnRyYW5zaXRpb25lZCgpLHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW2VdPW4ucG9zc2libHlFdmFsdWF0ZSh7fSl9fTtObigiRGF0YURyaXZlblByb3BlcnR5IixUaSksTm4oIkRhdGFDb25zdGFudFByb3BlcnR5Iix3aSksTm4oIkNyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkiLGtpKSxObigiQ3Jvc3NGYWRlZFByb3BlcnR5IixBaSksTm4oIkNvbG9yUmFtcFByb3BlcnR5IixNaSk7dmFyIEVpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXtpZih0LmNhbGwodGhpcyksdGhpcy5pZD1lLmlkLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5fZmVhdHVyZUZpbHRlcj17ZmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5lZWRHZW9tZXRyeTohMX0sImN1c3RvbSIhPT1lLnR5cGUmJihlPWUsdGhpcy5tZXRhZGF0YT1lLm1ldGFkYXRhLHRoaXMubWluem9vbT1lLm1pbnpvb20sdGhpcy5tYXh6b29tPWUubWF4em9vbSwiYmFja2dyb3VuZCIhPT1lLnR5cGUmJih0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLnNvdXJjZUxheWVyPWVbInNvdXJjZS1sYXllciJdLHRoaXMuZmlsdGVyPWUuZmlsdGVyKSxyLmxheW91dCYmKHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0PW5ldyB4aShyLmxheW91dCkpLHIucGFpbnQpKXtmb3IodmFyIG4gaW4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludD1uZXcgZ2koci5wYWludCksZS5wYWludCl0aGlzLnNldFBhaW50UHJvcGVydHkobixlLnBhaW50W25dLHt2YWxpZGF0ZTohMX0pO2Zvcih2YXIgaSBpbiBlLmxheW91dCl0aGlzLnNldExheW91dFByb3BlcnR5KGksZS5sYXlvdXRbaV0se3ZhbGlkYXRlOiExfSk7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudW50cmFuc2l0aW9uZWQoKSx0aGlzLnBhaW50PW5ldyBfaShyLnBhaW50KX19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldENyb3NzZmFkZVBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVyc30sZS5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuInZpc2liaWxpdHkiPT09dD90aGlzLnZpc2liaWxpdHk6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksbnVsbCE9ZSl7dmFyIG49ImxheWVycy4iK3RoaXMuaWQrIi5sYXlvdXQuIit0O2lmKHRoaXMuX3ZhbGlkYXRlKEluLG4sdCxlLHIpKXJldHVybn0idmlzaWJpbGl0eSIhPT10P3RoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNldFZhbHVlKHQsZSk6dGhpcy52aXNpYmlsaXR5PWV9LGUucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIGcodCwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFRyYW5zaXRpb24odC5zbGljZSgwLC0iLXRyYW5zaXRpb24iLmxlbmd0aCkpOnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSxudWxsIT1lKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsiLnBhaW50LiIrdDtpZih0aGlzLl92YWxpZGF0ZShQbixuLHQsZSxyKSlyZXR1cm4hMX1pZihnKHQsIi10cmFuc2l0aW9uIikpcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxlfHx2b2lkIDApLCExO3ZhciBpPXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1t0XSxhPSJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI9PT1pLnByb3BlcnR5LnNwZWNpZmljYXRpb25bInByb3BlcnR5LXR5cGUiXSxvPWkudmFsdWUuaXNEYXRhRHJpdmVuKCkscz1pLnZhbHVlO3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUodCxlKSx0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0KTt2YXIgbD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbdF0udmFsdWU7cmV0dXJuIGwuaXNEYXRhRHJpdmVuKCl8fG98fGF8fHRoaXMuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0LHMsbCl9LGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8KCEhKHRoaXMubWF4em9vbSYmdD49dGhpcy5tYXh6b29tKXx8Im5vbmUiPT09dGhpcy52aXNpYmlsaXR5KX0sZS5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudHJhbnNpdGlvbmVkKHQsdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50KX0sZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuaGFzVHJhbnNpdGlvbigpfSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0LGUpe3QuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycyYmKHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnM9dC5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCkpLHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiYodGhpcy5sYXlvdXQ9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZSh0LHZvaWQgMCxlKSksdGhpcy5wYWludD10aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZSh0LHZvaWQgMCxlKX0sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e2lkOnRoaXMuaWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuc291cmNlLCJzb3VyY2UtbGF5ZXIiOnRoaXMuc291cmNlTGF5ZXIsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbSxmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0JiZ0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXJpYWxpemUoKSxwYWludDp0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50JiZ0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpfTtyZXR1cm4gdGhpcy52aXNpYmlsaXR5JiYodC5sYXlvdXQ9dC5sYXlvdXR8fHt9LHQubGF5b3V0LnZpc2liaWxpdHk9dGhpcy52aXNpYmlsaXR5KSx5KHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuISh2b2lkIDA9PT10fHwibGF5b3V0Ij09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fCJwYWludCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RoKX0pKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXt9KSwoIWl8fCExIT09aS52YWxpZGF0ZSkmJk9uKHRoaXMsdC5jYWxsKExuLHtrZXk6ZSxsYXllclR5cGU6dGhpcy50eXBlLG9iamVjdEtleTpyLHZhbHVlOm4sc3R5bGVTcGVjOkx0LHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfX0pKX0sZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc1RpbGVDbGlwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5pc1N0YXRlRGVwZW5kZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMucGFpbnQuX3ZhbHVlcyl7dmFyIGU9dGhpcy5wYWludC5nZXQodCk7aWYoZSBpbnN0YW5jZW9mIGJpJiZ6cihlLnByb3BlcnR5LnNwZWNpZmljYXRpb24pJiYoKCJzb3VyY2UiPT09ZS52YWx1ZS5raW5kfHwiY29tcG9zaXRlIj09PWUudmFsdWUua2luZCkmJmUudmFsdWUuaXNTdGF0ZURlcGVuZGVudCkpcmV0dXJuITB9cmV0dXJuITF9LGV9KEV0KSxMaT17SW50ODpJbnQ4QXJyYXksVWludDg6VWludDhBcnJheSxJbnQxNjpJbnQxNkFycmF5LFVpbnQxNjpVaW50MTZBcnJheSxJbnQzMjpJbnQzMkFycmF5LFVpbnQzMjpVaW50MzJBcnJheSxGbG9hdDMyOkZsb2F0MzJBcnJheX0sQ2k9ZnVuY3Rpb24odCxlKXt0aGlzLl9zdHJ1Y3RBcnJheT10LHRoaXMuX3BvczE9ZSp0aGlzLnNpemUsdGhpcy5fcG9zMj10aGlzLl9wb3MxLzIsdGhpcy5fcG9zND10aGlzLl9wb3MxLzQsdGhpcy5fcG9zOD10aGlzLl9wb3MxLzh9LFBpPWZ1bmN0aW9uKCl7dGhpcy5pc1RyYW5zZmVycmVkPSExLHRoaXMuY2FwYWNpdHk9LTEsdGhpcy5yZXNpemUoMCl9O2Z1bmN0aW9uIElpKHQsZSl7dm9pZCAwPT09ZSYmKGU9MSk7dmFyIHI9MCxuPTA7cmV0dXJue21lbWJlcnM6dC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBpLGE9KGk9dC50eXBlLExpW2ldLkJZVEVTX1BFUl9FTEVNRU5UKSxvPXI9T2kocixNYXRoLm1heChlLGEpKSxzPXQuY29tcG9uZW50c3x8MTtyZXR1cm4gbj1NYXRoLm1heChuLGEpLHIrPWEqcyx7bmFtZTp0Lm5hbWUsdHlwZTp0LnR5cGUsY29tcG9uZW50czpzLG9mZnNldDpvfX0pKSxzaXplOk9pKHIsTWF0aC5tYXgobixlKSksYWxpZ25tZW50OmV9fWZ1bmN0aW9uIE9pKHQsZSl7cmV0dXJuIE1hdGguY2VpbCh0L2UpKmV9UGkuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyaW0oKSxlJiYodC5pc1RyYW5zZmVycmVkPSEwLGUucHVzaCh0LmFycmF5QnVmZmVyKSkse2xlbmd0aDp0Lmxlbmd0aCxhcnJheUJ1ZmZlcjp0LmFycmF5QnVmZmVyfX0sUGkuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlwZSk7cmV0dXJuIGUuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcixlLmxlbmd0aD10Lmxlbmd0aCxlLmNhcGFjaXR5PXQuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aC9lLmJ5dGVzUGVyRWxlbWVudCxlLl9yZWZyZXNoVmlld3MoKSxlfSxQaS5wcm90b3R5cGUuX3RyaW09ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aCE9PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PXRoaXMubGVuZ3RoLHRoaXMuYXJyYXlCdWZmZXI9dGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLHRoaXMubGVuZ3RoKnRoaXMuYnl0ZXNQZXJFbGVtZW50KSx0aGlzLl9yZWZyZXNoVmlld3MoKSl9LFBpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubGVuZ3RoPTB9LFBpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5yZXNlcnZlKHQpLHRoaXMubGVuZ3RoPXR9LFBpLnByb3RvdHlwZS5yZXNlcnZlPWZ1bmN0aW9uKHQpe2lmKHQ+dGhpcy5jYXBhY2l0eSl7dGhpcy5jYXBhY2l0eT1NYXRoLm1heCh0LE1hdGguZmxvb3IoNSp0aGlzLmNhcGFjaXR5KSwxMjgpLHRoaXMuYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkqdGhpcy5ieXRlc1BlckVsZW1lbnQpO3ZhciBlPXRoaXMudWludDg7dGhpcy5fcmVmcmVzaFZpZXdzKCksZSYmdGhpcy51aW50OC5zZXQoZSl9fSxQaS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXQiKX07dmFyIHppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUocisxKSx0aGlzLmVtcGxhY2Uocix0LGUpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnQ7cmV0dXJuIHRoaXMuaW50MTZbbiswXT1lLHRoaXMuaW50MTZbbisxXT1yLHR9LGV9KFBpKTt6aS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQsTm4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0Iix6aSk7dmFyIERpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGkrMSksdGhpcy5lbXBsYWNlKGksdCxlLHIsbil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT00KnQ7cmV0dXJuIHRoaXMuaW50MTZbYSswXT1lLHRoaXMuaW50MTZbYSsxXT1yLHRoaXMuaW50MTZbYSsyXT1uLHRoaXMuaW50MTZbYSszXT1pLHR9LGV9KFBpKTtEaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsTm4oIlN0cnVjdEFycmF5TGF5b3V0NGk4IixEaSk7dmFyIFJpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz02KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMuaW50MTZbcysyXT1uLHRoaXMuaW50MTZbcyszXT1pLHRoaXMuaW50MTZbcys0XT1hLHRoaXMuaW50MTZbcys1XT1vLHR9LGV9KFBpKTtSaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLE5uKCJTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiIsUmkpO3ZhciBGaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobysxKSx0aGlzLmVtcGxhY2Uobyx0LGUscixuLGksYSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9NCp0LGw9OCp0O3JldHVybiB0aGlzLmludDE2W3MrMF09ZSx0aGlzLmludDE2W3MrMV09cix0aGlzLnVpbnQ4W2wrNF09bix0aGlzLnVpbnQ4W2wrNV09aSx0aGlzLnVpbnQ4W2wrNl09YSx0aGlzLnVpbnQ4W2wrN109byx0fSxlfShQaSk7RmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LE5uKCJTdHJ1Y3RBcnJheUxheW91dDJpNHViOCIsRmkpO3ZhciBCaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHUrMSksdGhpcy5lbXBsYWNlKHUsdCxlLHIsbixpLGEsbyxzLGwsYyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj05KnQsaD0xOCp0O3JldHVybiB0aGlzLnVpbnQxNltmKzBdPWUsdGhpcy51aW50MTZbZisxXT1yLHRoaXMudWludDE2W2YrMl09bix0aGlzLnVpbnQxNltmKzNdPWksdGhpcy51aW50MTZbZis0XT1hLHRoaXMudWludDE2W2YrNV09byx0aGlzLnVpbnQxNltmKzZdPXMsdGhpcy51aW50MTZbZis3XT1sLHRoaXMudWludDhbaCsxNl09Yyx0aGlzLnVpbnQ4W2grMTddPXUsdH0sZX0oUGkpO0JpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTgsTm4oIlN0cnVjdEFycmF5TGF5b3V0OHVpMnViMTgiLEJpKTt2YXIgTmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3ZhciBoPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShoKzEpLHRoaXMuZW1wbGFjZShoLHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcD0xMip0O3JldHVybiB0aGlzLmludDE2W3ArMF09ZSx0aGlzLmludDE2W3ArMV09cix0aGlzLmludDE2W3ArMl09bix0aGlzLmludDE2W3ArM109aSx0aGlzLnVpbnQxNltwKzRdPWEsdGhpcy51aW50MTZbcCs1XT1vLHRoaXMudWludDE2W3ArNl09cyx0aGlzLnVpbnQxNltwKzddPWwsdGhpcy5pbnQxNltwKzhdPWMsdGhpcy5pbnQxNltwKzldPXUsdGhpcy5pbnQxNltwKzEwXT1mLHRoaXMuaW50MTZbcCsxMV09aCx0fSxlfShQaSk7TmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yNCxObigiU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQiLE5pKTt2YXIgamk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0zKnQ7cmV0dXJuIHRoaXMuZmxvYXQzMltpKzBdPWUsdGhpcy5mbG9hdDMyW2krMV09cix0aGlzLmZsb2F0MzJbaSsyXT1uLHR9LGV9KFBpKTtqaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLE5uKCJTdHJ1Y3RBcnJheUxheW91dDNmMTIiLGppKTt2YXIgVWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MSp0O3JldHVybiB0aGlzLnVpbnQzMltyKzBdPWUsdH0sZX0oUGkpO1VpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxObigiU3RydWN0QXJyYXlMYXlvdXQxdWw0IixVaSk7dmFyIFZpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGMrMSksdGhpcy5lbXBsYWNlKGMsdCxlLHIsbixpLGEsbyxzLGwpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PTEwKnQsZj01KnQ7cmV0dXJuIHRoaXMuaW50MTZbdSswXT1lLHRoaXMuaW50MTZbdSsxXT1yLHRoaXMuaW50MTZbdSsyXT1uLHRoaXMuaW50MTZbdSszXT1pLHRoaXMuaW50MTZbdSs0XT1hLHRoaXMuaW50MTZbdSs1XT1vLHRoaXMudWludDMyW2YrM109cyx0aGlzLnVpbnQxNlt1KzhdPWwsdGhpcy51aW50MTZbdSs5XT1jLHR9LGV9KFBpKTtWaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTIwLE5uKCJTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMjAiLFZpKTt2YXIgSGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG8rMSksdGhpcy5lbXBsYWNlKG8sdCxlLHIsbixpLGEpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTYqdDtyZXR1cm4gdGhpcy5pbnQxNltzKzBdPWUsdGhpcy5pbnQxNltzKzFdPXIsdGhpcy5pbnQxNltzKzJdPW4sdGhpcy5pbnQxNltzKzNdPWksdGhpcy5pbnQxNltzKzRdPWEsdGhpcy5pbnQxNltzKzVdPW8sdH0sZX0oUGkpO0hpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsTm4oIlN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIiLEhpKTt2YXIgcWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShhKzEpLHRoaXMuZW1wbGFjZShhLHQsZSxyLG4saSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPTQqdCxzPTgqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW28rMF09ZSx0aGlzLmZsb2F0MzJbbysxXT1yLHRoaXMuZmxvYXQzMltvKzJdPW4sdGhpcy5pbnQxNltzKzZdPWksdGhpcy5pbnQxNltzKzddPWEsdH0sZX0oUGkpO3FpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYsTm4oIlN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTYiLHFpKTt2YXIgR2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGkrMSksdGhpcy5lbXBsYWNlKGksdCxlLHIsbil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0xMip0LG89Myp0O3JldHVybiB0aGlzLnVpbnQ4W2ErMF09ZSx0aGlzLnVpbnQ4W2ErMV09cix0aGlzLmZsb2F0MzJbbysxXT1uLHRoaXMuZmxvYXQzMltvKzJdPWksdH0sZX0oUGkpO0dpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsTm4oIlN0cnVjdEFycmF5TGF5b3V0MnViMmYxMiIsR2kpO3ZhciBZaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0zKnQ7cmV0dXJuIHRoaXMudWludDE2W2krMF09ZSx0aGlzLnVpbnQxNltpKzFdPXIsdGhpcy51aW50MTZbaSsyXT1uLHR9LGV9KFBpKTtZaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYsTm4oIlN0cnVjdEFycmF5TGF5b3V0M3VpNiIsWWkpO3ZhciBXaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnKXt2YXIgdj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUodisxKSx0aGlzLmVtcGxhY2Uodix0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2KXt2YXIgeT0yNCp0LHg9MTIqdCxiPTQ4KnQ7cmV0dXJuIHRoaXMuaW50MTZbeSswXT1lLHRoaXMuaW50MTZbeSsxXT1yLHRoaXMudWludDE2W3krMl09bix0aGlzLnVpbnQxNlt5KzNdPWksdGhpcy51aW50MzJbeCsyXT1hLHRoaXMudWludDMyW3grM109byx0aGlzLnVpbnQzMlt4KzRdPXMsdGhpcy51aW50MTZbeSsxMF09bCx0aGlzLnVpbnQxNlt5KzExXT1jLHRoaXMudWludDE2W3krMTJdPXUsdGhpcy5mbG9hdDMyW3grN109Zix0aGlzLmZsb2F0MzJbeCs4XT1oLHRoaXMudWludDhbYiszNl09cCx0aGlzLnVpbnQ4W2IrMzddPWQsdGhpcy51aW50OFtiKzM4XT1tLHRoaXMudWludDMyW3grMTBdPWcsdGhpcy5pbnQxNlt5KzIyXT12LHR9LGV9KFBpKTtXaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQ4LE5uKCJTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4IixXaSk7dmFyIFhpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTSxTKXt2YXIgRT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoRSsxKSx0aGlzLmVtcGxhY2UoRSx0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTSxTKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTSxTLEUpe3ZhciBMPTM0KnQsQz0xNyp0O3JldHVybiB0aGlzLmludDE2W0wrMF09ZSx0aGlzLmludDE2W0wrMV09cix0aGlzLmludDE2W0wrMl09bix0aGlzLmludDE2W0wrM109aSx0aGlzLmludDE2W0wrNF09YSx0aGlzLmludDE2W0wrNV09byx0aGlzLmludDE2W0wrNl09cyx0aGlzLmludDE2W0wrN109bCx0aGlzLnVpbnQxNltMKzhdPWMsdGhpcy51aW50MTZbTCs5XT11LHRoaXMudWludDE2W0wrMTBdPWYsdGhpcy51aW50MTZbTCsxMV09aCx0aGlzLnVpbnQxNltMKzEyXT1wLHRoaXMudWludDE2W0wrMTNdPWQsdGhpcy51aW50MTZbTCsxNF09bSx0aGlzLnVpbnQxNltMKzE1XT1nLHRoaXMudWludDE2W0wrMTZdPXYsdGhpcy51aW50MTZbTCsxN109eSx0aGlzLnVpbnQxNltMKzE4XT14LHRoaXMudWludDE2W0wrMTldPWIsdGhpcy51aW50MTZbTCsyMF09Xyx0aGlzLnVpbnQxNltMKzIxXT13LHRoaXMudWludDE2W0wrMjJdPVQsdGhpcy51aW50MzJbQysxMl09ayx0aGlzLmZsb2F0MzJbQysxM109QSx0aGlzLmZsb2F0MzJbQysxNF09TSx0aGlzLmZsb2F0MzJbQysxNV09Uyx0aGlzLmZsb2F0MzJbQysxNl09RSx0fSxlfShQaSk7WGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD02OCxObigiU3RydWN0QXJyYXlMYXlvdXQ4aTE1dWkxdWw0ZjY4IixYaSk7dmFyIFppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MSp0O3JldHVybiB0aGlzLmZsb2F0MzJbciswXT1lLHR9LGV9KFBpKTtaaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQsTm4oIlN0cnVjdEFycmF5TGF5b3V0MWY0IixaaSk7dmFyIEppPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0zKnQ7cmV0dXJuIHRoaXMuaW50MTZbaSswXT1lLHRoaXMuaW50MTZbaSsxXT1yLHRoaXMuaW50MTZbaSsyXT1uLHR9LGV9KFBpKTtKaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYsTm4oIlN0cnVjdEFycmF5TGF5b3V0M2k2IixKaSk7dmFyIEtpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0yKnQsYT00KnQ7cmV0dXJuIHRoaXMudWludDMyW2krMF09ZSx0aGlzLnVpbnQxNlthKzJdPXIsdGhpcy51aW50MTZbYSszXT1uLHR9LGV9KFBpKTtLaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsTm4oIlN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCIsS2kpO3ZhciBRaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUocisxKSx0aGlzLmVtcGxhY2Uocix0LGUpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnQ7cmV0dXJuIHRoaXMudWludDE2W24rMF09ZSx0aGlzLnVpbnQxNltuKzFdPXIsdH0sZX0oUGkpO1FpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxObigiU3RydWN0QXJyYXlMYXlvdXQydWk0IixRaSk7dmFyICRpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoZSsxKSx0aGlzLmVtcGxhY2UoZSx0KX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUpe3ZhciByPTEqdDtyZXR1cm4gdGhpcy51aW50MTZbciswXT1lLHR9LGV9KFBpKTskaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTIsTm4oIlN0cnVjdEFycmF5TGF5b3V0MXVpMiIsJGkpO3ZhciB0YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW24rMF09ZSx0aGlzLmZsb2F0MzJbbisxXT1yLHR9LGV9KFBpKTt0YS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsTm4oIlN0cnVjdEFycmF5TGF5b3V0MmY4Iix0YSk7dmFyIGVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShpKzEpLHRoaXMuZW1wbGFjZShpLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9NCp0O3JldHVybiB0aGlzLmZsb2F0MzJbYSswXT1lLHRoaXMuZmxvYXQzMlthKzFdPXIsdGhpcy5mbG9hdDMyW2ErMl09bix0aGlzLmZsb2F0MzJbYSszXT1pLHR9LGV9KFBpKTtlYS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LE5uKCJTdHJ1Y3RBcnJheUxheW91dDRmMTYiLGVhKTt2YXIgcmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JQb2ludFg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnRZOntjb25maWd1cmFibGU6ITB9LHgxOntjb25maWd1cmFibGU6ITB9LHkxOntjb25maWd1cmFibGU6ITB9LHgyOntjb25maWd1cmFibGU6ITB9LHkyOntjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JQb2ludFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yUG9pbnRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLngxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdfSxyLnkxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLngyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLnkyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdfSxyLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM119LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIuYnVja2V0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLmFuY2hvclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KENpKTtyYS5wcm90b3R5cGUuc2l6ZT0yMDt2YXIgbmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByYSh0aGlzLHQpfSxlfShWaSk7Tm4oIkNvbGxpc2lvbkJveEFycmF5IixuYSk7dmFyIGlhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LGdseXBoU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxudW1HbHlwaHM6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGV4U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lTGVuZ3RoOntjb25maWd1cmFibGU6ITB9LHNlZ21lbnQ6e2NvbmZpZ3VyYWJsZTohMH0sbG93ZXJTaXplOntjb25maWd1cmFibGU6ITB9LHVwcGVyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WTp7Y29uZmlndXJhYmxlOiEwfSx3cml0aW5nTW9kZTp7Y29uZmlndXJhYmxlOiEwfSxwbGFjZWRPcmllbnRhdGlvbjp7Y29uZmlndXJhYmxlOiEwfSxoaWRkZW46e2NvbmZpZ3VyYWJsZTohMH0sY3Jvc3NUaWxlSUQ6e2NvbmZpZ3VyYWJsZTohMH0sYXNzb2NpYXRlZEljb25JbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuYW5jaG9yWC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmdseXBoU3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIubnVtR2x5cGhzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXX0sci52ZXJ0ZXhTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsyXX0sci5saW5lU3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM119LHIubGluZUxlbmd0aC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrNF19LHIuc2VnbWVudC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLmxvd2VyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdfSxyLnVwcGVyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLmxpbmVPZmZzZXRYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrN119LHIubGluZU9mZnNldFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs4XX0sci53cml0aW5nTW9kZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszNl19LHIucGxhY2VkT3JpZW50YXRpb24uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzddfSxyLnBsYWNlZE9yaWVudGF0aW9uLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XT10fSxyLmhpZGRlbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszOF19LHIuaGlkZGVuLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM4XT10fSxyLmNyb3NzVGlsZUlELmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsxMF19LHIuY3Jvc3NUaWxlSUQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEwXT10fSxyLmFzc29jaWF0ZWRJY29uSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMjJdfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShDaSk7aWEucHJvdG90eXBlLnNpemU9NDg7dmFyIGFhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaWEodGhpcyx0KX0sZX0oV2kpO05uKCJQbGFjZWRTeW1ib2xBcnJheSIsYWEpO3ZhciBvYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxyaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxwbGFjZWRJY29uU3ltYm9sSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sa2V5Ontjb25maWd1cmFibGU6ITB9LHRleHRCb3hTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LHRleHRCb3hFbmRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsVGV4dEJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LGljb25Cb3hTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LGljb25Cb3hFbmRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsSWNvbkJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSxudW1WZXJ0aWNhbEdseXBoVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sbnVtSWNvblZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LG51bVZlcnRpY2FsSWNvblZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LHVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzOntjb25maWd1cmFibGU6ITB9LGNyb3NzVGlsZUlEOntjb25maWd1cmFibGU6ITB9LHRleHRCb3hTY2FsZTp7Y29uZmlndXJhYmxlOiEwfSx0ZXh0T2Zmc2V0MDp7Y29uZmlndXJhYmxlOiEwfSx0ZXh0T2Zmc2V0MTp7Y29uZmlndXJhYmxlOiEwfSxjb2xsaXNpb25DaXJjbGVEaWFtZXRlcjp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuYW5jaG9yWC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdfSxyLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXX0sci5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdfSxyLnBsYWNlZEljb25TeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis2XX0sci52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis3XX0sci5rZXkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzhdfSxyLnRleHRCb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XX0sci50ZXh0Qm94RW5kSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMV19LHIudmVydGljYWxUZXh0Qm94RW5kSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEyXX0sci5pY29uQm94U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTNdfSxyLmljb25Cb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTRdfSxyLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE1XX0sci52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTZdfSxyLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTddfSxyLm51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxOF19LHIubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxOV19LHIubnVtSWNvblZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyMF19LHIubnVtVmVydGljYWxJY29uVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzIxXX0sci51c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMjJdfSxyLmNyb3NzVGlsZUlELmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsxMl19LHIuY3Jvc3NUaWxlSUQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEyXT10fSxyLnRleHRCb3hTY2FsZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzEzXX0sci50ZXh0T2Zmc2V0MC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzE0XX0sci50ZXh0T2Zmc2V0MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzE1XX0sci5jb2xsaXNpb25DaXJjbGVEaWFtZXRlci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzE2XX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oQ2kpO29hLnByb3RvdHlwZS5zaXplPTY4O3ZhciBzYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG9hKHRoaXMsdCl9LGV9KFhpKTtObigiU3ltYm9sSW5zdGFuY2VBcnJheSIsc2EpO3ZhciBsYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldG9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmxvYXQzMlsxKnQrMF19LGV9KFppKTtObigiR2x5cGhPZmZzZXRBcnJheSIsbGEpO3ZhciBjYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldHg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzBdfSxlLnByb3RvdHlwZS5nZXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsxXX0sZS5wcm90b3R5cGUuZ2V0dGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzJdfSxlfShKaSk7Tm4oIlN5bWJvbExpbmVWZXJ0ZXhBcnJheSIsY2EpO3ZhciB1YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2ZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdfSxyLnNvdXJjZUxheWVySW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oQ2kpO3VhLnByb3RvdHlwZS5zaXplPTg7dmFyIGZhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdWEodGhpcyx0KX0sZX0oS2kpO05uKCJGZWF0dXJlSW5kZXhBcnJheSIsZmEpO3ZhciBoYT1JaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxwYT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zZWdtZW50cz10fTtmdW5jdGlvbiBkYSh0LGUpe3JldHVybiAyNTYqKHQ9bChNYXRoLmZsb29yKHQpLDAsMjU1KSkrKGU9bChNYXRoLmZsb29yKGUpLDAsMjU1KSl9cGEucHJvdG90eXBlLnByZXBhcmVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuc2VnbWVudHNbdGhpcy5zZWdtZW50cy5sZW5ndGgtMV07cmV0dXJuIHQ+cGEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJl8oIk1heCB2ZXJ0aWNlcyBwZXIgc2VnbWVudCBpcyAiK3BhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKyI6IGJ1Y2tldCByZXF1ZXN0ZWQgIit0KSwoIWl8fGkudmVydGV4TGVuZ3RoK3Q+cGEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEh8fGkuc29ydEtleSE9PW4pJiYoaT17dmVydGV4T2Zmc2V0OmUubGVuZ3RoLHByaW1pdGl2ZU9mZnNldDpyLmxlbmd0aCx2ZXJ0ZXhMZW5ndGg6MCxwcmltaXRpdmVMZW5ndGg6MH0sdm9pZCAwIT09biYmKGkuc29ydEtleT1uKSx0aGlzLnNlZ21lbnRzLnB1c2goaSkpLGl9LHBhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWdtZW50c30scGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuc2VnbWVudHM7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2Zvcih2YXIgbiBpbiByLnZhb3Mpci52YW9zW25dLmRlc3Ryb3koKX19LHBhLnNpbXBsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG5ldyBwYShbe3ZlcnRleE9mZnNldDp0LHByaW1pdGl2ZU9mZnNldDplLHZlcnRleExlbmd0aDpyLHByaW1pdGl2ZUxlbmd0aDpuLHZhb3M6e30sc29ydEtleTowfV0pfSxwYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSD1NYXRoLnBvdygyLDE2KS0xLE5uKCJTZWdtZW50VmVjdG9yIixwYSk7dmFyIG1hPUlpKFt7bmFtZToiYV9wYXR0ZXJuX2Zyb20iLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifSx7bmFtZToiYV9wYXR0ZXJuX3RvIixjb21wb25lbnRzOjQsdHlwZToiVWludDE2In0se25hbWU6ImFfcGl4ZWxfcmF0aW9fZnJvbSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4In0se25hbWU6ImFfcGl4ZWxfcmF0aW9fdG8iLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCJ9XSksZ2E9ZSgoZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYztmb3Iocj0zJnQubGVuZ3RoLG49dC5sZW5ndGgtcixpPWUsbz0zNDMyOTE4MzUzLHM9NDYxODQ1OTA3LGM9MDtjPG47KWw9MjU1JnQuY2hhckNvZGVBdChjKXwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8OHwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8MTZ8KDI1NSZ0LmNoYXJDb2RlQXQoKytjKSk8PDI0LCsrYyxpPTI3NDkyKyg2NTUzNSYoYT01Kig2NTUzNSYoaT0oaV49bD0oNjU1MzUmKGw9KGw9KDY1NTM1JmwpKm8rKCgobD4+PjE2KSpvJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxNXxsPj4+MTcpKSpzKygoKGw+Pj4xNikqcyY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1KTw8MTN8aT4+PjE5KSkrKCg1KihpPj4+MTYpJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpKSsoKDU4OTY0KyhhPj4+MTYpJjY1NTM1KTw8MTYpO3N3aXRjaChsPTAscil7Y2FzZSAzOmxePSgyNTUmdC5jaGFyQ29kZUF0KGMrMikpPDwxNjtjYXNlIDI6bF49KDI1NSZ0LmNoYXJDb2RlQXQoYysxKSk8PDg7Y2FzZSAxOmlePWw9KDY1NTM1JihsPShsPSg2NTUzNSYobF49MjU1JnQuY2hhckNvZGVBdChjKSkpKm8rKCgobD4+PjE2KSpvJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxNXxsPj4+MTcpKSpzKygoKGw+Pj4xNikqcyY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1fXJldHVybiBpXj10Lmxlbmd0aCxpPTIyNDY4MjI1MDcqKDY1NTM1JihpXj1pPj4+MTYpKSsoKDIyNDY4MjI1MDcqKGk+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSxpPTMyNjY0ODk5MDkqKDY1NTM1JihpXj1pPj4+MTMpKSsoKDMyNjY0ODk5MDkqKGk+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSwoaV49aT4+PjE2KT4+PjB9fSkpLHZhPWUoKGZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQubGVuZ3RoLGk9ZV5uLGE9MDtuPj00OylyPTE1NDA0ODM0NzcqKDY1NTM1JihyPTI1NSZ0LmNoYXJDb2RlQXQoYSl8KDI1NSZ0LmNoYXJDb2RlQXQoKythKSk8PDh8KDI1NSZ0LmNoYXJDb2RlQXQoKythKSk8PDE2fCgyNTUmdC5jaGFyQ29kZUF0KCsrYSkpPDwyNCkpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KSxpPTE1NDA0ODM0NzcqKDY1NTM1JmkpKygoMTU0MDQ4MzQ3NyooaT4+PjE2KSY2NTUzNSk8PDE2KV4ocj0xNTQwNDgzNDc3Kig2NTUzNSYocl49cj4+PjI0KSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpKSxuLT00LCsrYTtzd2l0Y2gobil7Y2FzZSAzOmlePSgyNTUmdC5jaGFyQ29kZUF0KGErMikpPDwxNjtjYXNlIDI6aV49KDI1NSZ0LmNoYXJDb2RlQXQoYSsxKSk8PDg7Y2FzZSAxOmk9MTU0MDQ4MzQ3NyooNjU1MzUmKGlePTI1NSZ0LmNoYXJDb2RlQXQoYSkpKSsoKDE1NDA0ODM0NzcqKGk+Pj4xNikmNjU1MzUpPDwxNil9cmV0dXJuIGk9MTU0MDQ4MzQ3NyooNjU1MzUmKGlePWk+Pj4xMykpKygoMTU0MDQ4MzQ3NyooaT4+PjE2KSY2NTUzNSk8PDE2KSwoaV49aT4+PjE1KT4+PjB9fSkpLHlhPWdhLHhhPWdhLGJhPXZhO3lhLm11cm11cjM9eGEseWEubXVybXVyMj1iYTt2YXIgX2E9ZnVuY3Rpb24oKXt0aGlzLmlkcz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmluZGV4ZWQ9ITF9O19hLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5pZHMucHVzaChUYSh0KSksdGhpcy5wb3NpdGlvbnMucHVzaChlLHIsbil9LF9hLnByb3RvdHlwZS5nZXRQb3NpdGlvbnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVRhKHQpLHI9MCxuPXRoaXMuaWRzLmxlbmd0aC0xO3I8bjspe3ZhciBpPXIrbj4+MTt0aGlzLmlkc1tpXT49ZT9uPWk6cj1pKzF9Zm9yKHZhciBhPVtdO3RoaXMuaWRzW3JdPT09ZTspe3ZhciBvPXRoaXMucG9zaXRpb25zWzMqcl0scz10aGlzLnBvc2l0aW9uc1szKnIrMV0sbD10aGlzLnBvc2l0aW9uc1szKnIrMl07YS5wdXNoKHtpbmRleDpvLHN0YXJ0OnMsZW5kOmx9KSxyKyt9cmV0dXJuIGF9LF9hLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBGbG9hdDY0QXJyYXkodC5pZHMpLG49bmV3IFVpbnQzMkFycmF5KHQucG9zaXRpb25zKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtmb3IoO248aTspe2Zvcih2YXIgYT1lW24raT4+MV0sbz1uLTEscz1pKzE7Oyl7ZG97bysrfXdoaWxlKGVbb108YSk7ZG97cy0tfXdoaWxlKGVbc10+YSk7aWYobz49cylicmVhaztrYShlLG8scyksa2EociwzKm8sMypzKSxrYShyLDMqbysxLDMqcysxKSxrYShyLDMqbysyLDMqcysyKX1zLW48aS1zPyh0KGUscixuLHMpLG49cysxKToodChlLHIscysxLGkpLGk9cyl9fShyLG4sMCxyLmxlbmd0aC0xKSxlJiZlLnB1c2goci5idWZmZXIsbi5idWZmZXIpLHtpZHM6cixwb3NpdGlvbnM6bn19LF9hLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBfYTtyZXR1cm4gZS5pZHM9dC5pZHMsZS5wb3NpdGlvbnM9dC5wb3NpdGlvbnMsZS5pbmRleGVkPSEwLGV9O3ZhciB3YT1NYXRoLnBvdygyLDUzKS0xO2Z1bmN0aW9uIFRhKHQpe3ZhciBlPSt0O3JldHVybiFpc05hTihlKSYmZTw9d2E/ZTp5YShTdHJpbmcodCkpfWZ1bmN0aW9uIGthKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59Tm4oIkZlYXR1cmVQb3NpdGlvbk1hcCIsX2EpO3ZhciBBYT1mdW5jdGlvbih0LGUpe3RoaXMuZ2w9dC5nbCx0aGlzLmxvY2F0aW9uPWV9LE1hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD0wfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTFpKHRoaXMubG9jYXRpb24sdCkpfSxlfShBYSksU2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PTB9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMWYodGhpcy5sb2NhdGlvbix0KSl9LGV9KEFhKSxFYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9WzAsMF19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMmYodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0pKX0sZX0oQWEpLExhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1bMCwwLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dFswXT09PXRoaXMuY3VycmVudFswXSYmdFsxXT09PXRoaXMuY3VycmVudFsxXSYmdFsyXT09PXRoaXMuY3VycmVudFsyXXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTNmKHRoaXMubG9jYXRpb24sdFswXSx0WzFdLHRbMl0pKX0sZX0oQWEpLENhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1bMCwwLDAsMF19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdJiZ0WzJdPT09dGhpcy5jdXJyZW50WzJdJiZ0WzNdPT09dGhpcy5jdXJyZW50WzNdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtNGYodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0sdFsyXSx0WzNdKSl9LGV9KEFhKSxQYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9dGUudHJhbnNwYXJlbnR9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0LnI9PT10aGlzLmN1cnJlbnQuciYmdC5nPT09dGhpcy5jdXJyZW50LmcmJnQuYj09PXRoaXMuY3VycmVudC5iJiZ0LmE9PT10aGlzLmN1cnJlbnQuYXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sdC5yLHQuZyx0LmIsdC5hKSl9LGV9KEFhKSxJYT1uZXcgRmxvYXQzMkFycmF5KDE2KSxPYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9SWF9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0WzEyXSE9PXRoaXMuY3VycmVudFsxMl18fHRbMF0hPT10aGlzLmN1cnJlbnRbMF0pcmV0dXJuIHRoaXMuY3VycmVudD10LHZvaWQgdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMubG9jYXRpb24sITEsdCk7Zm9yKHZhciBlPTE7ZTwxNjtlKyspaWYodFtlXSE9PXRoaXMuY3VycmVudFtlXSl7dGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMubG9jYXRpb24sITEsdCk7YnJlYWt9fSxlfShBYSk7ZnVuY3Rpb24gemEodCl7cmV0dXJuW2RhKDI1NSp0LnIsMjU1KnQuZyksZGEoMjU1KnQuYiwyNTUqdC5hKV19dmFyIERhPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnZhbHVlPXQsdGhpcy51bmlmb3JtTmFtZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ1XyIrdH0pKSx0aGlzLnR5cGU9cn07RGEucHJvdG90eXBlLnNldFVuaWZvcm09ZnVuY3Rpb24odCxlLHIpe3Quc2V0KHIuY29uc3RhbnRPcih0aGlzLnZhbHVlKSl9LERhLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4iY29sb3IiPT09dGhpcy50eXBlP25ldyBQYSh0LGUpOm5ldyBTYSh0LGUpfTt2YXIgUmE9ZnVuY3Rpb24odCxlKXt0aGlzLnVuaWZvcm1OYW1lcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInVfIit0fSkpLHRoaXMucGF0dGVybkZyb209bnVsbCx0aGlzLnBhdHRlcm5Ubz1udWxsLHRoaXMucGl4ZWxSYXRpb0Zyb209MSx0aGlzLnBpeGVsUmF0aW9Ubz0xfTtSYS5wcm90b3R5cGUuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5waXhlbFJhdGlvRnJvbT1lLnBpeGVsUmF0aW8sdGhpcy5waXhlbFJhdGlvVG89dC5waXhlbFJhdGlvLHRoaXMucGF0dGVybkZyb209ZS50bGJyLHRoaXMucGF0dGVyblRvPXQudGxicn0sUmEucHJvdG90eXBlLnNldFVuaWZvcm09ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9InVfcGF0dGVybl90byI9PT1uP3RoaXMucGF0dGVyblRvOiJ1X3BhdHRlcm5fZnJvbSI9PT1uP3RoaXMucGF0dGVybkZyb206InVfcGl4ZWxfcmF0aW9fdG8iPT09bj90aGlzLnBpeGVsUmF0aW9UbzoidV9waXhlbF9yYXRpb19mcm9tIj09PW4/dGhpcy5waXhlbFJhdGlvRnJvbTpudWxsO2kmJnQuc2V0KGkpfSxSYS5wcm90b3R5cGUuZ2V0QmluZGluZz1mdW5jdGlvbih0LGUscil7cmV0dXJuInVfcGF0dGVybiI9PT1yLnN1YnN0cigwLDkpP25ldyBDYSh0LGUpOm5ldyBTYSh0LGUpfTt2YXIgRmE9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5leHByZXNzaW9uPXQsdGhpcy50eXBlPXIsdGhpcy5tYXhWYWx1ZT0wLHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm57bmFtZToiYV8iK3QsdHlwZToiRmxvYXQzMiIsY29tcG9uZW50czoiY29sb3IiPT09cj8yOjEsb2Zmc2V0OjB9fSkpLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgbn07RmEucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGgsbz10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IHBpKDApLGUse30sbixbXSxpKTt0aGlzLnBhaW50VmVydGV4QXJyYXkucmVzaXplKHQpLHRoaXMuX3NldFBhaW50VmFsdWUoYSx0LG8pfSxGYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206MH0scixuKTt0aGlzLl9zZXRQYWludFZhbHVlKHQsZSxpKX0sRmEucHJvdG90eXBlLl9zZXRQYWludFZhbHVlPWZ1bmN0aW9uKHQsZSxyKXtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgbj16YShyKSxpPXQ7aTxlO2krKyl0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLG5bMF0sblsxXSk7ZWxzZXtmb3IodmFyIGE9dDthPGU7YSsrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGEscik7dGhpcy5tYXhWYWx1ZT1NYXRoLm1heCh0aGlzLm1heFZhbHVlLE1hdGguYWJzKHIpKX19LEZhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5wYWludFZlcnRleEFycmF5JiZ0aGlzLnBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXImJih0aGlzLnBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnBhaW50VmVydGV4QnVmZmVyLmJ1ZmZlcj90aGlzLnBhaW50VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5wYWludFZlcnRleEFycmF5KTp0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcyx0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCkpfSxGYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfTt2YXIgQmE9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudW5pZm9ybU5hbWVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3QrIl90In0pKSx0aGlzLnR5cGU9cix0aGlzLnVzZUludGVnZXJab29tPW4sdGhpcy56b29tPWksdGhpcy5tYXhWYWx1ZT0wLHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm57bmFtZToiYV8iK3QsdHlwZToiRmxvYXQzMiIsY29tcG9uZW50czoiY29sb3IiPT09cj80OjIsb2Zmc2V0OjB9fSkpLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgYX07QmEucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkodGhpcy56b29tKSxlLHt9LG4sW10saSksbz10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IHBpKHRoaXMuem9vbSsxKSxlLHt9LG4sW10saSkscz10aGlzLnBhaW50VmVydGV4QXJyYXkubGVuZ3RoO3RoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUodCksdGhpcy5fc2V0UGFpbnRWYWx1ZShzLHQsYSxvKX0sQmEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOnRoaXMuem9vbX0scixuKSxhPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTp0aGlzLnpvb20rMX0scixuKTt0aGlzLl9zZXRQYWludFZhbHVlKHQsZSxpLGEpfSxCYS5wcm90b3R5cGUuX3NldFBhaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIsbil7aWYoImNvbG9yIj09PXRoaXMudHlwZSlmb3IodmFyIGk9emEociksYT16YShuKSxvPXQ7bzxlO28rKyl0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShvLGlbMF0saVsxXSxhWzBdLGFbMV0pO2Vsc2V7Zm9yKHZhciBzPXQ7czxlO3MrKyl0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShzLHIsbik7dGhpcy5tYXhWYWx1ZT1NYXRoLm1heCh0aGlzLm1heFZhbHVlLE1hdGguYWJzKHIpLE1hdGguYWJzKG4pKX19LEJhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5wYWludFZlcnRleEFycmF5JiZ0aGlzLnBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXImJih0aGlzLnBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnBhaW50VmVydGV4QnVmZmVyLmJ1ZmZlcj90aGlzLnBhaW50VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5wYWludFZlcnRleEFycmF5KTp0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcyx0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCkpfSxCYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSxCYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudXNlSW50ZWdlclpvb20/TWF0aC5mbG9vcihlLnpvb20pOmUuem9vbSxuPWwodGhpcy5leHByZXNzaW9uLmludGVycG9sYXRpb25GYWN0b3Iocix0aGlzLnpvb20sdGhpcy56b29tKzEpLDAsMSk7dC5zZXQobil9LEJhLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IFNhKHQsZSl9O3ZhciBOYT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy50eXBlPWUsdGhpcy51c2VJbnRlZ2VyWm9vbT1yLHRoaXMuem9vbT1uLHRoaXMubGF5ZXJJZD1hLHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheT1uZXcgaSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5PW5ldyBpfTtOYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkubGVuZ3RoO3RoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUodCksdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUodCksdGhpcy5fc2V0UGFpbnRWYWx1ZXMobix0LGUucGF0dGVybnMmJmUucGF0dGVybnNbdGhpcy5sYXllcklkXSxyKX0sTmEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9zZXRQYWludFZhbHVlcyh0LGUsci5wYXR0ZXJucyYmci5wYXR0ZXJuc1t0aGlzLmxheWVySWRdLGkpfSxOYS5wcm90b3R5cGUuX3NldFBhaW50VmFsdWVzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4mJnIpe3ZhciBpPXIubWluLGE9ci5taWQsbz1yLm1heCxzPW5baV0sbD1uW2FdLGM9bltvXTtpZihzJiZsJiZjKWZvcih2YXIgdT10O3U8ZTt1KyspdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LmVtcGxhY2UodSxsLnRsWzBdLGwudGxbMV0sbC5iclswXSxsLmJyWzFdLHMudGxbMF0scy50bFsxXSxzLmJyWzBdLHMuYnJbMV0sbC5waXhlbFJhdGlvLHMucGl4ZWxSYXRpbyksdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKHUsbC50bFswXSxsLnRsWzFdLGwuYnJbMF0sbC5iclsxXSxjLnRsWzBdLGMudGxbMV0sYy5iclswXSxjLmJyWzFdLGwucGl4ZWxSYXRpbyxjLnBpeGVsUmF0aW8pfX0sTmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkmJnRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LG1hLm1lbWJlcnMsdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpLHRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXksbWEubWVtYmVycyx0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCkpfSxOYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlciYmdGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9O3ZhciBqYT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmJpbmRlcnM9e30sdGhpcy5sYXlvdXRBdHRyaWJ1dGVzPW4sdGhpcy5fYnVmZmVycz1bXTt2YXIgaT1bXTtmb3IodmFyIGEgaW4gdC5wYWludC5fdmFsdWVzKWlmKHIoYSkpe3ZhciBvPXQucGFpbnQuZ2V0KGEpO2lmKG8gaW5zdGFuY2VvZiBiaSYmenIoby5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSl7dmFyIHM9VmEoYSx0LnR5cGUpLGw9by52YWx1ZSxjPW8ucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlLHU9by5wcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbSxmPW8ucHJvcGVydHkuc3BlY2lmaWNhdGlvblsicHJvcGVydHktdHlwZSJdLGg9ImNyb3NzLWZhZGVkIj09PWZ8fCJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI9PT1mO2lmKCJjb25zdGFudCI9PT1sLmtpbmQpdGhpcy5iaW5kZXJzW2FdPWg/bmV3IFJhKGwudmFsdWUscyk6bmV3IERhKGwudmFsdWUscyxjKSxpLnB1c2goIi91XyIrYSk7ZWxzZSBpZigic291cmNlIj09PWwua2luZHx8aCl7dmFyIHA9SGEoYSxjLCJzb3VyY2UiKTt0aGlzLmJpbmRlcnNbYV09aD9uZXcgTmEobCxjLHUsZSxwLHQuaWQpOm5ldyBGYShsLHMsYyxwKSxpLnB1c2goIi9hXyIrYSl9ZWxzZXt2YXIgZD1IYShhLGMsImNvbXBvc2l0ZSIpO3RoaXMuYmluZGVyc1thXT1uZXcgQmEobCxzLGMsdSxlLGQpLGkucHVzaCgiL3pfIithKX19fXRoaXMuY2FjaGVLZXk9aS5zb3J0KCkuam9pbigiIil9O2phLnByb3RvdHlwZS5nZXRNYXhWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJpbmRlcnNbdF07cmV0dXJuIGUgaW5zdGFuY2VvZiBGYXx8ZSBpbnN0YW5jZW9mIEJhP2UubWF4VmFsdWU6MH0samEucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGEgaW4gdGhpcy5iaW5kZXJzKXt2YXIgbz10aGlzLmJpbmRlcnNbYV07KG8gaW5zdGFuY2VvZiBGYXx8byBpbnN0YW5jZW9mIEJhfHxvIGluc3RhbmNlb2YgTmEpJiZvLnBvcHVsYXRlUGFpbnRBcnJheSh0LGUscixuLGkpfX0samEucHJvdG90eXBlLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLmJpbmRlcnMpe3ZhciBuPXRoaXMuYmluZGVyc1tyXTtuIGluc3RhbmNlb2YgUmEmJm4uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHQsZSl9fSxqYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0hMTtmb3IodmFyIG8gaW4gdClmb3IodmFyIHM9MCxsPWUuZ2V0UG9zaXRpb25zKG8pO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXSx1PXIuZmVhdHVyZShjLmluZGV4KTtmb3IodmFyIGYgaW4gdGhpcy5iaW5kZXJzKXt2YXIgaD10aGlzLmJpbmRlcnNbZl07aWYoKGggaW5zdGFuY2VvZiBGYXx8aCBpbnN0YW5jZW9mIEJhfHxoIGluc3RhbmNlb2YgTmEpJiYhMD09PWguZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KXt2YXIgcD1uLnBhaW50LmdldChmKTtoLmV4cHJlc3Npb249cC52YWx1ZSxoLnVwZGF0ZVBhaW50QXJyYXkoYy5zdGFydCxjLmVuZCx1LHRbb10saSksYT0hMH19fXJldHVybiBhfSxqYS5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpe3ZhciByPXRoaXMuYmluZGVyc1tlXTsociBpbnN0YW5jZW9mIERhfHxyIGluc3RhbmNlb2YgUmEpJiZ0LnB1c2guYXBwbHkodCxyLnVuaWZvcm1OYW1lcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIjZGVmaW5lIEhBU19VTklGT1JNXyIrdH0pKSl9cmV0dXJuIHR9LGphLnByb3RvdHlwZS5nZXRQYWludFZlcnRleEJ1ZmZlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyc30samEucHJvdG90eXBlLmdldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHRoaXMuYmluZGVycyl7dmFyIGk9dGhpcy5iaW5kZXJzW25dO2lmKGkgaW5zdGFuY2VvZiBEYXx8aSBpbnN0YW5jZW9mIFJhfHxpIGluc3RhbmNlb2YgQmEpZm9yKHZhciBhPTAsbz1pLnVuaWZvcm1OYW1lczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07aWYoZVtzXSl7dmFyIGw9aS5nZXRCaW5kaW5nKHQsZVtzXSxzKTtyLnB1c2goe25hbWU6cyxwcm9wZXJ0eTpuLGJpbmRpbmc6bH0pfX19cmV0dXJuIHJ9LGphLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9by5uYW1lLGw9by5wcm9wZXJ0eSxjPW8uYmluZGluZzt0aGlzLmJpbmRlcnNbbF0uc2V0VW5pZm9ybShjLG4sci5nZXQobCkscyl9fSxqYS5wcm90b3R5cGUudXBkYXRlUGFpbnRCdWZmZXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl9idWZmZXJzPVtdLHRoaXMuYmluZGVycyl7dmFyIHI9dGhpcy5iaW5kZXJzW2VdO2lmKHQmJnIgaW5zdGFuY2VvZiBOYSl7dmFyIG49Mj09PXQuZnJvbVNjYWxlP3Iuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXI6ci56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI7biYmdGhpcy5fYnVmZmVycy5wdXNoKG4pfWVsc2UociBpbnN0YW5jZW9mIEZhfHxyIGluc3RhbmNlb2YgQmEpJiZyLnBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLl9idWZmZXJzLnB1c2goci5wYWludFZlcnRleEJ1ZmZlcil9fSxqYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpe3ZhciByPXRoaXMuYmluZGVyc1tlXTsociBpbnN0YW5jZW9mIEZhfHxyIGluc3RhbmNlb2YgQmF8fHIgaW5zdGFuY2VvZiBOYSkmJnIudXBsb2FkKHQpfXRoaXMudXBkYXRlUGFpbnRCdWZmZXJzKCl9LGphLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYmluZGVycyl7dmFyIGU9dGhpcy5iaW5kZXJzW3RdOyhlIGluc3RhbmNlb2YgRmF8fGUgaW5zdGFuY2VvZiBCYXx8ZSBpbnN0YW5jZW9mIE5hKSYmZS5kZXN0cm95KCl9fTt2YXIgVWE9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXt9O2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF09bmV3IGphKG8scixuLHQpfXRoaXMubmVlZHNVcGxvYWQ9ITEsdGhpcy5fZmVhdHVyZU1hcD1uZXcgX2EsdGhpcy5fYnVmZmVyT2Zmc2V0PTB9O2Z1bmN0aW9uIFZhKHQsZSl7cmV0dXJueyJ0ZXh0LW9wYWNpdHkiOlsib3BhY2l0eSJdLCJpY29uLW9wYWNpdHkiOlsib3BhY2l0eSJdLCJ0ZXh0LWNvbG9yIjpbImZpbGxfY29sb3IiXSwiaWNvbi1jb2xvciI6WyJmaWxsX2NvbG9yIl0sInRleHQtaGFsby1jb2xvciI6WyJoYWxvX2NvbG9yIl0sImljb24taGFsby1jb2xvciI6WyJoYWxvX2NvbG9yIl0sInRleHQtaGFsby1ibHVyIjpbImhhbG9fYmx1ciJdLCJpY29uLWhhbG8tYmx1ciI6WyJoYWxvX2JsdXIiXSwidGV4dC1oYWxvLXdpZHRoIjpbImhhbG9fd2lkdGgiXSwiaWNvbi1oYWxvLXdpZHRoIjpbImhhbG9fd2lkdGgiXSwibGluZS1nYXAtd2lkdGgiOlsiZ2Fwd2lkdGgiXSwibGluZS1wYXR0ZXJuIjpbInBhdHRlcm5fdG8iLCJwYXR0ZXJuX2Zyb20iLCJwaXhlbF9yYXRpb190byIsInBpeGVsX3JhdGlvX2Zyb20iXSwiZmlsbC1wYXR0ZXJuIjpbInBhdHRlcm5fdG8iLCJwYXR0ZXJuX2Zyb20iLCJwaXhlbF9yYXRpb190byIsInBpeGVsX3JhdGlvX2Zyb20iXSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIiwicGl4ZWxfcmF0aW9fdG8iLCJwaXhlbF9yYXRpb19mcm9tIl19W3RdfHxbdC5yZXBsYWNlKGUrIi0iLCIiKS5yZXBsYWNlKC8tL2csIl8iKV19ZnVuY3Rpb24gSGEodCxlLHIpe3ZhciBuPXtjb2xvcjp7c291cmNlOnRhLGNvbXBvc2l0ZTplYX0sbnVtYmVyOntzb3VyY2U6WmksY29tcG9zaXRlOnRhfX0saT1mdW5jdGlvbih0KXtyZXR1cm57ImxpbmUtcGF0dGVybiI6e3NvdXJjZTpCaSxjb21wb3NpdGU6Qml9LCJmaWxsLXBhdHRlcm4iOntzb3VyY2U6QmksY29tcG9zaXRlOkJpfSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6e3NvdXJjZTpCaSxjb21wb3NpdGU6Qml9fVt0XX0odCk7cmV0dXJuIGkmJmlbcl18fG5bZV1bcl19VWEucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbyBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvXS5wb3B1bGF0ZVBhaW50QXJyYXlzKHQsZSxuLGksYSk7dm9pZCAwIT09ZS5pZCYmdGhpcy5fZmVhdHVyZU1hcC5hZGQoZS5pZCxyLHRoaXMuX2J1ZmZlck9mZnNldCx0KSx0aGlzLl9idWZmZXJPZmZzZXQ9dCx0aGlzLm5lZWRzVXBsb2FkPSEwfSxVYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsYT1yO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt0aGlzLm5lZWRzVXBsb2FkPXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdLnVwZGF0ZVBhaW50QXJyYXlzKHQsdGhpcy5fZmVhdHVyZU1hcCxlLG8sbil8fHRoaXMubmVlZHNVcGxvYWR9fSxVYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XX0sVWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtpZih0aGlzLm5lZWRzVXBsb2FkKXtmb3IodmFyIGUgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbZV0udXBsb2FkKHQpO3RoaXMubmVlZHNVcGxvYWQ9ITF9fSxVYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XS5kZXN0cm95KCl9LE5uKCJDb25zdGFudEJpbmRlciIsRGEpLE5uKCJDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIiLFJhKSxObigiU291cmNlRXhwcmVzc2lvbkJpbmRlciIsRmEpLE5uKCJDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyIixOYSksTm4oIkNvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIiLEJhKSxObigiUHJvZ3JhbUNvbmZpZ3VyYXRpb24iLGphLHtvbWl0OlsiX2J1ZmZlcnMiXX0pLE5uKCJQcm9ncmFtQ29uZmlndXJhdGlvblNldCIsVWEpO3ZhciBxYSxHYT0ocWE9MTUse21pbjotMSpNYXRoLnBvdygyLHFhLTEpLG1heDpNYXRoLnBvdygyLHFhLTEpLTF9KTtmdW5jdGlvbiBZYSh0KXtmb3IodmFyIGU9ODE5Mi90LmV4dGVudCxyPXQubG9hZEdlb21ldHJ5KCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtvLng9TWF0aC5yb3VuZChvLngqZSksby55PU1hdGgucm91bmQoby55KmUpLChvLng8R2EubWlufHxvLng+R2EubWF4fHxvLnk8R2EubWlufHxvLnk+R2EubWF4KSYmKF8oIkdlb21ldHJ5IGV4Y2VlZHMgYWxsb3dlZCBleHRlbnQsIHJlZHVjZSB5b3VyIHZlY3RvciB0aWxlIGJ1ZmZlciBzaXplIiksby54PWwoby54LEdhLm1pbixHYS5tYXgpLG8ueT1sKG8ueSxHYS5taW4sR2EubWF4KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gV2EodCxlLHIsbixpKXt0LmVtcGxhY2VCYWNrKDIqZSsobisxKS8yLDIqcisoaSsxKS8yKX12YXIgWGE9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgemksdGhpcy5pbmRleEFycmF5PW5ldyBZaSx0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgVWEoaGEsdC5sYXllcnMsdC56b29tKSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKX07ZnVuY3Rpb24gWmEodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihpbyhlLHRbcl0pKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGlvKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuISEkYSh0LGUpfWZ1bmN0aW9uIEphKHQsZSxyKXtyZXR1cm4hIWlvKHQsZSl8fCEhZW8oZSx0LHIpfWZ1bmN0aW9uIEthKHQsZSl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBubyhlLHRbMF0pO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKylpZihpbyh0LG5baV0pKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWlmKG5vKGUsdFthXSkpcmV0dXJuITA7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspaWYoJGEodCxlW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBRYSh0LGUscil7aWYodC5sZW5ndGg+MSl7aWYoJGEodCxlKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlbyhlW25dLHQscikpcmV0dXJuITB9Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoZW8odFtpXSxlLHIpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRhKHQsZSl7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aC0xO3IrKylmb3IodmFyIG49dFtyXSxpPXRbcisxXSxhPTA7YTxlLmxlbmd0aC0xO2ErKyl7aWYodG8obixpLGVbYV0sZVthKzFdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB0byh0LGUscixuKXtyZXR1cm4gdyh0LHIsbikhPT13KGUscixuKSYmdyh0LGUscikhPT13KHQsZSxuKX1mdW5jdGlvbiBlbyh0LGUscil7dmFyIG49cipyO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gdC5kaXN0U3FyKGVbMF0pPG47Zm9yKHZhciBpPTE7aTxlLmxlbmd0aDtpKyspe2lmKHJvKHQsZVtpLTFdLGVbaV0pPG4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gcm8odCxlLHIpe3ZhciBuPWUuZGlzdFNxcihyKTtpZigwPT09bilyZXR1cm4gdC5kaXN0U3FyKGUpO3ZhciBpPSgodC54LWUueCkqKHIueC1lLngpKyh0LnktZS55KSooci55LWUueSkpL247cmV0dXJuIGk8MD90LmRpc3RTcXIoZSk6aT4xP3QuZGlzdFNxcihyKTp0LmRpc3RTcXIoci5zdWIoZSkuX211bHQoaSkuX2FkZChlKSl9ZnVuY3Rpb24gbm8odCxlKXtmb3IodmFyIHIsbixpLGE9ITEsbz0wO288dC5sZW5ndGg7bysrKWZvcih2YXIgcz0wLGw9KHI9dFtvXSkubGVuZ3RoLTE7czxyLmxlbmd0aDtsPXMrKyluPXJbc10saT1yW2xdLG4ueT5lLnkhPWkueT5lLnkmJmUueDwoaS54LW4ueCkqKGUueS1uLnkpLyhpLnktbi55KStuLngmJihhPSFhKTtyZXR1cm4gYX1mdW5jdGlvbiBpbyh0LGUpe2Zvcih2YXIgcj0hMSxuPTAsaT10Lmxlbmd0aC0xO248dC5sZW5ndGg7aT1uKyspe3ZhciBhPXRbbl0sbz10W2ldO2EueT5lLnkhPW8ueT5lLnkmJmUueDwoby54LWEueCkqKGUueS1hLnkpLyhvLnktYS55KSthLngmJihyPSFyKX1yZXR1cm4gcn1mdW5jdGlvbiBhbyh0LGUscil7dmFyIG49clswXSxpPXJbMl07aWYodC54PG4ueCYmZS54PG4ueHx8dC54PmkueCYmZS54PmkueHx8dC55PG4ueSYmZS55PG4ueXx8dC55PmkueSYmZS55PmkueSlyZXR1cm4hMTt2YXIgYT13KHQsZSxyWzBdKTtyZXR1cm4gYSE9PXcodCxlLHJbMV0pfHxhIT09dyh0LGUsclsyXSl8fGEhPT13KHQsZSxyWzNdKX1mdW5jdGlvbiBvbyh0LGUscil7dmFyIG49ZS5wYWludC5nZXQodCkudmFsdWU7cmV0dXJuImNvbnN0YW50Ij09PW4ua2luZD9uLnZhbHVlOnIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKS5nZXRNYXhWYWx1ZSh0KX1mdW5jdGlvbiBzbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pfWZ1bmN0aW9uIGxvKHQsZSxyLG4sYSl7aWYoIWVbMF0mJiFlWzFdKXJldHVybiB0O3ZhciBvPWkuY29udmVydChlKS5fbXVsdChhKTsidmlld3BvcnQiPT09ciYmby5fcm90YXRlKC1uKTtmb3IodmFyIHM9W10sbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdO3MucHVzaChjLnN1YihvKSl9cmV0dXJuIHN9WGEucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVyc1swXSxpPVtdLGE9bnVsbDsiY2lyY2xlIj09PW4udHlwZSYmKGE9bi5sYXlvdXQuZ2V0KCJjaXJjbGUtc29ydC1rZXkiKSk7Zm9yKHZhciBvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwuZmVhdHVyZSx1PWwuaWQsZj1sLmluZGV4LGg9bC5zb3VyY2VMYXllckluZGV4LHA9dGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5LGQ9e3R5cGU6Yy50eXBlLGlkOnUscHJvcGVydGllczpjLnByb3BlcnRpZXMsZ2VvbWV0cnk6cD9ZYShjKTpbXX07aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBwaSh0aGlzLnpvb20pLGQscikpe3B8fChkLmdlb21ldHJ5PVlhKGMpKTt2YXIgbT1hP2EuZXZhbHVhdGUoZCx7fSxyKTp2b2lkIDAsZz17aWQ6dSxwcm9wZXJ0aWVzOmMucHJvcGVydGllcyx0eXBlOmMudHlwZSxzb3VyY2VMYXllckluZGV4OmgsaW5kZXg6ZixnZW9tZXRyeTpkLmdlb21ldHJ5LHBhdHRlcm5zOnt9LHNvcnRLZXk6bX07aS5wdXNoKGcpfX1hJiZpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciB2PTAseT1pO3Y8eS5sZW5ndGg7dis9MSl7dmFyIHg9eVt2XSxiPXgsXz1iLmdlb21ldHJ5LHc9Yi5pbmRleCxUPWIuc291cmNlTGF5ZXJJbmRleCxrPXRbd10uZmVhdHVyZTt0aGlzLmFkZEZlYXR1cmUoeCxfLHcsciksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGssXyx3LFQsdGhpcy5pbmRleCl9fSxYYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LFhhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sWGEucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LFhhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksaGEpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0sWGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxYYS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKWZvcih2YXIgbz0wLHM9YVtpXTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLngsdT1sLnk7aWYoIShjPDB8fGM+PTgxOTJ8fHU8MHx8dT49ODE5Mikpe3ZhciBmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSx0LnNvcnRLZXkpLGg9Zi52ZXJ0ZXhMZW5ndGg7V2EodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsLTEsLTEpLFdhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksYyx1LDEsLTEpLFdhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksYyx1LDEsMSksV2EodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsLTEsMSksdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGgsaCsxLGgrMiksdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGgsaCszLGgrMiksZi52ZXJ0ZXhMZW5ndGgrPTQsZi5wcmltaXRpdmVMZW5ndGgrPTJ9fXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCxyLHt9LG4pfSxObigiQ2lyY2xlQnVja2V0IixYYSx7b21pdDpbImxheWVycyJdfSk7dmFyIGNvPW5ldyBTaSh7ImNpcmNsZS1zb3J0LWtleSI6bmV3IFRpKEx0LmxheW91dF9jaXJjbGVbImNpcmNsZS1zb3J0LWtleSJdKX0pLHVvPXtwYWludDpuZXcgU2koeyJjaXJjbGUtcmFkaXVzIjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtcmFkaXVzIl0pLCJjaXJjbGUtY29sb3IiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1jb2xvciJdKSwiY2lyY2xlLWJsdXIiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1ibHVyIl0pLCJjaXJjbGUtb3BhY2l0eSI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLW9wYWNpdHkiXSksImNpcmNsZS10cmFuc2xhdGUiOm5ldyB3aShMdC5wYWludF9jaXJjbGVbImNpcmNsZS10cmFuc2xhdGUiXSksImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIjpuZXcgd2koTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciJdKSwiY2lyY2xlLXBpdGNoLXNjYWxlIjpuZXcgd2koTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtcGl0Y2gtc2NhbGUiXSksImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiOm5ldyB3aShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiXSksImNpcmNsZS1zdHJva2Utd2lkdGgiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1zdHJva2Utd2lkdGgiXSksImNpcmNsZS1zdHJva2UtY29sb3IiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1zdHJva2UtY29sb3IiXSksImNpcmNsZS1zdHJva2Utb3BhY2l0eSI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS1vcGFjaXR5Il0pfSksbGF5b3V0OmNvfSxmbz0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0MzJBcnJheT9GbG9hdDMyQXJyYXk6QXJyYXk7ZnVuY3Rpb24gaG8odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fWZ1bmN0aW9uIHBvKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSxtPWVbMTJdLGc9ZVsxM10sdj1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qZit3Km0sdFsxXT14KmkrYipsK18qaCt3KmcsdFsyXT14KmErYipjK18qcCt3KnYsdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmYrdyptLHRbNV09eCppK2IqbCtfKmgrdypnLHRbNl09eCphK2IqYytfKnArdyp2LHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmYrdyptLHRbOV09eCppK2IqbCtfKmgrdypnLHRbMTBdPXgqYStiKmMrXypwK3cqdix0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qZit3Km0sdFsxM109eCppK2IqbCtfKmgrdypnLHRbMTRdPXgqYStiKmMrXypwK3cqdix0WzE1XT14Km8rYip1K18qZCt3KnksdH1NYXRoLmh5cG90fHwoTWF0aC5oeXBvdD1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMsZT0wLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWUrPXRbcl0qdFtyXTtyZXR1cm4gTWF0aC5zcXJ0KGUpfSk7dmFyIG1vPXBvO3ZhciBnbyx2byx5bz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHR9O2dvPW5ldyBmbygzKSxmbyE9RmxvYXQzMkFycmF5JiYoZ29bMF09MCxnb1sxXT0wLGdvWzJdPTApLHZvPWdvO2Z1bmN0aW9uIHhvKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fSFmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGZvKDQpO3JldHVybiBmbyE9RmxvYXQzMkFycmF5JiYodFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wKSx0fSgpfSgpO3ZhciBibz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtyZXR1cm4gZSplK3Iqcn0sX289KGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oMik7cmV0dXJuIGZvIT1GbG9hdDMyQXJyYXkmJih0WzBdPTAsdFsxXT0wKSx0fSgpfSgpLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSx1byl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFhhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybiBvbygiY2lyY2xlLXJhZGl1cyIsdGhpcyxlKStvbygiY2lyY2xlLXN0cm9rZS13aWR0aCIsdGhpcyxlKStzbyh0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD1sbyh0LHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIiksYS5hbmdsZSxvKSxjPXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcmFkaXVzIikuZXZhbHVhdGUoZSxyKSt0aGlzLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS13aWR0aCIpLmV2YWx1YXRlKGUsciksdT0ibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50IiksZj11P2w6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB3byh0LGUpfSkpfShsLHMpLGg9dT9jKm86YyxwPTAsZD1uO3A8ZC5sZW5ndGg7cCs9MSlmb3IodmFyIG09MCxnPWRbcF07bTxnLmxlbmd0aDttKz0xKXt2YXIgdj1nW21dLHk9dT92OndvKHYscykseD1oLGI9eG8oW10sW3YueCx2LnksMCwxXSxzKTtpZigidmlld3BvcnQiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpJiYibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iik/eCo9YlszXS9hLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikmJiJ2aWV3cG9ydCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpJiYoeCo9YS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL2JbM10pLEphKGYseSx4KSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oRWkpKTtmdW5jdGlvbiB3byh0LGUpe3ZhciByPXhvKFtdLFt0LngsdC55LDAsMV0sZSk7cmV0dXJuIG5ldyBpKHJbMF0vclszXSxyWzFdL3JbM10pfXZhciBUbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KFhhKTtmdW5jdGlvbiBrbyh0LGUscixuKXt2YXIgaT1lLndpZHRoLGE9ZS5oZWlnaHQ7aWYobil7aWYobiBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KW49bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIpO2Vsc2UgaWYobi5sZW5ndGghPT1pKmEqcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigibWlzbWF0Y2hlZCBpbWFnZSBzaXplIil9ZWxzZSBuPW5ldyBVaW50OEFycmF5KGkqYSpyKTtyZXR1cm4gdC53aWR0aD1pLHQuaGVpZ2h0PWEsdC5kYXRhPW4sdH1mdW5jdGlvbiBBbyh0LGUscil7dmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0O2lmKG4hPT10LndpZHRofHxpIT09dC5oZWlnaHQpe3ZhciBhPWtvKHt9LHt3aWR0aDpuLGhlaWdodDppfSxyKTtNbyh0LGEse3g6MCx5OjB9LHt4OjAseTowfSx7d2lkdGg6TWF0aC5taW4odC53aWR0aCxuKSxoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsaSl9LHIpLHQud2lkdGg9bix0LmhlaWdodD1pLHQuZGF0YT1hLmRhdGF9fWZ1bmN0aW9uIE1vKHQsZSxyLG4saSxhKXtpZigwPT09aS53aWR0aHx8MD09PWkuaGVpZ2h0KXJldHVybiBlO2lmKGkud2lkdGg+dC53aWR0aHx8aS5oZWlnaHQ+dC5oZWlnaHR8fHIueD50LndpZHRoLWkud2lkdGh8fHIueT50LmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2lmKGkud2lkdGg+ZS53aWR0aHx8aS5oZWlnaHQ+ZS5oZWlnaHR8fG4ueD5lLndpZHRoLWkud2lkdGh8fG4ueT5lLmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Iik7Zm9yKHZhciBvPXQuZGF0YSxzPWUuZGF0YSxsPTA7bDxpLmhlaWdodDtsKyspZm9yKHZhciBjPSgoci55K2wpKnQud2lkdGgrci54KSphLHU9KChuLnkrbCkqZS53aWR0aCtuLngpKmEsZj0wO2Y8aS53aWR0aCphO2YrKylzW3UrZl09b1tjK2ZdO3JldHVybiBlfU5uKCJIZWF0bWFwQnVja2V0IixUbyx7b21pdDpbImxheWVycyJdfSk7dmFyIFNvPWZ1bmN0aW9uKHQsZSl7a28odGhpcyx0LDEsZSl9O1NvLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7QW8odGhpcyx0LDEpfSxTby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNvKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LFNvLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtNbyh0LGUscixuLGksMSl9O3ZhciBFbz1mdW5jdGlvbih0LGUpe2tvKHRoaXMsdCw0LGUpfTtFby5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe0FvKHRoaXMsdCw0KX0sRW8ucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGF0YS5zZXQodCk6dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3RoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcik6dGhpcy5kYXRhPXR9LEVvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRW8oe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sRW8uY29weT1mdW5jdGlvbih0LGUscixuLGkpe01vKHQsZSxyLG4saSw0KX0sTm4oIkFscGhhSW1hZ2UiLFNvKSxObigiUkdCQUltYWdlIixFbyk7dmFyIExvPXtwYWludDpuZXcgU2koeyJoZWF0bWFwLXJhZGl1cyI6bmV3IFRpKEx0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtcmFkaXVzIl0pLCJoZWF0bWFwLXdlaWdodCI6bmV3IFRpKEx0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtd2VpZ2h0Il0pLCJoZWF0bWFwLWludGVuc2l0eSI6bmV3IHdpKEx0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtaW50ZW5zaXR5Il0pLCJoZWF0bWFwLWNvbG9yIjpuZXcgTWkoTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1jb2xvciJdKSwiaGVhdG1hcC1vcGFjaXR5IjpuZXcgd2koTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1vcGFjaXR5Il0pfSl9O2Z1bmN0aW9uIENvKHQsZSl7Zm9yKHZhciByPW5ldyBVaW50OEFycmF5KDEwMjQpLG49e30saT0wLGE9MDtpPDI1NjtpKyssYSs9NCl7bltlXT1pLzI1NTt2YXIgbz10LmV2YWx1YXRlKG4pO3JbYSswXT1NYXRoLmZsb29yKDI1NSpvLnIvby5hKSxyW2ErMV09TWF0aC5mbG9vcigyNTUqby5nL28uYSksclthKzJdPU1hdGguZmxvb3IoMjU1Km8uYi9vLmEpLHJbYSszXT1NYXRoLmZsb29yKDI1NSpvLmEpfXJldHVybiBuZXcgRW8oe3dpZHRoOjI1NixoZWlnaHQ6MX0scil9dmFyIFBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxMbyksdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRvKHQpfSxlLnByb3RvdHlwZS5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCl7ImhlYXRtYXAtY29sb3IiPT09dCYmdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9LGUucHJvdG90eXBlLl91cGRhdGVDb2xvclJhbXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbImhlYXRtYXAtY29sb3IiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuY29sb3JSYW1wPUNvKHQsImhlYXRtYXBEZW5zaXR5IiksdGhpcy5jb2xvclJhbXBUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcEZibyYmKHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCksdGhpcy5oZWF0bWFwRmJvPW51bGwpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKSYmIm5vbmUiIT09dGhpcy52aXNpYmlsaXR5fSxlfShFaSksSW89e3BhaW50Om5ldyBTaSh7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjpuZXcgd2koTHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiJdKSwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIl0pLCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIjpuZXcgd2koTHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIl0pLCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIjpuZXcgd2koTHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIl0pLCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIjpuZXcgd2koTHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIl0pLCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIjpuZXcgd2koTHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIl0pfSl9LE9vPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxJbyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIikmJiJub25lIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oRWkpLHpvPUlpKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLERvPUZvLFJvPUZvO2Z1bmN0aW9uIEZvKHQsZSxyKXtyPXJ8fDI7dmFyIG4saSxhLG8scyxsLGMsdT1lJiZlLmxlbmd0aCxmPXU/ZVswXSpyOnQubGVuZ3RoLGg9Qm8odCwwLGYsciwhMCkscD1bXTtpZighaHx8aC5uZXh0PT09aC5wcmV2KXJldHVybiBwO2lmKHUmJihoPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz1bXTtmb3IoaT0wLGE9ZS5sZW5ndGg7aTxhO2krKylvPWVbaV0qbixzPWk8YS0xP2VbaSsxXSpuOnQubGVuZ3RoLChsPUJvKHQsbyxzLG4sITEpKT09PWwubmV4dCYmKGwuc3RlaW5lcj0hMCksYy5wdXNoKFpvKGwpKTtmb3IoYy5zb3J0KEdvKSxpPTA7aTxjLmxlbmd0aDtpKyspWW8oY1tpXSxyKSxyPU5vKHIsci5uZXh0KTtyZXR1cm4gcn0odCxlLGgscikpLHQubGVuZ3RoPjgwKnIpe249YT10WzBdLGk9bz10WzFdO2Zvcih2YXIgZD1yO2Q8ZjtkKz1yKShzPXRbZF0pPG4mJihuPXMpLChsPXRbZCsxXSk8aSYmKGk9bCkscz5hJiYoYT1zKSxsPm8mJihvPWwpO2M9MCE9PShjPU1hdGgubWF4KGEtbixvLWkpKT8xL2M6MH1yZXR1cm4gam8oaCxwLHIsbixpLGMpLHB9ZnVuY3Rpb24gQm8odCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1scyh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1hcyhhLHRbYV0sdFthKzFdLG8pO2Vsc2UgZm9yKGE9ci1uO2E+PWU7YS09bilvPWFzKGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJiRvKG8sby5uZXh0KSYmKG9zKG8pLG89by5uZXh0KSxvfWZ1bmN0aW9uIE5vKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwhJG8obixuLm5leHQpJiYwIT09UW8obi5wcmV2LG4sbi5uZXh0KSluPW4ubmV4dDtlbHNle2lmKG9zKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gam8odCxlLHIsbixpLGEsbyl7aWYodCl7IW8mJmEmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1YbyhpLngsaS55LGUscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHR9d2hpbGUoaSE9PXQpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjPTE7ZG97Zm9yKHI9dCx0PW51bGwsYT1udWxsLG89MDtyOyl7Zm9yKG8rKyxuPXIscz0wLGU9MDtlPGMmJihzKyssbj1uLm5leHRaKTtlKyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KTAhPT1zJiYoMD09PWx8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLGE/YS5uZXh0Wj1pOnQ9aSxpLnByZXZaPWEsYT1pO3I9bn1hLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpfShpKX0odCxuLGksYSk7Zm9yKHZhciBzLGwsYz10O3QucHJldiE9PXQubmV4dDspaWYocz10LnByZXYsbD10Lm5leHQsYT9Wbyh0LG4saSxhKTpVbyh0KSllLnB1c2gocy5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKGwuaS9yKSxvcyh0KSx0PWwubmV4dCxjPWwubmV4dDtlbHNlIGlmKCh0PWwpPT09Yyl7bz8xPT09bz9qbyh0PUhvKE5vKHQpLGUsciksZSxyLG4saSxhLDIpOjI9PT1vJiZxbyh0LGUscixuLGksYSk6am8oTm8odCksZSxyLG4saSxhLDEpO2JyZWFrfX19ZnVuY3Rpb24gVW8odCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihRbyhlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZihKbyhlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmUW8oaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBWbyh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKFFvKGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGY9WG8ocyxsLGUscixuKSxoPVhvKGMsdSxlLHIsbikscD10LnByZXZaLGQ9dC5uZXh0WjtwJiZwLno+PWYmJmQmJmQuejw9aDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJkpvKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZRbyhwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZKbyhpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmUW8oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9Zm9yKDtwJiZwLno+PWY7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZKbyhpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmUW8ocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDtkJiZkLno8PWg7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZKbyhpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmUW8oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gSG8odCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LGE9bi5uZXh0Lm5leHQ7ISRvKGksYSkmJnRzKGksbixuLm5leHQsYSkmJm5zKGksYSkmJm5zKGEsaSkmJihlLnB1c2goaS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGEuaS9yKSxvcyhuKSxvcyhuLm5leHQpLG49dD1hKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIE5vKG4pfWZ1bmN0aW9uIHFvKHQsZSxyLG4saSxhKXt2YXIgbz10O2Rve2Zvcih2YXIgcz1vLm5leHQubmV4dDtzIT09by5wcmV2Oyl7aWYoby5pIT09cy5pJiZLbyhvLHMpKXt2YXIgbD1pcyhvLHMpO3JldHVybiBvPU5vKG8sby5uZXh0KSxsPU5vKGwsbC5uZXh0KSxqbyhvLGUscixuLGksYSksdm9pZCBqbyhsLGUscixuLGksYSl9cz1zLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PXQpfWZ1bmN0aW9uIEdvKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gWW8odCxlKXtpZihlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcjt2YXIgbCxjPXIsdT1yLngsZj1yLnksaD0xLzA7bj1yO2Rve2k+PW4ueCYmbi54Pj11JiZpIT09bi54JiZKbyhhPGY/aTpvLGEsdSxmLGE8Zj9vOmksYSxuLngsbi55KSYmKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCksbnMobix0KSYmKGw8aHx8bD09PWgmJihuLng+ci54fHxuLng9PT1yLngmJldvKHIsbikpKSYmKHI9bixoPWwpKSxuPW4ubmV4dH13aGlsZShuIT09Yyk7cmV0dXJuIHJ9KHQsZSkpe3ZhciByPWlzKGUsdCk7Tm8oZSxlLm5leHQpLE5vKHIsci5uZXh0KX19ZnVuY3Rpb24gV28odCxlKXtyZXR1cm4gUW8odC5wcmV2LHQsZS5wcmV2KTwwJiZRbyhlLm5leHQsdCx0Lm5leHQpPDB9ZnVuY3Rpb24gWG8odCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBabyh0KXt2YXIgZT10LHI9dDtkb3soZS54PHIueHx8ZS54PT09ci54JiZlLnk8ci55KSYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIEpvKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuKGktbykqKGUtcyktKHQtbykqKGEtcyk+PTAmJih0LW8pKihuLXMpLShyLW8pKihlLXMpPj0wJiYoci1vKSooYS1zKS0oaS1vKSoobi1zKT49MH1mdW5jdGlvbiBLbyh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmdHMocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJihucyh0LGUpJiZucyhlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpJiYoUW8odC5wcmV2LHQsZS5wcmV2KXx8UW8odCxlLnByZXYsZSkpfHwkbyh0LGUpJiZRbyh0LnByZXYsdCx0Lm5leHQpPjAmJlFvKGUucHJldixlLGUubmV4dCk+MCl9ZnVuY3Rpb24gUW8odCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiAkbyh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiB0cyh0LGUscixuKXt2YXIgaT1ycyhRbyh0LGUscikpLGE9cnMoUW8odCxlLG4pKSxvPXJzKFFvKHIsbix0KSkscz1ycyhRbyhyLG4sZSkpO3JldHVybiBpIT09YSYmbyE9PXN8fCghKDAhPT1pfHwhZXModCxyLGUpKXx8KCEoMCE9PWF8fCFlcyh0LG4sZSkpfHwoISgwIT09b3x8IWVzKHIsdCxuKSl8fCEoMCE9PXN8fCFlcyhyLGUsbikpKSkpfWZ1bmN0aW9uIGVzKHQsZSxyKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsci54KSYmZS54Pj1NYXRoLm1pbih0Lngsci54KSYmZS55PD1NYXRoLm1heCh0Lnksci55KSYmZS55Pj1NYXRoLm1pbih0Lnksci55KX1mdW5jdGlvbiBycyh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gbnModCxlKXtyZXR1cm4gUW8odC5wcmV2LHQsdC5uZXh0KTwwP1FvKHQsZSx0Lm5leHQpPj0wJiZRbyh0LHQucHJldixlKT49MDpRbyh0LGUsdC5wcmV2KTwwfHxRbyh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIGlzKHQsZSl7dmFyIHI9bmV3IHNzKHQuaSx0LngsdC55KSxuPW5ldyBzcyhlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gYXModCxlLHIsbil7dmFyIGk9bmV3IHNzKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gb3ModCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBzcyh0LGUscil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gbHModCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9ZnVuY3Rpb24gY3ModCxlLHIsbixpKXshZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcig7aT5uOyl7aWYoaS1uPjYwMCl7dmFyIG89aS1uKzEscz1yLW4rMSxsPU1hdGgubG9nKG8pLGM9LjUqTWF0aC5leHAoMipsLzMpLHU9LjUqTWF0aC5zcXJ0KGwqYyooby1jKS9vKSoocy1vLzI8MD8tMToxKSxmPU1hdGgubWF4KG4sTWF0aC5mbG9vcihyLXMqYy9vK3UpKSxoPU1hdGgubWluKGksTWF0aC5mbG9vcihyKyhvLXMpKmMvbyt1KSk7dChlLHIsZixoLGEpfXZhciBwPWVbcl0sZD1uLG09aTtmb3IodXMoZSxuLHIpLGEoZVtpXSxwKT4wJiZ1cyhlLG4saSk7ZDxtOyl7Zm9yKHVzKGUsZCxtKSxkKyssbS0tO2EoZVtkXSxwKTwwOylkKys7Zm9yKDthKGVbbV0scCk+MDspbS0tfTA9PT1hKGVbbl0scCk/dXMoZSxuLG0pOihtKyssdXMoZSxtLGkpKSxtPD1yJiYobj1tKzEpLHI8PW0mJihpPW0tMSl9fSh0LGUscnx8MCxufHx0Lmxlbmd0aC0xLGl8fGZzKX1mdW5jdGlvbiB1cyh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGZzKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGhzKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYocjw9MSlyZXR1cm5bdF07Zm9yKHZhciBuLGksYT1bXSxvPTA7bzxyO28rKyl7dmFyIHM9VCh0W29dKTswIT09cyYmKHRbb10uYXJlYT1NYXRoLmFicyhzKSx2b2lkIDA9PT1pJiYoaT1zPDApLGk9PT1zPDA/KG4mJmEucHVzaChuKSxuPVt0W29dXSk6bi5wdXNoKHRbb10pKX1pZihuJiZhLnB1c2gobiksZT4xKWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF0ubGVuZ3RoPD1lfHwoY3MoYVtsXSxlLDEsYVtsXS5sZW5ndGgtMSxwcyksYVtsXT1hW2xdLnNsaWNlKDAsZSkpO3JldHVybiBhfWZ1bmN0aW9uIHBzKHQsZSl7cmV0dXJuIGUuYXJlYS10LmFyZWF9ZnVuY3Rpb24gZHModCxlLHIpe2Zvcih2YXIgbj1yLnBhdHRlcm5EZXBlbmRlbmNpZXMsaT0hMSxhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXS5wYWludC5nZXQodCsiLXBhdHRlcm4iKTtzLmlzQ29uc3RhbnQoKXx8KGk9ITApO3ZhciBsPXMuY29uc3RhbnRPcihudWxsKTtsJiYoaT0hMCxuW2wudG9dPSEwLG5bbC5mcm9tXT0hMCl9cmV0dXJuIGl9ZnVuY3Rpb24gbXModCxlLHIsbixpKXtmb3IodmFyIGE9aS5wYXR0ZXJuRGVwZW5kZW5jaWVzLG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5wYWludC5nZXQodCsiLXBhdHRlcm4iKS52YWx1ZTtpZigiY29uc3RhbnQiIT09Yy5raW5kKXt2YXIgdT1jLmV2YWx1YXRlKHt6b29tOm4tMX0scix7fSxpLmF2YWlsYWJsZUltYWdlcyksZj1jLmV2YWx1YXRlKHt6b29tOm59LHIse30saS5hdmFpbGFibGVJbWFnZXMpLGg9Yy5ldmFsdWF0ZSh7em9vbTpuKzF9LHIse30saS5hdmFpbGFibGVJbWFnZXMpO3U9dSYmdS5uYW1lP3UubmFtZTp1LGY9ZiYmZi5uYW1lP2YubmFtZTpmLGg9aCYmaC5uYW1lP2gubmFtZTpoLGFbdV09ITAsYVtmXT0hMCxhW2hdPSEwLHIucGF0dGVybnNbbC5pZF09e21pbjp1LG1pZDpmLG1heDpofX19cmV0dXJuIHJ9Rm8uZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9aT9lWzBdKnI6dC5sZW5ndGgsbz1NYXRoLmFicyhscyh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKGxzKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0sRm8uZmxhdHRlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXVswXS5sZW5ndGgscj17dmVydGljZXM6W10saG9sZXM6W10sZGltZW5zaW9uczplfSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9MDthPHRbaV0ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGU7bysrKXIudmVydGljZXMucHVzaCh0W2ldW2FdW29dKTtpPjAmJihuKz10W2ktMV0ubGVuZ3RoLHIuaG9sZXMucHVzaChuKSl9cmV0dXJuIHJ9LERvLmRlZmF1bHQ9Um87dmFyIGdzPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMucGF0dGVybkZlYXR1cmVzPVtdLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHppLHRoaXMuaW5kZXhBcnJheT1uZXcgWWksdGhpcy5pbmRleEFycmF5Mj1uZXcgUWksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFVhKHpvLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgcGEsdGhpcy5zZWdtZW50czI9bmV3IHBhLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtncy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGFzUGF0dGVybj1kcygiZmlsbCIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPXRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoImZpbGwtc29ydC1rZXkiKSxpPVtdLGE9MCxvPXQ7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5mZWF0dXJlLGM9cy5pZCx1PXMuaW5kZXgsZj1zLnNvdXJjZUxheWVySW5kZXgsaD10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnkscD17dHlwZTpsLnR5cGUsaWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyxnZW9tZXRyeTpoP1lhKGwpOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IHBpKHRoaXMuem9vbSkscCxyKSl7aHx8KHAuZ2VvbWV0cnk9WWEobCkpO3ZhciBkPW4/bi5ldmFsdWF0ZShwLHt9LHIsZS5hdmFpbGFibGVJbWFnZXMpOnZvaWQgMCxtPXtpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLHR5cGU6bC50eXBlLHNvdXJjZUxheWVySW5kZXg6ZixpbmRleDp1LGdlb21ldHJ5OnAuZ2VvbWV0cnkscGF0dGVybnM6e30sc29ydEtleTpkfTtpLnB1c2gobSl9fW4mJmkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIGc9MCx2PWk7Zzx2Lmxlbmd0aDtnKz0xKXt2YXIgeT12W2ddLHg9eSxiPXguZ2VvbWV0cnksXz14LmluZGV4LHc9eC5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMuaGFzUGF0dGVybil7dmFyIFQ9bXMoImZpbGwiLHRoaXMubGF5ZXJzLHksdGhpcy56b29tLGUpO3RoaXMucGF0dGVybkZlYXR1cmVzLnB1c2goVCl9ZWxzZSB0aGlzLmFkZEZlYXR1cmUoeSxiLF8scix7fSk7dmFyIGs9dFtfXS5mZWF0dXJlO2UuZmVhdHVyZUluZGV4Lmluc2VydChrLGIsXyx3LHRoaXMuaW5kZXgpfX0sZ3MucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxncy5wcm90b3R5cGUuYWRkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5wYXR0ZXJuRmVhdHVyZXM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuYWRkRmVhdHVyZShhLGEuZ2VvbWV0cnksYS5pbmRleCxlLHIpfX0sZ3MucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxncy5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sZ3MucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx6byksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5pbmRleEJ1ZmZlcjI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkyKSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LGdzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlcjIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzMi5kZXN0cm95KCkpfSxncy5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT0wLG89aHMoZSw1MDApO2E8by5sZW5ndGg7YSs9MSl7Zm9yKHZhciBzPW9bYV0sbD0wLGM9MCx1PXM7Yzx1Lmxlbmd0aDtjKz0xKXtsKz11W2NdLmxlbmd0aH1mb3IodmFyIGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChsLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxoPWYudmVydGV4TGVuZ3RoLHA9W10sZD1bXSxtPTAsZz1zO208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXTtpZigwIT09di5sZW5ndGgpe3YhPT1zWzBdJiZkLnB1c2gocC5sZW5ndGgvMik7dmFyIHk9dGhpcy5zZWdtZW50czIucHJlcGFyZVNlZ21lbnQodi5sZW5ndGgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkyKSx4PXkudmVydGV4TGVuZ3RoO3RoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodlswXS54LHZbMF0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh4K3YubGVuZ3RoLTEseCkscC5wdXNoKHZbMF0ueCkscC5wdXNoKHZbMF0ueSk7Zm9yKHZhciBiPTE7Yjx2Lmxlbmd0aDtiKyspdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayh2W2JdLngsdltiXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHgrYi0xLHgrYikscC5wdXNoKHZbYl0ueCkscC5wdXNoKHZbYl0ueSk7eS52ZXJ0ZXhMZW5ndGgrPXYubGVuZ3RoLHkucHJpbWl0aXZlTGVuZ3RoKz12Lmxlbmd0aH19Zm9yKHZhciBfPURvKHAsZCksdz0wO3c8Xy5sZW5ndGg7dys9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCtfW3ddLGgrX1t3KzFdLGgrX1t3KzJdKTtmLnZlcnRleExlbmd0aCs9bCxmLnByaW1pdGl2ZUxlbmd0aCs9Xy5sZW5ndGgvM310aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscixpLG4pfSxObigiRmlsbEJ1Y2tldCIsZ3Mse29taXQ6WyJsYXllcnMiLCJwYXR0ZXJuRmVhdHVyZXMiXX0pO3ZhciB2cz1uZXcgU2koeyJmaWxsLXNvcnQta2V5IjpuZXcgVGkoTHQubGF5b3V0X2ZpbGxbImZpbGwtc29ydC1rZXkiXSl9KSx5cz17cGFpbnQ6bmV3IFNpKHsiZmlsbC1hbnRpYWxpYXMiOm5ldyB3aShMdC5wYWludF9maWxsWyJmaWxsLWFudGlhbGlhcyJdKSwiZmlsbC1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfZmlsbFsiZmlsbC1vcGFjaXR5Il0pLCJmaWxsLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfZmlsbFsiZmlsbC1jb2xvciJdKSwiZmlsbC1vdXRsaW5lLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfZmlsbFsiZmlsbC1vdXRsaW5lLWNvbG9yIl0pLCJmaWxsLXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X2ZpbGxbImZpbGwtdHJhbnNsYXRlIl0pLCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdC5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtcGF0dGVybiI6bmV3IGtpKEx0LnBhaW50X2ZpbGxbImZpbGwtcGF0dGVybiJdKX0pLGxheW91dDp2c30seHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHlzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKTt2YXIgbj10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdOyJjb25zdGFudCI9PT1uLnZhbHVlLmtpbmQmJnZvaWQgMD09PW4udmFsdWUudmFsdWUmJih0aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdPXRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1jb2xvciJdKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ3ModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHNvKHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtyZXR1cm4gS2EobG8odCx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUtYW5jaG9yIiksYS5hbmdsZSxvKSxuKX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiEwfSxlfShFaSksYnM9SWkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfbm9ybWFsX2VkIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxfcz13cztmdW5jdGlvbiB3cyh0LGUscixuLGkpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9aSx0LnJlYWRGaWVsZHMoVHMsdGhpcyxlKX1mdW5jdGlvbiBUcyh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJlYWRWYXJpbnQoKSt0LnBvcztmb3IoO3QucG9zPHI7KXt2YXIgbj1lLl9rZXlzW3QucmVhZFZhcmludCgpXSxpPWUuX3ZhbHVlc1t0LnJlYWRWYXJpbnQoKV07ZS5wcm9wZXJ0aWVzW25dPWl9fShyLGUpOjM9PXQ/ZS50eXBlPXIucmVhZFZhcmludCgpOjQ9PXQmJihlLl9nZW9tZXRyeT1yLnBvcyl9ZnVuY3Rpb24ga3ModCl7Zm9yKHZhciBlLHIsbj0wLGk9MCxhPXQubGVuZ3RoLG89YS0xO2k8YTtvPWkrKyllPXRbaV0sbis9KChyPXRbb10pLngtZS54KSooZS55K3IueSk7cmV0dXJuIG59d3MudHlwZXM9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLHdzLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYmY7dC5wb3M9dGhpcy5fZ2VvbWV0cnk7Zm9yKHZhciBlLHI9dC5yZWFkVmFyaW50KCkrdC5wb3Msbj0xLGE9MCxvPTAscz0wLGw9W107dC5wb3M8cjspe2lmKGE8PTApe3ZhciBjPXQucmVhZFZhcmludCgpO249NyZjLGE9Yz4+M31pZihhLS0sMT09PW58fDI9PT1uKW8rPXQucmVhZFNWYXJpbnQoKSxzKz10LnJlYWRTVmFyaW50KCksMT09PW4mJihlJiZsLnB1c2goZSksZT1bXSksZS5wdXNoKG5ldyBpKG8scykpO2Vsc2V7aWYoNyE9PW4pdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIituKTtlJiZlLnB1c2goZVswXS5jbG9uZSgpKX19cmV0dXJuIGUmJmwucHVzaChlKSxsfSx3cy5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGU9dC5yZWFkVmFyaW50KCkrdC5wb3Mscj0xLG49MCxpPTAsYT0wLG89MS8wLHM9LTEvMCxsPTEvMCxjPS0xLzA7dC5wb3M8ZTspe2lmKG48PTApe3ZhciB1PXQucmVhZFZhcmludCgpO3I9NyZ1LG49dT4+M31pZihuLS0sMT09PXJ8fDI9PT1yKShpKz10LnJlYWRTVmFyaW50KCkpPG8mJihvPWkpLGk+cyYmKHM9aSksKGErPXQucmVhZFNWYXJpbnQoKSk8bCYmKGw9YSksYT5jJiYoYz1hKTtlbHNlIGlmKDchPT1yKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjb21tYW5kICIrcil9cmV0dXJuW28sbCxzLGNdfSx3cy5wcm90b3R5cGUudG9HZW9KU09OPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dGhpcy5leHRlbnQqTWF0aC5wb3coMixyKSxvPXRoaXMuZXh0ZW50KnQscz10aGlzLmV4dGVudCplLGw9dGhpcy5sb2FkR2VvbWV0cnkoKSxjPXdzLnR5cGVzW3RoaXMudHlwZV07ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXSxuPTE4MC0zNjAqKHIueStzKS9hO3RbZV09WzM2MCooci54K28pL2EtMTgwLDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cChuKk1hdGguUEkvMTgwKSktOTBdfX1zd2l0Y2godGhpcy50eXBlKXtjYXNlIDE6dmFyIGY9W107Zm9yKG49MDtuPGwubGVuZ3RoO24rKylmW25dPWxbbl1bMF07dShsPWYpO2JyZWFrO2Nhc2UgMjpmb3Iobj0wO248bC5sZW5ndGg7bisrKXUobFtuXSk7YnJlYWs7Y2FzZSAzOmZvcihsPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PTEpcmV0dXJuW3RdO2Zvcih2YXIgcixuLGk9W10sYT0wO2E8ZTthKyspe3ZhciBvPWtzKHRbYV0pOzAhPT1vJiYodm9pZCAwPT09biYmKG49bzwwKSxuPT09bzwwPyhyJiZpLnB1c2gocikscj1bdFthXV0pOnIucHVzaCh0W2FdKSl9ciYmaS5wdXNoKHIpO3JldHVybiBpfShsKSxuPTA7bjxsLmxlbmd0aDtuKyspZm9yKGk9MDtpPGxbbl0ubGVuZ3RoO2krKyl1KGxbbl1baV0pfTE9PT1sLmxlbmd0aD9sPWxbMF06Yz0iTXVsdGkiK2M7dmFyIGg9e3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOmMsY29vcmRpbmF0ZXM6bH0scHJvcGVydGllczp0aGlzLnByb3BlcnRpZXN9O3JldHVybiJpZCJpbiB0aGlzJiYoaC5pZD10aGlzLmlkKSxofTt2YXIgQXM9TXM7ZnVuY3Rpb24gTXModCxlKXt0aGlzLnZlcnNpb249MSx0aGlzLm5hbWU9bnVsbCx0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKFNzLHRoaXMsZSksdGhpcy5sZW5ndGg9dGhpcy5fZmVhdHVyZXMubGVuZ3RofWZ1bmN0aW9uIFNzKHQsZSxyKXsxNT09PXQ/ZS52ZXJzaW9uPXIucmVhZFZhcmludCgpOjE9PT10P2UubmFtZT1yLnJlYWRTdHJpbmcoKTo1PT09dD9lLmV4dGVudD1yLnJlYWRWYXJpbnQoKToyPT09dD9lLl9mZWF0dXJlcy5wdXNoKHIucG9zKTozPT09dD9lLl9rZXlzLnB1c2goci5yZWFkU3RyaW5nKCkpOjQ9PT10JiZlLl92YWx1ZXMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1udWxsLHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7Zm9yKDt0LnBvczxyOyl7dmFyIG49dC5yZWFkVmFyaW50KCk+PjM7ZT0xPT09bj90LnJlYWRTdHJpbmcoKToyPT09bj90LnJlYWRGbG9hdCgpOjM9PT1uP3QucmVhZERvdWJsZSgpOjQ9PT1uP3QucmVhZFZhcmludDY0KCk6NT09PW4/dC5yZWFkVmFyaW50KCk6Nj09PW4/dC5yZWFkU1ZhcmludCgpOjc9PT1uP3QucmVhZEJvb2xlYW4oKTpudWxsfXJldHVybiBlfShyKSl9ZnVuY3Rpb24gRXModCxlLHIpe2lmKDM9PT10KXt2YXIgbj1uZXcgQXMocixyLnJlYWRWYXJpbnQoKStyLnBvcyk7bi5sZW5ndGgmJihlW24ubmFtZV09bil9fU1zLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe2lmKHQ8MHx8dD49dGhpcy5fZmVhdHVyZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZmVhdHVyZSBpbmRleCBvdXQgb2YgYm91bmRzIik7dGhpcy5fcGJmLnBvcz10aGlzLl9mZWF0dXJlc1t0XTt2YXIgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBfcyh0aGlzLl9wYmYsZSx0aGlzLmV4dGVudCx0aGlzLl9rZXlzLHRoaXMuX3ZhbHVlcyl9O3ZhciBMcz17VmVjdG9yVGlsZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5ZXJzPXQucmVhZEZpZWxkcyhFcyx7fSxlKX0sVmVjdG9yVGlsZUZlYXR1cmU6X3MsVmVjdG9yVGlsZUxheWVyOkFzfSxDcz1Mcy5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxQcz1NYXRoLnBvdygyLDEzKTtmdW5jdGlvbiBJcyh0LGUscixuLGksYSxvLHMpe3QuZW1wbGFjZUJhY2soZSxyLDIqTWF0aC5mbG9vcihuKlBzKStvLGkqUHMqMixhKlBzKjIsTWF0aC5yb3VuZChzKSl9dmFyIE9zPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IFJpLHRoaXMuaW5kZXhBcnJheT1uZXcgWWksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFVhKGJzLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgcGEsdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O2Z1bmN0aW9uIHpzKHQsZSl7cmV0dXJuIHQueD09PWUueCYmKHQueDwwfHx0Lng+ODE5Mil8fHQueT09PWUueSYmKHQueTwwfHx0Lnk+ODE5Mil9ZnVuY3Rpb24gRHModCl7cmV0dXJuIHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng8MH0pKXx8dC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueD44MTkyfSkpfHx0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC55PDB9KSl8fHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk+ODE5Mn0pKX1Pcy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZmVhdHVyZXM9W10sdGhpcy5oYXNQYXR0ZXJuPWRzKCJmaWxsLWV4dHJ1c2lvbiIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEuZmVhdHVyZSxzPWEuaWQsbD1hLmluZGV4LGM9YS5zb3VyY2VMYXllckluZGV4LHU9dGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5LGY9e3R5cGU6by50eXBlLGlkOnMscHJvcGVydGllczpvLnByb3BlcnRpZXMsZ2VvbWV0cnk6dT9ZYShvKTpbXX07aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBwaSh0aGlzLnpvb20pLGYscikpe3ZhciBoPXtpZDpzLHNvdXJjZUxheWVySW5kZXg6YyxpbmRleDpsLGdlb21ldHJ5OnU/Zi5nZW9tZXRyeTpZYShvKSxwcm9wZXJ0aWVzOm8ucHJvcGVydGllcyx0eXBlOm8udHlwZSxwYXR0ZXJuczp7fX07dm9pZCAwIT09by5pZCYmKGguaWQ9by5pZCksdGhpcy5oYXNQYXR0ZXJuP3RoaXMuZmVhdHVyZXMucHVzaChtcygiZmlsbC1leHRydXNpb24iLHRoaXMubGF5ZXJzLGgsdGhpcy56b29tLGUpKTp0aGlzLmFkZEZlYXR1cmUoaCxoLmdlb21ldHJ5LGwscix7fSksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KG8saC5nZW9tZXRyeSxsLGMsdGhpcy5pbmRleCwhMCl9fX0sT3MucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMuZmVhdHVyZXM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5nZW9tZXRyeTt0aGlzLmFkZEZlYXR1cmUoYSxvLGEuaW5kZXgsZSxyKX19LE9zLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sT3MucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxPcy5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sT3MucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxicyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxPcy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LE9zLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTAsbz1ocyhlLDUwMCk7YTxvLmxlbmd0aDthKz0xKXtmb3IodmFyIHM9b1thXSxsPTAsYz0wLHU9cztjPHUubGVuZ3RoO2MrPTEpe2wrPXVbY10ubGVuZ3RofWZvcih2YXIgZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGg9MCxwPXM7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdO2lmKDAhPT1kLmxlbmd0aCYmIURzKGQpKWZvcih2YXIgbT0wLGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIHY9ZFtnXTtpZihnPj0xKXt2YXIgeT1kW2ctMV07aWYoIXpzKHYseSkpe2YudmVydGV4TGVuZ3RoKzQ+cGEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJihmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkpO3ZhciB4PXYuc3ViKHkpLl9wZXJwKCkuX3VuaXQoKSxiPXkuZGlzdCh2KTttK2I+MzI3NjgmJihtPTApLElzKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdi54LHYueSx4LngseC55LDAsMCxtKSxJcyh0aGlzLmxheW91dFZlcnRleEFycmF5LHYueCx2LnkseC54LHgueSwwLDEsbSksbSs9YixJcyh0aGlzLmxheW91dFZlcnRleEFycmF5LHkueCx5LnkseC54LHgueSwwLDAsbSksSXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx5LngseS55LHgueCx4LnksMCwxLG0pO3ZhciBfPWYudmVydGV4TGVuZ3RoO3RoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfLF8rMixfKzEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfKzEsXysyLF8rMyksZi52ZXJ0ZXhMZW5ndGgrPTQsZi5wcmltaXRpdmVMZW5ndGgrPTJ9fX19aWYoZi52ZXJ0ZXhMZW5ndGgrbD5wYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChsLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSksIlBvbHlnb24iPT09Q3NbdC50eXBlXSl7Zm9yKHZhciB3PVtdLFQ9W10saz1mLnZlcnRleExlbmd0aCxBPTAsTT1zO0E8TS5sZW5ndGg7QSs9MSl7dmFyIFM9TVtBXTtpZigwIT09Uy5sZW5ndGgpe1MhPT1zWzBdJiZULnB1c2gody5sZW5ndGgvMik7Zm9yKHZhciBFPTA7RTxTLmxlbmd0aDtFKyspe3ZhciBMPVNbRV07SXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxMLngsTC55LDAsMCwxLDEsMCksdy5wdXNoKEwueCksdy5wdXNoKEwueSl9fX1mb3IodmFyIEM9RG8odyxUKSxQPTA7UDxDLmxlbmd0aDtQKz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhrK0NbUF0saytDW1ArMl0saytDW1ArMV0pO2YucHJpbWl0aXZlTGVuZ3RoKz1DLmxlbmd0aC8zLGYudmVydGV4TGVuZ3RoKz1sfX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscixpLG4pfSxObigiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIsT3Mse29taXQ6WyJsYXllcnMiLCJmZWF0dXJlcyJdfSk7dmFyIFJzPXtwYWludDpuZXcgU2koeyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IjpuZXcgd2koTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiXSksImZpbGwtZXh0cnVzaW9uLWNvbG9yIjpuZXcgVGkoTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWNvbG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOm5ldyB3aShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIjpuZXcgd2koTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOm5ldyBraShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tcGF0dGVybiJdKSwiZmlsbC1leHRydXNpb24taGVpZ2h0IjpuZXcgVGkoTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWhlaWdodCJdKSwiZmlsbC1leHRydXNpb24tYmFzZSI6bmV3IFRpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1iYXNlIl0pLCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCI6bmV3IHdpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCJdKX0pfSxGcz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsUnMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPcyh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gc28odGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMsbCl7dmFyIGM9bG8odCx0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiKSxvLmFuZ2xlLHMpLHU9dGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLWhlaWdodCIpLmV2YWx1YXRlKGUsciksZj10aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tYmFzZSIpLmV2YWx1YXRlKGUsciksaD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9W10sbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1bbC54LGwueSxuLDFdO3hvKGMsYyxlKSxhLnB1c2gobmV3IGkoY1swXS9jWzNdLGNbMV0vY1szXSkpfXJldHVybiBhfShjLGwsMCwwKSxwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1bXSxvPVtdLHM9bls4XSplLGw9bls5XSplLGM9blsxMF0qZSx1PW5bMTFdKmUsZj1uWzhdKnIsaD1uWzldKnIscD1uWzEwXSpyLGQ9blsxMV0qcixtPTAsZz10O208Zy5sZW5ndGg7bSs9MSl7Zm9yKHZhciB2PWdbbV0seT1bXSx4PVtdLGI9MCxfPXY7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9dy54LGs9dy55LEE9blswXSpUK25bNF0qaytuWzEyXSxNPW5bMV0qVCtuWzVdKmsrblsxM10sUz1uWzJdKlQrbls2XSprK25bMTRdLEU9blszXSpUK25bN10qaytuWzE1XSxMPVMrYyxDPUUrdSxQPUErZixJPU0raCxPPVMrcCx6PUUrZCxEPW5ldyBpKChBK3MpL0MsKE0rbCkvQyk7RC56PUwvQyx5LnB1c2goRCk7dmFyIFI9bmV3IGkoUC96LEkveik7Ui56PU8veix4LnB1c2goUil9YS5wdXNoKHkpLG8ucHVzaCh4KX1yZXR1cm5bYSxvXX0obixmLHUsbCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0xLzA7S2EocixlKSYmKG49TnMocixlWzBdKSk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspZm9yKHZhciBhPWVbaV0sbz10W2ldLHM9MDtzPGEubGVuZ3RoLTE7cysrKXt2YXIgbD1hW3NdLGM9YVtzKzFdLHU9b1tzXSxmPW9bcysxXSxoPVtsLGMsZix1LGxdO1phKHIsaCkmJihuPU1hdGgubWluKG4sTnMocixoKSkpfXJldHVybiBuIT09MS8wJiZufShwWzBdLHBbMV0saCl9LGV9KEVpKTtmdW5jdGlvbiBCcyh0LGUpe3JldHVybiB0LngqZS54K3QueSplLnl9ZnVuY3Rpb24gTnModCxlKXtpZigxPT09dC5sZW5ndGgpe2Zvcih2YXIgcixuPTAsaT1lW24rK107IXJ8fGkuZXF1YWxzKHIpOylpZighKHI9ZVtuKytdKSlyZXR1cm4gMS8wO2Zvcig7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl0sbz10WzBdLHM9ci5zdWIoaSksbD1hLnN1YihpKSxjPW8uc3ViKGkpLHU9QnMocyxzKSxmPUJzKHMsbCksaD1CcyhsLGwpLHA9QnMoYyxzKSxkPUJzKGMsbCksbT11KmgtZipmLGc9KGgqcC1mKmQpL20sdj0odSpkLWYqcCkvbSx5PTEtZy12LHg9aS56Knkrci56KmcrYS56KnY7aWYoaXNGaW5pdGUoeCkpcmV0dXJuIHh9cmV0dXJuIDEvMH1mb3IodmFyIGI9MS8wLF89MCx3PWU7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgVD13W19dO2I9TWF0aC5taW4oYixULnopfXJldHVybiBifXZhciBqcz1JaShbe25hbWU6ImFfcG9zX25vcm1hbCIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfZGF0YSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQ4In1dLDQpLm1lbWJlcnMsVXM9THMuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsVnM9TWF0aC5jb3MoTWF0aC5QSS8xODAqMzcuNSksSHM9TWF0aC5wb3coMiwxNCkvLjUscXM9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5wYXR0ZXJuRmVhdHVyZXM9W10sdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgRmksdGhpcy5pbmRleEFycmF5PW5ldyBZaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgVWEoanMsdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKX07cXMucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhhc1BhdHRlcm49ZHMoImxpbmUiLHRoaXMubGF5ZXJzLGUpO2Zvcih2YXIgbj10aGlzLmxheWVyc1swXS5sYXlvdXQuZ2V0KCJsaW5lLXNvcnQta2V5IiksaT1bXSxhPTAsbz10O2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXMuZmVhdHVyZSxjPXMuaWQsdT1zLmluZGV4LGY9cy5zb3VyY2VMYXllckluZGV4LGg9dGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5LHA9e3R5cGU6bC50eXBlLGlkOmMscHJvcGVydGllczpsLnByb3BlcnRpZXMsZ2VvbWV0cnk6aD9ZYShsKTpbXX07aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBwaSh0aGlzLnpvb20pLHAscikpe2h8fChwLmdlb21ldHJ5PVlhKGwpKTt2YXIgZD1uP24uZXZhbHVhdGUocCx7fSxyKTp2b2lkIDAsbT17aWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyx0eXBlOmwudHlwZSxzb3VyY2VMYXllckluZGV4OmYsaW5kZXg6dSxnZW9tZXRyeTpwLmdlb21ldHJ5LHBhdHRlcm5zOnt9LHNvcnRLZXk6ZH07aS5wdXNoKG0pfX1uJiZpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBnPTAsdj1pO2c8di5sZW5ndGg7Zys9MSl7dmFyIHk9dltnXSx4PXksYj14Lmdlb21ldHJ5LF89eC5pbmRleCx3PXguc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmhhc1BhdHRlcm4pe3ZhciBUPW1zKCJsaW5lIix0aGlzLmxheWVycyx5LHRoaXMuem9vbSxlKTt0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKFQpfWVsc2UgdGhpcy5hZGRGZWF0dXJlKHksYixfLHIse30pO3ZhciBrPXRbX10uZmVhdHVyZTtlLmZlYXR1cmVJbmRleC5pbnNlcnQoayxiLF8sdyx0aGlzLmluZGV4KX19LHFzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0scXMucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMucGF0dGVybkZlYXR1cmVzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLmFkZEZlYXR1cmUoYSxhLmdlb21ldHJ5LGEuaW5kZXgsZSxyKX19LHFzLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0scXMucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LHFzLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksanMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0scXMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxxcy5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10aGlzLmxheWVyc1swXS5sYXlvdXQsbz1hLmdldCgibGluZS1qb2luIikuZXZhbHVhdGUodCx7fSkscz1hLmdldCgibGluZS1jYXAiKSxsPWEuZ2V0KCJsaW5lLW1pdGVyLWxpbWl0IiksYz1hLmdldCgibGluZS1yb3VuZC1saW1pdCIpLHU9MCxmPWU7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO3RoaXMuYWRkTGluZShoLHQsbyxzLGwsYyl9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIsaSxuKX0scXMucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLnNjYWxlZERpc3RhbmNlPTAsdGhpcy50b3RhbERpc3RhbmNlPTAsZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm1hcGJveF9jbGlwX3N0YXJ0IikmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfZW5kIikpe3RoaXMuY2xpcFN0YXJ0PStlLnByb3BlcnRpZXMubWFwYm94X2NsaXBfc3RhcnQsdGhpcy5jbGlwRW5kPStlLnByb3BlcnRpZXMubWFwYm94X2NsaXBfZW5kO2Zvcih2YXIgbz0wO288dC5sZW5ndGgtMTtvKyspdGhpcy50b3RhbERpc3RhbmNlKz10W29dLmRpc3QodFtvKzFdKTt0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCl9Zm9yKHZhciBzPSJQb2x5Z29uIj09PVVzW2UudHlwZV0sbD10Lmxlbmd0aDtsPj0yJiZ0W2wtMV0uZXF1YWxzKHRbbC0yXSk7KWwtLTtmb3IodmFyIGM9MDtjPGwtMSYmdFtjXS5lcXVhbHModFtjKzFdKTspYysrO2lmKCEobDwocz8zOjIpKSl7ImJldmVsIj09PXImJihpPTEuMDUpO3ZhciB1LGY9dGhpcy5vdmVyc2NhbGluZzw9MTY/MTIyODgwLyg1MTIqdGhpcy5vdmVyc2NhbGluZyk6MCxoPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMTAqbCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkscD12b2lkIDAsZD12b2lkIDAsbT12b2lkIDAsZz12b2lkIDA7dGhpcy5lMT10aGlzLmUyPS0xLHMmJih1PXRbbC0yXSxnPXRbY10uc3ViKHUpLl91bml0KCkuX3BlcnAoKSk7Zm9yKHZhciB2PWM7djxsO3YrKylpZighKGQ9dj09PWwtMT9zP3RbYysxXTp2b2lkIDA6dFt2KzFdKXx8IXRbdl0uZXF1YWxzKGQpKXtnJiYobT1nKSx1JiYocD11KSx1PXRbdl0sZz1kP2Quc3ViKHUpLl91bml0KCkuX3BlcnAoKTptO3ZhciB5PShtPW18fGcpLmFkZChnKTswPT09eS54JiYwPT09eS55fHx5Ll91bml0KCk7dmFyIHg9bS54KmcueCttLnkqZy55LGI9eS54KmcueCt5LnkqZy55LF89MCE9PWI/MS9iOjEvMCx3PTIqTWF0aC5zcXJ0KDItMipiKSxUPWI8VnMmJnAmJmQsaz1tLngqZy55LW0ueSpnLng+MDtpZihUJiZ2PmMpe3ZhciBBPXUuZGlzdChwKTtpZihBPjIqZil7dmFyIE09dS5zdWIodS5zdWIocCkuX211bHQoZi9BKS5fcm91bmQoKSk7dGhpcy51cGRhdGVEaXN0YW5jZShwLE0pLHRoaXMuYWRkQ3VycmVudFZlcnRleChNLG0sMCwwLGgpLHA9TX19dmFyIFM9cCYmZCxFPVM/cjpzPyJidXR0IjpuO2lmKFMmJiJyb3VuZCI9PT1FJiYoXzxhP0U9Im1pdGVyIjpfPD0yJiYoRT0iZmFrZXJvdW5kIikpLCJtaXRlciI9PT1FJiZfPmkmJihFPSJiZXZlbCIpLCJiZXZlbCI9PT1FJiYoXz4yJiYoRT0iZmxpcGJldmVsIiksXzxpJiYoRT0ibWl0ZXIiKSkscCYmdGhpcy51cGRhdGVEaXN0YW5jZShwLHUpLCJtaXRlciI9PT1FKXkuX211bHQoXyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSwwLDAsaCk7ZWxzZSBpZigiZmxpcGJldmVsIj09PUUpe2lmKF8+MTAwKXk9Zy5tdWx0KC0xKTtlbHNle3ZhciBMPV8qbS5hZGQoZykubWFnKCkvbS5zdWIoZykubWFnKCk7eS5fcGVycCgpLl9tdWx0KEwqKGs/LTE6MSkpfXRoaXMuYWRkQ3VycmVudFZlcnRleCh1LHksMCwwLGgpLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LHkubXVsdCgtMSksMCwwLGgpfWVsc2UgaWYoImJldmVsIj09PUV8fCJmYWtlcm91bmQiPT09RSl7dmFyIEM9LU1hdGguc3FydChfKl8tMSksUD1rP0M6MCxJPWs/MDpDO2lmKHAmJnRoaXMuYWRkQ3VycmVudFZlcnRleCh1LG0sUCxJLGgpLCJmYWtlcm91bmQiPT09RSlmb3IodmFyIE89TWF0aC5yb3VuZCgxODAqdy9NYXRoLlBJLzIwKSx6PTE7ejxPO3orKyl7dmFyIEQ9ei9PO2lmKC41IT09RCl7dmFyIFI9RC0uNTtEKz1EKlIqKEQtMSkqKCgxLjA5MDQreCooeCooMy41NTY0NS0xLjQzNTE5KngpLTMuMjQ1MikpKlIqUisoLjg0ODAxMyt4KiguMjE1NjM4KngtMS4wNjAyMSkpKX12YXIgRj1nLnN1YihtKS5fbXVsdChEKS5fYWRkKG0pLl91bml0KCkuX211bHQoaz8tMToxKTt0aGlzLmFkZEhhbGZWZXJ0ZXgodSxGLngsRi55LCExLGssMCxoKX1kJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxnLC1QLC1JLGgpfWVsc2UgaWYoImJ1dHQiPT09RSl0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LDAsMCxoKTtlbHNlIGlmKCJzcXVhcmUiPT09RSl7dmFyIEI9cD8xOi0xO3RoaXMuYWRkQ3VycmVudFZlcnRleCh1LHksQixCLGgpfWVsc2Uicm91bmQiPT09RSYmKHAmJih0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxtLDAsMCxoKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxtLDEsMSxoLCEwKSksZCYmKHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LGcsLTEsLTEsaCwhMCksdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywwLDAsaCkpKTtpZihUJiZ2PGwtMSl7dmFyIE49dS5kaXN0KGQpO2lmKE4+MipmKXt2YXIgaj11LmFkZChkLnN1Yih1KS5fbXVsdChmL04pLl9yb3VuZCgpKTt0aGlzLnVwZGF0ZURpc3RhbmNlKHUsaiksdGhpcy5hZGRDdXJyZW50VmVydGV4KGosZywwLDAsaCksdT1qfX19fX0scXMucHJvdG90eXBlLmFkZEN1cnJlbnRWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPSExKTt2YXIgbz1lLngrZS55KnIscz1lLnktZS54KnIsbD0tZS54K2UueSpuLGM9LWUueS1lLngqbjt0aGlzLmFkZEhhbGZWZXJ0ZXgodCxvLHMsYSwhMSxyLGkpLHRoaXMuYWRkSGFsZlZlcnRleCh0LGwsYyxhLCEwLC1uLGkpLHRoaXMuZGlzdGFuY2U+SHMvMiYmMD09PXRoaXMudG90YWxEaXN0YW5jZSYmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodCxlLHIsbixpLGEpKX0scXMucHJvdG90eXBlLmFkZEhhbGZWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dC54LGw9dC55LGM9LjUqdGhpcy5zY2FsZWREaXN0YW5jZTt0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKChzPDwxKSsobj8xOjApLChsPDwxKSsoaT8xOjApLE1hdGgucm91bmQoNjMqZSkrMTI4LE1hdGgucm91bmQoNjMqcikrMTI4LDErKDA9PT1hPzA6YTwwPy0xOjEpfCg2MyZjKTw8MixjPj42KTt2YXIgdT1vLnZlcnRleExlbmd0aCsrO3RoaXMuZTE+PTAmJnRoaXMuZTI+PTAmJih0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHUpLG8ucHJpbWl0aXZlTGVuZ3RoKyspLGk/dGhpcy5lMj11OnRoaXMuZTE9dX0scXMucHJvdG90eXBlLnVwZGF0ZVNjYWxlZERpc3RhbmNlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZWREaXN0YW5jZT10aGlzLnRvdGFsRGlzdGFuY2U+MD8odGhpcy5jbGlwU3RhcnQrKHRoaXMuY2xpcEVuZC10aGlzLmNsaXBTdGFydCkqdGhpcy5kaXN0YW5jZS90aGlzLnRvdGFsRGlzdGFuY2UpKihIcy0xKTp0aGlzLmRpc3RhbmNlfSxxcy5wcm90b3R5cGUudXBkYXRlRGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmRpc3RhbmNlKz10LmRpc3QoZSksdGhpcy51cGRhdGVTY2FsZWREaXN0YW5jZSgpfSxObigiTGluZUJ1Y2tldCIscXMse29taXQ6WyJsYXllcnMiLCJwYXR0ZXJuRmVhdHVyZXMiXX0pO3ZhciBHcz1uZXcgU2koeyJsaW5lLWNhcCI6bmV3IHdpKEx0LmxheW91dF9saW5lWyJsaW5lLWNhcCJdKSwibGluZS1qb2luIjpuZXcgVGkoTHQubGF5b3V0X2xpbmVbImxpbmUtam9pbiJdKSwibGluZS1taXRlci1saW1pdCI6bmV3IHdpKEx0LmxheW91dF9saW5lWyJsaW5lLW1pdGVyLWxpbWl0Il0pLCJsaW5lLXJvdW5kLWxpbWl0IjpuZXcgd2koTHQubGF5b3V0X2xpbmVbImxpbmUtcm91bmQtbGltaXQiXSksImxpbmUtc29ydC1rZXkiOm5ldyBUaShMdC5sYXlvdXRfbGluZVsibGluZS1zb3J0LWtleSJdKX0pLFlzPXtwYWludDpuZXcgU2koeyJsaW5lLW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9saW5lWyJsaW5lLW9wYWNpdHkiXSksImxpbmUtY29sb3IiOm5ldyBUaShMdC5wYWludF9saW5lWyJsaW5lLWNvbG9yIl0pLCJsaW5lLXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X2xpbmVbImxpbmUtdHJhbnNsYXRlIl0pLCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdC5wYWludF9saW5lWyJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiXSksImxpbmUtd2lkdGgiOm5ldyBUaShMdC5wYWludF9saW5lWyJsaW5lLXdpZHRoIl0pLCJsaW5lLWdhcC13aWR0aCI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtZ2FwLXdpZHRoIl0pLCJsaW5lLW9mZnNldCI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtb2Zmc2V0Il0pLCJsaW5lLWJsdXIiOm5ldyBUaShMdC5wYWludF9saW5lWyJsaW5lLWJsdXIiXSksImxpbmUtZGFzaGFycmF5IjpuZXcgQWkoTHQucGFpbnRfbGluZVsibGluZS1kYXNoYXJyYXkiXSksImxpbmUtcGF0dGVybiI6bmV3IGtpKEx0LnBhaW50X2xpbmVbImxpbmUtcGF0dGVybiJdKSwibGluZS1ncmFkaWVudCI6bmV3IE1pKEx0LnBhaW50X2xpbmVbImxpbmUtZ3JhZGllbnQiXSl9KSxsYXlvdXQ6R3N9LFdzPW5ldyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj1uZXcgcGkoTWF0aC5mbG9vcihyLnpvb20pLHtub3c6ci5ub3csZmFkZUR1cmF0aW9uOnIuZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnIuem9vbUhpc3RvcnksdHJhbnNpdGlvbjpyLnRyYW5zaXRpb259KSx0LnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlLmNhbGwodGhpcyxlLHIpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gcj11KHt9LHIse3pvb206TWF0aC5mbG9vcihyLnpvb20pfSksdC5wcm90b3R5cGUuZXZhbHVhdGUuY2FsbCh0aGlzLGUscixuLGkpfSxlfShUaSkpKFlzLnBhaW50LnByb3BlcnRpZXNbImxpbmUtd2lkdGgiXS5zcGVjaWZpY2F0aW9uKTtXcy51c2VJbnRlZ2VyWm9vbT0hMDt2YXIgWHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFlzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lLWdyYWRpZW50Ij09PXQmJnRoaXMuX3VwZGF0ZUdyYWRpZW50KCl9LGUucHJvdG90eXBlLl91cGRhdGVHcmFkaWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1sibGluZS1ncmFkaWVudCJdLnZhbHVlLmV4cHJlc3Npb247dGhpcy5ncmFkaWVudD1Dbyh0LCJsaW5lUHJvZ3Jlc3MiKSx0aGlzLmdyYWRpZW50VGV4dHVyZT1udWxsfSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlLHIpLHRoaXMucGFpbnQuX3ZhbHVlc1sibGluZS1mbG9vcndpZHRoIl09V3MucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1sibGluZS13aWR0aCJdLnZhbHVlLGUpfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxcyh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPVpzKG9vKCJsaW5lLXdpZHRoIix0aGlzLGUpLG9vKCJsaW5lLWdhcC13aWR0aCIsdGhpcyxlKSksbj1vbygibGluZS1vZmZzZXQiLHRoaXMsZSk7cmV0dXJuIHIvMitNYXRoLmFicyhuKStzbyh0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixhLG8scyl7dmFyIGw9bG8odCx0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUtYW5jaG9yIiksby5hbmdsZSxzKSxjPXMvMipacyh0aGlzLnBhaW50LmdldCgibGluZS13aWR0aCIpLmV2YWx1YXRlKGUsciksdGhpcy5wYWludC5nZXQoImxpbmUtZ2FwLXdpZHRoIikuZXZhbHVhdGUoZSxyKSksdT10aGlzLnBhaW50LmdldCgibGluZS1vZmZzZXQiKS5ldmFsdWF0ZShlLHIpO3JldHVybiB1JiYobj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyBpKDAsMCksYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPVtdLGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIGM9b1tsLTFdLHU9b1tsXSxmPW9bbCsxXSxoPTA9PT1sP246dS5zdWIoYykuX3VuaXQoKS5fcGVycCgpLHA9bD09PW8ubGVuZ3RoLTE/bjpmLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCksZD1oLl9hZGQocCkuX3VuaXQoKSxtPWQueCpwLngrZC55KnAueTtkLl9tdWx0KDEvbSkscy5wdXNoKGQuX211bHQoZSkuX2FkZCh1KSl9ci5wdXNoKHMpfXJldHVybiByfShuLHUqcykpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpZih0Lmxlbmd0aD49Mylmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKylpZihpbyh0LGlbYV0pKXJldHVybiEwO2lmKFFhKHQsaSxyKSlyZXR1cm4hMH1yZXR1cm4hMX0obCxuLGMpfSxlLnByb3RvdHlwZS5pc1RpbGVDbGlwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGV9KEVpKTtmdW5jdGlvbiBacyh0LGUpe3JldHVybiBlPjA/ZSsyKnQ6dH12YXIgSnM9SWkoW3tuYW1lOiJhX3Bvc19vZmZzZXQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifSx7bmFtZToiYV9waXhlbG9mZnNldCIsY29tcG9uZW50czo0LHR5cGU6IkludDE2In1dLDQpLEtzPUlpKFt7bmFtZToiYV9wcm9qZWN0ZWRfcG9zIixjb21wb25lbnRzOjMsdHlwZToiRmxvYXQzMiJ9XSw0KSxRcz0oSWkoW3tuYW1lOiJhX2ZhZGVfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQzMiJ9XSw0KSxJaShbe25hbWU6ImFfcGxhY2VkIixjb21wb25lbnRzOjIsdHlwZToiVWludDgifSx7bmFtZToiYV9zaGlmdCIsY29tcG9uZW50czoyLHR5cGU6IkZsb2F0MzIifV0pKSwkcz0oSWkoW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFkifSx7dHlwZToiSW50MTYiLG5hbWU6IngxIn0se3R5cGU6IkludDE2IixuYW1lOiJ5MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDIifSx7dHlwZToiSW50MTYiLG5hbWU6InkyIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToic291cmNlTGF5ZXJJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImJ1Y2tldEluZGV4In1dKSxJaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9hbmNob3JfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9leHRydWRlIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkpLHRsPUlpKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJGbG9hdDMyIn0se25hbWU6ImFfcmFkaXVzIixjb21wb25lbnRzOjEsdHlwZToiRmxvYXQzMiJ9LHtuYW1lOiJhX2ZsYWdzIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCk7SWkoW3tuYW1lOiJ0cmlhbmdsZSIsY29tcG9uZW50czozLHR5cGU6IlVpbnQxNiJ9XSksSWkoW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImdseXBoU3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bUdseXBocyJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6InZlcnRleFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDMyIixuYW1lOiJsaW5lU3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImxpbmVMZW5ndGgifSx7dHlwZToiVWludDE2IixuYW1lOiJzZWdtZW50In0se3R5cGU6IlVpbnQxNiIsbmFtZToibG93ZXJTaXplIn0se3R5cGU6IlVpbnQxNiIsbmFtZToidXBwZXJTaXplIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImxpbmVPZmZzZXRYIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImxpbmVPZmZzZXRZIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJ3cml0aW5nTW9kZSJ9LHt0eXBlOiJVaW50OCIsbmFtZToicGxhY2VkT3JpZW50YXRpb24ifSx7dHlwZToiVWludDgiLG5hbWU6ImhpZGRlbiJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImNyb3NzVGlsZUlEIn0se3R5cGU6IkludDE2IixuYW1lOiJhc3NvY2lhdGVkSWNvbkluZGV4In1dKSxJaShbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JZIn0se3R5cGU6IkludDE2IixuYW1lOiJyaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJ2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToicGxhY2VkSWNvblN5bWJvbEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJ2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImtleSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidGV4dEJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsVGV4dEJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uQm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljYWxJY29uQm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJmZWF0dXJlSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bUljb25WZXJ0aWNlcyJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bVZlcnRpY2FsSWNvblZlcnRpY2VzIn0se3R5cGU6IlVpbnQxNiIsbmFtZToidXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMifSx7dHlwZToiVWludDMyIixuYW1lOiJjcm9zc1RpbGVJRCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJ0ZXh0Qm94U2NhbGUifSx7dHlwZToiRmxvYXQzMiIsY29tcG9uZW50czoyLG5hbWU6InRleHRPZmZzZXQifSx7dHlwZToiRmxvYXQzMiIsbmFtZToiY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIifV0pLElpKFt7dHlwZToiRmxvYXQzMiIsbmFtZToib2Zmc2V0WCJ9XSksSWkoW3t0eXBlOiJJbnQxNiIsbmFtZToieCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IifV0pO2Z1bmN0aW9uIGVsKHQsZSxyKXtyZXR1cm4gdC5zZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUubGF5b3V0LmdldCgidGV4dC10cmFuc2Zvcm0iKS5ldmFsdWF0ZShyLHt9KTtyZXR1cm4idXBwZXJjYXNlIj09PW4/dD10LnRvTG9jYWxlVXBwZXJDYXNlKCk6Imxvd2VyY2FzZSI9PT1uJiYodD10LnRvTG9jYWxlTG93ZXJDYXNlKCkpLGhpLmFwcGx5QXJhYmljU2hhcGluZyYmKHQ9aGkuYXBwbHlBcmFiaWNTaGFwaW5nKHQpKSx0fSh0LnRleHQsZSxyKX0pKSx0fXZhciBybD17IiEiOiJcdWZlMTUiLCIjIjoiXHVmZjAzIiwkOiJcdWZmMDQiLCIlIjoiXHVmZjA1IiwiJiI6Ilx1ZmYwNiIsIigiOiJcdWZlMzUiLCIpIjoiXHVmZTM2IiwiKiI6Ilx1ZmYwYSIsIisiOiJcdWZmMGIiLCIsIjoiXHVmZTEwIiwiLSI6Ilx1ZmUzMiIsIi4iOiJcdTMwZmIiLCIvIjoiXHVmZjBmIiwiOiI6Ilx1ZmUxMyIsIjsiOiJcdWZlMTQiLCI8IjoiXHVmZTNmIiwiPSI6Ilx1ZmYxZCIsIj4iOiJcdWZlNDAiLCI/IjoiXHVmZTE2IiwiQCI6Ilx1ZmYyMCIsIlsiOiJcdWZlNDciLCJcXCI6Ilx1ZmYzYyIsIl0iOiJcdWZlNDgiLCJeIjoiXHVmZjNlIixfOiJcdWZlMzMiLCJgIjoiXHVmZjQwIiwieyI6Ilx1ZmUzNyIsInwiOiJcdTIwMTUiLCJ9IjoiXHVmZTM4IiwifiI6Ilx1ZmY1ZSIsIlx4YTIiOiJcdWZmZTAiLCJceGEzIjoiXHVmZmUxIiwiXHhhNSI6Ilx1ZmZlNSIsIlx4YTYiOiJcdWZmZTQiLCJceGFjIjoiXHVmZmUyIiwiXHhhZiI6Ilx1ZmZlMyIsIlx1MjAxMyI6Ilx1ZmUzMiIsIlx1MjAxNCI6Ilx1ZmUzMSIsIlx1MjAxOCI6Ilx1ZmU0MyIsIlx1MjAxOSI6Ilx1ZmU0NCIsIlx1MjAxYyI6Ilx1ZmU0MSIsIlx1MjAxZCI6Ilx1ZmU0MiIsIlx1MjAyNiI6Ilx1ZmUxOSIsIlx1MjAyNyI6Ilx1MzBmYiIsIlx1MjBhOSI6Ilx1ZmZlNiIsIlx1MzAwMSI6Ilx1ZmUxMSIsIlx1MzAwMiI6Ilx1ZmUxMiIsIlx1MzAwOCI6Ilx1ZmUzZiIsIlx1MzAwOSI6Ilx1ZmU0MCIsIlx1MzAwYSI6Ilx1ZmUzZCIsIlx1MzAwYiI6Ilx1ZmUzZSIsIlx1MzAwYyI6Ilx1ZmU0MSIsIlx1MzAwZCI6Ilx1ZmU0MiIsIlx1MzAwZSI6Ilx1ZmU0MyIsIlx1MzAwZiI6Ilx1ZmU0NCIsIlx1MzAxMCI6Ilx1ZmUzYiIsIlx1MzAxMSI6Ilx1ZmUzYyIsIlx1MzAxNCI6Ilx1ZmUzOSIsIlx1MzAxNSI6Ilx1ZmUzYSIsIlx1MzAxNiI6Ilx1ZmUxNyIsIlx1MzAxNyI6Ilx1ZmUxOCIsIlx1ZmYwMSI6Ilx1ZmUxNSIsIlx1ZmYwOCI6Ilx1ZmUzNSIsIlx1ZmYwOSI6Ilx1ZmUzNiIsIlx1ZmYwYyI6Ilx1ZmUxMCIsIlx1ZmYwZCI6Ilx1ZmUzMiIsIlx1ZmYwZSI6Ilx1MzBmYiIsIlx1ZmYxYSI6Ilx1ZmUxMyIsIlx1ZmYxYiI6Ilx1ZmUxNCIsIlx1ZmYxYyI6Ilx1ZmUzZiIsIlx1ZmYxZSI6Ilx1ZmU0MCIsIlx1ZmYxZiI6Ilx1ZmUxNiIsIlx1ZmYzYiI6Ilx1ZmU0NyIsIlx1ZmYzZCI6Ilx1ZmU0OCIsIlx1ZmYzZiI6Ilx1ZmUzMyIsIlx1ZmY1YiI6Ilx1ZmUzNyIsIlx1ZmY1YyI6Ilx1MjAxNSIsIlx1ZmY1ZCI6Ilx1ZmUzOCIsIlx1ZmY1ZiI6Ilx1ZmUzNSIsIlx1ZmY2MCI6Ilx1ZmUzNiIsIlx1ZmY2MSI6Ilx1ZmUxMiIsIlx1ZmY2MiI6Ilx1ZmU0MSIsIlx1ZmY2MyI6Ilx1ZmU0MiJ9O3ZhciBubD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0saWw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxmPXU+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxtPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2Y+PTE/aC9sOmgqTWF0aC5wb3coMiwxLWYpKSpsPj0yJiYobysrLGwvPTIpLG8rZj49dT8ocz0wLG89dSk6bytmPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1mKToocz1lKk1hdGgucG93KDIsZi0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCptfSxhbD1vbDtmdW5jdGlvbiBvbCh0KXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KT90Om5ldyBVaW50OEFycmF5KHR8fDApLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofW9sLlZhcmludD0wLG9sLkZpeGVkNjQ9MSxvbC5CeXRlcz0yLG9sLkZpeGVkMzI9NTt2YXIgc2w9InVuZGVmaW5lZCI9PXR5cGVvZiBUZXh0RGVjb2Rlcj9udWxsOm5ldyBUZXh0RGVjb2RlcigidXRmOCIpO2Z1bmN0aW9uIGxsKHQpe3JldHVybiB0LnR5cGU9PT1vbC5CeXRlcz90LnJlYWRWYXJpbnQoKSt0LnBvczp0LnBvcysxfWZ1bmN0aW9uIGNsKHQsZSxyKXtyZXR1cm4gcj80Mjk0OTY3Mjk2KmUrKHQ+Pj4wKTo0Mjk0OTY3Mjk2KihlPj4+MCkrKHQ+Pj4wKX1mdW5jdGlvbiB1bCh0LGUscil7dmFyIG49ZTw9MTYzODM/MTplPD0yMDk3MTUxPzI6ZTw9MjY4NDM1NDU1PzM6TWF0aC5mbG9vcihNYXRoLmxvZyhlKS8oNypNYXRoLkxOMikpO3IucmVhbGxvYyhuKTtmb3IodmFyIGk9ci5wb3MtMTtpPj10O2ktLSlyLmJ1ZltpK25dPXIuYnVmW2ldfWZ1bmN0aW9uIGZsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVZhcmludCh0W3JdKX1mdW5jdGlvbiBobCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTVmFyaW50KHRbcl0pfWZ1bmN0aW9uIHBsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZsb2F0KHRbcl0pfWZ1bmN0aW9uIGRsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZURvdWJsZSh0W3JdKX1mdW5jdGlvbiBtbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVCb29sZWFuKHRbcl0pfWZ1bmN0aW9uIGdsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gdmwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkMzIodFtyXSl9ZnVuY3Rpb24geWwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiB4bCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiBibCh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsxNjc3NzIxNip0W2UrM119ZnVuY3Rpb24gX2wodCxlLHIpe3Rbcl09ZSx0W3IrMV09ZT4+PjgsdFtyKzJdPWU+Pj4xNix0W3IrM109ZT4+PjI0fWZ1bmN0aW9uIHdsKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKyh0W2UrM108PDI0KX1vbC5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJ1Zj1udWxsfSxyZWFkRmllbGRzOmZ1bmN0aW9uKHQsZSxyKXtmb3Iocj1yfHx0aGlzLmxlbmd0aDt0aGlzLnBvczxyOyl7dmFyIG49dGhpcy5yZWFkVmFyaW50KCksaT1uPj4zLGE9dGhpcy5wb3M7dGhpcy50eXBlPTcmbix0KGksZSx0aGlzKSx0aGlzLnBvcz09PWEmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9YmwodGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkU0ZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD13bCh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9YmwodGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqYmwodGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PWJsKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2KndsKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkRmxvYXQ6ZnVuY3Rpb24oKXt2YXIgdD1ubCh0aGlzLmJ1Zix0aGlzLnBvcywhMCwyMyw0KTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZERvdWJsZTpmdW5jdGlvbigpe3ZhciB0PW5sKHRoaXMuYnVmLHRoaXMucG9zLCEwLDUyLDgpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLmJ1ZjtyZXR1cm4gZT0xMjcmKHI9blt0aGlzLnBvcysrXSkscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDcscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDE0LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwyMSxyPDEyOD9lOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5idWY7aWYoaT1hW3IucG9zKytdLG49KDExMiZpKT4+NCxpPDEyOClyZXR1cm4gY2wodCxuLGUpO2lmKGk9YVtyLnBvcysrXSxufD0oMTI3JmkpPDwzLGk8MTI4KXJldHVybiBjbCh0LG4sZSk7aWYoaT1hW3IucG9zKytdLG58PSgxMjcmaSk8PDEwLGk8MTI4KXJldHVybiBjbCh0LG4sZSk7aWYoaT1hW3IucG9zKytdLG58PSgxMjcmaSk8PDE3LGk8MTI4KXJldHVybiBjbCh0LG4sZSk7aWYoaT1hW3IucG9zKytdLG58PSgxMjcmaSk8PDI0LGk8MTI4KXJldHVybiBjbCh0LG4sZSk7aWYoaT1hW3IucG9zKytdLG58PSgxJmkpPDwzMSxpPDEyOClyZXR1cm4gY2wodCxuLGUpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPXQsdC1lPj0xMiYmc2w/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBzbC5kZWNvZGUodC5zdWJhcnJheShlLHIpKX0odGhpcy5idWYsZSx0KTpmdW5jdGlvbih0LGUscil7dmFyIG49IiIsaT1lO2Zvcig7aTxyOyl7dmFyIGEsbyxzLGw9dFtpXSxjPW51bGwsdT1sPjIzOT80Omw+MjIzPzM6bD4xOTE/MjoxO2lmKGkrdT5yKWJyZWFrOzE9PT11P2w8MTI4JiYoYz1sKToyPT09dT8xMjg9PSgxOTImKGE9dFtpKzFdKSkmJihjPSgzMSZsKTw8Nnw2MyZhKTw9MTI3JiYoYz1udWxsKTozPT09dT8oYT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJigoYz0oMTUmbCk8PDEyfCg2MyZhKTw8Nnw2MyZvKTw9MjA0N3x8Yz49NTUyOTYmJmM8PTU3MzQzKSYmKGM9bnVsbCkpOjQ9PT11JiYoYT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKChjPSgxNSZsKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk8PTY1NTM1fHxjPj0xMTE0MTEyKSYmKGM9bnVsbCkpLG51bGw9PT1jPyhjPTY1NTMzLHU9MSk6Yz42NTUzNSYmKGMtPTY1NTM2LG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpLGkrPXV9cmV0dXJuIG59KHRoaXMuYnVmLGUsdCl9LHJlYWRCeXRlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZFBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkVmFyaW50KGUpKTt2YXIgcj1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxyOyl0LnB1c2godGhpcy5yZWFkVmFyaW50KGUpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNWYXJpbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3JldHVybiB0fSxyZWFkUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGbG9hdDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZERvdWJsZTpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7cmV0dXJuIHR9LHNraXA6ZnVuY3Rpb24odCl7dmFyIGU9NyZ0O2lmKGU9PT1vbC5WYXJpbnQpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1vbC5CeXRlcyl0aGlzLnBvcz10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcztlbHNlIGlmKGU9PT1vbC5GaXhlZDMyKXRoaXMucG9zKz00O2Vsc2V7aWYoZSE9PW9sLkZpeGVkNjQpdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkIHR5cGU6ICIrZSk7dGhpcy5wb3MrPTh9fSx3cml0ZVRhZzpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnQodDw8M3xlKX0scmVhbGxvYzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5sZW5ndGh8fDE2O2U8dGhpcy5wb3MrdDspZSo9MjtpZihlIT09dGhpcy5sZW5ndGgpe3ZhciByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMubGVuZ3RoPWV9fSxmaW5pc2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX0sd3JpdGVGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxfbCh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVTRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksX2wodGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksX2wodGhpcy5idWYsLTEmdCx0aGlzLnBvcyksX2wodGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVTRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksX2wodGhpcy5idWYsLTEmdCx0aGlzLnBvcyksX2wodGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVWYXJpbnQ6ZnVuY3Rpb24odCl7KHQ9K3R8fDApPjI2ODQzNTQ1NXx8dDwwP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbjt0Pj0wPyhyPXQlNDI5NDk2NzI5NnwwLG49dC80Mjk0OTY3Mjk2fDApOihuPX4oLXQvNDI5NDk2NzI5NiksNDI5NDk2NzI5NV4ocj1+KC10JTQyOTQ5NjcyOTYpKT9yPXIrMXwwOihyPTAsbj1uKzF8MCkpO2lmKHQ+PTB4MTAwMDAwMDAwMDAwMDAwMDB8fHQ8LTB4MTAwMDAwMDAwMDAwMDAwMDApdGhyb3cgbmV3IEVycm9yKCJHaXZlbiB2YXJpbnQgZG9lc24ndCBmaXQgaW50byAxMCBieXRlcyIpO2UucmVhbGxvYygxMCksZnVuY3Rpb24odCxlLHIpe3IuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3NdPTEyNyZ0fShyLDAsZSksZnVuY3Rpb24odCxlKXt2YXIgcj0oNyZ0KTw8NDtpZihlLmJ1ZltlLnBvcysrXXw9cnwoKHQ+Pj49Myk/MTI4OjApLCF0KXJldHVybjtpZihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLCF0KXJldHVybjtpZihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLCF0KXJldHVybjtpZihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLCF0KXJldHVybjtpZihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLCF0KXJldHVybjtlLmJ1ZltlLnBvcysrXT0xMjcmdH0obixlKX0odCx0aGlzKToodGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyZ0fCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109MTI3Jih0Pj4+PTcpfCh0PjEyNz8xMjg6MCksdDw9MTI3fHwodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpKX0sd3JpdGVTVmFyaW50OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQodDwwPzIqLXQtMToyKnQpfSx3cml0ZUJvb2xlYW46ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludChCb29sZWFuKHQpKX0sd3JpdGVTdHJpbmc6ZnVuY3Rpb24odCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKDQqdC5sZW5ndGgpLHRoaXMucG9zKys7dmFyIGU9dGhpcy5wb3M7dGhpcy5wb3M9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7aWYoKG49ZS5jaGFyQ29kZUF0KGEpKT41NTI5NSYmbjw1NzM0NCl7aWYoIWkpe24+NTYzMTl8fGErMT09PWUubGVuZ3RoPyh0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSk6aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApe3RbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bjtjb250aW51ZX1uPWktNTUyOTY8PDEwfG4tNTYzMjB8NjU1MzYsaT1udWxsfWVsc2UgaSYmKHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5LGk9bnVsbCk7bjwxMjg/dFtyKytdPW46KG48MjA0OD90W3IrK109bj4+NnwxOTI6KG48NjU1MzY/dFtyKytdPW4+PjEyfDIyNDoodFtyKytdPW4+PjE4fDI0MCx0W3IrK109bj4+MTImNjN8MTI4KSx0W3IrK109bj4+NiY2M3wxMjgpLHRbcisrXT02MyZufDEyOCl9cmV0dXJuIHJ9KHRoaXMuYnVmLHQsdGhpcy5wb3MpO3ZhciByPXRoaXMucG9zLWU7cj49MTI4JiZ1bChlLHIsdGhpcyksdGhpcy5wb3M9ZS0xLHRoaXMud3JpdGVWYXJpbnQociksdGhpcy5wb3MrPXJ9LHdyaXRlRmxvYXQ6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLGlsKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsMjMsNCksdGhpcy5wb3MrPTR9LHdyaXRlRG91YmxlOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxpbCh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDUyLDgpLHRoaXMucG9zKz04fSx3cml0ZUJ5dGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5idWZbdGhpcy5wb3MrK109dFtyXX0sd3JpdGVSYXdNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5wb3MrKzt2YXIgcj10aGlzLnBvczt0KGUsdGhpcyk7dmFyIG49dGhpcy5wb3MtcjtuPj0xMjgmJnVsKHIsbix0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChuKSx0aGlzLnBvcys9bn0sd3JpdGVNZXNzYWdlOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLndyaXRlVGFnKHQsb2wuQnl0ZXMpLHRoaXMud3JpdGVSYXdNZXNzYWdlKGUscil9LHdyaXRlUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsZmwsZSl9LHdyaXRlUGFja2VkU1ZhcmludDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LGhsLGUpfSx3cml0ZVBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxtbCxlKX0sd3JpdGVQYWNrZWRGbG9hdDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHBsLGUpfSx3cml0ZVBhY2tlZERvdWJsZTpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LGRsLGUpfSx3cml0ZVBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxnbCxlKX0sd3JpdGVQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHZsLGUpfSx3cml0ZVBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCx5bCxlKX0sd3JpdGVQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHhsLGUpfSx3cml0ZUJ5dGVzRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuQnl0ZXMpLHRoaXMud3JpdGVCeXRlcyhlKX0sd3JpdGVGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQzMiksdGhpcy53cml0ZUZpeGVkMzIoZSl9LHdyaXRlU0ZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDMyKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9LHdyaXRlRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkNjQpLHRoaXMud3JpdGVGaXhlZDY0KGUpfSx3cml0ZVNGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQ2NCksdGhpcy53cml0ZVNGaXhlZDY0KGUpfSx3cml0ZVZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLlZhcmludCksdGhpcy53cml0ZVZhcmludChlKX0sd3JpdGVTVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuVmFyaW50KSx0aGlzLndyaXRlU1ZhcmludChlKX0sd3JpdGVTdHJpbmdGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5CeXRlcyksdGhpcy53cml0ZVN0cmluZyhlKX0sd3JpdGVGbG9hdEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkMzIpLHRoaXMud3JpdGVGbG9hdChlKX0sd3JpdGVEb3VibGVGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDY0KSx0aGlzLndyaXRlRG91YmxlKGUpfSx3cml0ZUJvb2xlYW5GaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnRGaWVsZCh0LEJvb2xlYW4oZSkpfX07ZnVuY3Rpb24gVGwodCxlLHIpezE9PT10JiZyLnJlYWRNZXNzYWdlKGtsLGUpfWZ1bmN0aW9uIGtsKHQsZSxyKXtpZigzPT09dCl7dmFyIG49ci5yZWFkTWVzc2FnZShBbCx7fSksaT1uLmlkLGE9bi5iaXRtYXAsbz1uLndpZHRoLHM9bi5oZWlnaHQsbD1uLmxlZnQsYz1uLnRvcCx1PW4uYWR2YW5jZTtlLnB1c2goe2lkOmksYml0bWFwOm5ldyBTbyh7d2lkdGg6bys2LGhlaWdodDpzKzZ9LGEpLG1ldHJpY3M6e3dpZHRoOm8saGVpZ2h0OnMsbGVmdDpsLHRvcDpjLGFkdmFuY2U6dX19KX19ZnVuY3Rpb24gQWwodCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX1mdW5jdGlvbiBNbCh0KXtmb3IodmFyIGU9MCxyPTAsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ZSs9YS53KmEuaCxyPU1hdGgubWF4KHIsYS53KX10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaC10Lmh9KSk7Zm9yKHZhciBvPVt7eDowLHk6MCx3Ok1hdGgubWF4KE1hdGguY2VpbChNYXRoLnNxcnQoZS8uOTUpKSxyKSxoOjEvMH1dLHM9MCxsPTAsYz0wLHU9dDtjPHUubGVuZ3RoO2MrPTEpZm9yKHZhciBmPXVbY10saD1vLmxlbmd0aC0xO2g+PTA7aC0tKXt2YXIgcD1vW2hdO2lmKCEoZi53PnAud3x8Zi5oPnAuaCkpe2lmKGYueD1wLngsZi55PXAueSxsPU1hdGgubWF4KGwsZi55K2YuaCkscz1NYXRoLm1heChzLGYueCtmLncpLGYudz09PXAudyYmZi5oPT09cC5oKXt2YXIgZD1vLnBvcCgpO2g8by5sZW5ndGgmJihvW2hdPWQpfWVsc2UgZi5oPT09cC5oPyhwLngrPWYudyxwLnctPWYudyk6Zi53PT09cC53PyhwLnkrPWYuaCxwLmgtPWYuaCk6KG8ucHVzaCh7eDpwLngrZi53LHk6cC55LHc6cC53LWYudyxoOmYuaH0pLHAueSs9Zi5oLHAuaC09Zi5oKTticmVha319cmV0dXJue3c6cyxoOmwsZmlsbDplLyhzKmwpfHwwfX12YXIgU2w9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnBpeGVsUmF0aW8sbj1lLnZlcnNpb24saT1lLnN0cmV0Y2hYLGE9ZS5zdHJldGNoWSxvPWUuY29udGVudDt0aGlzLnBhZGRlZFJlY3Q9dCx0aGlzLnBpeGVsUmF0aW89cix0aGlzLnN0cmV0Y2hYPWksdGhpcy5zdHJldGNoWT1hLHRoaXMuY29udGVudD1vLHRoaXMudmVyc2lvbj1ufSxFbD17dGw6e2NvbmZpZ3VyYWJsZTohMH0sYnI6e2NvbmZpZ3VyYWJsZTohMH0sdGxicjp7Y29uZmlndXJhYmxlOiEwfSxkaXNwbGF5U2l6ZTp7Y29uZmlndXJhYmxlOiEwfX07RWwudGwuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54KzEsdGhpcy5wYWRkZWRSZWN0LnkrMV19LEVsLmJyLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCt0aGlzLnBhZGRlZFJlY3Qudy0xLHRoaXMucGFkZGVkUmVjdC55K3RoaXMucGFkZGVkUmVjdC5oLTFdfSxFbC50bGJyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRsLmNvbmNhdCh0aGlzLmJyKX0sRWwuZGlzcGxheVNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuWyh0aGlzLnBhZGRlZFJlY3Qudy0yKS90aGlzLnBpeGVsUmF0aW8sKHRoaXMucGFkZGVkUmVjdC5oLTIpL3RoaXMucGl4ZWxSYXRpb119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNsLnByb3RvdHlwZSxFbCk7dmFyIExsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj17fTt0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3M9W107dmFyIGk9W107dGhpcy5hZGRJbWFnZXModCxyLGkpLHRoaXMuYWRkSW1hZ2VzKGUsbixpKTt2YXIgYT1NbChpKSxvPWEudyxzPWEuaCxsPW5ldyBFbyh7d2lkdGg6b3x8MSxoZWlnaHQ6c3x8MX0pO2Zvcih2YXIgYyBpbiB0KXt2YXIgdT10W2NdLGY9cltjXS5wYWRkZWRSZWN0O0VvLmNvcHkodS5kYXRhLGwse3g6MCx5OjB9LHt4OmYueCsxLHk6Zi55KzF9LHUuZGF0YSl9Zm9yKHZhciBoIGluIGUpe3ZhciBwPWVbaF0sZD1uW2hdLnBhZGRlZFJlY3QsbT1kLngrMSxnPWQueSsxLHY9cC5kYXRhLndpZHRoLHk9cC5kYXRhLmhlaWdodDtFby5jb3B5KHAuZGF0YSxsLHt4OjAseTowfSx7eDptLHk6Z30scC5kYXRhKSxFby5jb3B5KHAuZGF0YSxsLHt4OjAseTp5LTF9LHt4Om0seTpnLTF9LHt3aWR0aDp2LGhlaWdodDoxfSksRW8uY29weShwLmRhdGEsbCx7eDowLHk6MH0se3g6bSx5OmcreX0se3dpZHRoOnYsaGVpZ2h0OjF9KSxFby5jb3B5KHAuZGF0YSxsLHt4OnYtMSx5OjB9LHt4Om0tMSx5Omd9LHt3aWR0aDoxLGhlaWdodDp5fSksRW8uY29weShwLmRhdGEsbCx7eDowLHk6MH0se3g6bSt2LHk6Z30se3dpZHRoOjEsaGVpZ2h0Onl9KX10aGlzLmltYWdlPWwsdGhpcy5pY29uUG9zaXRpb25zPXIsdGhpcy5wYXR0ZXJuUG9zaXRpb25zPW59O0xsLnByb3RvdHlwZS5hZGRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dLGE9e3g6MCx5OjAsdzppLmRhdGEud2lkdGgrMixoOmkuZGF0YS5oZWlnaHQrMn07ci5wdXNoKGEpLGVbbl09bmV3IFNsKGEsaSksaS5oYXNSZW5kZXJDYWxsYmFjayYmdGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzLnB1c2gobil9fSxMbC5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3ModGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzKSx0LnVwZGF0ZWRJbWFnZXMpdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLmljb25Qb3NpdGlvbnNbcl0sdC5nZXRJbWFnZShyKSxlKSx0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMucGF0dGVyblBvc2l0aW9uc1tyXSx0LmdldEltYWdlKHIpLGUpfSxMbC5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKHQmJmUmJnQudmVyc2lvbiE9PWUudmVyc2lvbil7dC52ZXJzaW9uPWUudmVyc2lvbjt2YXIgbj10LnRsLGk9blswXSxhPW5bMV07ci51cGRhdGUoZS5kYXRhLHZvaWQgMCx7eDppLHk6YX0pfX0sTm4oIkltYWdlUG9zaXRpb24iLFNsKSxObigiSW1hZ2VBdGxhcyIsTGwpO3ZhciBDbD17aG9yaXpvbnRhbDoxLHZlcnRpY2FsOjIsaG9yaXpvbnRhbE9ubHk6M307dmFyIFBsPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT0xLHRoaXMuZm9udFN0YWNrPSIiLHRoaXMuaW1hZ2VOYW1lPW51bGx9O1BsLmZvclRleHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgUGw7cmV0dXJuIHIuc2NhbGU9dHx8MSxyLmZvbnRTdGFjaz1lLHJ9LFBsLmZvckltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBQbDtyZXR1cm4gZS5pbWFnZU5hbWU9dCxlfTt2YXIgSWw9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9IiIsdGhpcy5zZWN0aW9uSW5kZXg9W10sdGhpcy5zZWN0aW9ucz1bXSx0aGlzLmltYWdlU2VjdGlvbklEPW51bGx9O2Z1bmN0aW9uIE9sKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0pe3ZhciBnLHY9SWwuZnJvbUZlYXR1cmUodCxpKTtmPT09Q2wudmVydGljYWwmJnYudmVydGljYWxpemVQdW5jdHVhdGlvbigpO3ZhciB5PWhpLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx4PWhpLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dDtpZih5JiYxPT09di5zZWN0aW9ucy5sZW5ndGgpe2c9W107Zm9yKHZhciBiPTAsXz15KHYudG9TdHJpbmcoKSxqbCh2LGMsYSxlLG4scCxkKSk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9bmV3IElsO1QudGV4dD13LFQuc2VjdGlvbnM9di5zZWN0aW9ucztmb3IodmFyIGs9MDtrPHcubGVuZ3RoO2srKylULnNlY3Rpb25JbmRleC5wdXNoKDApO2cucHVzaChUKX19ZWxzZSBpZih4KXtnPVtdO2Zvcih2YXIgQT0wLE09eCh2LnRleHQsdi5zZWN0aW9uSW5kZXgsamwodixjLGEsZSxuLHAsZCkpO0E8TS5sZW5ndGg7QSs9MSl7dmFyIFM9TVtBXSxFPW5ldyBJbDtFLnRleHQ9U1swXSxFLnNlY3Rpb25JbmRleD1TWzFdLEUuc2VjdGlvbnM9di5zZWN0aW9ucyxnLnB1c2goRSl9fWVsc2UgZz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudGV4dCxpPTAsYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07ci5wdXNoKHQuc3Vic3RyaW5nKGkscykpLGk9c31yZXR1cm4gaTxuLmxlbmd0aCYmci5wdXNoKHQuc3Vic3RyaW5nKGksbi5sZW5ndGgpKSxyfSh2LGpsKHYsYyxhLGUsbixwLGQpKTt2YXIgTD1bXSxDPXtwb3NpdGlvbmVkTGluZXM6TCx0ZXh0OnYudG9TdHJpbmcoKSx0b3A6dVsxXSxib3R0b206dVsxXSxsZWZ0OnVbMF0scmlnaHQ6dVswXSx3cml0aW5nTW9kZTpmLGljb25zSW5UZXh0OiExLHZlcnRpY2FsaXphYmxlOiExfTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe2Zvcih2YXIgaD0wLHA9LTE3LGQ9MCxtPTAsZz0icmlnaHQiPT09cz8xOiJsZWZ0Ij09PXM/MDouNSx2PTAseT0wLHg9aTt5PHgubGVuZ3RoO3krPTEpe3ZhciBiPXhbeV07Yi50cmltKCk7dmFyIF89Yi5nZXRNYXhTY2FsZSgpLHc9MjQqKF8tMSksVD17cG9zaXRpb25lZEdseXBoczpbXSxsaW5lT2Zmc2V0OjB9O3QucG9zaXRpb25lZExpbmVzW3ZdPVQ7dmFyIGs9VC5wb3NpdGlvbmVkR2x5cGhzLEE9MDtpZihiLmxlbmd0aCgpKXtmb3IodmFyIE09MDtNPGIubGVuZ3RoKCk7TSsrKXt2YXIgUz1iLmdldFNlY3Rpb24oTSksRT1iLmdldFNlY3Rpb25JbmRleChNKSxMPWIuZ2V0Q2hhckNvZGUoTSksQz0wLFA9bnVsbCxJPW51bGwsTz1udWxsLHo9MjQsRD0hKGw9PT1DbC5ob3Jpem9udGFsfHwhdSYmIVpuKEwpfHx1JiYoemxbTF18fChZPUwsWW4uQXJhYmljKFkpfHxZblsiQXJhYmljIFN1cHBsZW1lbnQiXShZKXx8WW5bIkFyYWJpYyBFeHRlbmRlZC1BIl0oWSl8fFluWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXShZKXx8WW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKFkpKSkpO2lmKFMuaW1hZ2VOYW1lKXt2YXIgUj1uW1MuaW1hZ2VOYW1lXTtpZighUiljb250aW51ZTtPPVMuaW1hZ2VOYW1lLHQuaWNvbnNJblRleHQ9dC5pY29uc0luVGV4dHx8ITAsST1SLnBhZGRlZFJlY3Q7dmFyIEY9Ui5kaXNwbGF5U2l6ZTtTLnNjYWxlPTI0KlMuc2NhbGUvZixQPXt3aWR0aDpGWzBdLGhlaWdodDpGWzFdLGxlZnQ6MSx0b3A6LTMsYWR2YW5jZTpEP0ZbMV06RlswXX07dmFyIEI9MjQtRlsxXSpTLnNjYWxlO0M9dytCLHo9UC5hZHZhbmNlO3ZhciBOPUQ/RlswXSpTLnNjYWxlLTI0Kl86RlsxXSpTLnNjYWxlLTI0Kl87Tj4wJiZOPkEmJihBPU4pfWVsc2V7dmFyIGo9cltTLmZvbnRTdGFja10sVT1qJiZqW0xdO2lmKFUmJlUucmVjdClJPVUucmVjdCxQPVUubWV0cmljcztlbHNle3ZhciBWPWVbUy5mb250U3RhY2tdLEg9ViYmVltMXTtpZighSCljb250aW51ZTtQPUgubWV0cmljc31DPTI0KihfLVMuc2NhbGUpfUQ/KHQudmVydGljYWxpemFibGU9ITAsay5wdXNoKHtnbHlwaDpMLGltYWdlTmFtZTpPLHg6aCx5OnArQyx2ZXJ0aWNhbDpELHNjYWxlOlMuc2NhbGUsZm9udFN0YWNrOlMuZm9udFN0YWNrLHNlY3Rpb25JbmRleDpFLG1ldHJpY3M6UCxyZWN0Okl9KSxoKz16KlMuc2NhbGUrYyk6KGsucHVzaCh7Z2x5cGg6TCxpbWFnZU5hbWU6Tyx4OmgseTpwK0MsdmVydGljYWw6RCxzY2FsZTpTLnNjYWxlLGZvbnRTdGFjazpTLmZvbnRTdGFjayxzZWN0aW9uSW5kZXg6RSxtZXRyaWNzOlAscmVjdDpJfSksaCs9UC5hZHZhbmNlKlMuc2NhbGUrYyl9aWYoMCE9PWsubGVuZ3RoKXt2YXIgcT1oLWM7ZD1NYXRoLm1heChxLGQpLFZsKGssMCxrLmxlbmd0aC0xLGcsQSl9aD0wO3ZhciBHPWEqXytBO1QubGluZU9mZnNldD1NYXRoLm1heChBLHcpLHArPUcsbT1NYXRoLm1heChHLG0pLCsrdn1lbHNlIHArPWEsKyt2fXZhciBZO3ZhciBXPXAtIC0xNyxYPVVsKG8pLFo9WC5ob3Jpem9udGFsQWxpZ24sSj1YLnZlcnRpY2FsQWxpZ247KGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz0oZS1yKSppLHU9MDt1PWEhPT1vPy1zKm4tIC0xNzooLW4qbCsuNSkqbztmb3IodmFyIGY9MCxoPXQ7ZjxoLmxlbmd0aDtmKz0xKWZvcih2YXIgcD1oW2ZdLGQ9MCxtPXAucG9zaXRpb25lZEdseXBocztkPG0ubGVuZ3RoO2QrPTEpe3ZhciBnPW1bZF07Zy54Kz1jLGcueSs9dX19KSh0LnBvc2l0aW9uZWRMaW5lcyxnLFosSixkLG0sYSxXLGkubGVuZ3RoKSx0LnRvcCs9LUoqVyx0LmJvdHRvbT10LnRvcCtXLHQubGVmdCs9LVoqZCx0LnJpZ2h0PXQubGVmdCtkfShDLGUscixuLGcsbyxzLGwsZixjLGgsbSksIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe2lmKDAhPT1yW2VdLnBvc2l0aW9uZWRHbHlwaHMubGVuZ3RoKXJldHVybiExfXJldHVybiEwfShMKSYmQ31JbC5mcm9tRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgSWwsbj0wO248dC5zZWN0aW9ucy5sZW5ndGg7bisrKXt2YXIgaT10LnNlY3Rpb25zW25dO2kuaW1hZ2U/ci5hZGRJbWFnZVNlY3Rpb24oaSk6ci5hZGRUZXh0U2VjdGlvbihpLGUpfXJldHVybiByfSxJbC5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5sZW5ndGh9LElsLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlY3Rpb25zW3RoaXMuc2VjdGlvbkluZGV4W3RdXX0sSWwucHJvdG90eXBlLmdldFNlY3Rpb25JbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWN0aW9uSW5kZXhbdF19LElsLnByb3RvdHlwZS5nZXRDaGFyQ29kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXh0LmNoYXJDb2RlQXQodCl9LElsLnByb3RvdHlwZS52ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXQuY2hhckNvZGVBdChyKzEpfHxudWxsLGk9dC5jaGFyQ29kZUF0KHItMSl8fG51bGw7KCFufHwhSm4obil8fHJsW3RbcisxXV0pJiYoIWl8fCFKbihpKXx8cmxbdFtyLTFdXSkmJnJsW3Rbcl1dP2UrPXJsW3Rbcl1dOmUrPXRbcl19cmV0dXJuIGV9KHRoaXMudGV4dCl9LElsLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy50ZXh0Lmxlbmd0aCYmemxbdGhpcy50ZXh0LmNoYXJDb2RlQXQoZSldO2UrKyl0Kys7Zm9yKHZhciByPXRoaXMudGV4dC5sZW5ndGgsbj10aGlzLnRleHQubGVuZ3RoLTE7bj49MCYmbj49dCYmemxbdGhpcy50ZXh0LmNoYXJDb2RlQXQobildO24tLSlyLS07dGhpcy50ZXh0PXRoaXMudGV4dC5zdWJzdHJpbmcodCxyKSx0aGlzLnNlY3Rpb25JbmRleD10aGlzLnNlY3Rpb25JbmRleC5zbGljZSh0LHIpfSxJbC5wcm90b3R5cGUuc3Vic3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IElsO3JldHVybiByLnRleHQ9dGhpcy50ZXh0LnN1YnN0cmluZyh0LGUpLHIuc2VjdGlvbkluZGV4PXRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHQsZSksci5zZWN0aW9ucz10aGlzLnNlY3Rpb25zLHJ9LElsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHR9LElsLnByb3RvdHlwZS5nZXRNYXhTY2FsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4LnJlZHVjZSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5tYXgoZSx0LnNlY3Rpb25zW3JdLnNjYWxlKX0pLDApfSxJbC5wcm90b3R5cGUuYWRkVGV4dFNlY3Rpb249ZnVuY3Rpb24odCxlKXt0aGlzLnRleHQrPXQudGV4dCx0aGlzLnNlY3Rpb25zLnB1c2goUGwuZm9yVGV4dCh0LnNjYWxlLHQuZm9udFN0YWNrfHxlKSk7Zm9yKHZhciByPXRoaXMuc2VjdGlvbnMubGVuZ3RoLTEsbj0wO248dC50ZXh0Lmxlbmd0aDsrK24pdGhpcy5zZWN0aW9uSW5kZXgucHVzaChyKX0sSWwucHJvdG90eXBlLmFkZEltYWdlU2VjdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10LmltYWdlP3QuaW1hZ2UubmFtZToiIjtpZigwIT09ZS5sZW5ndGgpe3ZhciByPXRoaXMuZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlKCk7cj8odGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLHRoaXMuc2VjdGlvbnMucHVzaChQbC5mb3JJbWFnZShlKSksdGhpcy5zZWN0aW9uSW5kZXgucHVzaCh0aGlzLnNlY3Rpb25zLmxlbmd0aC0xKSk6XygiUmVhY2hlZCBtYXhpbXVtIG51bWJlciBvZiBpbWFnZXMgNjQwMSIpfWVsc2UgXygiQ2FuJ3QgYWRkIEZvcm1hdHRlZFNlY3Rpb24gd2l0aCBhbiBlbXB0eSBpbWFnZS4iKX0sSWwucHJvdG90eXBlLmdldE5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltYWdlU2VjdGlvbklEP3RoaXMuaW1hZ2VTZWN0aW9uSUQ+PTYzNzQzP251bGw6Kyt0aGlzLmltYWdlU2VjdGlvbklEOih0aGlzLmltYWdlU2VjdGlvbklEPTU3MzQ0LHRoaXMuaW1hZ2VTZWN0aW9uSUQpfTt2YXIgemw9ezk6ITAsMTA6ITAsMTE6ITAsMTI6ITAsMTM6ITAsMzI6ITB9LERsPXt9O2Z1bmN0aW9uIFJsKHQsZSxyLG4saSxhKXtpZihlLmltYWdlTmFtZSl7dmFyIG89bltlLmltYWdlTmFtZV07cmV0dXJuIG8/by5kaXNwbGF5U2l6ZVswXSplLnNjYWxlKjI0L2EraTowfXZhciBzPXJbZS5mb250U3RhY2tdLGw9cyYmc1t0XTtyZXR1cm4gbD9sLm1ldHJpY3MuYWR2YW5jZSplLnNjYWxlK2k6MH1mdW5jdGlvbiBGbCh0LGUscixuKXt2YXIgaT1NYXRoLnBvdyh0LWUsMik7cmV0dXJuIG4/dDxlP2kvMjoyKmk6aStNYXRoLmFicyhyKSpyfWZ1bmN0aW9uIEJsKHQsZSxyKXt2YXIgbj0wO3JldHVybiAxMD09PXQmJihuLT0xZTQpLHImJihuKz0xNTApLDQwIT09dCYmNjUyODghPT10fHwobis9NTApLDQxIT09ZSYmNjUyODkhPT1lfHwobis9NTApLG59ZnVuY3Rpb24gTmwodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1udWxsLHM9RmwoZSxyLGksYSksbD0wLGM9bjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0sZj1GbChlLXUueCxyLGksYSkrdS5iYWRuZXNzO2Y8PXMmJihvPXUscz1mKX1yZXR1cm57aW5kZXg6dCx4OmUscHJpb3JCcmVhazpvLGJhZG5lc3M6c319ZnVuY3Rpb24gamwodCxlLHIsbixpLGEsbyl7aWYoInBvaW50IiE9PWEpcmV0dXJuW107aWYoIXQpcmV0dXJuW107Zm9yKHZhciBzLGw9W10sYz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTAscz0wO3M8dC5sZW5ndGgoKTtzKyspe3ZhciBsPXQuZ2V0U2VjdGlvbihzKTtvKz1SbCh0LmdldENoYXJDb2RlKHMpLGwsbixpLGUsYSl9cmV0dXJuIG8vTWF0aC5tYXgoMSxNYXRoLmNlaWwoby9yKSl9KHQsZSxyLG4saSxvKSx1PXQudGV4dC5pbmRleE9mKCJcdTIwMGIiKT49MCxmPTAsaD0wO2g8dC5sZW5ndGgoKTtoKyspe3ZhciBwPXQuZ2V0U2VjdGlvbihoKSxkPXQuZ2V0Q2hhckNvZGUoaCk7aWYoemxbZF18fChmKz1SbChkLHAsbixpLGUsbykpLGg8dC5sZW5ndGgoKS0xKXt2YXIgbT0hISghKChzPWQpPDExOTA0KSYmKFluWyJCb3BvbW9mbyBFeHRlbmRlZCJdKHMpfHxZbi5Cb3BvbW9mbyhzKXx8WW5bIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIl0ocyl8fFluWyJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIl0ocyl8fFluWyJDSksgQ29tcGF0aWJpbGl0eSJdKHMpfHxZblsiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiXShzKXx8WW5bIkNKSyBTdHJva2VzIl0ocyl8fFluWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXShzKXx8WW5bIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiXShzKXx8WW5bIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiXShzKXx8WW5bIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiXShzKXx8WW5bIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0ocyl8fFluLkhpcmFnYW5hKHMpfHxZblsiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyJdKHMpfHxZblsiS2FuZ3hpIFJhZGljYWxzIl0ocyl8fFluWyJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIl0ocyl8fFluLkthdGFrYW5hKHMpfHxZblsiVmVydGljYWwgRm9ybXMiXShzKXx8WW5bIllpIFJhZGljYWxzIl0ocyl8fFluWyJZaSBTeWxsYWJsZXMiXShzKSkpOyhEbFtkXXx8bXx8cC5pbWFnZU5hbWUpJiZsLnB1c2goTmwoaCsxLGYsYyxsLEJsKGQsdC5nZXRDaGFyQ29kZShoKzEpLG0mJnUpLCExKSl9fXJldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlP3QoZS5wcmlvckJyZWFrKS5jb25jYXQoZS5pbmRleCk6W119KE5sKHQubGVuZ3RoKCksZixjLGwsMCwhMCkpfWZ1bmN0aW9uIFVsKHQpe3ZhciBlPS41LHI9LjU7c3dpdGNoKHQpe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6ZT0xO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6ZT0wfXN3aXRjaCh0KXtjYXNlImJvdHRvbSI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOnI9MTticmVhaztjYXNlInRvcCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOnI9MH1yZXR1cm57aG9yaXpvbnRhbEFsaWduOmUsdmVydGljYWxBbGlnbjpyfX1mdW5jdGlvbiBWbCh0LGUscixuLGkpe2lmKG58fGkpZm9yKHZhciBhPXRbcl0sbz1hLm1ldHJpY3MuYWR2YW5jZSphLnNjYWxlLHM9KHRbcl0ueCtvKSpuLGw9ZTtsPD1yO2wrKyl0W2xdLngtPXMsdFtsXS55Kz1pfWZ1bmN0aW9uIEhsKHQsZSxyLG4saSxhKXt2YXIgbyxzPXQuaW1hZ2U7aWYocy5jb250ZW50KXt2YXIgbD1zLmNvbnRlbnQsYz1zLnBpeGVsUmF0aW98fDE7bz1bbFswXS9jLGxbMV0vYyxzLmRpc3BsYXlTaXplWzBdLWxbMl0vYyxzLmRpc3BsYXlTaXplWzFdLWxbM10vY119dmFyIHUsZixoLHAsZD1lLmxlZnQqYSxtPWUucmlnaHQqYTsid2lkdGgiPT09cnx8ImJvdGgiPT09cj8ocD1pWzBdK2QtblszXSxmPWlbMF0rbStuWzFdKTpmPShwPWlbMF0rKGQrbS1zLmRpc3BsYXlTaXplWzBdKS8yKStzLmRpc3BsYXlTaXplWzBdO3ZhciBnPWUudG9wKmEsdj1lLmJvdHRvbSphO3JldHVybiJoZWlnaHQiPT09cnx8ImJvdGgiPT09cj8odT1pWzFdK2ctblswXSxoPWlbMV0rdituWzJdKTpoPSh1PWlbMV0rKGcrdi1zLmRpc3BsYXlTaXplWzFdKS8yKStzLmRpc3BsYXlTaXplWzFdLHtpbWFnZTpzLHRvcDp1LHJpZ2h0OmYsYm90dG9tOmgsbGVmdDpwLGNvbGxpc2lvblBhZGRpbmc6b319RGxbMTBdPSEwLERsWzMyXT0hMCxEbFszOF09ITAsRGxbNDBdPSEwLERsWzQxXT0hMCxEbFs0M109ITAsRGxbNDVdPSEwLERsWzQ3XT0hMCxEbFsxNzNdPSEwLERsWzE4M109ITAsRGxbODIwM109ITAsRGxbODIwOF09ITAsRGxbODIxMV09ITAsRGxbODIzMV09ITA7dmFyIHFsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4saSl7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmFuZ2xlPW4sdm9pZCAwIT09aSYmKHRoaXMuc2VnbWVudD1pKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy54LHRoaXMueSx0aGlzLmFuZ2xlLHRoaXMuc2VnbWVudCl9LGV9KGkpO05uKCJBbmNob3IiLHFsKTtmdW5jdGlvbiBHbCh0LGUpe3ZhciByPWUuZXhwcmVzc2lvbjtpZigiY29uc3RhbnQiPT09ci5raW5kKXJldHVybntraW5kOiJjb25zdGFudCIsbGF5b3V0U2l6ZTpyLmV2YWx1YXRlKG5ldyBwaSh0KzEpKX07aWYoInNvdXJjZSI9PT1yLmtpbmQpcmV0dXJue2tpbmQ6InNvdXJjZSJ9O2Zvcih2YXIgbj1yLnpvb21TdG9wcyxpPXIuaW50ZXJwb2xhdGlvblR5cGUsYT0wO2E8bi5sZW5ndGgmJm5bYV08PXQ7KWErKztmb3IodmFyIG89YT1NYXRoLm1heCgwLGEtMSk7bzxuLmxlbmd0aCYmbltvXTx0KzE7KW8rKztvPU1hdGgubWluKG4ubGVuZ3RoLTEsbyk7dmFyIHM9blthXSxsPW5bb107cmV0dXJuImNvbXBvc2l0ZSI9PT1yLmtpbmQ/e2tpbmQ6ImNvbXBvc2l0ZSIsbWluWm9vbTpzLG1heFpvb206bCxpbnRlcnBvbGF0aW9uVHlwZTppfTp7a2luZDoiY2FtZXJhIixtaW5ab29tOnMsbWF4Wm9vbTpsLG1pblNpemU6ci5ldmFsdWF0ZShuZXcgcGkocykpLG1heFNpemU6ci5ldmFsdWF0ZShuZXcgcGkobCkpLGludGVycG9sYXRpb25UeXBlOml9fWZ1bmN0aW9uIFlsKHQsZSxyKXt2YXIgbj1lLnVTaXplLGk9ZS51U2l6ZVQsYT1yLmxvd2VyU2l6ZSxvPXIudXBwZXJTaXplO3JldHVybiJzb3VyY2UiPT09dC5raW5kP2EvMTI4OiJjb21wb3NpdGUiPT09dC5raW5kP3FlKGEvMTI4LG8vMTI4LGkpOm59ZnVuY3Rpb24gV2wodCxlKXt2YXIgcj0wLG49MDtpZigiY29uc3RhbnQiPT09dC5raW5kKW49dC5sYXlvdXRTaXplO2Vsc2UgaWYoInNvdXJjZSIhPT10LmtpbmQpe3ZhciBpPXQuaW50ZXJwb2xhdGlvblR5cGUsYT10Lm1pblpvb20sbz10Lm1heFpvb20scz1pP2wob3IuaW50ZXJwb2xhdGlvbkZhY3RvcihpLGUsYSxvKSwwLDEpOjA7ImNhbWVyYSI9PT10LmtpbmQ/bj1xZSh0Lm1pblNpemUsdC5tYXhTaXplLHMpOnI9c31yZXR1cm57dVNpemVUOnIsdVNpemU6bn19dmFyIFhsPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGdldFNpemVEYXRhOkdsLGV2YWx1YXRlU2l6ZUZvckZlYXR1cmU6WWwsZXZhbHVhdGVTaXplRm9yWm9vbTpXbCxTSVpFX1BBQ0tfRkFDVE9SOjEyOH0pO2Z1bmN0aW9uIFpsKHQsZSxyLG4saSl7aWYodm9pZCAwPT09ZS5zZWdtZW50KXJldHVybiEwO2Zvcih2YXIgYT1lLG89ZS5zZWdtZW50KzEscz0wO3M+LXIvMjspe2lmKC0tbzwwKXJldHVybiExO3MtPXRbb10uZGlzdChhKSxhPXRbb119cys9dFtvXS5kaXN0KHRbbysxXSksbysrO2Zvcih2YXIgbD1bXSxjPTA7czxyLzI7KXt2YXIgdT10W28tMV0sZj10W29dLGg9dFtvKzFdO2lmKCFoKXJldHVybiExO3ZhciBwPXUuYW5nbGVUbyhmKS1mLmFuZ2xlVG8oaCk7Zm9yKHA9TWF0aC5hYnMoKHArMypNYXRoLlBJKSUoMipNYXRoLlBJKS1NYXRoLlBJKSxsLnB1c2goe2Rpc3RhbmNlOnMsYW5nbGVEZWx0YTpwfSksYys9cDtzLWxbMF0uZGlzdGFuY2U+bjspYy09bC5zaGlmdCgpLmFuZ2xlRGVsdGE7aWYoYz5pKXJldHVybiExO28rKyxzKz1mLmRpc3QoaCl9cmV0dXJuITB9ZnVuY3Rpb24gSmwodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGgtMTtyKyspZSs9dFtyXS5kaXN0KHRbcisxXSk7cmV0dXJuIGV9ZnVuY3Rpb24gS2wodCxlLHIpe3JldHVybiB0Py42KmUqcjowfWZ1bmN0aW9uIFFsKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQ/dC5yaWdodC10LmxlZnQ6MCxlP2UucmlnaHQtZS5sZWZ0OjApfWZ1bmN0aW9uICRsKHQsZSxyLG4saSxhKXtmb3IodmFyIG89S2wocixpLGEpLHM9UWwocixuKSphLGw9MCxjPUpsKHQpLzIsdT0wO3U8dC5sZW5ndGgtMTt1Kyspe3ZhciBmPXRbdV0saD10W3UrMV0scD1mLmRpc3QoaCk7aWYobCtwPmMpe3ZhciBkPShjLWwpL3AsbT1xZShmLngsaC54LGQpLGc9cWUoZi55LGgueSxkKSx2PW5ldyBxbChtLGcsaC5hbmdsZVRvKGYpLHUpO3JldHVybiB2Ll9yb3VuZCgpLCFvfHxabCh0LHYscyxvLGUpP3Y6dm9pZCAwfWwrPXB9fWZ1bmN0aW9uIHRjKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1LbChuLGEsbyksdT1RbChuLGkpLGY9dSpvLGg9MD09PXRbMF0ueHx8dFswXS54PT09bHx8MD09PXRbMF0ueXx8dFswXS55PT09bDtyZXR1cm4gZS1mPGUvNCYmKGU9ZitlLzQpLGZ1bmN0aW9uIHQoZSxyLG4saSxhLG8scyxsLGMpe2Zvcih2YXIgdT1vLzIsZj1KbChlKSxoPTAscD1yLW4sZD1bXSxtPTA7bTxlLmxlbmd0aC0xO20rKyl7Zm9yKHZhciBnPWVbbV0sdj1lW20rMV0seT1nLmRpc3QodikseD12LmFuZ2xlVG8oZyk7cCtuPGgreTspe3ZhciBiPSgocCs9biktaCkveSxfPXFlKGcueCx2LngsYiksdz1xZShnLnksdi55LGIpO2lmKF8+PTAmJl88YyYmdz49MCYmdzxjJiZwLXU+PTAmJnArdTw9Zil7dmFyIFQ9bmV3IHFsKF8sdyx4LG0pO1QuX3JvdW5kKCksaSYmIVpsKGUsVCxvLGksYSl8fGQucHVzaChUKX19aCs9eX1sfHxkLmxlbmd0aHx8c3x8KGQ9dChlLGgvMixuLGksYSxvLHMsITAsYykpO3JldHVybiBkfSh0LGg/ZS8yKnMlZToodS8yKzIqYSkqbypzJWUsZSxjLHIsZixoLCExLGwpfWZ1bmN0aW9uIGVjKHQsZSxyLG4sYSl7Zm9yKHZhciBvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKylmb3IodmFyIGw9dFtzXSxjPXZvaWQgMCx1PTA7dTxsLmxlbmd0aC0xO3UrKyl7dmFyIGY9bFt1XSxoPWxbdSsxXTtmLng8ZSYmaC54PGV8fChmLng8ZT9mPW5ldyBpKGUsZi55KyhoLnktZi55KSooKGUtZi54KS8oaC54LWYueCkpKS5fcm91bmQoKTpoLng8ZSYmKGg9bmV3IGkoZSxmLnkrKGgueS1mLnkpKigoZS1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpKSxmLnk8ciYmaC55PHJ8fChmLnk8cj9mPW5ldyBpKGYueCsoaC54LWYueCkqKChyLWYueSkvKGgueS1mLnkpKSxyKS5fcm91bmQoKTpoLnk8ciYmKGg9bmV3IGkoZi54KyhoLngtZi54KSooKHItZi55KS8oaC55LWYueSkpLHIpLl9yb3VuZCgpKSxmLng+PW4mJmgueD49bnx8KGYueD49bj9mPW5ldyBpKG4sZi55KyhoLnktZi55KSooKG4tZi54KS8oaC54LWYueCkpKS5fcm91bmQoKTpoLng+PW4mJihoPW5ldyBpKG4sZi55KyhoLnktZi55KSooKG4tZi54KS8oaC54LWYueCkpKS5fcm91bmQoKSksZi55Pj1hJiZoLnk+PWF8fChmLnk+PWE/Zj1uZXcgaShmLngrKGgueC1mLngpKigoYS1mLnkpLyhoLnktZi55KSksYSkuX3JvdW5kKCk6aC55Pj1hJiYoaD1uZXcgaShmLngrKGgueC1mLngpKigoYS1mLnkpLyhoLnktZi55KSksYSkuX3JvdW5kKCkpLGMmJmYuZXF1YWxzKGNbYy5sZW5ndGgtMV0pfHwoYz1bZl0sby5wdXNoKGMpKSxjLnB1c2goaCkpKSkpfXJldHVybiBvfWZ1bmN0aW9uIHJjKHQsZSxyLG4pe3ZhciBhPVtdLG89dC5pbWFnZSxzPW8ucGl4ZWxSYXRpbyxsPW8ucGFkZGVkUmVjdC53LTIsYz1vLnBhZGRlZFJlY3QuaC0yLHU9dC5yaWdodC10LmxlZnQsZj10LmJvdHRvbS10LnRvcCxoPW8uc3RyZXRjaFh8fFtbMCxsXV0scD1vLnN0cmV0Y2hZfHxbWzAsY11dLGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzFdLWVbMF19LG09aC5yZWR1Y2UoZCwwKSxnPXAucmVkdWNlKGQsMCksdj1sLW0seT1jLWcseD0wLGI9bSxfPTAsdz1nLFQ9MCxrPXYsQT0wLE09eTtpZihvLmNvbnRlbnQmJm4pe3ZhciBTPW8uY29udGVudDt4PW5jKGgsMCxTWzBdKSxfPW5jKHAsMCxTWzFdKSxiPW5jKGgsU1swXSxTWzJdKSx3PW5jKHAsU1sxXSxTWzNdKSxUPVNbMF0teCxBPVNbMV0tXyxrPVNbMl0tU1swXS1iLE09U1szXS1TWzFdLXd9dmFyIEU9ZnVuY3Rpb24obixhLGwsYyl7dmFyIGg9YWMobi5zdHJldGNoLXgsYix1LHQubGVmdCkscD1vYyhuLmZpeGVkLVQsayxuLnN0cmV0Y2gsbSksZD1hYyhhLnN0cmV0Y2gtXyx3LGYsdC50b3ApLHY9b2MoYS5maXhlZC1BLE0sYS5zdHJldGNoLGcpLHk9YWMobC5zdHJldGNoLXgsYix1LHQubGVmdCksUz1vYyhsLmZpeGVkLVQsayxsLnN0cmV0Y2gsbSksRT1hYyhjLnN0cmV0Y2gtXyx3LGYsdC50b3ApLEw9b2MoYy5maXhlZC1BLE0sYy5zdHJldGNoLGcpLEM9bmV3IGkoaCxkKSxQPW5ldyBpKHksZCksST1uZXcgaSh5LEUpLE89bmV3IGkoaCxFKSx6PW5ldyBpKHAvcyx2L3MpLEQ9bmV3IGkoUy9zLEwvcyksUj1lKk1hdGguUEkvMTgwO2lmKFIpe3ZhciBGPU1hdGguc2luKFIpLEI9TWF0aC5jb3MoUiksTj1bQiwtRixGLEJdO0MuX21hdE11bHQoTiksUC5fbWF0TXVsdChOKSxPLl9tYXRNdWx0KE4pLEkuX21hdE11bHQoTil9dmFyIGo9bi5zdHJldGNoK24uZml4ZWQsVT1sLnN0cmV0Y2grbC5maXhlZCxWPWEuc3RyZXRjaCthLmZpeGVkLEg9Yy5zdHJldGNoK2MuZml4ZWQ7cmV0dXJue3RsOkMsdHI6UCxibDpPLGJyOkksdGV4Ont4Om8ucGFkZGVkUmVjdC54KzEraix5Om8ucGFkZGVkUmVjdC55KzErVix3OlUtaixoOkgtVn0sd3JpdGluZ01vZGU6dm9pZCAwLGdseXBoT2Zmc2V0OlswLDBdLHNlY3Rpb25JbmRleDowLHBpeGVsT2Zmc2V0VEw6eixwaXhlbE9mZnNldEJSOkQsbWluRm9udFNjYWxlWDprL3MvdSxtaW5Gb250U2NhbGVZOk0vcy9mLGlzU0RGOnJ9fTtpZihuJiYoby5zdHJldGNoWHx8by5zdHJldGNoWSkpZm9yKHZhciBMPWljKGgsdixtKSxDPWljKHAseSxnKSxQPTA7UDxMLmxlbmd0aC0xO1ArKylmb3IodmFyIEk9TFtQXSxPPUxbUCsxXSx6PTA7ejxDLmxlbmd0aC0xO3orKyl7dmFyIEQ9Q1t6XSxSPUNbeisxXTthLnB1c2goRShJLEQsTyxSKSl9ZWxzZSBhLnB1c2goRSh7Zml4ZWQ6MCxzdHJldGNoOi0xfSx7Zml4ZWQ6MCxzdHJldGNoOi0xfSx7Zml4ZWQ6MCxzdHJldGNoOmwrMX0se2ZpeGVkOjAsc3RyZXRjaDpjKzF9KSk7cmV0dXJuIGF9ZnVuY3Rpb24gbmModCxlLHIpe2Zvcih2YXIgbj0wLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24rPU1hdGgubWF4KGUsTWF0aC5taW4ocixvWzFdKSktTWF0aC5tYXgoZSxNYXRoLm1pbihyLG9bMF0pKX1yZXR1cm4gbn1mdW5jdGlvbiBpYyh0LGUscil7Zm9yKHZhciBuPVt7Zml4ZWQ6LTEsc3RyZXRjaDowfV0saT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vWzBdLGw9b1sxXSxjPW5bbi5sZW5ndGgtMV07bi5wdXNoKHtmaXhlZDpzLWMuc3RyZXRjaCxzdHJldGNoOmMuc3RyZXRjaH0pLG4ucHVzaCh7Zml4ZWQ6cy1jLnN0cmV0Y2gsc3RyZXRjaDpjLnN0cmV0Y2grKGwtcyl9KX1yZXR1cm4gbi5wdXNoKHtmaXhlZDplKzEsc3RyZXRjaDpyfSksbn1mdW5jdGlvbiBhYyh0LGUscixuKXtyZXR1cm4gdC9lKnIrbn1mdW5jdGlvbiBvYyh0LGUscixuKXtyZXR1cm4gdC1lKnIvbn12YXIgc2M9ZnVuY3Rpb24odCxlLHIsbixhLG8scyxsLGMsdSl7aWYodGhpcy5ib3hTdGFydEluZGV4PXQubGVuZ3RoLGMpe3ZhciBmPW8udG9wLGg9by5ib3R0b20scD1vLmNvbGxpc2lvblBhZGRpbmc7cCYmKGYtPXBbMV0saCs9cFszXSk7dmFyIGQ9aC1mO2Q+MCYmKGQ9TWF0aC5tYXgoMTAsZCksdGhpcy5jaXJjbGVEaWFtZXRlcj1kKX1lbHNle3ZhciBtPW8udG9wKnMtbCxnPW8uYm90dG9tKnMrbCx2PW8ubGVmdCpzLWwseT1vLnJpZ2h0KnMrbCx4PW8uY29sbGlzaW9uUGFkZGluZztpZih4JiYodi09eFswXSpzLG0tPXhbMV0qcyx5Kz14WzJdKnMsZys9eFszXSpzKSx1KXt2YXIgYj1uZXcgaSh2LG0pLF89bmV3IGkoeSxtKSx3PW5ldyBpKHYsZyksVD1uZXcgaSh5LGcpLGs9dSpNYXRoLlBJLzE4MDtiLl9yb3RhdGUoayksXy5fcm90YXRlKGspLHcuX3JvdGF0ZShrKSxULl9yb3RhdGUoayksdj1NYXRoLm1pbihiLngsXy54LHcueCxULngpLHk9TWF0aC5tYXgoYi54LF8ueCx3LngsVC54KSxtPU1hdGgubWluKGIueSxfLnksdy55LFQueSksZz1NYXRoLm1heChiLnksXy55LHcueSxULnkpfXQuZW1wbGFjZUJhY2soZS54LGUueSx2LG0seSxnLHIsbixhKX10aGlzLmJveEVuZEluZGV4PXQubGVuZ3RofSxsYz1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1lJiYoZT1jYyksdGhpcy5kYXRhPXQsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmNvbXBhcmU9ZSx0aGlzLmxlbmd0aD4wKWZvcih2YXIgcj0odGhpcy5sZW5ndGg+PjEpLTE7cj49MDtyLS0pdGhpcy5fZG93bihyKX07ZnVuY3Rpb24gY2ModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gdWModCxlLHIpe3ZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PXImJihyPSExKTtmb3IodmFyIG49MS8wLGE9MS8wLG89LTEvMCxzPS0xLzAsbD10WzBdLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTsoIWN8fHUueDxuKSYmKG49dS54KSwoIWN8fHUueTxhKSYmKGE9dS55KSwoIWN8fHUueD5vKSYmKG89dS54KSwoIWN8fHUueT5zKSYmKHM9dS55KX12YXIgZj1vLW4saD1zLWEscD1NYXRoLm1pbihmLGgpLGQ9cC8yLG09bmV3IGxjKFtdLGZjKTtpZigwPT09cClyZXR1cm4gbmV3IGkobixhKTtmb3IodmFyIGc9bjtnPG87Zys9cClmb3IodmFyIHY9YTt2PHM7dis9cCltLnB1c2gobmV3IGhjKGcrZCx2K2QsZCx0KSk7Zm9yKHZhciB5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10WzBdLGE9MCxvPWkubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9aVthXSxjPWlbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgaGMoci9lLG4vZSwwLHQpfSh0KSx4PW0ubGVuZ3RoO20ubGVuZ3RoOyl7dmFyIGI9bS5wb3AoKTsoYi5kPnkuZHx8IXkuZCkmJih5PWIsciYmY29uc29sZS5sb2coImZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzIixNYXRoLnJvdW5kKDFlNCpiLmQpLzFlNCx4KSksYi5tYXgteS5kPD1lfHwoZD1iLmgvMixtLnB1c2gobmV3IGhjKGIucC54LWQsYi5wLnktZCxkLHQpKSxtLnB1c2gobmV3IGhjKGIucC54K2QsYi5wLnktZCxkLHQpKSxtLnB1c2gobmV3IGhjKGIucC54LWQsYi5wLnkrZCxkLHQpKSxtLnB1c2gobmV3IGhjKGIucC54K2QsYi5wLnkrZCxkLHQpKSx4Kz00KX1yZXR1cm4gciYmKGNvbnNvbGUubG9nKCJudW0gcHJvYmVzOiAiK3gpLGNvbnNvbGUubG9nKCJiZXN0IGRpc3RhbmNlOiAiK3kuZCkpLHkucH1mdW5jdGlvbiBmYyh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBoYyh0LGUscixuKXt0aGlzLnA9bmV3IGkodCxlKSx0aGlzLmg9cix0aGlzLmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ITEsbj0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT1lW2ldLG89MCxzPWEubGVuZ3RoLGw9cy0xO288cztsPW8rKyl7dmFyIGM9YVtvXSx1PWFbbF07Yy55PnQueSE9dS55PnQueSYmdC54PCh1LngtYy54KSoodC55LWMueSkvKHUueS1jLnkpK2MueCYmKHI9IXIpLG49TWF0aC5taW4obixybyh0LGMsdSkpfXJldHVybihyPzE6LTEpKk1hdGguc3FydChuKX0odGhpcy5wLG4pLHRoaXMubWF4PXRoaXMuZCt0aGlzLmgqTWF0aC5TUVJUMn1sYy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0aGlzLmRhdGEucHVzaCh0KSx0aGlzLmxlbmd0aCsrLHRoaXMuX3VwKHRoaXMubGVuZ3RoLTEpfSxsYy5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmRhdGFbMF0sZT10aGlzLmRhdGEucG9wKCk7cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpcy5sZW5ndGg+MCYmKHRoaXMuZGF0YVswXT1lLHRoaXMuX2Rvd24oMCkpLHR9fSxsYy5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFbMF19LGxjLnByb3RvdHlwZS5fdXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGk9dC0xPj4xLGE9ZVtpXTtpZihyKG4sYSk+PTApYnJlYWs7ZVt0XT1hLHQ9aX1lW3RdPW59LGxjLnByb3RvdHlwZS5fZG93bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49dGhpcy5sZW5ndGg+PjEsaT1lW3RdO3Q8bjspe3ZhciBhPTErKHQ8PDEpLG89ZVthXSxzPWErMTtpZihzPHRoaXMubGVuZ3RoJiZyKGVbc10sbyk8MCYmKGE9cyxvPWVbc10pLHIobyxpKT49MClicmVhaztlW3RdPW8sdD1hfWVbdF09aX07dmFyIHBjPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtmdW5jdGlvbiBkYyh0LGUpe3JldHVybiBlWzFdIT09cGM/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsaT0wO3N3aXRjaChlPU1hdGguYWJzKGUpLHI9TWF0aC5hYnMociksdCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOmNhc2UidG9wIjppPXItNzticmVhaztjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6Y2FzZSJib3R0b20iOmk9Ny1yfXN3aXRjaCh0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UicmlnaHQiOm49LWU7YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6Y2FzZSJsZWZ0IjpuPWV9cmV0dXJuW24saV19KHQsZVswXSxlWzFdKTpmdW5jdGlvbih0LGUpe3ZhciByPTAsbj0wO2U8MCYmKGU9MCk7dmFyIGk9ZS9NYXRoLnNxcnQoMik7c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpuPWktNzticmVhaztjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6bj03LWk7YnJlYWs7Y2FzZSJib3R0b20iOm49Ny1lO2JyZWFrO2Nhc2UidG9wIjpuPWUtN31zd2l0Y2godCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjpyPS1pO2JyZWFrO2Nhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOnI9aTticmVhaztjYXNlImxlZnQiOnI9ZTticmVhaztjYXNlInJpZ2h0IjpyPS1lfXJldHVybltyLG5dfSh0LGVbMF0pfWZ1bmN0aW9uIG1jKHQpe3N3aXRjaCh0KXtjYXNlInJpZ2h0IjpjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOnJldHVybiJyaWdodCI7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjpyZXR1cm4ibGVmdCJ9cmV0dXJuImNlbnRlciJ9ZnVuY3Rpb24gZ2ModCxlLHIsbixhLG8scyxsLGMsdSxmLGgscCxkLG0pe3ZhciBnPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMsbCl7Zm9yKHZhciBjPW4ubGF5b3V0LmdldCgidGV4dC1yb3RhdGUiKS5ldmFsdWF0ZShvLHt9KSpNYXRoLlBJLzE4MCx1PVtdLGY9MCxoPWUucG9zaXRpb25lZExpbmVzO2Y8aC5sZW5ndGg7Zis9MSlmb3IodmFyIHA9aFtmXSxkPTAsbT1wLnBvc2l0aW9uZWRHbHlwaHM7ZDxtLmxlbmd0aDtkKz0xKXt2YXIgZz1tW2RdO2lmKGcucmVjdCl7dmFyIHY9Zy5yZWN0fHx7fSx5PTQseD0hMCxiPTEsXz0wLHc9KGF8fGwpJiZnLnZlcnRpY2FsLFQ9Zy5tZXRyaWNzLmFkdmFuY2UqZy5zY2FsZS8yO2lmKGwmJmUudmVydGljYWxpemFibGUpe3ZhciBrPTI0KihnLnNjYWxlLTEpLEE9KDI0LWcubWV0cmljcy53aWR0aCpnLnNjYWxlKS8yO189cC5saW5lT2Zmc2V0LzItKGcuaW1hZ2VOYW1lPy1BOmspfWlmKGcuaW1hZ2VOYW1lKXt2YXIgTT1zW2cuaW1hZ2VOYW1lXTt4PU0uc2RmLHk9MS8oYj1NLnBpeGVsUmF0aW8pfXZhciBTPWE/W2cueCtULGcueV06WzAsMF0sRT1hP1swLDBdOltnLngrVCtyWzBdLGcueStyWzFdLV9dLEw9WzAsMF07dyYmKEw9RSxFPVswLDBdKTt2YXIgQz0oZy5tZXRyaWNzLmxlZnQteSkqZy5zY2FsZS1UK0VbMF0sUD0oLWcubWV0cmljcy50b3AteSkqZy5zY2FsZStFWzFdLEk9Qyt2LncqZy5zY2FsZS9iLE89UCt2LmgqZy5zY2FsZS9iLHo9bmV3IGkoQyxQKSxEPW5ldyBpKEksUCksUj1uZXcgaShDLE8pLEY9bmV3IGkoSSxPKTtpZih3KXt2YXIgQj1uZXcgaSgtVCxULSAtMTcpLE49LU1hdGguUEkvMixqPTEyLVQsVT1nLmltYWdlTmFtZT9qOjAsVj1uZXcgaSgyMi1qLC1VKSxIPW5ldyhGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShpLFtudWxsXS5jb25jYXQoTCkpKTt6Ll9yb3RhdGVBcm91bmQoTixCKS5fYWRkKFYpLl9hZGQoSCksRC5fcm90YXRlQXJvdW5kKE4sQikuX2FkZChWKS5fYWRkKEgpLFIuX3JvdGF0ZUFyb3VuZChOLEIpLl9hZGQoVikuX2FkZChIKSxGLl9yb3RhdGVBcm91bmQoTixCKS5fYWRkKFYpLl9hZGQoSCl9aWYoYyl7dmFyIHE9TWF0aC5zaW4oYyksRz1NYXRoLmNvcyhjKSxZPVtHLC1xLHEsR107ei5fbWF0TXVsdChZKSxELl9tYXRNdWx0KFkpLFIuX21hdE11bHQoWSksRi5fbWF0TXVsdChZKX12YXIgVz1uZXcgaSgwLDApLFg9bmV3IGkoMCwwKTt1LnB1c2goe3RsOnosdHI6RCxibDpSLGJyOkYsdGV4OnYsd3JpdGluZ01vZGU6ZS53cml0aW5nTW9kZSxnbHlwaE9mZnNldDpTLHNlY3Rpb25JbmRleDpnLnNlY3Rpb25JbmRleCxpc1NERjp4LHBpeGVsT2Zmc2V0VEw6VyxwaXhlbE9mZnNldEJSOlgsbWluRm9udFNjYWxlWDowLG1pbkZvbnRTY2FsZVk6MH0pfX1yZXR1cm4gdX0oMCxyLGwsYSxvLHMsbix0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpLHY9dC50ZXh0U2l6ZURhdGEseT1udWxsOyJzb3VyY2UiPT09di5raW5kPyh5PVsxMjgqYS5sYXlvdXQuZ2V0KCJ0ZXh0LXNpemUiKS5ldmFsdWF0ZShzLHt9KV0pWzBdPjMyNjQwJiZfKHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJ0ZXh0LXNpemUiIGlzID49IDI1NS4gUmVkdWNlIHlvdXIgInRleHQtc2l6ZSIuJyk6ImNvbXBvc2l0ZSI9PT12LmtpbmQmJigoeT1bMTI4KmQuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKHMse30sbSksMTI4KmQuY29tcG9zaXRlVGV4dFNpemVzWzFdLmV2YWx1YXRlKHMse30sbSldKVswXT4zMjY0MHx8eVsxXT4zMjY0MCkmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgInRleHQtc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAidGV4dC1zaXplIi4nKSx0LmFkZFN5bWJvbHModC50ZXh0LGcseSxsLG8scyx1LGUsYy5saW5lU3RhcnRJbmRleCxjLmxpbmVMZW5ndGgscCxtKTtmb3IodmFyIHg9MCxiPWY7eDxiLmxlbmd0aDt4Kz0xKXtoW2JbeF1dPXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGgtMX1yZXR1cm4gNCpnLmxlbmd0aH1mdW5jdGlvbiB2Yyh0KXtmb3IodmFyIGUgaW4gdClyZXR1cm4gdFtlXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiB5Yyh0LGUscixuKXt2YXIgaT10LmNvbXBhcmVUZXh0O2lmKGUgaW4gaSl7Zm9yKHZhciBhPWlbZV0sbz1hLmxlbmd0aC0xO28+PTA7by0tKWlmKG4uZGlzdChhW29dKTxyKXJldHVybiEwfWVsc2UgaVtlXT1bXTtyZXR1cm4gaVtlXS5wdXNoKG4pLCExfXZhciB4Yz1Mcy5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxiYz1be25hbWU6ImFfZmFkZV9vcGFjaXR5Iixjb21wb25lbnRzOjEsdHlwZToiVWludDgiLG9mZnNldDowfV07ZnVuY3Rpb24gX2ModCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9cz9NYXRoLm1pbigzMjY0MCxNYXRoLnJvdW5kKHNbMF0pKTowLGQ9cz9NYXRoLm1pbigzMjY0MCxNYXRoLnJvdW5kKHNbMV0pKTowO3QuZW1wbGFjZUJhY2soZSxyLE1hdGgucm91bmQoMzIqbiksTWF0aC5yb3VuZCgzMippKSxhLG8sKHA8PDEpKyhsPzE6MCksZCwxNipjLDE2KnUsMjU2KmYsMjU2KmgpfWZ1bmN0aW9uIHdjKHQsZSxyKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnkscil9ZnVuY3Rpb24gVGModCl7Zm9yKHZhciBlPTAscj10LnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7aWYoJG4ocltlXS50ZXh0KSlyZXR1cm4hMH1yZXR1cm4hMX12YXIga2M9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgTmksdGhpcy5pbmRleEFycmF5PW5ldyBZaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz10LHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5PW5ldyBqaSx0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheT1uZXcgVWksdGhpcy5wbGFjZWRTeW1ib2xBcnJheT1uZXcgYWF9O2tjLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCYmMD09PXRoaXMuaW5kZXhBcnJheS5sZW5ndGgmJjA9PT10aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgmJjA9PT10aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheS5sZW5ndGh9LGtjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5pc0VtcHR5KCl8fChyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxKcy5tZW1iZXJzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5LGUpLHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxLcy5tZW1iZXJzLCEwKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5vcGFjaXR5VmVydGV4QXJyYXksYmMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5pdGVtU2l6ZT0xKSwocnx8bikmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSl9LGtjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LE5uKCJTeW1ib2xCdWZmZXJzIixrYyk7dmFyIEFjPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB0LHRoaXMubGF5b3V0QXR0cmlidXRlcz1lLHRoaXMuaW5kZXhBcnJheT1uZXcgcix0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5PW5ldyBHaX07QWMucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMubGF5b3V0QXR0cmlidXRlcyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheSxRcy5tZW1iZXJzLCEwKX0sQWMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlci5kZXN0cm95KCkpfSxObigiQ29sbGlzaW9uQnVmZmVycyIsQWMpO3ZhciBNYz1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvbkJveEFycmF5PXQuY29sbGlzaW9uQm94QXJyYXksdGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc291cmNlTGF5ZXJJbmRleD10LnNvdXJjZUxheWVySW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMuaGFzUlRMVGV4dD0hMSx0aGlzLnNvcnRLZXlSYW5nZXM9W10sdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheT1bXSx0aGlzLnBsYWNlbWVudEludlByb2pNYXRyaXg9aG8oW10pLHRoaXMucGxhY2VtZW50Vmlld3BvcnRNYXRyaXg9aG8oW10pO3ZhciBlPXRoaXMubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO3RoaXMudGV4dFNpemVEYXRhPUdsKHRoaXMuem9vbSxlWyJ0ZXh0LXNpemUiXSksdGhpcy5pY29uU2l6ZURhdGE9R2wodGhpcy56b29tLGVbImljb24tc2l6ZSJdKTt2YXIgcj10aGlzLmxheWVyc1swXS5sYXlvdXQsbj1yLmdldCgic3ltYm9sLXNvcnQta2V5IiksaT1yLmdldCgic3ltYm9sLXotb3JkZXIiKTt0aGlzLnNvcnRGZWF0dXJlc0J5S2V5PSJ2aWV3cG9ydC15IiE9PWkmJnZvaWQgMCE9PW4uY29uc3RhbnRPcigxKTt2YXIgYT0idmlld3BvcnQteSI9PT1pfHwiYXV0byI9PT1pJiYhdGhpcy5zb3J0RmVhdHVyZXNCeUtleTt0aGlzLnNvcnRGZWF0dXJlc0J5WT1hJiYoci5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpfHxyLmdldCgiaWNvbi1hbGxvdy1vdmVybGFwIil8fHIuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKXx8ci5nZXQoImljb24taWdub3JlLXBsYWNlbWVudCIpKSwicG9pbnQiPT09ci5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSYmKHRoaXMud3JpdGluZ01vZGVzPXIuZ2V0KCJ0ZXh0LXdyaXRpbmctbW9kZSIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIENsW3RdfSkpKSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLnNvdXJjZUlEPXQuc291cmNlSUR9O01jLnByb3RvdHlwZS5jcmVhdGVBcnJheXM9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9bmV3IGtjKG5ldyBVYShKcy5tZW1iZXJzLHRoaXMubGF5ZXJzLHRoaXMuem9vbSwoZnVuY3Rpb24odCl7cmV0dXJuL150ZXh0Ly50ZXN0KHQpfSkpKSx0aGlzLmljb249bmV3IGtjKG5ldyBVYShKcy5tZW1iZXJzLHRoaXMubGF5ZXJzLHRoaXMuem9vbSwoZnVuY3Rpb24odCl7cmV0dXJuL15pY29uLy50ZXN0KHQpfSkpKSx0aGlzLmdseXBoT2Zmc2V0QXJyYXk9bmV3IGxhLHRoaXMubGluZVZlcnRleEFycmF5PW5ldyBjYSx0aGlzLnN5bWJvbEluc3RhbmNlcz1uZXcgc2F9LE1jLnByb3RvdHlwZS5jYWxjdWxhdGVHbHlwaERlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWlmKGVbdC5jaGFyQ29kZUF0KGEpXT0hMCwocnx8bikmJmkpe3ZhciBvPXJsW3QuY2hhckF0KGEpXTtvJiYoZVtvLmNoYXJDb2RlQXQoMCldPSEwKX19LE1jLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sYXllcnNbMF0saT1uLmxheW91dCxhPWkuZ2V0KCJ0ZXh0LWZvbnQiKSxvPWkuZ2V0KCJ0ZXh0LWZpZWxkIikscz1pLmdldCgiaWNvbi1pbWFnZSIpLGw9KCJjb25zdGFudCIhPT1vLnZhbHVlLmtpbmR8fG8udmFsdWUudmFsdWUgaW5zdGFuY2VvZiBuZSYmIW8udmFsdWUudmFsdWUuaXNFbXB0eSgpfHxvLnZhbHVlLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoPjApJiYoImNvbnN0YW50IiE9PWEudmFsdWUua2luZHx8YS52YWx1ZS52YWx1ZS5sZW5ndGg+MCksYz0iY29uc3RhbnQiIT09cy52YWx1ZS5raW5kfHwhIXMudmFsdWUudmFsdWV8fE9iamVjdC5rZXlzKHMucGFyYW1ldGVycykubGVuZ3RoPjAsdT1pLmdldCgic3ltYm9sLXNvcnQta2V5Iik7aWYodGhpcy5mZWF0dXJlcz1bXSxsfHxjKXtmb3IodmFyIGY9ZS5pY29uRGVwZW5kZW5jaWVzLGg9ZS5nbHlwaERlcGVuZGVuY2llcyxwPWUuYXZhaWxhYmxlSW1hZ2VzLGQ9bmV3IHBpKHRoaXMuem9vbSksbT0wLGc9dDttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV0seT12LmZlYXR1cmUseD12LmlkLGI9di5pbmRleCxfPXYuc291cmNlTGF5ZXJJbmRleCx3PW4uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5LFQ9e3R5cGU6eS50eXBlLGlkOngscHJvcGVydGllczp5LnByb3BlcnRpZXMsZ2VvbWV0cnk6dz9ZYSh5KTpbXX07aWYobi5fZmVhdHVyZUZpbHRlci5maWx0ZXIoZCxULHIpKXt3fHwoVC5nZW9tZXRyeT1ZYSh5KSk7dmFyIGs9dm9pZCAwO2lmKGwpe3ZhciBBPW4uZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCJ0ZXh0LWZpZWxkIixULHIscCksTT1uZS5mYWN0b3J5KEEpO1RjKE0pJiYodGhpcy5oYXNSVExUZXh0PSEwKSwoIXRoaXMuaGFzUlRMVGV4dHx8InVuYXZhaWxhYmxlIj09PXVpKCl8fHRoaXMuaGFzUlRMVGV4dCYmaGkuaXNQYXJzZWQoKSkmJihrPWVsKE0sbixUKSl9dmFyIFM9dm9pZCAwO2lmKGMpe3ZhciBFPW4uZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCJpY29uLWltYWdlIixULHIscCk7Uz1FIGluc3RhbmNlb2YgaWU/RTppZS5mcm9tU3RyaW5nKEUpfWlmKGt8fFMpe3ZhciBMPXRoaXMuc29ydEZlYXR1cmVzQnlLZXk/dS5ldmFsdWF0ZShULHt9LHIpOnZvaWQgMCxDPXtpZDp4LHRleHQ6ayxpY29uOlMsaW5kZXg6Yixzb3VyY2VMYXllckluZGV4Ol8sZ2VvbWV0cnk6WWEoeSkscHJvcGVydGllczp5LnByb3BlcnRpZXMsdHlwZTp4Y1t5LnR5cGVdLHNvcnRLZXk6TH07aWYodGhpcy5mZWF0dXJlcy5wdXNoKEMpLFMmJihmW1MubmFtZV09ITApLGspe3ZhciBQPWEuZXZhbHVhdGUoVCx7fSxyKS5qb2luKCIsIiksST0ibWFwIj09PWkuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYicG9pbnQiIT09aS5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKTt0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQ9dGhpcy53cml0aW5nTW9kZXMmJnRoaXMud3JpdGluZ01vZGVzLmluZGV4T2YoQ2wudmVydGljYWwpPj0wO2Zvcih2YXIgTz0wLHo9ay5zZWN0aW9ucztPPHoubGVuZ3RoO08rPTEpe3ZhciBEPXpbT107aWYoRC5pbWFnZSlmW0QuaW1hZ2UubmFtZV09ITA7ZWxzZXt2YXIgUj1XbihrLnRvU3RyaW5nKCkpLEY9RC5mb250U3RhY2t8fFAsQj1oW0ZdPWhbRl18fHt9O3RoaXMuY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXMoRC50ZXh0LEIsSSx0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQsUil9fX19fX0ibGluZSI9PT1pLmdldCgic3ltYm9sLXBsYWNlbWVudCIpJiYodGhpcy5mZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXt9LG49W10saT0wO2Z1bmN0aW9uIGEoZSl7bi5wdXNoKHRbZV0pLGkrK31mdW5jdGlvbiBvKHQsZSxpKXt2YXIgYT1yW3RdO3JldHVybiBkZWxldGUgclt0XSxyW2VdPWEsblthXS5nZW9tZXRyeVswXS5wb3AoKSxuW2FdLmdlb21ldHJ5WzBdPW5bYV0uZ2VvbWV0cnlbMF0uY29uY2F0KGlbMF0pLGF9ZnVuY3Rpb24gcyh0LHIsaSl7dmFyIGE9ZVtyXTtyZXR1cm4gZGVsZXRlIGVbcl0sZVt0XT1hLG5bYV0uZ2VvbWV0cnlbMF0uc2hpZnQoKSxuW2FdLmdlb21ldHJ5WzBdPWlbMF0uY29uY2F0KG5bYV0uZ2VvbWV0cnlbMF0pLGF9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49cj9lWzBdW2VbMF0ubGVuZ3RoLTFdOmVbMF1bMF07cmV0dXJuIHQrIjoiK24ueCsiOiIrbi55fWZvcih2YXIgYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGY9dS5nZW9tZXRyeSxoPXUudGV4dD91LnRleHQudG9TdHJpbmcoKTpudWxsO2lmKGgpe3ZhciBwPWwoaCxmKSxkPWwoaCxmLCEwKTtpZihwIGluIHImJmQgaW4gZSYmcltwXSE9PWVbZF0pe3ZhciBtPXMocCxkLGYpLGc9byhwLGQsblttXS5nZW9tZXRyeSk7ZGVsZXRlIGVbcF0sZGVsZXRlIHJbZF0scltsKGgsbltnXS5nZW9tZXRyeSwhMCldPWcsblttXS5nZW9tZXRyeT1udWxsfWVsc2UgcCBpbiByP28ocCxkLGYpOmQgaW4gZT9zKHAsZCxmKTooYShjKSxlW3BdPWktMSxyW2RdPWktMSl9ZWxzZSBhKGMpfXJldHVybiBuLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnl9KSl9KHRoaXMuZmVhdHVyZXMpKSx0aGlzLnNvcnRGZWF0dXJlc0J5S2V5JiZ0aGlzLmZlYXR1cmVzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSl9fSxNYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmKHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMubGF5ZXJzLHIpLHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMubGF5ZXJzLHIpKX0sTWMucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCYmIXRoaXMuaGFzUlRMVGV4dH0sTWMucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZHx8dGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sTWMucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXshdGhpcy51cGxvYWRlZCYmdGhpcy5oYXNEZWJ1Z0RhdGEoKSYmKHRoaXMudGV4dENvbGxpc2lvbkJveC51cGxvYWQodCksdGhpcy5pY29uQ29sbGlzaW9uQm94LnVwbG9hZCh0KSksdGhpcy50ZXh0LnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZLCF0aGlzLnVwbG9hZGVkLHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQpLHRoaXMuaWNvbi51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSwhdGhpcy51cGxvYWRlZCx0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKSx0aGlzLnVwbG9hZGVkPSEwfSxNYy5wcm90b3R5cGUuZGVzdHJveURlYnVnRGF0YT1mdW5jdGlvbigpe3RoaXMudGV4dENvbGxpc2lvbkJveC5kZXN0cm95KCksdGhpcy5pY29uQ29sbGlzaW9uQm94LmRlc3Ryb3koKX0sTWMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnRleHQuZGVzdHJveSgpLHRoaXMuaWNvbi5kZXN0cm95KCksdGhpcy5oYXNEZWJ1Z0RhdGEoKSYmdGhpcy5kZXN0cm95RGVidWdEYXRhKCl9LE1jLnByb3RvdHlwZS5hZGRUb0xpbmVWZXJ0ZXhBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aDtpZih2b2lkIDAhPT10LnNlZ21lbnQpe2Zvcih2YXIgbj10LmRpc3QoZVt0LnNlZ21lbnQrMV0pLGk9dC5kaXN0KGVbdC5zZWdtZW50XSksYT17fSxvPXQuc2VnbWVudCsxO288ZS5sZW5ndGg7bysrKWFbb109e3g6ZVtvXS54LHk6ZVtvXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOm59LG88ZS5sZW5ndGgtMSYmKG4rPWVbbysxXS5kaXN0KGVbb10pKTtmb3IodmFyIHM9dC5zZWdtZW50fHwwO3M+PTA7cy0tKWFbc109e3g6ZVtzXS54LHk6ZVtzXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOml9LHM+MCYmKGkrPWVbcy0xXS5kaXN0KGVbc10pKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9YVtsXTt0aGlzLmxpbmVWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhjLngsYy55LGMudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpfX1yZXR1cm57bGluZVN0YXJ0SW5kZXg6cixsaW5lTGVuZ3RoOnRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aC1yfX0sTWMucHJvdG90eXBlLmFkZFN5bWJvbHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe2Zvcih2YXIgaD10LmluZGV4QXJyYXkscD10LmxheW91dFZlcnRleEFycmF5LGQ9dC5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0KmUubGVuZ3RoLHAsaCxhLnNvcnRLZXkpLG09dGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aCxnPWQudmVydGV4TGVuZ3RoLHY9dGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZvPT09Q2wudmVydGljYWw/TWF0aC5QSS8yOjAseT1hLnRleHQmJmEudGV4dC5zZWN0aW9ucyx4PTA7eDxlLmxlbmd0aDt4Kyspe3ZhciBiPWVbeF0sXz1iLnRsLHc9Yi50cixUPWIuYmwsaz1iLmJyLEE9Yi50ZXgsTT1iLnBpeGVsT2Zmc2V0VEwsUz1iLnBpeGVsT2Zmc2V0QlIsRT1iLm1pbkZvbnRTY2FsZVgsTD1iLm1pbkZvbnRTY2FsZVksQz1iLmdseXBoT2Zmc2V0LFA9Yi5pc1NERixJPWIuc2VjdGlvbkluZGV4LE89ZC52ZXJ0ZXhMZW5ndGgsej1DWzFdO19jKHAscy54LHMueSxfLngseitfLnksQS54LEEueSxyLFAsTS54LE0ueSxFLEwpLF9jKHAscy54LHMueSx3Lngseit3LnksQS54K0EudyxBLnkscixQLFMueCxNLnksRSxMKSxfYyhwLHMueCxzLnksVC54LHorVC55LEEueCxBLnkrQS5oLHIsUCxNLngsUy55LEUsTCksX2MocCxzLngscy55LGsueCx6K2sueSxBLngrQS53LEEueStBLmgscixQLFMueCxTLnksRSxMKSx3Yyh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxzLHYpLGguZW1wbGFjZUJhY2soTyxPKzEsTysyKSxoLmVtcGxhY2VCYWNrKE8rMSxPKzIsTyszKSxkLnZlcnRleExlbmd0aCs9NCxkLnByaW1pdGl2ZUxlbmd0aCs9Mix0aGlzLmdseXBoT2Zmc2V0QXJyYXkuZW1wbGFjZUJhY2soQ1swXSkseCE9PWUubGVuZ3RoLTEmJkk9PT1lW3grMV0uc2VjdGlvbkluZGV4fHx0LnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHAubGVuZ3RoLGEsYS5pbmRleCx7fSxmLHkmJnlbSV0pfXQucGxhY2VkU3ltYm9sQXJyYXkuZW1wbGFjZUJhY2socy54LHMueSxtLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgtbSxnLGwsYyxzLnNlZ21lbnQscj9yWzBdOjAscj9yWzFdOjAsblswXSxuWzFdLG8sMCwhMSwwLHUpfSxNYy5wcm90b3R5cGUuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gZS5lbXBsYWNlQmFjaygwLDApLHQuZW1wbGFjZUJhY2soci54LHIueSxuLGksTWF0aC5yb3VuZChhLngpLE1hdGgucm91bmQoYS55KSl9LE1jLnByb3RvdHlwZS5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMpe3ZhciBsPWEuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCxhLmxheW91dFZlcnRleEFycmF5LGEuaW5kZXhBcnJheSksYz1sLnZlcnRleExlbmd0aCx1PWEubGF5b3V0VmVydGV4QXJyYXksZj1hLmNvbGxpc2lvblZlcnRleEFycmF5LGg9cy5hbmNob3JYLHA9cy5hbmNob3JZO3RoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KHUsZixvLGgscCxuZXcgaSh0LGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGYsbyxoLHAsbmV3IGkocixlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxmLG8saCxwLG5ldyBpKHIsbikpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KHUsZixvLGgscCxuZXcgaSh0LG4pKSxsLnZlcnRleExlbmd0aCs9NDt2YXIgZD1hLmluZGV4QXJyYXk7ZC5lbXBsYWNlQmFjayhjLGMrMSksZC5lbXBsYWNlQmFjayhjKzEsYysyKSxkLmVtcGxhY2VCYWNrKGMrMixjKzMpLGQuZW1wbGFjZUJhY2soYyszLGMpLGwucHJpbWl0aXZlTGVuZ3RoKz00fSxNYy5wcm90b3R5cGUuYWRkRGVidWdDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dDtpPGU7aSsrKXt2YXIgYT10aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldChpKSxvPWEueDEscz1hLnkxLGw9YS54MixjPWEueTI7dGhpcy5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzKG8scyxsLGMsbj90aGlzLnRleHRDb2xsaXNpb25Cb3g6dGhpcy5pY29uQ29sbGlzaW9uQm94LGEuYW5jaG9yUG9pbnQscil9fSxNYy5wcm90b3R5cGUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnM9ZnVuY3Rpb24oKXt0aGlzLmhhc0RlYnVnRGF0YSgpJiZ0aGlzLmRlc3Ryb3lEZWJ1Z0RhdGEoKSx0aGlzLnRleHRDb2xsaXNpb25Cb3g9bmV3IEFjKEhpLCRzLm1lbWJlcnMsUWkpLHRoaXMuaWNvbkNvbGxpc2lvbkJveD1uZXcgQWMoSGksJHMubWVtYmVycyxRaSk7Zm9yKHZhciB0PTA7dDx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7dCsrKXt2YXIgZT10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQodCk7dGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudGV4dEJveFN0YXJ0SW5kZXgsZS50ZXh0Qm94RW5kSW5kZXgsZSwhMCksdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LGUsITApLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLmljb25Cb3hTdGFydEluZGV4LGUuaWNvbkJveEVuZEluZGV4LGUsITEpLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsZS52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCxlLCExKX19LE1jLnByb3RvdHlwZS5fZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7Zm9yKHZhciBjPXt9LHU9ZTt1PHI7dSsrKXt2YXIgZj10LmdldCh1KTtjLnRleHRCb3g9e3gxOmYueDEseTE6Zi55MSx4MjpmLngyLHkyOmYueTIsYW5jaG9yUG9pbnRYOmYuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpmLmFuY2hvclBvaW50WX0sYy50ZXh0RmVhdHVyZUluZGV4PWYuZmVhdHVyZUluZGV4O2JyZWFrfWZvcih2YXIgaD1uO2g8aTtoKyspe3ZhciBwPXQuZ2V0KGgpO2MudmVydGljYWxUZXh0Qm94PXt4MTpwLngxLHkxOnAueTEseDI6cC54Mix5MjpwLnkyLGFuY2hvclBvaW50WDpwLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6cC5hbmNob3JQb2ludFl9LGMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4PXAuZmVhdHVyZUluZGV4O2JyZWFrfWZvcih2YXIgZD1hO2Q8bztkKyspe3ZhciBtPXQuZ2V0KGQpO2MuaWNvbkJveD17eDE6bS54MSx5MTptLnkxLHgyOm0ueDIseTI6bS55MixhbmNob3JQb2ludFg6bS5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOm0uYW5jaG9yUG9pbnRZfSxjLmljb25GZWF0dXJlSW5kZXg9bS5mZWF0dXJlSW5kZXg7YnJlYWt9Zm9yKHZhciBnPXM7ZzxsO2crKyl7dmFyIHY9dC5nZXQoZyk7Yy52ZXJ0aWNhbEljb25Cb3g9e3gxOnYueDEseTE6di55MSx4Mjp2LngyLHkyOnYueTIsYW5jaG9yUG9pbnRYOnYuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTp2LmFuY2hvclBvaW50WX0sYy52ZXJ0aWNhbEljb25GZWF0dXJlSW5kZXg9di5mZWF0dXJlSW5kZXg7YnJlYWt9cmV0dXJuIGN9LE1jLnByb3RvdHlwZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uQXJyYXlzPVtdO2Zvcih2YXIgZT0wO2U8dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGUpO3RoaXMuY29sbGlzaW9uQXJyYXlzLnB1c2godGhpcy5fZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbCh0LHIudGV4dEJveFN0YXJ0SW5kZXgsci50ZXh0Qm94RW5kSW5kZXgsci52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LHIudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsci5pY29uQm94U3RhcnRJbmRleCxyLmljb25Cb3hFbmRJbmRleCxyLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsci52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCkpfX0sTWMucHJvdG90eXBlLmhhc1RleHREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sTWMucHJvdG90eXBlLmhhc0ljb25EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sTWMucHJvdG90eXBlLmhhc0RlYnVnRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHRDb2xsaXNpb25Cb3gmJnRoaXMuaWNvbkNvbGxpc2lvbkJveH0sTWMucHJvdG90eXBlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMudGV4dENvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sTWMucHJvdG90eXBlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuaWNvbkNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sTWMucHJvdG90eXBlLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2w9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoZSksbj1yLnZlcnRleFN0YXJ0SW5kZXgrNCpyLm51bUdseXBocyxpPXIudmVydGV4U3RhcnRJbmRleDtpPG47aSs9NCl0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaSxpKzEsaSsyKSx0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaSsxLGkrMixpKzMpfSxNYy5wcm90b3R5cGUuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcz1mdW5jdGlvbih0KXtpZih0aGlzLnNvcnRlZEFuZ2xlPT09dCYmdm9pZCAwIT09dGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMpcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO2Zvcih2YXIgZT1NYXRoLnNpbih0KSxyPU1hdGguY29zKHQpLG49W10saT1bXSxhPVtdLG89MDtvPHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsrK28pe2EucHVzaChvKTt2YXIgcz10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQobyk7bi5wdXNoKDB8TWF0aC5yb3VuZChlKnMuYW5jaG9yWCtyKnMuYW5jaG9yWSkpLGkucHVzaChzLmZlYXR1cmVJbmRleCl9cmV0dXJuIGEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gblt0XS1uW2VdfHxpW2VdLWlbdF19KSksYX0sTWMucHJvdG90eXBlLmFkZFRvU29ydEtleVJhbmdlcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc29ydEtleVJhbmdlc1t0aGlzLnNvcnRLZXlSYW5nZXMubGVuZ3RoLTFdO3ImJnIuc29ydEtleT09PWU/ci5zeW1ib2xJbnN0YW5jZUVuZD10KzE6dGhpcy5zb3J0S2V5UmFuZ2VzLnB1c2goe3NvcnRLZXk6ZSxzeW1ib2xJbnN0YW5jZVN0YXJ0OnQsc3ltYm9sSW5zdGFuY2VFbmQ6dCsxfSl9LE1jLnByb3RvdHlwZS5zb3J0RmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnNvcnRGZWF0dXJlc0J5WSYmdGhpcy5zb3J0ZWRBbmdsZSE9PXQmJiEodGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4xfHx0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjEpKXt0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcz10aGlzLmdldFNvcnRlZFN5bWJvbEluZGV4ZXModCksdGhpcy5zb3J0ZWRBbmdsZT10LHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmZlYXR1cmVTb3J0T3JkZXI9W107Zm9yKHZhciByPTAsbj10aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcztyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7dGhpcy5mZWF0dXJlU29ydE9yZGVyLnB1c2goYS5mZWF0dXJlSW5kZXgpLFthLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LGEuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LGEubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleF0uZm9yRWFjaCgoZnVuY3Rpb24odCxyLG4pe3Q+PTAmJm4uaW5kZXhPZih0KT09PXImJmUuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbChlLnRleHQsdCl9KSksYS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleD49MCYmdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMudGV4dCxhLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KSxhLnBsYWNlZEljb25TeW1ib2xJbmRleD49MCYmdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMuaWNvbixhLnBsYWNlZEljb25TeW1ib2xJbmRleCksYS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleD49MCYmdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMuaWNvbixhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KX10aGlzLnRleHQuaW5kZXhCdWZmZXImJnRoaXMudGV4dC5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMudGV4dC5pbmRleEFycmF5KSx0aGlzLmljb24uaW5kZXhCdWZmZXImJnRoaXMuaWNvbi5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMuaWNvbi5pbmRleEFycmF5KX19LE5uKCJTeW1ib2xCdWNrZXQiLE1jLHtvbWl0OlsibGF5ZXJzIiwiY29sbGlzaW9uQm94QXJyYXkiLCJmZWF0dXJlcyIsImNvbXBhcmVUZXh0Il19KSxNYy5NQVhfR0xZUEhTPTY1NTM1LE1jLmFkZER5bmFtaWNBdHRyaWJ1dGVzPXdjO3ZhciBTYz1uZXcgU2koeyJzeW1ib2wtcGxhY2VtZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsic3ltYm9sLXBsYWNlbWVudCJdKSwic3ltYm9sLXNwYWNpbmciOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtc3BhY2luZyJdKSwic3ltYm9sLWF2b2lkLWVkZ2VzIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsic3ltYm9sLWF2b2lkLWVkZ2VzIl0pLCJzeW1ib2wtc29ydC1rZXkiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtc29ydC1rZXkiXSksInN5bWJvbC16LW9yZGVyIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsic3ltYm9sLXotb3JkZXIiXSksImljb24tYWxsb3ctb3ZlcmxhcCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tYWxsb3ctb3ZlcmxhcCJdKSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0pLCJpY29uLW9wdGlvbmFsIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1vcHRpb25hbCJdKSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdKSwiaWNvbi1zaXplIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1zaXplIl0pLCJpY29uLXRleHQtZml0IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi10ZXh0LWZpdCJdKSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIl0pLCJpY29uLWltYWdlIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1pbWFnZSJdKSwiaWNvbi1yb3RhdGUiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXJvdGF0ZSJdKSwiaWNvbi1wYWRkaW5nIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1wYWRkaW5nIl0pLCJpY29uLWtlZXAtdXByaWdodCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24ta2VlcC11cHJpZ2h0Il0pLCJpY29uLW9mZnNldCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbImljb24tb2Zmc2V0Il0pLCJpY29uLWFuY2hvciI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbImljb24tYW5jaG9yIl0pLCJpY29uLXBpdGNoLWFsaWdubWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tcGl0Y2gtYWxpZ25tZW50Il0pLCJ0ZXh0LXBpdGNoLWFsaWdubWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtcGl0Y2gtYWxpZ25tZW50Il0pLCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il0pLCJ0ZXh0LWZpZWxkIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1maWVsZCJdKSwidGV4dC1mb250IjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1mb250Il0pLCJ0ZXh0LXNpemUiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXNpemUiXSksInRleHQtbWF4LXdpZHRoIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1tYXgtd2lkdGgiXSksInRleHQtbGluZS1oZWlnaHQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxpbmUtaGVpZ2h0Il0pLCJ0ZXh0LWxldHRlci1zcGFjaW5nIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1sZXR0ZXItc3BhY2luZyJdKSwidGV4dC1qdXN0aWZ5IjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1qdXN0aWZ5Il0pLCJ0ZXh0LXJhZGlhbC1vZmZzZXQiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJhZGlhbC1vZmZzZXQiXSksInRleHQtdmFyaWFibGUtYW5jaG9yIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC12YXJpYWJsZS1hbmNob3IiXSksInRleHQtYW5jaG9yIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1hbmNob3IiXSksInRleHQtbWF4LWFuZ2xlIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1tYXgtYW5nbGUiXSksInRleHQtd3JpdGluZy1tb2RlIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC13cml0aW5nLW1vZGUiXSksInRleHQtcm90YXRlIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGUiXSksInRleHQtcGFkZGluZyI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtcGFkZGluZyJdKSwidGV4dC1rZWVwLXVwcmlnaHQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWtlZXAtdXByaWdodCJdKSwidGV4dC10cmFuc2Zvcm0iOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXRyYW5zZm9ybSJdKSwidGV4dC1vZmZzZXQiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW9mZnNldCJdKSwidGV4dC1hbGxvdy1vdmVybGFwIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1hbGxvdy1vdmVybGFwIl0pLCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXSksInRleHQtb3B0aW9uYWwiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW9wdGlvbmFsIl0pfSksRWM9e3BhaW50Om5ldyBTaSh7Imljb24tb3BhY2l0eSI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi1vcGFjaXR5Il0pLCJpY29uLWNvbG9yIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJpY29uLWNvbG9yIl0pLCJpY29uLWhhbG8tY29sb3IiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24taGFsby1jb2xvciJdKSwiaWNvbi1oYWxvLXdpZHRoIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJpY29uLWhhbG8td2lkdGgiXSksImljb24taGFsby1ibHVyIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJpY29uLWhhbG8tYmx1ciJdKSwiaWNvbi10cmFuc2xhdGUiOm5ldyB3aShMdC5wYWludF9zeW1ib2xbImljb24tdHJhbnNsYXRlIl0pLCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdC5wYWludF9zeW1ib2xbImljb24tdHJhbnNsYXRlLWFuY2hvciJdKSwidGV4dC1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJ0ZXh0LW9wYWNpdHkiXSksInRleHQtY29sb3IiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtY29sb3IiXSx7cnVudGltZVR5cGU6VXQsZ2V0T3ZlcnJpZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dENvbG9yfSxoYXNPdmVycmlkZTpmdW5jdGlvbih0KXtyZXR1cm4hIXQudGV4dENvbG9yfX0pLCJ0ZXh0LWhhbG8tY29sb3IiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtaGFsby1jb2xvciJdKSwidGV4dC1oYWxvLXdpZHRoIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJ0ZXh0LWhhbG8td2lkdGgiXSksInRleHQtaGFsby1ibHVyIjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJ0ZXh0LWhhbG8tYmx1ciJdKSwidGV4dC10cmFuc2xhdGUiOm5ldyB3aShMdC5wYWludF9zeW1ib2xbInRleHQtdHJhbnNsYXRlIl0pLCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdC5wYWludF9zeW1ib2xbInRleHQtdHJhbnNsYXRlLWFuY2hvciJdKX0pLGxheW91dDpTY30sTGM9ZnVuY3Rpb24odCl7dGhpcy50eXBlPXQucHJvcGVydHkub3ZlcnJpZGVzP3QucHJvcGVydHkub3ZlcnJpZGVzLnJ1bnRpbWVUeXBlOkZ0LHRoaXMuZGVmYXVsdFZhbHVlPXR9O0xjLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZih0LmZvcm1hdHRlZFNlY3Rpb24pe3ZhciBlPXRoaXMuZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcztpZihlJiZlLmhhc092ZXJyaWRlKHQuZm9ybWF0dGVkU2VjdGlvbikpcmV0dXJuIGUuZ2V0T3ZlcnJpZGUodC5mb3JtYXR0ZWRTZWN0aW9uKX1yZXR1cm4gdC5mZWF0dXJlJiZ0LmZlYXR1cmVTdGF0ZT90aGlzLmRlZmF1bHRWYWx1ZS5ldmFsdWF0ZSh0LmZlYXR1cmUsdC5mZWF0dXJlU3RhdGUpOnRoaXMuZGVmYXVsdFZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb24uZGVmYXVsdH0sTGMucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmRlZmF1bHRWYWx1ZS5pc0NvbnN0YW50KCl8fHQodGhpcy5kZWZhdWx0VmFsdWUudmFsdWUuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uKX0sTGMucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTGMucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxObigiRm9ybWF0U2VjdGlvbk92ZXJyaWRlIixMYyx7b21pdDpbImRlZmF1bHRWYWx1ZSJdfSk7dmFyIENjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxFYyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUscil7aWYodC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUsciksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpJiYoInBvaW50IiE9PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpP3RoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09Im1hcCI6dGhpcy5sYXlvdXQuX3ZhbHVlc1siaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXT0idmlld3BvcnQiKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJigicG9pbnQiIT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik/dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXT0ibWFwIjp0aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdPSJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50IikmJih0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXBpdGNoLWFsaWdubWVudCJdPXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSksInBvaW50Ij09PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpKXt2YXIgbj10aGlzLmxheW91dC5nZXQoInRleHQtd3JpdGluZy1tb2RlIik7aWYobil7Zm9yKHZhciBpPVtdLGE9MCxvPW47YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2kuaW5kZXhPZihzKTwwJiZpLnB1c2gocyl9dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1pfWVsc2UgdGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1bImhvcml6b250YWwiXX10aGlzLl9zZXRQYWludE92ZXJyaWRlcygpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sYXlvdXQuZ2V0KHQpLmV2YWx1YXRlKGUse30scixuKSxhPXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXNbdF07cmV0dXJuIGEuaXNEYXRhRHJpdmVuKCl8fFlyKGEudmFsdWUpfHwhaT9pOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucmVwbGFjZSgveyhbXnt9XSspfS9nLChmdW5jdGlvbihlLHIpe3JldHVybiByIGluIHQ/U3RyaW5nKHRbcl0pOiIifSkpfShlLnByb3BlcnRpZXMsaSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE1jKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLl9zZXRQYWludE92ZXJyaWRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9RWMucGFpbnQub3ZlcnJpZGFibGVQcm9wZXJ0aWVzO3Q8ci5sZW5ndGg7dCs9MSl7dmFyIG49clt0XTtpZihlLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsbikpe3ZhciBpPXRoaXMucGFpbnQuZ2V0KG4pLGE9bmV3IExjKGkpLG89bmV3IEdyKGEsaS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSxzPW51bGw7cz0iY29uc3RhbnQiPT09aS52YWx1ZS5raW5kfHwic291cmNlIj09PWkudmFsdWUua2luZD9uZXcgWHIoInNvdXJjZSIsbyk6bmV3IFpyKCJjb21wb3NpdGUiLG8saS52YWx1ZS56b29tU3RvcHMsaS52YWx1ZS5faW50ZXJwb2xhdGlvblR5cGUpLHRoaXMucGFpbnQuX3ZhbHVlc1tuXT1uZXcgYmkoaS5wcm9wZXJ0eSxzLGkucGFyYW1ldGVycyl9fX0sZS5wcm90b3R5cGUuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuISghdGhpcy5sYXlvdXR8fHIuaXNEYXRhRHJpdmVuKCl8fG4uaXNEYXRhRHJpdmVuKCkpJiZlLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsdCl9LGUuaGFzUGFpbnRPdmVycmlkZT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0KCJ0ZXh0LWZpZWxkIiksbj1FYy5wYWludC5wcm9wZXJ0aWVzW2VdLGk9ITEsYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgYT1yW2VdO2lmKG4ub3ZlcnJpZGVzJiZuLm92ZXJyaWRlcy5oYXNPdmVycmlkZShhKSlyZXR1cm4gdm9pZChpPSEwKX19O2lmKCJjb25zdGFudCI9PT1yLnZhbHVlLmtpbmQmJnIudmFsdWUudmFsdWUgaW5zdGFuY2VvZiBuZSlhKHIudmFsdWUudmFsdWUuc2VjdGlvbnMpO2Vsc2UgaWYoInNvdXJjZSI9PT1yLnZhbHVlLmtpbmQpe3ZhciBvPWZ1bmN0aW9uKHQpe2lmKCFpKWlmKHQgaW5zdGFuY2VvZiBjZSYmc2UodC52YWx1ZSk9PT1HdCl7dmFyIGU9dC52YWx1ZTthKGUuc2VjdGlvbnMpfWVsc2UgdCBpbnN0YW5jZW9mIHBlP2EodC5zZWN0aW9ucyk6dC5lYWNoQ2hpbGQobyl9LHM9ci52YWx1ZTtzLl9zdHlsZUV4cHJlc3Npb24mJm8ocy5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfXJldHVybiBpfSxlfShFaSksUGM9e3BhaW50Om5ldyBTaSh7ImJhY2tncm91bmQtY29sb3IiOm5ldyB3aShMdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLWNvbG9yIl0pLCJiYWNrZ3JvdW5kLXBhdHRlcm4iOm5ldyBBaShMdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLXBhdHRlcm4iXSksImJhY2tncm91bmQtb3BhY2l0eSI6bmV3IHdpKEx0LnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtb3BhY2l0eSJdKX0pfSxJYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsUGMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShFaSksT2M9e3BhaW50Om5ldyBTaSh7InJhc3Rlci1vcGFjaXR5IjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItb3BhY2l0eSJdKSwicmFzdGVyLWh1ZS1yb3RhdGUiOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1odWUtcm90YXRlIl0pLCJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1icmlnaHRuZXNzLW1pbiJdKSwicmFzdGVyLWJyaWdodG5lc3MtbWF4IjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiXSksInJhc3Rlci1zYXR1cmF0aW9uIjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItc2F0dXJhdGlvbiJdKSwicmFzdGVyLWNvbnRyYXN0IjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItY29udHJhc3QiXSksInJhc3Rlci1yZXNhbXBsaW5nIjpuZXcgd2koTHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItcmVzYW1wbGluZyJdKSwicmFzdGVyLWZhZGUtZHVyYXRpb24iOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1mYWRlLWR1cmF0aW9uIl0pfSl9LHpjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxPYyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVpKTt2YXIgRGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHt9KSx0aGlzLmltcGxlbWVudGF0aW9uPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmlzM0Q9ZnVuY3Rpb24oKXtyZXR1cm4iM2QiPT09dGhpcy5pbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuaW1wbGVtZW50YXRpb24ucHJlcmVuZGVyfSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5pbXBsZW1lbnRhdGlvbi5vbkFkZCYmdGhpcy5pbXBsZW1lbnRhdGlvbi5vbkFkZCh0LHQucGFpbnRlci5jb250ZXh0LmdsKX0sZS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSYmdGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSh0LHQucGFpbnRlci5jb250ZXh0LmdsKX0sZX0oRWkpLFJjPXtjaXJjbGU6X28saGVhdG1hcDpQbyxoaWxsc2hhZGU6T28sZmlsbDp4cywiZmlsbC1leHRydXNpb24iOkZzLGxpbmU6WHMsc3ltYm9sOkNjLGJhY2tncm91bmQ6SWMscmFzdGVyOnpjfTt2YXIgRmM9c2VsZi5IVE1MSW1hZ2VFbGVtZW50LEJjPXNlbGYuSFRNTENhbnZhc0VsZW1lbnQsTmM9c2VsZi5IVE1MVmlkZW9FbGVtZW50LGpjPXNlbGYuSW1hZ2VEYXRhLFVjPXNlbGYuSW1hZ2VCaXRtYXAsVmM9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jb250ZXh0PXQsdGhpcy5mb3JtYXQ9cix0aGlzLnRleHR1cmU9dC5nbC5jcmVhdGVUZXh0dXJlKCksdGhpcy51cGRhdGUoZSxuKX07VmMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC53aWR0aCxpPXQuaGVpZ2h0LGE9ISh0aGlzLnNpemUmJnRoaXMuc2l6ZVswXT09PW4mJnRoaXMuc2l6ZVsxXT09PWl8fHIpLG89dGhpcy5jb250ZXh0LHM9by5nbDtpZih0aGlzLnVzZU1pcG1hcD1Cb29sZWFuKGUmJmUudXNlTWlwbWFwKSxzLmJpbmRUZXh0dXJlKHMuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLG8ucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldCghMSksby5waXhlbFN0b3JlVW5wYWNrLnNldCgxKSxvLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCh0aGlzLmZvcm1hdD09PXMuUkdCQSYmKCFlfHwhMSE9PWUucHJlbXVsdGlwbHkpKSxhKXRoaXMuc2l6ZT1bbixpXSx0IGluc3RhbmNlb2YgRmN8fHQgaW5zdGFuY2VvZiBCY3x8dCBpbnN0YW5jZW9mIE5jfHx0IGluc3RhbmNlb2YgamN8fFVjJiZ0IGluc3RhbmNlb2YgVWM/cy50ZXhJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LHRoaXMuZm9ybWF0LHMuVU5TSUdORURfQllURSx0KTpzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsbixpLDAsdGhpcy5mb3JtYXQscy5VTlNJR05FRF9CWVRFLHQuZGF0YSk7ZWxzZXt2YXIgbD1yfHx7eDowLHk6MH0sYz1sLngsdT1sLnk7dCBpbnN0YW5jZW9mIEZjfHx0IGluc3RhbmNlb2YgQmN8fHQgaW5zdGFuY2VvZiBOY3x8dCBpbnN0YW5jZW9mIGpjfHxVYyYmdCBpbnN0YW5jZW9mIFVjP3MudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsMCxjLHUscy5SR0JBLHMuVU5TSUdORURfQllURSx0KTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELDAsYyx1LG4saSxzLlJHQkEscy5VTlNJR05FRF9CWVRFLHQuZGF0YSl9dGhpcy51c2VNaXBtYXAmJnRoaXMuaXNTaXplUG93ZXJPZlR3bygpJiZzLmdlbmVyYXRlTWlwbWFwKHMuVEVYVFVSRV8yRCl9LFZjLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmNvbnRleHQuZ2w7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxyIT09bi5MSU5FQVJfTUlQTUFQX05FQVJFU1R8fHRoaXMuaXNTaXplUG93ZXJPZlR3bygpfHwocj1uLkxJTkVBUiksdCE9PXRoaXMuZmlsdGVyJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLHJ8fHQpLHRoaXMuZmlsdGVyPXQpLGUhPT10aGlzLndyYXAmJihuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1MsZSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULGUpLHRoaXMud3JhcD1lKX0sVmMucHJvdG90eXBlLmlzU2l6ZVBvd2VyT2ZUd289ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplWzBdPT09dGhpcy5zaXplWzFdJiZNYXRoLmxvZyh0aGlzLnNpemVbMF0pL01hdGguTE4yJTE9PTB9LFZjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKSx0aGlzLnRleHR1cmU9bnVsbH07dmFyIEhjPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fY2FsbGJhY2s9dCx0aGlzLl90cmlnZ2VyZWQ9ITEsInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCYmKHRoaXMuX2NoYW5uZWw9bmV3IE1lc3NhZ2VDaGFubmVsLHRoaXMuX2NoYW5uZWwucG9ydDIub25tZXNzYWdlPWZ1bmN0aW9uKCl7ZS5fdHJpZ2dlcmVkPSExLGUuX2NhbGxiYWNrKCl9KX07SGMucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3RyaWdnZXJlZHx8KHRoaXMuX3RyaWdnZXJlZD0hMCx0aGlzLl9jaGFubmVsP3RoaXMuX2NoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoITApOnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5fdHJpZ2dlcmVkPSExLHQuX2NhbGxiYWNrKCl9KSwwKSl9LEhjLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fY2hhbm5lbCx0aGlzLl9jYWxsYmFjaz1mdW5jdGlvbigpe319O3ZhciBxYz1mdW5jdGlvbih0LGUscil7dGhpcy50YXJnZXQ9dCx0aGlzLnBhcmVudD1lLHRoaXMubWFwSWQ9cix0aGlzLmNhbGxiYWNrcz17fSx0aGlzLnRhc2tzPXt9LHRoaXMudGFza1F1ZXVlPVtdLHRoaXMuY2FuY2VsQ2FsbGJhY2tzPXt9LG0oWyJyZWNlaXZlIiwicHJvY2VzcyJdLHRoaXMpLHRoaXMuaW52b2tlcj1uZXcgSGModGhpcy5wcm9jZXNzKSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLnJlY2VpdmUsITEpLHRoaXMuZ2xvYmFsU2NvcGU9aygpP3Q6c2VsZn07ZnVuY3Rpb24gR2ModCxlLHIpe3ZhciBuPTIqTWF0aC5QSSo2Mzc4MTM3LzI1Ni9NYXRoLnBvdygyLHIpO3JldHVyblt0Km4tMipNYXRoLlBJKjYzNzgxMzcvMixlKm4tMipNYXRoLlBJKjYzNzgxMzcvMl19cWMucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzO3ZvaWQgMD09PWkmJihpPSExKTt2YXIgbz1NYXRoLnJvdW5kKDFlMTgqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygwLDEwKTtyJiYodGhpcy5jYWxsYmFja3Nbb109cik7dmFyIHM9Uyh0aGlzLmdsb2JhbFNjb3BlKT92b2lkIDA6W107cmV0dXJuIHRoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6dCxoYXNDYWxsYmFjazohIXIsdGFyZ2V0TWFwSWQ6bixtdXN0UXVldWU6aSxzb3VyY2VNYXBJZDp0aGlzLm1hcElkLGRhdGE6SG4oZSxzKX0scykse2NhbmNlbDpmdW5jdGlvbigpe3ImJmRlbGV0ZSBhLmNhbGxiYWNrc1tvXSxhLnRhcmdldC5wb3N0TWVzc2FnZSh7aWQ6byx0eXBlOiI8Y2FuY2VsPiIsdGFyZ2V0TWFwSWQ6bixzb3VyY2VNYXBJZDphLm1hcElkfSl9fX0scWMucHJvdG90eXBlLnJlY2VpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLHI9ZS5pZDtpZihyJiYoIWUudGFyZ2V0TWFwSWR8fHRoaXMubWFwSWQ9PT1lLnRhcmdldE1hcElkKSlpZigiPGNhbmNlbD4iPT09ZS50eXBlKXtkZWxldGUgdGhpcy50YXNrc1tyXTt2YXIgbj10aGlzLmNhbmNlbENhbGxiYWNrc1tyXTtkZWxldGUgdGhpcy5jYW5jZWxDYWxsYmFja3Nbcl0sbiYmbigpfWVsc2UgaygpfHxlLm11c3RRdWV1ZT8odGhpcy50YXNrc1tyXT1lLHRoaXMudGFza1F1ZXVlLnB1c2gociksdGhpcy5pbnZva2VyLnRyaWdnZXIoKSk6dGhpcy5wcm9jZXNzVGFzayhyLGUpfSxxYy5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe2lmKHRoaXMudGFza1F1ZXVlLmxlbmd0aCl7dmFyIHQ9dGhpcy50YXNrUXVldWUuc2hpZnQoKSxlPXRoaXMudGFza3NbdF07ZGVsZXRlIHRoaXMudGFza3NbdF0sdGhpcy50YXNrUXVldWUubGVuZ3RoJiZ0aGlzLmludm9rZXIudHJpZ2dlcigpLGUmJnRoaXMucHJvY2Vzc1Rhc2sodCxlKX19LHFjLnByb3RvdHlwZS5wcm9jZXNzVGFzaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7aWYoIjxyZXNwb25zZT4iPT09ZS50eXBlKXt2YXIgbj10aGlzLmNhbGxiYWNrc1t0XTtkZWxldGUgdGhpcy5jYWxsYmFja3NbdF0sbiYmKGUuZXJyb3I/bihxbihlLmVycm9yKSk6bihudWxsLHFuKGUuZGF0YSkpKX1lbHNle3ZhciBpPSExLGE9Uyh0aGlzLmdsb2JhbFNjb3BlKT92b2lkIDA6W10sbz1lLmhhc0NhbGxiYWNrP2Z1bmN0aW9uKGUsbil7aT0hMCxkZWxldGUgci5jYW5jZWxDYWxsYmFja3NbdF0sci50YXJnZXQucG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZToiPHJlc3BvbnNlPiIsc291cmNlTWFwSWQ6ci5tYXBJZCxlcnJvcjplP0huKGUpOm51bGwsZGF0YTpIbihuLGEpfSxhKX06ZnVuY3Rpb24odCl7aT0hMH0scz1udWxsLGw9cW4oZS5kYXRhKTtpZih0aGlzLnBhcmVudFtlLnR5cGVdKXM9dGhpcy5wYXJlbnRbZS50eXBlXShlLnNvdXJjZU1hcElkLGwsbyk7ZWxzZSBpZih0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2Upe3ZhciBjPWUudHlwZS5zcGxpdCgiLiIpO3M9dGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKGUuc291cmNlTWFwSWQsY1swXSxsLnNvdXJjZSlbY1sxXV0obCxvKX1lbHNlIG8obmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmdW5jdGlvbiAiK2UudHlwZSkpOyFpJiZzJiZzLmNhbmNlbCYmKHRoaXMuY2FuY2VsQ2FsbGJhY2tzW3RdPXMuY2FuY2VsKX19LHFjLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmludm9rZXIucmVtb3ZlKCksdGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5yZWNlaXZlLCExKX07dmFyIFljPWZ1bmN0aW9uKHQsZSl7dCYmKGU/dGhpcy5zZXRTb3V0aFdlc3QodCkuc2V0Tm9ydGhFYXN0KGUpOjQ9PT10Lmxlbmd0aD90aGlzLnNldFNvdXRoV2VzdChbdFswXSx0WzFdXSkuc2V0Tm9ydGhFYXN0KFt0WzJdLHRbM11dKTp0aGlzLnNldFNvdXRoV2VzdCh0WzBdKS5zZXROb3J0aEVhc3QodFsxXSkpfTtZYy5wcm90b3R5cGUuc2V0Tm9ydGhFYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uZT10IGluc3RhbmNlb2YgV2M/bmV3IFdjKHQubG5nLHQubGF0KTpXYy5jb252ZXJ0KHQpLHRoaXN9LFljLnByb3RvdHlwZS5zZXRTb3V0aFdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N3PXQgaW5zdGFuY2VvZiBXYz9uZXcgV2ModC5sbmcsdC5sYXQpOldjLmNvbnZlcnQodCksdGhpc30sWWMucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy5fc3csaT10aGlzLl9uZTtpZih0IGluc3RhbmNlb2YgV2MpZT10LHI9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFljKSl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoND09PXQubGVuZ3RofHx0LmV2ZXJ5KEFycmF5LmlzQXJyYXkpKXt2YXIgYT10O3JldHVybiB0aGlzLmV4dGVuZChZYy5jb252ZXJ0KGEpKX12YXIgbz10O3JldHVybiB0aGlzLmV4dGVuZChXYy5jb252ZXJ0KG8pKX1yZXR1cm4gdGhpc31pZihlPXQuX3N3LHI9dC5fbmUsIWV8fCFyKXJldHVybiB0aGlzfXJldHVybiBufHxpPyhuLmxuZz1NYXRoLm1pbihlLmxuZyxuLmxuZyksbi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLGkubG5nPU1hdGgubWF4KHIubG5nLGkubG5nKSxpLmxhdD1NYXRoLm1heChyLmxhdCxpLmxhdCkpOih0aGlzLl9zdz1uZXcgV2MoZS5sbmcsZS5sYXQpLHRoaXMuX25lPW5ldyBXYyhyLmxuZyxyLmxhdCkpLHRoaXN9LFljLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdjKCh0aGlzLl9zdy5sbmcrdGhpcy5fbmUubG5nKS8yLCh0aGlzLl9zdy5sYXQrdGhpcy5fbmUubGF0KS8yKX0sWWMucHJvdG90eXBlLmdldFNvdXRoV2VzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zd30sWWMucHJvdG90eXBlLmdldE5vcnRoRWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZX0sWWMucHJvdG90eXBlLmdldE5vcnRoV2VzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgV2ModGhpcy5nZXRXZXN0KCksdGhpcy5nZXROb3J0aCgpKX0sWWMucHJvdG90eXBlLmdldFNvdXRoRWFzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgV2ModGhpcy5nZXRFYXN0KCksdGhpcy5nZXRTb3V0aCgpKX0sWWMucHJvdG90eXBlLmdldFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3cubG5nfSxZYy5wcm90b3R5cGUuZ2V0U291dGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3cubGF0fSxZYy5wcm90b3R5cGUuZ2V0RWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZS5sbmd9LFljLnByb3RvdHlwZS5nZXROb3J0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZS5sYXR9LFljLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX3N3LnRvQXJyYXkoKSx0aGlzLl9uZS50b0FycmF5KCldfSxZYy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0Qm91bmRzKCIrdGhpcy5fc3cudG9TdHJpbmcoKSsiLCAiK3RoaXMuX25lLnRvU3RyaW5nKCkrIikifSxZYy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiEodGhpcy5fc3cmJnRoaXMuX25lKX0sWWMucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPVdjLmNvbnZlcnQodCkscj1lLmxuZyxuPWUubGF0LGk9dGhpcy5fc3cubGF0PD1uJiZuPD10aGlzLl9uZS5sYXQsYT10aGlzLl9zdy5sbmc8PXImJnI8PXRoaXMuX25lLmxuZztyZXR1cm4gdGhpcy5fc3cubG5nPnRoaXMuX25lLmxuZyYmKGE9dGhpcy5fc3cubG5nPj1yJiZyPj10aGlzLl9uZS5sbmcpLGkmJmF9LFljLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fHQgaW5zdGFuY2VvZiBZYz90Om5ldyBZYyh0KX07dmFyIFdjPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoIit0KyIsICIrZSsiKSIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAiKX07V2MucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdjKGModGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sV2MucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5sbmcsdGhpcy5sYXRdfSxXYy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0KCIrdGhpcy5sbmcrIiwgIit0aGlzLmxhdCsiKSJ9LFdjLnByb3RvdHlwZS5kaXN0YW5jZVRvPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguUEkvMTgwLHI9dGhpcy5sYXQqZSxuPXQubGF0KmUsaT1NYXRoLnNpbihyKSpNYXRoLnNpbihuKStNYXRoLmNvcyhyKSpNYXRoLmNvcyhuKSpNYXRoLmNvcygodC5sbmctdGhpcy5sbmcpKmUpO3JldHVybiA2MzcxMDA4LjgqTWF0aC5hY29zKE1hdGgubWluKGksMSkpfSxXYy5wcm90b3R5cGUudG9Cb3VuZHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9MzYwKnQvNDAwNzUwMTcscj1lL01hdGguY29zKE1hdGguUEkvMTgwKnRoaXMubGF0KTtyZXR1cm4gbmV3IFljKG5ldyBXYyh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBXYyh0aGlzLmxuZytyLHRoaXMubGF0K2UpKX0sV2MuY29udmVydD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgV2MpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IFdjKE51bWJlcih0WzBdKSxOdW1iZXIodFsxXSkpO2lmKCFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10KXJldHVybiBuZXcgV2MoTnVtYmVyKCJsbmciaW4gdD90LmxuZzp0LmxvbiksTnVtYmVyKHQubGF0KSk7dGhyb3cgbmV3IEVycm9yKCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIGFuIG9iamVjdCB7bG9uOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dIil9O3ZhciBYYz0yKk1hdGguUEkqNjM3MTAwOC44O2Z1bmN0aW9uIFpjKHQpe3JldHVybiBYYypNYXRoLmNvcyh0Kk1hdGguUEkvMTgwKX1mdW5jdGlvbiBKYyh0KXtyZXR1cm4oMTgwK3QpLzM2MH1mdW5jdGlvbiBLYyh0KXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpLzM2MH1mdW5jdGlvbiBRYyh0LGUpe3JldHVybiB0L1pjKGUpfWZ1bmN0aW9uICRjKHQpe3ZhciBlPTE4MC0zNjAqdDtyZXR1cm4gMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKGUqTWF0aC5QSS8xODApKS05MH12YXIgdHU9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPTApLHRoaXMueD0rdCx0aGlzLnk9K2UsdGhpcy56PStyfTt0dS5mcm9tTG5nTGF0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIHI9V2MuY29udmVydCh0KTtyZXR1cm4gbmV3IHR1KEpjKHIubG5nKSxLYyhyLmxhdCksUWMoZSxyLmxhdCkpfSx0dS5wcm90b3R5cGUudG9MbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdjKDM2MCp0aGlzLngtMTgwLCRjKHRoaXMueSkpfSx0dS5wcm90b3R5cGUudG9BbHRpdHVkZT1mdW5jdGlvbigpe3JldHVybiB0PXRoaXMueixlPXRoaXMueSx0KlpjKCRjKGUpKTt2YXIgdCxlfSx0dS5wcm90b3R5cGUubWV0ZXJJbk1lcmNhdG9yQ29vcmRpbmF0ZVVuaXRzPWZ1bmN0aW9uKCl7cmV0dXJuIDEvWGMqKHQ9JGModGhpcy55KSwxL01hdGguY29zKHQqTWF0aC5QSS8xODApKTt2YXIgdH07dmFyIGV1PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLno9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLmtleT1pdSgwLHQsdCxlLHIpfTtldS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLno9PT10LnomJnRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxldS5wcm90b3R5cGUudXJsPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPShyPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixhPUdjKDI1NipyLDI1Nioobj1NYXRoLnBvdygyLGkpLW4tMSksaSksbz1HYygyNTYqKHIrMSksMjU2KihuKzEpLGkpLGFbMF0rIiwiK2FbMV0rIiwiK29bMF0rIiwiK29bMV0pLGw9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPSIiLGE9dDthPjA7YS0tKWkrPShlJihuPTE8PGEtMSk/MTowKSsociZuPzI6MCk7cmV0dXJuIGl9KHRoaXMueix0aGlzLngsdGhpcy55KTtyZXR1cm4gdFsodGhpcy54K3RoaXMueSkldC5sZW5ndGhdLnJlcGxhY2UoIntwcmVmaXh9IiwodGhpcy54JTE2KS50b1N0cmluZygxNikrKHRoaXMueSUxNikudG9TdHJpbmcoMTYpKS5yZXBsYWNlKCJ7en0iLFN0cmluZyh0aGlzLnopKS5yZXBsYWNlKCJ7eH0iLFN0cmluZyh0aGlzLngpKS5yZXBsYWNlKCJ7eX0iLFN0cmluZygidG1zIj09PWU/TWF0aC5wb3coMix0aGlzLnopLXRoaXMueS0xOnRoaXMueSkpLnJlcGxhY2UoIntxdWFka2V5fSIsbCkucmVwbGFjZSgie2Jib3gtZXBzZy0zODU3fSIscyl9LGV1LnByb3RvdHlwZS5nZXRUaWxlUG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMix0aGlzLnopO3JldHVybiBuZXcgaSg4MTkyKih0LngqZS10aGlzLngpLDgxOTIqKHQueSplLXRoaXMueSkpfSxldS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56KyIvIit0aGlzLngrIi8iK3RoaXMueX07dmFyIHJ1PWZ1bmN0aW9uKHQsZSl7dGhpcy53cmFwPXQsdGhpcy5jYW5vbmljYWw9ZSx0aGlzLmtleT1pdSh0LGUueixlLnosZS54LGUueSl9LG51PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5vdmVyc2NhbGVkWj10LHRoaXMud3JhcD1lLHRoaXMuY2Fub25pY2FsPW5ldyBldShyLCtuLCtpKSx0aGlzLmtleT1pdShlLHQscixuLGkpfTtmdW5jdGlvbiBpdSh0LGUscixuLGkpeyh0Kj0yKTwwJiYodD0tMSp0LTEpO3ZhciBhPTE8PHI7cmV0dXJuKGEqYSp0K2EqaStuKS50b1N0cmluZygzNikrci50b1N0cmluZygzNikrZS50b1N0cmluZygzNil9bnUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdmVyc2NhbGVkWj09PXQub3ZlcnNjYWxlZFomJnRoaXMud3JhcD09PXQud3JhcCYmdGhpcy5jYW5vbmljYWwuZXF1YWxzKHQuY2Fub25pY2FsKX0sbnUucHJvdG90eXBlLnNjYWxlZFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2Fub25pY2FsLnotdDtyZXR1cm4gdD50aGlzLmNhbm9uaWNhbC56P25ldyBudSh0LHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSk6bmV3IG51KHQsdGhpcy53cmFwLHQsdGhpcy5jYW5vbmljYWwueD4+ZSx0aGlzLmNhbm9uaWNhbC55Pj5lKX0sbnUucHJvdG90eXBlLmNhbGN1bGF0ZVNjYWxlZEtleT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2Fub25pY2FsLnotdDtyZXR1cm4gdD50aGlzLmNhbm9uaWNhbC56P2l1KHRoaXMud3JhcCorZSx0LHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTppdSh0aGlzLndyYXAqK2UsdCx0LHRoaXMuY2Fub25pY2FsLng+PnIsdGhpcy5jYW5vbmljYWwueT4+cil9LG51LnByb3RvdHlwZS5pc0NoaWxkT2Y9ZnVuY3Rpb24odCl7aWYodC53cmFwIT09dGhpcy53cmFwKXJldHVybiExO3ZhciBlPXRoaXMuY2Fub25pY2FsLnotdC5jYW5vbmljYWwuejtyZXR1cm4gMD09PXQub3ZlcnNjYWxlZFp8fHQub3ZlcnNjYWxlZFo8dGhpcy5vdmVyc2NhbGVkWiYmdC5jYW5vbmljYWwueD09PXRoaXMuY2Fub25pY2FsLng+PmUmJnQuY2Fub25pY2FsLnk9PT10aGlzLmNhbm9uaWNhbC55Pj5lfSxudS5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYodGhpcy5vdmVyc2NhbGVkWj49dClyZXR1cm5bbmV3IG51KHRoaXMub3ZlcnNjYWxlZForMSx0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpXTt2YXIgZT10aGlzLmNhbm9uaWNhbC56KzEscj0yKnRoaXMuY2Fub25pY2FsLngsbj0yKnRoaXMuY2Fub25pY2FsLnk7cmV0dXJuW25ldyBudShlLHRoaXMud3JhcCxlLHIsbiksbmV3IG51KGUsdGhpcy53cmFwLGUscisxLG4pLG5ldyBudShlLHRoaXMud3JhcCxlLHIsbisxKSxuZXcgbnUoZSx0aGlzLndyYXAsZSxyKzEsbisxKV19LG51LnByb3RvdHlwZS5pc0xlc3NUaGFuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndyYXA8dC53cmFwfHwhKHRoaXMud3JhcD50LndyYXApJiYodGhpcy5vdmVyc2NhbGVkWjx0Lm92ZXJzY2FsZWRafHwhKHRoaXMub3ZlcnNjYWxlZFo+dC5vdmVyc2NhbGVkWikmJih0aGlzLmNhbm9uaWNhbC54PHQuY2Fub25pY2FsLnh8fCEodGhpcy5jYW5vbmljYWwueD50LmNhbm9uaWNhbC54KSYmdGhpcy5jYW5vbmljYWwueTx0LmNhbm9uaWNhbC55KSl9LG51LnByb3RvdHlwZS53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBudSh0aGlzLm92ZXJzY2FsZWRaLDAsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpfSxudS5wcm90b3R5cGUudW53cmFwVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBudSh0aGlzLm92ZXJzY2FsZWRaLHQsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpfSxudS5wcm90b3R5cGUub3ZlcnNjYWxlRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucG93KDIsdGhpcy5vdmVyc2NhbGVkWi10aGlzLmNhbm9uaWNhbC56KX0sbnUucHJvdG90eXBlLnRvVW53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBydSh0aGlzLndyYXAsdGhpcy5jYW5vbmljYWwpfSxudS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdmVyc2NhbGVkWisiLyIrdGhpcy5jYW5vbmljYWwueCsiLyIrdGhpcy5jYW5vbmljYWwueX0sbnUucHJvdG90eXBlLmdldFRpbGVQb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYW5vbmljYWwuZ2V0VGlsZVBvaW50KG5ldyB0dSh0LngtdGhpcy53cmFwLHQueSkpfSxObigiQ2Fub25pY2FsVGlsZUlEIixldSksTm4oIk92ZXJzY2FsZWRUaWxlSUQiLG51LHtvbWl0OlsicG9zTWF0cml4Il19KTt2YXIgYXU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMudWlkPXQsZS5oZWlnaHQhPT1lLndpZHRoKXRocm93IG5ldyBSYW5nZUVycm9yKCJERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmUiKTtpZihyJiYibWFwYm94IiE9PXImJiJ0ZXJyYXJpdW0iIT09cilyZXR1cm4gXygnIicrcisnIiBpcyBub3QgYSB2YWxpZCBlbmNvZGluZyB0eXBlLiBWYWxpZCB0eXBlcyBpbmNsdWRlICJtYXBib3giIGFuZCAidGVycmFyaXVtIi4nKTt0aGlzLnN0cmlkZT1lLmhlaWdodDt2YXIgbj10aGlzLmRpbT1lLmhlaWdodC0yO3RoaXMuZGF0YT1uZXcgVWludDMyQXJyYXkoZS5kYXRhLmJ1ZmZlciksdGhpcy5lbmNvZGluZz1yfHwibWFwYm94Ijtmb3IodmFyIGk9MDtpPG47aSsrKXRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsaSldPXRoaXMuZGF0YVt0aGlzLl9pZHgoMCxpKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChuLGkpXT10aGlzLmRhdGFbdGhpcy5faWR4KG4tMSxpKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChpLC0xKV09dGhpcy5kYXRhW3RoaXMuX2lkeChpLDApXSx0aGlzLmRhdGFbdGhpcy5faWR4KGksbildPXRoaXMuZGF0YVt0aGlzLl9pZHgoaSxuLTEpXTt0aGlzLmRhdGFbdGhpcy5faWR4KC0xLC0xKV09dGhpcy5kYXRhW3RoaXMuX2lkeCgwLDApXSx0aGlzLmRhdGFbdGhpcy5faWR4KG4sLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KG4tMSwwKV0sdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSxuKV09dGhpcy5kYXRhW3RoaXMuX2lkeCgwLG4tMSldLHRoaXMuZGF0YVt0aGlzLl9pZHgobixuKV09dGhpcy5kYXRhW3RoaXMuX2lkeChuLTEsbi0xKV19O2F1LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKSxuPTQqdGhpcy5faWR4KHQsZSk7cmV0dXJuKCJ0ZXJyYXJpdW0iPT09dGhpcy5lbmNvZGluZz90aGlzLl91bnBhY2tUZXJyYXJpdW06dGhpcy5fdW5wYWNrTWFwYm94KShyW25dLHJbbisxXSxyW24rMl0pfSxhdS5wcm90b3R5cGUuZ2V0VW5wYWNrVmVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuInRlcnJhcml1bSI9PT10aGlzLmVuY29kaW5nP1syNTYsMSwxLzI1NiwzMjc2OF06WzY1NTMuNiwyNS42LC4xLDFlNF19LGF1LnByb3RvdHlwZS5faWR4PWZ1bmN0aW9uKHQsZSl7aWYodDwtMXx8dD49dGhpcy5kaW0rMXx8ZTwtMXx8ZT49dGhpcy5kaW0rMSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgREVNIGRhdGEiKTtyZXR1cm4oZSsxKSp0aGlzLnN0cmlkZSsodCsxKX0sYXUucHJvdG90eXBlLl91bnBhY2tNYXBib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybigyNTYqdCoyNTYrMjU2KmUrcikvMTAtMWU0fSxhdS5wcm90b3R5cGUuX3VucGFja1RlcnJhcml1bT1mdW5jdGlvbih0LGUscil7cmV0dXJuIDI1Nip0K2Urci8yNTYtMzI3Njh9LGF1LnByb3RvdHlwZS5nZXRQaXhlbHM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVvKHt3aWR0aDp0aGlzLnN0cmlkZSxoZWlnaHQ6dGhpcy5zdHJpZGV9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpKX0sYXUucHJvdG90eXBlLmJhY2tmaWxsQm9yZGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmRpbSE9PXQuZGltKXRocm93IG5ldyBFcnJvcigiZGVtIGRpbWVuc2lvbiBtaXNtYXRjaCIpO3ZhciBuPWUqdGhpcy5kaW0saT1lKnRoaXMuZGltK3RoaXMuZGltLGE9cip0aGlzLmRpbSxvPXIqdGhpcy5kaW0rdGhpcy5kaW07c3dpdGNoKGUpe2Nhc2UtMTpuPWktMTticmVhaztjYXNlIDE6aT1uKzF9c3dpdGNoKHIpe2Nhc2UtMTphPW8tMTticmVhaztjYXNlIDE6bz1hKzF9Zm9yKHZhciBzPS1lKnRoaXMuZGltLGw9LXIqdGhpcy5kaW0sYz1hO2M8bztjKyspZm9yKHZhciB1PW47dTxpO3UrKyl0aGlzLmRhdGFbdGhpcy5faWR4KHUsYyldPXQuZGF0YVt0aGlzLl9pZHgodStzLGMrbCldfSxObigiREVNRGF0YSIsYXUpO3ZhciBvdT1mdW5jdGlvbih0KXt0aGlzLl9zdHJpbmdUb051bWJlcj17fSx0aGlzLl9udW1iZXJUb1N0cmluZz1bXTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTt0aGlzLl9zdHJpbmdUb051bWJlcltyXT1lLHRoaXMuX251bWJlclRvU3RyaW5nW2VdPXJ9fTtvdS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdHJpbmdUb051bWJlclt0XX0sb3UucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbnVtYmVyVG9TdHJpbmdbdF19O3ZhciBzdT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudHlwZT0iRmVhdHVyZSIsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU9dCx0Ll96PWUsdC5feD1yLHQuX3k9bix0aGlzLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzLHRoaXMuaWQ9aX0sbHU9e2dlb21ldHJ5Ontjb25maWd1cmFibGU6ITB9fTtsdS5nZW9tZXRyeS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fZ2VvbWV0cnkmJih0aGlzLl9nZW9tZXRyeT10aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS50b0dlb0pTT04odGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3gsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3ksdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUuX3opLmdlb21ldHJ5KSx0aGlzLl9nZW9tZXRyeX0sbHUuZ2VvbWV0cnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX2dlb21ldHJ5PXR9LHN1LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgdD17Z2VvbWV0cnk6dGhpcy5nZW9tZXRyeX07Zm9yKHZhciBlIGluIHRoaXMpIl9nZW9tZXRyeSIhPT1lJiYiX3ZlY3RvclRpbGVGZWF0dXJlIiE9PWUmJih0W2VdPXRoaXNbZV0pO3JldHVybiB0fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdS5wcm90b3R5cGUsbHUpO3ZhciBjdT1mdW5jdGlvbigpe3RoaXMuc3RhdGU9e30sdGhpcy5zdGF0ZUNoYW5nZXM9e30sdGhpcy5kZWxldGVkU3RhdGVzPXt9fTtjdS5wcm90b3R5cGUudXBkYXRlU3RhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVN0cmluZyhlKTtpZih0aGlzLnN0YXRlQ2hhbmdlc1t0XT10aGlzLnN0YXRlQ2hhbmdlc1t0XXx8e30sdGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl09dGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl18fHt9LHUodGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl0sciksbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XSlmb3IodmFyIGkgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdPXt9LHRoaXMuc3RhdGVbdF0paSE9PW4mJih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1baV09bnVsbCk7ZWxzZSBpZih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF0mJm51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl0pZm9yKHZhciBhIGluIHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXT17fSx0aGlzLnN0YXRlW3RdW25dKXJbYV18fCh0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl1bYV09bnVsbCk7ZWxzZSBmb3IodmFyIG8gaW4gcil7dGhpcy5kZWxldGVkU3RhdGVzW3RdJiZ0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl0mJm51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl1bb10mJmRlbGV0ZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl1bb119fSxjdS5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pKXt2YXIgbj1TdHJpbmcoZSk7aWYodGhpcy5kZWxldGVkU3RhdGVzW3RdPXRoaXMuZGVsZXRlZFN0YXRlc1t0XXx8e30sciYmdm9pZCAwIT09ZSludWxsIT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiYodGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXXx8e30sdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW3JdPW51bGwpO2Vsc2UgaWYodm9pZCAwIT09ZSl7aWYodGhpcy5zdGF0ZUNoYW5nZXNbdF0mJnRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dKWZvcihyIGluIHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXT17fSx0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXSl0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl1bcl09bnVsbDtlbHNlIHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXT1udWxsfWVsc2UgdGhpcy5kZWxldGVkU3RhdGVzW3RdPW51bGx9fSxjdS5wcm90b3R5cGUuZ2V0U3RhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1TdHJpbmcoZSksbj10aGlzLnN0YXRlW3RdfHx7fSxpPXRoaXMuc3RhdGVDaGFuZ2VzW3RdfHx7fSxhPXUoe30sbltyXSxpW3JdKTtpZihudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKXJldHVybnt9O2lmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XSl7dmFyIG89dGhpcy5kZWxldGVkU3RhdGVzW3RdW2VdO2lmKG51bGw9PT1vKXJldHVybnt9O2Zvcih2YXIgcyBpbiBvKWRlbGV0ZSBhW3NdfXJldHVybiBhfSxjdS5wcm90b3R5cGUuaW5pdGlhbGl6ZVRpbGVTdGF0ZT1mdW5jdGlvbih0LGUpe3Quc2V0RmVhdHVyZVN0YXRlKHRoaXMuc3RhdGUsZSl9LGN1LnByb3RvdHlwZS5jb2FsZXNjZUNoYW5nZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4gdGhpcy5zdGF0ZUNoYW5nZXMpe3RoaXMuc3RhdGVbbl09dGhpcy5zdGF0ZVtuXXx8e307dmFyIGk9e307Zm9yKHZhciBhIGluIHRoaXMuc3RhdGVDaGFuZ2VzW25dKXRoaXMuc3RhdGVbbl1bYV18fCh0aGlzLnN0YXRlW25dW2FdPXt9KSx1KHRoaXMuc3RhdGVbbl1bYV0sdGhpcy5zdGF0ZUNoYW5nZXNbbl1bYV0pLGlbYV09dGhpcy5zdGF0ZVtuXVthXTtyW25dPWl9Zm9yKHZhciBvIGluIHRoaXMuZGVsZXRlZFN0YXRlcyl7dGhpcy5zdGF0ZVtvXT10aGlzLnN0YXRlW29dfHx7fTt2YXIgcz17fTtpZihudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW29dKWZvcih2YXIgbCBpbiB0aGlzLnN0YXRlW29dKXNbbF09e30sdGhpcy5zdGF0ZVtvXVtsXT17fTtlbHNlIGZvcih2YXIgYyBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbb10pe2lmKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbb11bY10pdGhpcy5zdGF0ZVtvXVtjXT17fTtlbHNlIGZvcih2YXIgZj0wLGg9T2JqZWN0LmtleXModGhpcy5kZWxldGVkU3RhdGVzW29dW2NdKTtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07ZGVsZXRlIHRoaXMuc3RhdGVbb11bY11bcF19c1tjXT10aGlzLnN0YXRlW29dW2NdfXJbb109cltvXXx8e30sdShyW29dLHMpfWlmKHRoaXMuc3RhdGVDaGFuZ2VzPXt9LHRoaXMuZGVsZXRlZFN0YXRlcz17fSwwIT09T2JqZWN0LmtleXMocikubGVuZ3RoKWZvcih2YXIgZCBpbiB0KXt0W2RdLnNldEZlYXR1cmVTdGF0ZShyLGUpfX07dmFyIHV1PWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQ9dCx0aGlzLng9dC5jYW5vbmljYWwueCx0aGlzLnk9dC5jYW5vbmljYWwueSx0aGlzLno9dC5jYW5vbmljYWwueix0aGlzLmdyaWQ9bmV3IHpuKDgxOTIsMTYsMCksdGhpcy5ncmlkM0Q9bmV3IHpuKDgxOTIsMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1uZXcgZmEsdGhpcy5wcm9tb3RlSWQ9ZX07ZnVuY3Rpb24gZnUodCxlLHIsbixpKXtyZXR1cm4gdih0LChmdW5jdGlvbih0LGEpe3ZhciBvPWUgaW5zdGFuY2VvZiBfaT9lLmdldChhKTpudWxsO3JldHVybiBvJiZvLmV2YWx1YXRlP28uZXZhbHVhdGUocixuLGkpOm99KSl9ZnVuY3Rpb24gaHUodCl7Zm9yKHZhciBlPTEvMCxyPTEvMCxuPS0xLzAsaT0tMS8wLGE9MCxvPXQ7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2U9TWF0aC5taW4oZSxzLngpLHI9TWF0aC5taW4ocixzLnkpLG49TWF0aC5tYXgobixzLngpLGk9TWF0aC5tYXgoaSxzLnkpfXJldHVybnttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9fWZ1bmN0aW9uIHB1KHQsZSl7cmV0dXJuIGUtdH11dS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmZlYXR1cmVJbmRleEFycmF5Lmxlbmd0aDt0aGlzLmZlYXR1cmVJbmRleEFycmF5LmVtcGxhY2VCYWNrKHIsbixpKTtmb3IodmFyIHM9YT90aGlzLmdyaWQzRDp0aGlzLmdyaWQsbD0wO2w8ZS5sZW5ndGg7bCsrKXtmb3IodmFyIGM9ZVtsXSx1PVsxLzAsMS8wLC0xLzAsLTEvMF0sZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgaD1jW2ZdO3VbMF09TWF0aC5taW4odVswXSxoLngpLHVbMV09TWF0aC5taW4odVsxXSxoLnkpLHVbMl09TWF0aC5tYXgodVsyXSxoLngpLHVbM109TWF0aC5tYXgodVszXSxoLnkpfXVbMF08ODE5MiYmdVsxXTw4MTkyJiZ1WzJdPj0wJiZ1WzNdPj0wJiZzLmluc2VydChvLHVbMF0sdVsxXSx1WzJdLHVbM10pfX0sdXUucHJvdG90eXBlLmxvYWRWVExheWVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ0TGF5ZXJzfHwodGhpcy52dExheWVycz1uZXcgTHMuVmVjdG9yVGlsZShuZXcgYWwodGhpcy5yYXdUaWxlRGF0YSkpLmxheWVycyx0aGlzLnNvdXJjZUxheWVyQ29kZXI9bmV3IG91KHRoaXMudnRMYXllcnM/T2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpOlsiX2dlb2pzb25UaWxlTGF5ZXIiXSkpLHRoaXMudnRMYXllcnN9LHV1LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10aGlzO3RoaXMubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBvPXQucGFyYW1zfHx7fSxzPTgxOTIvdC50aWxlU2l6ZS90LnNjYWxlLGw9c24oby5maWx0ZXIpLGM9dC5xdWVyeUdlb21ldHJ5LHU9dC5xdWVyeVBhZGRpbmcqcyxmPWh1KGMpLGg9dGhpcy5ncmlkLnF1ZXJ5KGYubWluWC11LGYubWluWS11LGYubWF4WCt1LGYubWF4WSt1KSxwPWh1KHQuY2FtZXJhUXVlcnlHZW9tZXRyeSksZD10aGlzLmdyaWQzRC5xdWVyeShwLm1pblgtdSxwLm1pblktdSxwLm1heFgrdSxwLm1heFkrdSwoZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4sYSl7Zm9yKHZhciBvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtpZihlPD1sLngmJnI8PWwueSYmbj49bC54JiZhPj1sLnkpcmV0dXJuITB9dmFyIGM9W25ldyBpKGUsciksbmV3IGkoZSxhKSxuZXcgaShuLGEpLG5ldyBpKG4scildO2lmKHQubGVuZ3RoPjIpZm9yKHZhciB1PTAsZj1jO3U8Zi5sZW5ndGg7dSs9MSl7aWYoaW8odCxmW3VdKSlyZXR1cm4hMH1mb3IodmFyIGg9MDtoPHQubGVuZ3RoLTE7aCsrKXtpZihhbyh0W2hdLHRbaCsxXSxjKSlyZXR1cm4hMH1yZXR1cm4hMX0odC5jYW1lcmFRdWVyeUdlb21ldHJ5LGUtdSxyLXUsbit1LGErdSl9KSksbT0wLGc9ZDttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV07aC5wdXNoKHYpfWguc29ydChwdSk7Zm9yKHZhciB5LHg9e30sYj1mdW5jdGlvbihpKXt2YXIgdT1oW2ldO2lmKHUhPT15KXt5PXU7dmFyIGY9YS5mZWF0dXJlSW5kZXhBcnJheS5nZXQodSkscD1udWxsO2EubG9hZE1hdGNoaW5nRmVhdHVyZSh4LGYuYnVja2V0SW5kZXgsZi5zb3VyY2VMYXllckluZGV4LGYuZmVhdHVyZUluZGV4LGwsby5sYXllcnMsby5hdmFpbGFibGVJbWFnZXMsZSxyLG4sKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcHx8KHA9WWEoZSkpLHIucXVlcnlJbnRlcnNlY3RzRmVhdHVyZShjLGUsbixwLGEueix0LnRyYW5zZm9ybSxzLHQucGl4ZWxQb3NNYXRyaXgpfSkpfX0sXz0wO188aC5sZW5ndGg7XysrKWIoXyk7cmV0dXJuIHh9LHV1LnByb3RvdHlwZS5sb2FkTWF0Y2hpbmdGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9dGhpcy5idWNrZXRMYXllcklEc1tlXTtpZighYXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLmluZGV4T2YodFtyXSk+PTApcmV0dXJuITA7cmV0dXJuITF9KGEsZikpe3ZhciBoPXRoaXMuc291cmNlTGF5ZXJDb2Rlci5kZWNvZGUocikscD10aGlzLnZ0TGF5ZXJzW2hdLmZlYXR1cmUobik7aWYoaS5maWx0ZXIobmV3IHBpKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSxwKSlmb3IodmFyIGQ9dGhpcy5nZXRJZChwLGgpLG09MDttPGYubGVuZ3RoO20rKyl7dmFyIGc9ZlttXTtpZighKGEmJmEuaW5kZXhPZihnKTwwKSl7dmFyIHY9c1tnXTtpZih2KXt2YXIgeT17fTt2b2lkIDAhPT1kJiZjJiYoeT1jLmdldFN0YXRlKHYuc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIsZCkpO3ZhciB4PWxbZ107eC5wYWludD1mdSh4LnBhaW50LHYucGFpbnQscCx5LG8pLHgubGF5b3V0PWZ1KHgubGF5b3V0LHYubGF5b3V0LHAseSxvKTt2YXIgYj0hdXx8dShwLHYseSk7aWYoYil7dmFyIF89bmV3IHN1KHAsdGhpcy56LHRoaXMueCx0aGlzLnksZCk7Xy5sYXllcj14O3ZhciB3PXRbZ107dm9pZCAwPT09dyYmKHc9dFtnXT1bXSksdy5wdXNoKHtmZWF0dXJlSW5kZXg6bixmZWF0dXJlOl8saW50ZXJzZWN0aW9uWjpifSl9fX19fX0sdXUucHJvdG90eXBlLmxvb2t1cFN5bWJvbEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9e307dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIGM9c24oaSksdT0wLGY9dDt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07dGhpcy5sb2FkTWF0Y2hpbmdGZWF0dXJlKGwscixuLGgsYyxhLG8scyxlKX1yZXR1cm4gbH0sdXUucHJvdG90eXBlLmhhc0xheWVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5idWNrZXRMYXllcklEcztlPHIubGVuZ3RoO2UrPTEpZm9yKHZhciBuPTAsaT1yW2VdO248aS5sZW5ndGg7bis9MSl7aWYodD09PWlbbl0pcmV0dXJuITB9cmV0dXJuITF9LHV1LnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbih0LGUpe3ZhciByPXQuaWQ7aWYodGhpcy5wcm9tb3RlSWQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgdGhpcy5wcm9tb3RlSWQ/dGhpcy5wcm9tb3RlSWQ6dGhpcy5wcm9tb3RlSWRbZV07ImJvb2xlYW4iPT10eXBlb2Yocj10LnByb3BlcnRpZXNbbl0pJiYocj1OdW1iZXIocikpfXJldHVybiByfSxObigiRmVhdHVyZUluZGV4Iix1dSx7b21pdDpbInJhd1RpbGVEYXRhIiwic291cmNlTGF5ZXJDb2RlciJdfSk7dmFyIGR1PWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQ9dCx0aGlzLnVpZD1oKCksdGhpcy51c2VzPTAsdGhpcy50aWxlU2l6ZT1lLHRoaXMuYnVja2V0cz17fSx0aGlzLmV4cGlyYXRpb25UaW1lPW51bGwsdGhpcy5xdWVyeVBhZGRpbmc9MCx0aGlzLmhhc1N5bWJvbEJ1Y2tldHM9ITEsdGhpcy5oYXNSVExUZXh0PSExLHRoaXMuZGVwZW5kZW5jaWVzPXt9LHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuc3RhdGU9ImxvYWRpbmcifTtkdS5wcm90b3R5cGUucmVnaXN0ZXJGYWRlRHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCt0aGlzLnRpbWVBZGRlZDtlPFIubm93KCl8fHRoaXMuZmFkZUVuZFRpbWUmJmU8dGhpcy5mYWRlRW5kVGltZXx8KHRoaXMuZmFkZUVuZFRpbWU9ZSl9LGR1LnByb3RvdHlwZS53YXNSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4iZXJyb3JlZCI9PT10aGlzLnN0YXRlfHwibG9hZGVkIj09PXRoaXMuc3RhdGV8fCJyZWxvYWRpbmciPT09dGhpcy5zdGF0ZX0sZHUucHJvdG90eXBlLmxvYWRWZWN0b3JEYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmhhc0RhdGEoKSYmdGhpcy51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5zdGF0ZT0ibG9hZGVkIix0KXtmb3IodmFyIG4gaW4gdC5mZWF0dXJlSW5kZXgmJih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD10LmZlYXR1cmVJbmRleCx0LnJhd1RpbGVEYXRhPyh0aGlzLmxhdGVzdFJhd1RpbGVEYXRhPXQucmF3VGlsZURhdGEsdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dC5yYXdUaWxlRGF0YSk6dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhPXRoaXMubGF0ZXN0UmF3VGlsZURhdGEpKSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PXQuY29sbGlzaW9uQm94QXJyYXksdGhpcy5idWNrZXRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYoIWUpcmV0dXJuIHI7Zm9yKHZhciBuPWZ1bmN0aW9uKCl7dmFyIHQ9YVtpXSxuPXQubGF5ZXJJZHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5nZXRMYXllcih0KX0pKS5maWx0ZXIoQm9vbGVhbik7aWYoMCE9PW4ubGVuZ3RoKXt0LmxheWVycz1uLHQuc3RhdGVEZXBlbmRlbnRMYXllcklkcyYmKHQuc3RhdGVEZXBlbmRlbnRMYXllcnM9dC5zdGF0ZURlcGVuZGVudExheWVySWRzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PXR9KSlbMF19KSkpO2Zvcih2YXIgbz0wLHM9bjtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107cltsLmlkXT10fX19LGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKW4oKTtyZXR1cm4gcn0odC5idWNrZXRzLGUuc3R5bGUpLHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMSx0aGlzLmJ1Y2tldHMpe3ZhciBpPXRoaXMuYnVja2V0c1tuXTtpZihpIGluc3RhbmNlb2YgTWMpe2lmKHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMCwhcilicmVhaztpLmp1c3RSZWxvYWRlZD0hMH19aWYodGhpcy5oYXNSVExUZXh0PSExLHRoaXMuaGFzU3ltYm9sQnVja2V0cylmb3IodmFyIGEgaW4gdGhpcy5idWNrZXRzKXt2YXIgbz10aGlzLmJ1Y2tldHNbYV07aWYobyBpbnN0YW5jZW9mIE1jJiZvLmhhc1JUTFRleHQpe3RoaXMuaGFzUlRMVGV4dD0hMCxoaS5pc0xvYWRpbmcoKXx8aGkuaXNMb2FkZWQoKXx8ImRlZmVycmVkIiE9PXVpKCl8fGZpKCk7YnJlYWt9fWZvcih2YXIgcyBpbiB0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuYnVja2V0cyl7dmFyIGw9dGhpcy5idWNrZXRzW3NdO3RoaXMucXVlcnlQYWRkaW5nPU1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLGUuc3R5bGUuZ2V0TGF5ZXIocykucXVlcnlSYWRpdXMobCkpfXQuaW1hZ2VBdGxhcyYmKHRoaXMuaW1hZ2VBdGxhcz10LmltYWdlQXRsYXMpLHQuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzSW1hZ2U9dC5nbHlwaEF0bGFzSW1hZ2UpfWVsc2UgdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgbmF9LGR1LnByb3RvdHlwZS51bmxvYWRWZWN0b3JEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYnVja2V0cyl0aGlzLmJ1Y2tldHNbdF0uZGVzdHJveSgpO3RoaXMuYnVja2V0cz17fSx0aGlzLmltYWdlQXRsYXNUZXh0dXJlJiZ0aGlzLmltYWdlQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmltYWdlQXRsYXMmJih0aGlzLmltYWdlQXRsYXM9bnVsbCksdGhpcy5nbHlwaEF0bGFzVGV4dHVyZSYmdGhpcy5nbHlwaEF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LGR1LnByb3RvdHlwZS5nZXRCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0c1t0LmlkXX0sZHUucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5idWNrZXRzKXt2YXIgcj10aGlzLmJ1Y2tldHNbZV07ci51cGxvYWRQZW5kaW5nKCkmJnIudXBsb2FkKHQpfXZhciBuPXQuZ2w7dGhpcy5pbWFnZUF0bGFzJiYhdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkJiYodGhpcy5pbWFnZUF0bGFzVGV4dHVyZT1uZXcgVmModCx0aGlzLmltYWdlQXRsYXMuaW1hZ2Usbi5SR0JBKSx0aGlzLmltYWdlQXRsYXMudXBsb2FkZWQ9ITApLHRoaXMuZ2x5cGhBdGxhc0ltYWdlJiYodGhpcy5nbHlwaEF0bGFzVGV4dHVyZT1uZXcgVmModCx0aGlzLmdseXBoQXRsYXNJbWFnZSxuLkFMUEhBKSx0aGlzLmdseXBoQXRsYXNJbWFnZT1udWxsKX0sZHUucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24odCl7dGhpcy5pbWFnZUF0bGFzJiZ0aGlzLmltYWdlQXRsYXMucGF0Y2hVcGRhdGVkSW1hZ2VzKHQsdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSl9LGR1LnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7cmV0dXJuIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT90aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5xdWVyeSh7cXVlcnlHZW9tZXRyeTpuLGNhbWVyYVF1ZXJ5R2VvbWV0cnk6aSxzY2FsZTphLHRpbGVTaXplOnRoaXMudGlsZVNpemUscGl4ZWxQb3NNYXRyaXg6Yyx0cmFuc2Zvcm06cyxwYXJhbXM6byxxdWVyeVBhZGRpbmc6dGhpcy5xdWVyeVBhZGRpbmcqbH0sdCxlLHIpOnt9fSxkdS5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4O2lmKHImJnIucmF3VGlsZURhdGEpe3ZhciBuPXIubG9hZFZUTGF5ZXJzKCksaT1lP2Uuc291cmNlTGF5ZXI6IiIsYT1uLl9nZW9qc29uVGlsZUxheWVyfHxuW2ldO2lmKGEpZm9yKHZhciBvPXNuKGUmJmUuZmlsdGVyKSxzPXRoaXMudGlsZUlELmNhbm9uaWNhbCxsPXMueixjPXMueCx1PXMueSxmPXt6OmwseDpjLHk6dX0saD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgcD1hLmZlYXR1cmUoaCk7aWYoby5maWx0ZXIobmV3IHBpKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSxwKSl7dmFyIGQ9ci5nZXRJZChwLGkpLG09bmV3IHN1KHAsbCxjLHUsZCk7bS50aWxlPWYsdC5wdXNoKG0pfX19fSxkdS5wcm90b3R5cGUuaGFzRGF0YT1mdW5jdGlvbigpe3JldHVybiJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfHwiZXhwaXJlZCI9PT10aGlzLnN0YXRlfSxkdS5wcm90b3R5cGUucGF0dGVybnNMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWFnZUF0bGFzJiYhIU9iamVjdC5rZXlzKHRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zKS5sZW5ndGh9LGR1LnByb3RvdHlwZS5zZXRFeHBpcnlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZXhwaXJhdGlvblRpbWU7aWYodC5jYWNoZUNvbnRyb2wpe3ZhciByPUEodC5jYWNoZUNvbnRyb2wpO3JbIm1heC1hZ2UiXSYmKHRoaXMuZXhwaXJhdGlvblRpbWU9RGF0ZS5ub3coKSsxZTMqclsibWF4LWFnZSJdKX1lbHNlIHQuZXhwaXJlcyYmKHRoaXMuZXhwaXJhdGlvblRpbWU9bmV3IERhdGUodC5leHBpcmVzKS5nZXRUaW1lKCkpO2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpe3ZhciBuPURhdGUubm93KCksaT0hMTtpZih0aGlzLmV4cGlyYXRpb25UaW1lPm4paT0hMTtlbHNlIGlmKGUpaWYodGhpcy5leHBpcmF0aW9uVGltZTxlKWk9ITA7ZWxzZXt2YXIgYT10aGlzLmV4cGlyYXRpb25UaW1lLWU7YT90aGlzLmV4cGlyYXRpb25UaW1lPW4rTWF0aC5tYXgoYSwzZTQpOmk9ITB9ZWxzZSBpPSEwO2k/KHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCsrLHRoaXMuc3RhdGU9ImV4cGlyZWQiKTp0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ9MH19LGR1LnByb3RvdHlwZS5nZXRFeHBpcnlUaW1lb3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5leHBpcmF0aW9uVGltZSlyZXR1cm4gdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PzFlMyooMTw8TWF0aC5taW4odGhpcy5leHBpcmVkUmVxdWVzdENvdW50LTEsMzEpKTpNYXRoLm1pbih0aGlzLmV4cGlyYXRpb25UaW1lLShuZXcgRGF0ZSkuZ2V0VGltZSgpLE1hdGgucG93KDIsMzEpLTEpfSxkdS5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgmJnRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhJiYwIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXt2YXIgcj10aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG4gaW4gdGhpcy5idWNrZXRzKWlmKGUuc3R5bGUuaGFzTGF5ZXIobikpe3ZhciBpPXRoaXMuYnVja2V0c1tuXSxhPWkubGF5ZXJzWzBdLnNvdXJjZUxheWVyfHwiX2dlb2pzb25UaWxlTGF5ZXIiLG89clthXSxzPXRbYV07aWYobyYmcyYmMCE9PU9iamVjdC5rZXlzKHMpLmxlbmd0aCl7aS51cGRhdGUocyxvLHRoaXMuaW1hZ2VBdGxhcyYmdGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnN8fHt9KTt2YXIgbD1lJiZlLnN0eWxlJiZlLnN0eWxlLmdldExheWVyKG4pO2wmJih0aGlzLnF1ZXJ5UGFkZGluZz1NYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZyxsLnF1ZXJ5UmFkaXVzKGkpKSl9fX19LGR1LnByb3RvdHlwZS5ob2xkaW5nRm9yRmFkZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnN5bWJvbEZhZGVIb2xkVW50aWx9LGR1LnByb3RvdHlwZS5zeW1ib2xGYWRlRmluaXNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsfHx0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWw8Ui5ub3coKX0sZHUucHJvdG90eXBlLmNsZWFyRmFkZUhvbGQ9ZnVuY3Rpb24oKXt0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWw9dm9pZCAwfSxkdS5wcm90b3R5cGUuc2V0SG9sZER1cmF0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbD1SLm5vdygpK3R9LGR1LnByb3RvdHlwZS5zZXREZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3JbaVtuXV09ITB9dGhpcy5kZXBlbmRlbmNpZXNbdF09cn0sZHUucHJvdG90eXBlLmhhc0RlcGVuZGVuY3k9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9dGhpcy5kZXBlbmRlbmNpZXNbaV07aWYoYSlmb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXtpZihhW3Nbb11dKXJldHVybiEwfX1yZXR1cm4hMX07dmFyIG11PXNlbGYucGVyZm9ybWFuY2UsZ3U9ZnVuY3Rpb24odCl7dGhpcy5fbWFya3M9e3N0YXJ0Olt0LnVybCwic3RhcnQiXS5qb2luKCIjIiksZW5kOlt0LnVybCwiZW5kIl0uam9pbigiIyIpLG1lYXN1cmU6dC51cmwudG9TdHJpbmcoKX0sbXUubWFyayh0aGlzLl9tYXJrcy5zdGFydCl9O2d1LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXttdS5tYXJrKHRoaXMuX21hcmtzLmVuZCk7dmFyIHQ9bXUuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKTtyZXR1cm4gMD09PXQubGVuZ3RoJiYobXUubWVhc3VyZSh0aGlzLl9tYXJrcy5tZWFzdXJlLHRoaXMuX21hcmtzLnN0YXJ0LHRoaXMuX21hcmtzLmVuZCksdD1tdS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpLG11LmNsZWFyTWFya3ModGhpcy5fbWFya3Muc3RhcnQpLG11LmNsZWFyTWFya3ModGhpcy5fbWFya3MuZW5kKSxtdS5jbGVhck1lYXN1cmVzKHRoaXMuX21hcmtzLm1lYXN1cmUpKSx0fSx0LkFjdG9yPXFjLHQuQWxwaGFJbWFnZT1Tbyx0LkNhbm9uaWNhbFRpbGVJRD1ldSx0LkNvbGxpc2lvbkJveEFycmF5PW5hLHQuQ29sb3I9dGUsdC5ERU1EYXRhPWF1LHQuRGF0YUNvbnN0YW50UHJvcGVydHk9d2ksdC5EaWN0aW9uYXJ5Q29kZXI9b3UsdC5FWFRFTlQ9ODE5Mix0LkVycm9yRXZlbnQ9U3QsdC5FdmFsdWF0aW9uUGFyYW1ldGVycz1waSx0LkV2ZW50PU10LHQuRXZlbnRlZD1FdCx0LkZlYXR1cmVJbmRleD11dSx0LkZpbGxCdWNrZXQ9Z3MsdC5GaWxsRXh0cnVzaW9uQnVja2V0PU9zLHQuSW1hZ2VBdGxhcz1MbCx0LkltYWdlUG9zaXRpb249U2wsdC5MaW5lQnVja2V0PXFzLHQuTG5nTGF0PVdjLHQuTG5nTGF0Qm91bmRzPVljLHQuTWVyY2F0b3JDb29yZGluYXRlPXR1LHQuT05FX0VNPTI0LHQuT3ZlcnNjYWxlZFRpbGVJRD1udSx0LlBvaW50PWksdC5Qb2ludCQxPWksdC5Qcm9wZXJ0aWVzPVNpLHQuUHJvdG9idWY9YWwsdC5SR0JBSW1hZ2U9RW8sdC5SZXF1ZXN0TWFuYWdlcj1ILHQuUmVxdWVzdFBlcmZvcm1hbmNlPWd1LHQuUmVzb3VyY2VUeXBlPWR0LHQuU2VnbWVudFZlY3Rvcj1wYSx0LlNvdXJjZUZlYXR1cmVTdGF0ZT1jdSx0LlN0cnVjdEFycmF5TGF5b3V0MXVpMj0kaSx0LlN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTY9cWksdC5TdHJ1Y3RBcnJheUxheW91dDJpND16aSx0LlN0cnVjdEFycmF5TGF5b3V0M3VpNj1ZaSx0LlN0cnVjdEFycmF5TGF5b3V0NGk4PURpLHQuU3ltYm9sQnVja2V0PU1jLHQuVGV4dHVyZT1WYyx0LlRpbGU9ZHUsdC5UcmFuc2l0aW9uYWJsZT1naSx0LlVuaWZvcm0xZj1TYSx0LlVuaWZvcm0xaT1NYSx0LlVuaWZvcm0yZj1FYSx0LlVuaWZvcm0zZj1MYSx0LlVuaWZvcm00Zj1DYSx0LlVuaWZvcm1Db2xvcj1QYSx0LlVuaWZvcm1NYXRyaXg0Zj1PYSx0LlVud3JhcHBlZFRpbGVJRD1ydSx0LlZhbGlkYXRpb25FcnJvcj1DdCx0LldyaXRpbmdNb2RlPUNsLHQuWm9vbUhpc3Rvcnk9R24sdC5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0fSx0LmFkZER5bmFtaWNBdHRyaWJ1dGVzPXdjLHQuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXtlKHQsKGZ1bmN0aW9uKHQsZSl7dCYmKGE9dCksaVtvXT1lLDA9PS0tbiYmcihhLGkpfSkpfSkpfSx0LmJlemllcj1vLHQuYmluZEFsbD1tLHQuYnJvd3Nlcj1SLHQuY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQ9ZnVuY3Rpb24odCl7KytodD5vdCYmKHQuZ2V0QWN0b3IoKS5zZW5kKCJlbmZvcmNlQ2FjaGVTaXplTGltaXQiLGF0KSxodD0wKX0sdC5jbGFtcD1sLHQuY2xlYXJUaWxlQ2FjaGU9ZnVuY3Rpb24odCl7dmFyIGU9c2VsZi5jYWNoZXMuZGVsZXRlKCJtYXBib3gtdGlsZXMiKTt0JiZlLmNhdGNoKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pKX0sdC5jbGlwTGluZT1lYyx0LmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBmbygxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfSx0LmNsb25lJDE9eCx0LmNsb25lJDI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGZvKDMpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlfSx0LmNvbGxpc2lvbkNpcmNsZUxheW91dD10bCx0LmNvbmZpZz1GLHQuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGZvKDE2KTtyZXR1cm4gZm8hPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCksdFswXT0xLHRbNV09MSx0WzEwXT0xLHRbMTVdPTEsdH0sdC5jcmVhdGUkMT1mdW5jdGlvbigpe3ZhciB0PW5ldyBmbyg5KTtyZXR1cm4gZm8hPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNV09MCx0WzZdPTAsdFs3XT0wKSx0WzBdPTEsdFs0XT0xLHRbOF09MSx0fSx0LmNyZWF0ZSQyPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGZvKDQpO3JldHVybiBmbyE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCksdFswXT0xLHRbM109MSx0fSx0LmNyZWF0ZUNvbW1vbmpzTW9kdWxlPWUsdC5jcmVhdGVFeHByZXNzaW9uPVdyLHQuY3JlYXRlTGF5b3V0PUlpLHQuY3JlYXRlU3R5bGVMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4iY3VzdG9tIj09PXQudHlwZT9uZXcgRGModCk6bmV3IFJjW3QudHlwZV0odCl9LHQuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH0sdC5kZWVwRXF1YWw9ZnVuY3Rpb24gdChlLHIpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHIpfHxlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0KGVbbl0scltuXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9PXIpe2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4hMTtpZihPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoIXQoZVtpXSxyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gZT09PXJ9LHQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfSx0LmRvdCQxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX0sdC5lYXNlPXMsdC5lbWl0VmFsaWRhdGlvbkVycm9ycz1Pbix0LmVuZHNXaXRoPWcsdC5lbmZvcmNlQ2FjaGVTaXplTGltaXQ9ZnVuY3Rpb24odCl7c3QoKSxRJiZRLnRoZW4oKGZ1bmN0aW9uKGUpe2Uua2V5cygpLnRoZW4oKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGgtdDtuKyspZS5kZWxldGUocltuXSl9KSl9KSl9LHQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZT1ZbCx0LmV2YWx1YXRlU2l6ZUZvclpvb209V2wsdC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0PWRjLHQuZXZlbnRlZD1jaSx0LmV4dGVuZD11LHQuZmVhdHVyZUZpbHRlcj1zbix0LmZpbHRlck9iamVjdD15LHQuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LHQuZ2V0QW5jaG9yQWxpZ25tZW50PVVsLHQuZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbj1tYyx0LmdldEFycmF5QnVmZmVyPXh0LHQuZ2V0SW1hZ2U9VHQsdC5nZXRKU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHl0KHUodCx7dHlwZToianNvbiJ9KSxlKX0sdC5nZXRSVExUZXh0UGx1Z2luU3RhdHVzPXVpLHQuZ2V0UmVmZXJyZXI9Z3QsdC5nZXRWaWRlbz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7aS5tdXRlZD0hMCxpLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGkpfTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtyPXRbYV0sbj12b2lkIDAsKG49c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihpLmNyb3NzT3JpZ2luPSJBbm9ueW1vdXMiKSxvLnNyYz10W2FdLGkuYXBwZW5kQ2hpbGQobyl9cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe319fSx0LmlkZW50aXR5PWhvLHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxtPWVbMTNdLGc9ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqbS1mKmQsQT11KmctaCpkLE09dSp2LXAqZCxTPWYqZy1oKm0sRT1mKnYtcCptLEw9aCp2LXAqZyxDPXkqTC14KkUrYipTK18qTS13KkErVCprO3JldHVybiBDPyhDPTEvQyx0WzBdPShzKkwtbCpFK2MqUykqQyx0WzFdPShpKkUtbipMLWEqUykqQyx0WzJdPShtKlQtZyp3K3YqXykqQyx0WzNdPShoKnctZipULXAqXykqQyx0WzRdPShsKk0tbypMLWMqQSkqQyx0WzVdPShyKkwtaSpNK2EqQSkqQyx0WzZdPShnKmItZCpULXYqeCkqQyx0WzddPSh1KlQtaCpiK3AqeCkqQyx0WzhdPShvKkUtcypNK2MqaykqQyx0WzldPShuKk0tcipFLWEqaykqQyx0WzEwXT0oZCp3LW0qYit2KnkpKkMsdFsxMV09KGYqYi11KnctcCp5KSpDLHRbMTJdPShzKkEtbypTLWwqaykqQyx0WzEzXT0ocipTLW4qQStpKmspKkMsdFsxNF09KG0qeC1kKl8tZyp5KSpDLHRbMTVdPSh1Kl8tZip4K2gqeSkqQyx0KTpudWxsfSx0LmlzQ2hhcj1Zbix0LmlzTWFwYm94VVJMPXEsdC5rZXlzRGlmZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Zvcih2YXIgbiBpbiB0KW4gaW4gZXx8ci5wdXNoKG4pO3JldHVybiByfSx0Lm1ha2VSZXF1ZXN0PXl0LHQubWFwT2JqZWN0PXYsdC5tZXJjYXRvclhmcm9tTG5nPUpjLHQubWVyY2F0b3JZZnJvbUxhdD1LYyx0Lm1lcmNhdG9yWmZyb21BbHRpdHVkZT1RYyx0Lm11bD1tbyx0Lm11bHRpcGx5PXBvLHQubXZ0PUxzLHQubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7cmV0dXJuIGE+MCYmKGE9MS9NYXRoLnNxcnQoYSkpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphLHR9LHQubnVtYmVyPXFlLHQub2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPXB0LHQub3J0aG89ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fSx0LnBhcnNlR2x5cGhQQkY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhbCh0KS5yZWFkRmllbGRzKFRsLFtdKX0sdC5wYmY9YWwsdC5wZXJmb3JtU3ltYm9sTGF5b3V0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3QuY3JlYXRlQXJyYXlzKCk7dmFyIHM9NTEyKnQub3ZlcnNjYWxpbmc7dC50aWxlUGl4ZWxSYXRpbz04MTkyL3MsdC5jb21wYXJlVGV4dD17fSx0Lmljb25zTmVlZExpbmVhcj0hMTt2YXIgbD10LmxheWVyc1swXS5sYXlvdXQsYz10LmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcyx1PXt9O2lmKCJjb21wb3NpdGUiPT09dC50ZXh0U2l6ZURhdGEua2luZCl7dmFyIGY9dC50ZXh0U2l6ZURhdGEsaD1mLm1pblpvb20scD1mLm1heFpvb207dS5jb21wb3NpdGVUZXh0U2l6ZXM9W2NbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKGgpLG8pLGNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKHApLG8pXX1pZigiY29tcG9zaXRlIj09PXQuaWNvblNpemVEYXRhLmtpbmQpe3ZhciBkPXQuaWNvblNpemVEYXRhLG09ZC5taW5ab29tLGc9ZC5tYXhab29tO3UuY29tcG9zaXRlSWNvblNpemVzPVtjWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBwaShtKSxvKSxjWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBwaShnKSxvKV19dS5sYXlvdXRUZXh0U2l6ZT1jWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBwaSh0Lnpvb20rMSksbyksdS5sYXlvdXRJY29uU2l6ZT1jWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBwaSh0Lnpvb20rMSksbyksdS50ZXh0TWF4U2l6ZT1jWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBwaSgxOCkpO2Zvcih2YXIgdj0yNCpsLmdldCgidGV4dC1saW5lLWhlaWdodCIpLHk9Im1hcCI9PT1sLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PWwuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikseD1sLmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxiPWwuZ2V0KCJ0ZXh0LXNpemUiKSx3PWZ1bmN0aW9uKCl7dmFyIGE9a1tUXSxzPWwuZ2V0KCJ0ZXh0LWZvbnQiKS5ldmFsdWF0ZShhLHt9LG8pLmpvaW4oIiwiKSxjPWIuZXZhbHVhdGUoYSx7fSxvKSxmPXUubGF5b3V0VGV4dFNpemUuZXZhbHVhdGUoYSx7fSxvKSxoPXUubGF5b3V0SWNvblNpemUuZXZhbHVhdGUoYSx7fSxvKSxwPXtob3Jpem9udGFsOnt9LHZlcnRpY2FsOnZvaWQgMH0sZD1hLnRleHQsbT1bMCwwXTtpZihkKXt2YXIgZz1kLnRvU3RyaW5nKCksdz0yNCpsLmdldCgidGV4dC1sZXR0ZXItc3BhY2luZyIpLmV2YWx1YXRlKGEse30sbyksQT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXtpZighWG4ocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMX1yZXR1cm4hMH0oZyk/dzowLE09bC5nZXQoInRleHQtYW5jaG9yIikuZXZhbHVhdGUoYSx7fSxvKSxTPWwuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpO2lmKCFTKXt2YXIgRT1sLmdldCgidGV4dC1yYWRpYWwtb2Zmc2V0IikuZXZhbHVhdGUoYSx7fSxvKTttPUU/ZGMoTSxbMjQqRSxwY10pOmwuZ2V0KCJ0ZXh0LW9mZnNldCIpLmV2YWx1YXRlKGEse30sbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMjQqdH0pKX12YXIgTD15PyJjZW50ZXIiOmwuZ2V0KCJ0ZXh0LWp1c3RpZnkiKS5ldmFsdWF0ZShhLHt9LG8pLEM9bC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxQPSJwb2ludCI9PT1DPzI0KmwuZ2V0KCJ0ZXh0LW1heC13aWR0aCIpLmV2YWx1YXRlKGEse30sbyk6MCxJPWZ1bmN0aW9uKCl7dC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZXbihnKSYmKHAudmVydGljYWw9T2woZCxlLHIsaSxzLFAsdixNLCJsZWZ0IixBLG0sQ2wudmVydGljYWwsITAsQyxmLGMpKX07aWYoIXkmJlMpe2Zvcih2YXIgTz0iYXV0byI9PT1MP1MubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbWModCl9KSk6W0xdLHo9ITEsRD0wO0Q8Ty5sZW5ndGg7RCsrKXt2YXIgUj1PW0RdO2lmKCFwLmhvcml6b250YWxbUl0paWYoeilwLmhvcml6b250YWxbUl09cC5ob3Jpem9udGFsWzBdO2Vsc2V7dmFyIEY9T2woZCxlLHIsaSxzLFAsdiwiY2VudGVyIixSLEEsbSxDbC5ob3Jpem9udGFsLCExLEMsZixjKTtGJiYocC5ob3Jpem9udGFsW1JdPUYsej0xPT09Ri5wb3NpdGlvbmVkTGluZXMubGVuZ3RoKX19SSgpfWVsc2V7ImF1dG8iPT09TCYmKEw9bWMoTSkpO3ZhciBCPU9sKGQsZSxyLGkscyxQLHYsTSxMLEEsbSxDbC5ob3Jpem9udGFsLCExLEMsZixjKTtCJiYocC5ob3Jpem9udGFsW0xdPUIpLEkoKSxXbihnKSYmeSYmeCYmKHAudmVydGljYWw9T2woZCxlLHIsaSxzLFAsdixNLEwsQSxtLENsLnZlcnRpY2FsLCExLEMsZixjKSl9fXZhciBOPXZvaWQgMCxqPSExO2lmKGEuaWNvbiYmYS5pY29uLm5hbWUpe3ZhciBVPW5bYS5pY29uLm5hbWVdO1UmJihOPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1VbChyKSxpPW4uaG9yaXpvbnRhbEFsaWduLGE9bi52ZXJ0aWNhbEFsaWduLG89ZVswXSxzPWVbMV0sbD1vLXQuZGlzcGxheVNpemVbMF0qaSxjPWwrdC5kaXNwbGF5U2l6ZVswXSx1PXMtdC5kaXNwbGF5U2l6ZVsxXSphO3JldHVybntpbWFnZTp0LHRvcDp1LGJvdHRvbTp1K3QuZGlzcGxheVNpemVbMV0sbGVmdDpsLHJpZ2h0OmN9fShpW2EuaWNvbi5uYW1lXSxsLmdldCgiaWNvbi1vZmZzZXQiKS5ldmFsdWF0ZShhLHt9LG8pLGwuZ2V0KCJpY29uLWFuY2hvciIpLmV2YWx1YXRlKGEse30sbykpLGo9VS5zZGYsdm9pZCAwPT09dC5zZGZJY29ucz90LnNkZkljb25zPVUuc2RmOnQuc2RmSWNvbnMhPT1VLnNkZiYmXygiU3R5bGUgc2hlZXQgd2FybmluZzogQ2Fubm90IG1peCBTREYgYW5kIG5vbi1TREYgaWNvbnMgaW4gb25lIGJ1ZmZlciIpLChVLnBpeGVsUmF0aW8hPT10LnBpeGVsUmF0aW98fDAhPT1sLmdldCgiaWNvbi1yb3RhdGUiKS5jb25zdGFudE9yKDEpKSYmKHQuaWNvbnNOZWVkTGluZWFyPSEwKSl9dmFyIFY9dmMocC5ob3Jpem9udGFsKXx8cC52ZXJ0aWNhbDt0Lmljb25zSW5UZXh0PSEhViYmVi5pY29uc0luVGV4dCwoVnx8TikmJmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGY9YS50ZXh0TWF4U2l6ZS5ldmFsdWF0ZShlLHt9KTt2b2lkIDA9PT1mJiYoZj1vKTt2YXIgaCxwPXQubGF5ZXJzWzBdLmxheW91dCxkPXAuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKGUse30sdSksbT12YyhyLmhvcml6b250YWwpLGc9by8yNCx2PXQudGlsZVBpeGVsUmF0aW8qZyx5PXQudGlsZVBpeGVsUmF0aW8qZi8yNCx4PXQudGlsZVBpeGVsUmF0aW8qcyxiPXQudGlsZVBpeGVsUmF0aW8qcC5nZXQoInN5bWJvbC1zcGFjaW5nIiksdz1wLmdldCgidGV4dC1wYWRkaW5nIikqdC50aWxlUGl4ZWxSYXRpbyxUPXAuZ2V0KCJpY29uLXBhZGRpbmciKSp0LnRpbGVQaXhlbFJhdGlvLGs9cC5nZXQoInRleHQtbWF4LWFuZ2xlIikvMTgwKk1hdGguUEksQT0ibWFwIj09PXAuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYicG9pbnQiIT09cC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxNPSJtYXAiPT09cC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLFM9cC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxFPWIvMixMPXAuZ2V0KCJpY29uLXRleHQtZml0Iik7biYmIm5vbmUiIT09TCYmKHQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmci52ZXJ0aWNhbCYmKGg9SGwobixyLnZlcnRpY2FsLEwscC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpLGQsZykpLG0mJihuPUhsKG4sbSxMLHAuZ2V0KCJpY29uLXRleHQtZml0LXBhZGRpbmciKSxkLGcpKSk7dmFyIEM9ZnVuY3Rpb24ocyxmKXtmLng8MHx8Zi54Pj04MTkyfHxmLnk8MHx8Zi55Pj04MTkyfHxmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYix3LFQsayxBKXt2YXIgTSxTLEUsTCxDLFA9dC5hZGRUb0xpbmVWZXJ0ZXhBcnJheShlLHIpLEk9MCxPPTAsej0wLEQ9MCxSPS0xLEY9LTEsQj17fSxOPXlhKCIiKSxqPTAsVT0wO3ZvaWQgMD09PXMuX3VuZXZhbHVhdGVkTGF5b3V0LmdldFZhbHVlKCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKT8oTT1zLmxheW91dC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUoYix7fSxrKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSkpLGo9TVswXSxVPU1bMV0pOihqPTI0KnMubGF5b3V0LmdldCgidGV4dC1yYWRpYWwtb2Zmc2V0IikuZXZhbHVhdGUoYix7fSxrKSxVPXBjKTtpZih0LmFsbG93VmVydGljYWxQbGFjZW1lbnQmJm4udmVydGljYWwpe3ZhciBWPXMubGF5b3V0LmdldCgidGV4dC1yb3RhdGUiKS5ldmFsdWF0ZShiLHt9LGspKzkwLEg9bi52ZXJ0aWNhbDtMPW5ldyBzYyhsLGUsYyx1LGYsSCxoLHAsZCxWKSxvJiYoQz1uZXcgc2MobCxlLGMsdSxmLG8sZyx2LGQsVikpfWlmKGkpe3ZhciBxPXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGUiKS5ldmFsdWF0ZShiLHt9KSxHPSJub25lIiE9PXMubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpLFk9cmMoaSxxLFQsRyksVz1vP3JjKG8scSxULEcpOnZvaWQgMDtFPW5ldyBzYyhsLGUsYyx1LGYsaSxnLHYsITEscSksST00KlkubGVuZ3RoO3ZhciBYPXQuaWNvblNpemVEYXRhLFo9bnVsbDsic291cmNlIj09PVgua2luZD8oWj1bMTI4KnMubGF5b3V0LmdldCgiaWNvbi1zaXplIikuZXZhbHVhdGUoYix7fSldKVswXT4zMjY0MCYmXyh0LmxheWVySWRzWzBdKyc6IFZhbHVlIGZvciAiaWNvbi1zaXplIiBpcyA+PSAyNTUuIFJlZHVjZSB5b3VyICJpY29uLXNpemUiLicpOiJjb21wb3NpdGUiPT09WC5raW5kJiYoKFo9WzEyOCp3LmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZShiLHt9LGspLDEyOCp3LmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZShiLHt9LGspXSlbMF0+MzI2NDB8fFpbMV0+MzI2NDApJiZfKHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJpY29uLXNpemUiIGlzID49IDI1NS4gUmVkdWNlIHlvdXIgImljb24tc2l6ZSIuJyksdC5hZGRTeW1ib2xzKHQuaWNvbixZLFoseCx5LGIsITEsZSxQLmxpbmVTdGFydEluZGV4LFAubGluZUxlbmd0aCwtMSxrKSxSPXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGgtMSxXJiYoTz00KlcubGVuZ3RoLHQuYWRkU3ltYm9scyh0Lmljb24sVyxaLHgseSxiLENsLnZlcnRpY2FsLGUsUC5saW5lU3RhcnRJbmRleCxQLmxpbmVMZW5ndGgsLTEsayksRj10Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEpfWZvcih2YXIgSiBpbiBuLmhvcml6b250YWwpe3ZhciBLPW4uaG9yaXpvbnRhbFtKXTtpZighUyl7Tj15YShLLnRleHQpO3ZhciBRPXMubGF5b3V0LmdldCgidGV4dC1yb3RhdGUiKS5ldmFsdWF0ZShiLHt9LGspO1M9bmV3IHNjKGwsZSxjLHUsZixLLGgscCxkLFEpfXZhciAkPTE9PT1LLnBvc2l0aW9uZWRMaW5lcy5sZW5ndGg7aWYoeis9Z2ModCxlLEssYSxzLGQsYixtLFAsbi52ZXJ0aWNhbD9DbC5ob3Jpem9udGFsOkNsLmhvcml6b250YWxPbmx5LCQ/T2JqZWN0LmtleXMobi5ob3Jpem9udGFsKTpbSl0sQixSLHcsayksJClicmVha31uLnZlcnRpY2FsJiYoRCs9Z2ModCxlLG4udmVydGljYWwsYSxzLGQsYixtLFAsQ2wudmVydGljYWwsWyJ2ZXJ0aWNhbCJdLEIsRix3LGspKTt2YXIgdHQ9Uz9TLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsZXQ9Uz9TLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLHJ0PUw/TC5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLG50PUw/TC5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxpdD1FP0UuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxhdD1FP0UuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsb3Q9Qz9DLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsc3Q9Qz9DLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGx0PS0xLGN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQuY2lyY2xlRGlhbWV0ZXI/TWF0aC5tYXgodC5jaXJjbGVEaWFtZXRlcixlKTplfTtsdD1jdChTLGx0KSxsdD1jdChMLGx0KSxsdD1jdChFLGx0KTt2YXIgdXQ9KGx0PWN0KEMsbHQpKT4tMT8xOjA7dXQmJihsdCo9QS8yNCk7dC5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aD49TWMuTUFYX0dMWVBIUyYmXygiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3Iik7dm9pZCAwIT09Yi5zb3J0S2V5JiZ0LmFkZFRvU29ydEtleVJhbmdlcyh0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGgsYi5zb3J0S2V5KTt0LnN5bWJvbEluc3RhbmNlcy5lbXBsYWNlQmFjayhlLngsZS55LEIucmlnaHQ+PTA/Qi5yaWdodDotMSxCLmNlbnRlcj49MD9CLmNlbnRlcjotMSxCLmxlZnQ+PTA/Qi5sZWZ0Oi0xLEIudmVydGljYWx8fC0xLFIsRixOLHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGMseixELEksTyx1dCwwLGgsaixVLGx0KX0odCxmLHMscixuLGksaCx0LmxheWVyc1swXSx0LmNvbGxpc2lvbkJveEFycmF5LGUuaW5kZXgsZS5zb3VyY2VMYXllckluZGV4LHQuaW5kZXgsdix3LEEsbCx4LFQsTSxkLGUsYSxjLHUsbyl9O2lmKCJsaW5lIj09PVMpZm9yKHZhciBQPTAsST1lYyhlLmdlb21ldHJ5LDAsMCw4MTkyLDgxOTIpO1A8SS5sZW5ndGg7UCs9MSlmb3IodmFyIE89SVtQXSx6PXRjKE8sYixrLHIudmVydGljYWx8fG0sbiwyNCx5LHQub3ZlcnNjYWxpbmcsODE5MiksRD0wLFI9ejtEPFIubGVuZ3RoO0QrPTEpe3ZhciBGPVJbRF0sQj1tO0ImJnljKHQsQi50ZXh0LEUsRil8fEMoTyxGKX1lbHNlIGlmKCJsaW5lLWNlbnRlciI9PT1TKWZvcih2YXIgTj0wLGo9ZS5nZW9tZXRyeTtOPGoubGVuZ3RoO04rPTEpe3ZhciBVPWpbTl07aWYoVS5sZW5ndGg+MSl7dmFyIFY9JGwoVSxrLHIudmVydGljYWx8fG0sbiwyNCx5KTtWJiZDKFUsVil9fWVsc2UgaWYoIlBvbHlnb24iPT09ZS50eXBlKWZvcih2YXIgSD0wLHE9aHMoZS5nZW9tZXRyeSwwKTtIPHEubGVuZ3RoO0grPTEpe3ZhciBHPXFbSF0sWT11YyhHLDE2KTtDKEdbMF0sbmV3IHFsKFkueCxZLnksMCkpfWVsc2UgaWYoIkxpbmVTdHJpbmciPT09ZS50eXBlKWZvcih2YXIgVz0wLFg9ZS5nZW9tZXRyeTtXPFgubGVuZ3RoO1crPTEpe3ZhciBaPVhbV107QyhaLG5ldyBxbChaWzBdLngsWlswXS55LDApKX1lbHNlIGlmKCJQb2ludCI9PT1lLnR5cGUpZm9yKHZhciBKPTAsSz1lLmdlb21ldHJ5O0o8Sy5sZW5ndGg7Sis9MSlmb3IodmFyIFE9S1tKXSwkPTAsdHQ9UTskPHR0Lmxlbmd0aDskKz0xKXt2YXIgZXQ9dHRbJF07QyhbZXRdLG5ldyBxbChldC54LGV0LnksMCkpfX0odCxhLHAsTixuLHUsZixoLG0saixvKX0sVD0wLGs9dC5mZWF0dXJlcztUPGsubGVuZ3RoO1QrPTEpdygpO2EmJnQuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKX0sdC5wZXJzcGVjdGl2ZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG89MS9NYXRoLnRhbihlLzIpO3JldHVybiB0WzBdPW8vcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1vLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNV09MCxudWxsIT1pJiZpIT09MS8wPyhhPTEvKG4taSksdFsxMF09KGkrbikqYSx0WzE0XT0yKmkqbiphKToodFsxMF09LTEsdFsxNF09LTIqbiksdH0sdC5waWNrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpIGluIHQmJihyW2ldPXRbaV0pfXJldHVybiByfSx0LnBsdWdpbj1oaSx0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbj1aYSx0LnBvc3RNYXBMb2FkRXZlbnQ9aXQsdC5wb3N0VHVybnN0aWxlRXZlbnQ9cnQsdC5wb3RwYWNrPU1sLHQucmVmUHJvcGVydGllcz1bInR5cGUiLCJzb3VyY2UiLCJzb3VyY2UtbGF5ZXIiLCJtaW56b29tIiwibWF4em9vbSIsImZpbHRlciIsImxheW91dCJdLHQucmVnaXN0ZXI9Tm4sdC5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0KHtwbHVnaW5TdGF0dXM6YWkscGx1Z2luVVJMOm9pfSksY2kub24oInBsdWdpblN0YXRlQ2hhbmdlIix0KSx0fSx0LnJvdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPU1hdGguc2luKHIpLGw9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bipsK2Eqcyx0WzFdPWkqbCtvKnMsdFsyXT1uKi1zK2EqbCx0WzNdPWkqLXMrbypsLHR9LHQucm90YXRlWD1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07cmV0dXJuIGUhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzRdPWEqaStjKm4sdFs1XT1vKmkrdSpuLHRbNl09cyppK2Yqbix0WzddPWwqaStoKm4sdFs4XT1jKmktYSpuLHRbOV09dSppLW8qbix0WzEwXT1mKmktcypuLHRbMTFdPWgqaS1sKm4sdH0sdC5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGY9ZVs2XSxoPWVbN107cmV0dXJuIGUhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStmKm4sdFszXT1sKmkraCpuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1mKmktcypuLHRbN109aCppLWwqbix0fSx0LnNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fSx0LnNjYWxlJDE9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fSx0LnNjYWxlJDI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0fSx0LnNldENhY2hlTGltaXRzPWZ1bmN0aW9uKHQsZSl7YXQ9dCxvdD1lfSx0LnNldFJUTFRleHRQbHVnaW49ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPSExKSxhaT09PXRpfHxhaT09PWVpfHxhaT09PXJpKXRocm93IG5ldyBFcnJvcigic2V0UlRMVGV4dFBsdWdpbiBjYW5ub3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiIpO29pPVIucmVzb2x2ZVVSTCh0KSxhaT10aSxpaT1lLGxpKCkscnx8ZmkoKX0sdC5zcGhlcmljYWxUb0NhcnRlc2lhbj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIHIrPTkwLHIqPU1hdGguUEkvMTgwLG4qPU1hdGguUEkvMTgwLHt4OmUqTWF0aC5jb3MocikqTWF0aC5zaW4obikseTplKk1hdGguc2luKHIpKk1hdGguc2luKG4pLHo6ZSpNYXRoLmNvcyhuKX19LHQuc3FyTGVuPWJvLHQuc3R5bGVTcGVjPUx0LHQuc3ViPXlvLHQuc3ltYm9sU2l6ZT1YbCx0LnRyYW5zZm9ybU1hdDM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH0sdC50cmFuc2Zvcm1NYXQ0PXhvLHQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbT1yWzBdLGc9clsxXSx2PXJbMl07cmV0dXJuIGU9PT10Pyh0WzEyXT1lWzBdKm0rZVs0XSpnK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKm0rZVs1XSpnK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKm0rZVs2XSpnK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSptK2VbN10qZytlWzExXSp2K2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09Zix0WzldPWgsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qbStzKmcrZip2K2VbMTJdLHRbMTNdPWkqbStsKmcraCp2K2VbMTNdLHRbMTRdPWEqbStjKmcrcCp2K2VbMTRdLHRbMTVdPW8qbSt1KmcrZCp2K2VbMTVdKSx0fSx0LnRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQ9c2ksdC51bmlxdWVJZD1oLHQudmFsaWRhdGVDdXN0b21TdHlsZUxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPVtdLHI9dC5pZDtyZXR1cm4gdm9pZCAwPT09ciYmZS5wdXNoKHttZXNzYWdlOiJsYXllcnMuIityKyc6IG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgImlkIid9KSx2b2lkIDA9PT10LnJlbmRlciYmZS5wdXNoKHttZXNzYWdlOiJsYXllcnMuIityKyc6IG1pc3NpbmcgcmVxdWlyZWQgbWV0aG9kICJyZW5kZXIiJ30pLHQucmVuZGVyaW5nTW9kZSYmIjJkIiE9PXQucmVuZGVyaW5nTW9kZSYmIjNkIiE9PXQucmVuZGVyaW5nTW9kZSYmZS5wdXNoKHttZXNzYWdlOiJsYXllcnMuIityKyc6IHByb3BlcnR5ICJyZW5kZXJpbmdNb2RlIiBtdXN0IGJlIGVpdGhlciAiMmQiIG9yICIzZCInfSksZX0sdC52YWxpZGF0ZUxpZ2h0PUNuLHQudmFsaWRhdGVTdHlsZT1Mbix0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQudmVjdG9yVGlsZT1Mcyx0LnZlcnNpb249IjEuMTAuMSIsdC53YXJuT25jZT1fLHQud2VicFN1cHBvcnRlZD1CLHQud2luZG93PXNlbGYsdC53cmFwPWN9KSksbigwLChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciByPXR5cGVvZiB0O2lmKCJudW1iZXIiPT09cnx8ImJvb2xlYW4iPT09cnx8InN0cmluZyI9PT1yfHxudWxsPT10KXJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49IlsiLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXtuKz1lKGFbaV0pKyIsIn1yZXR1cm4gbisiXSJ9Zm9yKHZhciBvPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxzPSJ7IixsPTA7bDxvLmxlbmd0aDtsKyspcys9SlNPTi5zdHJpbmdpZnkob1tsXSkrIjoiK2UodFtvW2xdXSkrIiwiO3JldHVybiBzKyJ9In1mdW5jdGlvbiByKHIpe2Zvcih2YXIgbj0iIixpPTAsYT10LnJlZlByb3BlcnRpZXM7aTxhLmxlbmd0aDtpKz0xKXtuKz0iLyIrZShyW2FbaV1dKX1yZXR1cm4gbn12YXIgbj1mdW5jdGlvbih0KXt0aGlzLmtleUNhY2hlPXt9LHQmJnRoaXMucmVwbGFjZSh0KX07bi5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbih0KXt0aGlzLl9sYXllckNvbmZpZ3M9e30sdGhpcy5fbGF5ZXJzPXt9LHRoaXMudXBkYXRlKHQsW10pfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk9dGhpcyxhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTt0aGlzLl9sYXllckNvbmZpZ3Nbcy5pZF09czt2YXIgbD10aGlzLl9sYXllcnNbcy5pZF09dC5jcmVhdGVTdHlsZUxheWVyKHMpO2wuX2ZlYXR1cmVGaWx0ZXI9dC5mZWF0dXJlRmlsdGVyKGwuZmlsdGVyKSx0aGlzLmtleUNhY2hlW3MuaWRdJiZkZWxldGUgdGhpcy5rZXlDYWNoZVtzLmlkXX1mb3IodmFyIGM9MCx1PW47Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdO2RlbGV0ZSB0aGlzLmtleUNhY2hlW2ZdLGRlbGV0ZSB0aGlzLl9sYXllckNvbmZpZ3NbZl0sZGVsZXRlIHRoaXMuX2xheWVyc1tmXX10aGlzLmZhbWlsaWVzQnlTb3VyY2U9e307Zm9yKHZhciBoPTAscD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj17fSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPWUmJmVbdFtpXS5pZF18fHIodFtpXSk7ZSYmKGVbdFtpXS5pZF09YSk7dmFyIG89blthXTtvfHwobz1uW2FdPVtdKSxvLnB1c2godFtpXSl9dmFyIHM9W107Zm9yKHZhciBsIGluIG4pcy5wdXNoKG5bbF0pO3JldHVybiBzfSh0LnZhbHVlcyh0aGlzLl9sYXllckNvbmZpZ3MpLHRoaXMua2V5Q2FjaGUpO2g8cC5sZW5ndGg7aCs9MSl7dmFyIGQ9cFtoXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9sYXllcnNbdC5pZF19KSksbT1kWzBdO2lmKCJub25lIiE9PW0udmlzaWJpbGl0eSl7dmFyIGc9bS5zb3VyY2V8fCIiLHY9dGhpcy5mYW1pbGllc0J5U291cmNlW2ddO3Z8fCh2PXRoaXMuZmFtaWxpZXNCeVNvdXJjZVtnXT17fSk7dmFyIHk9bS5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIix4PXZbeV07eHx8KHg9dlt5XT1bXSkseC5wdXNoKGQpfX19O3ZhciBpPWZ1bmN0aW9uKGUpe3ZhciByPXt9LG49W107Zm9yKHZhciBpIGluIGUpe3ZhciBhPWVbaV0sbz1yW2ldPXt9O2Zvcih2YXIgcyBpbiBhKXt2YXIgbD1hWytzXTtpZihsJiYwIT09bC5iaXRtYXAud2lkdGgmJjAhPT1sLmJpdG1hcC5oZWlnaHQpe3ZhciBjPXt4OjAseTowLHc6bC5iaXRtYXAud2lkdGgrMixoOmwuYml0bWFwLmhlaWdodCsyfTtuLnB1c2goYyksb1tzXT17cmVjdDpjLG1ldHJpY3M6bC5tZXRyaWNzfX19fXZhciB1PXQucG90cGFjayhuKSxmPXUudyxoPXUuaCxwPW5ldyB0LkFscGhhSW1hZ2Uoe3dpZHRoOmZ8fDEsaGVpZ2h0Omh8fDF9KTtmb3IodmFyIGQgaW4gZSl7dmFyIG09ZVtkXTtmb3IodmFyIGcgaW4gbSl7dmFyIHY9bVsrZ107aWYodiYmMCE9PXYuYml0bWFwLndpZHRoJiYwIT09di5iaXRtYXAuaGVpZ2h0KXt2YXIgeT1yW2RdW2ddLnJlY3Q7dC5BbHBoYUltYWdlLmNvcHkodi5iaXRtYXAscCx7eDowLHk6MH0se3g6eS54KzEseTp5LnkrMX0sdi5iaXRtYXApfX19dGhpcy5pbWFnZT1wLHRoaXMucG9zaXRpb25zPXJ9O3QucmVnaXN0ZXIoIkdseXBoQXRsYXMiLGkpO3ZhciBhPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM9ISFlLnJldHVybkRlcGVuZGVuY2llcyx0aGlzLnByb21vdGVJZD1lLnByb21vdGVJZH07ZnVuY3Rpb24gbyhlLHIsbil7Zm9yKHZhciBpPW5ldyB0LkV2YWx1YXRpb25QYXJhbWV0ZXJzKHIpLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXtvW2FdLnJlY2FsY3VsYXRlKGksbil9fWZ1bmN0aW9uIHMoZSxyKXt2YXIgbj10LmdldEFycmF5QnVmZmVyKGUucmVxdWVzdCwoZnVuY3Rpb24oZSxuLGksYSl7ZT9yKGUpOm4mJnIobnVsbCx7dmVjdG9yVGlsZTpuZXcgdC52ZWN0b3JUaWxlLlZlY3RvclRpbGUobmV3IHQucGJmKG4pKSxyYXdEYXRhOm4sY2FjaGVDb250cm9sOmksZXhwaXJlczphfSl9KSk7cmV0dXJuIGZ1bmN0aW9uKCl7bi5jYW5jZWwoKSxyKCl9fWEucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUscixuLGEscyl7dmFyIGw9dGhpczt0aGlzLnN0YXR1cz0icGFyc2luZyIsdGhpcy5kYXRhPWUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgdC5Db2xsaXNpb25Cb3hBcnJheTt2YXIgYz1uZXcgdC5EaWN0aW9uYXJ5Q29kZXIoT2JqZWN0LmtleXMoZS5sYXllcnMpLnNvcnQoKSksdT1uZXcgdC5GZWF0dXJlSW5kZXgodGhpcy50aWxlSUQsdGhpcy5wcm9tb3RlSWQpO3UuYnVja2V0TGF5ZXJJRHM9W107dmFyIGYsaCxwLGQsbT17fSxnPXtmZWF0dXJlSW5kZXg6dSxpY29uRGVwZW5kZW5jaWVzOnt9LHBhdHRlcm5EZXBlbmRlbmNpZXM6e30sZ2x5cGhEZXBlbmRlbmNpZXM6e30sYXZhaWxhYmxlSW1hZ2VzOm59LHY9ci5mYW1pbGllc0J5U291cmNlW3RoaXMuc291cmNlXTtmb3IodmFyIHkgaW4gdil7dmFyIHg9ZS5sYXllcnNbeV07aWYoeCl7MT09PXgudmVyc2lvbiYmdC53YXJuT25jZSgnVmVjdG9yIHRpbGUgc291cmNlICInK3RoaXMuc291cmNlKyciIGxheWVyICInK3krJyIgZG9lcyBub3QgdXNlIHZlY3RvciB0aWxlIHNwZWMgdjIgYW5kIHRoZXJlZm9yZSBtYXkgaGF2ZSBzb21lIHJlbmRlcmluZyBlcnJvcnMuJyk7Zm9yKHZhciBiPWMuZW5jb2RlKHkpLF89W10sdz0wO3c8eC5sZW5ndGg7dysrKXt2YXIgVD14LmZlYXR1cmUodyksaz11LmdldElkKFQseSk7Xy5wdXNoKHtmZWF0dXJlOlQsaWQ6ayxpbmRleDp3LHNvdXJjZUxheWVySW5kZXg6Yn0pfWZvcih2YXIgQT0wLE09dlt5XTtBPE0ubGVuZ3RoO0ErPTEpe3ZhciBTPU1bQV0sRT1TWzBdO2lmKCEoRS5taW56b29tJiZ0aGlzLnpvb208TWF0aC5mbG9vcihFLm1pbnpvb20pKSlpZighKEUubWF4em9vbSYmdGhpcy56b29tPj1FLm1heHpvb20pKWlmKCJub25lIiE9PUUudmlzaWJpbGl0eSlvKFMsdGhpcy56b29tLG4pLChtW0UuaWRdPUUuY3JlYXRlQnVja2V0KHtpbmRleDp1LmJ1Y2tldExheWVySURzLmxlbmd0aCxsYXllcnM6Uyx6b29tOnRoaXMuem9vbSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpbyxvdmVyc2NhbGluZzp0aGlzLm92ZXJzY2FsaW5nLGNvbGxpc2lvbkJveEFycmF5OnRoaXMuY29sbGlzaW9uQm94QXJyYXksc291cmNlTGF5ZXJJbmRleDpiLHNvdXJjZUlEOnRoaXMuc291cmNlfSkpLnBvcHVsYXRlKF8sZyx0aGlzLnRpbGVJRC5jYW5vbmljYWwpLHUuYnVja2V0TGF5ZXJJRHMucHVzaChTLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkpfX19dmFyIEw9dC5tYXBPYmplY3QoZy5nbHlwaERlcGVuZGVuY2llcywoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChOdW1iZXIpfSkpO09iamVjdC5rZXlzKEwpLmxlbmd0aD9hLnNlbmQoImdldEdseXBocyIse3VpZDp0aGlzLnVpZCxzdGFja3M6TH0sKGZ1bmN0aW9uKHQsZSl7Znx8KGY9dCxoPWUsSS5jYWxsKGwpKX0pKTpoPXt9O3ZhciBDPU9iamVjdC5rZXlzKGcuaWNvbkRlcGVuZGVuY2llcyk7Qy5sZW5ndGg/YS5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpDLHNvdXJjZTp0aGlzLnNvdXJjZSx0aWxlSUQ6dGhpcy50aWxlSUQsdHlwZToiaWNvbnMifSwoZnVuY3Rpb24odCxlKXtmfHwoZj10LHA9ZSxJLmNhbGwobCkpfSkpOnA9e307dmFyIFA9T2JqZWN0LmtleXMoZy5wYXR0ZXJuRGVwZW5kZW5jaWVzKTtmdW5jdGlvbiBJKCl7aWYoZilyZXR1cm4gcyhmKTtpZihoJiZwJiZkKXt2YXIgZT1uZXcgaShoKSxyPW5ldyB0LkltYWdlQXRsYXMocCxkKTtmb3IodmFyIGEgaW4gbSl7dmFyIGw9bVthXTtsIGluc3RhbmNlb2YgdC5TeW1ib2xCdWNrZXQ/KG8obC5sYXllcnMsdGhpcy56b29tLG4pLHQucGVyZm9ybVN5bWJvbExheW91dChsLGgsZS5wb3NpdGlvbnMscCxyLmljb25Qb3NpdGlvbnMsdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy50aWxlSUQuY2Fub25pY2FsKSk6bC5oYXNQYXR0ZXJuJiYobCBpbnN0YW5jZW9mIHQuTGluZUJ1Y2tldHx8bCBpbnN0YW5jZW9mIHQuRmlsbEJ1Y2tldHx8bCBpbnN0YW5jZW9mIHQuRmlsbEV4dHJ1c2lvbkJ1Y2tldCkmJihvKGwubGF5ZXJzLHRoaXMuem9vbSxuKSxsLmFkZEZlYXR1cmVzKGcsdGhpcy50aWxlSUQuY2Fub25pY2FsLHIucGF0dGVyblBvc2l0aW9ucykpfXRoaXMuc3RhdHVzPSJkb25lIixzKG51bGwse2J1Y2tldHM6dC52YWx1ZXMobSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5pc0VtcHR5KCl9KSksZmVhdHVyZUluZGV4OnUsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpbWFnZUF0bGFzOnIsZ2x5cGhNYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/aDpudWxsLGljb25NYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/cDpudWxsLGdseXBoUG9zaXRpb25zOnRoaXMucmV0dXJuRGVwZW5kZW5jaWVzP2UucG9zaXRpb25zOm51bGx9KX19UC5sZW5ndGg/YS5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpQLHNvdXJjZTp0aGlzLnNvdXJjZSx0aWxlSUQ6dGhpcy50aWxlSUQsdHlwZToicGF0dGVybnMifSwoZnVuY3Rpb24odCxlKXtmfHwoZj10LGQ9ZSxJLmNhbGwobCkpfSkpOmQ9e30sSS5jYWxsKHRoaXMpfTt2YXIgbD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmFjdG9yPXQsdGhpcy5sYXllckluZGV4PWUsdGhpcy5hdmFpbGFibGVJbWFnZXM9cix0aGlzLmxvYWRWZWN0b3JEYXRhPW58fHMsdGhpcy5sb2FkaW5nPXt9LHRoaXMubG9hZGVkPXt9fTtsLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1lLnVpZDt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9e30pO3ZhciBvPSEhKGUmJmUucmVxdWVzdCYmZS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZykmJm5ldyB0LlJlcXVlc3RQZXJmb3JtYW5jZShlLnJlcXVlc3QpLHM9dGhpcy5sb2FkaW5nW2ldPW5ldyBhKGUpO3MuYWJvcnQ9dGhpcy5sb2FkVmVjdG9yRGF0YShlLChmdW5jdGlvbihlLGEpe2lmKGRlbGV0ZSBuLmxvYWRpbmdbaV0sZXx8IWEpcmV0dXJuIHMuc3RhdHVzPSJkb25lIixuLmxvYWRlZFtpXT1zLHIoZSk7dmFyIGw9YS5yYXdEYXRhLGM9e307YS5leHBpcmVzJiYoYy5leHBpcmVzPWEuZXhwaXJlcyksYS5jYWNoZUNvbnRyb2wmJihjLmNhY2hlQ29udHJvbD1hLmNhY2hlQ29udHJvbCk7dmFyIHU9e307aWYobyl7dmFyIGY9by5maW5pc2goKTtmJiYodS5yZXNvdXJjZVRpbWluZz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGYpKSl9cy52ZWN0b3JUaWxlPWEudmVjdG9yVGlsZSxzLnBhcnNlKGEudmVjdG9yVGlsZSxuLmxheWVySW5kZXgsbi5hdmFpbGFibGVJbWFnZXMsbi5hY3RvciwoZnVuY3Rpb24oZSxuKXtpZihlfHwhbilyZXR1cm4gcihlKTtyKG51bGwsdC5leHRlbmQoe3Jhd1RpbGVEYXRhOmwuc2xpY2UoMCl9LG4sYyx1KSl9KSksbi5sb2FkZWQ9bi5sb2FkZWR8fHt9LG4ubG9hZGVkW2ldPXN9KSl9LGwucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dGhpcy5sb2FkZWQsaT10LnVpZCxhPXRoaXM7aWYobiYmbltpXSl7dmFyIG89bltpXTtvLnNob3dDb2xsaXNpb25Cb3hlcz10LnNob3dDb2xsaXNpb25Cb3hlczt2YXIgcz1mdW5jdGlvbih0LG4pe3ZhciBpPW8ucmVsb2FkQ2FsbGJhY2s7aSYmKGRlbGV0ZSBvLnJlbG9hZENhbGxiYWNrLG8ucGFyc2Uoby52ZWN0b3JUaWxlLGEubGF5ZXJJbmRleCxyLmF2YWlsYWJsZUltYWdlcyxhLmFjdG9yLGkpKSxlKHQsbil9OyJwYXJzaW5nIj09PW8uc3RhdHVzP28ucmVsb2FkQ2FsbGJhY2s9czoiZG9uZSI9PT1vLnN0YXR1cyYmKG8udmVjdG9yVGlsZT9vLnBhcnNlKG8udmVjdG9yVGlsZSx0aGlzLmxheWVySW5kZXgsdGhpcy5hdmFpbGFibGVJbWFnZXMsdGhpcy5hY3RvcixzKTpzKCkpfX0sbC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkaW5nLG49dC51aWQ7ciYmcltuXSYmcltuXS5hYm9ydCYmKHJbbl0uYWJvcnQoKSxkZWxldGUgcltuXSksZSgpfSxsLnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkZWQsbj10LnVpZDtyJiZyW25dJiZkZWxldGUgcltuXSxlKCl9O3ZhciBjPXQud2luZG93LkltYWdlQml0bWFwLHU9ZnVuY3Rpb24oKXt0aGlzLmxvYWRlZD17fX07dS5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnVpZCxpPWUuZW5jb2RpbmcsYT1lLnJhd0ltYWdlRGF0YSxvPWMmJmEgaW5zdGFuY2VvZiBjP3RoaXMuZ2V0SW1hZ2VEYXRhKGEpOmEscz1uZXcgdC5ERU1EYXRhKG4sbyxpKTt0aGlzLmxvYWRlZD10aGlzLmxvYWRlZHx8e30sdGhpcy5sb2FkZWRbbl09cyxyKG51bGwscyl9LHUucHJvdG90eXBlLmdldEltYWdlRGF0YT1mdW5jdGlvbihlKXt0aGlzLm9mZnNjcmVlbkNhbnZhcyYmdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0fHwodGhpcy5vZmZzY3JlZW5DYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcyhlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQ9dGhpcy5vZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dCgiMmQiKSksdGhpcy5vZmZzY3JlZW5DYW52YXMud2lkdGg9ZS53aWR0aCx0aGlzLm9mZnNjcmVlbkNhbnZhcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KTt2YXIgcj10aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuZ2V0SW1hZ2VEYXRhKC0xLC0xLGUud2lkdGgrMixlLmhlaWdodCsyKTtyZXR1cm4gdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0LmNsZWFyUmVjdCgwLDAsdGhpcy5vZmZzY3JlZW5DYW52YXMud2lkdGgsdGhpcy5vZmZzY3JlZW5DYW52YXMuaGVpZ2h0KSxuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fSxyLmRhdGEpfSx1LnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9hZGVkLHI9dC51aWQ7ZSYmZVtyXSYmZGVsZXRlIGVbcl19O3ZhciBmPWZ1bmN0aW9uIHQoZSxyKXt2YXIgbixpPWUmJmUudHlwZTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09aSlmb3Iobj0wO248ZS5mZWF0dXJlcy5sZW5ndGg7bisrKXQoZS5mZWF0dXJlc1tuXSxyKTtlbHNlIGlmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09aSlmb3Iobj0wO248ZS5nZW9tZXRyaWVzLmxlbmd0aDtuKyspdChlLmdlb21ldHJpZXNbbl0scik7ZWxzZSBpZigiRmVhdHVyZSI9PT1pKXQoZS5nZW9tZXRyeSxyKTtlbHNlIGlmKCJQb2x5Z29uIj09PWkpaChlLmNvb3JkaW5hdGVzLHIpO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1pKWZvcihuPTA7bjxlLmNvb3JkaW5hdGVzLmxlbmd0aDtuKyspaChlLmNvb3JkaW5hdGVzW25dLHIpO3JldHVybiBlfTtmdW5jdGlvbiBoKHQsZSl7aWYoMCE9PXQubGVuZ3RoKXtwKHRbMF0sZSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspcCh0W3JdLCFlKX19ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoLGE9aS0xO248aTthPW4rKylyKz0odFtuXVswXS10W2FdWzBdKSoodFthXVsxXSt0W25dWzFdKTtyPj0wIT0hIWUmJnQucmV2ZXJzZSgpfXZhciBkPXQudmVjdG9yVGlsZS5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUudG9HZW9KU09OLG09ZnVuY3Rpb24oZSl7dGhpcy5fZmVhdHVyZT1lLHRoaXMuZXh0ZW50PXQuRVhURU5ULHRoaXMudHlwZT1lLnR5cGUsdGhpcy5wcm9wZXJ0aWVzPWUudGFncywiaWQiaW4gZSYmIWlzTmFOKGUuaWQpJiYodGhpcy5pZD1wYXJzZUludChlLmlkLDEwKSl9O20ucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe2lmKDE9PT10aGlzLl9mZWF0dXJlLnR5cGUpe2Zvcih2YXIgZT1bXSxyPTAsbj10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtlLnB1c2goW25ldyB0LlBvaW50JDEoaVswXSxpWzFdKV0pfXJldHVybiBlfWZvcih2YXIgYT1bXSxvPTAscz10aGlzLl9mZWF0dXJlLmdlb21ldHJ5O288cy5sZW5ndGg7bys9MSl7Zm9yKHZhciBsPVtdLGM9MCx1PXNbb107Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdO2wucHVzaChuZXcgdC5Qb2ludCQxKGZbMF0sZlsxXSkpfWEucHVzaChsKX1yZXR1cm4gYX0sbS5wcm90b3R5cGUudG9HZW9KU09OPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZC5jYWxsKHRoaXMsdCxlLHIpfTt2YXIgZz1mdW5jdGlvbihlKXt0aGlzLmxheWVycz17X2dlb2pzb25UaWxlTGF5ZXI6dGhpc30sdGhpcy5uYW1lPSJfZ2VvanNvblRpbGVMYXllciIsdGhpcy5leHRlbnQ9dC5FWFRFTlQsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fZmVhdHVyZXM9ZX07Zy5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG0odGhpcy5fZmVhdHVyZXNbdF0pfTt2YXIgdj10LnZlY3RvclRpbGUuVmVjdG9yVGlsZUZlYXR1cmUseT14O2Z1bmN0aW9uIHgodCxlKXt0aGlzLm9wdGlvbnM9ZXx8e30sdGhpcy5mZWF0dXJlcz10LHRoaXMubGVuZ3RoPXQubGVuZ3RofWZ1bmN0aW9uIGIodCxlKXt0aGlzLmlkPSJudW1iZXIiPT10eXBlb2YgdC5pZD90LmlkOnZvaWQgMCx0aGlzLnR5cGU9dC50eXBlLHRoaXMucmF3R2VvbWV0cnk9MT09PXQudHlwZT9bdC5nZW9tZXRyeV06dC5nZW9tZXRyeSx0aGlzLnByb3BlcnRpZXM9dC50YWdzLHRoaXMuZXh0ZW50PWV8fDQwOTZ9eC5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGIodGhpcy5mZWF0dXJlc1t0XSx0aGlzLm9wdGlvbnMuZXh0ZW50KX0sYi5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYXdHZW9tZXRyeTt0aGlzLmdlb21ldHJ5PVtdO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXtmb3IodmFyIG49ZVtyXSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2gobmV3IHQuUG9pbnQkMShuW2FdWzBdLG5bYV1bMV0pKTt0aGlzLmdlb21ldHJ5LnB1c2goaSl9cmV0dXJuIHRoaXMuZ2VvbWV0cnl9LGIucHJvdG90eXBlLmJib3g9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5fHx0aGlzLmxvYWRHZW9tZXRyeSgpO2Zvcih2YXIgdD10aGlzLmdlb21ldHJ5LGU9MS8wLHI9LTEvMCxuPTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtlPU1hdGgubWluKGUsbC54KSxyPU1hdGgubWF4KHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxpPU1hdGgubWF4KGksbC55KX1yZXR1cm5bZSxuLHIsaV19LGIucHJvdG90eXBlLnRvR2VvSlNPTj12LnByb3RvdHlwZS50b0dlb0pTT047dmFyIF89QSx3PUEsVD1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9e307Zm9yKHZhciBuIGluIHQpcltuXT1uZXcgeSh0W25dLmZlYXR1cmVzLGUpLHJbbl0ubmFtZT1uLHJbbl0udmVyc2lvbj1lLnZlcnNpb24scltuXS5leHRlbnQ9ZS5leHRlbnQ7cmV0dXJuIEEoe2xheWVyczpyfSl9LGs9eTtmdW5jdGlvbiBBKGUpe3ZhciByPW5ldyB0LnBiZjtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS53cml0ZU1lc3NhZ2UoMyxNLHQubGF5ZXJzW3JdKX0oZSxyKSxyLmZpbmlzaCgpfWZ1bmN0aW9uIE0odCxlKXt2YXIgcjtlLndyaXRlVmFyaW50RmllbGQoMTUsdC52ZXJzaW9ufHwxKSxlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWV8fCIiKSxlLndyaXRlVmFyaW50RmllbGQoNSx0LmV4dGVudHx8NDA5Nik7dmFyIG49e2tleXM6W10sdmFsdWVzOltdLGtleWNhY2hlOnt9LHZhbHVlY2FjaGU6e319O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspbi5mZWF0dXJlPXQuZmVhdHVyZShyKSxlLndyaXRlTWVzc2FnZSgyLFMsbik7dmFyIGk9bi5rZXlzO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspZS53cml0ZVN0cmluZ0ZpZWxkKDMsaVtyXSk7dmFyIGE9bi52YWx1ZXM7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSg0LEksYVtyXSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQuZmVhdHVyZTt2b2lkIDAhPT1yLmlkJiZlLndyaXRlVmFyaW50RmllbGQoMSxyLmlkKSxlLndyaXRlTWVzc2FnZSgyLEUsdCksZS53cml0ZVZhcmludEZpZWxkKDMsci50eXBlKSxlLndyaXRlTWVzc2FnZSg0LFAscil9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPXQuZmVhdHVyZSxuPXQua2V5cyxpPXQudmFsdWVzLGE9dC5rZXljYWNoZSxvPXQudmFsdWVjYWNoZTtmb3IodmFyIHMgaW4gci5wcm9wZXJ0aWVzKXt2YXIgbD1hW3NdO3ZvaWQgMD09PWwmJihuLnB1c2gocyksbD1uLmxlbmd0aC0xLGFbc109bCksZS53cml0ZVZhcmludChsKTt2YXIgYz1yLnByb3BlcnRpZXNbc10sdT10eXBlb2YgYzsic3RyaW5nIiE9PXUmJiJib29sZWFuIiE9PXUmJiJudW1iZXIiIT09dSYmKGM9SlNPTi5zdHJpbmdpZnkoYykpO3ZhciBmPXUrIjoiK2MsaD1vW2ZdO3ZvaWQgMD09PWgmJihpLnB1c2goYyksaD1pLmxlbmd0aC0xLG9bZl09aCksZS53cml0ZVZhcmludChoKX19ZnVuY3Rpb24gTCh0LGUpe3JldHVybihlPDwzKSsoNyZ0KX1mdW5jdGlvbiBDKHQpe3JldHVybiB0PDwxXnQ+PjMxfWZ1bmN0aW9uIFAodCxlKXtmb3IodmFyIHI9dC5sb2FkR2VvbWV0cnkoKSxuPXQudHlwZSxpPTAsYT0wLG89ci5sZW5ndGgscz0wO3M8bztzKyspe3ZhciBsPXJbc10sYz0xOzE9PT1uJiYoYz1sLmxlbmd0aCksZS53cml0ZVZhcmludChMKDEsYykpO2Zvcih2YXIgdT0zPT09bj9sLmxlbmd0aC0xOmwubGVuZ3RoLGY9MDtmPHU7ZisrKXsxPT09ZiYmMSE9PW4mJmUud3JpdGVWYXJpbnQoTCgyLHUtMSkpO3ZhciBoPWxbZl0ueC1pLHA9bFtmXS55LWE7ZS53cml0ZVZhcmludChDKGgpKSxlLndyaXRlVmFyaW50KEMocCkpLGkrPWgsYSs9cH0zPT09biYmZS53cml0ZVZhcmludChMKDcsMSkpfX1mdW5jdGlvbiBJKHQsZSl7dmFyIHI9dHlwZW9mIHQ7InN0cmluZyI9PT1yP2Uud3JpdGVTdHJpbmdGaWVsZCgxLHQpOiJib29sZWFuIj09PXI/ZS53cml0ZUJvb2xlYW5GaWVsZCg3LHQpOiJudW1iZXIiPT09ciYmKHQlMSE9MD9lLndyaXRlRG91YmxlRmllbGQoMyx0KTp0PDA/ZS53cml0ZVNWYXJpbnRGaWVsZCg2LHQpOmUud3JpdGVWYXJpbnRGaWVsZCg1LHQpKX1mdW5jdGlvbiBPKHQsZSxyLG4saSxhKXtpZighKGktbjw9cikpe3ZhciBvPW4raT4+MTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7Zm9yKDthPmk7KXtpZihhLWk+NjAwKXt2YXIgcz1hLWkrMSxsPW4taSsxLGM9TWF0aC5sb2cocyksdT0uNSpNYXRoLmV4cCgyKmMvMyksZj0uNSpNYXRoLnNxcnQoYyp1KihzLXUpL3MpKihsLXMvMjwwPy0xOjEpLGg9TWF0aC5tYXgoaSxNYXRoLmZsb29yKG4tbCp1L3MrZikpLHA9TWF0aC5taW4oYSxNYXRoLmZsb29yKG4rKHMtbCkqdS9zK2YpKTt0KGUscixuLGgscCxvKX12YXIgZD1yWzIqbitvXSxtPWksZz1hO2Zvcih6KGUscixpLG4pLHJbMiphK29dPmQmJnooZSxyLGksYSk7bTxnOyl7Zm9yKHooZSxyLG0sZyksbSsrLGctLTtyWzIqbStvXTxkOyltKys7Zm9yKDtyWzIqZytvXT5kOylnLS19clsyKmkrb109PT1kP3ooZSxyLGksZyk6KGcrKyx6KGUscixnLGEpKSxnPD1uJiYoaT1nKzEpLG48PWcmJihhPWctMSl9fSh0LGUsbyxuLGksYSUyKSxPKHQsZSxyLG4sby0xLGErMSksTyh0LGUscixvKzEsaSxhKzEpfX1mdW5jdGlvbiB6KHQsZSxyLG4pe0QodCxyLG4pLEQoZSwyKnIsMipuKSxEKGUsMipyKzEsMipuKzEpfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBSKHQsZSxyLG4pe3ZhciBpPXQtcixhPWUtbjtyZXR1cm4gaSppK2EqYX1fLmZyb21WZWN0b3JUaWxlSnM9dyxfLmZyb21HZW9qc29uVnQ9VCxfLkdlb0pTT05XcmFwcGVyPWs7dmFyIEY9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19LEI9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19LE49ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT1lJiYoZT1GKSx2b2lkIDA9PT1yJiYocj1CKSx2b2lkIDA9PT1uJiYobj02NCksdm9pZCAwPT09aSYmKGk9RmxvYXQ2NEFycmF5KSx0aGlzLm5vZGVTaXplPW4sdGhpcy5wb2ludHM9dDtmb3IodmFyIGE9dC5sZW5ndGg8NjU1MzY/VWludDE2QXJyYXk6VWludDMyQXJyYXksbz10aGlzLmlkcz1uZXcgYSh0Lmxlbmd0aCkscz10aGlzLmNvb3Jkcz1uZXcgaSgyKnQubGVuZ3RoKSxsPTA7bDx0Lmxlbmd0aDtsKyspb1tsXT1sLHNbMipsXT1lKHRbbF0pLHNbMipsKzFdPXIodFtsXSk7TyhvLHMsbiwwLG8ubGVuZ3RoLTEsMCl9O04ucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPVswLHQubGVuZ3RoLTEsMF0sdT1bXTtjLmxlbmd0aDspe3ZhciBmPWMucG9wKCksaD1jLnBvcCgpLHA9Yy5wb3AoKTtpZihoLXA8PW8pZm9yKHZhciBkPXA7ZDw9aDtkKyspcz1lWzIqZF0sbD1lWzIqZCsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtkXSk7ZWxzZXt2YXIgbT1NYXRoLmZsb29yKChwK2gpLzIpO3M9ZVsyKm1dLGw9ZVsyKm0rMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmdS5wdXNoKHRbbV0pO3ZhciBnPShmKzEpJTI7KDA9PT1mP3I8PXM6bjw9bCkmJihjLnB1c2gocCksYy5wdXNoKG0tMSksYy5wdXNoKGcpKSwoMD09PWY/aT49czphPj1sKSYmKGMucHVzaChtKzEpLGMucHVzaChoKSxjLnB1c2goZykpfX1yZXR1cm4gdX0odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsbix0aGlzLm5vZGVTaXplKX0sTi5wcm90b3R5cGUud2l0aGluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bMCx0Lmxlbmd0aC0xLDBdLHM9W10sbD1pKmk7by5sZW5ndGg7KXt2YXIgYz1vLnBvcCgpLHU9by5wb3AoKSxmPW8ucG9wKCk7aWYodS1mPD1hKWZvcih2YXIgaD1mO2g8PXU7aCsrKVIoZVsyKmhdLGVbMipoKzFdLHIsbik8PWwmJnMucHVzaCh0W2hdKTtlbHNle3ZhciBwPU1hdGguZmxvb3IoKGYrdSkvMiksZD1lWzIqcF0sbT1lWzIqcCsxXTtSKGQsbSxyLG4pPD1sJiZzLnB1c2godFtwXSk7dmFyIGc9KGMrMSklMjsoMD09PWM/ci1pPD1kOm4taTw9bSkmJihvLnB1c2goZiksby5wdXNoKHAtMSksby5wdXNoKGcpKSwoMD09PWM/citpPj1kOm4raT49bSkmJihvLnB1c2gocCsxKSxvLnB1c2godSksby5wdXNoKGcpKX19cmV0dXJuIHN9KHRoaXMuaWRzLHRoaXMuY29vcmRzLHQsZSxyLHRoaXMubm9kZVNpemUpfTt2YXIgaj17bWluWm9vbTowLG1heFpvb206MTYscmFkaXVzOjQwLGV4dGVudDo1MTIsbm9kZVNpemU6NjQsbG9nOiExLGdlbmVyYXRlSWQ6ITEscmVkdWNlOm51bGwsbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sVT1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9WChPYmplY3QuY3JlYXRlKGopLHQpLHRoaXMudHJlZXM9bmV3IEFycmF5KHRoaXMub3B0aW9ucy5tYXhab29tKzEpfTtmdW5jdGlvbiBWKHQsZSxyLG4saSl7cmV0dXJue3g6dCx5OmUsem9vbToxLzAsaWQ6cixwYXJlbnRJZDotMSxudW1Qb2ludHM6bixwcm9wZXJ0aWVzOml9fWZ1bmN0aW9uIEgodCxlKXt2YXIgcj10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzLG49clswXSxpPXJbMV07cmV0dXJue3g6WShuKSx5OlcoaSksem9vbToxLzAsaW5kZXg6ZSxwYXJlbnRJZDotMX19ZnVuY3Rpb24gcSh0KXtyZXR1cm57dHlwZToiRmVhdHVyZSIsaWQ6dC5pZCxwcm9wZXJ0aWVzOkcodCksZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbKG49dC54LDM2MCoobi0uNSkpLChlPXQueSxyPSgxODAtMzYwKmUpKk1hdGguUEkvMTgwLDM2MCpNYXRoLmF0YW4oTWF0aC5leHAocikpL01hdGguUEktOTApXX19O3ZhciBlLHIsbn1mdW5jdGlvbiBHKHQpe3ZhciBlPXQubnVtUG9pbnRzLHI9ZT49MWU0P01hdGgucm91bmQoZS8xZTMpKyJrIjplPj0xZTM/TWF0aC5yb3VuZChlLzEwMCkvMTArImsiOmU7cmV0dXJuIFgoWCh7fSx0LnByb3BlcnRpZXMpLHtjbHVzdGVyOiEwLGNsdXN0ZXJfaWQ6dC5pZCxwb2ludF9jb3VudDplLHBvaW50X2NvdW50X2FiYnJldmlhdGVkOnJ9KX1mdW5jdGlvbiBZKHQpe3JldHVybiB0LzM2MCsuNX1mdW5jdGlvbiBXKHQpe3ZhciBlPU1hdGguc2luKHQqTWF0aC5QSS8xODApLHI9LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiByPDA/MDpyPjE/MTpyfWZ1bmN0aW9uIFgodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gWih0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBLKHQsZSxyLG4saSxhKXt2YXIgbz1pLXIscz1hLW47aWYoMCE9PW98fDAhPT1zKXt2YXIgbD0oKHQtcikqbysoZS1uKSpzKS8obypvK3Mqcyk7bD4xPyhyPWksbj1hKTpsPjAmJihyKz1vKmwsbis9cypsKX1yZXR1cm4obz10LXIpKm8rKHM9ZS1uKSpzfWZ1bmN0aW9uIFEodCxlLHIsbil7dmFyIGk9e2lkOnZvaWQgMD09PXQ/bnVsbDp0LHR5cGU6ZSxnZW9tZXRyeTpyLHRhZ3M6bixtaW5YOjEvMCxtaW5ZOjEvMCxtYXhYOi0xLzAsbWF4WTotMS8wfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5nZW9tZXRyeSxyPXQudHlwZTtpZigiUG9pbnQiPT09cnx8Ik11bHRpUG9pbnQiPT09cnx8IkxpbmVTdHJpbmciPT09cikkKHQsZSk7ZWxzZSBpZigiUG9seWdvbiI9PT1yfHwiTXVsdGlMaW5lU3RyaW5nIj09PXIpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspJCh0LGVbbl0pO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1yKWZvcihuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPTA7aTxlW25dLmxlbmd0aDtpKyspJCh0LGVbbl1baV0pfShpKSxpfWZ1bmN0aW9uICQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrPTMpdC5taW5YPU1hdGgubWluKHQubWluWCxlW3JdKSx0Lm1pblk9TWF0aC5taW4odC5taW5ZLGVbcisxXSksdC5tYXhYPU1hdGgubWF4KHQubWF4WCxlW3JdKSx0Lm1heFk9TWF0aC5tYXgodC5tYXhZLGVbcisxXSl9ZnVuY3Rpb24gdHQodCxlLHIsbil7aWYoZS5nZW9tZXRyeSl7dmFyIGk9ZS5nZW9tZXRyeS5jb29yZGluYXRlcyxhPWUuZ2VvbWV0cnkudHlwZSxvPU1hdGgucG93KHIudG9sZXJhbmNlLygoMTw8ci5tYXhab29tKSpyLmV4dGVudCksMikscz1bXSxsPWUuaWQ7aWYoci5wcm9tb3RlSWQ/bD1lLnByb3BlcnRpZXNbci5wcm9tb3RlSWRdOnIuZ2VuZXJhdGVJZCYmKGw9bnx8MCksIlBvaW50Ij09PWEpZXQoaSxzKTtlbHNlIGlmKCJNdWx0aVBvaW50Ij09PWEpZm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKyspZXQoaVtjXSxzKTtlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWEpcnQoaSxzLG8sITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hKXtpZihyLmxpbmVNZXRyaWNzKXtmb3IoYz0wO2M8aS5sZW5ndGg7YysrKXM9W10scnQoaVtjXSxzLG8sITEpLHQucHVzaChRKGwsIkxpbmVTdHJpbmciLHMsZS5wcm9wZXJ0aWVzKSk7cmV0dXJufW50KGkscyxvLCExKX1lbHNlIGlmKCJQb2x5Z29uIj09PWEpbnQoaSxzLG8sITApO2Vsc2V7aWYoIk11bHRpUG9seWdvbiIhPT1hKXtpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWEpe2ZvcihjPTA7YzxlLmdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoO2MrKyl0dCh0LHtpZDpsLGdlb21ldHJ5OmUuZ2VvbWV0cnkuZ2VvbWV0cmllc1tjXSxwcm9wZXJ0aWVzOmUucHJvcGVydGllc30scixuKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpfWZvcihjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PVtdO250KGlbY10sdSxvLCEwKSxzLnB1c2godSl9fXQucHVzaChRKGwsYSxzLGUucHJvcGVydGllcykpfX1mdW5jdGlvbiBldCh0LGUpe2UucHVzaChpdCh0WzBdKSksZS5wdXNoKGF0KHRbMV0pKSxlLnB1c2goMCl9ZnVuY3Rpb24gcnQodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9aXQodFtzXVswXSksYz1hdCh0W3NdWzFdKTtlLnB1c2gobCksZS5wdXNoKGMpLGUucHVzaCgwKSxzPjAmJihvKz1uPyhpKmMtbCphKS8yOk1hdGguc3FydChNYXRoLnBvdyhsLWksMikrTWF0aC5wb3coYy1hLDIpKSksaT1sLGE9Y312YXIgdT1lLmxlbmd0aC0zO2VbMl09MSxmdW5jdGlvbiB0KGUscixuLGkpe2Zvcih2YXIgYSxvPWkscz1uLXI+PjEsbD1uLXIsYz1lW3JdLHU9ZVtyKzFdLGY9ZVtuXSxoPWVbbisxXSxwPXIrMztwPG47cCs9Myl7dmFyIGQ9SyhlW3BdLGVbcCsxXSxjLHUsZixoKTtpZihkPm8pYT1wLG89ZDtlbHNlIGlmKGQ9PT1vKXt2YXIgbT1NYXRoLmFicyhwLXMpO208bCYmKGE9cCxsPW0pfX1vPmkmJihhLXI+MyYmdChlLHIsYSxpKSxlW2ErMl09byxuLWE+MyYmdChlLGEsbixpKSl9KGUsMCx1LHIpLGVbdSsyXT0xLGUuc2l6ZT1NYXRoLmFicyhvKSxlLnN0YXJ0PTAsZS5lbmQ9ZS5zaXplfWZ1bmN0aW9uIG50KHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1bXTtydCh0W2ldLGEscixuKSxlLnB1c2goYSl9fWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0LzM2MCsuNX1mdW5jdGlvbiBhdCh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBvdCh0LGUscixuLGksYSxvLHMpe2lmKG4vPWUsYT49KHIvPWUpJiZvPG4pcmV0dXJuIHQ7aWYobzxyfHxhPj1uKXJldHVybiBudWxsO2Zvcih2YXIgbD1bXSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10sZj11Lmdlb21ldHJ5LGg9dS50eXBlLHA9MD09PWk/dS5taW5YOnUubWluWSxkPTA9PT1pP3UubWF4WDp1Lm1heFk7aWYocD49ciYmZDxuKWwucHVzaCh1KTtlbHNlIGlmKCEoZDxyfHxwPj1uKSl7dmFyIG09W107aWYoIlBvaW50Ij09PWh8fCJNdWx0aVBvaW50Ij09PWgpc3QoZixtLHIsbixpKTtlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWgpbHQoZixtLHIsbixpLCExLHMubGluZU1ldHJpY3MpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1oKXV0KGYsbSxyLG4saSwhMSk7ZWxzZSBpZigiUG9seWdvbiI9PT1oKXV0KGYsbSxyLG4saSwhMCk7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PWgpZm9yKHZhciBnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciB2PVtdO3V0KGZbZ10sdixyLG4saSwhMCksdi5sZW5ndGgmJm0ucHVzaCh2KX1pZihtLmxlbmd0aCl7aWYocy5saW5lTWV0cmljcyYmIkxpbmVTdHJpbmciPT09aCl7Zm9yKGc9MDtnPG0ubGVuZ3RoO2crKylsLnB1c2goUSh1LmlkLGgsbVtnXSx1LnRhZ3MpKTtjb250aW51ZX0iTGluZVN0cmluZyIhPT1oJiYiTXVsdGlMaW5lU3RyaW5nIiE9PWh8fCgxPT09bS5sZW5ndGg/KGg9IkxpbmVTdHJpbmciLG09bVswXSk6aD0iTXVsdGlMaW5lU3RyaW5nIiksIlBvaW50IiE9PWgmJiJNdWx0aVBvaW50IiE9PWh8fChoPTM9PT1tLmxlbmd0aD8iUG9pbnQiOiJNdWx0aVBvaW50IiksbC5wdXNoKFEodS5pZCxoLG0sdS50YWdzKSl9fX1yZXR1cm4gbC5sZW5ndGg/bDpudWxsfWZ1bmN0aW9uIHN0KHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKz0zKXt2YXIgbz10W2EraV07bz49ciYmbzw9biYmKGUucHVzaCh0W2FdKSxlLnB1c2godFthKzFdKSxlLnB1c2godFthKzJdKSl9fWZ1bmN0aW9uIGx0KHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9Y3QodCksdT0wPT09aT9odDpwdCxmPXQuc3RhcnQsaD0wO2g8dC5sZW5ndGgtMztoKz0zKXt2YXIgcD10W2hdLGQ9dFtoKzFdLG09dFtoKzJdLGc9dFtoKzNdLHY9dFtoKzRdLHk9MD09PWk/cDpkLHg9MD09PWk/Zzp2LGI9ITE7byYmKHM9TWF0aC5zcXJ0KE1hdGgucG93KHAtZywyKStNYXRoLnBvdyhkLXYsMikpKSx5PHI/eD5yJiYobD11KGMscCxkLGcsdixyKSxvJiYoYy5zdGFydD1mK3MqbCkpOnk+bj94PG4mJihsPXUoYyxwLGQsZyx2LG4pLG8mJihjLnN0YXJ0PWYrcypsKSk6ZnQoYyxwLGQsbSkseDxyJiZ5Pj1yJiYobD11KGMscCxkLGcsdixyKSxiPSEwKSx4Pm4mJnk8PW4mJihsPXUoYyxwLGQsZyx2LG4pLGI9ITApLCFhJiZiJiYobyYmKGMuZW5kPWYrcypsKSxlLnB1c2goYyksYz1jdCh0KSksbyYmKGYrPXMpfXZhciBfPXQubGVuZ3RoLTM7cD10W19dLGQ9dFtfKzFdLG09dFtfKzJdLCh5PTA9PT1pP3A6ZCk+PXImJnk8PW4mJmZ0KGMscCxkLG0pLF89Yy5sZW5ndGgtMyxhJiZfPj0zJiYoY1tfXSE9PWNbMF18fGNbXysxXSE9PWNbMV0pJiZmdChjLGNbMF0sY1sxXSxjWzJdKSxjLmxlbmd0aCYmZS5wdXNoKGMpfWZ1bmN0aW9uIGN0KHQpe3ZhciBlPVtdO3JldHVybiBlLnNpemU9dC5zaXplLGUuc3RhcnQ9dC5zdGFydCxlLmVuZD10LmVuZCxlfWZ1bmN0aW9uIHV0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKylsdCh0W29dLGUscixuLGksYSwhMSl9ZnVuY3Rpb24gZnQodCxlLHIsbil7dC5wdXNoKGUpLHQucHVzaChyKSx0LnB1c2gobil9ZnVuY3Rpb24gaHQodCxlLHIsbixpLGEpe3ZhciBvPShhLWUpLyhuLWUpO3JldHVybiB0LnB1c2goYSksdC5wdXNoKHIrKGktcikqbyksdC5wdXNoKDEpLG99ZnVuY3Rpb24gcHQodCxlLHIsbixpLGEpe3ZhciBvPShhLXIpLyhpLXIpO3JldHVybiB0LnB1c2goZSsobi1lKSpvKSx0LnB1c2goYSksdC5wdXNoKDEpLG99ZnVuY3Rpb24gZHQodCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaSxhPXRbbl0sbz1hLnR5cGU7aWYoIlBvaW50Ij09PW98fCJNdWx0aVBvaW50Ij09PW98fCJMaW5lU3RyaW5nIj09PW8paT1tdChhLmdlb21ldHJ5LGUpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1vfHwiUG9seWdvbiI9PT1vKXtpPVtdO2Zvcih2YXIgcz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKWkucHVzaChtdChhLmdlb21ldHJ5W3NdLGUpKX1lbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09bylmb3IoaT1bXSxzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1bXSxjPTA7YzxhLmdlb21ldHJ5W3NdLmxlbmd0aDtjKyspbC5wdXNoKG10KGEuZ2VvbWV0cnlbc11bY10sZSkpO2kucHVzaChsKX1yLnB1c2goUShhLmlkLG8saSxhLnRhZ3MpKX1yZXR1cm4gcn1mdW5jdGlvbiBtdCh0LGUpe3ZhciByPVtdO3Iuc2l6ZT10LnNpemUsdm9pZCAwIT09dC5zdGFydCYmKHIuc3RhcnQ9dC5zdGFydCxyLmVuZD10LmVuZCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0zKXIucHVzaCh0W25dK2UsdFtuKzFdLHRbbisyXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZ3QodCxlKXtpZih0LnRyYW5zZm9ybWVkKXJldHVybiB0O3ZhciByLG4saSxhPTE8PHQueixvPXQueCxzPXQueTtmb3Iocj0wO3I8dC5mZWF0dXJlcy5sZW5ndGg7cisrKXt2YXIgbD10LmZlYXR1cmVzW3JdLGM9bC5nZW9tZXRyeSx1PWwudHlwZTtpZihsLmdlb21ldHJ5PVtdLDE9PT11KWZvcihuPTA7bjxjLmxlbmd0aDtuKz0yKWwuZ2VvbWV0cnkucHVzaCh2dChjW25dLGNbbisxXSxlLGEsbyxzKSk7ZWxzZSBmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgZj1bXTtmb3IoaT0wO2k8Y1tuXS5sZW5ndGg7aSs9MilmLnB1c2godnQoY1tuXVtpXSxjW25dW2krMV0sZSxhLG8scykpO2wuZ2VvbWV0cnkucHVzaChmKX19cmV0dXJuIHQudHJhbnNmb3JtZWQ9ITAsdH1mdW5jdGlvbiB2dCh0LGUscixuLGksYSl7cmV0dXJuW01hdGgucm91bmQocioodCpuLWkpKSxNYXRoLnJvdW5kKHIqKGUqbi1hKSldfWZ1bmN0aW9uIHl0KHQsZSxyLG4saSl7Zm9yKHZhciBhPWU9PT1pLm1heFpvb20/MDppLnRvbGVyYW5jZS8oKDE8PGUpKmkuZXh0ZW50KSxvPXtmZWF0dXJlczpbXSxudW1Qb2ludHM6MCxudW1TaW1wbGlmaWVkOjAsbnVtRmVhdHVyZXM6MCxzb3VyY2U6bnVsbCx4OnIseTpuLHo6ZSx0cmFuc2Zvcm1lZDohMSxtaW5YOjIsbWluWToxLG1heFg6LTEsbWF4WTowfSxzPTA7czx0Lmxlbmd0aDtzKyspe28ubnVtRmVhdHVyZXMrKyx4dChvLHRbc10sYSxpKTt2YXIgbD10W3NdLm1pblgsYz10W3NdLm1pblksdT10W3NdLm1heFgsZj10W3NdLm1heFk7bDxvLm1pblgmJihvLm1pblg9bCksYzxvLm1pblkmJihvLm1pblk9YyksdT5vLm1heFgmJihvLm1heFg9dSksZj5vLm1heFkmJihvLm1heFk9Zil9cmV0dXJuIG99ZnVuY3Rpb24geHQodCxlLHIsbil7dmFyIGk9ZS5nZW9tZXRyeSxhPWUudHlwZSxvPVtdO2lmKCJQb2ludCI9PT1hfHwiTXVsdGlQb2ludCI9PT1hKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cys9MylvLnB1c2goaVtzXSksby5wdXNoKGlbcysxXSksdC5udW1Qb2ludHMrKyx0Lm51bVNpbXBsaWZpZWQrKztlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWEpYnQobyxpLHQsciwhMSwhMSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWF8fCJQb2x5Z29uIj09PWEpZm9yKHM9MDtzPGkubGVuZ3RoO3MrKylidChvLGlbc10sdCxyLCJQb2x5Z29uIj09PWEsMD09PXMpO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1hKWZvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgYz1pW2xdO2ZvcihzPTA7czxjLmxlbmd0aDtzKyspYnQobyxjW3NdLHQsciwhMCwwPT09cyl9aWYoby5sZW5ndGgpe3ZhciB1PWUudGFnc3x8bnVsbDtpZigiTGluZVN0cmluZyI9PT1hJiZuLmxpbmVNZXRyaWNzKXtmb3IodmFyIGYgaW4gdT17fSxlLnRhZ3MpdVtmXT1lLnRhZ3NbZl07dS5tYXBib3hfY2xpcF9zdGFydD1pLnN0YXJ0L2kuc2l6ZSx1Lm1hcGJveF9jbGlwX2VuZD1pLmVuZC9pLnNpemV9dmFyIGg9e2dlb21ldHJ5Om8sdHlwZToiUG9seWdvbiI9PT1hfHwiTXVsdGlQb2x5Z29uIj09PWE/MzoiTGluZVN0cmluZyI9PT1hfHwiTXVsdGlMaW5lU3RyaW5nIj09PWE/MjoxLHRhZ3M6dX07bnVsbCE9PWUuaWQmJihoLmlkPWUuaWQpLHQuZmVhdHVyZXMucHVzaChoKX19ZnVuY3Rpb24gYnQodCxlLHIsbixpLGEpe3ZhciBvPW4qbjtpZihuPjAmJmUuc2l6ZTwoaT9vOm4pKXIubnVtUG9pbnRzKz1lLmxlbmd0aC8zO2Vsc2V7Zm9yKHZhciBzPVtdLGw9MDtsPGUubGVuZ3RoO2wrPTMpKDA9PT1ufHxlW2wrMl0+bykmJihyLm51bVNpbXBsaWZpZWQrKyxzLnB1c2goZVtsXSkscy5wdXNoKGVbbCsxXSkpLHIubnVtUG9pbnRzKys7aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aCxhPWktMjtuPGk7YT1uLG4rPTIpcis9KHRbbl0tdFthXSkqKHRbbisxXSt0W2ErMV0pO2lmKHI+MD09PWUpZm9yKG49MCxpPXQubGVuZ3RoO248aS8yO24rPTIpe3ZhciBvPXRbbl0scz10W24rMV07dFtuXT10W2ktMi1uXSx0W24rMV09dFtpLTEtbl0sdFtpLTItbl09byx0W2ktMS1uXT1zfX0ocyxhKSx0LnB1c2gocyl9fWZ1bmN0aW9uIF90KHQsZSl7dmFyIHI9KGU9dGhpcy5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fShPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksZSkpLmRlYnVnO2lmKHImJmNvbnNvbGUudGltZSgicHJlcHJvY2VzcyBkYXRhIiksZS5tYXhab29tPDB8fGUubWF4Wm9vbT4yNCl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gc2hvdWxkIGJlIGluIHRoZSAwLTI0IHJhbmdlIik7aWYoZS5wcm9tb3RlSWQmJmUuZ2VuZXJhdGVJZCl0aHJvdyBuZXcgRXJyb3IoInByb21vdGVJZCBhbmQgZ2VuZXJhdGVJZCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iKTt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2lmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUpZm9yKHZhciBuPTA7bjx0LmZlYXR1cmVzLmxlbmd0aDtuKyspdHQocix0LmZlYXR1cmVzW25dLGUsbik7ZWxzZSJGZWF0dXJlIj09PXQudHlwZT90dChyLHQsZSk6dHQocix7Z2VvbWV0cnk6dH0sZSk7cmV0dXJuIHJ9KHQsZSk7dGhpcy50aWxlcz17fSx0aGlzLnRpbGVDb29yZHM9W10sciYmKGNvbnNvbGUudGltZUVuZCgicHJlcHJvY2VzcyBkYXRhIiksY29uc29sZS5sb2coImluZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZCIsZS5pbmRleE1heFpvb20sZS5pbmRleE1heFBvaW50cyksY29uc29sZS50aW1lKCJnZW5lcmF0ZSB0aWxlcyIpLHRoaXMuc3RhdHM9e30sdGhpcy50b3RhbD0wKSwobj1mdW5jdGlvbih0LGUpe3ZhciByPWUuYnVmZmVyL2UuZXh0ZW50LG49dCxpPW90KHQsMSwtMS1yLHIsMCwtMSwyLGUpLGE9b3QodCwxLDEtciwyK3IsMCwtMSwyLGUpO3JldHVybihpfHxhKSYmKG49b3QodCwxLC1yLDErciwwLC0xLDIsZSl8fFtdLGkmJihuPWR0KGksMSkuY29uY2F0KG4pKSxhJiYobj1uLmNvbmNhdChkdChhLC0xKSkpKSxufShuLGUpKS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKG4sMCwwLDApLHImJihuLmxlbmd0aCYmY29uc29sZS5sb2coImZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKCJnZW5lcmF0ZSB0aWxlcyIpLGNvbnNvbGUubG9nKCJ0aWxlcyBnZW5lcmF0ZWQ6Iix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gd3QodCxlLHIpe3JldHVybiAzMiooKDE8PHQpKnIrZSkrdH1mdW5jdGlvbiBUdCh0LGUpe3ZhciByPXQudGlsZUlELmNhbm9uaWNhbDtpZighdGhpcy5fZ2VvSlNPTkluZGV4KXJldHVybiBlKG51bGwsbnVsbCk7dmFyIG49dGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoci56LHIueCxyLnkpO2lmKCFuKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGk9bmV3IGcobi5mZWF0dXJlcyksYT1fKGkpOzA9PT1hLmJ5dGVPZmZzZXQmJmEuYnl0ZUxlbmd0aD09PWEuYnVmZmVyLmJ5dGVMZW5ndGh8fChhPW5ldyBVaW50OEFycmF5KGEpKSxlKG51bGwse3ZlY3RvclRpbGU6aSxyYXdEYXRhOmEuYnVmZmVyfSl9VS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLmxvZyxuPWUubWluWm9vbSxpPWUubWF4Wm9vbSxhPWUubm9kZVNpemU7ciYmY29uc29sZS50aW1lKCJ0b3RhbCB0aW1lIik7dmFyIG89InByZXBhcmUgIit0Lmxlbmd0aCsiIHBvaW50cyI7ciYmY29uc29sZS50aW1lKG8pLHRoaXMucG9pbnRzPXQ7Zm9yKHZhciBzPVtdLGw9MDtsPHQubGVuZ3RoO2wrKyl0W2xdLmdlb21ldHJ5JiZzLnB1c2goSCh0W2xdLGwpKTt0aGlzLnRyZWVzW2krMV09bmV3IE4ocyxaLEosYSxGbG9hdDMyQXJyYXkpLHImJmNvbnNvbGUudGltZUVuZChvKTtmb3IodmFyIGM9aTtjPj1uO2MtLSl7dmFyIHU9K0RhdGUubm93KCk7cz10aGlzLl9jbHVzdGVyKHMsYyksdGhpcy50cmVlc1tjXT1uZXcgTihzLFosSixhLEZsb2F0MzJBcnJheSksciYmY29uc29sZS5sb2coInolZDogJWQgY2x1c3RlcnMgaW4gJWRtcyIsYyxzLmxlbmd0aCwrRGF0ZS5ub3coKS11KX1yZXR1cm4gciYmY29uc29sZS50aW1lRW5kKCJ0b3RhbCB0aW1lIiksdGhpc30sVS5wcm90b3R5cGUuZ2V0Q2x1c3RlcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj0oKHRbMF0rMTgwKSUzNjArMzYwKSUzNjAtMTgwLG49TWF0aC5tYXgoLTkwLE1hdGgubWluKDkwLHRbMV0pKSxpPTE4MD09PXRbMl0/MTgwOigodFsyXSsxODApJTM2MCszNjApJTM2MC0xODAsYT1NYXRoLm1heCgtOTAsTWF0aC5taW4oOTAsdFszXSkpO2lmKHRbMl0tdFswXT49MzYwKXI9LTE4MCxpPTE4MDtlbHNlIGlmKHI+aSl7dmFyIG89dGhpcy5nZXRDbHVzdGVycyhbcixuLDE4MCxhXSxlKSxzPXRoaXMuZ2V0Q2x1c3RlcnMoWy0xODAsbixpLGFdLGUpO3JldHVybiBvLmNvbmNhdChzKX1mb3IodmFyIGw9dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oZSldLGM9W10sdT0wLGY9bC5yYW5nZShZKHIpLFcoYSksWShpKSxXKG4pKTt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV0scD1sLnBvaW50c1toXTtjLnB1c2gocC5udW1Qb2ludHM/cShwKTp0aGlzLnBvaW50c1twLmluZGV4XSl9cmV0dXJuIGN9LFUucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldE9yaWdpbklkKHQpLHI9dGhpcy5fZ2V0T3JpZ2luWm9vbSh0KSxuPSJObyBjbHVzdGVyIHdpdGggdGhlIHNwZWNpZmllZCBpZC4iLGk9dGhpcy50cmVlc1tyXTtpZighaSl0aHJvdyBuZXcgRXJyb3Iobik7dmFyIGE9aS5wb2ludHNbZV07aWYoIWEpdGhyb3cgbmV3IEVycm9yKG4pO2Zvcih2YXIgbz10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsci0xKSkscz1bXSxsPTAsYz1pLndpdGhpbihhLngsYS55LG8pO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPWkucG9pbnRzW3VdO2YucGFyZW50SWQ9PT10JiZzLnB1c2goZi5udW1Qb2ludHM/cShmKTp0aGlzLnBvaW50c1tmLmluZGV4XSl9aWYoMD09PXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihuKTtyZXR1cm4gc30sVS5wcm90b3R5cGUuZ2V0TGVhdmVzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fDEwLHI9cnx8MDt2YXIgbj1bXTtyZXR1cm4gdGhpcy5fYXBwZW5kTGVhdmVzKG4sdCxlLHIsMCksbn0sVS5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20odCldLGk9TWF0aC5wb3coMix0KSxhPXRoaXMub3B0aW9ucyxvPWEuZXh0ZW50LHM9YS5yYWRpdXMvbyxsPShyLXMpL2ksYz0ocisxK3MpL2ksdT17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1zKS9pLGwsKGUrMStzKS9pLGMpLG4ucG9pbnRzLGUscixpLHUpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLXMvaSxsLDEsYyksbi5wb2ludHMsaSxyLGksdSksZT09PWktMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxsLHMvaSxjKSxuLnBvaW50cywtMSxyLGksdSksdS5mZWF0dXJlcy5sZW5ndGg/dTpudWxsfSxVLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0T3JpZ2luWm9vbSh0KS0xO2U8PXRoaXMub3B0aW9ucy5tYXhab29tOyl7dmFyIHI9dGhpcy5nZXRDaGlsZHJlbih0KTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LFUucHJvdG90eXBlLl9hcHBlbmRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPXRoaXMuZ2V0Q2hpbGRyZW4oZSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5wcm9wZXJ0aWVzO2lmKGwmJmwuY2x1c3Rlcj9pK2wucG9pbnRfY291bnQ8PW4/aSs9bC5wb2ludF9jb3VudDppPXRoaXMuX2FwcGVuZExlYXZlcyh0LGwuY2x1c3Rlcl9pZCxyLG4saSk6aTxuP2krKzp0LnB1c2gocyksdC5sZW5ndGg9PT1yKWJyZWFrfXJldHVybiBpfSxVLnByb3RvdHlwZS5fYWRkVGlsZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1lW3Nbb11dLGM9bC5udW1Qb2ludHMsdT17dHlwZToxLGdlb21ldHJ5OltbTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihsLngqaS1yKSksTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihsLnkqaS1uKSldXSx0YWdzOmM/RyhsKTp0aGlzLnBvaW50c1tsLmluZGV4XS5wcm9wZXJ0aWVzfSxmPXZvaWQgMDtjP2Y9bC5pZDp0aGlzLm9wdGlvbnMuZ2VuZXJhdGVJZD9mPWwuaW5kZXg6dGhpcy5wb2ludHNbbC5pbmRleF0uaWQmJihmPXRoaXMucG9pbnRzW2wuaW5kZXhdLmlkKSx2b2lkIDAhPT1mJiYodS5pZD1mKSxhLmZlYXR1cmVzLnB1c2godSl9fSxVLnByb3RvdHlwZS5fbGltaXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSxNYXRoLm1pbih0LHRoaXMub3B0aW9ucy5tYXhab29tKzEpKX0sVS5wcm90b3R5cGUuX2NsdXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10aGlzLm9wdGlvbnMsaT1uLnJhZGl1cyxhPW4uZXh0ZW50LG89bi5yZWR1Y2Uscz1pLyhhKk1hdGgucG93KDIsZSkpLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXTtpZighKGMuem9vbTw9ZSkpe2Muem9vbT1lO2Zvcih2YXIgdT10aGlzLnRyZWVzW2UrMV0sZj11LndpdGhpbihjLngsYy55LHMpLGg9Yy5udW1Qb2ludHN8fDEscD1jLngqaCxkPWMueSpoLG09byYmaD4xP3RoaXMuX21hcChjLCEwKTpudWxsLGc9KGw8PDUpKyhlKzEpK3RoaXMucG9pbnRzLmxlbmd0aCx2PTAseT1mO3Y8eS5sZW5ndGg7dis9MSl7dmFyIHg9eVt2XSxiPXUucG9pbnRzW3hdO2lmKCEoYi56b29tPD1lKSl7Yi56b29tPWU7dmFyIF89Yi5udW1Qb2ludHN8fDE7cCs9Yi54Kl8sZCs9Yi55Kl8saCs9XyxiLnBhcmVudElkPWcsbyYmKG18fChtPXRoaXMuX21hcChjLCEwKSksbyhtLHRoaXMuX21hcChiKSkpfX0xPT09aD9yLnB1c2goYyk6KGMucGFyZW50SWQ9ZyxyLnB1c2goVihwL2gsZC9oLGcsaCxtKSkpfX1yZXR1cm4gcn0sVS5wcm90b3R5cGUuX2dldE9yaWdpbklkPWZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMucG9pbnRzLmxlbmd0aD4+NX0sVS5wcm90b3R5cGUuX2dldE9yaWdpblpvb209ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy5wb2ludHMubGVuZ3RoKSUzMn0sVS5wcm90b3R5cGUuX21hcD1mdW5jdGlvbih0LGUpe2lmKHQubnVtUG9pbnRzKXJldHVybiBlP1goe30sdC5wcm9wZXJ0aWVzKTp0LnByb3BlcnRpZXM7dmFyIHI9dGhpcy5wb2ludHNbdC5pbmRleF0ucHJvcGVydGllcyxuPXRoaXMub3B0aW9ucy5tYXAocik7cmV0dXJuIGUmJm49PT1yP1goe30sbik6bn0sX3QucHJvdG90eXBlLm9wdGlvbnM9e21heFpvb206MTQsaW5kZXhNYXhab29tOjUsaW5kZXhNYXhQb2ludHM6MWU1LHRvbGVyYW5jZTozLGV4dGVudDo0MDk2LGJ1ZmZlcjo2NCxsaW5lTWV0cmljczohMSxwcm9tb3RlSWQ6bnVsbCxnZW5lcmF0ZUlkOiExLGRlYnVnOjB9LF90LnByb3RvdHlwZS5zcGxpdFRpbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPVt0LGUscixuXSxsPXRoaXMub3B0aW9ucyxjPWwuZGVidWc7cy5sZW5ndGg7KXtuPXMucG9wKCkscj1zLnBvcCgpLGU9cy5wb3AoKSx0PXMucG9wKCk7dmFyIHU9MTw8ZSxmPXd0KGUscixuKSxoPXRoaXMudGlsZXNbZl07aWYoIWgmJihjPjEmJmNvbnNvbGUudGltZSgiY3JlYXRpb24iKSxoPXRoaXMudGlsZXNbZl09eXQodCxlLHIsbixsKSx0aGlzLnRpbGVDb29yZHMucHVzaCh7ejplLHg6cix5Om59KSxjKSl7Yz4xJiYoY29uc29sZS5sb2coInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKSIsZSxyLG4saC5udW1GZWF0dXJlcyxoLm51bVBvaW50cyxoLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZCgiY3JlYXRpb24iKSk7dmFyIHA9InoiK2U7dGhpcy5zdGF0c1twXT0odGhpcy5zdGF0c1twXXx8MCkrMSx0aGlzLnRvdGFsKyt9aWYoaC5zb3VyY2U9dCxpKXtpZihlPT09bC5tYXhab29tfHxlPT09aSljb250aW51ZTt2YXIgZD0xPDxpLWU7aWYociE9PU1hdGguZmxvb3IoYS9kKXx8biE9PU1hdGguZmxvb3Ioby9kKSljb250aW51ZX1lbHNlIGlmKGU9PT1sLmluZGV4TWF4Wm9vbXx8aC5udW1Qb2ludHM8PWwuaW5kZXhNYXhQb2ludHMpY29udGludWU7aWYoaC5zb3VyY2U9bnVsbCwwIT09dC5sZW5ndGgpe2M+MSYmY29uc29sZS50aW1lKCJjbGlwcGluZyIpO3ZhciBtLGcsdix5LHgsYixfPS41KmwuYnVmZmVyL2wuZXh0ZW50LHc9LjUtXyxUPS41K18saz0xK187bT1nPXY9eT1udWxsLHg9b3QodCx1LHItXyxyK1QsMCxoLm1pblgsaC5tYXhYLGwpLGI9b3QodCx1LHIrdyxyK2ssMCxoLm1pblgsaC5tYXhYLGwpLHQ9bnVsbCx4JiYobT1vdCh4LHUsbi1fLG4rVCwxLGgubWluWSxoLm1heFksbCksZz1vdCh4LHUsbit3LG4raywxLGgubWluWSxoLm1heFksbCkseD1udWxsKSxiJiYodj1vdChiLHUsbi1fLG4rVCwxLGgubWluWSxoLm1heFksbCkseT1vdChiLHUsbit3LG4raywxLGgubWluWSxoLm1heFksbCksYj1udWxsKSxjPjEmJmNvbnNvbGUudGltZUVuZCgiY2xpcHBpbmciKSxzLnB1c2gobXx8W10sZSsxLDIqciwyKm4pLHMucHVzaChnfHxbXSxlKzEsMipyLDIqbisxKSxzLnB1c2godnx8W10sZSsxLDIqcisxLDIqbikscy5wdXNoKHl8fFtdLGUrMSwyKnIrMSwyKm4rMSl9fX0sX3QucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LGE9bi5kZWJ1ZztpZih0PDB8fHQ+MjQpcmV0dXJuIG51bGw7dmFyIG89MTw8dCxzPXd0KHQsZT0oZSVvK28pJW8scik7aWYodGhpcy50aWxlc1tzXSlyZXR1cm4gZ3QodGhpcy50aWxlc1tzXSxpKTthPjEmJmNvbnNvbGUubG9nKCJkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZCIsdCxlLHIpO2Zvcih2YXIgbCxjPXQsdT1lLGY9cjshbCYmYz4wOyljLS0sdT1NYXRoLmZsb29yKHUvMiksZj1NYXRoLmZsb29yKGYvMiksbD10aGlzLnRpbGVzW3d0KGMsdSxmKV07cmV0dXJuIGwmJmwuc291cmNlPyhhPjEmJmNvbnNvbGUubG9nKCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWQiLGMsdSxmKSxhPjEmJmNvbnNvbGUudGltZSgiZHJpbGxpbmcgZG93biIpLHRoaXMuc3BsaXRUaWxlKGwuc291cmNlLGMsdSxmLHQsZSxyKSxhPjEmJmNvbnNvbGUudGltZUVuZCgiZHJpbGxpbmcgZG93biIpLHRoaXMudGlsZXNbc10/Z3QodGhpcy50aWxlc1tzXSxpKTpudWxsKTpudWxsfTt2YXIga3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbixUdCksaSYmKHRoaXMubG9hZEdlb0pTT049aSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWREYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksdGhpcy5fcGVuZGluZ0NhbGxiYWNrPWUsdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zPXQsdGhpcy5fc3RhdGUmJiJJZGxlIiE9PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPSJOZWVkc0xvYWREYXRhIjoodGhpcy5fc3RhdGU9IkNvYWxlc2NpbmciLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5fbG9hZERhdGE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zKXt2YXIgcj10aGlzLl9wZW5kaW5nQ2FsbGJhY2ssbj10aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7ZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjayxkZWxldGUgdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zO3ZhciBpPSEhKG4mJm4ucmVxdWVzdCYmbi5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZykmJm5ldyB0LlJlcXVlc3RQZXJmb3JtYW5jZShuLnJlcXVlc3QpO3RoaXMubG9hZEdlb0pTT04obiwoZnVuY3Rpb24oYSxvKXtpZihhfHwhbylyZXR1cm4gcihhKTtpZigib2JqZWN0IiE9dHlwZW9mIG8pcmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGdpdmVuIHRvICciK24uc291cmNlKyInIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTtmKG8sITApO3RyeXtlLl9nZW9KU09OSW5kZXg9bi5jbHVzdGVyP25ldyBVKGZ1bmN0aW9uKGUpe3ZhciByPWUuc3VwZXJjbHVzdGVyT3B0aW9ucyxuPWUuY2x1c3RlclByb3BlcnRpZXM7aWYoIW58fCFyKXJldHVybiByO2Zvcih2YXIgaT17fSxhPXt9LG89e2FjY3VtdWxhdGVkOm51bGwsem9vbTowfSxzPXtwcm9wZXJ0aWVzOm51bGx9LGw9T2JqZWN0LmtleXMobiksYz0wLHU9bDtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD1uW2ZdLHA9aFswXSxkPWhbMV0sbT10LmNyZWF0ZUV4cHJlc3Npb24oZCksZz10LmNyZWF0ZUV4cHJlc3Npb24oInN0cmluZyI9PXR5cGVvZiBwP1twLFsiYWNjdW11bGF0ZWQiXSxbImdldCIsZl1dOnApO2lbZl09bS52YWx1ZSxhW2ZdPWcudmFsdWV9cmV0dXJuIHIubWFwPWZ1bmN0aW9uKHQpe3MucHJvcGVydGllcz10O2Zvcih2YXIgZT17fSxyPTAsbj1sO3I8bi5sZW5ndGg7cis9MSl7dmFyIGE9bltyXTtlW2FdPWlbYV0uZXZhbHVhdGUobyxzKX1yZXR1cm4gZX0sci5yZWR1Y2U9ZnVuY3Rpb24odCxlKXtzLnByb3BlcnRpZXM9ZTtmb3IodmFyIHI9MCxuPWw7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO28uYWNjdW11bGF0ZWQ9dFtpXSx0W2ldPWFbaV0uZXZhbHVhdGUobyxzKX19LHJ9KG4pKS5sb2FkKG8uZmVhdHVyZXMpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBfdCh0LGUpfShvLG4uZ2VvanNvblZ0T3B0aW9ucyl9Y2F0Y2goYSl7cmV0dXJuIHIoYSl9ZS5sb2FkZWQ9e307dmFyIHM9e307aWYoaSl7dmFyIGw9aS5maW5pc2goKTtsJiYocy5yZXNvdXJjZVRpbWluZz17fSxzLnJlc291cmNlVGltaW5nW24uc291cmNlXT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGwpKSl9cihudWxsLHMpfSkpfX0sci5wcm90b3R5cGUuY29hbGVzY2U9ZnVuY3Rpb24oKXsiQ29hbGVzY2luZyI9PT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT0iSWRsZSI6Ik5lZWRzTG9hZERhdGEiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmxvYWRlZCxpPXQudWlkO3JldHVybiBuJiZuW2ldP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGdpdmVuIHRvICciK2Uuc291cmNlKyInIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIHIobnVsbCxKU09OLnBhcnNlKGUuZGF0YSkpfWNhdGNoKHQpe3JldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBnaXZlbiB0byAnIitlLnNvdXJjZSsiJyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldENsdXN0ZXJFeHBhbnNpb25ab29tKHQuY2x1c3RlcklkKSl9Y2F0Y2godCl7ZSh0KX19LHIucHJvdG90eXBlLmdldENsdXN0ZXJDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldENoaWxkcmVuKHQuY2x1c3RlcklkKSl9Y2F0Y2godCl7ZSh0KX19LHIucHJvdG90eXBlLmdldENsdXN0ZXJMZWF2ZXM9ZnVuY3Rpb24odCxlKXt0cnl7ZShudWxsLHRoaXMuX2dlb0pTT05JbmRleC5nZXRMZWF2ZXModC5jbHVzdGVySWQsdC5saW1pdCx0Lm9mZnNldCkpfWNhdGNoKHQpe2UodCl9fSxyfShsKTt2YXIgQXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLnNlbGY9ZSx0aGlzLmFjdG9yPW5ldyB0LkFjdG9yKGUsdGhpcyksdGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy5hdmFpbGFibGVJbWFnZXM9e30sdGhpcy53b3JrZXJTb3VyY2VUeXBlcz17dmVjdG9yOmwsZ2VvanNvbjprdH0sdGhpcy53b3JrZXJTb3VyY2VzPXt9LHRoaXMuZGVtV29ya2VyU291cmNlcz17fSx0aGlzLnNlbGYucmVnaXN0ZXJXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtpZihyLndvcmtlclNvdXJjZVR5cGVzW3RdKXRocm93IG5ldyBFcnJvcignV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgIicrdCsnIiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7ci53b3JrZXJTb3VyY2VUeXBlc1t0XT1lfSx0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKGUpe2lmKHQucGx1Z2luLmlzUGFyc2VkKCkpdGhyb3cgbmV3IEVycm9yKCJSVEwgdGV4dCBwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkLiIpO3QucGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZz1lLmFwcGx5QXJhYmljU2hhcGluZyx0LnBsdWdpbi5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQsdC5wbHVnaW4ucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0PWUucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0fX07cmV0dXJuIEF0LnByb3RvdHlwZS5zZXRSZWZlcnJlcj1mdW5jdGlvbih0LGUpe3RoaXMucmVmZXJyZXI9ZX0sQXQucHJvdG90eXBlLnNldEltYWdlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHRoaXMuYXZhaWxhYmxlSW1hZ2VzW3RdPWUsdGhpcy53b3JrZXJTb3VyY2VzW3RdKXt2YXIgaT10aGlzLndvcmtlclNvdXJjZXNbdF1bbl07Zm9yKHZhciBhIGluIGkpaVthXS5hdmFpbGFibGVJbWFnZXM9ZX1yKCl9LEF0LnByb3RvdHlwZS5zZXRMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS5yZXBsYWNlKGUpLHIoKX0sQXQucHJvdG90eXBlLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnVwZGF0ZShlLmxheWVycyxlLnJlbW92ZWRJZHMpLHIoKX0sQXQucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sQXQucHJvdG90eXBlLmxvYWRERU1UaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldERFTVdvcmtlclNvdXJjZSh0LGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxBdC5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLnJlbG9hZFRpbGUoZSxyKX0sQXQucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmFib3J0VGlsZShlLHIpfSxBdC5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSxyKX0sQXQucHJvdG90eXBlLnJlbW92ZURFTVRpbGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdldERFTVdvcmtlclNvdXJjZSh0LGUuc291cmNlKS5yZW1vdmVUaWxlKGUpfSxBdC5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLndvcmtlclNvdXJjZXNbdF0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0pe3ZhciBuPXRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXTtkZWxldGUgdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdLHZvaWQgMCE9PW4ucmVtb3ZlU291cmNlP24ucmVtb3ZlU291cmNlKGUscik6cigpfX0sQXQucHJvdG90eXBlLmxvYWRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3RyeXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhlLnVybCkscigpfWNhdGNoKHQpe3IodC50b1N0cmluZygpKX19LEF0LnByb3RvdHlwZS5zeW5jUlRMUGx1Z2luU3RhdGU9ZnVuY3Rpb24oZSxyLG4pe3RyeXt0LnBsdWdpbi5zZXRTdGF0ZShyKTt2YXIgaT10LnBsdWdpbi5nZXRQbHVnaW5VUkwoKTtpZih0LnBsdWdpbi5pc0xvYWRlZCgpJiYhdC5wbHVnaW4uaXNQYXJzZWQoKSYmbnVsbCE9aSl7dGhpcy5zZWxmLmltcG9ydFNjcmlwdHMoaSk7dmFyIGE9dC5wbHVnaW4uaXNQYXJzZWQoKTtuKGE/dm9pZCAwOm5ldyBFcnJvcigiUlRMIFRleHQgUGx1Z2luIGZhaWxlZCB0byBpbXBvcnQgc2NyaXB0cyBmcm9tICIraSksYSl9fWNhdGNoKHQpe24odC50b1N0cmluZygpKX19LEF0LnByb3RvdHlwZS5nZXRBdmFpbGFibGVJbWFnZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hdmFpbGFibGVJbWFnZXNbdF07cmV0dXJuIGV8fChlPVtdKSxlfSxBdC5wcm90b3R5cGUuZ2V0TGF5ZXJJbmRleD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVySW5kZXhlc1t0XTtyZXR1cm4gZXx8KGU9dGhpcy5sYXllckluZGV4ZXNbdF09bmV3IG4pLGV9LEF0LnByb3RvdHlwZS5nZXRXb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXM7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLndvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLndvcmtlclNvdXJjZXNbdF1bZV09e30pLCF0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl0pe3ZhciBpPXtzZW5kOmZ1bmN0aW9uKGUscixpKXtuLmFjdG9yLnNlbmQoZSxyLGksdCl9fTt0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl09bmV3IHRoaXMud29ya2VyU291cmNlVHlwZXNbZV0oaSx0aGlzLmdldExheWVySW5kZXgodCksdGhpcy5nZXRBdmFpbGFibGVJbWFnZXModCkpfXJldHVybiB0aGlzLndvcmtlclNvdXJjZXNbdF1bZV1bcl19LEF0LnByb3RvdHlwZS5nZXRERU1Xb3JrZXJTb3VyY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV09bmV3IHUpLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXX0sQXQucHJvdG90eXBlLmVuZm9yY2VDYWNoZVNpemVMaW1pdD1mdW5jdGlvbihlLHIpe3QuZW5mb3JjZUNhY2hlU2l6ZUxpbWl0KHIpfSwidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ2b2lkIDAhPT10LndpbmRvdyYmdC53aW5kb3cgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmKHQud2luZG93Lndvcmtlcj1uZXcgQXQodC53aW5kb3cpKSxBdH0pKSxuKDAsKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3JlYXRlQ29tbW9uanNNb2R1bGUoKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuIXIodCl9ZnVuY3Rpb24gcih0KXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8InVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudD8ibm90IGEgYnJvd3NlciI6QXJyYXkucHJvdG90eXBlJiZBcnJheS5wcm90b3R5cGUuZXZlcnkmJkFycmF5LnByb3RvdHlwZS5maWx0ZXImJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoJiZBcnJheS5wcm90b3R5cGUuaW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mJiZBcnJheS5wcm90b3R5cGUubWFwJiZBcnJheS5wcm90b3R5cGUuc29tZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0JiZBcnJheS5pc0FycmF5P0Z1bmN0aW9uLnByb3RvdHlwZSYmRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ/T2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zPyJKU09OImluIHdpbmRvdyYmInBhcnNlImluIEpTT04mJiJzdHJpbmdpZnkiaW4gSlNPTj9mdW5jdGlvbigpe2lmKCEoIldvcmtlciJpbiB3aW5kb3cmJiJCbG9iImluIHdpbmRvdyYmIlVSTCJpbiB3aW5kb3cpKXJldHVybiExO3ZhciB0LGUscj1uZXcgQmxvYihbIiJdLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpO3RyeXtlPW5ldyBXb3JrZXIobiksdD0hMH1jYXRjaChlKXt0PSExfWUmJmUudGVybWluYXRlKCk7cmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwobiksdH0oKT8iVWludDhDbGFtcGVkQXJyYXkiaW4gd2luZG93P0FycmF5QnVmZmVyLmlzVmlldz9mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Qud2lkdGg9dC5oZWlnaHQ9MTt2YXIgZT10LmdldENvbnRleHQoIjJkIik7aWYoIWUpcmV0dXJuITE7dmFyIHI9ZS5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIHImJnIud2lkdGg9PT10LndpZHRofSgpP2Z1bmN0aW9uKHQpe3ZvaWQgMD09PW5bdF0mJihuW3RdPWZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG49T2JqZWN0LmNyZWF0ZShlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO3JldHVybiBuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9dCxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0P3IucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoIndlYmdsIixuKXx8ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLnN1cHBvcnRzQ29udGV4dD9yLnN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLmdldENvbnRleHQoIndlYmdsIixuKXx8ci5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pfSh0KTtpZighcilyZXR1cm4hMTt2YXIgbj1yLmNyZWF0ZVNoYWRlcihyLlZFUlRFWF9TSEFERVIpO2lmKCFufHxyLmlzQ29udGV4dExvc3QoKSlyZXR1cm4hMTtyZXR1cm4gci5zaGFkZXJTb3VyY2Uobiwidm9pZCBtYWluKCkge30iKSxyLmNvbXBpbGVTaGFkZXIobiksITA9PT1yLmdldFNoYWRlclBhcmFtZXRlcihuLHIuQ09NUElMRV9TVEFUVVMpfSh0KSk7cmV0dXJuIG5bdF19KHQmJnQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCk/dm9pZCAwOiJpbnN1ZmZpY2llbnQgV2ViR0wgc3VwcG9ydCI6Imluc3VmZmljaWVudCBDYW52YXMvZ2V0SW1hZ2VEYXRhIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgQXJyYXlCdWZmZXIgc3VwcG9ydCI6Imluc3VmZmljaWVudCBVaW50OENsYW1wZWRBcnJheSBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IHdvcmtlciBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IEpTT04gc3VwcG9ydCI6Imluc3VmZmljaWVudCBPYmplY3Qgc3VwcG9ydCI6Imluc3VmZmljaWVudCBGdW5jdGlvbiBzdXBwb3J0IjoiaW5zdWZmaWNlbnQgQXJyYXkgc3VwcG9ydCJ9dC5leHBvcnRzP3QuZXhwb3J0cz1lOndpbmRvdyYmKHdpbmRvdy5tYXBib3hnbD13aW5kb3cubWFwYm94Z2x8fHt9LHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQ9ZSx3aW5kb3cubWFwYm94Z2wubm90U3VwcG9ydGVkUmVhc29uPXIpO3ZhciBuPXt9O2Uud2ViR0xDb250ZXh0QXR0cmlidXRlcz17YW50aWFsaWFzOiExLGFscGhhOiEwLHN0ZW5jaWw6ITAsZGVwdGg6ITB9fSkpLHI9e2NyZWF0ZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gdm9pZCAwIT09ciYmKGkuY2xhc3NOYW1lPXIpLG4mJm4uYXBwZW5kQ2hpbGQoaSksaX0sY3JlYXRlTlM6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUscil9fSxuPXQud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtmdW5jdGlvbiBpKHQpe2lmKCFuKXJldHVybiB0WzBdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV1pbiBuKXJldHVybiB0W2VdO3JldHVybiB0WzBdfXZhciBhLG89aShbInVzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwiV2Via2l0VXNlclNlbGVjdCIsIm1zVXNlclNlbGVjdCJdKTtyLmRpc2FibGVEcmFnPWZ1bmN0aW9uKCl7biYmbyYmKGE9bltvXSxuW29dPSJub25lIil9LHIuZW5hYmxlRHJhZz1mdW5jdGlvbigpe24mJm8mJihuW29dPWEpfTt2YXIgcz1pKFsidHJhbnNmb3JtIiwiV2Via2l0VHJhbnNmb3JtIl0pO3Iuc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtzXT1lfTt2YXIgbD0hMTt0cnl7dmFyIGM9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7bD0hMH19KTt0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixjLGMpLHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLGMsYyl9Y2F0Y2godCl7bD0hMX1yLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49e30pLCJwYXNzaXZlImluIG4mJmw/dC5hZGRFdmVudExpc3RlbmVyKGUscixuKTp0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4uY2FwdHVyZSl9LHIucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksInBhc3NpdmUiaW4gbiYmbD90LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLG4pOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX07dmFyIHU9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHUsITApfTtmdW5jdGlvbiBmKHQpe3ZhciBlPXQudXNlckltYWdlO2lmKGUmJmUucmVuZGVyJiZlLnJlbmRlcigpKXJldHVybiB0LmRhdGEucmVwbGFjZShuZXcgVWludDhBcnJheShlLmRhdGEuYnVmZmVyKSksITA7cmV0dXJuITF9ci5zdXBwcmVzc0NsaWNrPWZ1bmN0aW9uKCl7dC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHUsITApLHQud2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHUsITApfSksMCl9LHIubW91c2VQb3M9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuZXcgdC5Qb2ludChyLmNsaWVudFgtbi5sZWZ0LWUuY2xpZW50TGVmdCxyLmNsaWVudFktbi50b3AtZS5jbGllbnRUb3ApfSxyLnRvdWNoUG9zPWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1bXSxhPTA7YTxyLmxlbmd0aDthKyspaS5wdXNoKG5ldyB0LlBvaW50KHJbYV0uY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHJbYV0uY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCkpO3JldHVybiBpfSxyLm1vdXNlQnV0dG9uPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10LndpbmRvdy5JbnN0YWxsVHJpZ2dlciYmMj09PWUuYnV0dG9uJiZlLmN0cmxLZXkmJnQud2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIk1BQyIpPj0wPzA6ZS5idXR0b259LHIucmVtb3ZlPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfTt2YXIgaD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7ZS5jYWxsKHRoaXMpLHRoaXMuaW1hZ2VzPXt9LHRoaXMudXBkYXRlZEltYWdlcz17fSx0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZT17fSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJlcXVlc3RvcnM9W10sdGhpcy5wYXR0ZXJucz17fSx0aGlzLmF0bGFzSW1hZ2U9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDoxLGhlaWdodDoxfSksdGhpcy5kaXJ0eT0hMH1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuaXNMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkZWR9LHIucHJvdG90eXBlLnNldExvYWRlZD1mdW5jdGlvbih0KXtpZih0aGlzLmxvYWRlZCE9PXQmJih0aGlzLmxvYWRlZD10LHQpKXtmb3IodmFyIGU9MCxyPXRoaXMucmVxdWVzdG9ycztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uLmlkcyxhPW4uY2FsbGJhY2s7dGhpcy5fbm90aWZ5KGksYSl9dGhpcy5yZXF1ZXN0b3JzPVtdfX0sci5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1hZ2VzW3RdfSxyLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbGlkYXRlKHQsZSkmJih0aGlzLmltYWdlc1t0XT1lKX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscil7dmFyIG49ITA7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3RyZXRjaChyLnN0cmV0Y2hYLHIuZGF0YSYmci5kYXRhLndpZHRoKXx8KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignSW1hZ2UgIicrZSsnIiBoYXMgaW52YWxpZCAic3RyZXRjaFgiIHZhbHVlJykpKSxuPSExKSx0aGlzLl92YWxpZGF0ZVN0cmV0Y2goci5zdHJldGNoWSxyLmRhdGEmJnIuZGF0YS5oZWlnaHQpfHwodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdJbWFnZSAiJytlKyciIGhhcyBpbnZhbGlkICJzdHJldGNoWSIgdmFsdWUnKSkpLG49ITEpLHRoaXMuX3ZhbGlkYXRlQ29udGVudChyLmNvbnRlbnQscil8fCh0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0ltYWdlICInK2UrJyIgaGFzIGludmFsaWQgImNvbnRlbnQiIHZhbHVlJykpKSxuPSExKSxufSxyLnByb3RvdHlwZS5fdmFsaWRhdGVTdHJldGNoPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuITA7Zm9yKHZhciByPTAsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07aWYoYVswXTxyfHxhWzFdPGFbMF18fGU8YVsxXSlyZXR1cm4hMTtyPWFbMV19cmV0dXJuITB9LHIucHJvdG90eXBlLl92YWxpZGF0ZUNvbnRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4hdHx8ND09PXQubGVuZ3RoJiYoISh0WzBdPDB8fGUuZGF0YS53aWR0aDx0WzBdKSYmKCEodFsxXTwwfHxlLmRhdGEuaGVpZ2h0PHRbMV0pJiYoISh0WzJdPDB8fGUuZGF0YS53aWR0aDx0WzJdKSYmKCEodFszXTwwfHxlLmRhdGEuaGVpZ2h0PHRbM10pJiYoISh0WzJdPHRbMF0pJiYhKHRbM108dFsxXSkpKSkpKX0sci5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmltYWdlc1t0XTtlLnZlcnNpb249ci52ZXJzaW9uKzEsdGhpcy5pbWFnZXNbdF09ZSx0aGlzLnVwZGF0ZWRJbWFnZXNbdF09ITB9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1hZ2VzW3RdO2RlbGV0ZSB0aGlzLmltYWdlc1t0XSxkZWxldGUgdGhpcy5wYXR0ZXJuc1t0XSxlLnVzZXJJbWFnZSYmZS51c2VySW1hZ2Uub25SZW1vdmUmJmUudXNlckltYWdlLm9uUmVtb3ZlKCl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbWFnZXMpfSxyLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtpZighdGhpcy5pc0xvYWRlZCgpKWZvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5pbWFnZXNbYV18fChyPSExKX10aGlzLmlzTG9hZGVkKCl8fHI/dGhpcy5fbm90aWZ5KHQsZSk6dGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkczp0LGNhbGxiYWNrOmV9KX0sci5wcm90b3R5cGUuX25vdGlmeT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt0aGlzLmltYWdlc1tvXXx8dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJzdHlsZWltYWdlbWlzc2luZyIse2lkOm99KSk7dmFyIHM9dGhpcy5pbWFnZXNbb107cz9uW29dPXtkYXRhOnMuZGF0YS5jbG9uZSgpLHBpeGVsUmF0aW86cy5waXhlbFJhdGlvLHNkZjpzLnNkZix2ZXJzaW9uOnMudmVyc2lvbixzdHJldGNoWDpzLnN0cmV0Y2hYLHN0cmV0Y2hZOnMuc3RyZXRjaFksY29udGVudDpzLmNvbnRlbnQsaGFzUmVuZGVyQ2FsbGJhY2s6Qm9vbGVhbihzLnVzZXJJbWFnZSYmcy51c2VySW1hZ2UucmVuZGVyKX06dC53YXJuT25jZSgnSW1hZ2UgIicrbysnIiBjb3VsZCBub3QgYmUgbG9hZGVkLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGFkZGVkIHRoZSBpbWFnZSB3aXRoIG1hcC5hZGRJbWFnZSgpIG9yIGEgInNwcml0ZSIgcHJvcGVydHkgaW4geW91ciBzdHlsZS4gWW91IGNhbiBwcm92aWRlIG1pc3NpbmcgaW1hZ2VzIGJ5IGxpc3RlbmluZyBmb3IgdGhlICJzdHlsZWltYWdlbWlzc2luZyIgbWFwIGV2ZW50LicpfXIobnVsbCxuKX0sci5wcm90b3R5cGUuZ2V0UGl4ZWxTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdGxhc0ltYWdlO3JldHVybnt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19LHIucHJvdG90eXBlLmdldFBhdHRlcm49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5wYXR0ZXJuc1tlXSxuPXRoaXMuZ2V0SW1hZ2UoZSk7aWYoIW4pcmV0dXJuIG51bGw7aWYociYmci5wb3NpdGlvbi52ZXJzaW9uPT09bi52ZXJzaW9uKXJldHVybiByLnBvc2l0aW9uO2lmKHIpci5wb3NpdGlvbi52ZXJzaW9uPW4udmVyc2lvbjtlbHNle3ZhciBpPXt3Om4uZGF0YS53aWR0aCsyLGg6bi5kYXRhLmhlaWdodCsyLHg6MCx5OjB9LGE9bmV3IHQuSW1hZ2VQb3NpdGlvbihpLG4pO3RoaXMucGF0dGVybnNbZV09e2JpbjppLHBvc2l0aW9uOmF9fXJldHVybiB0aGlzLl91cGRhdGVQYXR0ZXJuQXRsYXMoKSx0aGlzLnBhdHRlcm5zW2VdLnBvc2l0aW9ufSxyLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUpe3ZhciByPWUuZ2w7dGhpcy5hdGxhc1RleHR1cmU/dGhpcy5kaXJ0eSYmKHRoaXMuYXRsYXNUZXh0dXJlLnVwZGF0ZSh0aGlzLmF0bGFzSW1hZ2UpLHRoaXMuZGlydHk9ITEpOnRoaXMuYXRsYXNUZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLmF0bGFzSW1hZ2Usci5SR0JBKSx0aGlzLmF0bGFzVGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSl9LHIucHJvdG90eXBlLl91cGRhdGVQYXR0ZXJuQXRsYXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdGhpcy5wYXR0ZXJucyllLnB1c2godGhpcy5wYXR0ZXJuc1tyXS5iaW4pO3ZhciBuPXQucG90cGFjayhlKSxpPW4udyxhPW4uaCxvPXRoaXMuYXRsYXNJbWFnZTtmb3IodmFyIHMgaW4gby5yZXNpemUoe3dpZHRoOml8fDEsaGVpZ2h0OmF8fDF9KSx0aGlzLnBhdHRlcm5zKXt2YXIgbD10aGlzLnBhdHRlcm5zW3NdLmJpbixjPWwueCsxLHU9bC55KzEsZj10aGlzLmltYWdlc1tzXS5kYXRhLGg9Zi53aWR0aCxwPWYuaGVpZ2h0O3QuUkdCQUltYWdlLmNvcHkoZixvLHt4OjAseTowfSx7eDpjLHk6dX0se3dpZHRoOmgsaGVpZ2h0OnB9KSx0LlJHQkFJbWFnZS5jb3B5KGYsbyx7eDowLHk6cC0xfSx7eDpjLHk6dS0xfSx7d2lkdGg6aCxoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkoZixvLHt4OjAseTowfSx7eDpjLHk6dStwfSx7d2lkdGg6aCxoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkoZixvLHt4OmgtMSx5OjB9LHt4OmMtMSx5OnV9LHt3aWR0aDoxLGhlaWdodDpwfSksdC5SR0JBSW1hZ2UuY29weShmLG8se3g6MCx5OjB9LHt4OmMraCx5OnV9LHt3aWR0aDoxLGhlaWdodDpwfSl9dGhpcy5kaXJ0eT0hMH0sci5wcm90b3R5cGUuYmVnaW5GcmFtZT1mdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9fSxyLnByb3RvdHlwZS5kaXNwYXRjaFJlbmRlckNhbGxiYWNrcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCF0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtuXSl7dGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbbl09ITA7dmFyIGk9dGhpcy5pbWFnZXNbbl07ZihpKSYmdGhpcy51cGRhdGVJbWFnZShuLGkpfX19LHJ9KHQuRXZlbnRlZCk7dmFyIHA9ZyxkPWcsbT0xZTIwO2Z1bmN0aW9uIGcodCxlLHIsbixpLGEpe3RoaXMuZm9udFNpemU9dHx8MjQsdGhpcy5idWZmZXI9dm9pZCAwPT09ZT8zOmUsdGhpcy5jdXRvZmY9bnx8LjI1LHRoaXMuZm9udEZhbWlseT1pfHwic2Fucy1zZXJpZiIsdGhpcy5mb250V2VpZ2h0PWF8fCJub3JtYWwiLHRoaXMucmFkaXVzPXJ8fDg7dmFyIG89dGhpcy5zaXplPXRoaXMuZm9udFNpemUrMip0aGlzLmJ1ZmZlcjt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLmNhbnZhcy5oZWlnaHQ9byx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMuY3R4LmZvbnQ9dGhpcy5mb250V2VpZ2h0KyIgIit0aGlzLmZvbnRTaXplKyJweCAiK3RoaXMuZm9udEZhbWlseSx0aGlzLmN0eC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsdGhpcy5jdHguZmlsbFN0eWxlPSJibGFjayIsdGhpcy5ncmlkT3V0ZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZ3JpZElubmVyPW5ldyBGbG9hdDY0QXJyYXkobypvKSx0aGlzLmY9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLmQ9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLno9bmV3IEZsb2F0NjRBcnJheShvKzEpLHRoaXMudj1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1pZGRsZT1NYXRoLnJvdW5kKG8vMioobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJHZWNrby8iKT49MD8xLjI6MSkpfWZ1bmN0aW9uIHYodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTA7czxlO3MrKyl7Zm9yKHZhciBsPTA7bDxyO2wrKyluW2xdPXRbbCplK3NdO2Zvcih5KG4saSxhLG8sciksbD0wO2w8cjtsKyspdFtsKmUrc109aVtsXX1mb3IobD0wO2w8cjtsKyspe2ZvcihzPTA7czxlO3MrKyluW3NdPXRbbCplK3NdO2Zvcih5KG4saSxhLG8sZSkscz0wO3M8ZTtzKyspdFtsKmUrc109TWF0aC5zcXJ0KGlbc10pfX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7clswXT0wLG5bMF09LW0sblsxXT0rbTtmb3IodmFyIGE9MSxvPTA7YTxpO2ErKyl7Zm9yKHZhciBzPSh0W2FdK2EqYS0odFtyW29dXStyW29dKnJbb10pKS8oMiphLTIqcltvXSk7czw9bltvXTspby0tLHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtyWysrb109YSxuW29dPXMsbltvKzFdPSttfWZvcihhPTAsbz0wO2E8aTthKyspe2Zvcig7bltvKzFdPGE7KW8rKztlW2FdPShhLXJbb10pKihhLXJbb10pK3RbcltvXV19fWcucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCl7dGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLnNpemUsdGhpcy5zaXplKSx0aGlzLmN0eC5maWxsVGV4dCh0LHRoaXMuYnVmZmVyLHRoaXMubWlkZGxlKTtmb3IodmFyIGU9dGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnNpemUsdGhpcy5zaXplKSxyPW5ldyBVaW50OENsYW1wZWRBcnJheSh0aGlzLnNpemUqdGhpcy5zaXplKSxuPTA7bjx0aGlzLnNpemUqdGhpcy5zaXplO24rKyl7dmFyIGk9ZS5kYXRhWzQqbiszXS8yNTU7dGhpcy5ncmlkT3V0ZXJbbl09MT09PWk/MDowPT09aT9tOk1hdGgucG93KE1hdGgubWF4KDAsLjUtaSksMiksdGhpcy5ncmlkSW5uZXJbbl09MT09PWk/bTowPT09aT8wOk1hdGgucG93KE1hdGgubWF4KDAsaS0uNSksMil9Zm9yKHYodGhpcy5ncmlkT3V0ZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLHYodGhpcy5ncmlkSW5uZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgYT10aGlzLmdyaWRPdXRlcltuXS10aGlzLmdyaWRJbm5lcltuXTtyW25dPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjU1LTI1NSooYS90aGlzLnJhZGl1cyt0aGlzLmN1dG9mZikpKSl9cmV0dXJuIHJ9LHAuZGVmYXVsdD1kO3ZhciB4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZXF1ZXN0TWFuYWdlcj10LHRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PWUsdGhpcy5lbnRyaWVzPXt9fTt4LnByb3RvdHlwZS5zZXRVUkw9ZnVuY3Rpb24odCl7dGhpcy51cmw9dH0seC5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPVtdO2Zvcih2YXIgYSBpbiBlKWZvcih2YXIgbz0wLHM9ZVthXTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107aS5wdXNoKHtzdGFjazphLGlkOmx9KX10LmFzeW5jQWxsKGksKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFjayxpPXQuaWQsYT1uLmVudHJpZXNbcl07YXx8KGE9bi5lbnRyaWVzW3JdPXtnbHlwaHM6e30scmVxdWVzdHM6e30scmFuZ2VzOnt9fSk7dmFyIG89YS5nbHlwaHNbaV07aWYodm9pZCAwPT09byl7aWYobz1uLl90aW55U0RGKGEscixpKSlyZXR1cm4gYS5nbHlwaHNbaV09byx2b2lkIGUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm99KTt2YXIgcz1NYXRoLmZsb29yKGkvMjU2KTtpZigyNTYqcz42NTUzNSllKG5ldyBFcnJvcigiZ2x5cGhzID4gNjU1MzUgbm90IHN1cHBvcnRlZCIpKTtlbHNlIGlmKGEucmFuZ2VzW3NdKWUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm99KTtlbHNle3ZhciBsPWEucmVxdWVzdHNbc107bHx8KGw9YS5yZXF1ZXN0c1tzXT1bXSx4LmxvYWRHbHlwaFJhbmdlKHIscyxuLnVybCxuLnJlcXVlc3RNYW5hZ2VyLChmdW5jdGlvbih0LGUpe2lmKGUpe2Zvcih2YXIgciBpbiBlKW4uX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoK3IpfHwoYS5nbHlwaHNbK3JdPWVbK3JdKTthLnJhbmdlc1tzXT0hMH1mb3IodmFyIGk9MCxvPWw7aTxvLmxlbmd0aDtpKz0xKXsoMCxvW2ldKSh0LGUpfWRlbGV0ZSBhLnJlcXVlc3RzW3NdfSkpKSxsLnB1c2goKGZ1bmN0aW9uKHQsbil7dD9lKHQpOm4mJmUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm5baV18fG51bGx9KX0pKX19ZWxzZSBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSl9KSwoZnVuY3Rpb24odCxlKXtpZih0KXIodCk7ZWxzZSBpZihlKXtmb3IodmFyIG49e30saT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLnN0YWNrLGw9by5pZCxjPW8uZ2x5cGg7KG5bc118fChuW3NdPXt9KSlbbF09YyYme2lkOmMuaWQsYml0bWFwOmMuYml0bWFwLmNsb25lKCksbWV0cmljczpjLm1ldHJpY3N9fXIobnVsbCxuKX19KSl9LHgucHJvdG90eXBlLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkmJih0LmlzQ2hhclsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKGUpfHx0LmlzQ2hhclsiSGFuZ3VsIFN5bGxhYmxlcyJdKGUpfHx0LmlzQ2hhci5IaXJhZ2FuYShlKXx8dC5pc0NoYXIuS2F0YWthbmEoZSkpfSx4LnByb3RvdHlwZS5fdGlueVNERj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7aWYoaSYmdGhpcy5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaChuKSl7dmFyIGE9ZS50aW55U0RGO2lmKCFhKXt2YXIgbz0iNDAwIjsvYm9sZC9pLnRlc3Qocik/bz0iOTAwIjovbWVkaXVtL2kudGVzdChyKT9vPSI1MDAiOi9saWdodC9pLnRlc3QocikmJihvPSIyMDAiKSxhPWUudGlueVNERj1uZXcgeC5UaW55U0RGKDI0LDMsOCwuMjUsaSxvKX1yZXR1cm57aWQ6bixiaXRtYXA6bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MzAsaGVpZ2h0OjMwfSxhLmRyYXcoU3RyaW5nLmZyb21DaGFyQ29kZShuKSkpLG1ldHJpY3M6e3dpZHRoOjI0LGhlaWdodDoyNCxsZWZ0OjAsdG9wOi04LGFkdmFuY2U6MjR9fX19LHgubG9hZEdseXBoUmFuZ2U9ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbz0yNTYqcixzPW8rMjU1LGw9aS50cmFuc2Zvcm1SZXF1ZXN0KGkubm9ybWFsaXplR2x5cGhzVVJMKG4pLnJlcGxhY2UoIntmb250c3RhY2t9IixlKS5yZXBsYWNlKCJ7cmFuZ2V9IixvKyItIitzKSx0LlJlc291cmNlVHlwZS5HbHlwaHMpO3QuZ2V0QXJyYXlCdWZmZXIobCwoZnVuY3Rpb24oZSxyKXtpZihlKWEoZSk7ZWxzZSBpZihyKXtmb3IodmFyIG49e30saT0wLG89dC5wYXJzZUdseXBoUEJGKHIpO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtuW3MuaWRdPXN9YShudWxsLG4pfX0pKX0seC5UaW55U0RGPXA7dmFyIGI9ZnVuY3Rpb24oKXt0aGlzLnNwZWNpZmljYXRpb249dC5zdHlsZVNwZWMubGlnaHQucG9zaXRpb259O2IucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zcGhlcmljYWxUb0NhcnRlc2lhbihlLmV4cHJlc3Npb24uZXZhbHVhdGUocikpfSxiLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJue3g6dC5udW1iZXIoZS54LHIueCxuKSx5OnQubnVtYmVyKGUueSxyLnksbiksejp0Lm51bWJlcihlLnosci56LG4pfX07dmFyIF89bmV3IHQuUHJvcGVydGllcyh7YW5jaG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuc3R5bGVTcGVjLmxpZ2h0LmFuY2hvcikscG9zaXRpb246bmV3IGIsY29sb3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5zdHlsZVNwZWMubGlnaHQuY29sb3IpLGludGVuc2l0eTpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LnN0eWxlU3BlYy5saWdodC5pbnRlbnNpdHkpfSksdz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLl90cmFuc2l0aW9uYWJsZT1uZXcgdC5UcmFuc2l0aW9uYWJsZShfKSx0aGlzLnNldExpZ2h0KHIpLHRoaXMuX3RyYW5zaXRpb25pbmc9dGhpcy5fdHJhbnNpdGlvbmFibGUudW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGUuc2VyaWFsaXplKCl9LHIucHJvdG90eXBlLnNldExpZ2h0PWZ1bmN0aW9uKGUscil7aWYodm9pZCAwPT09ciYmKHI9e30pLCF0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlTGlnaHQsZSxyKSlmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTt0LmVuZHNXaXRoKG4sIi10cmFuc2l0aW9uIik/dGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VHJhbnNpdGlvbihuLnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxpKTp0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRWYWx1ZShuLGkpfX0sci5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nLmhhc1RyYW5zaXRpb24oKX0sci5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0aWVzPXRoaXMuX3RyYW5zaXRpb25pbmcucG9zc2libHlFdmFsdWF0ZSh0KX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4oIW58fCExIT09bi52YWxpZGF0ZSkmJnQuZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHt2YWx1ZTpyLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSkpfSxyfSh0LkV2ZW50ZWQpLFQ9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLm5leHRSb3c9MCx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy53aWR0aCp0aGlzLmhlaWdodCksdGhpcy5kYXNoRW50cnk9e319O1QucHJvdG90eXBlLmdldERhc2g9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmpvaW4oIiwiKStTdHJpbmcoZSk7cmV0dXJuIHRoaXMuZGFzaEVudHJ5W3JdfHwodGhpcy5kYXNoRW50cnlbcl09dGhpcy5hZGREYXNoKHQsZSkpLHRoaXMuZGFzaEVudHJ5W3JdfSxULnByb3RvdHlwZS5nZXREYXNoUmFuZ2VzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxpPXQubGVuZ3RoJTI9PTE/LXRbdC5sZW5ndGgtMV0qcjowLGE9dFswXSpyLG89ITA7bi5wdXNoKHtsZWZ0OmkscmlnaHQ6YSxpc0Rhc2g6byx6ZXJvTGVuZ3RoOjA9PT10WzBdfSk7Zm9yKHZhciBzPXRbMF0sbD0xO2w8dC5sZW5ndGg7bCsrKXtvPSFvO3ZhciBjPXRbbF07aT1zKnIsYT0ocys9YykqcixuLnB1c2goe2xlZnQ6aSxyaWdodDphLGlzRGFzaDpvLHplcm9MZW5ndGg6MD09PWN9KX1yZXR1cm4gbn0sVC5wcm90b3R5cGUuYWRkUm91bmREYXNoPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS8yLGk9LXI7aTw9cjtpKyspZm9yKHZhciBhPXRoaXMubmV4dFJvdytyK2ksbz10aGlzLndpZHRoKmEscz0wLGw9dFtzXSxjPTA7Yzx0aGlzLndpZHRoO2MrKyl7Yy9sLnJpZ2h0PjEmJihsPXRbKytzXSk7dmFyIHU9TWF0aC5hYnMoYy1sLmxlZnQpLGY9TWF0aC5hYnMoYy1sLnJpZ2h0KSxoPU1hdGgubWluKHUsZikscD12b2lkIDAsZD1pL3IqKG4rMSk7aWYobC5pc0Rhc2gpe3ZhciBtPW4tTWF0aC5hYnMoZCk7cD1NYXRoLnNxcnQoaCpoK20qbSl9ZWxzZSBwPW4tTWF0aC5zcXJ0KGgqaCtkKmQpO3RoaXMuZGF0YVtvK2NdPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LHArMTI4KSl9fSxULnByb3RvdHlwZS5hZGRSZWd1bGFyRGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dFtlXSxuPXRbZSsxXTtyLnplcm9MZW5ndGg/dC5zcGxpY2UoZSwxKTpuJiZuLmlzRGFzaD09PXIuaXNEYXNoJiYobi5sZWZ0PXIubGVmdCx0LnNwbGljZShlLDEpKX12YXIgaT10WzBdLGE9dFt0Lmxlbmd0aC0xXTtpLmlzRGFzaD09PWEuaXNEYXNoJiYoaS5sZWZ0PWEubGVmdC10aGlzLndpZHRoLGEucmlnaHQ9aS5yaWdodCt0aGlzLndpZHRoKTtmb3IodmFyIG89dGhpcy53aWR0aCp0aGlzLm5leHRSb3cscz0wLGw9dFtzXSxjPTA7Yzx0aGlzLndpZHRoO2MrKyl7Yy9sLnJpZ2h0PjEmJihsPXRbKytzXSk7dmFyIHU9TWF0aC5hYnMoYy1sLmxlZnQpLGY9TWF0aC5hYnMoYy1sLnJpZ2h0KSxoPU1hdGgubWluKHUsZikscD1sLmlzRGFzaD9oOi1oO3RoaXMuZGF0YVtvK2NdPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LHArMTI4KSl9fSxULnByb3RvdHlwZS5hZGREYXNoPWZ1bmN0aW9uKGUscil7dmFyIG49cj83OjAsaT0yKm4rMTtpZih0aGlzLm5leHRSb3craT50aGlzLmhlaWdodClyZXR1cm4gdC53YXJuT25jZSgiTGluZUF0bGFzIG91dCBvZiBzcGFjZSIpLG51bGw7Zm9yKHZhciBhPTAsbz0wO288ZS5sZW5ndGg7bysrKWErPWVbb107aWYoMCE9PWEpe3ZhciBzPXRoaXMud2lkdGgvYSxsPXRoaXMuZ2V0RGFzaFJhbmdlcyhlLHRoaXMud2lkdGgscyk7cj90aGlzLmFkZFJvdW5kRGFzaChsLHMsbik6dGhpcy5hZGRSZWd1bGFyRGFzaChsKX12YXIgYz17eToodGhpcy5uZXh0Um93K24rLjUpL3RoaXMuaGVpZ2h0LGhlaWdodDoyKm4vdGhpcy5oZWlnaHQsd2lkdGg6YX07cmV0dXJuIHRoaXMubmV4dFJvdys9aSx0aGlzLmRpcnR5PSEwLGN9LFQucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbDt0aGlzLnRleHR1cmU/KGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksdGhpcy5kaXJ0eSYmKHRoaXMuZGlydHk9ITEsZS50ZXhTdWJJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGUuQUxQSEEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpKToodGhpcy50ZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9TLGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5SRVBFQVQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsZS5MSU5FQVIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsZS5MSU5FQVIpLGUudGV4SW1hZ2UyRChlLlRFWFRVUkVfMkQsMCxlLkFMUEhBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCxlLkFMUEhBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKX07dmFyIGs9ZnVuY3Rpb24gZShyLG4pe3RoaXMud29ya2VyUG9vbD1yLHRoaXMuYWN0b3JzPVtdLHRoaXMuY3VycmVudEFjdG9yPTAsdGhpcy5pZD10LnVuaXF1ZUlkKCk7Zm9yKHZhciBpPXRoaXMud29ya2VyUG9vbC5hY3F1aXJlKHRoaXMuaWQpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5ldyBlLkFjdG9yKG8sbix0aGlzLmlkKTtzLm5hbWU9IldvcmtlciAiK2EsdGhpcy5hY3RvcnMucHVzaChzKX19O2Z1bmN0aW9uIEEoZSxyLG4pe3ZhciBpPWZ1bmN0aW9uKGksYSl7aWYoaSlyZXR1cm4gbihpKTtpZihhKXt2YXIgbz10LnBpY2sodC5leHRlbmQoYSxlKSxbInRpbGVzIiwibWluem9vbSIsIm1heHpvb20iLCJhdHRyaWJ1dGlvbiIsIm1hcGJveF9sb2dvIiwiYm91bmRzIiwic2NoZW1lIiwidGlsZVNpemUiLCJlbmNvZGluZyJdKTthLnZlY3Rvcl9sYXllcnMmJihvLnZlY3RvckxheWVycz1hLnZlY3Rvcl9sYXllcnMsby52ZWN0b3JMYXllcklkcz1vLnZlY3RvckxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpKSxvLnRpbGVzPXIuY2Fub25pY2FsaXplVGlsZXNldChvLGUudXJsKSxuKG51bGwsbyl9fTtyZXR1cm4gZS51cmw/dC5nZXRKU09OKHIudHJhbnNmb3JtUmVxdWVzdChyLm5vcm1hbGl6ZVNvdXJjZVVSTChlLnVybCksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxpKTp0LmJyb3dzZXIuZnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIGkobnVsbCxlKX0pKX1rLnByb3RvdHlwZS5icm9hZGNhc3Q9ZnVuY3Rpb24oZSxyLG4pe249bnx8ZnVuY3Rpb24oKXt9LHQuYXN5bmNBbGwodGhpcy5hY3RvcnMsKGZ1bmN0aW9uKHQsbil7dC5zZW5kKGUscixuKX0pLG4pfSxrLnByb3RvdHlwZS5nZXRBY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRBY3Rvcj0odGhpcy5jdXJyZW50QWN0b3IrMSkldGhpcy5hY3RvcnMubGVuZ3RoLHRoaXMuYWN0b3JzW3RoaXMuY3VycmVudEFjdG9yXX0say5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5hY3RvcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5yZW1vdmUoKX0pKSx0aGlzLmFjdG9ycz1bXSx0aGlzLndvcmtlclBvb2wucmVsZWFzZSh0aGlzLmlkKX0say5BY3Rvcj10LkFjdG9yO3ZhciBNPWZ1bmN0aW9uKGUscixuKXt0aGlzLmJvdW5kcz10LkxuZ0xhdEJvdW5kcy5jb252ZXJ0KHRoaXMudmFsaWRhdGVCb3VuZHMoZSkpLHRoaXMubWluem9vbT1yfHwwLHRoaXMubWF4em9vbT1ufHwyNH07TS5wcm90b3R5cGUudmFsaWRhdGVCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJjQ9PT10Lmxlbmd0aD9bTWF0aC5tYXgoLTE4MCx0WzBdKSxNYXRoLm1heCgtOTAsdFsxXSksTWF0aC5taW4oMTgwLHRbMl0pLE1hdGgubWluKDkwLHRbM10pXTpbLTE4MCwtOTAsMTgwLDkwXX0sTS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSl7dmFyIHI9TWF0aC5wb3coMixlLnopLG49TWF0aC5mbG9vcih0Lm1lcmNhdG9yWGZyb21MbmcodGhpcy5ib3VuZHMuZ2V0V2VzdCgpKSpyKSxpPU1hdGguZmxvb3IodC5tZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldE5vcnRoKCkpKnIpLGE9TWF0aC5jZWlsKHQubWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRFYXN0KCkpKnIpLG89TWF0aC5jZWlsKHQubWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXRTb3V0aCgpKSpyKTtyZXR1cm4gZS54Pj1uJiZlLng8YSYmZS55Pj1pJiZlLnk8b307dmFyIFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtpZihlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMudHlwZT0idmVjdG9yIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy5zY2hlbWU9Inh5eiIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdGhpcy5fbG9hZGVkPSExLHQuZXh0ZW5kKHRoaXMsdC5waWNrKG4sWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSIsInByb21vdGVJZCJdKSksdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7dHlwZToidmVjdG9yIn0sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLDUxMiE9PXRoaXMudGlsZVNpemUpdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3IgdGlsZSBzb3VyY2VzIG11c3QgaGF2ZSBhIHRpbGVTaXplIG9mIDUxMiIpO3RoaXMuc2V0RXZlbnRlZFBhcmVudChhKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fbG9hZGVkPSExLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9QSh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24ocixuKXtlLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCxlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IE0obi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLHQucG9zdFR1cm5zdGlsZUV2ZW50KG4udGlsZXMsZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbiksdC5wb3N0TWFwTG9hZEV2ZW50KG4udGlsZXMsZS5tYXAuX2dldE1hcElkKCksZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9za3VUb2tlbixlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl90aWxlSlNPTlJlcXVlc3QmJih0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PW51bGwpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSksaT17cmVxdWVzdDp0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWix0aWxlU2l6ZTp0aGlzLnRpbGVTaXplKmUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxwcm9tb3RlSWQ6dGhpcy5wcm9tb3RlSWR9O2Z1bmN0aW9uIGEobixpKXtyZXR1cm4gZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQ/cihudWxsKTpuJiY0MDQhPT1uLnN0YXR1cz9yKG4pOihpJiZpLnJlc291cmNlVGltaW5nJiYoZS5yZXNvdXJjZVRpbWluZz1pLnJlc291cmNlVGltaW5nKSx0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmaSYmZS5zZXRFeHBpcnlEYXRhKGkpLGUubG9hZFZlY3RvckRhdGEoaSx0aGlzLm1hcC5wYWludGVyKSx0LmNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcikscihudWxsKSx2b2lkKGUucmVsb2FkQ2FsbGJhY2smJih0aGlzLmxvYWRUaWxlKGUsZS5yZWxvYWRDYWxsYmFjayksZS5yZWxvYWRDYWxsYmFjaz1udWxsKSkpfWkucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nLGUuYWN0b3ImJiJleHBpcmVkIiE9PWUuc3RhdGU/ImxvYWRpbmciPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6ZS5yZXF1ZXN0PWUuYWN0b3Iuc2VuZCgicmVsb2FkVGlsZSIsaSxhLmJpbmQodGhpcykpOihlLmFjdG9yPXRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpLGUucmVxdWVzdD1lLmFjdG9yLnNlbmQoImxvYWRUaWxlIixpLGEuYmluZCh0aGlzKSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmNhbmNlbCgpLGRlbGV0ZSB0LnJlcXVlc3QpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgiYWJvcnRUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDApfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMuc2V0RXZlbnRlZFBhcmVudChhKSx0aGlzLnR5cGU9InJhc3RlciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMucm91bmRab29tPSEwLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXIifSxuKSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9sb2FkZWQ9ITEsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1BKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLChmdW5jdGlvbihyLG4pe2UuX3RpbGVKU09OUmVxdWVzdD1udWxsLGUuX2xvYWRlZD0hMCxyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgTShuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksdC5wb3N0VHVybnN0aWxlRXZlbnQobi50aWxlcyksdC5wb3N0TWFwTG9hZEV2ZW50KG4udGlsZXMsZS5tYXAuX2dldE1hcElkKCksZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9za3VUb2tlbiksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn0pKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9KSkpfSkpfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3RpbGVKU09OUmVxdWVzdCYmKHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zKX0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTChlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudGlsZVNpemUpO2UucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuVGlsZSksKGZ1bmN0aW9uKGksYSl7aWYoZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQpZS5zdGF0ZT0idW5sb2FkZWQiLHIobnVsbCk7ZWxzZSBpZihpKWUuc3RhdGU9ImVycm9yZWQiLHIoaSk7ZWxzZSBpZihhKXtuLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKGEpLGRlbGV0ZSBhLmNhY2hlQ29udHJvbCxkZWxldGUgYS5leHBpcmVzO3ZhciBvPW4ubWFwLnBhaW50ZXIuY29udGV4dCxzPW8uZ2w7ZS50ZXh0dXJlPW4ubWFwLnBhaW50ZXIuZ2V0VGlsZVRleHR1cmUoYS53aWR0aCksZS50ZXh0dXJlP2UudGV4dHVyZS51cGRhdGUoYSx7dXNlTWlwbWFwOiEwfSk6KGUudGV4dHVyZT1uZXcgdC5UZXh0dXJlKG8sYSxzLlJHQkEse3VzZU1pcG1hcDohMH0pLGUudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksby5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJnMudGV4UGFyYW1ldGVyZihzLlRFWFRVUkVfMkQsby5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsby5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpKSxlLnN0YXRlPSJsb2FkZWQiLHQuY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQobi5kaXNwYXRjaGVyKSxyKG51bGwpfX0pKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmNhbmNlbCgpLGRlbGV0ZSB0LnJlcXVlc3QpLGUoKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC50ZXh0dXJlKSxlKCl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksdGhpcy50eXBlPSJyYXN0ZXItZGVtIix0aGlzLm1heHpvb209MjIsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7dHlwZToicmFzdGVyLWRlbSJ9LG4pLHRoaXMuZW5jb2Rpbmc9bi5lbmNvZGluZ3x8Im1hcGJveCJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJyYXN0ZXItZGVtIix1cmw6dGhpcy51cmwsdGlsZVNpemU6dGhpcy50aWxlU2l6ZSx0aWxlczp0aGlzLnRpbGVzLGJvdW5kczp0aGlzLmJvdW5kcyxlbmNvZGluZzp0aGlzLmVuY29kaW5nfX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTChlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudGlsZVNpemUpO2Z1bmN0aW9uIGkodCxuKXt0JiYoZS5zdGF0ZT0iZXJyb3JlZCIscih0KSksbiYmKGUuZGVtPW4sZS5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITAsZS5zdGF0ZT0ibG9hZGVkIixyKG51bGwpKX1lLnJlcXVlc3Q9dC5nZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLGZ1bmN0aW9uKG4sYSl7aWYoZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQpZS5zdGF0ZT0idW5sb2FkZWQiLHIobnVsbCk7ZWxzZSBpZihuKWUuc3RhdGU9ImVycm9yZWQiLHIobik7ZWxzZSBpZihhKXt0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKGEpLGRlbGV0ZSBhLmNhY2hlQ29udHJvbCxkZWxldGUgYS5leHBpcmVzO3ZhciBvPXQud2luZG93LkltYWdlQml0bWFwJiZhIGluc3RhbmNlb2YgdC53aW5kb3cuSW1hZ2VCaXRtYXAmJnQub2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk/YTp0LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGEsMSkscz17dWlkOmUudWlkLGNvb3JkOmUudGlsZUlELHNvdXJjZTp0aGlzLmlkLHJhd0ltYWdlRGF0YTpvLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9O2UuYWN0b3ImJiJleHBpcmVkIiE9PWUuc3RhdGV8fChlLmFjdG9yPXRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpLGUuYWN0b3Iuc2VuZCgibG9hZERFTVRpbGUiLHMsaS5iaW5kKHRoaXMpKSl9fS5iaW5kKHRoaXMpKSxlLm5laWdoYm9yaW5nVGlsZXM9dGhpcy5fZ2V0TmVpZ2hib3JpbmdUaWxlcyhlLnRpbGVJRCl9LHIucHJvdG90eXBlLl9nZXROZWlnaGJvcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPWUuY2Fub25pY2FsLG49TWF0aC5wb3coMixyLnopLGk9KHIueC0xK24pJW4sYT0wPT09ci54P2Uud3JhcC0xOmUud3JhcCxvPShyLngrMStuKSVuLHM9ci54KzE9PT1uP2Uud3JhcCsxOmUud3JhcCxsPXt9O3JldHVybiBsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LHIueT4wJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxyLnkrMTxuJiYobFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosZS53cmFwLHIueixyLngsci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9KSxsfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QuZGVtVGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGlsZVRleHR1cmUodC5kZW1UZXh0dXJlKSx0LmZibyYmKHQuZmJvLmRlc3Ryb3koKSxkZWxldGUgdC5mYm8pLHQuZGVtJiZkZWxldGUgdC5kZW0sZGVsZXRlIHQubmVpZ2hib3JpbmdUaWxlcyx0LnN0YXRlPSJ1bmxvYWRlZCIsdC5hY3RvciYmdC5hY3Rvci5zZW5kKCJyZW1vdmVERU1UaWxlIix7dWlkOnQudWlkLHNvdXJjZTp0aGlzLmlkfSl9LHJ9KEUpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMudHlwZT0iZ2VvanNvbiIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTE4LHRoaXMudGlsZVNpemU9NTEyLHRoaXMuaXNUaWxlQ2xpcHBlZD0hMCx0aGlzLnJlcGFyc2VPdmVyc2NhbGVkPSEwLHRoaXMuX3JlbW92ZWQ9ITEsdGhpcy5fbG9hZGVkPSExLHRoaXMuYWN0b3I9aS5nZXRBY3RvcigpLHRoaXMuc2V0RXZlbnRlZFBhcmVudChhKSx0aGlzLl9kYXRhPW4uZGF0YSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZXNvdXJjZVRpbWluZz1bXSx2b2lkIDAhPT1uLm1heHpvb20mJih0aGlzLm1heHpvb209bi5tYXh6b29tKSxuLnR5cGUmJih0aGlzLnR5cGU9bi50eXBlKSxuLmF0dHJpYnV0aW9uJiYodGhpcy5hdHRyaWJ1dGlvbj1uLmF0dHJpYnV0aW9uKSx0aGlzLnByb21vdGVJZD1uLnByb21vdGVJZDt2YXIgbz10LkVYVEVOVC90aGlzLnRpbGVTaXplO3RoaXMud29ya2VyT3B0aW9ucz10LmV4dGVuZCh7c291cmNlOnRoaXMuaWQsY2x1c3RlcjpuLmNsdXN0ZXJ8fCExLGdlb2pzb25WdE9wdGlvbnM6e2J1ZmZlcjoodm9pZCAwIT09bi5idWZmZXI/bi5idWZmZXI6MTI4KSpvLHRvbGVyYW5jZToodm9pZCAwIT09bi50b2xlcmFuY2U/bi50b2xlcmFuY2U6LjM3NSkqbyxleHRlbnQ6dC5FWFRFTlQsbWF4Wm9vbTp0aGlzLm1heHpvb20sbGluZU1ldHJpY3M6bi5saW5lTWV0cmljc3x8ITEsZ2VuZXJhdGVJZDpuLmdlbmVyYXRlSWR8fCExfSxzdXBlcmNsdXN0ZXJPcHRpb25zOnttYXhab29tOnZvaWQgMCE9PW4uY2x1c3Rlck1heFpvb20/TWF0aC5taW4obi5jbHVzdGVyTWF4Wm9vbSx0aGlzLm1heHpvb20tMSk6dGhpcy5tYXh6b29tLTEsZXh0ZW50OnQuRVhURU5ULHJhZGl1czoobi5jbHVzdGVyUmFkaXVzfHw1MCkqbyxsb2c6ITEsZ2VuZXJhdGVJZDpuLmdlbmVyYXRlSWR8fCExfSxjbHVzdGVyUHJvcGVydGllczpuLmNsdXN0ZXJQcm9wZXJ0aWVzfSxuLndvcmtlck9wdGlvbnMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YSgoZnVuY3Rpb24ocil7aWYocillLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn07ZS5fY29sbGVjdFJlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPWUuX3Jlc291cmNlVGltaW5nLGUuX3Jlc291cmNlVGltaW5nPVtdKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX19KSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fZGF0YT1lLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChmdW5jdGlvbihlKXtpZihlKXIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNle3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9O3IuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nLmxlbmd0aD4wJiYobi5yZXNvdXJjZVRpbWluZz1yLl9yZXNvdXJjZVRpbWluZyxyLl9yZXNvdXJjZVRpbWluZz1bXSksci5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIixuKSl9fSkpLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWN0b3Iuc2VuZCgiZ2VvanNvbi5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbSIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hY3Rvci5zZW5kKCJnZW9qc29uLmdldENsdXN0ZXJDaGlsZHJlbiIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyTGVhdmVzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLmFjdG9yLnNlbmQoImdlb2pzb24uZ2V0Q2x1c3RlckxlYXZlcyIse3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXJJZDp0LGxpbWl0OmUsb2Zmc2V0OnJ9LG4pLHRoaXN9LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJEYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5fbG9hZGVkPSExO3ZhciBuPXQuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucyksaT10aGlzLl9kYXRhOyJzdHJpbmciPT10eXBlb2YgaT8obi5yZXF1ZXN0PXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHQuYnJvd3Nlci5yZXNvbHZlVVJMKGkpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksbi5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpOm4uZGF0YT1KU09OLnN0cmluZ2lmeShpKSx0aGlzLmFjdG9yLnNlbmQodGhpcy50eXBlKyIubG9hZERhdGEiLG4sKGZ1bmN0aW9uKHQsaSl7ci5fcmVtb3ZlZHx8aSYmaS5hYmFuZG9uZWR8fChyLl9sb2FkZWQ9ITAsaSYmaS5yZXNvdXJjZVRpbWluZyYmaS5yZXNvdXJjZVRpbWluZ1tyLmlkXSYmKHIuX3Jlc291cmNlVGltaW5nPWkucmVzb3VyY2VUaW1pbmdbci5pZF0uc2xpY2UoMCkpLHIuYWN0b3Iuc2VuZChyLnR5cGUrIi5jb2FsZXNjZSIse3NvdXJjZTpuLnNvdXJjZX0sbnVsbCksZSh0KSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWUuYWN0b3I/InJlbG9hZFRpbGUiOiJsb2FkVGlsZSI7ZS5hY3Rvcj10aGlzLmFjdG9yO3ZhciBhPXt0eXBlOnRoaXMudHlwZSx1aWQ6ZS51aWQsdGlsZUlEOmUudGlsZUlELHpvb206ZS50aWxlSUQub3ZlcnNjYWxlZFosbWF4Wm9vbTp0aGlzLm1heHpvb20sdGlsZVNpemU6dGhpcy50aWxlU2l6ZSxzb3VyY2U6dGhpcy5pZCxwaXhlbFJhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMscHJvbW90ZUlkOnRoaXMucHJvbW90ZUlkfTtlLnJlcXVlc3Q9dGhpcy5hY3Rvci5zZW5kKGksYSwoZnVuY3Rpb24odCxhKXtyZXR1cm4gZGVsZXRlIGUucmVxdWVzdCxlLnVubG9hZFZlY3RvckRhdGEoKSxlLmFib3J0ZWQ/cihudWxsKTp0P3IodCk6KGUubG9hZFZlY3RvckRhdGEoYSxuLm1hcC5wYWludGVyLCJyZWxvYWRUaWxlIj09PWkpLHIobnVsbCkpfSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmNhbmNlbCgpLGRlbGV0ZSB0LnJlcXVlc3QpLHQuYWJvcnRlZD0hMH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLmFjdG9yLnNlbmQoInJlbW92ZVRpbGUiLHt1aWQ6dC51aWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9KX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVkPSEwLHRoaXMuYWN0b3Iuc2VuZCgicmVtb3ZlU291cmNlIix7dHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9KX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMse3R5cGU6dGhpcy50eXBlLGRhdGE6dGhpcy5fZGF0YX0pfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksUD10LmNyZWF0ZUxheW91dChbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfSx7bmFtZToiYV90ZXh0dXJlX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dKSxJPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9bix0aGlzLmNvb3JkaW5hdGVzPXIuY29vcmRpbmF0ZXMsdGhpcy50eXBlPSJpbWFnZSIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMudGlsZVNpemU9NTEyLHRoaXMudGlsZXM9e30sdGhpcy5fbG9hZGVkPSExLHRoaXMuc2V0RXZlbnRlZFBhcmVudChpKSx0aGlzLm9wdGlvbnM9cn1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5fbG9hZGVkPSExLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLnVybD10aGlzLm9wdGlvbnMudXJsLHQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLChmdW5jdGlvbihpLGEpe24uX2xvYWRlZD0hMCxpP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGkpKTphJiYobi5pbWFnZT1hLGUmJihuLmNvb3JkaW5hdGVzPWUpLHImJnIoKSxuLl9maW5pc2hMb2FkaW5nKCkpfSkpfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmltYWdlJiZ0LnVybD8odGhpcy5vcHRpb25zLnVybD10LnVybCx0aGlzLmxvYWQodC5jb29yZGluYXRlcywoZnVuY3Rpb24oKXtlLnRleHR1cmU9bnVsbH0pKSx0aGlzKTp0aGlzfSxyLnByb3RvdHlwZS5fZmluaXNoTG9hZGluZz1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLmNvb3JkaW5hdGVzPWU7dmFyIG49ZS5tYXAodC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCk7dGhpcy50aWxlSUQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTEvMCxuPTEvMCxpPS0xLzAsYT0tMS8wLG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO3I9TWF0aC5taW4ocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLngpLGE9TWF0aC5tYXgoYSxsLnkpfXZhciBjPWktcix1PWEtbixmPU1hdGgubWF4KGMsdSksaD1NYXRoLm1heCgwLE1hdGguZmxvb3IoLU1hdGgubG9nKGYpL01hdGguTE4yKSkscD1NYXRoLnBvdygyLGgpO3JldHVybiBuZXcgdC5DYW5vbmljYWxUaWxlSUQoaCxNYXRoLmZsb29yKChyK2kpLzIqcCksTWF0aC5mbG9vcigobithKS8yKnApKX0obiksdGhpcy5taW56b29tPXRoaXMubWF4em9vbT10aGlzLnRpbGVJRC56O3ZhciBpPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gci50aWxlSUQuZ2V0VGlsZVBvaW50KHQpLl9yb3VuZCgpfSkpO3JldHVybiB0aGlzLl9ib3VuZHNBcnJheT1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDRpOCx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhpWzBdLngsaVswXS55LDAsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVsxXS54LGlbMV0ueSx0LkVYVEVOVCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhpWzNdLngsaVszXS55LDAsdC5FWFRFTlQpLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbMl0ueCxpWzJdLnksdC5FWFRFTlQsdC5FWFRFTlQpLHRoaXMuYm91bmRzQnVmZmVyJiYodGhpcy5ib3VuZHNCdWZmZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmJvdW5kc0J1ZmZlciksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifSkpLHRoaXN9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtpZigwIT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoJiZ0aGlzLmltYWdlKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LFAubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmV8fCh0aGlzLnRleHR1cmU9bmV3IHQuVGV4dHVyZShlLHRoaXMuaW1hZ2Usci5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgaT10aGlzLnRpbGVzW25dOyJsb2FkZWQiIT09aS5zdGF0ZSYmKGkuc3RhdGU9ImxvYWRlZCIsaS50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRCYmdGhpcy50aWxlSUQuZXF1YWxzKHQudGlsZUlELmNhbm9uaWNhbCk/KHRoaXMudGlsZXNbU3RyaW5nKHQudGlsZUlELndyYXApXT10LHQuYnVja2V0cz17fSxlKG51bGwpKToodC5zdGF0ZT0iZXJyb3JlZCIsZShudWxsKSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsdXJsOnRoaXMub3B0aW9ucy51cmwsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKTt2YXIgTz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzLHQscixuLGkpLHRoaXMucm91bmRab29tPSEwLHRoaXMudHlwZT0idmlkZW8iLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9sb2FkZWQ9ITE7dmFyIHI9dGhpcy5vcHRpb25zO3RoaXMudXJscz1bXTtmb3IodmFyIG49MCxpPXIudXJscztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy51cmxzLnB1c2godGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoYSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLnVybCl9dC5nZXRWaWRlbyh0aGlzLnVybHMsKGZ1bmN0aW9uKHIsbil7ZS5fbG9hZGVkPSEwLHI/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJihlLnZpZGVvPW4sZS52aWRlby5sb29wPSEwLGUudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigicGxheWluZyIsKGZ1bmN0aW9uKCl7ZS5tYXAudHJpZ2dlclJlcGFpbnQoKX0pKSxlLm1hcCYmZS52aWRlby5wbGF5KCksZS5fZmluaXNoTG9hZGluZygpKX0pKX0sci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLnBhdXNlKCl9LHIucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnZpZGVvJiZ0aGlzLnZpZGVvLnBsYXkoKX0sci5wcm90b3R5cGUuc2Vlaz1mdW5jdGlvbihlKXtpZih0aGlzLnZpZGVvKXt2YXIgcj10aGlzLnZpZGVvLnNlZWthYmxlO2U8ci5zdGFydCgwKXx8ZT5yLmVuZCgwKT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIit0aGlzLmlkLG51bGwsIlBsYXliYWNrIGZvciB0aGlzIHZpZGVvIGNhbiBiZSBzZXQgb25seSBiZXR3ZWVuIHRoZSAiK3Iuc3RhcnQoMCkrIiBhbmQgIityLmVuZCgwKSsiLXNlY29uZCBtYXJrLiIpKSk6dGhpcy52aWRlby5jdXJyZW50VGltZT1lfX0sci5wcm90b3R5cGUuZ2V0VmlkZW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb30sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXB8fCh0aGlzLm1hcD10LHRoaXMubG9hZCgpLHRoaXMudmlkZW8mJih0aGlzLnZpZGVvLnBsYXkoKSx0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpKSl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtpZighKDA9PT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGh8fHRoaXMudmlkZW8ucmVhZHlTdGF0ZTwyKSl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxQLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1NlZ21lbnRzfHwodGhpcy5ib3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKSksdGhpcy50ZXh0dXJlP3RoaXMudmlkZW8ucGF1c2VkfHwodGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSxyLnRleFN1YkltYWdlMkQoci5URVhUVVJFXzJELDAsMCwwLHIuUkdCQSxyLlVOU0lHTkVEX0JZVEUsdGhpcy52aWRlbykpOih0aGlzLnRleHR1cmU9bmV3IHQuVGV4dHVyZShlLHRoaXMudmlkZW8sci5SR0JBKSx0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpKSx0aGlzLnRpbGVzKXt2YXIgaT10aGlzLnRpbGVzW25dOyJsb2FkZWQiIT09aS5zdGF0ZSYmKGkuc3RhdGU9ImxvYWRlZCIsaS50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InZpZGVvIix1cmxzOnRoaXMudXJscyxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvJiYhdGhpcy52aWRlby5wYXVzZWR9LHJ9KEkpLHo9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSxuLmNvb3JkaW5hdGVzP0FycmF5LmlzQXJyYXkobi5jb29yZGluYXRlcykmJjQ9PT1uLmNvb3JkaW5hdGVzLmxlbmd0aCYmIW4uY29vcmRpbmF0ZXMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCl8fDIhPT10Lmxlbmd0aHx8dC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR9KSl9KSl8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnImNvb3JkaW5hdGVzIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5IG9mIDQgbG9uZ2l0dWRlL2xhdGl0dWRlIGFycmF5IHBhaXJzJykpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgImNvb3JkaW5hdGVzIicpKSksbi5hbmltYXRlJiYiYm9vbGVhbiIhPXR5cGVvZiBuLmFuaW1hdGUmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnb3B0aW9uYWwgImFuaW1hdGUiIHByb3BlcnR5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJykpKSxuLmNhbnZhcz8ic3RyaW5nIj09dHlwZW9mIG4uY2FudmFzfHxuLmNhbnZhcyBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxDYW52YXNFbGVtZW50fHx0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIityLG51bGwsJyJjYW52YXMiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY2FudmFzIicpKSksdGhpcy5vcHRpb25zPW4sdGhpcy5hbmltYXRlPXZvaWQgMD09PW4uYW5pbWF0ZXx8bi5hbmltYXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5fbG9hZGVkPSEwLHRoaXMuY2FudmFzfHwodGhpcy5jYW52YXM9dGhpcy5vcHRpb25zLmNhbnZhcyBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxDYW52YXNFbGVtZW50P3RoaXMub3B0aW9ucy5jYW52YXM6dC53aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vcHRpb25zLmNhbnZhcykpLHRoaXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5jYW52YXMuaGVpZ2h0LHRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJDYW52YXMgZGltZW5zaW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uIikpKToodGhpcy5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZz0hMCx0aGlzLm1hcC50cmlnZ2VyUmVwYWludCgpfSx0aGlzLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZyYmKHRoaXMucHJlcGFyZSgpLHRoaXMuX3BsYXlpbmc9ITEpfSx0aGlzLl9maW5pc2hMb2FkaW5nKCkpfSxyLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW52YXN9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy5jYW52YXMmJnRoaXMuYW5pbWF0ZSYmdGhpcy5wbGF5KCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7dmFyIGU9ITE7aWYodGhpcy5jYW52YXMud2lkdGghPT10aGlzLndpZHRoJiYodGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCxlPSEwKSx0aGlzLmNhbnZhcy5oZWlnaHQhPT10aGlzLmhlaWdodCYmKHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCxlPSEwKSwhdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSYmMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCl7dmFyIHI9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LG49ci5nbDtmb3IodmFyIGkgaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1yLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxQLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1NlZ21lbnRzfHwodGhpcy5ib3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKSksdGhpcy50ZXh0dXJlPyhlfHx0aGlzLl9wbGF5aW5nKSYmdGhpcy50ZXh0dXJlLnVwZGF0ZSh0aGlzLmNhbnZhcyx7cHJlbXVsdGlwbHk6ITB9KTp0aGlzLnRleHR1cmU9bmV3IHQuVGV4dHVyZShyLHRoaXMuY2FudmFzLG4uUkdCQSx7cHJlbXVsdGlwbHk6ITB9KSx0aGlzLnRpbGVzKXt2YXIgYT10aGlzLnRpbGVzW2ldOyJsb2FkZWQiIT09YS5zdGF0ZSYmKGEuc3RhdGU9ImxvYWRlZCIsYS50ZXh0dXJlPXRoaXMudGV4dHVyZSl9fX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImNhbnZhcyIsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGxheWluZ30sci5wcm90b3R5cGUuX2hhc0ludmFsaWREaW1lbnNpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1bdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0XTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYoaXNOYU4ocil8fHI8PTApcmV0dXJuITB9cmV0dXJuITF9LHJ9KEkpLEQ9e3ZlY3RvcjpTLHJhc3RlcjpFLCJyYXN0ZXItZGVtIjpMLGdlb2pzb246Qyx2aWRlbzpPLGltYWdlOkksY2FudmFzOnp9O2Z1bmN0aW9uIFIoZSxyKXt2YXIgbj10LmlkZW50aXR5KFtdKTtyZXR1cm4gdC50cmFuc2xhdGUobixuLFsxLDEsMF0pLHQuc2NhbGUobixuLFsuNSplLndpZHRoLC41KmUuaGVpZ2h0LDFdKSx0Lm11bHRpcGx5KG4sbixlLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRvVW53cmFwcGVkKCkpKX1mdW5jdGlvbiBGKHQsZSxyLG4saSxhKXt2YXIgbz1mdW5jdGlvbih0LGUscil7aWYodClmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1lW2lbbl1dO2lmKGEmJmEuc291cmNlPT09ciYmImZpbGwtZXh0cnVzaW9uIj09PWEudHlwZSlyZXR1cm4hMH1lbHNlIGZvcih2YXIgbyBpbiBlKXt2YXIgcz1lW29dO2lmKHMuc291cmNlPT09ciYmImZpbGwtZXh0cnVzaW9uIj09PXMudHlwZSlyZXR1cm4hMH1yZXR1cm4hMX0oaSYmaS5sYXllcnMsZSx0LmlkKSxzPWEubWF4UGl0Y2hTY2FsZUZhY3RvcigpLGw9dC50aWxlc0luKG4scyxvKTtsLnNvcnQoQik7Zm9yKHZhciBjPVtdLHU9MCxmPWw7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2MucHVzaCh7d3JhcHBlZFRpbGVJRDpoLnRpbGVJRC53cmFwcGVkKCkua2V5LHF1ZXJ5UmVzdWx0czpoLnRpbGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUscix0Ll9zdGF0ZSxoLnF1ZXJ5R2VvbWV0cnksaC5jYW1lcmFRdWVyeUdlb21ldHJ5LGguc2NhbGUsaSxhLHMsUih0LnRyYW5zZm9ybSxoLnRpbGVJRCkpfSl9dmFyIHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLnF1ZXJ5UmVzdWx0cyxzPWEud3JhcHBlZFRpbGVJRCxsPXJbc109cltzXXx8e307Zm9yKHZhciBjIGluIG8pZm9yKHZhciB1PW9bY10sZj1sW2NdPWxbY118fHt9LGg9ZVtjXT1lW2NdfHxbXSxwPTAsZD11O3A8ZC5sZW5ndGg7cCs9MSl7dmFyIG09ZFtwXTtmW20uZmVhdHVyZUluZGV4XXx8KGZbbS5mZWF0dXJlSW5kZXhdPSEwLGgucHVzaChtKSl9fXJldHVybiBlfShjKTtmb3IodmFyIGQgaW4gcClwW2RdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWUuZmVhdHVyZSxuPXQuZ2V0RmVhdHVyZVN0YXRlKHIubGF5ZXJbInNvdXJjZS1sYXllciJdLHIuaWQpO3Iuc291cmNlPXIubGF5ZXIuc291cmNlLHIubGF5ZXJbInNvdXJjZS1sYXllciJdJiYoci5zb3VyY2VMYXllcj1yLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSksci5zdGF0ZT1ufSkpO3JldHVybiBwfWZ1bmN0aW9uIEIodCxlKXt2YXIgcj10LnRpbGVJRCxuPWUudGlsZUlEO3JldHVybiByLm92ZXJzY2FsZWRaLW4ub3ZlcnNjYWxlZFp8fHIuY2Fub25pY2FsLnktbi5jYW5vbmljYWwueXx8ci53cmFwLW4ud3JhcHx8ci5jYW5vbmljYWwueC1uLmNhbm9uaWNhbC54fXZhciBOPWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXg9dCx0aGlzLm9uUmVtb3ZlPWUsdGhpcy5yZXNldCgpfTtOLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmRhdGEpZm9yKHZhciBlPTAscj10aGlzLmRhdGFbdF07ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO24udGltZW91dCYmY2xlYXJUaW1lb3V0KG4udGltZW91dCksdGhpcy5vblJlbW92ZShuLnZhbHVlKX1yZXR1cm4gdGhpcy5kYXRhPXt9LHRoaXMub3JkZXI9W10sdGhpc30sTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9dC53cmFwcGVkKCkua2V5O3ZvaWQgMD09PXRoaXMuZGF0YVtpXSYmKHRoaXMuZGF0YVtpXT1bXSk7dmFyIGE9e3ZhbHVlOmUsdGltZW91dDp2b2lkIDB9O2lmKHZvaWQgMCE9PXImJihhLnRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtuLnJlbW92ZSh0LGEpfSkscikpLHRoaXMuZGF0YVtpXS5wdXNoKGEpLHRoaXMub3JkZXIucHVzaChpKSx0aGlzLm9yZGVyLmxlbmd0aD50aGlzLm1heCl7dmFyIG89dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7byYmdGhpcy5vblJlbW92ZShvKX1yZXR1cm4gdGhpc30sTi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0LndyYXBwZWQoKS5rZXkgaW4gdGhpcy5kYXRhfSxOLnByb3RvdHlwZS5nZXRBbmRSZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpP3RoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHQud3JhcHBlZCgpLmtleSk6bnVsbH0sTi5wcm90b3R5cGUuX2dldEFuZFJlbW92ZUJ5S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YVt0XS5zaGlmdCgpO3JldHVybiBlLnRpbWVvdXQmJmNsZWFyVGltZW91dChlLnRpbWVvdXQpLDA9PT10aGlzLmRhdGFbdF0ubGVuZ3RoJiZkZWxldGUgdGhpcy5kYXRhW3RdLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZih0KSwxKSxlLnZhbHVlfSxOLnByb3RvdHlwZS5nZXRCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF07cmV0dXJuIGU/ZVswXS52YWx1ZTpudWxsfSxOLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpP3RoaXMuZGF0YVt0LndyYXBwZWQoKS5rZXldWzBdLnZhbHVlOm51bGx9LE4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmhhcyh0KSlyZXR1cm4gdGhpczt2YXIgcj10LndyYXBwZWQoKS5rZXksbj12b2lkIDA9PT1lPzA6dGhpcy5kYXRhW3JdLmluZGV4T2YoZSksaT10aGlzLmRhdGFbcl1bbl07cmV0dXJuIHRoaXMuZGF0YVtyXS5zcGxpY2UobiwxKSxpLnRpbWVvdXQmJmNsZWFyVGltZW91dChpLnRpbWVvdXQpLDA9PT10aGlzLmRhdGFbcl0ubGVuZ3RoJiZkZWxldGUgdGhpcy5kYXRhW3JdLHRoaXMub25SZW1vdmUoaS52YWx1ZSksdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHIpLDEpLHRoaXN9LE4ucHJvdG90eXBlLnNldE1heFNpemU9ZnVuY3Rpb24odCl7Zm9yKHRoaXMubWF4PXQ7dGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXg7KXt2YXIgZT10aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aGlzLm9yZGVyWzBdKTtlJiZ0aGlzLm9uUmVtb3ZlKGUpfXJldHVybiB0aGlzfSxOLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHRoaXMuZGF0YSlmb3IodmFyIG49MCxpPXRoaXMuZGF0YVtyXTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dChhLnZhbHVlKXx8ZS5wdXNoKGEpfWZvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107dGhpcy5yZW1vdmUobC52YWx1ZS50aWxlSUQsbCl9fTt2YXIgaj1mdW5jdGlvbih0LGUscil7dGhpcy5jb250ZXh0PXQ7dmFyIG49dC5nbDt0aGlzLmJ1ZmZlcj1uLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuZHluYW1pY0RyYXc9Qm9vbGVhbihyKSx0aGlzLmNvbnRleHQudW5iaW5kVkFPKCksdC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLG4uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9uLkRZTkFNSUNfRFJBVzpuLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07ai5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxqLnByb3RvdHlwZS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQudW5iaW5kVkFPKCksdGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuRUxFTUVOVF9BUlJBWV9CVUZGRVIsMCx0LmFycmF5QnVmZmVyKX0sai5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgVT17SW50ODoiQllURSIsVWludDg6IlVOU0lHTkVEX0JZVEUiLEludDE2OiJTSE9SVCIsVWludDE2OiJVTlNJR05FRF9TSE9SVCIsSW50MzI6IklOVCIsVWludDMyOiJVTlNJR05FRF9JTlQiLEZsb2F0MzI6IkZMT0FUIn0sVj1mdW5jdGlvbih0LGUscixuKXt0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9cix0aGlzLml0ZW1TaXplPWUuYnl0ZXNQZXJFbGVtZW50LHRoaXMuZHluYW1pY0RyYXc9bix0aGlzLmNvbnRleHQ9dDt2YXIgaT10LmdsO3RoaXMuYnVmZmVyPWkuY3JlYXRlQnVmZmVyKCksdC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksaS5idWZmZXJEYXRhKGkuQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9pLkRZTkFNSUNfRFJBVzppLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07Vi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5iaW5kVmVydGV4QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcil9LFYucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkFSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxWLnByb3RvdHlwZS5lbmFibGVBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5hdHRyaWJ1dGVzW3JdLGk9ZS5hdHRyaWJ1dGVzW24ubmFtZV07dm9pZCAwIT09aSYmdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19LFYucHJvdG90eXBlLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzLmF0dHJpYnV0ZXNbbl0sYT1lLmF0dHJpYnV0ZXNbaS5uYW1lXTt2b2lkIDAhPT1hJiZ0LnZlcnRleEF0dHJpYlBvaW50ZXIoYSxpLmNvbXBvbmVudHMsdFtVW2kudHlwZV1dLCExLHRoaXMuaXRlbVNpemUsaS5vZmZzZXQrdGhpcy5pdGVtU2l6ZSoocnx8MCkpfX0sVi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmJ1ZmZlciYmKHQuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKSxkZWxldGUgdGhpcy5idWZmZXIpfTt2YXIgSD1mdW5jdGlvbih0KXt0aGlzLmdsPXQuZ2wsdGhpcy5kZWZhdWx0PXRoaXMuZ2V0RGVmYXVsdCgpLHRoaXMuY3VycmVudD10aGlzLmRlZmF1bHQsdGhpcy5kaXJ0eT0hMX07SC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sSC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe30sSC5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHR9LEgucHJvdG90eXBlLnNldERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLnNldCh0aGlzLmRlZmF1bHQpfTt2YXIgcT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5Db2xvci50cmFuc3BhcmVudH0sci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodC5yIT09ZS5yfHx0LmchPT1lLmd8fHQuYiE9PWUuYnx8dC5hIT09ZS5hfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY2xlYXJDb2xvcih0LnIsdC5nLHQuYix0LmEpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxyfShIKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAxfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jbGVhckRlcHRoKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jbGVhclN0ZW5jaWwodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLFc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuWyEwLCEwLCEwLCEwXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0WzJdIT09ZVsyXXx8dFszXSE9PWVbM118fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jb2xvck1hc2sodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLFg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoTWFzayh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMjU1fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5zdGVuY2lsTWFzayh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksSj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZnVuYzp0aGlzLmdsLkFMV0FZUyxyZWY6MCxtYXNrOjI1NX19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuZnVuYyE9PWUuZnVuY3x8dC5yZWYhPT1lLnJlZnx8dC5tYXNrIT09ZS5tYXNrfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuc3RlbmNpbEZ1bmModC5mdW5jLHQucmVmLHQubWFzayksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLEs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bdC5LRUVQLHQuS0VFUCx0LktFRVBdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRbMl0hPT1lWzJdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuc3RlbmNpbE9wKHRbMF0sdFsxXSx0WzJdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksUT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLlNURU5DSUxfVEVTVCk6ZS5kaXNhYmxlKGUuU1RFTkNJTF9URVNUKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksJD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCwxXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuZGVwdGhSYW5nZSh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSx0dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkRFUFRIX1RFU1QpOmUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxldD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5MRVNTfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5kZXB0aEZ1bmModCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLHJ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuQkxFTkQpOmUuZGlzYWJsZShlLkJMRU5EKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksbnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bdC5PTkUsdC5aRVJPXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRGdW5jKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLGl0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0LkNvbG9yLnRyYW5zcGFyZW50fSxyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0LnIhPT1lLnJ8fHQuZyE9PWUuZ3x8dC5iIT09ZS5ifHx0LmEhPT1lLmF8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5ibGVuZENvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LHJ9KEgpLGF0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkZVTkNfQUREfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5ibGVuZEVxdWF0aW9uKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxvdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkNVTExfRkFDRSk6ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksc3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuQkFDS30sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY3VsbEZhY2UodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLGx0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkNDV30sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuZnJvbnRGYWNlKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxjdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wudXNlUHJvZ3JhbSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuVEVYVFVSRTB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmFjdGl2ZVRleHR1cmUodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7cmV0dXJuWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRbMl0hPT1lWzJdfHx0WzNdIT09ZVszXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnZpZXdwb3J0KHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxodD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCkscHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UuYmluZFJlbmRlcmJ1ZmZlcihlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksZHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxndD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kQnVmZmVyKGUuRUxFTUVOVF9BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX0sZX0oSCksdnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlKSx0aGlzLnZhbz1lLmV4dFZlcnRleEFycmF5T2JqZWN0fXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLnZhbyYmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy52YW8uYmluZFZlcnRleEFycmF5T0VTKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSx5dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gNH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19BTElHTk1FTlQsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLHh0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLnBpeGVsU3RvcmVpKGUuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxidD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19GTElQX1lfV0VCR0wsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLF90PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLnBhcmVudD1yfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGV9KEgpLHd0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO3ZhciBlPXRoaXMuZ2w7ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRChlLkZSQU1FQlVGRkVSLGUuQ09MT1JfQVRUQUNITUVOVDAsZS5URVhUVVJFXzJELHQsMCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KF90KSxUdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCk7dmFyIGU9dGhpcy5nbDtlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGUuRlJBTUVCVUZGRVIsZS5ERVBUSF9BVFRBQ0hNRU5ULGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShfdCksa3Q9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jb250ZXh0PXQsdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXI7dmFyIGk9dC5nbCxhPXRoaXMuZnJhbWVidWZmZXI9aS5jcmVhdGVGcmFtZWJ1ZmZlcigpO3RoaXMuY29sb3JBdHRhY2htZW50PW5ldyB3dCh0LGEpLG4mJih0aGlzLmRlcHRoQXR0YWNobWVudD1uZXcgVHQodCxhKSl9O2t0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsLGU9dGhpcy5jb2xvckF0dGFjaG1lbnQuZ2V0KCk7aWYoZSYmdC5kZWxldGVUZXh0dXJlKGUpLHRoaXMuZGVwdGhBdHRhY2htZW50KXt2YXIgcj10aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKX10LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpfTt2YXIgQXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZnVuYz10LHRoaXMubWFzaz1lLHRoaXMucmFuZ2U9cn07QXQuUmVhZE9ubHk9ITEsQXQuUmVhZFdyaXRlPSEwLEF0LmRpc2FibGVkPW5ldyBBdCg1MTksQXQuUmVhZE9ubHksWzAsMV0pO3ZhciBNdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy50ZXN0PXQsdGhpcy5yZWY9ZSx0aGlzLm1hc2s9cix0aGlzLmZhaWw9bix0aGlzLmRlcHRoRmFpbD1pLHRoaXMucGFzcz1hfTtNdC5kaXNhYmxlZD1uZXcgTXQoe2Z1bmM6NTE5LG1hc2s6MH0sMCwwLDc2ODAsNzY4MCw3NjgwKTt2YXIgU3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYmxlbmRGdW5jdGlvbj10LHRoaXMuYmxlbmRDb2xvcj1lLHRoaXMubWFzaz1yfTtTdC5kaXNhYmxlZD1uZXcgU3QoU3QuUmVwbGFjZT1bMSwwXSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMSwhMSwhMSwhMV0pLFN0LnVuYmxlbmRlZD1uZXcgU3QoU3QuUmVwbGFjZSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pLFN0LmFscGhhQmxlbmRlZD1uZXcgU3QoWzEsNzcxXSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pO3ZhciBFdD1mdW5jdGlvbih0LGUscil7dGhpcy5lbmFibGU9dCx0aGlzLm1vZGU9ZSx0aGlzLmZyb250RmFjZT1yfTtFdC5kaXNhYmxlZD1uZXcgRXQoITEsMTAyOSwyMzA1KSxFdC5iYWNrQ0NXPW5ldyBFdCghMCwxMDI5LDIzMDUpO3ZhciBMdD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdD10aGlzLmdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSx0aGlzLmNsZWFyQ29sb3I9bmV3IHEodGhpcyksdGhpcy5jbGVhckRlcHRoPW5ldyBHKHRoaXMpLHRoaXMuY2xlYXJTdGVuY2lsPW5ldyBZKHRoaXMpLHRoaXMuY29sb3JNYXNrPW5ldyBXKHRoaXMpLHRoaXMuZGVwdGhNYXNrPW5ldyBYKHRoaXMpLHRoaXMuc3RlbmNpbE1hc2s9bmV3IFoodGhpcyksdGhpcy5zdGVuY2lsRnVuYz1uZXcgSih0aGlzKSx0aGlzLnN0ZW5jaWxPcD1uZXcgSyh0aGlzKSx0aGlzLnN0ZW5jaWxUZXN0PW5ldyBRKHRoaXMpLHRoaXMuZGVwdGhSYW5nZT1uZXcgJCh0aGlzKSx0aGlzLmRlcHRoVGVzdD1uZXcgdHQodGhpcyksdGhpcy5kZXB0aEZ1bmM9bmV3IGV0KHRoaXMpLHRoaXMuYmxlbmQ9bmV3IHJ0KHRoaXMpLHRoaXMuYmxlbmRGdW5jPW5ldyBudCh0aGlzKSx0aGlzLmJsZW5kQ29sb3I9bmV3IGl0KHRoaXMpLHRoaXMuYmxlbmRFcXVhdGlvbj1uZXcgYXQodGhpcyksdGhpcy5jdWxsRmFjZT1uZXcgb3QodGhpcyksdGhpcy5jdWxsRmFjZVNpZGU9bmV3IHN0KHRoaXMpLHRoaXMuZnJvbnRGYWNlPW5ldyBsdCh0aGlzKSx0aGlzLnByb2dyYW09bmV3IGN0KHRoaXMpLHRoaXMuYWN0aXZlVGV4dHVyZT1uZXcgdXQodGhpcyksdGhpcy52aWV3cG9ydD1uZXcgZnQodGhpcyksdGhpcy5iaW5kRnJhbWVidWZmZXI9bmV3IGh0KHRoaXMpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlcj1uZXcgcHQodGhpcyksdGhpcy5iaW5kVGV4dHVyZT1uZXcgZHQodGhpcyksdGhpcy5iaW5kVmVydGV4QnVmZmVyPW5ldyBtdCh0aGlzKSx0aGlzLmJpbmRFbGVtZW50QnVmZmVyPW5ldyBndCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiZuZXcgdnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrPW5ldyB5dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhPW5ldyB4dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWT1uZXcgYnQodGhpcyksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM9dC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiYodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg9dC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0JiYodC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksdGhpcy5leHRSZW5kZXJUb1RleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpKSx0aGlzLmV4dFRpbWVyUXVlcnk9dC5nZXRFeHRlbnNpb24oIkVYVF9kaXNqb2ludF90aW1lcl9xdWVyeSIpfTtMdC5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMudW5iaW5kVkFPKCksdGhpcy5jbGVhckNvbG9yLnNldERlZmF1bHQoKSx0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpLHRoaXMuY2xlYXJTdGVuY2lsLnNldERlZmF1bHQoKSx0aGlzLmNvbG9yTWFzay5zZXREZWZhdWx0KCksdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKSx0aGlzLnN0ZW5jaWxUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoRnVuYy5zZXREZWZhdWx0KCksdGhpcy5ibGVuZC5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuYmxlbmRDb2xvci5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEVxdWF0aW9uLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlU2lkZS5zZXREZWZhdWx0KCksdGhpcy5mcm9udEZhY2Uuc2V0RGVmYXVsdCgpLHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCksdGhpcy5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5zZXREZWZhdWx0KCksdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXREZWZhdWx0KCl9LEx0LnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuY2xlYXJDb2xvci5kaXJ0eT0hMCx0aGlzLmNsZWFyRGVwdGguZGlydHk9ITAsdGhpcy5jbGVhclN0ZW5jaWwuZGlydHk9ITAsdGhpcy5jb2xvck1hc2suZGlydHk9ITAsdGhpcy5kZXB0aE1hc2suZGlydHk9ITAsdGhpcy5zdGVuY2lsTWFzay5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxGdW5jLmRpcnR5PSEwLHRoaXMuc3RlbmNpbE9wLmRpcnR5PSEwLHRoaXMuc3RlbmNpbFRlc3QuZGlydHk9ITAsdGhpcy5kZXB0aFJhbmdlLmRpcnR5PSEwLHRoaXMuZGVwdGhUZXN0LmRpcnR5PSEwLHRoaXMuZGVwdGhGdW5jLmRpcnR5PSEwLHRoaXMuYmxlbmQuZGlydHk9ITAsdGhpcy5ibGVuZEZ1bmMuZGlydHk9ITAsdGhpcy5ibGVuZENvbG9yLmRpcnR5PSEwLHRoaXMuYmxlbmRFcXVhdGlvbi5kaXJ0eT0hMCx0aGlzLmN1bGxGYWNlLmRpcnR5PSEwLHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5PSEwLHRoaXMuZnJvbnRGYWNlLmRpcnR5PSEwLHRoaXMucHJvZ3JhbS5kaXJ0eT0hMCx0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHk9ITAsdGhpcy52aWV3cG9ydC5kaXJ0eT0hMCx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kVGV4dHVyZS5kaXJ0eT0hMCx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiYodGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuZGlydHk9ITApLHRoaXMucGl4ZWxTdG9yZVVucGFjay5kaXJ0eT0hMCx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLmRpcnR5PSEwLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5PSEwfSxMdC5wcm90b3R5cGUuY3JlYXRlSW5kZXhCdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGoodGhpcyx0LGUpfSxMdC5wcm90b3R5cGUuY3JlYXRlVmVydGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IFYodGhpcyx0LGUscil9LEx0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsaT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGkpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxpfSxMdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcga3QodGhpcyx0LGUscil9LEx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10LmNvbG9yLHI9dC5kZXB0aCxuPXRoaXMuZ2wsaT0wO2UmJihpfD1uLkNPTE9SX0JVRkZFUl9CSVQsdGhpcy5jbGVhckNvbG9yLnNldChlKSx0aGlzLmNvbG9yTWFzay5zZXQoWyEwLCEwLCEwLCEwXSkpLHZvaWQgMCE9PXImJihpfD1uLkRFUFRIX0JVRkZFUl9CSVQsdGhpcy5kZXB0aFJhbmdlLnNldChbMCwxXSksdGhpcy5jbGVhckRlcHRoLnNldChyKSx0aGlzLmRlcHRoTWFzay5zZXQoITApKSxuLmNsZWFyKGkpfSxMdC5wcm90b3R5cGUuc2V0Q3VsbEZhY2U9ZnVuY3Rpb24odCl7ITE9PT10LmVuYWJsZT90aGlzLmN1bGxGYWNlLnNldCghMSk6KHRoaXMuY3VsbEZhY2Uuc2V0KCEwKSx0aGlzLmN1bGxGYWNlU2lkZS5zZXQodC5tb2RlKSx0aGlzLmZyb250RmFjZS5zZXQodC5mcm9udEZhY2UpKX0sTHQucHJvdG90eXBlLnNldERlcHRoTW9kZT1mdW5jdGlvbih0KXt0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLmRlcHRoVGVzdC5zZXQoITApLHRoaXMuZGVwdGhGdW5jLnNldCh0LmZ1bmMpLHRoaXMuZGVwdGhNYXNrLnNldCh0Lm1hc2spLHRoaXMuZGVwdGhSYW5nZS5zZXQodC5yYW5nZSkpOnRoaXMuZGVwdGhUZXN0LnNldCghMSl9LEx0LnByb3RvdHlwZS5zZXRTdGVuY2lsTW9kZT1mdW5jdGlvbih0KXt0LnRlc3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuc3RlbmNpbFRlc3Quc2V0KCEwKSx0aGlzLnN0ZW5jaWxNYXNrLnNldCh0Lm1hc2spLHRoaXMuc3RlbmNpbE9wLnNldChbdC5mYWlsLHQuZGVwdGhGYWlsLHQucGFzc10pLHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtmdW5jOnQudGVzdC5mdW5jLHJlZjp0LnJlZixtYXNrOnQudGVzdC5tYXNrfSkpOnRoaXMuc3RlbmNpbFRlc3Quc2V0KCExKX0sTHQucHJvdG90eXBlLnNldENvbG9yTW9kZT1mdW5jdGlvbihlKXt0LmRlZXBFcXVhbChlLmJsZW5kRnVuY3Rpb24sU3QuUmVwbGFjZSk/dGhpcy5ibGVuZC5zZXQoITEpOih0aGlzLmJsZW5kLnNldCghMCksdGhpcy5ibGVuZEZ1bmMuc2V0KGUuYmxlbmRGdW5jdGlvbiksdGhpcy5ibGVuZENvbG9yLnNldChlLmJsZW5kQ29sb3IpKSx0aGlzLmNvbG9yTWFzay5zZXQoZS5tYXNrKX0sTHQucHJvdG90eXBlLnVuYmluZFZBTz1mdW5jdGlvbigpe3RoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJnRoaXMuYmluZFZlcnRleEFycmF5T0VTLnNldChudWxsKX07dmFyIEN0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGkpe3ZhciBhPXRoaXM7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24odCl7InNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGEuX3NvdXJjZUxvYWRlZD0hMCksYS5fc291cmNlTG9hZGVkJiYhYS5fcGF1c2VkJiYic291cmNlIj09PXQuZGF0YVR5cGUmJiJjb250ZW50Ij09PXQuc291cmNlRGF0YVR5cGUmJihhLnJlbG9hZCgpLGEudHJhbnNmb3JtJiZhLnVwZGF0ZShhLnRyYW5zZm9ybSkpfSkpLHRoaXMub24oImVycm9yIiwoZnVuY3Rpb24oKXthLl9zb3VyY2VFcnJvcmVkPSEwfSkpLHRoaXMuX3NvdXJjZT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgRFtyLnR5cGVdKGUscixuLGkpO2lmKGEuaWQhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrZSsiIGluc3RlYWQgb2YgIithLmlkKTtyZXR1cm4gdC5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGEpLGF9KHIsbixpLHRoaXMpLHRoaXMuX3RpbGVzPXt9LHRoaXMuX2NhY2hlPW5ldyBOKDAsdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl90aW1lcnM9e30sdGhpcy5fY2FjaGVUaW1lcnM9e30sdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1udWxsLHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzPXt9LHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLl9zdGF0ZT1uZXcgdC5Tb3VyY2VGZWF0dXJlU3RhdGV9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT10P3QuX21heFRpbGVDYWNoZVNpemU6bnVsbCx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5vbkFkZCYmdGhpcy5fc291cmNlLm9uQWRkKHQpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbih0KXt0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5vblJlbW92ZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlKHQpfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2VFcnJvcmVkKXJldHVybiEwO2lmKCF0aGlzLl9zb3VyY2VMb2FkZWQpcmV0dXJuITE7aWYoIXRoaXMuX3NvdXJjZS5sb2FkZWQoKSlyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2lmKCJsb2FkZWQiIT09ZS5zdGF0ZSYmImVycm9yZWQiIT09ZS5zdGF0ZSlyZXR1cm4hMX1yZXR1cm4hMH0sci5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZX0sci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wYXVzZWQ9ITB9LHIucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl7dmFyIHQ9dGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU7dGhpcy5fcGF1c2VkPSExLHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSExLHQmJnRoaXMucmVsb2FkKCksdGhpcy50cmFuc2Zvcm0mJnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKX19LHIucHJvdG90eXBlLl9sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zb3VyY2UubG9hZFRpbGUodCxlKX0sci5wcm90b3R5cGUuX3VubG9hZFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLnVubG9hZFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKHQsKGZ1bmN0aW9uKCl7fSkpfSxyLnByb3RvdHlwZS5fYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUodCwoZnVuY3Rpb24oKXt9KSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3NvdXJjZS5wcmVwYXJlJiZ0aGlzLl9zb3VyY2UucHJlcGFyZSgpLHRoaXMuX3N0YXRlLmNvYWxlc2NlQ2hhbmdlcyh0aGlzLl90aWxlcyx0aGlzLm1hcD90aGlzLm1hcC5wYWludGVyOm51bGwpLHRoaXMuX3RpbGVzKXt2YXIgcj10aGlzLl90aWxlc1tlXTtyLnVwbG9hZCh0KSxyLnByZXBhcmUodGhpcy5tYXAuc3R5bGUuaW1hZ2VNYW5hZ2VyKX19LHIucHJvdG90eXBlLmdldElkcz1mdW5jdGlvbigpe3JldHVybiB0LnZhbHVlcyh0aGlzLl90aWxlcykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50aWxlSUR9KSkuc29ydChQdCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSl9LHIucHJvdG90eXBlLmdldFJlbmRlcmFibGVJZHM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPVtdO2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl0aGlzLl9pc0lkUmVuZGVyYWJsZShpLGUpJiZuLnB1c2godGhpcy5fdGlsZXNbaV0pO3JldHVybiBlP24uc29ydCgoZnVuY3Rpb24oZSxuKXt2YXIgaT1lLnRpbGVJRCxhPW4udGlsZUlELG89bmV3IHQuUG9pbnQoaS5jYW5vbmljYWwueCxpLmNhbm9uaWNhbC55KS5fcm90YXRlKHIudHJhbnNmb3JtLmFuZ2xlKSxzPW5ldyB0LlBvaW50KGEuY2Fub25pY2FsLngsYS5jYW5vbmljYWwueSkuX3JvdGF0ZShyLnRyYW5zZm9ybS5hbmdsZSk7cmV0dXJuIGkub3ZlcnNjYWxlZFotYS5vdmVyc2NhbGVkWnx8cy55LW8ueXx8cy54LW8ueH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRC5rZXl9KSk6bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKS5zb3J0KFB0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0sci5wcm90b3R5cGUuaGFzUmVuZGVyYWJsZVBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmRMb2FkZWRQYXJlbnQodCwwKTtyZXR1cm4hIWUmJnRoaXMuX2lzSWRSZW5kZXJhYmxlKGUudGlsZUlELmtleSl9LHIucHJvdG90eXBlLl9pc0lkUmVuZGVyYWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90aWxlc1t0XSYmdGhpcy5fdGlsZXNbdF0uaGFzRGF0YSgpJiYhdGhpcy5fY292ZXJlZFRpbGVzW3RdJiYoZXx8IXRoaXMuX3RpbGVzW3RdLmhvbGRpbmdGb3JGYWRlKCkpfSxyLnByb3RvdHlwZS5yZWxvYWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITA7ZWxzZSBmb3IodmFyIHQgaW4gdGhpcy5fY2FjaGUucmVzZXQoKSx0aGlzLl90aWxlcykiZXJyb3JlZCIhPT10aGlzLl90aWxlc1t0XS5zdGF0ZSYmdGhpcy5fcmVsb2FkVGlsZSh0LCJyZWxvYWRpbmciKX0sci5wcm90b3R5cGUuX3JlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl90aWxlc1t0XTtyJiYoImxvYWRpbmciIT09ci5zdGF0ZSYmKHIuc3RhdGU9ZSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLHQsZSkpKX0sci5wcm90b3R5cGUuX3RpbGVMb2FkZWQ9ZnVuY3Rpb24oZSxyLG4saSl7aWYoaSlyZXR1cm4gZS5zdGF0ZT0iZXJyb3JlZCIsdm9pZCg0MDQhPT1pLnN0YXR1cz90aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KGkse3RpbGU6ZX0pKTp0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSkpO2UudGltZUFkZGVkPXQuYnJvd3Nlci5ub3coKSwiZXhwaXJlZCI9PT1uJiYoZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj0hMCksdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHIsZSksInJhc3Rlci1kZW0iPT09dGhpcy5nZXRTb3VyY2UoKS50eXBlJiZlLmRlbSYmdGhpcy5fYmFja2ZpbGxERU0oZSksdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZVRpbGVTdGF0ZShlLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIix0aWxlOmUsY29vcmQ6ZS50aWxlSUR9KSl9LHIucHJvdG90eXBlLl9iYWNrZmlsbERFTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW25dKXt2YXIgaT10aGlzLmdldFRpbGVCeUlEKG4pO2EodCxpKSxhKGksdCl9fWZ1bmN0aW9uIGEodCxlKXt0Lm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMDt2YXIgcj1lLnRpbGVJRC5jYW5vbmljYWwueC10LnRpbGVJRC5jYW5vbmljYWwueCxuPWUudGlsZUlELmNhbm9uaWNhbC55LXQudGlsZUlELmNhbm9uaWNhbC55LGk9TWF0aC5wb3coMix0LnRpbGVJRC5jYW5vbmljYWwueiksYT1lLnRpbGVJRC5rZXk7MD09PXImJjA9PT1ufHxNYXRoLmFicyhuKT4xfHwoTWF0aC5hYnMocik+MSYmKDE9PT1NYXRoLmFicyhyK2kpP3IrPWk6MT09PU1hdGguYWJzKHItaSkmJihyLT1pKSksZS5kZW0mJnQuZGVtJiYodC5kZW0uYmFja2ZpbGxCb3JkZXIoZS5kZW0scixuKSx0Lm5laWdoYm9yaW5nVGlsZXMmJnQubmVpZ2hib3JpbmdUaWxlc1thXSYmKHQubmVpZ2hib3JpbmdUaWxlc1thXS5iYWNrZmlsbGVkPSEwKSkpfX0sci5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0LmtleSl9LHIucHJvdG90eXBlLmdldFRpbGVCeUlEPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlc1t0XX0sci5wcm90b3R5cGUuX3JldGFpbkxvYWRlZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07aWYoIShuW2ldfHwhYS5oYXNEYXRhKCl8fGEudGlsZUlELm92ZXJzY2FsZWRaPD1lfHxhLnRpbGVJRC5vdmVyc2NhbGVkWj5yKSl7Zm9yKHZhciBvPWEudGlsZUlEO2EmJmEudGlsZUlELm92ZXJzY2FsZWRaPmUrMTspe3ZhciBzPWEudGlsZUlELnNjYWxlZFRvKGEudGlsZUlELm92ZXJzY2FsZWRaLTEpOyhhPXRoaXMuX3RpbGVzW3Mua2V5XSkmJmEuaGFzRGF0YSgpJiYobz1zKX1mb3IodmFyIGw9bztsLm92ZXJzY2FsZWRaPmU7KWlmKHRbKGw9bC5zY2FsZWRUbyhsLm92ZXJzY2FsZWRaLTEpKS5rZXldKXtuW28ua2V5XT1vO2JyZWFrfX19fSxyLnByb3RvdHlwZS5maW5kTG9hZGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7aWYodC5rZXkgaW4gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXMpe3ZhciByPXRoaXMuX2xvYWRlZFBhcmVudFRpbGVzW3Qua2V5XTtyZXR1cm4gciYmci50aWxlSUQub3ZlcnNjYWxlZFo+PWU/cjpudWxsfWZvcih2YXIgbj10Lm92ZXJzY2FsZWRaLTE7bj49ZTtuLS0pe3ZhciBpPXQuc2NhbGVkVG8obiksYT10aGlzLl9nZXRMb2FkZWRUaWxlKGkpO2lmKGEpcmV0dXJuIGF9fSxyLnByb3RvdHlwZS5fZ2V0TG9hZGVkVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0LmtleV07cmV0dXJuIGUmJmUuaGFzRGF0YSgpP2U6dGhpcy5fY2FjaGUuZ2V0QnlLZXkodC53cmFwcGVkKCkua2V5KX0sci5wcm90b3R5cGUudXBkYXRlQ2FjaGVTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPShNYXRoLmNlaWwodC53aWR0aC90aGlzLl9zb3VyY2UudGlsZVNpemUpKzEpKihNYXRoLmNlaWwodC5oZWlnaHQvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxKSxyPU1hdGguZmxvb3IoNSplKSxuPSJudW1iZXIiPT10eXBlb2YgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT9NYXRoLm1pbih0aGlzLl9tYXhUaWxlQ2FjaGVTaXplLHIpOnI7dGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShuKX0sci5wcm90b3R5cGUuaGFuZGxlV3JhcEp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9KHQtKHZvaWQgMD09PXRoaXMuX3ByZXZMbmc/dDp0aGlzLl9wcmV2TG5nKSkvMzYwLHI9TWF0aC5yb3VuZChlKTtpZih0aGlzLl9wcmV2TG5nPXQscil7dmFyIG49e307Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTthLnRpbGVJRD1hLnRpbGVJRC51bndyYXBUbyhhLnRpbGVJRC53cmFwK3IpLG5bYS50aWxlSUQua2V5XT1hfWZvcih2YXIgbyBpbiB0aGlzLl90aWxlcz1uLHRoaXMuX3RpbWVycyljbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW29dKSxkZWxldGUgdGhpcy5fdGltZXJzW29dO2Zvcih2YXIgcyBpbiB0aGlzLl90aWxlcyl7dmFyIGw9dGhpcy5fdGlsZXNbc107dGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHMsbCl9fX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy50cmFuc2Zvcm09ZSx0aGlzLl9zb3VyY2VMb2FkZWQmJiF0aGlzLl9wYXVzZWQpe3ZhciBpO3RoaXMudXBkYXRlQ2FjaGVTaXplKGUpLHRoaXMuaGFuZGxlV3JhcEp1bXAodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyksdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMudXNlZD90aGlzLl9zb3VyY2UudGlsZUlEP2k9ZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLmNhbm9uaWNhbC56LGUud3JhcCxlLmNhbm9uaWNhbC56LGUuY2Fub25pY2FsLngsZS5jYW5vbmljYWwueSl9KSk6KGk9ZS5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZTp0aGlzLl9zb3VyY2UudGlsZVNpemUsbWluem9vbTp0aGlzLl9zb3VyY2UubWluem9vbSxtYXh6b29tOnRoaXMuX3NvdXJjZS5tYXh6b29tLHJvdW5kWm9vbTp0aGlzLl9zb3VyY2Uucm91bmRab29tLHJlcGFyc2VPdmVyc2NhbGVkOnRoaXMuX3NvdXJjZS5yZXBhcnNlT3ZlcnNjYWxlZH0pLHRoaXMuX3NvdXJjZS5oYXNUaWxlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG4uX3NvdXJjZS5oYXNUaWxlKHQpfSkpKSk6aT1bXTt2YXIgYT1lLmNvdmVyaW5nWm9vbUxldmVsKHRoaXMuX3NvdXJjZSksbz1NYXRoLm1heChhLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9TWF0aC5tYXgoYStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksbD10aGlzLl91cGRhdGVSZXRhaW5lZFRpbGVzKGksYSk7aWYoSXQodGhpcy5fc291cmNlLnR5cGUpKXtmb3IodmFyIGM9e30sdT17fSxmPTAsaD1PYmplY3Qua2V5cyhsKTtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl0sZD1sW3BdLG09dGhpcy5fdGlsZXNbcF07aWYobSYmIShtLmZhZGVFbmRUaW1lJiZtLmZhZGVFbmRUaW1lPD10LmJyb3dzZXIubm93KCkpKXt2YXIgZz10aGlzLmZpbmRMb2FkZWRQYXJlbnQoZCxvKTtnJiYodGhpcy5fYWRkVGlsZShnLnRpbGVJRCksY1tnLnRpbGVJRC5rZXldPWcudGlsZUlEKSx1W3BdPWR9fWZvcih2YXIgdiBpbiB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbih1LGEscyxsKSxjKWxbdl18fCh0aGlzLl9jb3ZlcmVkVGlsZXNbdl09ITAsbFt2XT1jW3ZdKX1mb3IodmFyIHkgaW4gbCl0aGlzLl90aWxlc1t5XS5jbGVhckZhZGVIb2xkKCk7Zm9yKHZhciB4PTAsYj10LmtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLGwpO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PXRoaXMuX3RpbGVzW19dO3cuaGFzU3ltYm9sQnVja2V0cyYmIXcuaG9sZGluZ0ZvckZhZGUoKT93LnNldEhvbGREdXJhdGlvbih0aGlzLm1hcC5fZmFkZUR1cmF0aW9uKTp3Lmhhc1N5bWJvbEJ1Y2tldHMmJiF3LnN5bWJvbEZhZGVGaW5pc2hlZCgpfHx0aGlzLl9yZW1vdmVUaWxlKF8pfXRoaXMuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZSgpfX0sci5wcm90b3R5cGUucmVsZWFzZVN5bWJvbEZhZGVUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5ob2xkaW5nRm9yRmFkZSgpJiZ0aGlzLl9yZW1vdmVUaWxlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUmV0YWluZWRUaWxlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj17fSxpPXt9LGE9TWF0aC5tYXgoZS1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxvPU1hdGgubWF4KGUrci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9e30sbD0wLGM9dDtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0sZj10aGlzLl9hZGRUaWxlKHUpO25bdS5rZXldPXUsZi5oYXNEYXRhKCl8fGU8dGhpcy5fc291cmNlLm1heHpvb20mJihzW3Uua2V5XT11KX10aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihzLGUsbyxuKTtmb3IodmFyIGg9MCxwPXQ7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdLG09dGhpcy5fdGlsZXNbZC5rZXldO2lmKCFtLmhhc0RhdGEoKSl7aWYoZSsxPnRoaXMuX3NvdXJjZS5tYXh6b29tKXt2YXIgZz1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKVswXSx2PXRoaXMuZ2V0VGlsZShnKTtpZih2JiZ2Lmhhc0RhdGEoKSl7bltnLmtleV09Zztjb250aW51ZX19ZWxzZXt2YXIgeT1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKTtpZihuW3lbMF0ua2V5XSYmblt5WzFdLmtleV0mJm5beVsyXS5rZXldJiZuW3lbM10ua2V5XSljb250aW51ZX1mb3IodmFyIHg9bS53YXNSZXF1ZXN0ZWQoKSxiPWQub3ZlcnNjYWxlZFotMTtiPj1hOy0tYil7dmFyIF89ZC5zY2FsZWRUbyhiKTtpZihpW18ua2V5XSlicmVhaztpZihpW18ua2V5XT0hMCwhKG09dGhpcy5nZXRUaWxlKF8pKSYmeCYmKG09dGhpcy5fYWRkVGlsZShfKSksbSYmKG5bXy5rZXldPV8seD1tLndhc1JlcXVlc3RlZCgpLG0uaGFzRGF0YSgpKSlicmVha319fXJldHVybiBufSxyLnByb3RvdHlwZS5fdXBkYXRlTG9hZGVkUGFyZW50VGlsZUNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzPXt9LHRoaXMuX3RpbGVzKXtmb3IodmFyIGU9W10scj12b2lkIDAsbj10aGlzLl90aWxlc1t0XS50aWxlSUQ7bi5vdmVyc2NhbGVkWj4wOyl7aWYobi5rZXkgaW4gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXMpe3I9dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbbi5rZXldO2JyZWFrfWUucHVzaChuLmtleSk7dmFyIGk9bi5zY2FsZWRUbyhuLm92ZXJzY2FsZWRaLTEpO2lmKHI9dGhpcy5fZ2V0TG9hZGVkVGlsZShpKSlicmVhaztuPWl9Zm9yKHZhciBhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTt0aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tzXT1yfX19LHIucHJvdG90eXBlLl9hZGRUaWxlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3RpbGVzW2Uua2V5XTtpZihyKXJldHVybiByOyhyPXRoaXMuX2NhY2hlLmdldEFuZFJlbW92ZShlKSkmJih0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoZS5rZXksciksci50aWxlSUQ9ZSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKHIsdGhpcy5tYXA/dGhpcy5tYXAucGFpbnRlcjpudWxsKSx0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0mJihjbGVhclRpbWVvdXQodGhpcy5fY2FjaGVUaW1lcnNbZS5rZXldKSxkZWxldGUgdGhpcy5fY2FjaGVUaW1lcnNbZS5rZXldLHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSkpO3ZhciBuPUJvb2xlYW4ocik7cmV0dXJuIG58fChyPW5ldyB0LlRpbGUoZSx0aGlzLl9zb3VyY2UudGlsZVNpemUqZS5vdmVyc2NhbGVGYWN0b3IoKSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLGUua2V5LHIuc3RhdGUpKSkscj8oci51c2VzKyssdGhpcy5fdGlsZXNbZS5rZXldPXIsbnx8dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7dGlsZTpyLGNvb3JkOnIudGlsZUlELGRhdGFUeXBlOiJzb3VyY2UifSkpLHIpOm51bGx9LHIucHJvdG90eXBlLl9zZXRUaWxlUmVsb2FkVGltZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3QgaW4gdGhpcy5fdGltZXJzJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSk7dmFyIG49ZS5nZXRFeHBpcnlUaW1lb3V0KCk7biYmKHRoaXMuX3RpbWVyc1t0XT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3IuX3JlbG9hZFRpbGUodCwiZXhwaXJlZCIpLGRlbGV0ZSByLl90aW1lcnNbdF19KSxuKSl9LHIucHJvdG90eXBlLl9yZW1vdmVUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2UmJihlLnVzZXMtLSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5fdGltZXJzW3RdJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1t0XSksZGVsZXRlIHRoaXMuX3RpbWVyc1t0XSksZS51c2VzPjB8fChlLmhhc0RhdGEoKSYmInJlbG9hZGluZyIhPT1lLnN0YXRlP3RoaXMuX2NhY2hlLmFkZChlLnRpbGVJRCxlLGUuZ2V0RXhwaXJ5VGltZW91dCgpKTooZS5hYm9ydGVkPSEwLHRoaXMuX2Fib3J0VGlsZShlKSx0aGlzLl91bmxvYWRUaWxlKGUpKSkpfSxyLnByb3RvdHlwZS5jbGVhclRpbGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSExLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl90aWxlcyl0aGlzLl9yZW1vdmVUaWxlKHQpO3RoaXMuX2NhY2hlLnJlc2V0KCl9LHIucHJvdG90eXBlLnRpbGVzSW49ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMsYT1bXSxvPXRoaXMudHJhbnNmb3JtO2lmKCFvKXJldHVybiBhO2Zvcih2YXIgcz1uP28uZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeShlKTplLGw9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50Q29vcmRpbmF0ZSh0KX0pKSxjPXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gby5wb2ludENvb3JkaW5hdGUodCl9KSksdT10aGlzLmdldElkcygpLGY9MS8wLGg9MS8wLHA9LTEvMCxkPS0xLzAsbT0wLGc9YzttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV07Zj1NYXRoLm1pbihmLHYueCksaD1NYXRoLm1pbihoLHYueSkscD1NYXRoLm1heChwLHYueCksZD1NYXRoLm1heChkLHYueSl9Zm9yKHZhciB5PWZ1bmN0aW9uKGUpe3ZhciBuPWkuX3RpbGVzW3VbZV1dO2lmKCFuLmhvbGRpbmdGb3JGYWRlKCkpe3ZhciBzPW4udGlsZUlELG09TWF0aC5wb3coMixvLnpvb20tbi50aWxlSUQub3ZlcnNjYWxlZFopLGc9cipuLnF1ZXJ5UGFkZGluZyp0LkVYVEVOVC9uLnRpbGVTaXplL20sdj1bcy5nZXRUaWxlUG9pbnQobmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKGYsaCkpLHMuZ2V0VGlsZVBvaW50KG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShwLGQpKV07aWYodlswXS54LWc8dC5FWFRFTlQmJnZbMF0ueS1nPHQuRVhURU5UJiZ2WzFdLngrZz49MCYmdlsxXS55K2c+PTApe3ZhciB5PWwubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcy5nZXRUaWxlUG9pbnQodCl9KSkseD1jLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHMuZ2V0VGlsZVBvaW50KHQpfSkpO2EucHVzaCh7dGlsZTpuLHRpbGVJRDpzLHF1ZXJ5R2VvbWV0cnk6eSxjYW1lcmFRdWVyeUdlb21ldHJ5Ongsc2NhbGU6bX0pfX19LHg9MDt4PHUubGVuZ3RoO3grKyl5KHgpO3JldHVybiBhfSxyLnByb3RvdHlwZS5nZXRWaXNpYmxlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj10aGlzLmdldFJlbmRlcmFibGVJZHModCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdGlsZXNbdF0udGlsZUlEfSkpLG49MCxpPXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2EucG9zTWF0cml4PXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChhLnRvVW53cmFwcGVkKCkpfXJldHVybiByfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtpZihJdCh0aGlzLl9zb3VyY2UudHlwZSkpZm9yKHZhciBlIGluIHRoaXMuX3RpbGVzKXt2YXIgcj10aGlzLl90aWxlc1tlXTtpZih2b2lkIDAhPT1yLmZhZGVFbmRUaW1lJiZyLmZhZGVFbmRUaW1lPj10LmJyb3dzZXIubm93KCkpcmV0dXJuITB9cmV0dXJuITF9LHIucHJvdG90eXBlLnNldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUscil7dD10fHwiX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuX3N0YXRlLnVwZGF0ZVN0YXRlKHQsZSxyKX0sci5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsdGhpcy5fc3RhdGUucmVtb3ZlRmVhdHVyZVN0YXRlKHQsZSxyKX0sci5wcm90b3R5cGUuZ2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9dHx8Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLl9zdGF0ZS5nZXRTdGF0ZSh0LGUpfSxyLnByb3RvdHlwZS5zZXREZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3RpbGVzW3RdO24mJm4uc2V0RGVwZW5kZW5jaWVzKGUscil9LHIucHJvdG90eXBlLnJlbG9hZFRpbGVzRm9yRGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMuX3RpbGVzKXt0aGlzLl90aWxlc1tyXS5oYXNEZXBlbmRlbmN5KHQsZSkmJnRoaXMuX3JlbG9hZFRpbGUociwicmVsb2FkaW5nIil9dGhpcy5fY2FjaGUuZmlsdGVyKChmdW5jdGlvbihyKXtyZXR1cm4hci5oYXNEZXBlbmRlbmN5KHQsZSl9KSl9LHJ9KHQuRXZlbnRlZCk7ZnVuY3Rpb24gUHQodCxlKXt2YXIgcj1NYXRoLmFicygyKnQud3JhcCktKyh0LndyYXA8MCksbj1NYXRoLmFicygyKmUud3JhcCktKyhlLndyYXA8MCk7cmV0dXJuIHQub3ZlcnNjYWxlZFotZS5vdmVyc2NhbGVkWnx8bi1yfHxlLmNhbm9uaWNhbC55LXQuY2Fub25pY2FsLnl8fGUuY2Fub25pY2FsLngtdC5jYW5vbmljYWwueH1mdW5jdGlvbiBJdCh0KXtyZXR1cm4icmFzdGVyIj09PXR8fCJpbWFnZSI9PT10fHwidmlkZW8iPT09dH1mdW5jdGlvbiBPdCgpe3JldHVybiBuZXcgdC53aW5kb3cuV29ya2VyKFppLndvcmtlclVybCl9Q3QubWF4T3Zlcnpvb21pbmc9MTAsQ3QubWF4VW5kZXJ6b29taW5nPTM7dmFyIHp0PSJtYXBib3hnbF9wcmVsb2FkZWRfd29ya2VyX3Bvb2wiLER0PWZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9e319O0R0LnByb3RvdHlwZS5hY3F1aXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLndvcmtlcnMpZm9yKHRoaXMud29ya2Vycz1bXTt0aGlzLndvcmtlcnMubGVuZ3RoPER0LndvcmtlckNvdW50Oyl0aGlzLndvcmtlcnMucHVzaChuZXcgT3QpO3JldHVybiB0aGlzLmFjdGl2ZVt0XT0hMCx0aGlzLndvcmtlcnMuc2xpY2UoKX0sRHQucHJvdG90eXBlLnJlbGVhc2U9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuYWN0aXZlW3RdLDA9PT10aGlzLm51bUFjdGl2ZSgpJiYodGhpcy53b3JrZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudGVybWluYXRlKCl9KSksdGhpcy53b3JrZXJzPW51bGwpfSxEdC5wcm90b3R5cGUuaXNQcmVsb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYWN0aXZlW3p0XX0sRHQucHJvdG90eXBlLm51bUFjdGl2ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RofTt2YXIgUnQsRnQ9TWF0aC5mbG9vcih0LmJyb3dzZXIuaGFyZHdhcmVDb25jdXJyZW5jeS8yKTtmdW5jdGlvbiBCdCgpe3JldHVybiBSdHx8KFJ0PW5ldyBEdCksUnR9ZnVuY3Rpb24gTnQoZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gZSkicmVmIiE9PWkmJihuW2ldPWVbaV0pO3JldHVybiB0LnJlZlByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCBpbiByJiYoblt0XT1yW3RdKX0pKSxufWZ1bmN0aW9uIGp0KHQpe3Q9dC5zbGljZSgpO2Zvcih2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl0uaWRdPXRbcl07Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspInJlZiJpbiB0W25dJiYodFtuXT1OdCh0W25dLGVbdFtuXS5yZWZdKSk7cmV0dXJuIHR9RHQud29ya2VyQ291bnQ9TWF0aC5tYXgoTWF0aC5taW4oRnQsNiksMSk7dmFyIFV0PXtzZXRTdHlsZToic2V0U3R5bGUiLGFkZExheWVyOiJhZGRMYXllciIscmVtb3ZlTGF5ZXI6InJlbW92ZUxheWVyIixzZXRQYWludFByb3BlcnR5OiJzZXRQYWludFByb3BlcnR5IixzZXRMYXlvdXRQcm9wZXJ0eToic2V0TGF5b3V0UHJvcGVydHkiLHNldEZpbHRlcjoic2V0RmlsdGVyIixhZGRTb3VyY2U6ImFkZFNvdXJjZSIscmVtb3ZlU291cmNlOiJyZW1vdmVTb3VyY2UiLHNldEdlb0pTT05Tb3VyY2VEYXRhOiJzZXRHZW9KU09OU291cmNlRGF0YSIsc2V0TGF5ZXJab29tUmFuZ2U6InNldExheWVyWm9vbVJhbmdlIixzZXRMYXllclByb3BlcnR5OiJzZXRMYXllclByb3BlcnR5IixzZXRDZW50ZXI6InNldENlbnRlciIsc2V0Wm9vbToic2V0Wm9vbSIsc2V0QmVhcmluZzoic2V0QmVhcmluZyIsc2V0UGl0Y2g6InNldFBpdGNoIixzZXRTcHJpdGU6InNldFNwcml0ZSIsc2V0R2x5cGhzOiJzZXRHbHlwaHMiLHNldFRyYW5zaXRpb246InNldFRyYW5zaXRpb24iLHNldExpZ2h0OiJzZXRMaWdodCJ9O2Z1bmN0aW9uIFZ0KHQsZSxyKXtyLnB1c2goe2NvbW1hbmQ6VXQuYWRkU291cmNlLGFyZ3M6W3QsZVt0XV19KX1mdW5jdGlvbiBIdCh0LGUscil7ZS5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZVNvdXJjZSxhcmdzOlt0XX0pLHJbdF09ITB9ZnVuY3Rpb24gcXQodCxlLHIsbil7SHQodCxyLG4pLFZ0KHQsZSxyKX1mdW5jdGlvbiBHdChlLHIsbil7dmFyIGk7Zm9yKGkgaW4gZVtuXSlpZihlW25dLmhhc093blByb3BlcnR5KGkpJiYiZGF0YSIhPT1pJiYhdC5kZWVwRXF1YWwoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtmb3IoaSBpbiByW25dKWlmKHJbbl0uaGFzT3duUHJvcGVydHkoaSkmJiJkYXRhIiE9PWkmJiF0LmRlZXBFcXVhbChlW25dW2ldLHJbbl1baV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFl0KGUscixuLGksYSxvKXt2YXIgcztmb3IocyBpbiByPXJ8fHt9LGU9ZXx8e30pZS5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZGVlcEVxdWFsKGVbc10scltzXSl8fG4ucHVzaCh7Y29tbWFuZDpvLGFyZ3M6W2kscyxyW3NdLGFdfSkpO2ZvcihzIGluIHIpci5oYXNPd25Qcm9wZXJ0eShzKSYmIWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZXBFcXVhbChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKX1mdW5jdGlvbiBXdCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBYdCh0LGUpe3JldHVybiB0W2UuaWRdPWUsdH1mdW5jdGlvbiBadChlLHIpe2lmKCFlKXJldHVyblt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dO3ZhciBuPVtdO3RyeXtpZighdC5kZWVwRXF1YWwoZS52ZXJzaW9uLHIudmVyc2lvbikpcmV0dXJuW3tjb21tYW5kOlV0LnNldFN0eWxlLGFyZ3M6W3JdfV07dC5kZWVwRXF1YWwoZS5jZW50ZXIsci5jZW50ZXIpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0Q2VudGVyLGFyZ3M6W3IuY2VudGVyXX0pLHQuZGVlcEVxdWFsKGUuem9vbSxyLnpvb20pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0Wm9vbSxhcmdzOltyLnpvb21dfSksdC5kZWVwRXF1YWwoZS5iZWFyaW5nLHIuYmVhcmluZyl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRCZWFyaW5nLGFyZ3M6W3IuYmVhcmluZ119KSx0LmRlZXBFcXVhbChlLnBpdGNoLHIucGl0Y2gpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0UGl0Y2gsYXJnczpbci5waXRjaF19KSx0LmRlZXBFcXVhbChlLnNwcml0ZSxyLnNwcml0ZSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRTcHJpdGUsYXJnczpbci5zcHJpdGVdfSksdC5kZWVwRXF1YWwoZS5nbHlwaHMsci5nbHlwaHMpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0R2x5cGhzLGFyZ3M6W3IuZ2x5cGhzXX0pLHQuZGVlcEVxdWFsKGUudHJhbnNpdGlvbixyLnRyYW5zaXRpb24pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0VHJhbnNpdGlvbixhcmdzOltyLnRyYW5zaXRpb25dfSksdC5kZWVwRXF1YWwoZS5saWdodCxyLmxpZ2h0KXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExpZ2h0LGFyZ3M6W3IubGlnaHRdfSk7dmFyIGk9e30sYT1bXTshZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE7Zm9yKGEgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkoYSkmJihyLmhhc093blByb3BlcnR5KGEpfHxIdChhLG4saSkpO2ZvcihhIGluIHIpci5oYXNPd25Qcm9wZXJ0eShhKSYmKGUuaGFzT3duUHJvcGVydHkoYSk/dC5kZWVwRXF1YWwoZVthXSxyW2FdKXx8KCJnZW9qc29uIj09PWVbYV0udHlwZSYmImdlb2pzb24iPT09clthXS50eXBlJiZHdChlLHIsYSk/bi5wdXNoKHtjb21tYW5kOlV0LnNldEdlb0pTT05Tb3VyY2VEYXRhLGFyZ3M6W2EsclthXS5kYXRhXX0pOnF0KGEscixuLGkpKTpWdChhLHIsbikpfShlLnNvdXJjZXMsci5zb3VyY2VzLGEsaSk7dmFyIG89W107ZS5sYXllcnMmJmUubGF5ZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdC5zb3VyY2VdP24ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOlt0LmlkXX0pOm8ucHVzaCh0KX0pKSxuPW4uY29uY2F0KGEpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBpLGEsbyxzLGwsYyx1LGY9KGU9ZXx8W10pLm1hcChXdCksaD1yLm1hcChXdCkscD1lLnJlZHVjZShYdCx7fSksZD1yLnJlZHVjZShYdCx7fSksbT1mLnNsaWNlKCksZz1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihpPTAsYT0wO2k8Zi5sZW5ndGg7aSsrKW89ZltpXSxkLmhhc093blByb3BlcnR5KG8pP2ErKzoobi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksbS5zcGxpY2UobS5pbmRleE9mKG8sYSksMSkpO2ZvcihpPTAsYT0wO2k8aC5sZW5ndGg7aSsrKW89aFtoLmxlbmd0aC0xLWldLG1bbS5sZW5ndGgtMS1pXSE9PW8mJihwLmhhc093blByb3BlcnR5KG8pPyhuLnB1c2goe2NvbW1hbmQ6VXQucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxtLnNwbGljZShtLmxhc3RJbmRleE9mKG8sbS5sZW5ndGgtYSksMSkpOmErKyxjPW1bbS5sZW5ndGgtaV0sbi5wdXNoKHtjb21tYW5kOlV0LmFkZExheWVyLGFyZ3M6W2Rbb10sY119KSxtLnNwbGljZShtLmxlbmd0aC1pLDAsbyksZ1tvXT0hMCk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylpZihzPXBbbz1oW2ldXSxsPWRbb10sIWdbb10mJiF0LmRlZXBFcXVhbChzLGwpKWlmKHQuZGVlcEVxdWFsKHMuc291cmNlLGwuc291cmNlKSYmdC5kZWVwRXF1YWwoc1sic291cmNlLWxheWVyIl0sbFsic291cmNlLWxheWVyIl0pJiZ0LmRlZXBFcXVhbChzLnR5cGUsbC50eXBlKSl7Zm9yKHUgaW4gWXQocy5sYXlvdXQsbC5sYXlvdXQsbixvLG51bGwsVXQuc2V0TGF5b3V0UHJvcGVydHkpLFl0KHMucGFpbnQsbC5wYWludCxuLG8sbnVsbCxVdC5zZXRQYWludFByb3BlcnR5KSx0LmRlZXBFcXVhbChzLmZpbHRlcixsLmZpbHRlcil8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRGaWx0ZXIsYXJnczpbbyxsLmZpbHRlcl19KSx0LmRlZXBFcXVhbChzLm1pbnpvb20sbC5taW56b29tKSYmdC5kZWVwRXF1YWwocy5tYXh6b29tLGwubWF4em9vbSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRMYXllclpvb21SYW5nZSxhcmdzOltvLGwubWluem9vbSxsLm1heHpvb21dfSkscylzLmhhc093blByb3BlcnR5KHUpJiYibGF5b3V0IiE9PXUmJiJwYWludCIhPT11JiYiZmlsdGVyIiE9PXUmJiJtZXRhZGF0YSIhPT11JiYibWluem9vbSIhPT11JiYibWF4em9vbSIhPT11JiYoMD09PXUuaW5kZXhPZigicGFpbnQuIik/WXQoc1t1XSxsW3VdLG4sbyx1LnNsaWNlKDYpLFV0LnNldFBhaW50UHJvcGVydHkpOnQuZGVlcEVxdWFsKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKTtmb3IodSBpbiBsKWwuaGFzT3duUHJvcGVydHkodSkmJiFzLmhhc093blByb3BlcnR5KHUpJiYibGF5b3V0IiE9PXUmJiJwYWludCIhPT11JiYiZmlsdGVyIiE9PXUmJiJtZXRhZGF0YSIhPT11JiYibWluem9vbSIhPT11JiYibWF4em9vbSIhPT11JiYoMD09PXUuaW5kZXhPZigicGFpbnQuIik/WXQoc1t1XSxsW3VdLG4sbyx1LnNsaWNlKDYpLFV0LnNldFBhaW50UHJvcGVydHkpOnQuZGVlcEVxdWFsKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKX1lbHNlIG4ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOltvXX0pLGM9bVttLmxhc3RJbmRleE9mKG8pKzFdLG4ucHVzaCh7Y29tbWFuZDpVdC5hZGRMYXllcixhcmdzOltsLGNdfSl9KG8sci5sYXllcnMsbil9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOiIsdCksbj1be2NvbW1hbmQ6VXQuc2V0U3R5bGUsYXJnczpbcl19XX1yZXR1cm4gbn12YXIgSnQ9ZnVuY3Rpb24odCxlKXt0aGlzLnJlc2V0KHQsZSl9O0p0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0LGUpe3RoaXMucG9pbnRzPXR8fFtdLHRoaXMuX2Rpc3RhbmNlcz1bMF07Zm9yKHZhciByPTE7cjx0aGlzLnBvaW50cy5sZW5ndGg7cisrKXRoaXMuX2Rpc3RhbmNlc1tyXT10aGlzLl9kaXN0YW5jZXNbci0xXSt0aGlzLnBvaW50c1tyXS5kaXN0KHRoaXMucG9pbnRzW3ItMV0pO3RoaXMubGVuZ3RoPXRoaXMuX2Rpc3RhbmNlc1t0aGlzLl9kaXN0YW5jZXMubGVuZ3RoLTFdLHRoaXMucGFkZGluZz1NYXRoLm1pbihlfHwwLC41KnRoaXMubGVuZ3RoKSx0aGlzLnBhZGRlZExlbmd0aD10aGlzLmxlbmd0aC0yKnRoaXMucGFkZGluZ30sSnQucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMucG9pbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5wb2ludHNbMF07ZT10LmNsYW1wKGUsMCwxKTtmb3IodmFyIHI9MSxuPXRoaXMuX2Rpc3RhbmNlc1tyXSxpPWUqdGhpcy5wYWRkZWRMZW5ndGgrdGhpcy5wYWRkaW5nO248aSYmcjx0aGlzLl9kaXN0YW5jZXMubGVuZ3RoOyluPXRoaXMuX2Rpc3RhbmNlc1srK3JdO3ZhciBhPXItMSxvPXRoaXMuX2Rpc3RhbmNlc1thXSxzPW4tbyxsPXM+MD8oaS1vKS9zOjA7cmV0dXJuIHRoaXMucG9pbnRzW2FdLm11bHQoMS1sKS5hZGQodGhpcy5wb2ludHNbcl0ubXVsdChsKSl9O3ZhciBLdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5ib3hDZWxscz1bXSxpPXRoaXMuY2lyY2xlQ2VsbHM9W107dGhpcy54Q2VsbENvdW50PU1hdGguY2VpbCh0L3IpLHRoaXMueUNlbGxDb3VudD1NYXRoLmNlaWwoZS9yKTtmb3IodmFyIGE9MDthPHRoaXMueENlbGxDb3VudCp0aGlzLnlDZWxsQ291bnQ7YSsrKW4ucHVzaChbXSksaS5wdXNoKFtdKTt0aGlzLmNpcmNsZUtleXM9W10sdGhpcy5ib3hLZXlzPVtdLHRoaXMuYmJveGVzPVtdLHRoaXMuY2lyY2xlcz1bXSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLnhTY2FsZT10aGlzLnhDZWxsQ291bnQvdCx0aGlzLnlTY2FsZT10aGlzLnlDZWxsQ291bnQvZSx0aGlzLmJveFVpZD0wLHRoaXMuY2lyY2xlVWlkPTB9O2Z1bmN0aW9uIFF0KGUscixuLGksYSl7dmFyIG89dC5jcmVhdGUoKTtyZXR1cm4gcj8odC5zY2FsZShvLG8sWzEvYSwxL2EsMV0pLG58fHQucm90YXRlWihvLG8saS5hbmdsZSkpOnQubXVsdGlwbHkobyxpLmxhYmVsUGxhbmVNYXRyaXgsZSksb31mdW5jdGlvbiAkdChlLHIsbixpLGEpe2lmKHIpe3ZhciBvPXQuY2xvbmUoZSk7cmV0dXJuIHQuc2NhbGUobyxvLFthLGEsMV0pLG58fHQucm90YXRlWihvLG8sLWkuYW5nbGUpLG99cmV0dXJuIGkuZ2xDb29yZE1hdHJpeH1mdW5jdGlvbiB0ZShlLHIpe3ZhciBuPVtlLngsZS55LDAsMV07ZmUobixuLHIpO3ZhciBpPW5bM107cmV0dXJue3BvaW50Om5ldyB0LlBvaW50KG5bMF0vaSxuWzFdL2kpLHNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYTppfX1mdW5jdGlvbiBlZSh0LGUpe3JldHVybi41K3QvZSouNX1mdW5jdGlvbiByZSh0LGUpe3ZhciByPXRbMF0vdFszXSxuPXRbMV0vdFszXTtyZXR1cm4gcj49LWVbMF0mJnI8PWVbMF0mJm4+PS1lWzFdJiZuPD1lWzFdfWZ1bmN0aW9uIG5lKGUscixuLGksYSxvLHMsbCl7dmFyIGM9aT9lLnRleHRTaXplRGF0YTplLmljb25TaXplRGF0YSx1PXQuZXZhbHVhdGVTaXplRm9yWm9vbShjLG4udHJhbnNmb3JtLnpvb20pLGY9WzI1Ni9uLndpZHRoKjIrMSwyNTYvbi5oZWlnaHQqMisxXSxoPWk/ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTplLmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O2guY2xlYXIoKTtmb3IodmFyIHA9ZS5saW5lVmVydGV4QXJyYXksZD1pP2UudGV4dC5wbGFjZWRTeW1ib2xBcnJheTplLmljb24ucGxhY2VkU3ltYm9sQXJyYXksbT1uLnRyYW5zZm9ybS53aWR0aC9uLnRyYW5zZm9ybS5oZWlnaHQsZz0hMSx2PTA7djxkLmxlbmd0aDt2Kyspe3ZhciB5PWQuZ2V0KHYpO2lmKHkuaGlkZGVufHx5LndyaXRpbmdNb2RlPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCYmIWcpdWUoeS5udW1HbHlwaHMsaCk7ZWxzZXtnPSExO3ZhciB4PVt5LmFuY2hvclgseS5hbmNob3JZLDAsMV07aWYodC50cmFuc2Zvcm1NYXQ0KHgseCxyKSxyZSh4LGYpKXt2YXIgYj14WzNdLF89ZWUobi50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxiKSx3PXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShjLHUseSksVD1zP3cvXzp3Kl8saz1uZXcgdC5Qb2ludCh5LmFuY2hvclgseS5hbmNob3JZKSxBPXRlKGssYSkucG9pbnQsTT17fSxTPW9lKHksVCwhMSxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGgsQSxrLE0sbSk7Zz1TLnVzZVZlcnRpY2FsLChTLm5vdEVub3VnaFJvb218fGd8fFMubmVlZHNGbGlwcGluZyYmb2UoeSxULCEwLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsaCxBLGssTSxtKS5ub3RFbm91Z2hSb29tKSYmdWUoeS5udW1HbHlwaHMsaCl9ZWxzZSB1ZSh5Lm51bUdseXBocyxoKX19aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGgpOmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoaCl9ZnVuY3Rpb24gaWUodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj1zLmdseXBoU3RhcnRJbmRleCtzLm51bUdseXBocyxoPXMubGluZVN0YXJ0SW5kZXgscD1zLmxpbmVTdGFydEluZGV4K3MubGluZUxlbmd0aCxkPWUuZ2V0b2Zmc2V0WChzLmdseXBoU3RhcnRJbmRleCksbT1lLmdldG9mZnNldFgoZi0xKSxnPWxlKHQqZCxyLG4saSxhLG8scy5zZWdtZW50LGgscCxsLGMsdSk7aWYoIWcpcmV0dXJuIG51bGw7dmFyIHY9bGUodCptLHIsbixpLGEsbyxzLnNlZ21lbnQsaCxwLGwsYyx1KTtyZXR1cm4gdj97Zmlyc3Q6ZyxsYXN0OnZ9Om51bGx9ZnVuY3Rpb24gYWUoZSxyLG4saSl7aWYoZT09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCYmTWF0aC5hYnMobi55LXIueSk+TWF0aC5hYnMobi54LXIueCkqaSlyZXR1cm57dXNlVmVydGljYWw6ITB9O3JldHVybihlPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9yLnk8bi55OnIueD5uLngpP3tuZWVkc0ZsaXBwaW5nOiEwfTpudWxsfWZ1bmN0aW9uIG9lKGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCl7dmFyIG0sZz1yLzI0LHY9ZS5saW5lT2Zmc2V0WCpnLHk9ZS5saW5lT2Zmc2V0WSpnO2lmKGUubnVtR2x5cGhzPjEpe3ZhciB4PWUuZ2x5cGhTdGFydEluZGV4K2UubnVtR2x5cGhzLGI9ZS5saW5lU3RhcnRJbmRleCxfPWUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLHc9aWUoZyxsLHYseSxuLGYsaCxlLGMsbyxwKTtpZighdylyZXR1cm57bm90RW5vdWdoUm9vbTohMH07dmFyIFQ9dGUody5maXJzdC5wb2ludCxzKS5wb2ludCxrPXRlKHcubGFzdC5wb2ludCxzKS5wb2ludDtpZihpJiYhbil7dmFyIEE9YWUoZS53cml0aW5nTW9kZSxULGssZCk7aWYoQSlyZXR1cm4gQX1tPVt3LmZpcnN0XTtmb3IodmFyIE09ZS5nbHlwaFN0YXJ0SW5kZXgrMTtNPHgtMTtNKyspbS5wdXNoKGxlKGcqbC5nZXRvZmZzZXRYKE0pLHYseSxuLGYsaCxlLnNlZ21lbnQsYixfLGMsbyxwKSk7bS5wdXNoKHcubGFzdCl9ZWxzZXtpZihpJiYhbil7dmFyIFM9dGUoaCxhKS5wb2ludCxFPWUubGluZVN0YXJ0SW5kZXgrZS5zZWdtZW50KzEsTD1uZXcgdC5Qb2ludChjLmdldHgoRSksYy5nZXR5KEUpKSxDPXRlKEwsYSksUD1DLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYT4wP0MucG9pbnQ6c2UoaCxMLFMsMSxhKSxJPWFlKGUud3JpdGluZ01vZGUsUyxQLGQpO2lmKEkpcmV0dXJuIEl9dmFyIE89bGUoZypsLmdldG9mZnNldFgoZS5nbHlwaFN0YXJ0SW5kZXgpLHYseSxuLGYsaCxlLnNlZ21lbnQsZS5saW5lU3RhcnRJbmRleCxlLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCxjLG8scCk7aWYoIU8pcmV0dXJue25vdEVub3VnaFJvb206ITB9O209W09dfWZvcih2YXIgej0wLEQ9bTt6PEQubGVuZ3RoO3orPTEpe3ZhciBSPURbel07dC5hZGREeW5hbWljQXR0cmlidXRlcyh1LFIucG9pbnQsUi5hbmdsZSl9cmV0dXJue319ZnVuY3Rpb24gc2UodCxlLHIsbixpKXt2YXIgYT10ZSh0LmFkZCh0LnN1YihlKS5fdW5pdCgpKSxpKS5wb2ludCxvPXIuc3ViKGEpO3JldHVybiByLmFkZChvLl9tdWx0KG4vby5tYWcoKSkpfWZ1bmN0aW9uIGxlKGUscixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcD1pP2UtcjplK3IsZD1wPjA/MTotMSxtPTA7aSYmKGQqPS0xLG09TWF0aC5QSSksZDwwJiYobSs9TWF0aC5QSSk7Zm9yKHZhciBnPWQ+MD9sK3M6bCtzKzEsdj1hLHk9YSx4PTAsYj0wLF89TWF0aC5hYnMocCksdz1bXTt4K2I8PV87KXtpZigoZys9ZCk8bHx8Zz49YylyZXR1cm4gbnVsbDtpZih5PXYsdy5wdXNoKHYpLHZvaWQgMD09PSh2PWhbZ10pKXt2YXIgVD1uZXcgdC5Qb2ludCh1LmdldHgoZyksdS5nZXR5KGcpKSxrPXRlKFQsZik7aWYoay5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MCl2PWhbZ109ay5wb2ludDtlbHNle3ZhciBBPWctZDt2PXNlKDA9PT14P286bmV3IHQuUG9pbnQodS5nZXR4KEEpLHUuZ2V0eShBKSksVCx5LF8teCsxLGYpfX14Kz1iLGI9eS5kaXN0KHYpfXZhciBNPShfLXgpL2IsUz12LnN1Yih5KSxFPVMubXVsdChNKS5fYWRkKHkpO0UuX2FkZChTLl91bml0KCkuX3BlcnAoKS5fbXVsdChuKmQpKTt2YXIgTD1tK01hdGguYXRhbjIodi55LXkueSx2LngteS54KTtyZXR1cm4gdy5wdXNoKEUpLHtwb2ludDpFLGFuZ2xlOkwscGF0aDp3fX1LdC5wcm90b3R5cGUua2V5c0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJveEtleXMubGVuZ3RoK3RoaXMuY2lyY2xlS2V5cy5sZW5ndGh9LEt0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydEJveENlbGwsdGhpcy5ib3hVaWQrKyksdGhpcy5ib3hLZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sS3QucHJvdG90eXBlLmluc2VydENpcmNsZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLl9mb3JFYWNoQ2VsbChlLW4sci1uLGUrbixyK24sdGhpcy5faW5zZXJ0Q2lyY2xlQ2VsbCx0aGlzLmNpcmNsZVVpZCsrKSx0aGlzLmNpcmNsZUtleXMucHVzaCh0KSx0aGlzLmNpcmNsZXMucHVzaChlKSx0aGlzLmNpcmNsZXMucHVzaChyKSx0aGlzLmNpcmNsZXMucHVzaChuKX0sS3QucHJvdG90eXBlLl9pbnNlcnRCb3hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmJveENlbGxzW2ldLnB1c2goYSl9LEt0LnByb3RvdHlwZS5faW5zZXJ0Q2lyY2xlQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jaXJjbGVDZWxsc1tpXS5wdXNoKGEpfSxLdC5wcm90b3R5cGUuX3F1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZihyPDB8fHQ+dGhpcy53aWR0aHx8bjwwfHxlPnRoaXMuaGVpZ2h0KXJldHVybiFpJiZbXTt2YXIgbz1bXTtpZih0PD0wJiZlPD0wJiZ0aGlzLndpZHRoPD1yJiZ0aGlzLmhlaWdodDw9bil7aWYoaSlyZXR1cm4hMDtmb3IodmFyIHM9MDtzPHRoaXMuYm94S2V5cy5sZW5ndGg7cysrKW8ucHVzaCh7a2V5OnRoaXMuYm94S2V5c1tzXSx4MTp0aGlzLmJib3hlc1s0KnNdLHkxOnRoaXMuYmJveGVzWzQqcysxXSx4Mjp0aGlzLmJib3hlc1s0KnMrMl0seTI6dGhpcy5iYm94ZXNbNCpzKzNdfSk7Zm9yKHZhciBsPTA7bDx0aGlzLmNpcmNsZUtleXMubGVuZ3RoO2wrKyl7dmFyIGM9dGhpcy5jaXJjbGVzWzMqbF0sdT10aGlzLmNpcmNsZXNbMypsKzFdLGY9dGhpcy5jaXJjbGVzWzMqbCsyXTtvLnB1c2goe2tleTp0aGlzLmNpcmNsZUtleXNbbF0seDE6Yy1mLHkxOnUtZix4MjpjK2YseTI6dStmfSl9cmV0dXJuIGE/by5maWx0ZXIoYSk6b312YXIgaD17aGl0VGVzdDppLHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLG8saCxhKSxpP28ubGVuZ3RoPjA6b30sS3QucHJvdG90eXBlLl9xdWVyeUNpcmNsZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXQtcixvPXQrcixzPWUtcixsPWUrcjtpZihvPDB8fGE+dGhpcy53aWR0aHx8bDwwfHxzPnRoaXMuaGVpZ2h0KXJldHVybiFuJiZbXTt2YXIgYz1bXSx1PXtoaXRUZXN0Om4sY2lyY2xlOnt4OnQseTplLHJhZGl1czpyfSxzZWVuVWlkczp7Ym94Ont9LGNpcmNsZTp7fX19O3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbChhLHMsbyxsLHRoaXMuX3F1ZXJ5Q2VsbENpcmNsZSxjLHUsaSksbj9jLmxlbmd0aD4wOmN9LEt0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCExLGkpfSxLdC5wcm90b3R5cGUuaGl0VGVzdD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCEwLGkpfSxLdC5wcm90b3R5cGUuaGl0VGVzdENpcmNsZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5fcXVlcnlDaXJjbGUodCxlLHIsITAsbil9LEt0LnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9by5zZWVuVWlkcyxjPXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PWMpZm9yKHZhciB1PXRoaXMuYmJveGVzLGY9MCxoPWM7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdO2lmKCFsLmJveFtwXSl7bC5ib3hbcF09ITA7dmFyIGQ9NCpwO2lmKHQ8PXVbZCsyXSYmZTw9dVtkKzNdJiZyPj11W2QrMF0mJm4+PXVbZCsxXSYmKCFzfHxzKHRoaXMuYm94S2V5c1twXSkpKXtpZihvLmhpdFRlc3QpcmV0dXJuIGEucHVzaCghMCksITA7YS5wdXNoKHtrZXk6dGhpcy5ib3hLZXlzW3BdLHgxOnVbZF0seTE6dVtkKzFdLHgyOnVbZCsyXSx5Mjp1W2QrM119KX19fXZhciBtPXRoaXMuY2lyY2xlQ2VsbHNbaV07aWYobnVsbCE9PW0pZm9yKHZhciBnPXRoaXMuY2lyY2xlcyx2PTAseT1tO3Y8eS5sZW5ndGg7dis9MSl7dmFyIHg9eVt2XTtpZighbC5jaXJjbGVbeF0pe2wuY2lyY2xlW3hdPSEwO3ZhciBiPTMqeDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShnW2JdLGdbYisxXSxnW2IrMl0sdCxlLHIsbikmJighc3x8cyh0aGlzLmNpcmNsZUtleXNbeF0pKSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO3ZhciBfPWdbYl0sdz1nW2IrMV0sVD1nW2IrMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3hdLHgxOl8tVCx5MTp3LVQseDI6XytULHkyOncrVH0pfX19fSxLdC5wcm90b3R5cGUuX3F1ZXJ5Q2VsbENpcmNsZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPW8uY2lyY2xlLGM9by5zZWVuVWlkcyx1PXRoaXMuYm94Q2VsbHNbaV07aWYobnVsbCE9PXUpZm9yKHZhciBmPXRoaXMuYmJveGVzLGg9MCxwPXU7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdO2lmKCFjLmJveFtkXSl7Yy5ib3hbZF09ITA7dmFyIG09NCpkO2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGwueCxsLnksbC5yYWRpdXMsZlttKzBdLGZbbSsxXSxmW20rMl0sZlttKzNdKSYmKCFzfHxzKHRoaXMuYm94S2V5c1tkXSkpKXJldHVybiBhLnB1c2goITApLCEwfX12YXIgZz10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1nKWZvcih2YXIgdj10aGlzLmNpcmNsZXMseT0wLHg9Zzt5PHgubGVuZ3RoO3krPTEpe3ZhciBiPXhbeV07aWYoIWMuY2lyY2xlW2JdKXtjLmNpcmNsZVtiXT0hMDt2YXIgXz0zKmI7aWYodGhpcy5fY2lyY2xlc0NvbGxpZGUodltfXSx2W18rMV0sdltfKzJdLGwueCxsLnksbC5yYWRpdXMpJiYoIXN8fHModGhpcy5jaXJjbGVLZXlzW2JdKSkpcmV0dXJuIGEucHVzaCghMCksITB9fX0sS3QucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHQpLGM9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChlKSx1PXRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQociksZj10aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKG4pLGg9bDtoPD11O2grKylmb3IodmFyIHA9YztwPD1mO3ArKyl7dmFyIGQ9dGhpcy54Q2VsbENvdW50KnAraDtpZihpLmNhbGwodGhpcyx0LGUscixuLGQsYSxvLHMpKXJldHVybn19LEt0LnByb3RvdHlwZS5fY29udmVydFRvWENlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnhDZWxsQ291bnQtMSxNYXRoLmZsb29yKHQqdGhpcy54U2NhbGUpKSl9LEt0LnByb3RvdHlwZS5fY29udmVydFRvWUNlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnlDZWxsQ291bnQtMSxNYXRoLmZsb29yKHQqdGhpcy55U2NhbGUpKSl9LEt0LnByb3RvdHlwZS5fY2lyY2xlc0NvbGxpZGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW4tdCxzPWktZSxsPXIrYTtyZXR1cm4gbCpsPm8qbytzKnN9LEt0LnByb3RvdHlwZS5fY2lyY2xlQW5kUmVjdENvbGxpZGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9KGEtbikvMixsPU1hdGguYWJzKHQtKG4rcykpO2lmKGw+cytyKXJldHVybiExO3ZhciBjPShvLWkpLzIsdT1NYXRoLmFicyhlLShpK2MpKTtpZih1PmMrcilyZXR1cm4hMTtpZihsPD1zfHx1PD1jKXJldHVybiEwO3ZhciBmPWwtcyxoPXUtYztyZXR1cm4gZipmK2gqaDw9cipyfTt2YXIgY2U9bmV3IEZsb2F0MzJBcnJheShbLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDBdKTtmdW5jdGlvbiB1ZSh0LGUpe2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPWUubGVuZ3RoO2UucmVzaXplKG4rNCksZS5mbG9hdDMyLnNldChjZSwzKm4pfX1mdW5jdGlvbiBmZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzEyXSx0WzFdPXJbMV0qbityWzVdKmkrclsxM10sdFszXT1yWzNdKm4rcls3XSppK3JbMTVdLHR9dmFyIGhlPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1lJiYoZT1uZXcgS3QodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdm9pZCAwPT09ciYmKHI9bmV3IEt0KHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5ncmlkPWUsdGhpcy5pZ25vcmVkR3JpZD1yLHRoaXMucGl0Y2hmYWN0b3I9TWF0aC5jb3ModC5fcGl0Y2gpKnQuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnk9dC53aWR0aCsxMDAsdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeT10LmhlaWdodCsxMDAsdGhpcy5ncmlkUmlnaHRCb3VuZGFyeT10LndpZHRoKzIwMCx0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeT10LmhlaWdodCsyMDB9O2Z1bmN0aW9uIHBlKGUscixuKXtyZXR1cm4gcioodC5FWFRFTlQvKGUudGlsZVNpemUqTWF0aC5wb3coMixuLWUudGlsZUlELm92ZXJzY2FsZWRaKSkpfWhlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8obix0LmFuY2hvclBvaW50WCx0LmFuY2hvclBvaW50WSksbz1yKmEucGVyc3BlY3RpdmVSYXRpbyxzPXQueDEqbythLnBvaW50LngsbD10LnkxKm8rYS5wb2ludC55LGM9dC54MipvK2EucG9pbnQueCx1PXQueTIqbythLnBvaW50Lnk7cmV0dXJuIXRoaXMuaXNJbnNpZGVHcmlkKHMsbCxjLHUpfHwhZSYmdGhpcy5ncmlkLmhpdFRlc3QocyxsLGMsdSxpKT97Ym94OltdLG9mZnNjcmVlbjohMX06e2JveDpbcyxsLGMsdV0sb2Zmc2NyZWVuOnRoaXMuaXNPZmZzY3JlZW4ocyxsLGMsdSl9fSxoZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUsZixoLHApe3ZhciBkPVtdLG09bmV3IHQuUG9pbnQoci5hbmNob3JYLHIuYW5jaG9yWSksZz10ZShtLG8pLHY9ZWUodGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxnLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSkseT0odT9hL3Y6YSp2KS90Lk9ORV9FTSx4PXRlKG0scykucG9pbnQsYj1pZSh5LGksci5saW5lT2Zmc2V0WCp5LHIubGluZU9mZnNldFkqeSwhMSx4LG0scixuLHMse30pLF89ITEsdz0hMSxUPSEwO2lmKGIpe2Zvcih2YXIgaz0uNSpoKnYrcCxBPW5ldyB0LlBvaW50KC0xMDAsLTEwMCksTT1uZXcgdC5Qb2ludCh0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnksdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSksUz1uZXcgSnQsRT1iLmZpcnN0LEw9Yi5sYXN0LEM9W10sUD1FLnBhdGgubGVuZ3RoLTE7UD49MTtQLS0pQy5wdXNoKEUucGF0aFtQXSk7Zm9yKHZhciBJPTE7STxMLnBhdGgubGVuZ3RoO0krKylDLnB1c2goTC5wYXRoW0ldKTt2YXIgTz0yLjUqaztpZihsKXt2YXIgej1DLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRlKHQsbCl9KSk7Qz16LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYTw9MH0pKT9bXTp6Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9pbnR9KSl9dmFyIEQ9W107aWYoQy5sZW5ndGg+MCl7Zm9yKHZhciBSPUNbMF0uY2xvbmUoKSxGPUNbMF0uY2xvbmUoKSxCPTE7QjxDLmxlbmd0aDtCKyspUi54PU1hdGgubWluKFIueCxDW0JdLngpLFIueT1NYXRoLm1pbihSLnksQ1tCXS55KSxGLng9TWF0aC5tYXgoRi54LENbQl0ueCksRi55PU1hdGgubWF4KEYueSxDW0JdLnkpO0Q9Ui54Pj1BLngmJkYueDw9TS54JiZSLnk+PUEueSYmRi55PD1NLnk/W0NdOkYueDxBLnh8fFIueD5NLnh8fEYueTxBLnl8fFIueT5NLnk/W106dC5jbGlwTGluZShbQ10sQS54LEEueSxNLngsTS55KX1mb3IodmFyIE49MCxqPUQ7TjxqLmxlbmd0aDtOKz0xKXt2YXIgVT1qW05dO1MucmVzZXQoVSwuMjUqayk7dmFyIFY9MDtWPVMubGVuZ3RoPD0uNSprPzE6TWF0aC5jZWlsKFMucGFkZGVkTGVuZ3RoL08pKzE7Zm9yKHZhciBIPTA7SDxWO0grKyl7dmFyIHE9SC9NYXRoLm1heChWLTEsMSksRz1TLmxlcnAocSksWT1HLngrMTAwLFc9Ry55KzEwMDtkLnB1c2goWSxXLGssMCk7dmFyIFg9WS1rLFo9Vy1rLEo9WStrLEs9VytrO2lmKFQ9VCYmdGhpcy5pc09mZnNjcmVlbihYLFosSixLKSx3PXd8fHRoaXMuaXNJbnNpZGVHcmlkKFgsWixKLEspLCFlJiZ0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShZLFcsayxmKSYmKF89ITAsIWMpKXJldHVybntjaXJjbGVzOltdLG9mZnNjcmVlbjohMSxjb2xsaXNpb25EZXRlY3RlZDpffX19fXJldHVybntjaXJjbGVzOiFjJiZffHwhdz9bXTpkLG9mZnNjcmVlbjpULGNvbGxpc2lvbkRldGVjdGVkOl99fSxoZS5wcm90b3R5cGUucXVlcnlSZW5kZXJlZFN5bWJvbHM9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5ncmlkLmtleXNMZW5ndGgoKSYmMD09PXRoaXMuaWdub3JlZEdyaWQua2V5c0xlbmd0aCgpKXJldHVybnt9O2Zvcih2YXIgcj1bXSxuPTEvMCxpPTEvMCxhPS0xLzAsbz0tMS8wLHM9MCxsPWU7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9bmV3IHQuUG9pbnQoYy54KzEwMCxjLnkrMTAwKTtuPU1hdGgubWluKG4sdS54KSxpPU1hdGgubWluKGksdS55KSxhPU1hdGgubWF4KGEsdS54KSxvPU1hdGgubWF4KG8sdS55KSxyLnB1c2godSl9Zm9yKHZhciBmPXt9LGg9e30scD0wLGQ9dGhpcy5ncmlkLnF1ZXJ5KG4saSxhLG8pLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG4saSxhLG8pKTtwPGQubGVuZ3RoO3ArPTEpe3ZhciBtPWRbcF0sZz1tLmtleTtpZih2b2lkIDA9PT1mW2cuYnVja2V0SW5zdGFuY2VJZF0mJihmW2cuYnVja2V0SW5zdGFuY2VJZF09e30pLCFmW2cuYnVja2V0SW5zdGFuY2VJZF1bZy5mZWF0dXJlSW5kZXhdKXt2YXIgdj1bbmV3IHQuUG9pbnQobS54MSxtLnkxKSxuZXcgdC5Qb2ludChtLngyLG0ueTEpLG5ldyB0LlBvaW50KG0ueDIsbS55MiksbmV3IHQuUG9pbnQobS54MSxtLnkyKV07dC5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24ocix2KSYmKGZbZy5idWNrZXRJbnN0YW5jZUlkXVtnLmZlYXR1cmVJbmRleF09ITAsdm9pZCAwPT09aFtnLmJ1Y2tldEluc3RhbmNlSWRdJiYoaFtnLmJ1Y2tldEluc3RhbmNlSWRdPVtdKSxoW2cuYnVja2V0SW5zdGFuY2VJZF0ucHVzaChnLmZlYXR1cmVJbmRleCkpfX1yZXR1cm4gaH0saGUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om4sY29sbGlzaW9uR3JvdXBJRDppfTsoZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCkuaW5zZXJ0KGEsdFswXSx0WzFdLHRbMl0sdFszXSl9LGhlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPWU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQsbz17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpuLGNvbGxpc2lvbkdyb3VwSUQ6aX0scz0wO3M8dC5sZW5ndGg7cys9NClhLmluc2VydENpcmNsZShvLHRbc10sdFtzKzFdLHRbcysyXSl9LGhlLnByb3RvdHlwZS5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbz1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiBmZShpLGksZSkse3BvaW50Om5ldyB0LlBvaW50KChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKSxwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvaVszXSouNX19LGhlLnByb3RvdHlwZS5pc09mZnNjcmVlbj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcjwxMDB8fHQ+PXRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeXx8bjwxMDB8fGU+dGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeX0saGUucHJvdG90eXBlLmlzSW5zaWRlR3JpZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcj49MCYmdDx0aGlzLmdyaWRSaWdodEJvdW5kYXJ5JiZuPj0wJiZlPHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5fSxoZS5wcm90b3R5cGUuZ2V0Vmlld3BvcnRNYXRyaXg9ZnVuY3Rpb24oKXt2YXIgZT10LmlkZW50aXR5KFtdKTtyZXR1cm4gdC50cmFuc2xhdGUoZSxlLFstMTAwLC0xMDAsMF0pLGV9O3ZhciBkZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLm9wYWNpdHk9dD9NYXRoLm1heCgwLE1hdGgubWluKDEsdC5vcGFjaXR5Kyh0LnBsYWNlZD9lOi1lKSkpOm4mJnI/MTowLHRoaXMucGxhY2VkPXJ9O2RlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5vcGFjaXR5JiYhdGhpcy5wbGFjZWR9O3ZhciBtZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudGV4dD1uZXcgZGUodD90LnRleHQ6bnVsbCxlLHIsaSksdGhpcy5pY29uPW5ldyBkZSh0P3QuaWNvbjpudWxsLGUsbixpKX07bWUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpJiZ0aGlzLmljb24uaXNIaWRkZW4oKX07dmFyIGdlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCx0aGlzLmljb249ZSx0aGlzLnNraXBGYWRlPXJ9LHZlPWZ1bmN0aW9uKCl7dGhpcy5pbnZQcm9qTWF0cml4PXQuY3JlYXRlKCksdGhpcy52aWV3cG9ydE1hdHJpeD10LmNyZWF0ZSgpLHRoaXMuY2lyY2xlcz1bXX0seWU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9dCx0aGlzLmZlYXR1cmVJbmRleD1lLHRoaXMuc291cmNlTGF5ZXJJbmRleD1yLHRoaXMuYnVja2V0SW5kZXg9bix0aGlzLnRpbGVJRD1pfSx4ZT1mdW5jdGlvbih0KXt0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucz10LHRoaXMubWF4R3JvdXBJRD0wLHRoaXMuY29sbGlzaW9uR3JvdXBzPXt9fTtmdW5jdGlvbiBiZShlLHIsbixpLGEpe3ZhciBvPXQuZ2V0QW5jaG9yQWxpZ25tZW50KGUpLHM9LShvLmhvcml6b250YWxBbGlnbi0uNSkqcixsPS0oby52ZXJ0aWNhbEFsaWduLS41KSpuLGM9dC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGUsaSk7cmV0dXJuIG5ldyB0LlBvaW50KHMrY1swXSphLGwrY1sxXSphKX1mdW5jdGlvbiBfZShlLHIsbixpLGEsbyl7dmFyIHM9ZS54MSxsPWUueDIsYz1lLnkxLHU9ZS55MixmPWUuYW5jaG9yUG9pbnRYLGg9ZS5hbmNob3JQb2ludFkscD1uZXcgdC5Qb2ludChyLG4pO3JldHVybiBpJiZwLl9yb3RhdGUoYT9vOi1vKSx7eDE6cytwLngseTE6YytwLnkseDI6bCtwLngseTI6dStwLnksYW5jaG9yUG9pbnRYOmYsYW5jaG9yUG9pbnRZOmh9fXhlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMpcmV0dXJue0lEOjAscHJlZGljYXRlOm51bGx9O2lmKCF0aGlzLmNvbGxpc2lvbkdyb3Vwc1t0XSl7dmFyIGU9Kyt0aGlzLm1heEdyb3VwSUQ7dGhpcy5jb2xsaXNpb25Hcm91cHNbdF09e0lEOmUscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbGxpc2lvbkdyb3VwSUQ9PT1lfX19cmV0dXJuIHRoaXMuY29sbGlzaW9uR3JvdXBzW3RdfTt2YXIgd2U9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy50cmFuc2Zvcm09dC5jbG9uZSgpLHRoaXMuY29sbGlzaW9uSW5kZXg9bmV3IGhlKHRoaXMudHJhbnNmb3JtKSx0aGlzLnBsYWNlbWVudHM9e30sdGhpcy5vcGFjaXRpZXM9e30sdGhpcy52YXJpYWJsZU9mZnNldHM9e30sdGhpcy5zdGFsZT0hMSx0aGlzLmNvbW1pdFRpbWU9MCx0aGlzLmZhZGVEdXJhdGlvbj1lLHRoaXMucmV0YWluZWRRdWVyeURhdGE9e30sdGhpcy5jb2xsaXNpb25Hcm91cHM9bmV3IHhlKHIpLHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzPXt9LHRoaXMucHJldlBsYWNlbWVudD1uLG4mJihuLnByZXZQbGFjZW1lbnQ9dm9pZCAwKSx0aGlzLnBsYWNlZE9yaWVudGF0aW9ucz17fX07ZnVuY3Rpb24gVGUodCxlLHIsbixpKXt0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGl8fDApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCl9d2UucHJvdG90eXBlLmdldEJ1Y2tldFBhcnRzPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4uZ2V0QnVja2V0KHIpLG89bi5sYXRlc3RGZWF0dXJlSW5kZXg7aWYoYSYmbyYmci5pZD09PWEubGF5ZXJJZHNbMF0pe3ZhciBzPW4uY29sbGlzaW9uQm94QXJyYXksbD1hLmxheWVyc1swXS5sYXlvdXQsYz1NYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tbi50aWxlSUQub3ZlcnNjYWxlZFopLHU9bi50aWxlU2l6ZS90LkVYVEVOVCxmPXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChuLnRpbGVJRC50b1Vud3JhcHBlZCgpKSxoPSJtYXAiPT09bC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IikscD0ibWFwIj09PWwuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLGQ9cGUobiwxLHRoaXMudHJhbnNmb3JtLnpvb20pLG09UXQoZixoLHAsdGhpcy50cmFuc2Zvcm0sZCksZz1udWxsO2lmKGgpe3ZhciB2PSR0KGYsaCxwLHRoaXMudHJhbnNmb3JtLGQpO2c9dC5tdWx0aXBseShbXSx0aGlzLnRyYW5zZm9ybS5sYWJlbFBsYW5lTWF0cml4LHYpfXRoaXMucmV0YWluZWRRdWVyeURhdGFbYS5idWNrZXRJbnN0YW5jZUlkXT1uZXcgeWUoYS5idWNrZXRJbnN0YW5jZUlkLG8sYS5zb3VyY2VMYXllckluZGV4LGEuaW5kZXgsbi50aWxlSUQpO3ZhciB5PXtidWNrZXQ6YSxsYXlvdXQ6bCxwb3NNYXRyaXg6Zix0ZXh0TGFiZWxQbGFuZU1hdHJpeDptLGxhYmVsVG9TY3JlZW5NYXRyaXg6ZyxzY2FsZTpjLHRleHRQaXhlbFJhdGlvOnUsaG9sZGluZ0ZvckZhZGU6bi5ob2xkaW5nRm9yRmFkZSgpLGNvbGxpc2lvbkJveEFycmF5OnMscGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemU6dC5ldmFsdWF0ZVNpemVGb3Jab29tKGEudGV4dFNpemVEYXRhLHRoaXMudHJhbnNmb3JtLnpvb20pLGNvbGxpc2lvbkdyb3VwOnRoaXMuY29sbGlzaW9uR3JvdXBzLmdldChhLnNvdXJjZUlEKX07aWYoaSlmb3IodmFyIHg9MCxiPWEuc29ydEtleVJhbmdlczt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF0sdz1fLnNvcnRLZXksVD1fLnN5bWJvbEluc3RhbmNlU3RhcnQsaz1fLnN5bWJvbEluc3RhbmNlRW5kO2UucHVzaCh7c29ydEtleTp3LHN5bWJvbEluc3RhbmNlU3RhcnQ6VCxzeW1ib2xJbnN0YW5jZUVuZDprLHBhcmFtZXRlcnM6eX0pfWVsc2UgZS5wdXNoKHtzeW1ib2xJbnN0YW5jZVN0YXJ0OjAsc3ltYm9sSW5zdGFuY2VFbmQ6YS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoLHBhcmFtZXRlcnM6eX0pfX0sd2UucHJvdG90eXBlLmF0dGVtcHRBbmNob3JQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQpe3ZhciBtLGc9W2YudGV4dE9mZnNldDAsZi50ZXh0T2Zmc2V0MV0sdj1iZSh0LHIsbixnLGkpLHk9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChfZShlLHYueCx2LnksYSxvLHRoaXMudHJhbnNmb3JtLmFuZ2xlKSx1LHMsbCxjLnByZWRpY2F0ZSk7aWYoZCYmMD09PXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goX2UoZCx2Lngsdi55LGEsbyx0aGlzLnRyYW5zZm9ybS5hbmdsZSksdSxzLGwsYy5wcmVkaWNhdGUpLmJveC5sZW5ndGgpcmV0dXJuO2lmKHkuYm94Lmxlbmd0aD4wKXJldHVybiB0aGlzLnByZXZQbGFjZW1lbnQmJnRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZi5jcm9zc1RpbGVJRF0mJnRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW2YuY3Jvc3NUaWxlSURdJiZ0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1tmLmNyb3NzVGlsZUlEXS50ZXh0JiYobT10aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2YuY3Jvc3NUaWxlSURdLmFuY2hvciksdGhpcy52YXJpYWJsZU9mZnNldHNbZi5jcm9zc1RpbGVJRF09e3RleHRPZmZzZXQ6Zyx3aWR0aDpyLGhlaWdodDpuLGFuY2hvcjp0LHRleHRCb3hTY2FsZTppLHByZXZBbmNob3I6bX0sdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oaCx0LGYscCksaC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYodGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGgscCxmKSx0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tmLmNyb3NzVGlsZUlEXT1wKSx7c2hpZnQ6dixwbGFjZWRHbHlwaEJveGVzOnl9fSx3ZS5wcm90b3R5cGUucGxhY2VMYXllckJ1Y2tldFBhcnQ9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMsYT1lLnBhcmFtZXRlcnMsbz1hLmJ1Y2tldCxzPWEubGF5b3V0LGw9YS5wb3NNYXRyaXgsYz1hLnRleHRMYWJlbFBsYW5lTWF0cml4LHU9YS5sYWJlbFRvU2NyZWVuTWF0cml4LGY9YS50ZXh0UGl4ZWxSYXRpbyxoPWEuaG9sZGluZ0ZvckZhZGUscD1hLmNvbGxpc2lvbkJveEFycmF5LGQ9YS5wYXJ0aWFsbHlFdmFsdWF0ZWRUZXh0U2l6ZSxtPWEuY29sbGlzaW9uR3JvdXAsZz1zLmdldCgidGV4dC1vcHRpb25hbCIpLHY9cy5nZXQoImljb24tb3B0aW9uYWwiKSx5PXMuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSx4PXMuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSxiPSJtYXAiPT09cy5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksXz0ibWFwIj09PXMuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLHc9Im5vbmUiIT09cy5nZXQoImljb24tdGV4dC1maXQiKSxUPSJ2aWV3cG9ydC15Ij09PXMuZ2V0KCJzeW1ib2wtei1vcmRlciIpLGs9eSYmKHh8fCFvLmhhc0ljb25EYXRhKCl8fHYpLEE9eCYmKHl8fCFvLmhhc1RleHREYXRhKCl8fGcpOyFvLmNvbGxpc2lvbkFycmF5cyYmcCYmby5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKHApO3ZhciBNPWZ1bmN0aW9uKGUsYSl7aWYoIXJbZS5jcm9zc1RpbGVJRF0paWYoaClpLnBsYWNlbWVudHNbZS5jcm9zc1RpbGVJRF09bmV3IGdlKCExLCExLCExKTtlbHNle3ZhciBwLFQ9ITEsTT0hMSxTPSEwLEU9bnVsbCxMPXtib3g6bnVsbCxvZmZzY3JlZW46bnVsbH0sQz17Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9LFA9bnVsbCxJPW51bGwsTz0wLHo9MCxEPTA7YS50ZXh0RmVhdHVyZUluZGV4P089YS50ZXh0RmVhdHVyZUluZGV4OmUudXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMmJihPPWUuZmVhdHVyZUluZGV4KSxhLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCYmKHo9YS52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpO3ZhciBSPWEudGV4dEJveDtpZihSKXt2YXIgRj1mdW5jdGlvbihyKXt2YXIgbj10LldyaXRpbmdNb2RlLmhvcml6b250YWw7aWYoby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhciYmaS5wcmV2UGxhY2VtZW50KXt2YXIgYT1pLnByZXZQbGFjZW1lbnQucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdO2EmJihpLnBsYWNlZE9yaWVudGF0aW9uc1tlLmNyb3NzVGlsZUlEXT1hLG49YSxpLm1hcmtVc2VkT3JpZW50YXRpb24obyxuLGUpKX1yZXR1cm4gbn0sQj1mdW5jdGlvbihyLG4pe2lmKG8uYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCYmYS52ZXJ0aWNhbFRleHRCb3gpZm9yKHZhciBpPTAscz1vLndyaXRpbmdNb2RlcztpPHMubGVuZ3RoO2krPTEpe2lmKHNbaV09PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsPyhMPW4oKSxDPUwpOkw9cigpLEwmJkwuYm94JiZMLmJveC5sZW5ndGgpYnJlYWt9ZWxzZSBMPXIoKX07aWYocy5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIikpe3ZhciBOPXMuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpO2lmKGkucHJldlBsYWNlbWVudCYmaS5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tlLmNyb3NzVGlsZUlEXSl7dmFyIGo9aS5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tlLmNyb3NzVGlsZUlEXTtOLmluZGV4T2Yoai5hbmNob3IpPjAmJihOPU4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWouYW5jaG9yfSkpKS51bnNoaWZ0KGouYW5jaG9yKX12YXIgVT1mdW5jdGlvbih0LHIsbil7Zm9yKHZhciBhPXQueDItdC54MSxzPXQueTItdC55MSxjPWUudGV4dEJveFNjYWxlLHU9dyYmIXg/cjpudWxsLGg9e2JveDpbXSxvZmZzY3JlZW46ITF9LHA9eT8yKk4ubGVuZ3RoOk4ubGVuZ3RoLGQ9MDtkPHA7KytkKXt2YXIgZz1OW2QlTi5sZW5ndGhdLHY9ZD49Ti5sZW5ndGgsaz1pLmF0dGVtcHRBbmNob3JQbGFjZW1lbnQoZyx0LGEscyxjLGIsXyxmLGwsbSx2LGUsbyxuLHUpO2lmKGsmJihoPWsucGxhY2VkR2x5cGhCb3hlcykmJmguYm94JiZoLmJveC5sZW5ndGgpe1Q9ITAsRT1rLnNoaWZ0O2JyZWFrfX1yZXR1cm4gaH07QigoZnVuY3Rpb24oKXtyZXR1cm4gVShSLGEuaWNvbkJveCx0LldyaXRpbmdNb2RlLmhvcml6b250YWwpfSksKGZ1bmN0aW9uKCl7dmFyIHI9YS52ZXJ0aWNhbFRleHRCb3gsbj1MJiZMLmJveCYmTC5ib3gubGVuZ3RoO3JldHVybiBvLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiFuJiZlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZyP1UocixhLnZlcnRpY2FsSWNvbkJveCx0LldyaXRpbmdNb2RlLnZlcnRpY2FsKTp7Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9fSkpLEwmJihUPUwuYm94LFM9TC5vZmZzY3JlZW4pO3ZhciBWPUYoTCYmTC5ib3gpO2lmKCFUJiZpLnByZXZQbGFjZW1lbnQpe3ZhciBIPWkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF07SCYmKGkudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdPUgsaS5tYXJrVXNlZEp1c3RpZmljYXRpb24obyxILmFuY2hvcixlLFYpKX19ZWxzZXt2YXIgcT1mdW5jdGlvbih0LHIpe3ZhciBuPWkuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godCx5LGYsbCxtLnByZWRpY2F0ZSk7cmV0dXJuIG4mJm4uYm94JiZuLmJveC5sZW5ndGgmJihpLm1hcmtVc2VkT3JpZW50YXRpb24obyxyLGUpLGkucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdPXIpLG59O0IoKGZ1bmN0aW9uKCl7cmV0dXJuIHEoUix0LldyaXRpbmdNb2RlLmhvcml6b250YWwpfSksKGZ1bmN0aW9uKCl7dmFyIHI9YS52ZXJ0aWNhbFRleHRCb3g7cmV0dXJuIG8uYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCYmcj9xKHIsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCk6e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfX0pKSxGKEwmJkwuYm94JiZMLmJveC5sZW5ndGgpfX1pZihUPShwPUwpJiZwLmJveCYmcC5ib3gubGVuZ3RoPjAsUz1wJiZwLm9mZnNjcmVlbixlLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzKXt2YXIgRz1vLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGUuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KSxZPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShvLnRleHRTaXplRGF0YSxkLEcpLFc9cy5nZXQoInRleHQtcGFkZGluZyIpLFg9ZS5jb2xsaXNpb25DaXJjbGVEaWFtZXRlcjtQPWkuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25DaXJjbGVzKHksRyxvLmxpbmVWZXJ0ZXhBcnJheSxvLmdseXBoT2Zmc2V0QXJyYXksWSxsLGMsdSxuLF8sbS5wcmVkaWNhdGUsWCxXKSxUPXl8fFAuY2lyY2xlcy5sZW5ndGg+MCYmIVAuY29sbGlzaW9uRGV0ZWN0ZWQsUz1TJiZQLm9mZnNjcmVlbn1pZihhLmljb25GZWF0dXJlSW5kZXgmJihEPWEuaWNvbkZlYXR1cmVJbmRleCksYS5pY29uQm94KXt2YXIgWj1mdW5jdGlvbih0KXt2YXIgZT13JiZFP19lKHQsRS54LEUueSxiLF8saS50cmFuc2Zvcm0uYW5nbGUpOnQ7cmV0dXJuIGkuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goZSx4LGYsbCxtLnByZWRpY2F0ZSl9O009QyYmQy5ib3gmJkMuYm94Lmxlbmd0aCYmYS52ZXJ0aWNhbEljb25Cb3g/KEk9WihhLnZlcnRpY2FsSWNvbkJveCkpLmJveC5sZW5ndGg+MDooST1aKGEuaWNvbkJveCkpLmJveC5sZW5ndGg+MCxTPVMmJkkub2Zmc2NyZWVufXZhciBKPWd8fDA9PT1lLm51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzJiYwPT09ZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMsSz12fHwwPT09ZS5udW1JY29uVmVydGljZXM7aWYoSnx8Sz9LP0p8fChNPU0mJlQpOlQ9TSYmVDpNPVQ9TSYmVCxUJiZwJiZwLmJveCYmKEMmJkMuYm94JiZ6P2kuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHAuYm94LHMuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxvLmJ1Y2tldEluc3RhbmNlSWQseixtLklEKTppLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwLmJveCxzLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLE8sbS5JRCkpLE0mJkkmJmkuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KEkuYm94LHMuZ2V0KCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiKSxvLmJ1Y2tldEluc3RhbmNlSWQsRCxtLklEKSxQJiYoVCYmaS5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25DaXJjbGVzKFAuY2lyY2xlcyxzLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLE8sbS5JRCksbikpe3ZhciBRPW8uYnVja2V0SW5zdGFuY2VJZCwkPWkuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW1FdO3ZvaWQgMD09PSQmJigkPWkuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW1FdPW5ldyB2ZSk7Zm9yKHZhciB0dD0wO3R0PFAuY2lyY2xlcy5sZW5ndGg7dHQrPTQpJC5jaXJjbGVzLnB1c2goUC5jaXJjbGVzW3R0KzBdKSwkLmNpcmNsZXMucHVzaChQLmNpcmNsZXNbdHQrMV0pLCQuY2lyY2xlcy5wdXNoKFAuY2lyY2xlc1t0dCsyXSksJC5jaXJjbGVzLnB1c2goUC5jb2xsaXNpb25EZXRlY3RlZD8xOjApfWkucGxhY2VtZW50c1tlLmNyb3NzVGlsZUlEXT1uZXcgZ2UoVHx8ayxNfHxBLFN8fG8uanVzdFJlbG9hZGVkKSxyW2UuY3Jvc3NUaWxlSURdPSEwfX07aWYoVClmb3IodmFyIFM9by5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzKHRoaXMudHJhbnNmb3JtLmFuZ2xlKSxFPVMubGVuZ3RoLTE7RT49MDstLUUpe3ZhciBMPVNbRV07TShvLnN5bWJvbEluc3RhbmNlcy5nZXQoTCksby5jb2xsaXNpb25BcnJheXNbTF0pfWVsc2UgZm9yKHZhciBDPWUuc3ltYm9sSW5zdGFuY2VTdGFydDtDPGUuc3ltYm9sSW5zdGFuY2VFbmQ7QysrKU0oby5zeW1ib2xJbnN0YW5jZXMuZ2V0KEMpLG8uY29sbGlzaW9uQXJyYXlzW0NdKTtpZihuJiZvLmJ1Y2tldEluc3RhbmNlSWQgaW4gdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXMpe3ZhciBQPXRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW28uYnVja2V0SW5zdGFuY2VJZF07dC5pbnZlcnQoUC5pbnZQcm9qTWF0cml4LGwpLFAudmlld3BvcnRNYXRyaXg9dGhpcy5jb2xsaXNpb25JbmRleC5nZXRWaWV3cG9ydE1hdHJpeCgpfW8uanVzdFJlbG9hZGVkPSExfSx3ZS5wcm90b3R5cGUubWFya1VzZWRKdXN0aWZpY2F0aW9uPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhLG89e2xlZnQ6bi5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LGNlbnRlcjpuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxyaWdodDpuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4fTthPWk9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP24udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6b1t0LmdldEFuY2hvckp1c3RpZmljYXRpb24ocildO2Zvcih2YXIgcz0wLGw9W24ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXhdO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTtjPj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChjKS5jcm9zc1RpbGVJRD1hPj0wJiZjIT09YT8wOm4uY3Jvc3NUaWxlSUQpfX0sd2UucHJvdG90eXBlLm1hcmtVc2VkT3JpZW50YXRpb249ZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1yPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsfHxyPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsT25seT9yOjAsYT1yPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9yOjAsbz0wLHM9W24ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChsKS5wbGFjZWRPcmllbnRhdGlvbj1pfW4udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KG4udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uPWEpfSx3ZS5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKHQpe3RoaXMuY29tbWl0VGltZT10LHRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz10aGlzLnRyYW5zZm9ybS56b29tO3ZhciBlPXRoaXMucHJldlBsYWNlbWVudCxyPSExO3RoaXMucHJldlpvb21BZGp1c3RtZW50PWU/ZS56b29tQWRqdXN0bWVudCh0aGlzLnRyYW5zZm9ybS56b29tKTowO3ZhciBuPWU/ZS5zeW1ib2xGYWRlQ2hhbmdlKHQpOjEsaT1lP2Uub3BhY2l0aWVzOnt9LGE9ZT9lLnZhcmlhYmxlT2Zmc2V0czp7fSxvPWU/ZS5wbGFjZWRPcmllbnRhdGlvbnM6e307Zm9yKHZhciBzIGluIHRoaXMucGxhY2VtZW50cyl7dmFyIGw9dGhpcy5wbGFjZW1lbnRzW3NdLGM9aVtzXTtjPyh0aGlzLm9wYWNpdGllc1tzXT1uZXcgbWUoYyxuLGwudGV4dCxsLmljb24pLHI9cnx8bC50ZXh0IT09Yy50ZXh0LnBsYWNlZHx8bC5pY29uIT09Yy5pY29uLnBsYWNlZCk6KHRoaXMub3BhY2l0aWVzW3NdPW5ldyBtZShudWxsLG4sbC50ZXh0LGwuaWNvbixsLnNraXBGYWRlKSxyPXJ8fGwudGV4dHx8bC5pY29uKX1mb3IodmFyIHUgaW4gaSl7dmFyIGY9aVt1XTtpZighdGhpcy5vcGFjaXRpZXNbdV0pe3ZhciBoPW5ldyBtZShmLG4sITEsITEpO2guaXNIaWRkZW4oKXx8KHRoaXMub3BhY2l0aWVzW3VdPWgscj1yfHxmLnRleHQucGxhY2VkfHxmLmljb24ucGxhY2VkKX19Zm9yKHZhciBwIGluIGEpdGhpcy52YXJpYWJsZU9mZnNldHNbcF18fCF0aGlzLm9wYWNpdGllc1twXXx8dGhpcy5vcGFjaXRpZXNbcF0uaXNIaWRkZW4oKXx8KHRoaXMudmFyaWFibGVPZmZzZXRzW3BdPWFbcF0pO2Zvcih2YXIgZCBpbiBvKXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2RdfHwhdGhpcy5vcGFjaXRpZXNbZF18fHRoaXMub3BhY2l0aWVzW2RdLmlzSGlkZGVuKCl8fCh0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tkXT1vW2RdKTtyP3RoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9dDoibnVtYmVyIiE9dHlwZW9mIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUmJih0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPWU/ZS5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTp0KX0sd2UucHJvdG90eXBlLnVwZGF0ZUxheWVyT3BhY2l0aWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5nZXRCdWNrZXQodCk7byYmYS5sYXRlc3RGZWF0dXJlSW5kZXgmJnQuaWQ9PT1vLmxheWVySWRzWzBdJiZ0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhvLHIsYS5jb2xsaXNpb25Cb3hBcnJheSl9fSx3ZS5wcm90b3R5cGUudXBkYXRlQnVja2V0T3BhY2l0aWVzPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzO2UuaGFzVGV4dERhdGEoKSYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzSWNvbkRhdGEoKSYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSYmZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCksZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpJiZlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTt2YXIgYT1lLmxheWVyc1swXS5sYXlvdXQsbz1uZXcgbWUobnVsbCwwLCExLCExLCEwKSxzPWEuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSxsPWEuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSxjPWEuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpLHU9Im1hcCI9PT1hLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxmPSJtYXAiPT09YS5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IiksaD0ibm9uZSIhPT1hLmdldCgiaWNvbi10ZXh0LWZpdCIpLHA9bmV3IG1lKG51bGwsMCxzJiYobHx8IWUuaGFzSWNvbkRhdGEoKXx8YS5nZXQoImljb24tb3B0aW9uYWwiKSksbCYmKHN8fCFlLmhhc1RleHREYXRhKCl8fGEuZ2V0KCJ0ZXh0LW9wdGlvbmFsIikpLCEwKTshZS5jb2xsaXNpb25BcnJheXMmJm4mJihlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCl8fGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSkmJmUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhuKTtmb3IodmFyIGQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS80O24rKyl0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhyKX0sbT1mdW5jdGlvbihuKXt2YXIgYT1lLnN5bWJvbEluc3RhbmNlcy5nZXQobikscz1hLm51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLGw9YS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMsbT1hLmNyb3NzVGlsZUlELGc9clttXSx2PWkub3BhY2l0aWVzW21dO2c/dj1vOnZ8fCh2PXAsaS5vcGFjaXRpZXNbbV09diksclttXT0hMDt2YXIgeT1zPjB8fGw+MCx4PWEubnVtSWNvblZlcnRpY2VzPjAsYj1pLnBsYWNlZE9yaWVudGF0aW9uc1thLmNyb3NzVGlsZUlEXSxfPWI9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsLHc9Yj09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbHx8Yj09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHk7aWYoeSl7dmFyIFQ9UGUodi50ZXh0KSxrPV8/SWU6VDtkKGUudGV4dCxzLGspO3ZhciBBPXc/SWU6VDtkKGUudGV4dCxsLEEpO3ZhciBNPXYudGV4dC5pc0hpZGRlbigpO1thLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LGEuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LGEubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dD49MCYmKGUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQodCkuaGlkZGVuPU18fF8/MTowKX0pKSxhLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Pj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChhLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5oaWRkZW49TXx8dz8xOjApO3ZhciBTPWkudmFyaWFibGVPZmZzZXRzW2EuY3Jvc3NUaWxlSURdO1MmJmkubWFya1VzZWRKdXN0aWZpY2F0aW9uKGUsUy5hbmNob3IsYSxiKTt2YXIgRT1pLnBsYWNlZE9yaWVudGF0aW9uc1thLmNyb3NzVGlsZUlEXTtFJiYoaS5tYXJrVXNlZEp1c3RpZmljYXRpb24oZSwibGVmdCIsYSxFKSxpLm1hcmtVc2VkT3JpZW50YXRpb24oZSxFLGEpKX1pZih4KXt2YXIgTD1QZSh2Lmljb24pLEM9IShoJiZhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4JiZfKTtpZihhLnBsYWNlZEljb25TeW1ib2xJbmRleD49MCl7dmFyIFA9Qz9MOkllO2QoZS5pY29uLGEubnVtSWNvblZlcnRpY2VzLFApLGUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQoYS5wbGFjZWRJY29uU3ltYm9sSW5kZXgpLmhpZGRlbj12Lmljb24uaXNIaWRkZW4oKX1pZihhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wKXt2YXIgST1DP0llOkw7ZChlLmljb24sYS5udW1WZXJ0aWNhbEljb25WZXJ0aWNlcyxJKSxlLmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgpLmhpZGRlbj12Lmljb24uaXNIaWRkZW4oKX19aWYoZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpfHxlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpe3ZhciBPPWUuY29sbGlzaW9uQXJyYXlzW25dO2lmKE8pe3ZhciB6PW5ldyB0LlBvaW50KDAsMCk7aWYoTy50ZXh0Qm94fHxPLnZlcnRpY2FsVGV4dEJveCl7dmFyIEQ9ITA7aWYoYyl7dmFyIFI9aS52YXJpYWJsZU9mZnNldHNbbV07Uj8oej1iZShSLmFuY2hvcixSLndpZHRoLFIuaGVpZ2h0LFIudGV4dE9mZnNldCxSLnRleHRCb3hTY2FsZSksdSYmei5fcm90YXRlKGY/aS50cmFuc2Zvcm0uYW5nbGU6LWkudHJhbnNmb3JtLmFuZ2xlKSk6RD0hMX1PLnRleHRCb3gmJlRlKGUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSx2LnRleHQucGxhY2VkLCFEfHxfLHoueCx6LnkpLE8udmVydGljYWxUZXh0Qm94JiZUZShlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksdi50ZXh0LnBsYWNlZCwhRHx8dyx6Lngsei55KX12YXIgRj1Cb29sZWFuKCF3JiZPLnZlcnRpY2FsSWNvbkJveCk7Ty5pY29uQm94JiZUZShlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksdi5pY29uLnBsYWNlZCxGLGg/ei54OjAsaD96Lnk6MCksTy52ZXJ0aWNhbEljb25Cb3gmJlRlKGUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSx2Lmljb24ucGxhY2VkLCFGLGg/ei54OjAsaD96Lnk6MCl9fX0sZz0wO2c8ZS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO2crKyltKGcpO2lmKGUuc29ydEZlYXR1cmVzKHRoaXMudHJhbnNmb3JtLmFuZ2xlKSx0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2UuYnVja2V0SW5zdGFuY2VJZF0mJih0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2UuYnVja2V0SW5zdGFuY2VJZF0uZmVhdHVyZVNvcnRPcmRlcj1lLmZlYXR1cmVTb3J0T3JkZXIpLGUuaGFzVGV4dERhdGEoKSYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXImJmUudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheSksZS5oYXNJY29uRGF0YSgpJiZlLmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlciYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLmljb24ub3BhY2l0eVZlcnRleEFycmF5KSxlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkmJmUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJmUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpLGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSYmZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlciYmZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSksZS5idWNrZXRJbnN0YW5jZUlkIGluIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzKXt2YXIgdj10aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tlLmJ1Y2tldEluc3RhbmNlSWRdO2UucGxhY2VtZW50SW52UHJvak1hdHJpeD12LmludlByb2pNYXRyaXgsZS5wbGFjZW1lbnRWaWV3cG9ydE1hdHJpeD12LnZpZXdwb3J0TWF0cml4LGUuY29sbGlzaW9uQ2lyY2xlQXJyYXk9di5jaXJjbGVzLGRlbGV0ZSB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tlLmJ1Y2tldEluc3RhbmNlSWRdfX0sd2UucHJvdG90eXBlLnN5bWJvbEZhZGVDaGFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmZhZGVEdXJhdGlvbj8xOih0LXRoaXMuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb24rdGhpcy5wcmV2Wm9vbUFkanVzdG1lbnR9LHdlLnByb3RvdHlwZS56b29tQWRqdXN0bWVudD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwodGhpcy50cmFuc2Zvcm0uem9vbS10KS8xLjUpfSx3ZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhbGV8fHQtdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTx0aGlzLmZhZGVEdXJhdGlvbn0sd2UucHJvdG90eXBlLnN0aWxsUmVjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrPT09ZT8xLXRoaXMuem9vbUFkanVzdG1lbnQoZSk6MTtyZXR1cm4gdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrPWUsdGhpcy5jb21taXRUaW1lK3RoaXMuZmFkZUR1cmF0aW9uKnI+dH0sd2UucHJvdG90eXBlLnNldFN0YWxlPWZ1bmN0aW9uKCl7dGhpcy5zdGFsZT0hMH07dmFyIGtlPU1hdGgucG93KDIsMjUpLEFlPU1hdGgucG93KDIsMjQpLE1lPU1hdGgucG93KDIsMTcpLFNlPU1hdGgucG93KDIsMTYpLEVlPU1hdGgucG93KDIsOSksTGU9TWF0aC5wb3coMiw4KSxDZT1NYXRoLnBvdygyLDEpO2Z1bmN0aW9uIFBlKHQpe2lmKDA9PT10Lm9wYWNpdHkmJiF0LnBsYWNlZClyZXR1cm4gMDtpZigxPT09dC5vcGFjaXR5JiZ0LnBsYWNlZClyZXR1cm4gNDI5NDk2NzI5NTt2YXIgZT10LnBsYWNlZD8xOjAscj1NYXRoLmZsb29yKDEyNyp0Lm9wYWNpdHkpO3JldHVybiByKmtlK2UqQWUrcipNZStlKlNlK3IqRWUrZSpMZStyKkNlK2V9dmFyIEllPTAsT2U9ZnVuY3Rpb24odCl7dGhpcy5fc29ydEFjcm9zc1RpbGVzPSJ2aWV3cG9ydC15IiE9PXQubGF5b3V0LmdldCgic3ltYm9sLXotb3JkZXIiKSYmdm9pZCAwIT09dC5sYXlvdXQuZ2V0KCJzeW1ib2wtc29ydC1rZXkiKS5jb25zdGFudE9yKDEpLHRoaXMuX2N1cnJlbnRUaWxlSW5kZXg9MCx0aGlzLl9jdXJyZW50UGFydEluZGV4PTAsdGhpcy5fc2VlbkNyb3NzVGlsZUlEcz17fSx0aGlzLl9idWNrZXRQYXJ0cz1bXX07T2UucHJvdG90eXBlLmNvbnRpbnVlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPXRoaXMuX2J1Y2tldFBhcnRzO3RoaXMuX2N1cnJlbnRUaWxlSW5kZXg8dC5sZW5ndGg7KXt2YXIgbz10W3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO2lmKGUuZ2V0QnVja2V0UGFydHMoYSxuLG8sdGhpcy5fc29ydEFjcm9zc1RpbGVzKSx0aGlzLl9jdXJyZW50VGlsZUluZGV4KyssaSgpKXJldHVybiEwfWZvcih0aGlzLl9zb3J0QWNyb3NzVGlsZXMmJih0aGlzLl9zb3J0QWNyb3NzVGlsZXM9ITEsYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpKTt0aGlzLl9jdXJyZW50UGFydEluZGV4PGEubGVuZ3RoOyl7dmFyIHM9YVt0aGlzLl9jdXJyZW50UGFydEluZGV4XTtpZihlLnBsYWNlTGF5ZXJCdWNrZXRQYXJ0KHMsdGhpcy5fc2VlbkNyb3NzVGlsZUlEcyxyKSx0aGlzLl9jdXJyZW50UGFydEluZGV4KyssaSgpKXJldHVybiEwfXJldHVybiExfTt2YXIgemU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dGhpcy5wbGFjZW1lbnQ9bmV3IHdlKHQsaSxhLG8pLHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD1lLmxlbmd0aC0xLHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudD1yLHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz1uLHRoaXMuX2RvbmU9ITF9O3plLnByb3RvdHlwZS5pc0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9uZX0semUucHJvdG90eXBlLmNvbnRpbnVlUGxhY2VtZW50PWZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9dGhpcyxhPXQuYnJvd3Nlci5ub3coKSxvPWZ1bmN0aW9uKCl7dmFyIGU9dC5icm93c2VyLm5vdygpLWE7cmV0dXJuIWkuX2ZvcmNlRnVsbFBsYWNlbWVudCYmZT4yfTt0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg+PTA7KXt2YXIgcz1yW2VbdGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4XV0sbD10aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleC50cmFuc2Zvcm0uem9vbTtpZigic3ltYm9sIj09PXMudHlwZSYmKCFzLm1pbnpvb218fHMubWluem9vbTw9bCkmJighcy5tYXh6b29tfHxzLm1heHpvb20+bCkpe2lmKHRoaXMuX2luUHJvZ3Jlc3NMYXllcnx8KHRoaXMuX2luUHJvZ3Jlc3NMYXllcj1uZXcgT2UocykpLHRoaXMuX2luUHJvZ3Jlc3NMYXllci5jb250aW51ZVBsYWNlbWVudChuW3Muc291cmNlXSx0aGlzLnBsYWNlbWVudCx0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMscyxvKSlyZXR1cm47ZGVsZXRlIHRoaXMuX2luUHJvZ3Jlc3NMYXllcn10aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXgtLX10aGlzLl9kb25lPSEwfSx6ZS5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBsYWNlbWVudC5jb21taXQodCksdGhpcy5wbGFjZW1lbnR9O3ZhciBEZT01MTIvdC5FWFRFTlQvMixSZT1mdW5jdGlvbih0LGUscil7dGhpcy50aWxlSUQ9dCx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXM9e30sdGhpcy5idWNrZXRJbnN0YW5jZUlkPXI7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWUuZ2V0KG4pLGE9aS5rZXk7dGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2FdfHwodGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2FdPVtdKSx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbYV0ucHVzaCh7Y3Jvc3NUaWxlSUQ6aS5jcm9zc1RpbGVJRCxjb29yZDp0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKGksdCl9KX19O1JlLnByb3RvdHlwZS5nZXRTY2FsZWRDb29yZGluYXRlcz1mdW5jdGlvbihlLHIpe3ZhciBuPXIuY2Fub25pY2FsLnotdGhpcy50aWxlSUQuY2Fub25pY2FsLnosaT1EZS9NYXRoLnBvdygyLG4pO3JldHVybnt4Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLngqdC5FWFRFTlQrZS5hbmNob3JYKSppKSx5Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLnkqdC5FWFRFTlQrZS5hbmNob3JZKSppKX19LFJlLnByb3RvdHlwZS5maW5kTWF0Y2hlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMudGlsZUlELmNhbm9uaWNhbC56PGUuY2Fub25pY2FsLno/MTpNYXRoLnBvdygyLHRoaXMudGlsZUlELmNhbm9uaWNhbC56LWUuY2Fub25pY2FsLnopLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dC5nZXQoaSk7aWYoIWEuY3Jvc3NUaWxlSUQpe3ZhciBvPXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thLmtleV07aWYobylmb3IodmFyIHM9dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhhLGUpLGw9MCxjPW87bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO2lmKE1hdGguYWJzKHUuY29vcmQueC1zLngpPD1uJiZNYXRoLmFicyh1LmNvb3JkLnktcy55KTw9biYmIXJbdS5jcm9zc1RpbGVJRF0pe3JbdS5jcm9zc1RpbGVJRF09ITAsYS5jcm9zc1RpbGVJRD11LmNyb3NzVGlsZUlEO2JyZWFrfX19fX07dmFyIEZlPWZ1bmN0aW9uKCl7dGhpcy5tYXhDcm9zc1RpbGVJRD0wfTtGZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubWF4Q3Jvc3NUaWxlSUR9O3ZhciBCZT1mdW5jdGlvbigpe3RoaXMuaW5kZXhlcz17fSx0aGlzLnVzZWRDcm9zc1RpbGVJRHM9e30sdGhpcy5sbmc9MH07QmUucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHQtdGhpcy5sbmcpLzM2MCk7aWYoMCE9PWUpZm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdLGk9e307Zm9yKHZhciBhIGluIG4pe3ZhciBvPW5bYV07by50aWxlSUQ9by50aWxlSUQudW53cmFwVG8oby50aWxlSUQud3JhcCtlKSxpW28udGlsZUlELmtleV09b310aGlzLmluZGV4ZXNbcl09aX10aGlzLmxuZz10fSxCZS5wcm90b3R5cGUuYWRkQnVja2V0PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJnRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0uYnVja2V0SW5zdGFuY2VJZD09PWUuYnVja2V0SW5zdGFuY2VJZClyZXR1cm4hMTt0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0Lm92ZXJzY2FsZWRaLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pfWZvcih2YXIgbj0wO248ZS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO24rKyl7ZS5zeW1ib2xJbnN0YW5jZXMuZ2V0KG4pLmNyb3NzVGlsZUlEPTB9dGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdfHwodGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdPXt9KTt2YXIgaT10aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl07Zm9yKHZhciBhIGluIHRoaXMuaW5kZXhlcyl7dmFyIG89dGhpcy5pbmRleGVzW2FdO2lmKE51bWJlcihhKT50Lm92ZXJzY2FsZWRaKWZvcih2YXIgcyBpbiBvKXt2YXIgbD1vW3NdO2wudGlsZUlELmlzQ2hpbGRPZih0KSYmbC5maW5kTWF0Y2hlcyhlLnN5bWJvbEluc3RhbmNlcyx0LGkpfWVsc2V7dmFyIGM9b1t0LnNjYWxlZFRvKE51bWJlcihhKSkua2V5XTtjJiZjLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsaSl9fWZvcih2YXIgdT0wO3U8ZS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO3UrKyl7dmFyIGY9ZS5zeW1ib2xJbnN0YW5jZXMuZ2V0KHUpO2YuY3Jvc3NUaWxlSUR8fChmLmNyb3NzVGlsZUlEPXIuZ2VuZXJhdGUoKSxpW2YuY3Jvc3NUaWxlSURdPSEwKX1yZXR1cm4gdm9pZCAwPT09dGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdPXt9KSx0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldPW5ldyBSZSh0LGUuc3ltYm9sSW5zdGFuY2VzLGUuYnVja2V0SW5zdGFuY2VJZCksITB9LEJlLnByb3RvdHlwZS5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKWZvcih2YXIgbj0wLGk9ZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW3JdO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtkZWxldGUgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RdW2EuY3Jvc3NUaWxlSURdfX0sQmUucHJvdG90eXBlLnJlbW92ZVN0YWxlQnVja2V0cz1mdW5jdGlvbih0KXt2YXIgZT0hMTtmb3IodmFyIHIgaW4gdGhpcy5pbmRleGVzKXt2YXIgbj10aGlzLmluZGV4ZXNbcl07Zm9yKHZhciBpIGluIG4pdFtuW2ldLmJ1Y2tldEluc3RhbmNlSWRdfHwodGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHMocixuW2ldKSxkZWxldGUgbltpXSxlPSEwKX1yZXR1cm4gZX07dmFyIE5lPWZ1bmN0aW9uKCl7dGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy5jcm9zc1RpbGVJRHM9bmV3IEZlLHRoaXMubWF4QnVja2V0SW5zdGFuY2VJZD0wLHRoaXMuYnVja2V0c0luQ3VycmVudFBsYWNlbWVudD17fX07TmUucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVySW5kZXhlc1t0LmlkXTt2b2lkIDA9PT1uJiYobj10aGlzLmxheWVySW5kZXhlc1t0LmlkXT1uZXcgQmUpO3ZhciBpPSExLGE9e307bi5oYW5kbGVXcmFwSnVtcChyKTtmb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5nZXRCdWNrZXQodCk7YyYmdC5pZD09PWMubGF5ZXJJZHNbMF0mJihjLmJ1Y2tldEluc3RhbmNlSWR8fChjLmJ1Y2tldEluc3RhbmNlSWQ9Kyt0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQpLG4uYWRkQnVja2V0KGwudGlsZUlELGMsdGhpcy5jcm9zc1RpbGVJRHMpJiYoaT0hMCksYVtjLmJ1Y2tldEluc3RhbmNlSWRdPSEwKX1yZXR1cm4gbi5yZW1vdmVTdGFsZUJ1Y2tldHMoYSkmJihpPSEwKSxpfSxOZS5wcm90b3R5cGUucHJ1bmVVbnVzZWRMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT0hMH0pKSx0aGlzLmxheWVySW5kZXhlcyllW3JdfHxkZWxldGUgdGhpcy5sYXllckluZGV4ZXNbcl19O3ZhciBqZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmVtaXRWYWxpZGF0aW9uRXJyb3JzKGUsciYmci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiJzb3VyY2UuY2FudmFzIiE9PXQuaWRlbnRpZmllcn0pKSl9LFVlPXQucGljayhVdCxbImFkZExheWVyIiwicmVtb3ZlTGF5ZXIiLCJzZXRQYWludFByb3BlcnR5Iiwic2V0TGF5b3V0UHJvcGVydHkiLCJzZXRGaWx0ZXIiLCJhZGRTb3VyY2UiLCJyZW1vdmVTb3VyY2UiLCJzZXRMYXllclpvb21SYW5nZSIsInNldExpZ2h0Iiwic2V0VHJhbnNpdGlvbiIsInNldEdlb0pTT05Tb3VyY2VEYXRhIl0pLFZlPXQucGljayhVdCxbInNldENlbnRlciIsInNldFpvb20iLCJzZXRCZWFyaW5nIiwic2V0UGl0Y2giXSksSGU9ZnVuY3Rpb24oKXt2YXIgZT17fSxyPXQuc3R5bGVTcGVjLiR2ZXJzaW9uO2Zvcih2YXIgbiBpbiB0LnN0eWxlU3BlYy4kcm9vdCl7dmFyIGk9dC5zdHlsZVNwZWMuJHJvb3Rbbl07aWYoaS5yZXF1aXJlZCl7dmFyIGE9bnVsbDtudWxsIT0oYT0idmVyc2lvbiI9PT1uP3I6ImFycmF5Ij09PWkudHlwZT9bXTp7fSkmJihlW25dPWEpfX1yZXR1cm4gZX0oKSxxZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKG4saSl7dmFyIGE9dGhpczt2b2lkIDA9PT1pJiYoaT17fSksZS5jYWxsKHRoaXMpLHRoaXMubWFwPW4sdGhpcy5kaXNwYXRjaGVyPW5ldyBrKEJ0KCksdGhpcyksdGhpcy5pbWFnZU1hbmFnZXI9bmV3IGgsdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKSx0aGlzLmdseXBoTWFuYWdlcj1uZXcgeChuLl9yZXF1ZXN0TWFuYWdlcixpLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSksdGhpcy5saW5lQXRsYXM9bmV3IFQoMjU2LDUxMiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgTmUsdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX3NlcmlhbGl6ZWRMYXllcnM9e30sdGhpcy5fb3JkZXI9W10sdGhpcy5zb3VyY2VDYWNoZXM9e30sdGhpcy56b29tSGlzdG9yeT1uZXcgdC5ab29tSGlzdG9yeSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPVtdLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInNldFJlZmVycmVyIix0LmdldFJlZmVycmVyKCkpO3ZhciBvPXRoaXM7dGhpcy5fcnRsVGV4dFBsdWdpbkNhbGxiYWNrPXIucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSgoZnVuY3Rpb24oZSl7dmFyIHI9e3BsdWdpblN0YXR1czplLnBsdWdpblN0YXR1cyxwbHVnaW5VUkw6ZS5wbHVnaW5VUkx9O28uZGlzcGF0Y2hlci5icm9hZGNhc3QoInN5bmNSVExQbHVnaW5TdGF0ZSIsciwoZnVuY3Rpb24oZSxyKXtpZigodC50cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50KGUpLHIpJiZyLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSlmb3IodmFyIG4gaW4gby5zb3VyY2VDYWNoZXMpby5zb3VyY2VDYWNoZXNbbl0ucmVsb2FkKCl9KSl9KSksdGhpcy5vbigiZGF0YSIsKGZ1bmN0aW9uKHQpe2lmKCJzb3VyY2UiPT09dC5kYXRhVHlwZSYmIm1ldGFkYXRhIj09PXQuc291cmNlRGF0YVR5cGUpe3ZhciBlPWEuc291cmNlQ2FjaGVzW3Quc291cmNlSWRdO2lmKGUpe3ZhciByPWUuZ2V0U291cmNlKCk7aWYociYmci52ZWN0b3JMYXllcklkcylmb3IodmFyIG4gaW4gYS5fbGF5ZXJzKXt2YXIgaT1hLl9sYXllcnNbbl07aS5zb3VyY2U9PT1yLmlkJiZhLl92YWxpZGF0ZUxheWVyKGkpfX19fSkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkVVJMPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzdHlsZSJ9KSk7dmFyIGk9ImJvb2xlYW4iPT10eXBlb2Ygci52YWxpZGF0ZT9yLnZhbGlkYXRlOiF0LmlzTWFwYm94VVJMKGUpO2U9dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVN0eWxlVVJMKGUsci5hY2Nlc3NUb2tlbik7dmFyIGE9dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5TdHlsZSk7dGhpcy5fcmVxdWVzdD10LmdldEpTT04oYSwoZnVuY3Rpb24oZSxyKXtuLl9yZXF1ZXN0PW51bGwsZT9uLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk6ciYmbi5fbG9hZChyLGkpfSkpfSxyLnByb3RvdHlwZS5sb2FkSlNPTj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuX3JlcXVlc3Q9dC5icm93c2VyLmZyYW1lKChmdW5jdGlvbigpe24uX3JlcXVlc3Q9bnVsbCxuLl9sb2FkKGUsITEhPT1yLnZhbGlkYXRlKX0pKX0sci5wcm90b3R5cGUubG9hZEVtcHR5PWZ1bmN0aW9uKCl7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzdHlsZSJ9KSksdGhpcy5fbG9hZChIZSwhMSl9LHIucHJvdG90eXBlLl9sb2FkPWZ1bmN0aW9uKGUscil7aWYoIXJ8fCFqZSh0aGlzLHQudmFsaWRhdGVTdHlsZShlKSkpe2Zvcih2YXIgbiBpbiB0aGlzLl9sb2FkZWQ9ITAsdGhpcy5zdHlsZXNoZWV0PWUsZS5zb3VyY2VzKXRoaXMuYWRkU291cmNlKG4sZS5zb3VyY2VzW25dLHt2YWxpZGF0ZTohMX0pO2Uuc3ByaXRlP3RoaXMuX2xvYWRTcHJpdGUoZS5zcHJpdGUpOnRoaXMuaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksdGhpcy5nbHlwaE1hbmFnZXIuc2V0VVJMKGUuZ2x5cGhzKTt2YXIgaT1qdCh0aGlzLnN0eWxlc2hlZXQubGF5ZXJzKTt0aGlzLl9vcmRlcj1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX3NlcmlhbGl6ZWRMYXllcnM9e307Zm9yKHZhciBhPTAsbz1pO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTsocz10LmNyZWF0ZVN0eWxlTGF5ZXIocykpLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOnMuaWR9fSksdGhpcy5fbGF5ZXJzW3MuaWRdPXMsdGhpcy5fc2VyaWFsaXplZExheWVyc1tzLmlkXT1zLnNlcmlhbGl6ZSgpfXRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInNldExheWVycyIsdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKSksdGhpcy5saWdodD1uZXcgdyh0aGlzLnN0eWxlc2hlZXQubGlnaHQpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJzdHlsZS5sb2FkIikpfX0sci5wcm90b3R5cGUuX2xvYWRTcHJpdGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLl9zcHJpdGVSZXF1ZXN0PWZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLG8scz10LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbz4xPyJAMngiOiIiLGw9dC5nZXRKU09OKHIudHJhbnNmb3JtUmVxdWVzdChyLm5vcm1hbGl6ZVNwcml0ZVVSTChlLHMsIi5qc29uIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSlNPTiksKGZ1bmN0aW9uKHQsZSl7bD1udWxsLG98fChvPXQsaT1lLHUoKSl9KSksYz10LmdldEltYWdlKHIudHJhbnNmb3JtUmVxdWVzdChyLm5vcm1hbGl6ZVNwcml0ZVVSTChlLHMsIi5wbmciKSx0LlJlc291cmNlVHlwZS5TcHJpdGVJbWFnZSksKGZ1bmN0aW9uKHQsZSl7Yz1udWxsLG98fChvPXQsYT1lLHUoKSl9KSk7ZnVuY3Rpb24gdSgpe2lmKG8pbihvKTtlbHNlIGlmKGkmJmEpe3ZhciBlPXQuYnJvd3Nlci5nZXRJbWFnZURhdGEoYSkscj17fTtmb3IodmFyIHMgaW4gaSl7dmFyIGw9aVtzXSxjPWwud2lkdGgsdT1sLmhlaWdodCxmPWwueCxoPWwueSxwPWwuc2RmLGQ9bC5waXhlbFJhdGlvLG09bC5zdHJldGNoWCxnPWwuc3RyZXRjaFksdj1sLmNvbnRlbnQseT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmMsaGVpZ2h0OnV9KTt0LlJHQkFJbWFnZS5jb3B5KGUseSx7eDpmLHk6aH0se3g6MCx5OjB9LHt3aWR0aDpjLGhlaWdodDp1fSkscltzXT17ZGF0YTp5LHBpeGVsUmF0aW86ZCxzZGY6cCxzdHJldGNoWDptLHN0cmV0Y2hZOmcsY29udGVudDp2fX1uKG51bGwscil9fXJldHVybntjYW5jZWw6ZnVuY3Rpb24oKXtsJiYobC5jYW5jZWwoKSxsPW51bGwpLGMmJihjLmNhbmNlbCgpLGM9bnVsbCl9fX0oZSx0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKGUsbil7aWYoci5fc3ByaXRlUmVxdWVzdD1udWxsLGUpci5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO2Vsc2UgaWYobilmb3IodmFyIGkgaW4gbilyLmltYWdlTWFuYWdlci5hZGRJbWFnZShpLG5baV0pO3IuaW1hZ2VNYW5hZ2VyLnNldExvYWRlZCghMCksci5fYXZhaWxhYmxlSW1hZ2VzPXIuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSxyLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRJbWFnZXMiLHIuX2F2YWlsYWJsZUltYWdlcyksci5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0pKX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlTGF5ZXI9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5zb3VyY2VDYWNoZXNbZS5zb3VyY2VdO2lmKHIpe3ZhciBuPWUuc291cmNlTGF5ZXI7aWYobil7dmFyIGk9ci5nZXRTb3VyY2UoKTsoImdlb2pzb24iPT09aS50eXBlfHxpLnZlY3RvckxheWVySWRzJiYtMT09PWkudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZihuKSkmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlIGxheWVyICInK24rJyIgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlICInK2kuaWQrJyIgYXMgc3BlY2lmaWVkIGJ5IHN0eWxlIGxheWVyICInK2UuaWQrJyInKSkpfX19LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpcmV0dXJuITE7aWYoT2JqZWN0LmtleXModGhpcy5fdXBkYXRlZFNvdXJjZXMpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpaWYoIXRoaXMuc291cmNlQ2FjaGVzW3RdLmxvYWRlZCgpKXJldHVybiExO3JldHVybiEhdGhpcy5pbWFnZU1hbmFnZXIuaXNMb2FkZWQoKX0sci5wcm90b3R5cGUuX3NlcmlhbGl6ZUxheWVycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT10aGlzLl9sYXllcnNbaV07ImN1c3RvbSIhPT1hLnR5cGUmJmUucHVzaChhLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLmxpZ2h0JiZ0aGlzLmxpZ2h0Lmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpaWYodGhpcy5zb3VyY2VDYWNoZXNbdF0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW2VdLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtyZXR1cm4hMX0sci5wcm90b3R5cGUuX2NoZWNrTG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmciKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xvYWRlZCl7dmFyIHI9dGhpcy5fY2hhbmdlZDtpZih0aGlzLl9jaGFuZ2VkKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKSxpPU9iamVjdC5rZXlzKHRoaXMuX3JlbW92ZWRMYXllcnMpO2Zvcih2YXIgYSBpbihuLmxlbmd0aHx8aS5sZW5ndGgpJiZ0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMobixpKSx0aGlzLl91cGRhdGVkU291cmNlcyl7dmFyIG89dGhpcy5fdXBkYXRlZFNvdXJjZXNbYV07InJlbG9hZCI9PT1vP3RoaXMuX3JlbG9hZFNvdXJjZShhKToiY2xlYXIiPT09byYmdGhpcy5fY2xlYXJTb3VyY2UoYSl9Zm9yKHZhciBzIGluIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKXRoaXMuX2xheWVyc1tzXS51cGRhdGVUcmFuc2l0aW9ucyhlKTt0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKGUpLHRoaXMuX3Jlc2V0VXBkYXRlcygpfWZvcih2YXIgbCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tsXS51c2VkPSExO2Zvcih2YXIgYz0wLHU9dGhpcy5fb3JkZXI7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdLGg9dGhpcy5fbGF5ZXJzW2ZdO2gucmVjYWxjdWxhdGUoZSx0aGlzLl9hdmFpbGFibGVJbWFnZXMpLCFoLmlzSGlkZGVuKGUuem9vbSkmJmguc291cmNlJiYodGhpcy5zb3VyY2VDYWNoZXNbaC5zb3VyY2VdLnVzZWQ9ITApfXRoaXMubGlnaHQucmVjYWxjdWxhdGUoZSksdGhpcy56PWUuem9vbSxyJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfX0sci5wcm90b3R5cGUuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcz1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2NoYW5nZWRJbWFnZXMpO2lmKHQubGVuZ3RoKXtmb3IodmFyIGUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0ucmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXMoWyJpY29ucyIsInBhdHRlcm5zIl0sdCk7dGhpcy5fY2hhbmdlZEltYWdlcz17fX19LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJMYXllcnM9ZnVuY3Rpb24odCxlKXt0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJ1cGRhdGVMYXllcnMiLHtsYXllcnM6dGhpcy5fc2VyaWFsaXplTGF5ZXJzKHQpLHJlbW92ZWRJZHM6ZX0pfSxyLnByb3RvdHlwZS5fcmVzZXRVcGRhdGVzPWZ1bmN0aW9uKCl7dGhpcy5fY2hhbmdlZD0hMSx0aGlzLl91cGRhdGVkTGF5ZXJzPXt9LHRoaXMuX3JlbW92ZWRMYXllcnM9e30sdGhpcy5fdXBkYXRlZFNvdXJjZXM9e30sdGhpcy5fdXBkYXRlZFBhaW50UHJvcHM9e30sdGhpcy5fY2hhbmdlZEltYWdlcz17fX0sci5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZih0aGlzLl9jaGVja0xvYWRlZCgpLGplKHRoaXMsdC52YWxpZGF0ZVN0eWxlKGUpKSlyZXR1cm4hMTsoZT10LmNsb25lJDEoZSkpLmxheWVycz1qdChlLmxheWVycyk7dmFyIG49WnQodGhpcy5zZXJpYWxpemUoKSxlKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluIFZlKX0pKTtpZigwPT09bi5sZW5ndGgpcmV0dXJuITE7dmFyIGk9bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluIFVlKX0pKTtpZihpLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZDogIitpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29tbWFuZH0pKS5qb2luKCIsICIpKyIuIik7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7InNldFRyYW5zaXRpb24iIT09dC5jb21tYW5kJiZyW3QuY29tbWFuZF0uYXBwbHkocix0LmFyZ3MpfSkpLHRoaXMuc3R5bGVzaGVldD1lLCEwfSxyLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbihlLHIpe2lmKHRoaXMuZ2V0SW1hZ2UoZSkpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIikpKTt0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShlLHIpLHRoaXMuX2F2YWlsYWJsZUltYWdlcz10aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksdGhpcy5fY2hhbmdlZEltYWdlc1tlXT0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9LHIucHJvdG90eXBlLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pbWFnZU1hbmFnZXIudXBkYXRlSW1hZ2UodCxlKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlKHQpfSxyLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJObyBpbWFnZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMuIikpKTt0aGlzLmltYWdlTWFuYWdlci5yZW1vdmVJbWFnZShlKSx0aGlzLl9hdmFpbGFibGVJbWFnZXM9dGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpLHRoaXMuX2NoYW5nZWRJbWFnZXNbZV09ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSxyLnByb3RvdHlwZS5saXN0SW1hZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpfSxyLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXM7aWYodm9pZCAwPT09biYmKG49e30pLHRoaXMuX2NoZWNrTG9hZGVkKCksdm9pZCAwIT09dGhpcy5zb3VyY2VDYWNoZXNbZV0pdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBhbHJlYWR5IGEgc291cmNlIHdpdGggdGhpcyBJRCIpO2lmKCFyLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJUaGUgdHlwZSBwcm9wZXJ0eSBtdXN0IGJlIGRlZmluZWQsIGJ1dCB0aGUgb25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgd2VyZSBnaXZlbjogIitPYmplY3Qua2V5cyhyKS5qb2luKCIsICIpKyIuIik7aWYoIShbInZlY3RvciIsInJhc3RlciIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl0uaW5kZXhPZihyLnR5cGUpPj0wKXx8IXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5zb3VyY2UsInNvdXJjZXMuIitlLHIsbnVsbCxuKSl7dGhpcy5tYXAmJnRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJihyLmNvbGxlY3RSZXNvdXJjZVRpbWluZz0hMCk7dmFyIGE9dGhpcy5zb3VyY2VDYWNoZXNbZV09bmV3IEN0KGUscix0aGlzLmRpc3BhdGNoZXIpO2Euc3R5bGU9dGhpcyxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcywoZnVuY3Rpb24oKXtyZXR1cm57aXNTb3VyY2VMb2FkZWQ6aS5sb2FkZWQoKSxzb3VyY2U6YS5zZXJpYWxpemUoKSxzb3VyY2VJZDplfX0pKSxhLm9uQWRkKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdm9pZCAwPT09dGhpcy5zb3VyY2VDYWNoZXNbZV0pdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCB0aGlzIElEIik7Zm9yKHZhciByIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbcl0uc291cmNlPT09ZSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdTb3VyY2UgIicrZSsnIiBjYW5ub3QgYmUgcmVtb3ZlZCB3aGlsZSBsYXllciAiJytyKyciIGlzIHVzaW5nIGl0LicpKSk7dmFyIG49dGhpcy5zb3VyY2VDYWNoZXNbZV07ZGVsZXRlIHRoaXMuc291cmNlQ2FjaGVzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkU291cmNlc1tlXSxuLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEiLGRhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZUlkOmV9KSksbi5zZXRFdmVudGVkUGFyZW50KG51bGwpLG4uY2xlYXJUaWxlcygpLG4ub25SZW1vdmUmJm4ub25SZW1vdmUodGhpcy5tYXApLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLnNldEdlb0pTT05Tb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKS5zZXREYXRhKGUpLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VDYWNoZXNbdF0mJnRoaXMuc291cmNlQ2FjaGVzW3RdLmdldFNvdXJjZSgpfSxyLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pLHRoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9ZS5pZDtpZih0aGlzLmdldExheWVyKGkpKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytpKyciIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgbWFwJykpKTtlbHNle3ZhciBhO2lmKCJjdXN0b20iPT09ZS50eXBlKXtpZihqZSh0aGlzLHQudmFsaWRhdGVDdXN0b21TdHlsZUxheWVyKGUpKSlyZXR1cm47YT10LmNyZWF0ZVN0eWxlTGF5ZXIoZSl9ZWxzZXtpZigib2JqZWN0Ij09dHlwZW9mIGUuc291cmNlJiYodGhpcy5hZGRTb3VyY2UoaSxlLnNvdXJjZSksZT10LmNsb25lJDEoZSksZT10LmV4dGVuZChlLHtzb3VyY2U6aX0pKSx0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUubGF5ZXIsImxheWVycy4iK2ksZSx7YXJyYXlJbmRleDotMX0sbikpcmV0dXJuO2E9dC5jcmVhdGVTdHlsZUxheWVyKGUpLHRoaXMuX3ZhbGlkYXRlTGF5ZXIoYSksYS5zZXRFdmVudGVkUGFyZW50KHRoaXMse2xheWVyOntpZDppfX0pLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbYS5pZF09YS5zZXJpYWxpemUoKX12YXIgbz1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO2lmKHImJi0xPT09byl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicrcisnIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpO2Vsc2V7aWYodGhpcy5fb3JkZXIuc3BsaWNlKG8sMCxpKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbaV09YSx0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldJiZhLnNvdXJjZSYmImN1c3RvbSIhPT1hLnR5cGUpe3ZhciBzPXRoaXMuX3JlbW92ZWRMYXllcnNbaV07ZGVsZXRlIHRoaXMuX3JlbW92ZWRMYXllcnNbaV0scy50eXBlIT09YS50eXBlP3RoaXMuX3VwZGF0ZWRTb3VyY2VzW2Euc291cmNlXT0iY2xlYXIiOih0aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09InJlbG9hZCIsdGhpcy5zb3VyY2VDYWNoZXNbYS5zb3VyY2VdLnBhdXNlKCkpfXRoaXMuX3VwZGF0ZUxheWVyKGEpLGEub25BZGQmJmEub25BZGQodGhpcy5tYXApfX19LHIucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbihlLHIpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbZV0pe2lmKGUhPT1yKXt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpO3ZhciBpPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7ciYmLTE9PT1pP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytyKyciIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk6KHRoaXMuX29yZGVyLnNwbGljZShpLDAsZSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITApfX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgbW92ZWQuIikpKX0sci5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLl9sYXllcnNbZV07aWYocil7ci5zZXRFdmVudGVkUGFyZW50KG51bGwpO3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9yZW1vdmVkTGF5ZXJzW2VdPXIsZGVsZXRlIHRoaXMuX2xheWVyc1tlXSxkZWxldGUgdGhpcy5fc2VyaWFsaXplZExheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZExheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV0sci5vblJlbW92ZSYmci5vblJlbW92ZSh0aGlzLm1hcCl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sci5wcm90b3R5cGUuaGFzTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW4gdGhpcy5fbGF5ZXJzfSxyLnByb3RvdHlwZS5zZXRMYXllclpvb21SYW5nZT1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2k/aS5taW56b29tPT09ciYmaS5tYXh6b29tPT09bnx8KG51bGwhPXImJihpLm1pbnpvb209ciksbnVsbCE9biYmKGkubWF4em9vbT1uKSx0aGlzLl91cGRhdGVMYXllcihpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBoYXZlIHpvb20gZXh0ZW50LiIpKSl9LHIucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pLHRoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpZihpKXtpZighdC5kZWVwRXF1YWwoaS5maWx0ZXIscikpcmV0dXJuIG51bGw9PXI/KGkuZmlsdGVyPXZvaWQgMCx2b2lkIHRoaXMuX3VwZGF0ZUxheWVyKGkpKTp2b2lkKHRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsImxheWVycy4iK2kuaWQrIi5maWx0ZXIiLHIsbnVsbCxuKXx8KGkuZmlsdGVyPXQuY2xvbmUkMShyKSx0aGlzLl91cGRhdGVMYXllcihpKSkpfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBmaWx0ZXJlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRGaWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2xvbmUkMSh0aGlzLmdldExheWVyKGUpLmZpbHRlcil9LHIucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKGUscixuLGkpe3ZvaWQgMD09PWkmJihpPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBhPXRoaXMuZ2V0TGF5ZXIoZSk7YT90LmRlZXBFcXVhbChhLmdldExheW91dFByb3BlcnR5KHIpLG4pfHwoYS5zZXRMYXlvdXRQcm9wZXJ0eShyLG4saSksdGhpcy5fdXBkYXRlTGF5ZXIoYSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLiIpKSl9LHIucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5nZXRMYXllcihlKTtpZihuKXJldHVybiBuLmdldExheW91dFByb3BlcnR5KHIpO3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLiIpKSl9LHIucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4saSl7dm9pZCAwPT09aSYmKGk9e30pLHRoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGE9dGhpcy5nZXRMYXllcihlKTthP3QuZGVlcEVxdWFsKGEuZ2V0UGFpbnRQcm9wZXJ0eShyKSxuKXx8KGEuc2V0UGFpbnRQcm9wZXJ0eShyLG4saSkmJnRoaXMuX3VwZGF0ZUxheWVyKGEpLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV09ITApOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLiIpKSl9LHIucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRMYXllcih0KS5nZXRQYWludFByb3BlcnR5KGUpfSxyLnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24oZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPWUuc291cmNlLGk9ZS5zb3VyY2VMYXllcixhPXRoaXMuc291cmNlQ2FjaGVzW25dO2lmKHZvaWQgMCE9PWEpe3ZhciBvPWEuZ2V0U291cmNlKCkudHlwZTsiZ2VvanNvbiI9PT1vJiZpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiR2VvSlNPTiBzb3VyY2VzIGNhbm5vdCBoYXZlIGEgc291cmNlTGF5ZXIgcGFyYW1ldGVyLiIpKSk6InZlY3RvciIhPT1vfHxpPyh2b2lkIDA9PT1lLmlkJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBmZWF0dXJlIGlkIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkLiIpKSksYS5zZXRGZWF0dXJlU3RhdGUoaSxlLmlkLHIpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy4iKSkpfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlICciK24rIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLiIpKSl9LHIucHJvdG90eXBlLnJlbW92ZUZlYXR1cmVTdGF0ZT1mdW5jdGlvbihlLHIpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49ZS5zb3VyY2UsaT10aGlzLnNvdXJjZUNhY2hlc1tuXTtpZih2b2lkIDAhPT1pKXt2YXIgYT1pLmdldFNvdXJjZSgpLnR5cGUsbz0idmVjdG9yIj09PWE/ZS5zb3VyY2VMYXllcjp2b2lkIDA7InZlY3RvciIhPT1hfHxvP3ImJiJzdHJpbmciIT10eXBlb2YgZS5pZCYmIm51bWJlciIhPXR5cGVvZiBlLmlkP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiQSBmZWF0dXJlIGlkIGlzIHJlcXVyZWQgdG8gcmVtb3ZlIGl0cyBzcGVjaWZpYyBzdGF0ZSBwcm9wZXJ0eS4iKSkpOmkucmVtb3ZlRmVhdHVyZVN0YXRlKG8sZS5pZCxyKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy4iKSkpfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlICciK24rIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLiIpKSl9LHIucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPWUuc291cmNlLG49ZS5zb3VyY2VMYXllcixpPXRoaXMuc291cmNlQ2FjaGVzW3JdO2lmKHZvaWQgMCE9PWkpe2lmKCJ2ZWN0b3IiIT09aS5nZXRTb3VyY2UoKS50eXBlfHxuKXJldHVybiB2b2lkIDA9PT1lLmlkJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBmZWF0dXJlIGlkIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkLiIpKSksaS5nZXRGZWF0dXJlU3RhdGUobixlLmlkKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy4iKSkpfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlICciK3IrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLiIpKSl9LHIucHJvdG90eXBlLmdldFRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQmJnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZmlsdGVyT2JqZWN0KHt2ZXJzaW9uOnRoaXMuc3R5bGVzaGVldC52ZXJzaW9uLG5hbWU6dGhpcy5zdHlsZXNoZWV0Lm5hbWUsbWV0YWRhdGE6dGhpcy5zdHlsZXNoZWV0Lm1ldGFkYXRhLGxpZ2h0OnRoaXMuc3R5bGVzaGVldC5saWdodCxjZW50ZXI6dGhpcy5zdHlsZXNoZWV0LmNlbnRlcix6b29tOnRoaXMuc3R5bGVzaGVldC56b29tLGJlYXJpbmc6dGhpcy5zdHlsZXNoZWV0LmJlYXJpbmcscGl0Y2g6dGhpcy5zdHlsZXNoZWV0LnBpdGNoLHNwcml0ZTp0aGlzLnN0eWxlc2hlZXQuc3ByaXRlLGdseXBoczp0aGlzLnN0eWxlc2hlZXQuZ2x5cGhzLHRyYW5zaXRpb246dGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24sc291cmNlczp0Lm1hcE9iamVjdCh0aGlzLnNvdXJjZUNhY2hlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSksbGF5ZXJzOnRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcil9LChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dH0pKX0sci5wcm90b3R5cGUuX3VwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZWRMYXllcnNbdC5pZF09ITAsdC5zb3VyY2UmJiF0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV0mJiJyYXN0ZXIiIT09dGhpcy5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdLmdldFNvdXJjZSgpLnR5cGUmJih0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV09InJlbG9hZCIsdGhpcy5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdLnBhdXNlKCkpLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLl9mbGF0dGVuQW5kU29ydFJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0KXtyZXR1cm4iZmlsbC1leHRydXNpb24iPT09ZS5fbGF5ZXJzW3RdLnR5cGV9LG49e30saT1bXSxhPXRoaXMuX29yZGVyLmxlbmd0aC0xO2E+PTA7YS0tKXt2YXIgbz10aGlzLl9vcmRlclthXTtpZihyKG8pKXtuW29dPWE7Zm9yKHZhciBzPTAsbD10O3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXVtvXTtpZihjKWZvcih2YXIgdT0wLGY9Yzt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07aS5wdXNoKGgpfX19fWkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5pbnRlcnNlY3Rpb25aLXQuaW50ZXJzZWN0aW9uWn0pKTtmb3IodmFyIHA9W10sZD10aGlzLl9vcmRlci5sZW5ndGgtMTtkPj0wO2QtLSl7dmFyIG09dGhpcy5fb3JkZXJbZF07aWYocihtKSlmb3IodmFyIGc9aS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHY9aVtnXS5mZWF0dXJlO2lmKG5bdi5sYXllci5pZF08ZClicmVhaztwLnB1c2godiksaS5wb3AoKX1lbHNlIGZvcih2YXIgeT0wLHg9dDt5PHgubGVuZ3RoO3krPTEpe3ZhciBiPXhbeV1bbV07aWYoYilmb3IodmFyIF89MCx3PWI7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgVD13W19dO3AucHVzaChULmZlYXR1cmUpfX19cmV0dXJuIHB9LHIucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbihlLHIsbil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsInF1ZXJ5UmVuZGVyZWRGZWF0dXJlcy5maWx0ZXIiLHIuZmlsdGVyLG51bGwscik7dmFyIGk9e307aWYociYmci5sYXllcnMpe2lmKCFBcnJheS5pc0FycmF5KHIubGF5ZXJzKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJwYXJhbWV0ZXJzLmxheWVycyBtdXN0IGJlIGFuIEFycmF5LiIpKSksW107Zm9yKHZhciBhPTAsbz1yLmxheWVyczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD10aGlzLl9sYXllcnNbc107aWYoIWwpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK3MrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcXVlcmllZCBmb3IgZmVhdHVyZXMuIikpKSxbXTtpW2wuc291cmNlXT0hMH19dmFyIGM9W107Zm9yKHZhciB1IGluIHIuYXZhaWxhYmxlSW1hZ2VzPXRoaXMuX2F2YWlsYWJsZUltYWdlcyx0aGlzLnNvdXJjZUNhY2hlcylyLmxheWVycyYmIWlbdV18fGMucHVzaChGKHRoaXMuc291cmNlQ2FjaGVzW3VdLHRoaXMuX2xheWVycyx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLGUscixuKSk7cmV0dXJuIHRoaXMucGxhY2VtZW50JiZjLnB1c2goZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXt9LGw9YS5xdWVyeVJlbmRlcmVkU3ltYm9scyhuKSxjPVtdLHU9MCxmPU9iamVjdC5rZXlzKGwpLm1hcChOdW1iZXIpO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtjLnB1c2gob1toXSl9Yy5zb3J0KEIpO2Zvcih2YXIgcD1mdW5jdGlvbigpe3ZhciByPW1bZF0sbj1yLmZlYXR1cmVJbmRleC5sb29rdXBTeW1ib2xGZWF0dXJlcyhsW3IuYnVja2V0SW5zdGFuY2VJZF0sZSxyLmJ1Y2tldEluZGV4LHIuc291cmNlTGF5ZXJJbmRleCxpLmZpbHRlcixpLmxheWVycyxpLmF2YWlsYWJsZUltYWdlcyx0KTtmb3IodmFyIGEgaW4gbil7dmFyIG89c1thXT1zW2FdfHxbXSxjPW5bYV07Yy5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciBuPXIuZmVhdHVyZVNvcnRPcmRlcjtpZihuKXt2YXIgaT1uLmluZGV4T2YodC5mZWF0dXJlSW5kZXgpO3JldHVybiBuLmluZGV4T2YoZS5mZWF0dXJlSW5kZXgpLWl9cmV0dXJuIGUuZmVhdHVyZUluZGV4LXQuZmVhdHVyZUluZGV4fSkpO2Zvcih2YXIgdT0wLGY9Yzt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07by5wdXNoKGgpfX19LGQ9MCxtPWM7ZDxtLmxlbmd0aDtkKz0xKXAoKTt2YXIgZz1mdW5jdGlvbihlKXtzW2VdLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW4uZmVhdHVyZSxhPXRbZV0sbz1yW2Euc291cmNlXS5nZXRGZWF0dXJlU3RhdGUoaS5sYXllclsic291cmNlLWxheWVyIl0saS5pZCk7aS5zb3VyY2U9aS5sYXllci5zb3VyY2UsaS5sYXllclsic291cmNlLWxheWVyIl0mJihpLnNvdXJjZUxheWVyPWkubGF5ZXJbInNvdXJjZS1sYXllciJdKSxpLnN0YXRlPW99KSl9O2Zvcih2YXIgdiBpbiBzKWcodik7cmV0dXJuIHN9KHRoaXMuX2xheWVycyx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLHRoaXMuc291cmNlQ2FjaGVzLGUscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhjKX0sci5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldFRpbGVCeUlEKGUpfSkpLG49W10saT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1vLnRpbGVJRC5jYW5vbmljYWwua2V5O2lbc118fChpW3NdPSEwLG8ucXVlcnlTb3VyY2VGZWF0dXJlcyhuLGUpKX1yZXR1cm4gbn0obixyKTpbXX0sci5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZ2V0U291cmNlVHlwZSh0KT9uKG5ldyBFcnJvcignQSBzb3VyY2UgdHlwZSBjYWxsZWQgIicrdCsnIiBhbHJlYWR5IGV4aXN0cy4nKSk6KHIuc2V0U291cmNlVHlwZSh0LGUpLGUud29ya2VyU291cmNlVVJMP3ZvaWQgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgibG9hZFdvcmtlclNvdXJjZSIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LG4pOm4obnVsbCxudWxsKSl9LHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj10aGlzLmxpZ2h0LmdldExpZ2h0KCksaT0hMTtmb3IodmFyIGEgaW4gZSlpZighdC5kZWVwRXF1YWwoZVthXSxuW2FdKSl7aT0hMDticmVha31pZihpKXt2YXIgbz17bm93OnQuYnJvd3Nlci5ub3coKSx0cmFuc2l0aW9uOnQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pfTt0aGlzLmxpZ2h0LnNldExpZ2h0KGUsciksdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhvKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB2b2lkIDA9PT1hJiYoYT17fSksKCFhfHwhMSE9PWEudmFsaWRhdGUpJiZqZSh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe2tleTpyLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6bixzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGkpKSl9LHIucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5fcmVxdWVzdCYmKHRoaXMuX3JlcXVlc3QuY2FuY2VsKCksdGhpcy5fcmVxdWVzdD1udWxsKSx0aGlzLl9zcHJpdGVSZXF1ZXN0JiYodGhpcy5fc3ByaXRlUmVxdWVzdC5jYW5jZWwoKSx0aGlzLl9zcHJpdGVSZXF1ZXN0PW51bGwpLHQuZXZlbnRlZC5vZmYoInBsdWdpblN0YXRlQ2hhbmdlIix0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2spLHRoaXMuX2xheWVycyl7dGhpcy5fbGF5ZXJzW2VdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCl9Zm9yKHZhciByIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3JdLmNsZWFyVGlsZXMoKSx0aGlzLnNvdXJjZUNhY2hlc1tyXS5zZXRFdmVudGVkUGFyZW50KG51bGwpO3RoaXMuaW1hZ2VNYW5hZ2VyLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5zZXRFdmVudGVkUGFyZW50KG51bGwpLHRoaXMuZGlzcGF0Y2hlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX2NsZWFyU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLmNsZWFyVGlsZXMoKX0sci5wcm90b3R5cGUuX3JlbG9hZFNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZXN1bWUoKSx0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZWxvYWQoKX0sci5wcm90b3R5cGUuX3VwZGF0ZVNvdXJjZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLnVwZGF0ZSh0KX0sci5wcm90b3R5cGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5fcmVsb2FkU291cmNlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUGxhY2VtZW50PWZ1bmN0aW9uKGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9ITEpO2Zvcih2YXIgbz0hMSxzPSExLGw9e30sYz0wLHU9dGhpcy5fb3JkZXI7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdLGg9dGhpcy5fbGF5ZXJzW2ZdO2lmKCJzeW1ib2wiPT09aC50eXBlKXtpZighbFtoLnNvdXJjZV0pe3ZhciBwPXRoaXMuc291cmNlQ2FjaGVzW2guc291cmNlXTtsW2guc291cmNlXT1wLmdldFJlbmRlcmFibGVJZHMoITApLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHAuZ2V0VGlsZUJ5SUQodCl9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50aWxlSUQub3ZlcnNjYWxlZFotdC50aWxlSUQub3ZlcnNjYWxlZFp8fCh0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMToxKX0pKX12YXIgZD10aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LmFkZExheWVyKGgsbFtoLnNvdXJjZV0sZS5jZW50ZXIubG5nKTtvPW98fGR9fWlmKHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpLCgoYT1hfHx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZHx8MD09PW4pfHwhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnR8fHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQodC5icm93c2VyLm5vdygpLGUuem9vbSkpJiYodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQ9bmV3IHplKGUsdGhpcy5fb3JkZXIsYSxyLG4saSx0aGlzLnBsYWNlbWVudCksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITEpLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpP3RoaXMucGxhY2VtZW50LnNldFN0YWxlKCk6KHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbnRpbnVlUGxhY2VtZW50KHRoaXMuX29yZGVyLHRoaXMuX2xheWVycyxsKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmKHRoaXMucGxhY2VtZW50PXRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmNvbW1pdCh0LmJyb3dzZXIubm93KCkpLHM9ITApLG8mJnRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpKSxzfHxvKWZvcih2YXIgbT0wLGc9dGhpcy5fb3JkZXI7bTxnLmxlbmd0aDttKz0xKXt2YXIgdj1nW21dLHk9dGhpcy5fbGF5ZXJzW3ZdOyJzeW1ib2wiPT09eS50eXBlJiZ0aGlzLnBsYWNlbWVudC51cGRhdGVMYXllck9wYWNpdGllcyh5LGxbeS5zb3VyY2VdKX1yZXR1cm4hdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCl8fHRoaXMucGxhY2VtZW50Lmhhc1RyYW5zaXRpb25zKHQuYnJvd3Nlci5ub3coKSl9LHIucHJvdG90eXBlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMoZS5pY29ucyxyKSx0aGlzLl91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07biYmbi5zZXREZXBlbmRlbmNpZXMoZS50aWxlSUQua2V5LGUudHlwZSxlLmljb25zKX0sci5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdseXBoTWFuYWdlci5nZXRHbHlwaHMoZS5zdGFja3Mscil9LHIucHJvdG90eXBlLmdldFJlc291cmNlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5tYWtlUmVxdWVzdChyLG4pfSxyfSh0LkV2ZW50ZWQpO3FlLmdldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIERbdF19LHFlLnNldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlKXtEW3RdPWV9LHFlLnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U9dC5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlO3ZhciBHZT10LmNyZWF0ZUxheW91dChbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLFllPXlyKCIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNpZiAhZGVmaW5lZChsb3dwKVxuI2RlZmluZSBsb3dwXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChoaWdocClcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuI2VuZGlmIiwiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2lmICFkZWZpbmVkKGxvd3ApXG4jZGVmaW5lIGxvd3BcbiNlbmRpZlxuI2lmICFkZWZpbmVkKG1lZGl1bXApXG4jZGVmaW5lIG1lZGl1bXBcbiNlbmRpZlxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG4jZW5kaWZcbnZlYzIgdW5wYWNrX2Zsb2F0KGNvbnN0IGZsb2F0IHBhY2tlZFZhbHVlKSB7aW50IHBhY2tlZEludFZhbHVlPWludChwYWNrZWRWYWx1ZSk7aW50IHYwPXBhY2tlZEludFZhbHVlLzI1NjtyZXR1cm4gdmVjMih2MCxwYWNrZWRJbnRWYWx1ZS12MCoyNTYpO312ZWMyIHVucGFja19vcGFjaXR5KGNvbnN0IGZsb2F0IHBhY2tlZE9wYWNpdHkpIHtpbnQgaW50T3BhY2l0eT1pbnQocGFja2VkT3BhY2l0eSkvMjtyZXR1cm4gdmVjMihmbG9hdChpbnRPcGFjaXR5KS8xMjcuMCxtb2QocGFja2VkT3BhY2l0eSwyLjApKTt9dmVjNCBkZWNvZGVfY29sb3IoY29uc3QgdmVjMiBlbmNvZGVkQ29sb3IpIHtyZXR1cm4gdmVjNCh1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzBdKS8yNTUuMCx1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzFdKS8yNTUuMFxuKTt9ZmxvYXQgdW5wYWNrX21peF92ZWMyKGNvbnN0IHZlYzIgcGFja2VkVmFsdWUsY29uc3QgZmxvYXQgdCkge3JldHVybiBtaXgocGFja2VkVmFsdWVbMF0scGFja2VkVmFsdWVbMV0sdCk7fXZlYzQgdW5wYWNrX21peF9jb2xvcihjb25zdCB2ZWM0IHBhY2tlZENvbG9ycyxjb25zdCBmbG9hdCB0KSB7dmVjNCBtaW5Db2xvcj1kZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMF0scGFja2VkQ29sb3JzWzFdKSk7dmVjNCBtYXhDb2xvcj1kZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMl0scGFja2VkQ29sb3JzWzNdKSk7cmV0dXJuIG1peChtaW5Db2xvcixtYXhDb2xvcix0KTt9dmVjMiBnZXRfcGF0dGVybl9wb3MoY29uc3QgdmVjMiBwaXhlbF9jb29yZF91cHBlcixjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX2xvd2VyLGNvbnN0IHZlYzIgcGF0dGVybl9zaXplLGNvbnN0IGZsb2F0IHRpbGVfdW5pdHNfdG9fcGl4ZWxzLGNvbnN0IHZlYzIgcG9zKSB7dmVjMiBvZmZzZXQ9bW9kKG1vZChtb2QocGl4ZWxfY29vcmRfdXBwZXIscGF0dGVybl9zaXplKSoyNTYuMCxwYXR0ZXJuX3NpemUpKjI1Ni4wK3BpeGVsX2Nvb3JkX2xvd2VyLHBhdHRlcm5fc2l6ZSk7cmV0dXJuICh0aWxlX3VuaXRzX3RvX3BpeGVscypwb3Mrb2Zmc2V0KS9wYXR0ZXJuX3NpemU7fSIpLFdlPXlyKCJ1bmlmb3JtIHZlYzQgdV9jb2xvcjt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt2b2lkIG1haW4oKSB7Z2xfRnJhZ0NvbG9yPXVfY29sb3IqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxYZT15cigidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X21peDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZvaWQgbWFpbigpIHt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgodV9wYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHVfcGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peCh1X3BhdHRlcm5fdGxfYi91X3RleHNpemUsdV9wYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfbWl4KSp1X29wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO3VuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVsczthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zX2E9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix1X3NjYWxlX2EqdV9wYXR0ZXJuX3NpemVfYSx1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdV9zY2FsZV9iKnVfcGF0dGVybl9zaXplX2IsdV90aWxlX3VuaXRzX3RvX3BpeGVscyxhX3Bvcyk7fSIpLFplPXlyKCJ2YXJ5aW5nIHZlYzMgdl9kYXRhO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZlYzIgZXh0cnVkZT12X2RhdGEueHk7ZmxvYXQgZXh0cnVkZV9sZW5ndGg9bGVuZ3RoKGV4dHJ1ZGUpO2xvd3AgZmxvYXQgYW50aWFsaWFzYmx1cj12X2RhdGEuejtmbG9hdCBhbnRpYWxpYXNlZF9ibHVyPS1tYXgoYmx1cixhbnRpYWxpYXNibHVyKTtmbG9hdCBvcGFjaXR5X3Q9c21vb3Roc3RlcCgwLjAsYW50aWFsaWFzZWRfYmx1cixleHRydWRlX2xlbmd0aC0xLjApO2Zsb2F0IGNvbG9yX3Q9c3Ryb2tlX3dpZHRoIDwgMC4wMSA/IDAuMCA6IHNtb290aHN0ZXAoYW50aWFsaWFzZWRfYmx1ciwwLjAsZXh0cnVkZV9sZW5ndGgtcmFkaXVzLyhyYWRpdXMrc3Ryb2tlX3dpZHRoKSk7Z2xfRnJhZ0NvbG9yPW9wYWNpdHlfdCptaXgoY29sb3Iqb3BhY2l0eSxzdHJva2VfY29sb3Iqc3Ryb2tlX29wYWNpdHksY29sb3JfdCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gYm9vbCB1X3NjYWxlX3dpdGhfbWFwO3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMyB2X2RhdGE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52b2lkIG1haW4odm9pZCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZlYzIgZXh0cnVkZT12ZWMyKG1vZChhX3BvcywyLjApKjIuMC0xLjApO3ZlYzIgY2lyY2xlX2NlbnRlcj1mbG9vcihhX3BvcyowLjUpO2lmICh1X3BpdGNoX3dpdGhfbWFwKSB7dmVjMiBjb3JuZXJfcG9zaXRpb249Y2lyY2xlX2NlbnRlcjtpZiAodV9zY2FsZV93aXRoX21hcCkge2Nvcm5lcl9wb3NpdGlvbis9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlO30gZWxzZSB7dmVjNCBwcm9qZWN0ZWRfY2VudGVyPXVfbWF0cml4KnZlYzQoY2lyY2xlX2NlbnRlciwwLDEpO2Nvcm5lcl9wb3NpdGlvbis9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKihwcm9qZWN0ZWRfY2VudGVyLncvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKTt9Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChjb3JuZXJfcG9zaXRpb24sMCwxKTt9IGVsc2Uge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoY2lyY2xlX2NlbnRlciwwLDEpO2lmICh1X3NjYWxlX3dpdGhfbWFwKSB7Z2xfUG9zaXRpb24ueHkrPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZSp1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7fSBlbHNlIHtnbF9Qb3NpdGlvbi54eSs9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKmdsX1Bvc2l0aW9uLnc7fX1sb3dwIGZsb2F0IGFudGlhbGlhc2JsdXI9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLyhyYWRpdXMrc3Ryb2tlX3dpZHRoKTt2X2RhdGE9dmVjMyhleHRydWRlLngsZXh0cnVkZS55LGFudGlhbGlhc2JsdXIpO30iKSxKZT15cigidm9pZCBtYWluKCkge2dsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxLZT15cigidW5pZm9ybSBoaWdocCBmbG9hdCB1X2ludGVuc2l0eTt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxuZmxvYXQgZD0tMC41KjMuMCozLjAqZG90KHZfZXh0cnVkZSx2X2V4dHJ1ZGUpO2Zsb2F0IHZhbD13ZWlnaHQqdV9pbnRlbnNpdHkqR0FVU1NfQ09FRipleHAoZCk7Z2xfRnJhZ0NvbG9yPXZlYzQodmFsLDEuMCwxLjAsMS4wKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBmbG9hdCB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSBmbG9hdCB1X2ludGVuc2l0eTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbmNvbnN0IGhpZ2hwIGZsb2F0IFpFUk89MS4wLzI1NS4wLzE2LjA7XG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XG52b2lkIG1haW4odm9pZCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xudmVjMiB1bnNjYWxlZF9leHRydWRlPXZlYzIobW9kKGFfcG9zLDIuMCkqMi4wLTEuMCk7ZmxvYXQgUz1zcXJ0KC0yLjAqbG9nKFpFUk8vd2VpZ2h0L3VfaW50ZW5zaXR5L0dBVVNTX0NPRUYpKS8zLjA7dl9leHRydWRlPVMqdW5zY2FsZWRfZXh0cnVkZTt2ZWMyIGV4dHJ1ZGU9dl9leHRydWRlKnJhZGl1cyp1X2V4dHJ1ZGVfc2NhbGU7dmVjNCBwb3M9dmVjNChmbG9vcihhX3BvcyowLjUpK2V4dHJ1ZGUsMCwxKTtnbF9Qb3NpdGlvbj11X21hdHJpeCpwb3M7fSIpLFFlPXlyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3VuaWZvcm0gc2FtcGxlcjJEIHVfY29sb3JfcmFtcDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2Zsb2F0IHQ9dGV4dHVyZTJEKHVfaW1hZ2Usdl9wb3MpLnI7dmVjNCBjb2xvcj10ZXh0dXJlMkQodV9jb2xvcl9yYW1wLHZlYzIodCwwLjUpKTtnbF9GcmFnQ29sb3I9Y29sb3IqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMC4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV93b3JsZDthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MqdV93b3JsZCwwLDEpO3ZfcG9zLng9YV9wb3MueDt2X3Bvcy55PTEuMC1hX3Bvcy55O30iKSwkZT15cigidmFyeWluZyBmbG9hdCB2X3BsYWNlZDt2YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDt2b2lkIG1haW4oKSB7ZmxvYXQgYWxwaGE9MC41O2dsX0ZyYWdDb2xvcj12ZWM0KDEuMCwwLjAsMC4wLDEuMCkqYWxwaGE7aWYgKHZfcGxhY2VkID4gMC41KSB7Z2xfRnJhZ0NvbG9yPXZlYzQoMC4wLDAuMCwxLjAsMC41KSphbHBoYTt9aWYgKHZfbm90VXNlZCA+IDAuNSkge2dsX0ZyYWdDb2xvcio9LjE7fX0iLCJhdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7YXR0cmlidXRlIHZlYzIgYV9leHRydWRlO2F0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO2F0dHJpYnV0ZSB2ZWMyIGFfc2hpZnQ7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dmFyeWluZyBmbG9hdCB2X3BsYWNlZDt2YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDt2b2lkIG1haW4oKSB7dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfYW5jaG9yX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSoodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2UpLDAuMCw0LjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMC4wLDEuMCk7Z2xfUG9zaXRpb24ueHkrPShhX2V4dHJ1ZGUrYV9zaGlmdCkqdV9leHRydWRlX3NjYWxlKmdsX1Bvc2l0aW9uLncqY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO3ZfcGxhY2VkPWFfcGxhY2VkLng7dl9ub3RVc2VkPWFfcGxhY2VkLnk7fSIpLHRyPXlyKCJ2YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7dmFyeWluZyBmbG9hdCB2X3BlcnNwZWN0aXZlX3JhdGlvO3ZhcnlpbmcgZmxvYXQgdl9jb2xsaXNpb247dm9pZCBtYWluKCkge2Zsb2F0IGFscGhhPTAuNSptaW4odl9wZXJzcGVjdGl2ZV9yYXRpbywxLjApO2Zsb2F0IHN0cm9rZV9yYWRpdXM9MC45Km1heCh2X3BlcnNwZWN0aXZlX3JhdGlvLDEuMCk7ZmxvYXQgZGlzdGFuY2VfdG9fY2VudGVyPWxlbmd0aCh2X2V4dHJ1ZGUpO2Zsb2F0IGRpc3RhbmNlX3RvX2VkZ2U9YWJzKGRpc3RhbmNlX3RvX2NlbnRlci12X3JhZGl1cyk7ZmxvYXQgb3BhY2l0eV90PXNtb290aHN0ZXAoLXN0cm9rZV9yYWRpdXMsMC4wLC1kaXN0YW5jZV90b19lZGdlKTt2ZWM0IGNvbG9yPW1peCh2ZWM0KDAuMCwwLjAsMS4wLDAuNSksdmVjNCgxLjAsMC4wLDAuMCwxLjApLHZfY29sbGlzaW9uKTtnbF9GcmFnQ29sb3I9Y29sb3IqYWxwaGEqb3BhY2l0eV90O30iLCJhdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9yYWRpdXM7YXR0cmlidXRlIHZlYzIgYV9mbGFnczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfaW52X21hdHJpeDt1bmlmb3JtIHZlYzIgdV92aWV3cG9ydF9zaXplO3VuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3ZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTt2YXJ5aW5nIGZsb2F0IHZfcGVyc3BlY3RpdmVfcmF0aW87dmFyeWluZyBmbG9hdCB2X2NvbGxpc2lvbjt2ZWMzIHRvVGlsZVBvc2l0aW9uKHZlYzIgc2NyZWVuUG9zKSB7dmVjNCByYXlTdGFydD11X2ludl9tYXRyaXgqdmVjNChzY3JlZW5Qb3MsLTEuMCwxLjApO3ZlYzQgcmF5RW5kICA9dV9pbnZfbWF0cml4KnZlYzQoc2NyZWVuUG9zLCAxLjAsMS4wKTtyYXlTdGFydC54eXovPXJheVN0YXJ0Lnc7cmF5RW5kLnh5eiAgLz1yYXlFbmQudztoaWdocCBmbG9hdCB0PSgwLjAtcmF5U3RhcnQueikvKHJheUVuZC56LXJheVN0YXJ0LnopO3JldHVybiBtaXgocmF5U3RhcnQueHl6LHJheUVuZC54eXosdCk7fXZvaWQgbWFpbigpIHt2ZWMyIHF1YWRDZW50ZXJQb3M9YV9wb3M7ZmxvYXQgcmFkaXVzPWFfcmFkaXVzO2Zsb2F0IGNvbGxpc2lvbj1hX2ZsYWdzLng7ZmxvYXQgdmVydGV4SWR4PWFfZmxhZ3MueTt2ZWMyIHF1YWRWZXJ0ZXhPZmZzZXQ9dmVjMihtaXgoLTEuMCwxLjAsZmxvYXQodmVydGV4SWR4ID49Mi4wKSksbWl4KC0xLjAsMS4wLGZsb2F0KHZlcnRleElkeCA+PTEuMCAmJiB2ZXJ0ZXhJZHggPD0yLjApKSk7dmVjMiBxdWFkVmVydGV4RXh0ZW50PXF1YWRWZXJ0ZXhPZmZzZXQqcmFkaXVzO3ZlYzMgdGlsZVBvcz10b1RpbGVQb3NpdGlvbihxdWFkQ2VudGVyUG9zKTt2ZWM0IGNsaXBQb3M9dV9tYXRyaXgqdmVjNCh0aWxlUG9zLDEuMCk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1jbGlwUG9zLnc7aGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSwwLjAsNC4wKTtmbG9hdCBwYWRkaW5nX2ZhY3Rvcj0xLjI7dl9yYWRpdXM9cmFkaXVzO3ZfZXh0cnVkZT1xdWFkVmVydGV4RXh0ZW50KnBhZGRpbmdfZmFjdG9yO3ZfcGVyc3BlY3RpdmVfcmF0aW89Y29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO3ZfY29sbGlzaW9uPWNvbGxpc2lvbjtnbF9Qb3NpdGlvbj12ZWM0KGNsaXBQb3MueHl6L2NsaXBQb3MudywxLjApK3ZlYzQocXVhZFZlcnRleEV4dGVudCpwYWRkaW5nX2ZhY3Rvci91X3ZpZXdwb3J0X3NpemUqMi4wLDAuMCwwLjApO30iKSxlcj15cigidW5pZm9ybSBoaWdocCB2ZWM0IHVfY29sb3I7dW5pZm9ybSBzYW1wbGVyMkQgdV9vdmVybGF5O3ZhcnlpbmcgdmVjMiB2X3V2O3ZvaWQgbWFpbigpIHt2ZWM0IG92ZXJsYXlfY29sb3I9dGV4dHVyZTJEKHVfb3ZlcmxheSx2X3V2KTtnbF9GcmFnQ29sb3I9bWl4KHVfY29sb3Isb3ZlcmxheV9jb2xvcixvdmVybGF5X2NvbG9yLmEpO30iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl91djt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBmbG9hdCB1X292ZXJsYXlfc2NhbGU7dm9pZCBtYWluKCkge3ZfdXY9YV9wb3MvODE5Mi4wO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MqdV9vdmVybGF5X3NjYWxlLDAsMSk7fSIpLHJyPXlyKCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmdsX0ZyYWdDb2xvcj1jb2xvcipvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxucj15cigidmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9wb3MtZ2xfRnJhZ0Nvb3JkLnh5KTtmbG9hdCBhbHBoYT0xLjAtc21vb3Roc3RlcCgwLjAsMS4wLGRpc3QpO2dsX0ZyYWdDb2xvcj1vdXRsaW5lX2NvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zPShnbF9Qb3NpdGlvbi54eS9nbF9Qb3NpdGlvbi53KzEuMCkvMi4wKnVfd29ybGQ7fSIpLGlyPXlyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtmbG9hdCBkaXN0PWxlbmd0aCh2X3Bvcy1nbF9GcmFnQ29vcmQueHkpO2Zsb2F0IGFscGhhPTEuMC1zbW9vdGhzdGVwKDAuMCwxLjAsZGlzdCk7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSkqYWxwaGEqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlUmF0aW8sYV9wb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVSYXRpbyxhX3Bvcyk7dl9wb3M9KGdsX1Bvc2l0aW9uLnh5L2dsX1Bvc2l0aW9uLncrMS4wKS8yLjAqdV93b3JsZDt9IiksYXI9eXIoInVuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peChwYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHBhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgocGF0dGVybl90bF9iL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSkqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVab29tUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bztnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlWm9vbVJhdGlvLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlWm9vbVJhdGlvLGFfcG9zKTt9Iiksb3I9eXIoInZhcnlpbmcgdmVjNCB2X2NvbG9yO3ZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dl9jb2xvcjtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjt1bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO3VuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O3VuaWZvcm0gZmxvYXQgdV92ZXJ0aWNhbF9ncmFkaWVudDt1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO3ZhcnlpbmcgdmVjNCB2X2NvbG9yO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbnZlYzMgbm9ybWFsPWFfbm9ybWFsX2VkLnh5ejtiYXNlPW1heCgwLjAsYmFzZSk7aGVpZ2h0PW1heCgwLjAsaGVpZ2h0KTtmbG9hdCB0PW1vZChub3JtYWwueCwyLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsMSk7ZmxvYXQgY29sb3J2YWx1ZT1jb2xvci5yKjAuMjEyNitjb2xvci5nKjAuNzE1Mitjb2xvci5iKjAuMDcyMjt2X2NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTt2ZWM0IGFtYmllbnRsaWdodD12ZWM0KDAuMDMsMC4wMywwLjAzLDEuMCk7Y29sb3IrPWFtYmllbnRsaWdodDtmbG9hdCBkaXJlY3Rpb25hbD1jbGFtcChkb3Qobm9ybWFsLzE2Mzg0LjAsdV9saWdodHBvcyksMC4wLDEuMCk7ZGlyZWN0aW9uYWw9bWl4KCgxLjAtdV9saWdodGludGVuc2l0eSksbWF4KCgxLjAtY29sb3J2YWx1ZSt1X2xpZ2h0aW50ZW5zaXR5KSwxLjApLGRpcmVjdGlvbmFsKTtpZiAobm9ybWFsLnkgIT0wLjApIHtkaXJlY3Rpb25hbCo9KCgxLjAtdV92ZXJ0aWNhbF9ncmFkaWVudCkrKHVfdmVydGljYWxfZ3JhZGllbnQqY2xhbXAoKHQrYmFzZSkqcG93KGhlaWdodC8xNTAuMCwwLjUpLG1peCgwLjcsMC45OCwxLjAtdV9saWdodGludGVuc2l0eSksMS4wKSkpO312X2NvbG9yLnIrPWNsYW1wKGNvbG9yLnIqZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLnIsbWl4KDAuMCwwLjMsMS4wLXVfbGlnaHRjb2xvci5yKSwxLjApO3ZfY29sb3IuZys9Y2xhbXAoY29sb3IuZypkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IuZyxtaXgoMC4wLDAuMywxLjAtdV9saWdodGNvbG9yLmcpLDEuMCk7dl9jb2xvci5iKz1jbGFtcChjb2xvci5iKmRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvci5iLG1peCgwLjAsMC4zLDEuMC11X2xpZ2h0Y29sb3IuYiksMS4wKTt2X2NvbG9yKj11X29wYWNpdHk7fSIpLHNyPXlyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dzt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgocGF0dGVybl90bF9hL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHBhdHRlcm5fdGxfYi91X3RleHNpemUscGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO3ZlYzQgbWl4ZWRDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X2ZhZGUpO2dsX0ZyYWdDb2xvcj1taXhlZENvbG9yKnZfbGlnaHRpbmc7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gZmxvYXQgdV9oZWlnaHRfZmFjdG9yO3VuaWZvcm0gdmVjMyB1X3NjYWxlO3VuaWZvcm0gZmxvYXQgdV92ZXJ0aWNhbF9ncmFkaWVudDt1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7dW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvczt1bmlmb3JtIGxvd3AgZmxvYXQgdV9saWdodGludGVuc2l0eTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjNCBhX25vcm1hbF9lZDt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzQgdl9saWdodGluZztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVSYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejt2ZWMzIG5vcm1hbD1hX25vcm1hbF9lZC54eXo7ZmxvYXQgZWRnZWRpc3RhbmNlPWFfbm9ybWFsX2VkLnc7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bztiYXNlPW1heCgwLjAsYmFzZSk7aGVpZ2h0PW1heCgwLjAsaGVpZ2h0KTtmbG9hdCB0PW1vZChub3JtYWwueCwyLjApO2Zsb2F0IHo9dCA+IDAuMCA/IGhlaWdodCA6IGJhc2U7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyx6LDEpO3ZlYzIgcG9zPW5vcm1hbC54PT0xLjAgJiYgbm9ybWFsLnk9PTAuMCAmJiBub3JtYWwuej09MTYzODQuMFxuPyBhX3Bvc1xuOiB2ZWMyKGVkZ2VkaXN0YW5jZSx6KnVfaGVpZ2h0X2ZhY3Rvcik7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlUmF0aW8scG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlUmF0aW8scG9zKTt2X2xpZ2h0aW5nPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTtmbG9hdCBkaXJlY3Rpb25hbD1jbGFtcChkb3Qobm9ybWFsLzE2MzgzLjAsdV9saWdodHBvcyksMC4wLDEuMCk7ZGlyZWN0aW9uYWw9bWl4KCgxLjAtdV9saWdodGludGVuc2l0eSksbWF4KCgwLjUrdV9saWdodGludGVuc2l0eSksMS4wKSxkaXJlY3Rpb25hbCk7aWYgKG5vcm1hbC55ICE9MC4wKSB7ZGlyZWN0aW9uYWwqPSgoMS4wLXVfdmVydGljYWxfZ3JhZGllbnQpKyh1X3ZlcnRpY2FsX2dyYWRpZW50KmNsYW1wKCh0K2Jhc2UpKnBvdyhoZWlnaHQvMTUwLjAsMC41KSxtaXgoMC43LDAuOTgsMS4wLXVfbGlnaHRpbnRlbnNpdHkpLDEuMCkpKTt9dl9saWdodGluZy5yZ2IrPWNsYW1wKGRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvcixtaXgodmVjMygwLjApLHZlYzMoMC4zKSwxLjAtdV9saWdodGNvbG9yKSx2ZWMzKDEuMCkpO3ZfbGlnaHRpbmcqPXVfb3BhY2l0eTt9IiksbHI9eXIoIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvczt1bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247dW5pZm9ybSBmbG9hdCB1X3pvb207dW5pZm9ybSBmbG9hdCB1X21heHpvb207dW5pZm9ybSB2ZWM0IHVfdW5wYWNrO2Zsb2F0IGdldEVsZXZhdGlvbih2ZWMyIGNvb3JkLGZsb2F0IGJpYXMpIHt2ZWM0IGRhdGE9dGV4dHVyZTJEKHVfaW1hZ2UsY29vcmQpKjI1NS4wO2RhdGEuYT0tMS4wO3JldHVybiBkb3QoZGF0YSx1X3VucGFjaykvNC4wO312b2lkIG1haW4oKSB7dmVjMiBlcHNpbG9uPTEuMC91X2RpbWVuc2lvbjtmbG9hdCBhPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKC1lcHNpbG9uLngsLWVwc2lsb24ueSksMC4wKTtmbG9hdCBiPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKDAsLWVwc2lsb24ueSksMC4wKTtmbG9hdCBjPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGQ9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCwwKSwwLjApO2Zsb2F0IGU9Z2V0RWxldmF0aW9uKHZfcG9zLDAuMCk7ZmxvYXQgZj1nZXRFbGV2YXRpb24odl9wb3MrdmVjMihlcHNpbG9uLngsMCksMC4wKTtmbG9hdCBnPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKC1lcHNpbG9uLngsZXBzaWxvbi55KSwwLjApO2Zsb2F0IGg9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoMCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgaT1nZXRFbGV2YXRpb24odl9wb3MrdmVjMihlcHNpbG9uLngsZXBzaWxvbi55KSwwLjApO2Zsb2F0IGV4YWdnZXJhdGlvbj11X3pvb20gPCAyLjAgPyAwLjQgOiB1X3pvb20gPCA0LjUgPyAwLjM1IDogMC4zO3ZlYzIgZGVyaXY9dmVjMigoYytmK2YraSktKGErZCtkK2cpLChnK2graCtpKS0oYStiK2IrYykpLyBwb3coMi4wLCh1X3pvb20tdV9tYXh6b29tKSpleGFnZ2VyYXRpb24rMTkuMjU2Mi11X3pvb20pO2dsX0ZyYWdDb2xvcj1jbGFtcCh2ZWM0KGRlcml2LngvMi4wKzAuNSxkZXJpdi55LzIuMCswLjUsMS4wLDEuMCksMC4wLDEuMCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X2RpbWVuc2lvbjthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIHZlYzIgZXBzaWxvbj0xLjAvdV9kaW1lbnNpb247ZmxvYXQgc2NhbGU9KHVfZGltZW5zaW9uLngtMi4wKS91X2RpbWVuc2lvbi54O3ZfcG9zPShhX3RleHR1cmVfcG9zLzgxOTIuMCkqc2NhbGUrZXBzaWxvbjt9IiksY3I9eXIoInVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zO3VuaWZvcm0gdmVjMiB1X2xhdHJhbmdlO3VuaWZvcm0gdmVjMiB1X2xpZ2h0O3VuaWZvcm0gdmVjNCB1X3NoYWRvdzt1bmlmb3JtIHZlYzQgdV9oaWdobGlnaHQ7dW5pZm9ybSB2ZWM0IHVfYWNjZW50O1xuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xudm9pZCBtYWluKCkge3ZlYzQgcGl4ZWw9dGV4dHVyZTJEKHVfaW1hZ2Usdl9wb3MpO3ZlYzIgZGVyaXY9KChwaXhlbC5yZyoyLjApLTEuMCk7ZmxvYXQgc2NhbGVGYWN0b3I9Y29zKHJhZGlhbnMoKHVfbGF0cmFuZ2VbMF0tdV9sYXRyYW5nZVsxXSkqKDEuMC12X3Bvcy55KSt1X2xhdHJhbmdlWzFdKSk7ZmxvYXQgc2xvcGU9YXRhbigxLjI1Kmxlbmd0aChkZXJpdikvc2NhbGVGYWN0b3IpO2Zsb2F0IGFzcGVjdD1kZXJpdi54ICE9MC4wID8gYXRhbihkZXJpdi55LC1kZXJpdi54KSA6IFBJLzIuMCooZGVyaXYueSA+IDAuMCA/IDEuMCA6LTEuMCk7ZmxvYXQgaW50ZW5zaXR5PXVfbGlnaHQueDtmbG9hdCBhemltdXRoPXVfbGlnaHQueStQSTtmbG9hdCBiYXNlPTEuODc1LWludGVuc2l0eSoxLjc1O2Zsb2F0IG1heFZhbHVlPTAuNSpQSTtmbG9hdCBzY2FsZWRTbG9wZT1pbnRlbnNpdHkgIT0wLjUgPyAoKHBvdyhiYXNlLHNsb3BlKS0xLjApLyhwb3coYmFzZSxtYXhWYWx1ZSktMS4wKSkqbWF4VmFsdWUgOiBzbG9wZTtmbG9hdCBhY2NlbnQ9Y29zKHNjYWxlZFNsb3BlKTt2ZWM0IGFjY2VudF9jb2xvcj0oMS4wLWFjY2VudCkqdV9hY2NlbnQqY2xhbXAoaW50ZW5zaXR5KjIuMCwwLjAsMS4wKTtmbG9hdCBzaGFkZT1hYnMobW9kKChhc3BlY3QrYXppbXV0aCkvUEkrMC41LDIuMCktMS4wKTt2ZWM0IHNoYWRlX2NvbG9yPW1peCh1X3NoYWRvdyx1X2hpZ2hsaWdodCxzaGFkZSkqc2luKHNjYWxlZFNsb3BlKSpjbGFtcChpbnRlbnNpdHkqMi4wLDAuMCwxLjApO2dsX0ZyYWdDb2xvcj1hY2NlbnRfY29sb3IqKDEuMC1zaGFkZV9jb2xvci5hKStzaGFkZV9jb2xvcjtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvcz1hX3RleHR1cmVfcG9zLzgxOTIuMDt9IiksdXI9eXIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lc29mYXI7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDt2X2xpbmVzb2Zhcj0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSoyLjA7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLGZyPXlyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO3ZlYzQgY29sb3I9dGV4dHVyZTJEKHVfaW1hZ2UsdmVjMih2X2xpbmVwcm9ncmVzcywwLjUpKTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsIlxuI2RlZmluZSBNQVhfTElORV9ESVNUQU5DRSAzMjc2Ny4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7dl9saW5lcHJvZ3Jlc3M9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqMi4wL01BWF9MSU5FX0RJU1RBTkNFO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxocj15cigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBtZWRpdW1wIHZlYzMgdV9zY2FsZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2xpbmVzb2Zhcjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBmbG9hdCB2X3dpZHRoO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlWm9vbVJhdGlvPXVfc2NhbGUueDtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS55O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS56O3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87dmVjMiBwYXR0ZXJuX3NpemVfYT12ZWMyKGRpc3BsYXlfc2l6ZV9hLngqZnJvbVNjYWxlL3RpbGVab29tUmF0aW8sZGlzcGxheV9zaXplX2EueSk7dmVjMiBwYXR0ZXJuX3NpemVfYj12ZWMyKGRpc3BsYXlfc2l6ZV9iLngqdG9TY2FsZS90aWxlWm9vbVJhdGlvLGRpc3BsYXlfc2l6ZV9iLnkpO2Zsb2F0IGFzcGVjdF9hPWRpc3BsYXlfc2l6ZV9hLnkvdl93aWR0aDtmbG9hdCBhc3BlY3RfYj1kaXNwbGF5X3NpemVfYi55L3Zfd2lkdGg7ZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2Zsb2F0IHhfYT1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2EueCphc3BlY3RfYSwxLjApO2Zsb2F0IHhfYj1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2IueCphc3BlY3RfYiwxLjApO2Zsb2F0IHk9MC41KnZfbm9ybWFsLnkrMC41O3ZlYzIgdGV4ZWxfc2l6ZT0xLjAvdV90ZXhzaXplO3ZlYzIgcG9zX2E9bWl4KHBhdHRlcm5fdGxfYSp0ZXhlbF9zaXplLXRleGVsX3NpemUscGF0dGVybl9icl9hKnRleGVsX3NpemUrdGV4ZWxfc2l6ZSx2ZWMyKHhfYSx5KSk7dmVjMiBwb3NfYj1taXgocGF0dGVybl90bF9iKnRleGVsX3NpemUtdGV4ZWxfc2l6ZSxwYXR0ZXJuX2JyX2IqdGV4ZWxfc2l6ZSt0ZXhlbF9zaXplLHZlYzIoeF9iLHkpKTt2ZWM0IGNvbG9yPW1peCh0ZXh0dXJlMkQodV9pbWFnZSxwb3NfYSksdGV4dHVyZTJEKHVfaW1hZ2UscG9zX2IpLHVfZmFkZSk7Z2xfRnJhZ0NvbG9yPWNvbG9yKmFscGhhKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2xpbmVzb2Zhcjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBmbG9hdCB2X3dpZHRoO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7ZmxvYXQgYV9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqTElORV9ESVNUQU5DRV9TQ0FMRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3ZfbGluZXNvZmFyPWFfbGluZXNvZmFyO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt2X3dpZHRoPWZsb29yd2lkdGg7fSIpLHByPXlyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7dW5pZm9ybSBmbG9hdCB1X21peDt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgdmVjMiB2X3RleF9hO3ZhcnlpbmcgdmVjMiB2X3RleF9iO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7ZmxvYXQgc2RmZGlzdF9hPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2EpLmE7ZmxvYXQgc2RmZGlzdF9iPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2IpLmE7ZmxvYXQgc2RmZGlzdD1taXgoc2RmZGlzdF9hLHNkZmRpc3RfYix1X21peCk7YWxwaGEqPXNtb290aHN0ZXAoMC41LXVfc2RmZ2FtbWEvZmxvb3J3aWR0aCwwLjUrdV9zZGZnYW1tYS9mbG9vcndpZHRoLHNkZmRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7dW5pZm9ybSBmbG9hdCB1X3RleF95X2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2I7dW5pZm9ybSBmbG9hdCB1X3RleF95X2I7dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfdGV4X2E7dmFyeWluZyB2ZWMyIHZfdGV4X2I7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7ZmxvYXQgYV9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqTElORV9ESVNUQU5DRV9TQ0FMRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3ZfdGV4X2E9dmVjMihhX2xpbmVzb2Zhcip1X3BhdHRlcm5zY2FsZV9hLngvZmxvb3J3aWR0aCxub3JtYWwueSp1X3BhdHRlcm5zY2FsZV9hLnkrdV90ZXhfeV9hKTt2X3RleF9iPXZlYzIoYV9saW5lc29mYXIqdV9wYXR0ZXJuc2NhbGVfYi54L2Zsb29yd2lkdGgsbm9ybWFsLnkqdV9wYXR0ZXJuc2NhbGVfYi55K3VfdGV4X3lfYik7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxkcj15cigidW5pZm9ybSBmbG9hdCB1X2ZhZGVfdDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMTt2YXJ5aW5nIHZlYzIgdl9wb3MwO3ZhcnlpbmcgdmVjMiB2X3BvczE7dW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O3VuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7dW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO3VuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7dW5pZm9ybSB2ZWMzIHVfc3Bpbl93ZWlnaHRzO3ZvaWQgbWFpbigpIHt2ZWM0IGNvbG9yMD10ZXh0dXJlMkQodV9pbWFnZTAsdl9wb3MwKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZTEsdl9wb3MxKTtpZiAoY29sb3IwLmEgPiAwLjApIHtjb2xvcjAucmdiPWNvbG9yMC5yZ2IvY29sb3IwLmE7fWlmIChjb2xvcjEuYSA+IDAuMCkge2NvbG9yMS5yZ2I9Y29sb3IxLnJnYi9jb2xvcjEuYTt9dmVjNCBjb2xvcj1taXgoY29sb3IwLGNvbG9yMSx1X2ZhZGVfdCk7Y29sb3IuYSo9dV9vcGFjaXR5O3ZlYzMgcmdiPWNvbG9yLnJnYjtyZ2I9dmVjMyhkb3QocmdiLHVfc3Bpbl93ZWlnaHRzLnh5eiksZG90KHJnYix1X3NwaW5fd2VpZ2h0cy56eHkpLGRvdChyZ2IsdV9zcGluX3dlaWdodHMueXp4KSk7ZmxvYXQgYXZlcmFnZT0oY29sb3Iucitjb2xvci5nK2NvbG9yLmIpLzMuMDtyZ2IrPShhdmVyYWdlLXJnYikqdV9zYXR1cmF0aW9uX2ZhY3RvcjtyZ2I9KHJnYi0wLjUpKnVfY29udHJhc3RfZmFjdG9yKzAuNTt2ZWMzIHVfaGlnaF92ZWM9dmVjMyh1X2JyaWdodG5lc3NfbG93LHVfYnJpZ2h0bmVzc19sb3csdV9icmlnaHRuZXNzX2xvdyk7dmVjMyB1X2xvd192ZWM9dmVjMyh1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCk7Z2xfRnJhZ0NvbG9yPXZlYzQobWl4KHVfaGlnaF92ZWMsdV9sb3dfdmVjLHJnYikqY29sb3IuYSxjb2xvci5hKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfdGxfcGFyZW50O3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9wYXJlbnQ7dW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3BvczA7dmFyeWluZyB2ZWMyIHZfcG9zMTt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zMD0oKChhX3RleHR1cmVfcG9zLzgxOTIuMCktMC41KS91X2J1ZmZlcl9zY2FsZSApKzAuNTt2X3BvczE9KHZfcG9zMCp1X3NjYWxlX3BhcmVudCkrdV90bF9wYXJlbnQ7fSIpLG1yPXlyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dmFyeWluZyB2ZWMyIHZfdGV4O3ZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5sb3dwIGZsb2F0IGFscGhhPW9wYWNpdHkqdl9mYWRlX29wYWNpdHk7Z2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh1X3RleHR1cmUsdl90ZXgpKmFscGhhO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzQgYV9waXhlbG9mZnNldDthdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7YXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDt1bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2Nvb3JkX21hdHJpeDt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dmFyeWluZyB2ZWMyIHZfdGV4O3ZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTt2ZWMyIGFfcHhvZmZzZXQ9YV9waXhlbG9mZnNldC54eTt2ZWMyIGFfbWluRm9udFNjYWxlPWFfcGl4ZWxvZmZzZXQuencvMjU2LjA7aGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZT0tYV9wcm9qZWN0ZWRfcG9zWzJdO2Zsb2F0IHNpemU7aWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPW1peChhX3NpemVfbWluLGFfc2l6ZVsxXSx1X3NpemVfdCkvMTI4LjA7fSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPWFfc2l6ZV9taW4vMTI4LjA7fSBlbHNlIHtzaXplPXVfc2l6ZTt9dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1wcm9qZWN0ZWRQb2ludC53O2hpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvPXVfcGl0Y2hfd2l0aF9tYXAgP1xuY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZS91X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7aGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSpkaXN0YW5jZV9yYXRpbywwLjAsNC4wKTtzaXplKj1wZXJzcGVjdGl2ZV9yYXRpbztmbG9hdCBmb250U2NhbGU9dV9pc190ZXh0ID8gc2l6ZS8yNC4wIDogc2l6ZTtoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb249MC4wO2lmICh1X3JvdGF0ZV9zeW1ib2wpIHt2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MrdmVjMigxLDApLDAsMSk7dmVjMiBhPXByb2plY3RlZFBvaW50Lnh5L3Byb2plY3RlZFBvaW50Lnc7dmVjMiBiPW9mZnNldFByb2plY3RlZFBvaW50Lnh5L29mZnNldFByb2plY3RlZFBvaW50Lnc7c3ltYm9sX3JvdGF0aW9uPWF0YW4oKGIueS1hLnkpL3VfYXNwZWN0X3JhdGlvLGIueC1hLngpO31oaWdocCBmbG9hdCBhbmdsZV9zaW49c2luKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTtoaWdocCBmbG9hdCBhbmdsZV9jb3M9Y29zKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTttYXQyIHJvdGF0aW9uX21hdHJpeD1tYXQyKGFuZ2xlX2NvcywtMS4wKmFuZ2xlX3NpbixhbmdsZV9zaW4sYW5nbGVfY29zKTt2ZWM0IHByb2plY3RlZF9wb3M9dV9sYWJlbF9wbGFuZV9tYXRyaXgqdmVjNChhX3Byb2plY3RlZF9wb3MueHksMC4wLDEuMCk7Z2xfUG9zaXRpb249dV9jb29yZF9tYXRyaXgqdmVjNChwcm9qZWN0ZWRfcG9zLnh5L3Byb2plY3RlZF9wb3Mudytyb3RhdGlvbl9tYXRyaXgqKGFfb2Zmc2V0LzMyLjAqbWF4KGFfbWluRm9udFNjYWxlLGZvbnRTY2FsZSkrYV9weG9mZnNldC8xNi4wKSwwLjAsMS4wKTt2X3RleD1hX3RleC91X3RleHNpemU7dmVjMiBmYWRlX29wYWNpdHk9dW5wYWNrX29wYWNpdHkoYV9mYWRlX29wYWNpdHkpO2Zsb2F0IGZhZGVfY2hhbmdlPWZhZGVfb3BhY2l0eVsxXSA+IDAuNSA/IHVfZmFkZV9jaGFuZ2UgOi11X2ZhZGVfY2hhbmdlO3ZfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt9IiksZ3I9eXIoIiNkZWZpbmUgU0RGX1BYIDguMFxudW5pZm9ybSBib29sIHVfaXNfaGFsbzt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3ZhcnlpbmcgdmVjMiB2X2RhdGEwO3ZhcnlpbmcgdmVjMyB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbmZsb2F0IEVER0VfR0FNTUE9MC4xMDUvdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmVjMiB0ZXg9dl9kYXRhMC54eTtmbG9hdCBnYW1tYV9zY2FsZT12X2RhdGExLng7ZmxvYXQgc2l6ZT12X2RhdGExLnk7ZmxvYXQgZmFkZV9vcGFjaXR5PXZfZGF0YTFbMl07ZmxvYXQgZm9udFNjYWxlPXVfaXNfdGV4dCA/IHNpemUvMjQuMCA6IHNpemU7bG93cCB2ZWM0IGNvbG9yPWZpbGxfY29sb3I7aGlnaHAgZmxvYXQgZ2FtbWE9RURHRV9HQU1NQS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2xvd3AgZmxvYXQgYnVmZj0oMjU2LjAtNjQuMCkvMjU2LjA7aWYgKHVfaXNfaGFsbykge2NvbG9yPWhhbG9fY29sb3I7Z2FtbWE9KGhhbG9fYmx1cioxLjE5L1NERl9QWCtFREdFX0dBTU1BKS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2J1ZmY9KDYuMC1oYWxvX3dpZHRoL2ZvbnRTY2FsZSkvU0RGX1BYO31sb3dwIGZsb2F0IGRpc3Q9dGV4dHVyZTJEKHVfdGV4dHVyZSx0ZXgpLmE7aGlnaHAgZmxvYXQgZ2FtbWFfc2NhbGVkPWdhbW1hKmdhbW1hX3NjYWxlO2hpZ2hwIGZsb2F0IGFscGhhPXNtb290aHN0ZXAoYnVmZi1nYW1tYV9zY2FsZWQsYnVmZitnYW1tYV9zY2FsZWQsZGlzdCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KmZhZGVfb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiY29uc3QgZmxvYXQgUEk9My4xNDE1OTI2NTM1ODk3OTM7YXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTthdHRyaWJ1dGUgdmVjNCBhX3BpeGVsb2Zmc2V0O2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt2YXJ5aW5nIHZlYzIgdl9kYXRhMDt2YXJ5aW5nIHZlYzMgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTt2ZWMyIGFfcHhvZmZzZXQ9YV9waXhlbG9mZnNldC54eTtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2hpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbj0wLjA7aWYgKHVfcm90YXRlX3N5bWJvbCkge3ZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3Bvcyt2ZWMyKDEsMCksMCwxKTt2ZWMyIGE9cHJvamVjdGVkUG9pbnQueHkvcHJvamVjdGVkUG9pbnQudzt2ZWMyIGI9b2Zmc2V0UHJvamVjdGVkUG9pbnQueHkvb2Zmc2V0UHJvamVjdGVkUG9pbnQudztzeW1ib2xfcm90YXRpb249YXRhbigoYi55LWEueSkvdV9hc3BlY3RfcmF0aW8sYi54LWEueCk7fWhpZ2hwIGZsb2F0IGFuZ2xlX3Npbj1zaW4oc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO2hpZ2hwIGZsb2F0IGFuZ2xlX2Nvcz1jb3Moc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO21hdDIgcm90YXRpb25fbWF0cml4PW1hdDIoYW5nbGVfY29zLC0xLjAqYW5nbGVfc2luLGFuZ2xlX3NpbixhbmdsZV9jb3MpO3ZlYzQgcHJvamVjdGVkX3Bvcz11X2xhYmVsX3BsYW5lX21hdHJpeCp2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwwLjAsMS4wKTtnbF9Qb3NpdGlvbj11X2Nvb3JkX21hdHJpeCp2ZWM0KHByb2plY3RlZF9wb3MueHkvcHJvamVjdGVkX3Bvcy53K3JvdGF0aW9uX21hdHJpeCooYV9vZmZzZXQvMzIuMCpmb250U2NhbGUrYV9weG9mZnNldCksMC4wLDEuMCk7ZmxvYXQgZ2FtbWFfc2NhbGU9Z2xfUG9zaXRpb24udzt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7ZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7dl9kYXRhMD1hX3RleC91X3RleHNpemU7dl9kYXRhMT12ZWMzKGdhbW1hX3NjYWxlLHNpemUsaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSk7fSIpLHZyPXlyKCIjZGVmaW5lIFNERl9QWCA4LjBcbiNkZWZpbmUgU0RGIDEuMFxuI2RlZmluZSBJQ09OIDAuMFxudW5pZm9ybSBib29sIHVfaXNfaGFsbzt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlX2ljb247dW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzQgdl9kYXRhMDt2YXJ5aW5nIHZlYzQgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5mbG9hdCBmYWRlX29wYWNpdHk9dl9kYXRhMVsyXTtpZiAodl9kYXRhMS53PT1JQ09OKSB7dmVjMiB0ZXhfaWNvbj12X2RhdGEwLnp3O2xvd3AgZmxvYXQgYWxwaGE9b3BhY2l0eSpmYWRlX29wYWNpdHk7Z2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh1X3RleHR1cmVfaWNvbix0ZXhfaWNvbikqYWxwaGE7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG5yZXR1cm47fXZlYzIgdGV4PXZfZGF0YTAueHk7ZmxvYXQgRURHRV9HQU1NQT0wLjEwNS91X2RldmljZV9waXhlbF9yYXRpbztmbG9hdCBnYW1tYV9zY2FsZT12X2RhdGExLng7ZmxvYXQgc2l6ZT12X2RhdGExLnk7ZmxvYXQgZm9udFNjYWxlPXNpemUvMjQuMDtsb3dwIHZlYzQgY29sb3I9ZmlsbF9jb2xvcjtoaWdocCBmbG9hdCBnYW1tYT1FREdFX0dBTU1BLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7bG93cCBmbG9hdCBidWZmPSgyNTYuMC02NC4wKS8yNTYuMDtpZiAodV9pc19oYWxvKSB7Y29sb3I9aGFsb19jb2xvcjtnYW1tYT0oaGFsb19ibHVyKjEuMTkvU0RGX1BYK0VER0VfR0FNTUEpLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7YnVmZj0oNi4wLWhhbG9fd2lkdGgvZm9udFNjYWxlKS9TREZfUFg7fWxvd3AgZmxvYXQgZGlzdD10ZXh0dXJlMkQodV90ZXh0dXJlLHRleCkuYTtoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQ9Z2FtbWEqZ2FtbWFfc2NhbGU7aGlnaHAgZmxvYXQgYWxwaGE9c21vb3Roc3RlcChidWZmLWdhbW1hX3NjYWxlZCxidWZmK2dhbW1hX3NjYWxlZCxkaXN0KTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkqZmFkZV9vcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4OTc5MzthdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7YXR0cmlidXRlIHZlYzQgYV9kYXRhO2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplX2ljb247dmFyeWluZyB2ZWM0IHZfZGF0YTA7dmFyeWluZyB2ZWM0IHZfZGF0YTE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudmVjMiBhX3Bvcz1hX3Bvc19vZmZzZXQueHk7dmVjMiBhX29mZnNldD1hX3Bvc19vZmZzZXQuenc7dmVjMiBhX3RleD1hX2RhdGEueHk7dmVjMiBhX3NpemU9YV9kYXRhLnp3O2Zsb2F0IGFfc2l6ZV9taW49Zmxvb3IoYV9zaXplWzBdKjAuNSk7ZmxvYXQgaXNfc2RmPWFfc2l6ZVswXS0yLjAqYV9zaXplX21pbjtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT1zaXplLzI0LjA7aGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uPTAuMDtpZiAodV9yb3RhdGVfc3ltYm9sKSB7dmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zK3ZlYzIoMSwwKSwwLDEpO3ZlYzIgYT1wcm9qZWN0ZWRQb2ludC54eS9wcm9qZWN0ZWRQb2ludC53O3ZlYzIgYj1vZmZzZXRQcm9qZWN0ZWRQb2ludC54eS9vZmZzZXRQcm9qZWN0ZWRQb2ludC53O3N5bWJvbF9yb3RhdGlvbj1hdGFuKChiLnktYS55KS91X2FzcGVjdF9yYXRpbyxiLngtYS54KTt9aGlnaHAgZmxvYXQgYW5nbGVfc2luPXNpbihzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7aGlnaHAgZmxvYXQgYW5nbGVfY29zPWNvcyhzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7bWF0MiByb3RhdGlvbl9tYXRyaXg9bWF0MihhbmdsZV9jb3MsLTEuMCphbmdsZV9zaW4sYW5nbGVfc2luLGFuZ2xlX2Nvcyk7dmVjNCBwcm9qZWN0ZWRfcG9zPXVfbGFiZWxfcGxhbmVfbWF0cml4KnZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LDAuMCwxLjApO2dsX1Bvc2l0aW9uPXVfY29vcmRfbWF0cml4KnZlYzQocHJvamVjdGVkX3Bvcy54eS9wcm9qZWN0ZWRfcG9zLncrcm90YXRpb25fbWF0cml4KihhX29mZnNldC8zMi4wKmZvbnRTY2FsZSksMC4wLDEuMCk7ZmxvYXQgZ2FtbWFfc2NhbGU9Z2xfUG9zaXRpb24udzt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7ZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7dl9kYXRhMC54eT1hX3RleC91X3RleHNpemU7dl9kYXRhMC56dz1hX3RleC91X3RleHNpemVfaWNvbjt2X2RhdGExPXZlYzQoZ2FtbWFfc2NhbGUsc2l6ZSxpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5LGlzX3NkZik7fSIpO2Z1bmN0aW9uIHlyKHQsZSl7dmFyIHI9LyNwcmFnbWEgbWFwYm94OiAoW1x3XSspIChbXHddKykgKFtcd10rKSAoW1x3XSspL2csbj17fTtyZXR1cm57ZnJhZ21lbnRTb3VyY2U6dD10LnJlcGxhY2UociwoZnVuY3Rpb24odCxlLHIsaSxhKXtyZXR1cm4gblthXT0hMCwiZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG52YXJ5aW5nICIrcisiICIraSsiICIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZkZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIn0pKSx2ZXJ0ZXhTb3VyY2U6ZT1lLnJlcGxhY2UociwoZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz0iZmxvYXQiPT09aT8idmVjMiI6InZlYzQiLHM9YS5tYXRjaCgvY29sb3IvKT8iY29sb3IiOm87cmV0dXJuIG5bYV0/ImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudW5pZm9ybSBsb3dwIGZsb2F0IHVfIithKyJfdDtcbmF0dHJpYnV0ZSAiK3IrIiAiK28rIiBhXyIrYSsiO1xudmFyeWluZyAiK3IrIiAiK2krIiAiK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrcisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6InZlYzQiPT09cz8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IGFfIithKyI7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IHVucGFja19taXhfIitzKyIoYV8iK2ErIiwgdV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnVuaWZvcm0gbG93cCBmbG9hdCB1XyIrYSsiX3Q7XG5hdHRyaWJ1dGUgIityKyIgIitvKyIgYV8iK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrcisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6InZlYzQiPT09cz8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IGFfIithKyI7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVucGFja19taXhfIitzKyIoYV8iK2ErIiwgdV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4ifSkpfX12YXIgeHI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwscHJlbHVkZTpZZSxiYWNrZ3JvdW5kOldlLGJhY2tncm91bmRQYXR0ZXJuOlhlLGNpcmNsZTpaZSxjbGlwcGluZ01hc2s6SmUsaGVhdG1hcDpLZSxoZWF0bWFwVGV4dHVyZTpRZSxjb2xsaXNpb25Cb3g6JGUsY29sbGlzaW9uQ2lyY2xlOnRyLGRlYnVnOmVyLGZpbGw6cnIsZmlsbE91dGxpbmU6bnIsZmlsbE91dGxpbmVQYXR0ZXJuOmlyLGZpbGxQYXR0ZXJuOmFyLGZpbGxFeHRydXNpb246b3IsZmlsbEV4dHJ1c2lvblBhdHRlcm46c3IsaGlsbHNoYWRlUHJlcGFyZTpscixoaWxsc2hhZGU6Y3IsbGluZTp1cixsaW5lR3JhZGllbnQ6ZnIsbGluZVBhdHRlcm46aHIsbGluZVNERjpwcixyYXN0ZXI6ZHIsc3ltYm9sSWNvbjptcixzeW1ib2xTREY6Z3Isc3ltYm9sVGV4dEFuZEljb246dnJ9KSxicj1mdW5jdGlvbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9W10sdGhpcy5ib3VuZEluZGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFZlcnRleE9mZnNldD1udWxsLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPW51bGwsdGhpcy52YW89bnVsbH07YnIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmNvbnRleHQ9dDtmb3IodmFyIGw9dGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGghPT1uLmxlbmd0aCxjPTA7IWwmJmM8bi5sZW5ndGg7YysrKXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnNbY10hPT1uW2NdJiYobD0hMCk7dmFyIHU9IXRoaXMudmFvfHx0aGlzLmJvdW5kUHJvZ3JhbSE9PWV8fHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIhPT1yfHxsfHx0aGlzLmJvdW5kSW5kZXhCdWZmZXIhPT1pfHx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0IT09YXx8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIhPT1vfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIhPT1zOyF0LmV4dFZlcnRleEFycmF5T2JqZWN0fHx1P3RoaXMuZnJlc2hCaW5kKGUscixuLGksYSxvLHMpOih0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLG8mJm8uYmluZCgpLGkmJmkuZHluYW1pY0RyYXcmJmkuYmluZCgpLHMmJnMuYmluZCgpKX0sYnIucHJvdG90eXBlLmZyZXNoQmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPXQubnVtQXR0cmlidXRlcyxjPXRoaXMuY29udGV4dCx1PWMuZ2w7aWYoYy5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KCksdGhpcy52YW89Yy5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLGMuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbykscz0wLHRoaXMuYm91bmRQcm9ncmFtPXQsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1lLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9cix0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bix0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PWksdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9YSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9bztlbHNle3M9Yy5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGY9bDtmPHM7ZisrKXUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGYpfWUuZW5hYmxlQXR0cmlidXRlcyh1LHQpO2Zvcih2YXIgaD0wLHA9cjtoPHAubGVuZ3RoO2grPTEpe3BbaF0uZW5hYmxlQXR0cmlidXRlcyh1LHQpfWEmJmEuZW5hYmxlQXR0cmlidXRlcyh1LHQpLG8mJm8uZW5hYmxlQXR0cmlidXRlcyh1LHQpLGUuYmluZCgpLGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpO2Zvcih2YXIgZD0wLG09cjtkPG0ubGVuZ3RoO2QrPTEpe3ZhciBnPW1bZF07Zy5iaW5kKCksZy5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSl9YSYmKGEuYmluZCgpLGEuc2V0VmVydGV4QXR0cmliUG9pbnRlcnModSx0LGkpKSxuJiZuLmJpbmQoKSxvJiYoby5iaW5kKCksby5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLGMuY3VycmVudE51bUF0dHJpYnV0ZXM9bH0sYnIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnZhbyYmKHRoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy52YW89bnVsbCl9O3ZhciBfcj1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXQuZ2w7dGhpcy5wcm9ncmFtPWEuY3JlYXRlUHJvZ3JhbSgpO3ZhciBvPXI/ci5kZWZpbmVzKCk6W107aSYmby5wdXNoKCIjZGVmaW5lIE9WRVJEUkFXX0lOU1BFQ1RPUjsiKTt2YXIgcz1vLmNvbmNhdChZZS5mcmFnbWVudFNvdXJjZSxlLmZyYWdtZW50U291cmNlKS5qb2luKCJcbiIpLGw9by5jb25jYXQoWWUudmVydGV4U291cmNlLGUudmVydGV4U291cmNlKS5qb2luKCJcbiIpLGM9YS5jcmVhdGVTaGFkZXIoYS5GUkFHTUVOVF9TSEFERVIpO2lmKGEuaXNDb250ZXh0TG9zdCgpKXRoaXMuZmFpbGVkVG9DcmVhdGU9ITA7ZWxzZXthLnNoYWRlclNvdXJjZShjLHMpLGEuY29tcGlsZVNoYWRlcihjKSxhLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sYyk7dmFyIHU9YS5jcmVhdGVTaGFkZXIoYS5WRVJURVhfU0hBREVSKTtpZihhLmlzQ29udGV4dExvc3QoKSl0aGlzLmZhaWxlZFRvQ3JlYXRlPSEwO2Vsc2V7YS5zaGFkZXJTb3VyY2UodSxsKSxhLmNvbXBpbGVTaGFkZXIodSksYS5hdHRhY2hTaGFkZXIodGhpcy5wcm9ncmFtLHUpO2Zvcih2YXIgZj1yP3IubGF5b3V0QXR0cmlidXRlczpbXSxoPTA7aDxmLmxlbmd0aDtoKyspYS5iaW5kQXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLGgsZltoXS5uYW1lKTthLmxpbmtQcm9ncmFtKHRoaXMucHJvZ3JhbSksYS5kZWxldGVTaGFkZXIodSksYS5kZWxldGVTaGFkZXIoYyksdGhpcy5udW1BdHRyaWJ1dGVzPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sYS5BQ1RJVkVfQVRUUklCVVRFUyksdGhpcy5hdHRyaWJ1dGVzPXt9O2Zvcih2YXIgcD17fSxkPTA7ZDx0aGlzLm51bUF0dHJpYnV0ZXM7ZCsrKXt2YXIgbT1hLmdldEFjdGl2ZUF0dHJpYih0aGlzLnByb2dyYW0sZCk7bSYmKHRoaXMuYXR0cmlidXRlc1ttLm5hbWVdPWEuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLG0ubmFtZSkpfWZvcih2YXIgZz1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGEuQUNUSVZFX1VOSUZPUk1TKSx2PTA7djxnO3YrKyl7dmFyIHk9YS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSx2KTt5JiYocFt5Lm5hbWVdPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSx5Lm5hbWUpKX10aGlzLmZpeGVkVW5pZm9ybXM9bih0LHApLHRoaXMuYmluZGVyVW5pZm9ybXM9cj9yLmdldFVuaWZvcm1zKHQscCk6W119fX07ZnVuY3Rpb24gd3IodCxlLHIpe3ZhciBuPTEvcGUociwxLGUudHJhbnNmb3JtLnRpbGVab29tKSxpPU1hdGgucG93KDIsci50aWxlSUQub3ZlcnNjYWxlZFopLGE9ci50aWxlU2l6ZSpNYXRoLnBvdygyLGUudHJhbnNmb3JtLnRpbGVab29tKS9pLG89YSooci50aWxlSUQuY2Fub25pY2FsLngrci50aWxlSUQud3JhcCppKSxzPWEqci50aWxlSUQuY2Fub25pY2FsLnk7cmV0dXJue3VfaW1hZ2U6MCx1X3RleHNpemU6ci5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLHVfc2NhbGU6W24sdC5mcm9tU2NhbGUsdC50b1NjYWxlXSx1X2ZhZGU6dC50LHVfcGl4ZWxfY29vcmRfdXBwZXI6W28+PjE2LHM+PjE2XSx1X3BpeGVsX2Nvb3JkX2xvd2VyOls2NTUzNSZvLDY1NTM1JnNdfX1fci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtKXt2YXIgZyx2PXQuZ2w7aWYoIXRoaXMuZmFpbGVkVG9DcmVhdGUpe2Zvcih2YXIgeSBpbiB0LnByb2dyYW0uc2V0KHRoaXMucHJvZ3JhbSksdC5zZXREZXB0aE1vZGUociksdC5zZXRTdGVuY2lsTW9kZShuKSx0LnNldENvbG9yTW9kZShpKSx0LnNldEN1bGxGYWNlKGEpLHRoaXMuZml4ZWRVbmlmb3Jtcyl0aGlzLmZpeGVkVW5pZm9ybXNbeV0uc2V0KG9beV0pO3AmJnAuc2V0VW5pZm9ybXModCx0aGlzLmJpbmRlclVuaWZvcm1zLGYse3pvb206aH0pO2Zvcih2YXIgeD0oZz17fSxnW3YuTElORVNdPTIsZ1t2LlRSSUFOR0xFU109MyxnW3YuTElORV9TVFJJUF09MSxnKVtlXSxiPTAsXz11LmdldCgpO2I8Xy5sZW5ndGg7Yis9MSl7dmFyIHc9X1tiXSxUPXcudmFvc3x8KHcudmFvcz17fSk7KFRbc118fChUW3NdPW5ldyBicikpLmJpbmQodCx0aGlzLGwscD9wLmdldFBhaW50VmVydGV4QnVmZmVycygpOltdLGMsdy52ZXJ0ZXhPZmZzZXQsZCxtKSx2LmRyYXdFbGVtZW50cyhlLHcucHJpbWl0aXZlTGVuZ3RoKngsdi5VTlNJR05FRF9TSE9SVCx3LnByaW1pdGl2ZU9mZnNldCp4KjIpfX19O3ZhciBUcj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1yLnN0eWxlLmxpZ2h0LG89YS5wcm9wZXJ0aWVzLmdldCgicG9zaXRpb24iKSxzPVtvLngsby55LG8uel0sbD10LmNyZWF0ZSQxKCk7InZpZXdwb3J0Ij09PWEucHJvcGVydGllcy5nZXQoImFuY2hvciIpJiZ0LmZyb21Sb3RhdGlvbihsLC1yLnRyYW5zZm9ybS5hbmdsZSksdC50cmFuc2Zvcm1NYXQzKHMscyxsKTt2YXIgYz1hLnByb3BlcnRpZXMuZ2V0KCJjb2xvciIpO3JldHVybnt1X21hdHJpeDplLHVfbGlnaHRwb3M6cyx1X2xpZ2h0aW50ZW5zaXR5OmEucHJvcGVydGllcy5nZXQoImludGVuc2l0eSIpLHVfbGlnaHRjb2xvcjpbYy5yLGMuZyxjLmJdLHVfdmVydGljYWxfZ3JhZGllbnQ6K24sdV9vcGFjaXR5Oml9fSxrcj1mdW5jdGlvbihlLHIsbixpLGEsbyxzKXtyZXR1cm4gdC5leHRlbmQoVHIoZSxyLG4saSksd3IobyxyLHMpLHt1X2hlaWdodF9mYWN0b3I6LU1hdGgucG93KDIsYS5vdmVyc2NhbGVkWikvcy50aWxlU2l6ZS84fSl9LEFyPWZ1bmN0aW9uKHQpe3JldHVybnt1X21hdHJpeDp0fX0sTXI9ZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIHQuZXh0ZW5kKEFyKGUpLHdyKG4scixpKSl9LFNyPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3VfbWF0cml4OnQsdV93b3JsZDplfX0sRXI9ZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4gdC5leHRlbmQoTXIoZSxyLG4saSkse3Vfd29ybGQ6YX0pfSxMcj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYSxvLHM9ZS50cmFuc2Zvcm07aWYoIm1hcCI9PT1pLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpKXt2YXIgbD1wZShuLDEscy56b29tKTthPSEwLG89W2wsbF19ZWxzZSBhPSExLG89cy5waXhlbHNUb0dMVW5pdHM7cmV0dXJue3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9zY2FsZV93aXRoX21hcDorKCJtYXAiPT09aS5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpKSx1X21hdHJpeDplLnRyYW5zbGF0ZVBvc01hdHJpeChyLnBvc01hdHJpeCxuLGkucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlIiksaS5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIikpLHVfcGl0Y2hfd2l0aF9tYXA6K2EsdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV9leHRydWRlX3NjYWxlOm99fSxDcj1mdW5jdGlvbih0LGUscil7dmFyIG49cGUociwxLGUuem9vbSksaT1NYXRoLnBvdygyLGUuem9vbS1yLnRpbGVJRC5vdmVyc2NhbGVkWiksYT1yLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKTtyZXR1cm57dV9tYXRyaXg6dCx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6ZS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHVfcGl4ZWxzX3RvX3RpbGVfdW5pdHM6bix1X2V4dHJ1ZGVfc2NhbGU6W2UucGl4ZWxzVG9HTFVuaXRzWzBdLyhuKmkpLGUucGl4ZWxzVG9HTFVuaXRzWzFdLyhuKmkpXSx1X292ZXJzY2FsZV9mYWN0b3I6YX19LFByPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57dV9tYXRyaXg6dCx1X2ludl9tYXRyaXg6ZSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6ci5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHVfdmlld3BvcnRfc2l6ZTpbci53aWR0aCxyLmhlaWdodF19fSxJcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPTEpLHt1X21hdHJpeDp0LHVfY29sb3I6ZSx1X292ZXJsYXk6MCx1X292ZXJsYXlfc2NhbGU6cn19LE9yPWZ1bmN0aW9uKHQpe3JldHVybnt1X21hdHJpeDp0fX0senI9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJue3VfbWF0cml4OnQsdV9leHRydWRlX3NjYWxlOnBlKGUsMSxyKSx1X2ludGVuc2l0eTpufX07ZnVuY3Rpb24gRHIoZSxyKXt2YXIgbj1NYXRoLnBvdygyLHIuY2Fub25pY2FsLnopLGk9ci5jYW5vbmljYWwueTtyZXR1cm5bbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKDAsaS9uKS50b0xuZ0xhdCgpLmxhdCxuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoMCwoaSsxKS9uKS50b0xuZ0xhdCgpLmxhdF19dmFyIFJyPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLnRyYW5zZm9ybTtyZXR1cm57dV9tYXRyaXg6VXIoZSxyLG4pLHVfcmF0aW86MS9wZShyLDEsaS56b29tKSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X3VuaXRzX3RvX3BpeGVsczpbMS9pLnBpeGVsc1RvR0xVbml0c1swXSwxL2kucGl4ZWxzVG9HTFVuaXRzWzFdXX19LEZyPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5leHRlbmQoUnIoZSxyLG4pLHt1X2ltYWdlOjB9KX0sQnI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9ZS50cmFuc2Zvcm0sbz1qcihyLGEpO3JldHVybnt1X21hdHJpeDpVcihlLHIsbiksdV90ZXhzaXplOnIuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSx1X3JhdGlvOjEvcGUociwxLGEuem9vbSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV9pbWFnZTowLHVfc2NhbGU6W28saS5mcm9tU2NhbGUsaS50b1NjYWxlXSx1X2ZhZGU6aS50LHVfdW5pdHNfdG9fcGl4ZWxzOlsxL2EucGl4ZWxzVG9HTFVuaXRzWzBdLDEvYS5waXhlbHNUb0dMVW5pdHNbMV1dfX0sTnI9ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbz1lLnRyYW5zZm9ybSxzPWUubGluZUF0bGFzLGw9anIocixvKSxjPSJyb3VuZCI9PT1uLmxheW91dC5nZXQoImxpbmUtY2FwIiksdT1zLmdldERhc2goaS5mcm9tLGMpLGY9cy5nZXREYXNoKGkudG8sYyksaD11LndpZHRoKmEuZnJvbVNjYWxlLHA9Zi53aWR0aCphLnRvU2NhbGU7cmV0dXJuIHQuZXh0ZW5kKFJyKGUscixuKSx7dV9wYXR0ZXJuc2NhbGVfYTpbbC9oLC11LmhlaWdodC8yXSx1X3BhdHRlcm5zY2FsZV9iOltsL3AsLWYuaGVpZ2h0LzJdLHVfc2RmZ2FtbWE6cy53aWR0aC8oMjU2Kk1hdGgubWluKGgscCkqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8pLzIsdV9pbWFnZTowLHVfdGV4X3lfYTp1LnksdV90ZXhfeV9iOmYueSx1X21peDphLnR9KX07ZnVuY3Rpb24ganIodCxlKXtyZXR1cm4gMS9wZSh0LDEsZS50aWxlWm9vbSl9ZnVuY3Rpb24gVXIodCxlLHIpe3JldHVybiB0LnRyYW5zbGF0ZVBvc01hdHJpeChlLnRpbGVJRC5wb3NNYXRyaXgsZSxyLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUtYW5jaG9yIikpfXZhciBWcj1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybnt1X21hdHJpeDp0LHVfdGxfcGFyZW50OmUsdV9zY2FsZV9wYXJlbnQ6cix1X2J1ZmZlcl9zY2FsZToxLHVfZmFkZV90Om4ubWl4LHVfb3BhY2l0eTpuLm9wYWNpdHkqaS5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5IiksdV9pbWFnZTA6MCx1X2ltYWdlMToxLHVfYnJpZ2h0bmVzc19sb3c6aS5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1pbiIpLHVfYnJpZ2h0bmVzc19oaWdoOmkucGFpbnQuZ2V0KCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiKSx1X3NhdHVyYXRpb25fZmFjdG9yOihvPWkucGFpbnQuZ2V0KCJyYXN0ZXItc2F0dXJhdGlvbiIpLG8+MD8xLTEvKDEuMDAxLW8pOi1vKSx1X2NvbnRyYXN0X2ZhY3RvcjooYT1pLnBhaW50LmdldCgicmFzdGVyLWNvbnRyYXN0IiksYT4wPzEvKDEtYSk6MSthKSx1X3NwaW5fd2VpZ2h0czpIcihpLnBhaW50LmdldCgicmFzdGVyLWh1ZS1yb3RhdGUiKSl9O3ZhciBhLG99O2Z1bmN0aW9uIEhyKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX12YXIgcXIsR3I9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9aS50cmFuc2Zvcm07cmV0dXJue3VfaXNfc2l6ZV96b29tX2NvbnN0YW50OisoImNvbnN0YW50Ij09PXR8fCJzb3VyY2UiPT09dCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6KygiY29uc3RhbnQiPT09dHx8ImNhbWVyYSI9PT10KSx1X3NpemVfdDplP2UudVNpemVUOjAsdV9zaXplOmU/ZS51U2l6ZTowLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTp1LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9waXRjaDp1LnBpdGNoLzM2MCoyKk1hdGguUEksdV9yb3RhdGVfc3ltYm9sOityLHVfYXNwZWN0X3JhdGlvOnUud2lkdGgvdS5oZWlnaHQsdV9mYWRlX2NoYW5nZTppLm9wdGlvbnMuZmFkZUR1cmF0aW9uP2kuc3ltYm9sRmFkZUNoYW5nZToxLHVfbWF0cml4OmEsdV9sYWJlbF9wbGFuZV9tYXRyaXg6byx1X2Nvb3JkX21hdHJpeDpzLHVfaXNfdGV4dDorbCx1X3BpdGNoX3dpdGhfbWFwOituLHVfdGV4c2l6ZTpjLHVfdGV4dHVyZTowfX0sWXI9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxmKXt2YXIgaD1hLnRyYW5zZm9ybTtyZXR1cm4gdC5leHRlbmQoR3IoZSxyLG4saSxhLG8scyxsLGMsdSkse3VfZ2FtbWFfc2NhbGU6aT9NYXRoLmNvcyhoLl9waXRjaCkqaC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOjEsdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV9pc19oYWxvOitmfSl9LFdyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUpe3JldHVybiB0LmV4dGVuZChZcihlLHIsbixpLGEsbyxzLGwsITAsYywhMCkse3VfdGV4c2l6ZV9pY29uOnUsdV90ZXh0dXJlX2ljb246MX0pfSxYcj1mdW5jdGlvbih0LGUscil7cmV0dXJue3VfbWF0cml4OnQsdV9vcGFjaXR5OmUsdV9jb2xvcjpyfX0sWnI9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe3JldHVybiB0LmV4dGVuZChmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbS50b1N0cmluZygpKSxhPXIuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC50by50b1N0cmluZygpKSxvPXIuaW1hZ2VNYW5hZ2VyLmdldFBpeGVsU2l6ZSgpLHM9by53aWR0aCxsPW8uaGVpZ2h0LGM9TWF0aC5wb3coMixuLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1uLnRpbGVTaXplKk1hdGgucG93KDIsci50cmFuc2Zvcm0udGlsZVpvb20pL2MsZj11KihuLnRpbGVJRC5jYW5vbmljYWwueCtuLnRpbGVJRC53cmFwKmMpLGg9dSpuLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfcGF0dGVybl90bF9hOmkudGwsdV9wYXR0ZXJuX2JyX2E6aS5icix1X3BhdHRlcm5fdGxfYjphLnRsLHVfcGF0dGVybl9icl9iOmEuYnIsdV90ZXhzaXplOltzLGxdLHVfbWl4OmUudCx1X3BhdHRlcm5fc2l6ZV9hOmkuZGlzcGxheVNpemUsdV9wYXR0ZXJuX3NpemVfYjphLmRpc3BsYXlTaXplLHVfc2NhbGVfYTplLmZyb21TY2FsZSx1X3NjYWxlX2I6ZS50b1NjYWxlLHVfdGlsZV91bml0c190b19waXhlbHM6MS9wZShuLDEsci50cmFuc2Zvcm0udGlsZVpvb20pLHVfcGl4ZWxfY29vcmRfdXBwZXI6W2Y+PjE2LGg+PjE2XSx1X3BpeGVsX2Nvb3JkX2xvd2VyOls2NTUzNSZmLDY1NTM1JmhdfX0oaSxvLG4sYSkse3VfbWF0cml4OmUsdV9vcGFjaXR5OnJ9KX0sSnI9e2ZpbGxFeHRydXNpb246ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9saWdodHBvczpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRwb3MpLHVfbGlnaHRpbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2xpZ2h0aW50ZW5zaXR5KSx1X2xpZ2h0Y29sb3I6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0Y29sb3IpLHVfdmVydGljYWxfZ3JhZGllbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3ZlcnRpY2FsX2dyYWRpZW50KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0sZmlsbEV4dHJ1c2lvblBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9saWdodHBvczpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRwb3MpLHVfbGlnaHRpbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2xpZ2h0aW50ZW5zaXR5KSx1X2xpZ2h0Y29sb3I6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0Y29sb3IpLHVfdmVydGljYWxfZ3JhZGllbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3ZlcnRpY2FsX2dyYWRpZW50KSx1X2hlaWdodF9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X2hlaWdodF9mYWN0b3IpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KX19LGZpbGw6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxmaWxsUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpfX0sZmlsbE91dGxpbmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV93b3JsZDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfd29ybGQpfX0sZmlsbE91dGxpbmVQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfd29ybGQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3dvcmxkKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpfX0sY2lyY2xlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9zY2FsZV93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfc2NhbGVfd2l0aF9tYXApLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X2V4dHJ1ZGVfc2NhbGU6bmV3IHQuVW5pZm9ybTJmKGUsci51X2V4dHJ1ZGVfc2NhbGUpLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpfX0sY29sbGlzaW9uQm94OmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXhlbHNfdG9fdGlsZV91bml0czpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMpLHVfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9vdmVyc2NhbGVfZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9vdmVyc2NhbGVfZmFjdG9yKX19LGNvbGxpc2lvbkNpcmNsZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ludl9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2ludl9tYXRyaXgpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV92aWV3cG9ydF9zaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV92aWV3cG9ydF9zaXplKX19LGRlYnVnOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfY29sb3I6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2NvbG9yKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X292ZXJsYXk6bmV3IHQuVW5pZm9ybTFpKGUsci51X292ZXJsYXkpLHVfb3ZlcmxheV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3ZlcmxheV9zY2FsZSl9fSxjbGlwcGluZ01hc2s6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxoZWF0bWFwOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9pbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ludGVuc2l0eSksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxoZWF0bWFwVGV4dHVyZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3dvcmxkOm5ldyB0LlVuaWZvcm0yZihlLHIudV93b3JsZCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfY29sb3JfcmFtcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfY29sb3JfcmFtcCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KX19LGhpbGxzaGFkZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9sYXRyYW5nZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfbGF0cmFuZ2UpLHVfbGlnaHQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X2xpZ2h0KSx1X3NoYWRvdzpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfc2hhZG93KSx1X2hpZ2hsaWdodDpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfaGlnaGxpZ2h0KSx1X2FjY2VudDpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfYWNjZW50KX19LGhpbGxzaGFkZVByZXBhcmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfZGltZW5zaW9uOm5ldyB0LlVuaWZvcm0yZihlLHIudV9kaW1lbnNpb24pLHVfem9vbTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfem9vbSksdV9tYXh6b29tOm5ldyB0LlVuaWZvcm0xZihlLHIudV9tYXh6b29tKSx1X3VucGFjazpuZXcgdC5Vbmlmb3JtNGYoZSxyLnVfdW5wYWNrKX19LGxpbmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpfX0sbGluZUdyYWRpZW50OmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSl9fSxsaW5lUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxsaW5lU0RGOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X3BhdHRlcm5zY2FsZV9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuc2NhbGVfYSksdV9wYXR0ZXJuc2NhbGVfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybnNjYWxlX2IpLHVfc2RmZ2FtbWE6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NkZmdhbW1hKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhfeV9hOm5ldyB0LlVuaWZvcm0xZihlLHIudV90ZXhfeV9hKSx1X3RleF95X2I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3RleF95X2IpLHVfbWl4Om5ldyB0LlVuaWZvcm0xZihlLHIudV9taXgpfX0scmFzdGVyOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfdGxfcGFyZW50Om5ldyB0LlVuaWZvcm0yZihlLHIudV90bF9wYXJlbnQpLHVfc2NhbGVfcGFyZW50Om5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9wYXJlbnQpLHVfYnVmZmVyX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9idWZmZXJfc2NhbGUpLHVfZmFkZV90Om5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlX3QpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSksdV9pbWFnZTA6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlMCksdV9pbWFnZTE6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlMSksdV9icmlnaHRuZXNzX2xvdzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYnJpZ2h0bmVzc19sb3cpLHVfYnJpZ2h0bmVzc19oaWdoOm5ldyB0LlVuaWZvcm0xZihlLHIudV9icmlnaHRuZXNzX2hpZ2gpLHVfc2F0dXJhdGlvbl9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NhdHVyYXRpb25fZmFjdG9yKSx1X2NvbnRyYXN0X2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY29udHJhc3RfZmFjdG9yKSx1X3NwaW5fd2VpZ2h0czpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc3Bpbl93ZWlnaHRzKX19LHN5bWJvbEljb246ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfem9vbV9jb25zdGFudCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksdV9zaXplX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemVfdCksdV9zaXplOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplKSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl0Y2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpdGNoKSx1X3JvdGF0ZV9zeW1ib2w6bmV3IHQuVW5pZm9ybTFpKGUsci51X3JvdGF0ZV9zeW1ib2wpLHVfYXNwZWN0X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9hc3BlY3RfcmF0aW8pLHVfZmFkZV9jaGFuZ2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfY2hhbmdlKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xhYmVsX3BsYW5lX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbGFiZWxfcGxhbmVfbWF0cml4KSx1X2Nvb3JkX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfY29vcmRfbWF0cml4KSx1X2lzX3RleHQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3RleHQpLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfdGV4dHVyZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZSl9fSxzeW1ib2xTREY6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfem9vbV9jb25zdGFudCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksdV9zaXplX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemVfdCksdV9zaXplOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplKSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl0Y2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpdGNoKSx1X3JvdGF0ZV9zeW1ib2w6bmV3IHQuVW5pZm9ybTFpKGUsci51X3JvdGF0ZV9zeW1ib2wpLHVfYXNwZWN0X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9hc3BlY3RfcmF0aW8pLHVfZmFkZV9jaGFuZ2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfY2hhbmdlKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xhYmVsX3BsYW5lX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbGFiZWxfcGxhbmVfbWF0cml4KSx1X2Nvb3JkX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfY29vcmRfbWF0cml4KSx1X2lzX3RleHQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3RleHQpLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfdGV4dHVyZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZSksdV9nYW1tYV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZ2FtbWFfc2NhbGUpLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfaXNfaGFsbzpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfaGFsbyl9fSxzeW1ib2xUZXh0QW5kSWNvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXhzaXplX2ljb246bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemVfaWNvbiksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKSx1X3RleHR1cmVfaWNvbjpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZV9pY29uKSx1X2dhbW1hX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9nYW1tYV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9pc19oYWxvOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19oYWxvKX19LGJhY2tncm91bmQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2NvbG9yOm5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9jb2xvcil9fSxiYWNrZ3JvdW5kUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3BhdHRlcm5fdGxfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9hKSx1X3BhdHRlcm5fYnJfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9hKSx1X3BhdHRlcm5fdGxfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9iKSx1X3BhdHRlcm5fYnJfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9iKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfbWl4Om5ldyB0LlVuaWZvcm0xZihlLHIudV9taXgpLHVfcGF0dGVybl9zaXplX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fc2l6ZV9hKSx1X3BhdHRlcm5fc2l6ZV9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3NpemVfYiksdV9zY2FsZV9hOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9hKSx1X3NjYWxlX2I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX2IpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV90aWxlX3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGlsZV91bml0c190b19waXhlbHMpfX19O2Z1bmN0aW9uIEtyKGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD1lLmNvbnRleHQsYz1sLmdsLHU9ZS51c2VQcm9ncmFtKCJjb2xsaXNpb25Cb3giKSxmPVtdLGg9MCxwPTAsZD0wO2Q8aS5sZW5ndGg7ZCsrKXt2YXIgbT1pW2RdLGc9ci5nZXRUaWxlKG0pLHY9Zy5nZXRCdWNrZXQobik7aWYodil7dmFyIHk9bS5wb3NNYXRyaXg7MD09PWFbMF0mJjA9PT1hWzFdfHwoeT1lLnRyYW5zbGF0ZVBvc01hdHJpeChtLnBvc01hdHJpeCxnLGEsbykpO3ZhciB4PXM/di50ZXh0Q29sbGlzaW9uQm94OnYuaWNvbkNvbGxpc2lvbkJveCxiPXYuY29sbGlzaW9uQ2lyY2xlQXJyYXk7aWYoYi5sZW5ndGg+MCl7dmFyIF89dC5jcmVhdGUoKSx3PXk7dC5tdWwoXyx2LnBsYWNlbWVudEludlByb2pNYXRyaXgsZS50cmFuc2Zvcm0uZ2xDb29yZE1hdHJpeCksdC5tdWwoXyxfLHYucGxhY2VtZW50Vmlld3BvcnRNYXRyaXgpLGYucHVzaCh7Y2lyY2xlQXJyYXk6YixjaXJjbGVPZmZzZXQ6cCx0cmFuc2Zvcm06dyxpbnZUcmFuc2Zvcm06X30pLHA9aCs9Yi5sZW5ndGgvNH14JiZ1LmRyYXcobCxjLkxJTkVTLEF0LmRpc2FibGVkLE10LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLENyKHksZS50cmFuc2Zvcm0sZyksbi5pZCx4LmxheW91dFZlcnRleEJ1ZmZlcix4LmluZGV4QnVmZmVyLHguc2VnbWVudHMsbnVsbCxlLnRyYW5zZm9ybS56b29tLG51bGwsbnVsbCx4LmNvbGxpc2lvblZlcnRleEJ1ZmZlcil9fWlmKHMmJmYubGVuZ3RoKXt2YXIgVD1lLnVzZVByb2dyYW0oImNvbGxpc2lvbkNpcmNsZSIpLGs9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNjtrLnJlc2l6ZSg0KmgpLGsuX3RyaW0oKTtmb3IodmFyIEE9MCxNPTAsUz1mO008Uy5sZW5ndGg7TSs9MSlmb3IodmFyIEU9U1tNXSxMPTA7TDxFLmNpcmNsZUFycmF5Lmxlbmd0aC80O0wrKyl7dmFyIEM9NCpMLFA9RS5jaXJjbGVBcnJheVtDKzBdLEk9RS5jaXJjbGVBcnJheVtDKzFdLE89RS5jaXJjbGVBcnJheVtDKzJdLHo9RS5jaXJjbGVBcnJheVtDKzNdO2suZW1wbGFjZShBKyssUCxJLE8seiwwKSxrLmVtcGxhY2UoQSsrLFAsSSxPLHosMSksay5lbXBsYWNlKEErKyxQLEksTyx6LDIpLGsuZW1wbGFjZShBKyssUCxJLE8seiwzKX0oIXFyfHxxci5sZW5ndGg8MipoKSYmKHFyPWZ1bmN0aW9uKGUpe3ZhciByPTIqZSxuPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0M3VpNjtuLnJlc2l6ZShyKSxuLl90cmltKCk7Zm9yKHZhciBpPTA7aTxyO2krKyl7dmFyIGE9NippO24udWludDE2W2ErMF09NCppKzAsbi51aW50MTZbYSsxXT00KmkrMSxuLnVpbnQxNlthKzJdPTQqaSsyLG4udWludDE2W2ErM109NCppKzIsbi51aW50MTZbYSs0XT00KmkrMyxuLnVpbnQxNlthKzVdPTQqaSswfXJldHVybiBufShoKSk7Zm9yKHZhciBEPWwuY3JlYXRlSW5kZXhCdWZmZXIocXIsITApLFI9bC5jcmVhdGVWZXJ0ZXhCdWZmZXIoayx0LmNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCEwKSxGPTAsQj1mO0Y8Qi5sZW5ndGg7Ris9MSl7dmFyIE49QltGXSxqPVByKE4udHJhbnNmb3JtLE4uaW52VHJhbnNmb3JtLGUudHJhbnNmb3JtKTtULmRyYXcobCxjLlRSSUFOR0xFUyxBdC5kaXNhYmxlZCxNdC5kaXNhYmxlZCxlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxFdC5kaXNhYmxlZCxqLG4uaWQsUixELHQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMipOLmNpcmNsZU9mZnNldCxOLmNpcmNsZUFycmF5Lmxlbmd0aCxOLmNpcmNsZUFycmF5Lmxlbmd0aC8yKSxudWxsLGUudHJhbnNmb3JtLnpvb20sbnVsbCxudWxsLG51bGwpfVIuZGVzdHJveSgpLEQuZGVzdHJveSgpfX12YXIgUXI9dC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7ZnVuY3Rpb24gJHIoZSxyLG4saSxhLG8pe3ZhciBzPXQuZ2V0QW5jaG9yQWxpZ25tZW50KGUpLGw9LShzLmhvcml6b250YWxBbGlnbi0uNSkqcixjPS0ocy52ZXJ0aWNhbEFsaWduLS41KSpuLHU9dC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGUsaSk7cmV0dXJuIG5ldyB0LlBvaW50KChsL2ErdVswXSkqbywoYy9hK3VbMV0pKm8pfWZ1bmN0aW9uIHRuKGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LHA9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxkPWUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksbT17fTtwLmNsZWFyKCk7Zm9yKHZhciBnPTA7ZzxoLmxlbmd0aDtnKyspe3ZhciB2PWguZ2V0KGcpLHk9ZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhdi5wbGFjZWRPcmllbnRhdGlvbix4PXYuaGlkZGVufHwhdi5jcm9zc1RpbGVJRHx8eT9udWxsOmlbdi5jcm9zc1RpbGVJRF07aWYoeCl7dmFyIGI9bmV3IHQuUG9pbnQodi5hbmNob3JYLHYuYW5jaG9yWSksXz10ZShiLG4/bDpzKSx3PWVlKG8uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxfLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSksVD1hLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoZS50ZXh0U2l6ZURhdGEsdSx2KSp3L3QuT05FX0VNO24mJihUKj1lLnRpbGVQaXhlbFJhdGlvL2MpO2Zvcih2YXIgaz14LndpZHRoLEE9eC5oZWlnaHQsTT0kcih4LmFuY2hvcixrLEEseC50ZXh0T2Zmc2V0LHgudGV4dEJveFNjYWxlLFQpLFM9bj90ZShiLmFkZChNKSxzKS5wb2ludDpfLnBvaW50LmFkZChyP00ucm90YXRlKC1vLmFuZ2xlKTpNKSxFPWUuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmdi5wbGFjZWRPcmllbnRhdGlvbj09PXQuV3JpdGluZ01vZGUudmVydGljYWw/TWF0aC5QSS8yOjAsTD0wO0w8di5udW1HbHlwaHM7TCsrKXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMocCxTLEUpO2YmJnYuYXNzb2NpYXRlZEljb25JbmRleD49MCYmKG1bdi5hc3NvY2lhdGVkSWNvbkluZGV4XT17c2hpZnRlZEFuY2hvcjpTLGFuZ2xlOkV9KX1lbHNlIHVlKHYubnVtR2x5cGhzLHApfWlmKGYpe2QuY2xlYXIoKTtmb3IodmFyIEM9ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LFA9MDtQPEMubGVuZ3RoO1ArKyl7dmFyIEk9Qy5nZXQoUCk7aWYoSS5oaWRkZW4pdWUoSS5udW1HbHlwaHMsZCk7ZWxzZXt2YXIgTz1tW1BdO2lmKE8pZm9yKHZhciB6PTA7ejxJLm51bUdseXBoczt6KyspdC5hZGREeW5hbWljQXR0cmlidXRlcyhkLE8uc2hpZnRlZEFuY2hvcixPLmFuZ2xlKTtlbHNlIHVlKEkubnVtR2x5cGhzLGQpfX1lLmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGQpfWUudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEocCl9ZnVuY3Rpb24gZW4odCxlLHIpe3JldHVybiByLmljb25zSW5UZXh0JiZlPyJzeW1ib2xUZXh0QW5kSWNvbiI6dD8ic3ltYm9sU0RGIjoic3ltYm9sSWNvbiJ9ZnVuY3Rpb24gcm4oZSxyLG4saSxhLG8scyxsLGMsdSxmLGgpe2Zvcih2YXIgcD1lLmNvbnRleHQsZD1wLmdsLG09ZS50cmFuc2Zvcm0sZz0ibWFwIj09PWwsdj0ibWFwIj09PWMseT1nJiYicG9pbnQiIT09bi5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikseD1nJiYhdiYmIXksYj12b2lkIDAhPT1uLmxheW91dC5nZXQoInN5bWJvbC1zb3J0LWtleSIpLmNvbnN0YW50T3IoMSksXz1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsQXQuUmVhZE9ubHkpLHc9bi5sYXlvdXQuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpLFQ9W10saz0wLEE9aTtrPEEubGVuZ3RoO2srPTEpe3ZhciBNPUFba10sUz1yLmdldFRpbGUoTSksRT1TLmdldEJ1Y2tldChuKTtpZihFKXt2YXIgTD1hP0UudGV4dDpFLmljb247aWYoTCYmTC5zZWdtZW50cy5nZXQoKS5sZW5ndGgpe3ZhciBDPUwucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxQPWF8fEUuc2RmSWNvbnMsST1hP0UudGV4dFNpemVEYXRhOkUuaWNvblNpemVEYXRhLE89dnx8MCE9PW0ucGl0Y2gsej1lLnVzZVByb2dyYW0oZW4oUCxhLEUpLEMpLEQ9dC5ldmFsdWF0ZVNpemVGb3Jab29tKEksbS56b29tKSxSPXZvaWQgMCxGPVswLDBdLEI9dm9pZCAwLE49dm9pZCAwLGo9bnVsbCxVPXZvaWQgMDtpZihhKXtpZihCPVMuZ2x5cGhBdGxhc1RleHR1cmUsTj1kLkxJTkVBUixSPVMuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZSxFLmljb25zSW5UZXh0KXtGPVMuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSxqPVMuaW1hZ2VBdGxhc1RleHR1cmU7dmFyIFY9ImNvbXBvc2l0ZSI9PT1JLmtpbmR8fCJjYW1lcmEiPT09SS5raW5kO1U9T3x8ZS5vcHRpb25zLnJvdGF0aW5nfHxlLm9wdGlvbnMuem9vbWluZ3x8Vj9kLkxJTkVBUjpkLk5FQVJFU1R9fWVsc2V7dmFyIEg9MSE9PW4ubGF5b3V0LmdldCgiaWNvbi1zaXplIikuY29uc3RhbnRPcigwKXx8RS5pY29uc05lZWRMaW5lYXI7Qj1TLmltYWdlQXRsYXNUZXh0dXJlLE49UHx8ZS5vcHRpb25zLnJvdGF0aW5nfHxlLm9wdGlvbnMuem9vbWluZ3x8SHx8Tz9kLkxJTkVBUjpkLk5FQVJFU1QsUj1TLmltYWdlQXRsYXNUZXh0dXJlLnNpemV9dmFyIHE9cGUoUywxLGUudHJhbnNmb3JtLnpvb20pLEc9UXQoTS5wb3NNYXRyaXgsdixnLGUudHJhbnNmb3JtLHEpLFk9JHQoTS5wb3NNYXRyaXgsdixnLGUudHJhbnNmb3JtLHEpLFc9dyYmRS5oYXNUZXh0RGF0YSgpLFg9Im5vbmUiIT09bi5sYXlvdXQuZ2V0KCJpY29uLXRleHQtZml0IikmJlcmJkUuaGFzSWNvbkRhdGEoKTt5JiZuZShFLE0ucG9zTWF0cml4LGUsYSxHLFksdix1KTt2YXIgWj1lLnRyYW5zbGF0ZVBvc01hdHJpeChNLnBvc01hdHJpeCxTLG8scyksSj15fHxhJiZ3fHxYP1FyOkcsSz1lLnRyYW5zbGF0ZVBvc01hdHJpeChZLFMsbyxzLCEwKSxRPVAmJjAhPT1uLnBhaW50LmdldChhPyJ0ZXh0LWhhbG8td2lkdGgiOiJpY29uLWhhbG8td2lkdGgiKS5jb25zdGFudE9yKDEpLCQ9e3Byb2dyYW06eixidWZmZXJzOkwsdW5pZm9ybVZhbHVlczpQP0UuaWNvbnNJblRleHQ/V3IoSS5raW5kLEQseCx2LGUsWixKLEssUixGKTpZcihJLmtpbmQsRCx4LHYsZSxaLEosSyxhLFIsITApOkdyKEkua2luZCxELHgsdixlLFosSixLLGEsUiksYXRsYXNUZXh0dXJlOkIsYXRsYXNUZXh0dXJlSWNvbjpqLGF0bGFzSW50ZXJwb2xhdGlvbjpOLGF0bGFzSW50ZXJwb2xhdGlvbkljb246VSxpc1NERjpQLGhhc0hhbG86UX07aWYoYilmb3IodmFyIHR0PTAsZXQ9TC5zZWdtZW50cy5nZXQoKTt0dDxldC5sZW5ndGg7dHQrPTEpe3ZhciBydD1ldFt0dF07VC5wdXNoKHtzZWdtZW50czpuZXcgdC5TZWdtZW50VmVjdG9yKFtydF0pLHNvcnRLZXk6cnQuc29ydEtleSxzdGF0ZTokfSl9ZWxzZSBULnB1c2goe3NlZ21lbnRzOkwuc2VnbWVudHMsc29ydEtleTowLHN0YXRlOiR9KX19fWImJlQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIG50PTAsaXQ9VDtudDxpdC5sZW5ndGg7bnQrPTEpe3ZhciBhdD1pdFtudF0sb3Q9YXQuc3RhdGU7aWYocC5hY3RpdmVUZXh0dXJlLnNldChkLlRFWFRVUkUwKSxvdC5hdGxhc1RleHR1cmUuYmluZChvdC5hdGxhc0ludGVycG9sYXRpb24sZC5DTEFNUF9UT19FREdFKSxvdC5hdGxhc1RleHR1cmVJY29uJiYocC5hY3RpdmVUZXh0dXJlLnNldChkLlRFWFRVUkUxKSxvdC5hdGxhc1RleHR1cmVJY29uJiZvdC5hdGxhc1RleHR1cmVJY29uLmJpbmQob3QuYXRsYXNJbnRlcnBvbGF0aW9uSWNvbixkLkNMQU1QX1RPX0VER0UpKSxvdC5pc1NERil7dmFyIHN0PW90LnVuaWZvcm1WYWx1ZXM7b3QuaGFzSGFsbyYmKHN0LnVfaXNfaGFsbz0xLG5uKG90LmJ1ZmZlcnMsYXQuc2VnbWVudHMsbixlLG90LnByb2dyYW0sXyxmLGgsc3QpKSxzdC51X2lzX2hhbG89MH1ubihvdC5idWZmZXJzLGF0LnNlZ21lbnRzLG4sZSxvdC5wcm9ncmFtLF8sZixoLG90LnVuaWZvcm1WYWx1ZXMpfX1mdW5jdGlvbiBubih0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9bi5jb250ZXh0LHU9Yy5nbDtpLmRyYXcoYyx1LlRSSUFOR0xFUyxhLG8scyxFdC5kaXNhYmxlZCxsLHIuaWQsdC5sYXlvdXRWZXJ0ZXhCdWZmZXIsdC5pbmRleEJ1ZmZlcixlLHIucGFpbnQsbi50cmFuc2Zvcm0uem9vbSx0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksdC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLHQub3BhY2l0eVZlcnRleEJ1ZmZlcil9ZnVuY3Rpb24gYW4odCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsZixoPXQuY29udGV4dC5nbCxwPXIucGFpbnQuZ2V0KCJmaWxsLXBhdHRlcm4iKSxkPXAmJnAuY29uc3RhbnRPcigxKSxtPXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpO28/KGw9ZCYmIXIuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/ImZpbGxPdXRsaW5lUGF0dGVybiI6ImZpbGxPdXRsaW5lIixzPWguTElORVMpOihsPWQ/ImZpbGxQYXR0ZXJuIjoiZmlsbCIscz1oLlRSSUFOR0xFUyk7Zm9yKHZhciBnPTAsdj1uO2c8di5sZW5ndGg7Zys9MSl7dmFyIHk9dltnXSx4PWUuZ2V0VGlsZSh5KTtpZighZHx8eC5wYXR0ZXJuc0xvYWRlZCgpKXt2YXIgYj14LmdldEJ1Y2tldChyKTtpZihiKXt2YXIgXz1iLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksdz10LnVzZVByb2dyYW0obCxfKTtkJiYodC5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGguVEVYVFVSRTApLHguaW1hZ2VBdGxhc1RleHR1cmUuYmluZChoLkxJTkVBUixoLkNMQU1QX1RPX0VER0UpLF8udXBkYXRlUGFpbnRCdWZmZXJzKG0pKTt2YXIgVD1wLmNvbnN0YW50T3IobnVsbCk7aWYoVCYmeC5pbWFnZUF0bGFzKXt2YXIgaz14LmltYWdlQXRsYXMsQT1rLnBhdHRlcm5Qb3NpdGlvbnNbVC50by50b1N0cmluZygpXSxNPWsucGF0dGVyblBvc2l0aW9uc1tULmZyb20udG9TdHJpbmcoKV07QSYmTSYmXy5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMoQSxNKX12YXIgUz10LnRyYW5zbGF0ZVBvc01hdHJpeCh5LnBvc01hdHJpeCx4LHIucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSk7aWYobyl7dT1iLmluZGV4QnVmZmVyMixmPWIuc2VnbWVudHMyO3ZhciBFPVtoLmRyYXdpbmdCdWZmZXJXaWR0aCxoLmRyYXdpbmdCdWZmZXJIZWlnaHRdO2M9ImZpbGxPdXRsaW5lUGF0dGVybiI9PT1sJiZkP0VyKFMsdCxtLHgsRSk6U3IoUyxFKX1lbHNlIHU9Yi5pbmRleEJ1ZmZlcixmPWIuc2VnbWVudHMsYz1kP01yKFMsdCxtLHgpOkFyKFMpO3cuZHJhdyh0LmNvbnRleHQscyxpLHQuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyh5KSxhLEV0LmRpc2FibGVkLGMsci5pZCxiLmxheW91dFZlcnRleEJ1ZmZlcix1LGYsci5wYWludCx0LnRyYW5zZm9ybS56b29tLF8pfX19fWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10LmNvbnRleHQsbD1zLmdsLGM9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iKSx1PWMuY29uc3RhbnRPcigxKSxmPXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpLGg9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKSxwPTAsZD1uO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIG09ZFtwXSxnPWUuZ2V0VGlsZShtKSx2PWcuZ2V0QnVja2V0KHIpO2lmKHYpe3ZhciB5PXYucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx4PXQudXNlUHJvZ3JhbSh1PyJmaWxsRXh0cnVzaW9uUGF0dGVybiI6ImZpbGxFeHRydXNpb24iLHkpO3UmJih0LmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQobC5URVhUVVJFMCksZy5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGwuTElORUFSLGwuQ0xBTVBfVE9fRURHRSkseS51cGRhdGVQYWludEJ1ZmZlcnMoZikpO3ZhciBiPWMuY29uc3RhbnRPcihudWxsKTtpZihiJiZnLmltYWdlQXRsYXMpe3ZhciBfPWcuaW1hZ2VBdGxhcyx3PV8ucGF0dGVyblBvc2l0aW9uc1tiLnRvLnRvU3RyaW5nKCldLFQ9Xy5wYXR0ZXJuUG9zaXRpb25zW2IuZnJvbS50b1N0cmluZygpXTt3JiZUJiZ5LnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyh3LFQpfXZhciBrPXQudHJhbnNsYXRlUG9zTWF0cml4KG0ucG9zTWF0cml4LGcsci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIikpLEE9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50IiksTT11P2tyKGssdCxBLGgsbSxmLGcpOlRyKGssdCxBLGgpO3guZHJhdyhzLHMuZ2wuVFJJQU5HTEVTLGksYSxvLEV0LmJhY2tDQ1csTSxyLmlkLHYubGF5b3V0VmVydGV4QnVmZmVyLHYuaW5kZXhCdWZmZXIsdi5zZWdtZW50cyxyLnBhaW50LHQudHJhbnNmb3JtLnpvb20seSl9fX1mdW5jdGlvbiBzbih0LGUscixuLGksYSl7dmFyIG89dC5jb250ZXh0LHM9by5nbCxsPWUuZmJvO2lmKGwpe3ZhciBjPXQudXNlUHJvZ3JhbSgiaGlsbHNoYWRlIik7by5hY3RpdmVUZXh0dXJlLnNldChzLlRFWFRVUkUwKSxzLmJpbmRUZXh0dXJlKHMuVEVYVFVSRV8yRCxsLmNvbG9yQXR0YWNobWVudC5nZXQoKSk7dmFyIHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIiksaT1yLnBhaW50LmdldCgiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciIpLGE9ci5wYWludC5nZXQoImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiKSxvPXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiIpKihNYXRoLlBJLzE4MCk7InZpZXdwb3J0Ij09PXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciIpJiYoby09dC50cmFuc2Zvcm0uYW5nbGUpO3ZhciBzPSF0Lm9wdGlvbnMubW92aW5nO3JldHVybnt1X21hdHJpeDp0LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoZS50aWxlSUQudG9VbndyYXBwZWQoKSxzKSx1X2ltYWdlOjAsdV9sYXRyYW5nZTpEcih0LGUudGlsZUlEKSx1X2xpZ2h0OltyLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpLG9dLHVfc2hhZG93Om4sdV9oaWdobGlnaHQ6aSx1X2FjY2VudDphfX0odCxlLHIpO2MuZHJhdyhvLHMuVFJJQU5HTEVTLG4saSxhLEV0LmRpc2FibGVkLHUsci5pZCx0LnJhc3RlckJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHQucmFzdGVyQm91bmRzU2VnbWVudHMpfX1mdW5jdGlvbiBsbihlLHIsbixpLGEsbyxzKXt2YXIgbD1lLmNvbnRleHQsYz1sLmdsLHU9ci5kZW07aWYodSYmdS5kYXRhKXt2YXIgZj11LmRpbSxoPXUuc3RyaWRlLHA9dS5nZXRQaXhlbHMoKTtpZihsLmFjdGl2ZVRleHR1cmUuc2V0KGMuVEVYVFVSRTEpLGwucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCExKSxyLmRlbVRleHR1cmU9ci5kZW1UZXh0dXJlfHxlLmdldFRpbGVUZXh0dXJlKGgpLHIuZGVtVGV4dHVyZSl7dmFyIGQ9ci5kZW1UZXh0dXJlO2QudXBkYXRlKHAse3ByZW11bHRpcGx5OiExfSksZC5iaW5kKGMuTkVBUkVTVCxjLkNMQU1QX1RPX0VER0UpfWVsc2Ugci5kZW1UZXh0dXJlPW5ldyB0LlRleHR1cmUobCxwLGMuUkdCQSx7cHJlbXVsdGlwbHk6ITF9KSxyLmRlbVRleHR1cmUuYmluZChjLk5FQVJFU1QsYy5DTEFNUF9UT19FREdFKTtsLmFjdGl2ZVRleHR1cmUuc2V0KGMuVEVYVFVSRTApO3ZhciBtPXIuZmJvO2lmKCFtKXt2YXIgZz1uZXcgdC5UZXh0dXJlKGwse3dpZHRoOmYsaGVpZ2h0OmYsZGF0YTpudWxsfSxjLlJHQkEpO2cuYmluZChjLkxJTkVBUixjLkNMQU1QX1RPX0VER0UpLChtPXIuZmJvPWwuY3JlYXRlRnJhbWVidWZmZXIoZixmLCEwKSkuY29sb3JBdHRhY2htZW50LnNldChnLnRleHR1cmUpfWwuYmluZEZyYW1lYnVmZmVyLnNldChtLmZyYW1lYnVmZmVyKSxsLnZpZXdwb3J0LnNldChbMCwwLGYsZl0pLGUudXNlUHJvZ3JhbSgiaGlsbHNoYWRlUHJlcGFyZSIpLmRyYXcobCxjLlRSSUFOR0xFUyxhLG8scyxFdC5kaXNhYmxlZCxmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5zdHJpZGUsYT10LmNyZWF0ZSgpO3JldHVybiB0Lm9ydGhvKGEsMCx0LkVYVEVOVCwtdC5FWFRFTlQsMCwwLDEpLHQudHJhbnNsYXRlKGEsYSxbMCwtdC5FWFRFTlQsMF0pLHt1X21hdHJpeDphLHVfaW1hZ2U6MSx1X2RpbWVuc2lvbjpbaSxpXSx1X3pvb206ZS5vdmVyc2NhbGVkWix1X21heHpvb206bix1X3VucGFjazpyLmdldFVucGFja1ZlY3RvcigpfX0oci50aWxlSUQsdSxpKSxuLmlkLGUucmFzdGVyQm91bmRzQnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS5yYXN0ZXJCb3VuZHNTZWdtZW50cyksci5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITF9fWZ1bmN0aW9uIGNuKGUscixuLGksYSl7dmFyIG89aS5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIik7aWYobz4wKXt2YXIgcz10LmJyb3dzZXIubm93KCksbD0ocy1lLnRpbWVBZGRlZCkvbyxjPXI/KHMtci50aW1lQWRkZWQpL286LTEsdT1uLmdldFNvdXJjZSgpLGY9YS5jb3ZlcmluZ1pvb21MZXZlbCh7dGlsZVNpemU6dS50aWxlU2l6ZSxyb3VuZFpvb206dS5yb3VuZFpvb219KSxoPSFyfHxNYXRoLmFicyhyLnRpbGVJRC5vdmVyc2NhbGVkWi1mKT5NYXRoLmFicyhlLnRpbGVJRC5vdmVyc2NhbGVkWi1mKSxwPWgmJmUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24/MTp0LmNsYW1wKGg/bDoxLWMsMCwxKTtyZXR1cm4gZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbiYmbD49MSYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITEpLHI/e29wYWNpdHk6MSxtaXg6MS1wfTp7b3BhY2l0eTpwLG1peDowfX1yZXR1cm57b3BhY2l0eToxLG1peDowfX12YXIgdW49bmV3IHQuQ29sb3IoMSwwLDAsMSksZm49bmV3IHQuQ29sb3IoMCwxLDAsMSksaG49bmV3IHQuQ29sb3IoMCwwLDEsMSkscG49bmV3IHQuQ29sb3IoMSwwLDEsMSksZG49bmV3IHQuQ29sb3IoMCwxLDEsMSk7ZnVuY3Rpb24gbW4odCl7dmFyIGU9dC50cmFuc2Zvcm0ucGFkZGluZztnbih0LHQudHJhbnNmb3JtLmhlaWdodC0oZS50b3B8fDApLDMsdW4pLGduKHQsZS5ib3R0b218fDAsMyxmbiksdm4odCxlLmxlZnR8fDAsMyxobiksdm4odCx0LnRyYW5zZm9ybS53aWR0aC0oZS5yaWdodHx8MCksMyxwbik7dmFyIHI9dC50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7IWZ1bmN0aW9uKHQsZSxyLG4pe3luKHQsZS0xLHItMTAsMiwyMCxuKSx5bih0LGUtMTAsci0xLDIwLDIsbil9KHQsci54LHQudHJhbnNmb3JtLmhlaWdodC1yLnksZG4pfWZ1bmN0aW9uIGduKHQsZSxyLG4pe3luKHQsMCxlK3IvMix0LnRyYW5zZm9ybS53aWR0aCxyLG4pfWZ1bmN0aW9uIHZuKHQsZSxyLG4pe3luKHQsZS1yLzIsMCxyLHQudHJhbnNmb3JtLmhlaWdodCxuKX1mdW5jdGlvbiB5bihlLHIsbixpLGEsbyl7dmFyIHM9ZS5jb250ZXh0LGw9cy5nbDtsLmVuYWJsZShsLlNDSVNTT1JfVEVTVCksbC5zY2lzc29yKHIqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sbip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxpKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLGEqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8pLHMuY2xlYXIoe2NvbG9yOm99KSxsLmRpc2FibGUobC5TQ0lTU09SX1RFU1QpfWZ1bmN0aW9uIHhuKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsLG89bi5wb3NNYXRyaXgscz1lLnVzZVByb2dyYW0oImRlYnVnIiksbD1BdC5kaXNhYmxlZCxjPU10LmRpc2FibGVkLHU9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7aS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUwKSxlLmVtcHR5VGV4dHVyZS5iaW5kKGEuTElORUFSLGEuQ0xBTVBfVE9fRURHRSkscy5kcmF3KGksYS5MSU5FX1NUUklQLGwsYyx1LEV0LmRpc2FibGVkLElyKG8sdC5Db2xvci5yZWQpLCIkZGVidWciLGUuZGVidWdCdWZmZXIsZS50aWxlQm9yZGVySW5kZXhCdWZmZXIsZS5kZWJ1Z1NlZ21lbnRzKTt2YXIgZj1yLmdldFRpbGVCeUlEKG4ua2V5KS5sYXRlc3RSYXdUaWxlRGF0YSxoPWYmJmYuYnl0ZUxlbmd0aHx8MCxwPU1hdGguZmxvb3IoaC8xMDI0KSxkPXIuZ2V0VGlsZShuKS50aWxlU2l6ZSxtPTUxMi9NYXRoLm1pbihkLDUxMikqKG4ub3ZlcnNjYWxlZFovZS50cmFuc2Zvcm0uem9vbSkqLjUsZz1uLmNhbm9uaWNhbC50b1N0cmluZygpO24ub3ZlcnNjYWxlZFohPT1uLmNhbm9uaWNhbC56JiYoZys9IiA9PiAiK24ub3ZlcnNjYWxlZFopLGZ1bmN0aW9uKHQsZSl7dC5pbml0RGVidWdPdmVybGF5Q2FudmFzKCk7dmFyIHI9dC5kZWJ1Z092ZXJsYXlDYW52YXMsbj10LmNvbnRleHQuZ2wsaT10LmRlYnVnT3ZlcmxheUNhbnZhcy5nZXRDb250ZXh0KCIyZCIpO2kuY2xlYXJSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxpLnNoYWRvd0NvbG9yPSJ3aGl0ZSIsaS5zaGFkb3dCbHVyPTIsaS5saW5lV2lkdGg9MS41LGkuc3Ryb2tlU3R5bGU9IndoaXRlIixpLnRleHRCYXNlbGluZT0idG9wIixpLmZvbnQ9ImJvbGQgMzZweCBPcGVuIFNhbnMsIHNhbnMtc2VyaWYiLGkuZmlsbFRleHQoZSw1LDUpLGkuc3Ryb2tlVGV4dChlLDUsNSksdC5kZWJ1Z092ZXJsYXlUZXh0dXJlLnVwZGF0ZShyKSx0LmRlYnVnT3ZlcmxheVRleHR1cmUuYmluZChuLkxJTkVBUixuLkNMQU1QX1RPX0VER0UpfShlLGcrIiAiK3ArImtiIikscy5kcmF3KGksYS5UUklBTkdMRVMsbCxjLFN0LmFscGhhQmxlbmRlZCxFdC5kaXNhYmxlZCxJcihvLHQuQ29sb3IudHJhbnNwYXJlbnQsbSksIiRkZWJ1ZyIsZS5kZWJ1Z0J1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUuZGVidWdTZWdtZW50cyl9dmFyIGJuPXtzeW1ib2w6ZnVuY3Rpb24oZSxyLG4saSxhKXtpZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzKXt2YXIgbz1NdC5kaXNhYmxlZCxzPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO24ubGF5b3V0LmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSYmZnVuY3Rpb24oZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXIudHJhbnNmb3JtLGM9Im1hcCI9PT1hLHU9Im1hcCI9PT1vLGY9MCxoPWU7ZjxoLmxlbmd0aDtmKz0xKXt2YXIgcD1oW2ZdLGQ9aS5nZXRUaWxlKHApLG09ZC5nZXRCdWNrZXQobik7aWYobSYmbS50ZXh0JiZtLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKXt2YXIgZz1tLnRleHRTaXplRGF0YSx2PXQuZXZhbHVhdGVTaXplRm9yWm9vbShnLGwuem9vbSkseT1wZShkLDEsci50cmFuc2Zvcm0uem9vbSkseD1RdChwLnBvc01hdHJpeCx1LGMsci50cmFuc2Zvcm0seSksYj0ibm9uZSIhPT1uLmxheW91dC5nZXQoImljb24tdGV4dC1maXQiKSYmbS5oYXNJY29uRGF0YSgpO2lmKHYpe3ZhciBfPU1hdGgucG93KDIsbC56b29tLWQudGlsZUlELm92ZXJzY2FsZWRaKTt0bihtLGMsdSxzLHQuc3ltYm9sU2l6ZSxsLHgscC5wb3NNYXRyaXgsXyx2LGIpfX19fShpLGUsbixyLG4ubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IiksYSksMCE9PW4ucGFpbnQuZ2V0KCJpY29uLW9wYWNpdHkiKS5jb25zdGFudE9yKDEpJiZybihlLHIsbixpLCExLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiKSxuLmxheW91dC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJpY29uLXBpdGNoLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgiaWNvbi1rZWVwLXVwcmlnaHQiKSxvLHMpLDAhPT1uLnBhaW50LmdldCgidGV4dC1vcGFjaXR5IikuY29uc3RhbnRPcigxKSYmcm4oZSxyLG4saSwhMCxuLnBhaW50LmdldCgidGV4dC10cmFuc2xhdGUiKSxuLnBhaW50LmdldCgidGV4dC10cmFuc2xhdGUtYW5jaG9yIiksbi5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoInRleHQta2VlcC11cHJpZ2h0IiksbyxzKSxyLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMmJihLcihlLHIsbixpLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiKSwhMCksS3IoZSxyLG4saSxuLnBhaW50LmdldCgiaWNvbi10cmFuc2xhdGUiKSxuLnBhaW50LmdldCgiaWNvbi10cmFuc2xhdGUtYW5jaG9yIiksITEpKX19LGNpcmNsZTpmdW5jdGlvbihlLHIsbixpKXtpZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzKXt2YXIgYT1uLnBhaW50LmdldCgiY2lyY2xlLW9wYWNpdHkiKSxvPW4ucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLXdpZHRoIikscz1uLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS1vcGFjaXR5IiksbD12b2lkIDAhPT1uLmxheW91dC5nZXQoImNpcmNsZS1zb3J0LWtleSIpLmNvbnN0YW50T3IoMSk7aWYoMCE9PWEuY29uc3RhbnRPcigxKXx8MCE9PW8uY29uc3RhbnRPcigxKSYmMCE9PXMuY29uc3RhbnRPcigxKSl7Zm9yKHZhciBjPWUuY29udGV4dCx1PWMuZ2wsZj1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsQXQuUmVhZE9ubHkpLGg9TXQuZGlzYWJsZWQscD1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxkPVtdLG09MDttPGkubGVuZ3RoO20rKyl7dmFyIGc9aVttXSx2PXIuZ2V0VGlsZShnKSx5PXYuZ2V0QnVja2V0KG4pO2lmKHkpe3ZhciB4PXkucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxiPXtwcm9ncmFtQ29uZmlndXJhdGlvbjp4LHByb2dyYW06ZS51c2VQcm9ncmFtKCJjaXJjbGUiLHgpLGxheW91dFZlcnRleEJ1ZmZlcjp5LmxheW91dFZlcnRleEJ1ZmZlcixpbmRleEJ1ZmZlcjp5LmluZGV4QnVmZmVyLHVuaWZvcm1WYWx1ZXM6THIoZSxnLHYsbil9O2lmKGwpZm9yKHZhciBfPTAsdz15LnNlZ21lbnRzLmdldCgpO188dy5sZW5ndGg7Xys9MSl7dmFyIFQ9d1tfXTtkLnB1c2goe3NlZ21lbnRzOm5ldyB0LlNlZ21lbnRWZWN0b3IoW1RdKSxzb3J0S2V5OlQuc29ydEtleSxzdGF0ZTpifSl9ZWxzZSBkLnB1c2goe3NlZ21lbnRzOnkuc2VnbWVudHMsc29ydEtleTowLHN0YXRlOmJ9KX19bCYmZC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgaz0wLEE9ZDtrPEEubGVuZ3RoO2srPTEpe3ZhciBNPUFba10sUz1NLnN0YXRlLEU9Uy5wcm9ncmFtQ29uZmlndXJhdGlvbixMPVMucHJvZ3JhbSxDPVMubGF5b3V0VmVydGV4QnVmZmVyLFA9Uy5pbmRleEJ1ZmZlcixJPVMudW5pZm9ybVZhbHVlcyxPPU0uc2VnbWVudHM7TC5kcmF3KGMsdS5UUklBTkdMRVMsZixoLHAsRXQuZGlzYWJsZWQsSSxuLmlkLEMsUCxPLG4ucGFpbnQsZS50cmFuc2Zvcm0uem9vbSxFKX19fX0saGVhdG1hcDpmdW5jdGlvbihlLHIsbixpKXtpZigwIT09bi5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpKWlmKCJvZmZzY3JlZW4iPT09ZS5yZW5kZXJQYXNzKXt2YXIgYT1lLmNvbnRleHQsbz1hLmdsLHM9TXQuZGlzYWJsZWQsbD1uZXcgU3QoW28uT05FLG8uT05FXSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pOyFmdW5jdGlvbih0LGUscil7dmFyIG49dC5nbDt0LmFjdGl2ZVRleHR1cmUuc2V0KG4uVEVYVFVSRTEpLHQudmlld3BvcnQuc2V0KFswLDAsZS53aWR0aC80LGUuaGVpZ2h0LzRdKTt2YXIgaT1yLmhlYXRtYXBGYm87aWYoaSluLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxpLmNvbG9yQXR0YWNobWVudC5nZXQoKSksdC5iaW5kRnJhbWVidWZmZXIuc2V0KGkuZnJhbWVidWZmZXIpO2Vsc2V7dmFyIGE9bi5jcmVhdGVUZXh0dXJlKCk7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsYSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixuLkxJTkVBUiksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUixuLkxJTkVBUiksaT1yLmhlYXRtYXBGYm89dC5jcmVhdGVGcmFtZWJ1ZmZlcihlLndpZHRoLzQsZS5oZWlnaHQvNCwhMSksZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5nbCxhPXQuZXh0UmVuZGVyVG9UZXh0dXJlSGFsZkZsb2F0P3QuZXh0VGV4dHVyZUhhbGZGbG9hdC5IQUxGX0ZMT0FUX09FUzppLlVOU0lHTkVEX0JZVEU7aS50ZXhJbWFnZTJEKGkuVEVYVFVSRV8yRCwwLGkuUkdCQSxlLndpZHRoLzQsZS5oZWlnaHQvNCwwLGkuUkdCQSxhLG51bGwpLG4uY29sb3JBdHRhY2htZW50LnNldChyKX0odCxlLGEsaSl9fShhLGUsbiksYS5jbGVhcih7Y29sb3I6dC5Db2xvci50cmFuc3BhcmVudH0pO2Zvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdO2lmKCFyLmhhc1JlbmRlcmFibGVQYXJlbnQodSkpe3ZhciBmPXIuZ2V0VGlsZSh1KSxoPWYuZ2V0QnVja2V0KG4pO2lmKGgpe3ZhciBwPWgucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxkPWUudXNlUHJvZ3JhbSgiaGVhdG1hcCIscCksbT1lLnRyYW5zZm9ybS56b29tO2QuZHJhdyhhLG8uVFJJQU5HTEVTLEF0LmRpc2FibGVkLHMsbCxFdC5kaXNhYmxlZCx6cih1LnBvc01hdHJpeCxmLG0sbi5wYWludC5nZXQoImhlYXRtYXAtaW50ZW5zaXR5IikpLG4uaWQsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIsaC5pbmRleEJ1ZmZlcixoLnNlZ21lbnRzLG4ucGFpbnQsZS50cmFuc2Zvcm0uem9vbSxwKX19fWEudmlld3BvcnQuc2V0KFswLDAsZS53aWR0aCxlLmhlaWdodF0pfWVsc2UidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzJiYoZS5jb250ZXh0LnNldENvbG9yTW9kZShlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ci5oZWF0bWFwRmJvO2lmKCFhKXJldHVybjtuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELGEuY29sb3JBdHRhY2htZW50LmdldCgpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTEpO3ZhciBvPXIuY29sb3JSYW1wVGV4dHVyZTtvfHwobz1yLmNvbG9yUmFtcFRleHR1cmU9bmV3IHQuVGV4dHVyZShuLHIuY29sb3JSYW1wLGkuUkdCQSkpO28uYmluZChpLkxJTkVBUixpLkNMQU1QX1RPX0VER0UpLGUudXNlUHJvZ3JhbSgiaGVhdG1hcFRleHR1cmUiKS5kcmF3KG4saS5UUklBTkdMRVMsQXQuZGlzYWJsZWQsTXQuZGlzYWJsZWQsZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksRXQuZGlzYWJsZWQsZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5jcmVhdGUoKTt0Lm9ydGhvKGEsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCwxKTt2YXIgbz1lLmNvbnRleHQuZ2w7cmV0dXJue3VfbWF0cml4OmEsdV93b3JsZDpbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSx1X2ltYWdlOm4sdV9jb2xvcl9yYW1wOmksdV9vcGFjaXR5OnIucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKX19KGUsciwwLDEpLHIuaWQsZS52aWV3cG9ydEJ1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUudmlld3BvcnRTZWdtZW50cyxyLnBhaW50LGUudHJhbnNmb3JtLnpvb20pfShlLG4pKX0sbGluZTpmdW5jdGlvbihlLHIsbixpKXtpZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzKXt2YXIgYT1uLnBhaW50LmdldCgibGluZS1vcGFjaXR5Iiksbz1uLnBhaW50LmdldCgibGluZS13aWR0aCIpO2lmKDAhPT1hLmNvbnN0YW50T3IoMSkmJjAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxBdC5SZWFkT25seSksbD1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxjPW4ucGFpbnQuZ2V0KCJsaW5lLWRhc2hhcnJheSIpLHU9bi5wYWludC5nZXQoImxpbmUtcGF0dGVybiIpLGY9dS5jb25zdGFudE9yKDEpLGg9bi5wYWludC5nZXQoImxpbmUtZ3JhZGllbnQiKSxwPW4uZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpLGQ9Zj8ibGluZVBhdHRlcm4iOmM/ImxpbmVTREYiOmg/ImxpbmVHcmFkaWVudCI6ImxpbmUiLG09ZS5jb250ZXh0LGc9bS5nbCx2PSEwO2lmKGgpe20uYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCk7dmFyIHk9bi5ncmFkaWVudFRleHR1cmU7aWYoIW4uZ3JhZGllbnQpcmV0dXJuO3l8fCh5PW4uZ3JhZGllbnRUZXh0dXJlPW5ldyB0LlRleHR1cmUobSxuLmdyYWRpZW50LGcuUkdCQSkpLHkuYmluZChnLkxJTkVBUixnLkNMQU1QX1RPX0VER0UpfWZvcih2YXIgeD0wLGI9aTt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF0sdz1yLmdldFRpbGUoXyk7aWYoIWZ8fHcucGF0dGVybnNMb2FkZWQoKSl7dmFyIFQ9dy5nZXRCdWNrZXQobik7aWYoVCl7dmFyIGs9VC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLEE9ZS5jb250ZXh0LnByb2dyYW0uZ2V0KCksTT1lLnVzZVByb2dyYW0oZCxrKSxTPXZ8fE0ucHJvZ3JhbSE9PUEsRT11LmNvbnN0YW50T3IobnVsbCk7aWYoRSYmdy5pbWFnZUF0bGFzKXt2YXIgTD13LmltYWdlQXRsYXMsQz1MLnBhdHRlcm5Qb3NpdGlvbnNbRS50by50b1N0cmluZygpXSxQPUwucGF0dGVyblBvc2l0aW9uc1tFLmZyb20udG9TdHJpbmcoKV07QyYmUCYmay5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMoQyxQKX12YXIgST1mP0JyKGUsdyxuLHApOmM/TnIoZSx3LG4sYyxwKTpoP0ZyKGUsdyxuKTpScihlLHcsbik7Zj8obS5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKSx3LmltYWdlQXRsYXNUZXh0dXJlLmJpbmQoZy5MSU5FQVIsZy5DTEFNUF9UT19FREdFKSxrLnVwZGF0ZVBhaW50QnVmZmVycyhwKSk6YyYmKFN8fGUubGluZUF0bGFzLmRpcnR5KSYmKG0uYWN0aXZlVGV4dHVyZS5zZXQoZy5URVhUVVJFMCksZS5saW5lQXRsYXMuYmluZChtKSksTS5kcmF3KG0sZy5UUklBTkdMRVMscyxlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcoXyksbCxFdC5kaXNhYmxlZCxJLG4uaWQsVC5sYXlvdXRWZXJ0ZXhCdWZmZXIsVC5pbmRleEJ1ZmZlcixULnNlZ21lbnRzLG4ucGFpbnQsZS50cmFuc2Zvcm0uem9vbSxrKSx2PSExfX19fX19LGZpbGw6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5wYWludC5nZXQoImZpbGwtY29sb3IiKSxvPW4ucGFpbnQuZ2V0KCJmaWxsLW9wYWNpdHkiKTtpZigwIT09by5jb25zdGFudE9yKDEpKXt2YXIgcz1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxsPW4ucGFpbnQuZ2V0KCJmaWxsLXBhdHRlcm4iKSxjPWUub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpJiYhbC5jb25zdGFudE9yKDEpJiYxPT09YS5jb25zdGFudE9yKHQuQ29sb3IudHJhbnNwYXJlbnQpLmEmJjE9PT1vLmNvbnN0YW50T3IoMCk/Im9wYXF1ZSI6InRyYW5zbHVjZW50IjtpZihlLnJlbmRlclBhc3M9PT1jKXt2YXIgdT1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDEsIm9wYXF1ZSI9PT1lLnJlbmRlclBhc3M/QXQuUmVhZFdyaXRlOkF0LlJlYWRPbmx5KTthbihlLHIsbixpLHUscywhMSl9aWYoInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmbi5wYWludC5nZXQoImZpbGwtYW50aWFsaWFzIikpe3ZhciBmPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIobi5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT8yOjAsQXQuUmVhZE9ubHkpO2FuKGUscixuLGksZixzLCEwKX19fSwiZmlsbC1leHRydXNpb24iOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Iik7aWYoMCE9PWkmJiJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe3ZhciBhPW5ldyBBdCh0LmNvbnRleHQuZ2wuTEVRVUFMLEF0LlJlYWRXcml0ZSx0LmRlcHRoUmFuZ2VGb3IzRCk7aWYoMSE9PWl8fHIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIikuY29uc3RhbnRPcigxKSlvbih0LGUscixuLGEsTXQuZGlzYWJsZWQsU3QuZGlzYWJsZWQpLG9uKHQsZSxyLG4sYSx0LnN0ZW5jaWxNb2RlRm9yM0QoKSx0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7ZWxzZXt2YXIgbz10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtvbih0LGUscixuLGEsTXQuZGlzYWJsZWQsbyl9fX0saGlsbHNoYWRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJvZmZzY3JlZW4iPT09dC5yZW5kZXJQYXNzfHwidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXtmb3IodmFyIGk9dC5jb250ZXh0LGE9ZS5nZXRTb3VyY2UoKS5tYXh6b29tLG89dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLEF0LlJlYWRPbmx5KSxzPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGw9InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcz90LnN0ZW5jaWxDb25maWdGb3JPdmVybGFwKG4pOlt7fSxuXSxjPWxbMF0sdT0wLGY9bFsxXTt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV0scD1lLmdldFRpbGUoaCk7cC5uZWVkc0hpbGxzaGFkZVByZXBhcmUmJiJvZmZzY3JlZW4iPT09dC5yZW5kZXJQYXNzP2xuKHQscCxyLGEsbyxNdC5kaXNhYmxlZCxzKToidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzJiZzbih0LHAscixvLGNbaC5vdmVyc2NhbGVkWl0scyl9aS52aWV3cG9ydC5zZXQoWzAsMCx0LndpZHRoLHQuaGVpZ2h0XSl9fSxyYXN0ZXI6ZnVuY3Rpb24odCxlLHIsbil7aWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyYmMCE9PXIucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpJiZuLmxlbmd0aClmb3IodmFyIGk9dC5jb250ZXh0LGE9aS5nbCxvPWUuZ2V0U291cmNlKCkscz10LnVzZVByb2dyYW0oInJhc3RlciIpLGw9dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksYz1vIGluc3RhbmNlb2YgST9be30sbl06dC5zdGVuY2lsQ29uZmlnRm9yT3ZlcmxhcChuKSx1PWNbMF0sZj1jWzFdLGg9ZltmLmxlbmd0aC0xXS5vdmVyc2NhbGVkWixwPSF0Lm9wdGlvbnMubW92aW5nLGQ9MCxtPWY7ZDxtLmxlbmd0aDtkKz0xKXt2YXIgZz1tW2RdLHY9dC5kZXB0aE1vZGVGb3JTdWJsYXllcihnLm92ZXJzY2FsZWRaLWgsMT09PXIucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpP0F0LlJlYWRXcml0ZTpBdC5SZWFkT25seSxhLkxFU1MpLHk9ZS5nZXRUaWxlKGcpLHg9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGcudG9VbndyYXBwZWQoKSxwKTt5LnJlZ2lzdGVyRmFkZUR1cmF0aW9uKHIucGFpbnQuZ2V0KCJyYXN0ZXItZmFkZS1kdXJhdGlvbiIpKTt2YXIgYj1lLmZpbmRMb2FkZWRQYXJlbnQoZywwKSxfPWNuKHksYixlLHIsdC50cmFuc2Zvcm0pLHc9dm9pZCAwLFQ9dm9pZCAwLGs9Im5lYXJlc3QiPT09ci5wYWludC5nZXQoInJhc3Rlci1yZXNhbXBsaW5nIik/YS5ORUFSRVNUOmEuTElORUFSO2kuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMCkseS50ZXh0dXJlLmJpbmQoayxhLkNMQU1QX1RPX0VER0UsYS5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLGkuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMSksYj8oYi50ZXh0dXJlLmJpbmQoayxhLkNMQU1QX1RPX0VER0UsYS5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLHc9TWF0aC5wb3coMixiLnRpbGVJRC5vdmVyc2NhbGVkWi15LnRpbGVJRC5vdmVyc2NhbGVkWiksVD1beS50aWxlSUQuY2Fub25pY2FsLngqdyUxLHkudGlsZUlELmNhbm9uaWNhbC55KnclMV0pOnkudGV4dHVyZS5iaW5kKGssYS5DTEFNUF9UT19FREdFLGEuTElORUFSX01JUE1BUF9ORUFSRVNUKTt2YXIgQT1Wcih4LFR8fFswLDBdLHd8fDEsXyxyKTtvIGluc3RhbmNlb2YgST9zLmRyYXcoaSxhLlRSSUFOR0xFUyx2LE10LmRpc2FibGVkLGwsRXQuZGlzYWJsZWQsQSxyLmlkLG8uYm91bmRzQnVmZmVyLHQucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsby5ib3VuZHNTZWdtZW50cyk6cy5kcmF3KGksYS5UUklBTkdMRVMsdix1W2cub3ZlcnNjYWxlZFpdLGwsRXQuZGlzYWJsZWQsQSxyLmlkLHQucmFzdGVyQm91bmRzQnVmZmVyLHQucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdC5yYXN0ZXJCb3VuZHNTZWdtZW50cyl9fSxiYWNrZ3JvdW5kOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1jb2xvciIpLGk9ci5wYWludC5nZXQoImJhY2tncm91bmQtb3BhY2l0eSIpO2lmKDAhPT1pKXt2YXIgYT10LmNvbnRleHQsbz1hLmdsLHM9dC50cmFuc2Zvcm0sbD1zLnRpbGVTaXplLGM9ci5wYWludC5nZXQoImJhY2tncm91bmQtcGF0dGVybiIpO2lmKCF0LmlzUGF0dGVybk1pc3NpbmcoYykpe3ZhciB1PSFjJiYxPT09bi5hJiYxPT09aSYmdC5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCk/Im9wYXF1ZSI6InRyYW5zbHVjZW50IjtpZih0LnJlbmRlclBhc3M9PT11KXt2YXIgZj1NdC5kaXNhYmxlZCxoPXQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwib3BhcXVlIj09PXU/QXQuUmVhZFdyaXRlOkF0LlJlYWRPbmx5KSxwPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGQ9dC51c2VQcm9ncmFtKGM/ImJhY2tncm91bmRQYXR0ZXJuIjoiYmFja2dyb3VuZCIpLG09cy5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZTpsfSk7YyYmKGEuYWN0aXZlVGV4dHVyZS5zZXQoby5URVhUVVJFMCksdC5pbWFnZU1hbmFnZXIuYmluZCh0LmNvbnRleHQpKTtmb3IodmFyIGc9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCksdj0wLHk9bTt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl0sYj10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoeC50b1Vud3JhcHBlZCgpKSxfPWM/WnIoYixpLHQsYyx7dGlsZUlEOngsdGlsZVNpemU6bH0sZyk6WHIoYixpLG4pO2QuZHJhdyhhLG8uVFJJQU5HTEVTLGgsZixwLEV0LmRpc2FibGVkLF8sci5pZCx0LnRpbGVFeHRlbnRCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0LnRpbGVFeHRlbnRTZWdtZW50cyl9fX19fSxkZWJ1ZzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspeG4odCxlLHJbbl0pfSxjdXN0b206ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29udGV4dCxpPXIuaW1wbGVtZW50YXRpb247aWYoIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3Mpe3ZhciBhPWkucHJlcmVuZGVyO2EmJih0LnNldEN1c3RvbUxheWVyRGVmYXVsdHMoKSxuLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksYS5jYWxsKGksbi5nbCx0LnRyYW5zZm9ybS5jdXN0b21MYXllck1hdHJpeCgpKSxuLnNldERpcnR5KCksdC5zZXRCYXNlU3RhdGUoKSl9ZWxzZSBpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt0LnNldEN1c3RvbUxheWVyRGVmYXVsdHMoKSxuLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksbi5zZXRTdGVuY2lsTW9kZShNdC5kaXNhYmxlZCk7dmFyIG89IjNkIj09PWkucmVuZGVyaW5nTW9kZT9uZXcgQXQodC5jb250ZXh0LmdsLkxFUVVBTCxBdC5SZWFkV3JpdGUsdC5kZXB0aFJhbmdlRm9yM0QpOnQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxBdC5SZWFkT25seSk7bi5zZXREZXB0aE1vZGUobyksaS5yZW5kZXIobi5nbCx0LnRyYW5zZm9ybS5jdXN0b21MYXllck1hdHJpeCgpKSxuLnNldERpcnR5KCksdC5zZXRCYXNlU3RhdGUoKSxuLmJpbmRGcmFtZWJ1ZmZlci5zZXQobnVsbCl9fX0sX249ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRleHQ9bmV3IEx0KHQpLHRoaXMudHJhbnNmb3JtPWUsdGhpcy5fdGlsZVRleHR1cmVzPXt9LHRoaXMuc2V0dXAoKSx0aGlzLm51bVN1YmxheWVycz1DdC5tYXhVbmRlcnpvb21pbmcrQ3QubWF4T3Zlcnpvb21pbmcrMSx0aGlzLmRlcHRoRXBzaWxvbj0xL01hdGgucG93KDIsMTYpLHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXg9bmV3IE5lLHRoaXMuZ3B1VGltZXJzPXt9fTtfbi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUscil7aWYodGhpcy53aWR0aD1lKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuaGVpZ2h0PXIqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdGhpcy5jb250ZXh0LnZpZXdwb3J0LnNldChbMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdKSx0aGlzLnN0eWxlKWZvcih2YXIgbj0wLGk9dGhpcy5zdHlsZS5fb3JkZXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuc3R5bGUuX2xheWVyc1thXS5yZXNpemUoKX19LF9uLnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0O3IuZW1wbGFjZUJhY2soMCwwKSxyLmVtcGxhY2VCYWNrKHQuRVhURU5ULDApLHIuZW1wbGFjZUJhY2soMCx0LkVYVEVOVCksci5lbXBsYWNlQmFjayh0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy50aWxlRXh0ZW50QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHIsR2UubWVtYmVycyksdGhpcy50aWxlRXh0ZW50U2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMik7dmFyIG49bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyaTQ7bi5lbXBsYWNlQmFjaygwLDApLG4uZW1wbGFjZUJhY2sodC5FWFRFTlQsMCksbi5lbXBsYWNlQmFjaygwLHQuRVhURU5UKSxuLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLmRlYnVnQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKG4sR2UubWVtYmVycyksdGhpcy5kZWJ1Z1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDUpO3ZhciBpPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0NGk4O2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayh0LkVYVEVOVCwwLHQuRVhURU5ULDApLGkuZW1wbGFjZUJhY2soMCx0LkVYVEVOVCwwLHQuRVhURU5UKSxpLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5ULHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLnJhc3RlckJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLFAubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgYT1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDthLmVtcGxhY2VCYWNrKDAsMCksYS5lbXBsYWNlQmFjaygxLDApLGEuZW1wbGFjZUJhY2soMCwxKSxhLmVtcGxhY2VCYWNrKDEsMSksdGhpcy52aWV3cG9ydEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihhLEdlLm1lbWJlcnMpLHRoaXMudmlld3BvcnRTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgbz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDF1aTI7by5lbXBsYWNlQmFjaygwKSxvLmVtcGxhY2VCYWNrKDEpLG8uZW1wbGFjZUJhY2soMyksby5lbXBsYWNlQmFjaygyKSxvLmVtcGxhY2VCYWNrKDApLHRoaXMudGlsZUJvcmRlckluZGV4QnVmZmVyPWUuY3JlYXRlSW5kZXhCdWZmZXIobyk7dmFyIHM9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2O3MuZW1wbGFjZUJhY2soMCwxLDIpLHMuZW1wbGFjZUJhY2soMiwxLDMpLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXI9ZS5jcmVhdGVJbmRleEJ1ZmZlcihzKSx0aGlzLmVtcHR5VGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUse3dpZHRoOjEsaGVpZ2h0OjEsZGF0YTpuZXcgVWludDhBcnJheShbMCwwLDAsMF0pfSxlLmdsLlJHQkEpO3ZhciBsPXRoaXMuY29udGV4dC5nbDt0aGlzLnN0ZW5jaWxDbGVhck1vZGU9bmV3IE10KHtmdW5jOmwuQUxXQVlTLG1hc2s6MH0sMCwyNTUsbC5aRVJPLGwuWkVSTyxsLlpFUk8pfSxfbi5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDt0aGlzLm5leHRTdGVuY2lsSUQ9MSx0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXZvaWQgMDt2YXIgbj10LmNyZWF0ZSgpO3Qub3J0aG8obiwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCwwLDEpLHQuc2NhbGUobixuLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsMF0pLHRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIikuZHJhdyhlLHIuVFJJQU5HTEVTLEF0LmRpc2FibGVkLHRoaXMuc3RlbmNpbENsZWFyTW9kZSxTdC5kaXNhYmxlZCxFdC5kaXNhYmxlZCxPcihuKSwiJGNsaXBwaW5nIix0aGlzLnZpZXdwb3J0QnVmZmVyLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdGhpcy52aWV3cG9ydFNlZ21lbnRzKX0sX24ucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UhPT10LnNvdXJjZSYmdC5pc1RpbGVDbGlwcGVkKCkmJmUmJmUubGVuZ3RoKXt0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXQuc291cmNlO3ZhciByPXRoaXMuY29udGV4dCxuPXIuZ2w7dGhpcy5uZXh0U3RlbmNpbElEK2UubGVuZ3RoPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKSxyLnNldENvbG9yTW9kZShTdC5kaXNhYmxlZCksci5zZXREZXB0aE1vZGUoQXQuZGlzYWJsZWQpO3ZhciBpPXRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIik7dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEcz17fTtmb3IodmFyIGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1tzLmtleV09dGhpcy5uZXh0U3RlbmNpbElEKys7aS5kcmF3KHIsbi5UUklBTkdMRVMsQXQuZGlzYWJsZWQsbmV3IE10KHtmdW5jOm4uQUxXQVlTLG1hc2s6MH0sbCwyNTUsbi5LRUVQLG4uS0VFUCxuLlJFUExBQ0UpLFN0LmRpc2FibGVkLEV0LmRpc2FibGVkLE9yKHMucG9zTWF0cml4KSwiJGNsaXBwaW5nIix0aGlzLnRpbGVFeHRlbnRCdWZmZXIsdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0aGlzLnRpbGVFeHRlbnRTZWdtZW50cyl9fX0sX24ucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yM0Q9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXZvaWQgMCx0aGlzLm5leHRTdGVuY2lsSUQrMT4yNTYmJnRoaXMuY2xlYXJTdGVuY2lsKCk7dmFyIHQ9dGhpcy5uZXh0U3RlbmNpbElEKyssZT10aGlzLmNvbnRleHQuZ2w7cmV0dXJuIG5ldyBNdCh7ZnVuYzplLk5PVEVRVUFMLG1hc2s6MjU1fSx0LDI1NSxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LF9uLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IE10KHtmdW5jOmUuRVFVQUwsbWFzazoyNTV9LHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5rZXldLDAsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSxfbi5wcm90b3R5cGUuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXA9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmNvbnRleHQuZ2wsbj10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUub3ZlcnNjYWxlZFotdC5vdmVyc2NhbGVkWn0pKSxpPW5bbi5sZW5ndGgtMV0ub3ZlcnNjYWxlZFosYT1uWzBdLm92ZXJzY2FsZWRaLWkrMTtpZihhPjEpe3RoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dm9pZCAwLHRoaXMubmV4dFN0ZW5jaWxJRCthPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKTtmb3IodmFyIG89e30scz0wO3M8YTtzKyspb1tzK2ldPW5ldyBNdCh7ZnVuYzpyLkdFUVVBTCxtYXNrOjI1NX0scyt0aGlzLm5leHRTdGVuY2lsSUQsMjU1LHIuS0VFUCxyLktFRVAsci5SRVBMQUNFKTtyZXR1cm4gdGhpcy5uZXh0U3RlbmNpbElEKz1hLFtvLG5dfXJldHVyblsoZT17fSxlW2ldPU10LmRpc2FibGVkLGUpLG5dfSxfbi5wcm90b3R5cGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtpZih0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3Ipe3JldHVybiBuZXcgU3QoW2UuQ09OU1RBTlRfQ09MT1IsZS5PTkVdLG5ldyB0LkNvbG9yKDEvOCwxLzgsMS84LDApLFshMCwhMCwhMCwhMF0pfXJldHVybiJvcGFxdWUiPT09dGhpcy5yZW5kZXJQYXNzP1N0LnVuYmxlbmRlZDpTdC5hbHBoYUJsZW5kZWR9LF9uLnByb3RvdHlwZS5kZXB0aE1vZGVGb3JTdWJsYXllcj1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpKXJldHVybiBBdC5kaXNhYmxlZDt2YXIgbj0xLSgoMSt0aGlzLmN1cnJlbnRMYXllcikqdGhpcy5udW1TdWJsYXllcnMrdCkqdGhpcy5kZXB0aEVwc2lsb247cmV0dXJuIG5ldyBBdChyfHx0aGlzLmNvbnRleHQuZ2wuTEVRVUFMLGUsW24sbl0pfSxfbi5wcm90b3R5cGUub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRMYXllcjx0aGlzLm9wYXF1ZVBhc3NDdXRvZmZ9LF9uLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuc3R5bGU9ZSx0aGlzLm9wdGlvbnM9cix0aGlzLmxpbmVBdGxhcz1lLmxpbmVBdGxhcyx0aGlzLmltYWdlTWFuYWdlcj1lLmltYWdlTWFuYWdlcix0aGlzLmdseXBoTWFuYWdlcj1lLmdseXBoTWFuYWdlcix0aGlzLnN5bWJvbEZhZGVDaGFuZ2U9ZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZSh0LmJyb3dzZXIubm93KCkpLHRoaXMuaW1hZ2VNYW5hZ2VyLmJlZ2luRnJhbWUoKTt2YXIgaT10aGlzLnN0eWxlLl9vcmRlcixhPXRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgbyBpbiBhKXt2YXIgcz1hW29dO3MudXNlZCYmcy5wcmVwYXJlKHRoaXMuY29udGV4dCl9dmFyIGwsYyx1PXt9LGY9e30saD17fTtmb3IodmFyIHAgaW4gYSl7dmFyIGQ9YVtwXTt1W3BdPWQuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCksZltwXT11W3BdLnNsaWNlKCkucmV2ZXJzZSgpLGhbcF09ZC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoITApLnJldmVyc2UoKX10aGlzLm9wYXF1ZVBhc3NDdXRvZmY9MS8wO2Zvcih2YXIgbT0wO208aS5sZW5ndGg7bSsrKXt2YXIgZz1pW21dO2lmKHRoaXMuc3R5bGUuX2xheWVyc1tnXS5pczNEKCkpe3RoaXMub3BhcXVlUGFzc0N1dG9mZj1tO2JyZWFrfX10aGlzLnJlbmRlclBhc3M9Im9mZnNjcmVlbiI7Zm9yKHZhciB2PTAseT1pO3Y8eS5sZW5ndGg7dis9MSl7dmFyIHg9eVt2XSxiPXRoaXMuc3R5bGUuX2xheWVyc1t4XTtpZihiLmhhc09mZnNjcmVlblBhc3MoKSYmIWIuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpe3ZhciBfPWZbYi5zb3VyY2VdOygiY3VzdG9tIj09PWIudHlwZXx8Xy5sZW5ndGgpJiZ0aGlzLnJlbmRlckxheWVyKHRoaXMsYVtiLnNvdXJjZV0sYixfKX19Zm9yKHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpLHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3I/dC5Db2xvci5ibGFjazp0LkNvbG9yLnRyYW5zcGFyZW50LGRlcHRoOjF9KSx0aGlzLmNsZWFyU3RlbmNpbCgpLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj1yLnNob3dPdmVyZHJhd0luc3BlY3Rvcix0aGlzLmRlcHRoUmFuZ2VGb3IzRD1bMCwxLShlLl9vcmRlci5sZW5ndGgrMikqdGhpcy5udW1TdWJsYXllcnMqdGhpcy5kZXB0aEVwc2lsb25dLHRoaXMucmVuZGVyUGFzcz0ib3BhcXVlIix0aGlzLmN1cnJlbnRMYXllcj1pLmxlbmd0aC0xO3RoaXMuY3VycmVudExheWVyPj0wO3RoaXMuY3VycmVudExheWVyLS0pe3ZhciB3PXRoaXMuc3R5bGUuX2xheWVyc1tpW3RoaXMuY3VycmVudExheWVyXV0sVD1hW3cuc291cmNlXSxrPXVbdy5zb3VyY2VdO3RoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKHcsayksdGhpcy5yZW5kZXJMYXllcih0aGlzLFQsdyxrKX1mb3IodGhpcy5yZW5kZXJQYXNzPSJ0cmFuc2x1Y2VudCIsdGhpcy5jdXJyZW50TGF5ZXI9MDt0aGlzLmN1cnJlbnRMYXllcjxpLmxlbmd0aDt0aGlzLmN1cnJlbnRMYXllcisrKXt2YXIgQT10aGlzLnN0eWxlLl9sYXllcnNbaVt0aGlzLmN1cnJlbnRMYXllcl1dLE09YVtBLnNvdXJjZV0sUz0oInN5bWJvbCI9PT1BLnR5cGU/aDpmKVtBLnNvdXJjZV07dGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MoQSx1W0Euc291cmNlXSksdGhpcy5yZW5kZXJMYXllcih0aGlzLE0sQSxTKX10aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzJiYodC52YWx1ZXModGhpcy5zdHlsZS5fbGF5ZXJzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZSYmIXQuaXNIaWRkZW4obi50cmFuc2Zvcm0uem9vbSkmJih0LnNvdXJjZSE9PShjJiZjLmlkKSYmKGM9bi5zdHlsZS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdKSwoIWx8fGwuZ2V0U291cmNlKCkubWF4em9vbTxjLmdldFNvdXJjZSgpLm1heHpvb20pJiYobD1jKSl9KSksbCYmYm4uZGVidWcodGhpcyxsLGwuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpKTt0aGlzLm9wdGlvbnMuc2hvd1BhZGRpbmcmJm1uKHRoaXMpLHRoaXMuY29udGV4dC5zZXREZWZhdWx0KCl9LF9uLnByb3RvdHlwZS5yZW5kZXJMYXllcj1mdW5jdGlvbih0LGUscixuKXtyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pfHwoImJhY2tncm91bmQiPT09ci50eXBlfHwiY3VzdG9tIj09PXIudHlwZXx8bi5sZW5ndGgpJiYodGhpcy5pZD1yLmlkLHRoaXMuZ3B1VGltaW5nU3RhcnQociksYm5bci50eXBlXSh0LGUscixuLHRoaXMuc3R5bGUucGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0cyksdGhpcy5ncHVUaW1pbmdFbmQoKSl9LF9uLnByb3RvdHlwZS5ncHVUaW1pbmdTdGFydD1mdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuZ3B1VGltaW5nKXt2YXIgZT10aGlzLmNvbnRleHQuZXh0VGltZXJRdWVyeSxyPXRoaXMuZ3B1VGltZXJzW3QuaWRdO3J8fChyPXRoaXMuZ3B1VGltZXJzW3QuaWRdPXtjYWxsczowLGNwdVRpbWU6MCxxdWVyeTplLmNyZWF0ZVF1ZXJ5RVhUKCl9KSxyLmNhbGxzKyssZS5iZWdpblF1ZXJ5RVhUKGUuVElNRV9FTEFQU0VEX0VYVCxyLnF1ZXJ5KX19LF9uLnByb3RvdHlwZS5ncHVUaW1pbmdFbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuZ3B1VGltaW5nKXt2YXIgdD10aGlzLmNvbnRleHQuZXh0VGltZXJRdWVyeTt0LmVuZFF1ZXJ5RVhUKHQuVElNRV9FTEFQU0VEX0VYVCl9fSxfbi5wcm90b3R5cGUuY29sbGVjdEdwdVRpbWVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3B1VGltZXJzO3JldHVybiB0aGlzLmdwdVRpbWVycz17fSx0fSxfbi5wcm90b3R5cGUucXVlcnlHcHVUaW1lcnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpe3ZhciBuPXRbcl0saT10aGlzLmNvbnRleHQuZXh0VGltZXJRdWVyeSxhPWkuZ2V0UXVlcnlPYmplY3RFWFQobi5xdWVyeSxpLlFVRVJZX1JFU1VMVF9FWFQpLzFlNjtpLmRlbGV0ZVF1ZXJ5RVhUKG4ucXVlcnkpLGVbcl09YX1yZXR1cm4gZX0sX24ucHJvdG90eXBlLnRyYW5zbGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIsbixpLGEpe2lmKCFuWzBdJiYhblsxXSlyZXR1cm4gZTt2YXIgbz1hPyJtYXAiPT09aT90aGlzLnRyYW5zZm9ybS5hbmdsZTowOiJ2aWV3cG9ydCI9PT1pPy10aGlzLnRyYW5zZm9ybS5hbmdsZTowO2lmKG8pe3ZhciBzPU1hdGguc2luKG8pLGw9TWF0aC5jb3Mobyk7bj1bblswXSpsLW5bMV0qcyxuWzBdKnMrblsxXSpsXX12YXIgYz1bYT9uWzBdOnBlKHIsblswXSx0aGlzLnRyYW5zZm9ybS56b29tKSxhP25bMV06cGUocixuWzFdLHRoaXMudHJhbnNmb3JtLnpvb20pLDBdLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHQudHJhbnNsYXRlKHUsZSxjKSx1fSxfbi5wcm90b3R5cGUuc2F2ZVRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dO2U/ZS5wdXNoKHQpOnRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dPVt0XX0sX24ucHJvdG90eXBlLmdldFRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0XTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lLnBvcCgpOm51bGx9LF9uLnByb3RvdHlwZS5pc1BhdHRlcm5NaXNzaW5nPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2lmKCF0LmZyb218fCF0LnRvKXJldHVybiEwO3ZhciBlPXRoaXMuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC5mcm9tLnRvU3RyaW5nKCkpLHI9dGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvLnRvU3RyaW5nKCkpO3JldHVybiFlfHwhcn0sX24ucHJvdG90eXBlLnVzZVByb2dyYW09ZnVuY3Rpb24odCxlKXt0aGlzLmNhY2hlPXRoaXMuY2FjaGV8fHt9O3ZhciByPSIiK3QrKGU/ZS5jYWNoZUtleToiIikrKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj8iL292ZXJkcmF3IjoiIik7cmV0dXJuIHRoaXMuY2FjaGVbcl18fCh0aGlzLmNhY2hlW3JdPW5ldyBfcih0aGlzLmNvbnRleHQseHJbdF0sZSxKclt0XSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpKSx0aGlzLmNhY2hlW3JdfSxfbi5wcm90b3R5cGUuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cz1mdW5jdGlvbigpe3RoaXMuY29udGV4dC51bmJpbmRWQU8oKSx0aGlzLmNvbnRleHQuY3VsbEZhY2Uuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFjay5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKX0sX24ucHJvdG90eXBlLnNldEJhc2VTdGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dC5nbDt0aGlzLmNvbnRleHQuY3VsbEZhY2Uuc2V0KCExKSx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuY29udGV4dC5ibGVuZEVxdWF0aW9uLnNldCh0LkZVTkNfQUREKX0sX24ucHJvdG90eXBlLmluaXREZWJ1Z092ZXJsYXlDYW52YXM9ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLmRlYnVnT3ZlcmxheUNhbnZhcyl7dGhpcy5kZWJ1Z092ZXJsYXlDYW52YXM9dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMud2lkdGg9NTEyLHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLmhlaWdodD01MTI7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMuZGVidWdPdmVybGF5VGV4dHVyZT1uZXcgdC5UZXh0dXJlKHRoaXMuY29udGV4dCx0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcyxlLlJHQkEpfX0sX24ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmVtcHR5VGV4dHVyZS5kZXN0cm95KCksdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlJiZ0aGlzLmRlYnVnT3ZlcmxheVRleHR1cmUuZGVzdHJveSgpfTt2YXIgd249ZnVuY3Rpb24odCxlKXt0aGlzLnBvaW50cz10LHRoaXMucGxhbmVzPWV9O3duLmZyb21JbnZQcm9qZWN0aW9uTWF0cml4PWZ1bmN0aW9uKGUscixuKXt2YXIgaT1NYXRoLnBvdygyLG4pLGE9W1stMSwxLC0xLDFdLFsxLDEsLTEsMV0sWzEsLTEsLTEsMV0sWy0xLC0xLC0xLDFdLFstMSwxLDEsMV0sWzEsMSwxLDFdLFsxLC0xLDEsMV0sWy0xLC0xLDEsMV1dLm1hcCgoZnVuY3Rpb24ocil7cmV0dXJuIHQudHJhbnNmb3JtTWF0NChbXSxyLGUpfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NhbGUkMShbXSxlLDEvZVszXS9yKmkpfSkpLG89W1swLDEsMl0sWzYsNSw0XSxbMCwzLDddLFsyLDEsNV0sWzMsMiw2XSxbMCw0LDVdXS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPXQuc3ViKFtdLGFbZVswXV0sYVtlWzFdXSksbj10LnN1YihbXSxhW2VbMl1dLGFbZVsxXV0pLGk9dC5ub3JtYWxpemUoW10sdC5jcm9zcyhbXSxyLG4pKSxvPS10LmRvdChpLGFbZVsxXV0pO3JldHVybiBpLmNvbmNhdChvKX0pKTtyZXR1cm4gbmV3IHduKGEsbyl9O3ZhciBUbj1mdW5jdGlvbihlLHIpe3RoaXMubWluPWUsdGhpcy5tYXg9cix0aGlzLmNlbnRlcj10LnNjYWxlJDIoW10sdC5hZGQoW10sdGhpcy5taW4sdGhpcy5tYXgpLC41KX07VG4ucHJvdG90eXBlLnF1YWRyYW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bZSUyPT0wLGU8Ml0sbj10LmNsb25lJDIodGhpcy5taW4pLGk9dC5jbG9uZSQyKHRoaXMubWF4KSxhPTA7YTxyLmxlbmd0aDthKyspblthXT1yW2FdP3RoaXMubWluW2FdOnRoaXMuY2VudGVyW2FdLGlbYV09clthXT90aGlzLmNlbnRlclthXTp0aGlzLm1heFthXTtyZXR1cm4gaVsyXT10aGlzLm1heFsyXSxuZXcgVG4obixpKX0sVG4ucHJvdG90eXBlLmRpc3RhbmNlWD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhbMF0sdFswXSksdGhpcy5taW5bMF0pLXRbMF19LFRuLnByb3RvdHlwZS5kaXN0YW5jZVk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4WzFdLHRbMV0pLHRoaXMubWluWzFdKS10WzFdfSxUbi5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihlKXtmb3IodmFyIHI9W1t0aGlzLm1pblswXSx0aGlzLm1pblsxXSwwLDFdLFt0aGlzLm1heFswXSx0aGlzLm1pblsxXSwwLDFdLFt0aGlzLm1heFswXSx0aGlzLm1heFsxXSwwLDFdLFt0aGlzLm1pblswXSx0aGlzLm1heFsxXSwwLDFdXSxuPSEwLGk9MDtpPGUucGxhbmVzLmxlbmd0aDtpKyspe2Zvcih2YXIgYT1lLnBsYW5lc1tpXSxvPTAscz0wO3M8ci5sZW5ndGg7cysrKW8rPXQuZG90JDEoYSxyW3NdKT49MDtpZigwPT09bylyZXR1cm4gMDtvIT09ci5sZW5ndGgmJihuPSExKX1pZihuKXJldHVybiAyO2Zvcih2YXIgbD0wO2w8MztsKyspe2Zvcih2YXIgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9LU51bWJlci5NQVhfVkFMVUUsZj0wO2Y8ZS5wb2ludHMubGVuZ3RoO2YrKyl7dmFyIGg9ZS5wb2ludHNbZl1bbF0tdGhpcy5taW5bbF07Yz1NYXRoLm1pbihjLGgpLHU9TWF0aC5tYXgodSxoKX1pZih1PDB8fGM+dGhpcy5tYXhbbF0tdGhpcy5taW5bbF0pcmV0dXJuIDB9cmV0dXJuIDF9O3ZhciBrbj1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1uJiYobj0wKSxpc05hTih0KXx8dDwwfHxpc05hTihlKXx8ZTwwfHxpc05hTihyKXx8cjwwfHxpc05hTihuKXx8bjwwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3IgZWRnZS1pbnNldHMsIHRvcCwgYm90dG9tLCBsZWZ0IGFuZCByaWdodCBtdXN0IGFsbCBiZSBudW1iZXJzIik7dGhpcy50b3A9dCx0aGlzLmJvdHRvbT1lLHRoaXMubGVmdD1yLHRoaXMucmlnaHQ9bn07a24ucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gbnVsbCE9ci50b3AmJm51bGwhPWUudG9wJiYodGhpcy50b3A9dC5udW1iZXIoZS50b3Asci50b3AsbikpLG51bGwhPXIuYm90dG9tJiZudWxsIT1lLmJvdHRvbSYmKHRoaXMuYm90dG9tPXQubnVtYmVyKGUuYm90dG9tLHIuYm90dG9tLG4pKSxudWxsIT1yLmxlZnQmJm51bGwhPWUubGVmdCYmKHRoaXMubGVmdD10Lm51bWJlcihlLmxlZnQsci5sZWZ0LG4pKSxudWxsIT1yLnJpZ2h0JiZudWxsIT1lLnJpZ2h0JiYodGhpcy5yaWdodD10Lm51bWJlcihlLnJpZ2h0LHIucmlnaHQsbikpLHRoaXN9LGtuLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmNsYW1wKCh0aGlzLmxlZnQrZS10aGlzLnJpZ2h0KS8yLDAsZSksaT10LmNsYW1wKCh0aGlzLnRvcCtyLXRoaXMuYm90dG9tKS8yLDAscik7cmV0dXJuIG5ldyB0LlBvaW50KG4saSl9LGtuLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9wPT09dC50b3AmJnRoaXMuYm90dG9tPT09dC5ib3R0b20mJnRoaXMubGVmdD09PXQubGVmdCYmdGhpcy5yaWdodD09PXQucmlnaHR9LGtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcy50b3AsdGhpcy5ib3R0b20sdGhpcy5sZWZ0LHRoaXMucmlnaHQpfSxrbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3RvcDp0aGlzLnRvcCxib3R0b206dGhpcy5ib3R0b20sbGVmdDp0aGlzLmxlZnQscmlnaHQ6dGhpcy5yaWdodH19O3ZhciBBbj1mdW5jdGlvbihlLHIsbixpLGEpe3RoaXMudGlsZVNpemU9NTEyLHRoaXMubWF4VmFsaWRMYXRpdHVkZT04NS4wNTExMjksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dm9pZCAwPT09YXx8YSx0aGlzLl9taW5ab29tPWV8fDAsdGhpcy5fbWF4Wm9vbT1yfHwyMix0aGlzLl9taW5QaXRjaD1udWxsPT1uPzA6bix0aGlzLl9tYXhQaXRjaD1udWxsPT1pPzYwOmksdGhpcy5zZXRNYXhCb3VuZHMoKSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9jZW50ZXI9bmV3IHQuTG5nTGF0KDAsMCksdGhpcy56b29tPTAsdGhpcy5hbmdsZT0wLHRoaXMuX2Zvdj0uNjQzNTAxMTA4NzkzMjg0NCx0aGlzLl9waXRjaD0wLHRoaXMuX3VubW9kaWZpZWQ9ITAsdGhpcy5fZWRnZUluc2V0cz1uZXcga24sdGhpcy5fcG9zTWF0cml4Q2FjaGU9e30sdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlPXt9fSxNbj17bWluWm9vbTp7Y29uZmlndXJhYmxlOiEwfSxtYXhab29tOntjb25maWd1cmFibGU6ITB9LG1pblBpdGNoOntjb25maWd1cmFibGU6ITB9LG1heFBpdGNoOntjb25maWd1cmFibGU6ITB9LHJlbmRlcldvcmxkQ29waWVzOntjb25maWd1cmFibGU6ITB9LHdvcmxkU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXJPZmZzZXQ6e2NvbmZpZ3VyYWJsZTohMH0sc2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxiZWFyaW5nOntjb25maWd1cmFibGU6ITB9LHBpdGNoOntjb25maWd1cmFibGU6ITB9LGZvdjp7Y29uZmlndXJhYmxlOiEwfSx6b29tOntjb25maWd1cmFibGU6ITB9LGNlbnRlcjp7Y29uZmlndXJhYmxlOiEwfSxwYWRkaW5nOntjb25maWd1cmFibGU6ITB9LGNlbnRlclBvaW50Ontjb25maWd1cmFibGU6ITB9LHVubW9kaWZpZWQ6e2NvbmZpZ3VyYWJsZTohMH0scG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O0FuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBBbih0aGlzLl9taW5ab29tLHRoaXMuX21heFpvb20sdGhpcy5fbWluUGl0Y2gsdGhpcy5tYXhQaXRjaCx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyk7cmV0dXJuIHQudGlsZVNpemU9dGhpcy50aWxlU2l6ZSx0LmxhdFJhbmdlPXRoaXMubGF0UmFuZ2UsdC53aWR0aD10aGlzLndpZHRoLHQuaGVpZ2h0PXRoaXMuaGVpZ2h0LHQuX2NlbnRlcj10aGlzLl9jZW50ZXIsdC56b29tPXRoaXMuem9vbSx0LmFuZ2xlPXRoaXMuYW5nbGUsdC5fZm92PXRoaXMuX2Zvdix0Ll9waXRjaD10aGlzLl9waXRjaCx0Ll91bm1vZGlmaWVkPXRoaXMuX3VubW9kaWZpZWQsdC5fZWRnZUluc2V0cz10aGlzLl9lZGdlSW5zZXRzLmNsb25lKCksdC5fY2FsY01hdHJpY2VzKCksdH0sTW4ubWluWm9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluWm9vbX0sTW4ubWluWm9vbS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluWm9vbSE9PXQmJih0aGlzLl9taW5ab29tPXQsdGhpcy56b29tPU1hdGgubWF4KHRoaXMuem9vbSx0KSl9LE1uLm1heFpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heFpvb219LE1uLm1heFpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21heFpvb20hPT10JiYodGhpcy5fbWF4Wm9vbT10LHRoaXMuem9vbT1NYXRoLm1pbih0aGlzLnpvb20sdCkpfSxNbi5taW5QaXRjaC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluUGl0Y2h9LE1uLm1pblBpdGNoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9taW5QaXRjaCE9PXQmJih0aGlzLl9taW5QaXRjaD10LHRoaXMucGl0Y2g9TWF0aC5tYXgodGhpcy5waXRjaCx0KSl9LE1uLm1heFBpdGNoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhQaXRjaH0sTW4ubWF4UGl0Y2guc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21heFBpdGNoIT09dCYmKHRoaXMuX21heFBpdGNoPXQsdGhpcy5waXRjaD1NYXRoLm1pbih0aGlzLnBpdGNoLHQpKX0sTW4ucmVuZGVyV29ybGRDb3BpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzfSxNbi5yZW5kZXJXb3JsZENvcGllcy5zZXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dD90PSEwOm51bGw9PT10JiYodD0hMSksdGhpcy5fcmVuZGVyV29ybGRDb3BpZXM9dH0sTW4ud29ybGRTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbGVTaXplKnRoaXMuc2NhbGV9LE1uLmNlbnRlck9mZnNldC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZW50ZXJQb2ludC5fc3ViKHRoaXMuc2l6ZS5fZGl2KDIpKX0sTW4uc2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuUG9pbnQodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LE1uLmJlYXJpbmcuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuLXRoaXMuYW5nbGUvTWF0aC5QSSoxODB9LE1uLmJlYXJpbmcuc2V0PWZ1bmN0aW9uKGUpe3ZhciByPS10LndyYXAoZSwtMTgwLDE4MCkqTWF0aC5QSS8xODA7dGhpcy5hbmdsZSE9PXImJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuYW5nbGU9cix0aGlzLl9jYWxjTWF0cmljZXMoKSx0aGlzLnJvdGF0aW9uTWF0cml4PXQuY3JlYXRlJDIoKSx0LnJvdGF0ZSh0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5hbmdsZSkpfSxNbi5waXRjaC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGl0Y2gvTWF0aC5QSSoxODB9LE1uLnBpdGNoLnNldD1mdW5jdGlvbihlKXt2YXIgcj10LmNsYW1wKGUsdGhpcy5taW5QaXRjaCx0aGlzLm1heFBpdGNoKS8xODAqTWF0aC5QSTt0aGlzLl9waXRjaCE9PXImJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3BpdGNoPXIsdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxNbi5mb3YuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvdi9NYXRoLlBJKjE4MH0sTW4uZm92LnNldD1mdW5jdGlvbih0KXt0PU1hdGgubWF4KC4wMSxNYXRoLm1pbig2MCx0KSksdGhpcy5fZm92IT09dCYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZm92PXQvMTgwKk1hdGguUEksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxNbi56b29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29tfSxNbi56b29tLnNldD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1pbihNYXRoLm1heCh0LHRoaXMubWluWm9vbSksdGhpcy5tYXhab29tKTt0aGlzLl96b29tIT09ZSYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fem9vbT1lLHRoaXMuc2NhbGU9dGhpcy56b29tU2NhbGUoZSksdGhpcy50aWxlWm9vbT1NYXRoLmZsb29yKGUpLHRoaXMuem9vbUZyYWN0aW9uPWUtdGhpcy50aWxlWm9vbSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE1uLmNlbnRlci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2VudGVyfSxNbi5jZW50ZXIuc2V0PWZ1bmN0aW9uKHQpe3QubGF0PT09dGhpcy5fY2VudGVyLmxhdCYmdC5sbmc9PT10aGlzLl9jZW50ZXIubG5nfHwodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9jZW50ZXI9dCx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE1uLnBhZGRpbmcuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMudG9KU09OKCl9LE1uLnBhZGRpbmcuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX2VkZ2VJbnNldHMuZXF1YWxzKHQpfHwodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9lZGdlSW5zZXRzLmludGVycG9sYXRlKHRoaXMuX2VkZ2VJbnNldHMsdCwxKSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE1uLmNlbnRlclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlSW5zZXRzLmdldENlbnRlcih0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sQW4ucHJvdG90eXBlLmlzUGFkZGluZ0VxdWFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9lZGdlSW5zZXRzLmVxdWFscyh0KX0sQW4ucHJvdG90eXBlLmludGVycG9sYXRlUGFkZGluZz1mdW5jdGlvbih0LGUscil7dGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9lZGdlSW5zZXRzLmludGVycG9sYXRlKHQsZSxyKSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0sQW4ucHJvdG90eXBlLmNvdmVyaW5nWm9vbUxldmVsPWZ1bmN0aW9uKHQpe3ZhciBlPSh0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKTtyZXR1cm4gTWF0aC5tYXgoMCxlKX0sQW4ucHJvdG90eXBlLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj1bbmV3IHQuVW53cmFwcGVkVGlsZUlEKDAsZSldO2lmKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKWZvcih2YXIgbj10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLDApKSxpPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsMCkpLGE9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpLG89dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQoMCx0aGlzLmhlaWdodCkpLHM9TWF0aC5mbG9vcihNYXRoLm1pbihuLngsaS54LGEueCxvLngpKSxsPU1hdGguZmxvb3IoTWF0aC5tYXgobi54LGkueCxhLngsby54KSksYz1zLTE7Yzw9bCsxO2MrKykwIT09YyYmci5wdXNoKG5ldyB0LlVud3JhcHBlZFRpbGVJRChjLGUpKTtyZXR1cm4gcn0sQW4ucHJvdG90eXBlLmNvdmVyaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb3ZlcmluZ1pvb21MZXZlbChlKSxuPXI7aWYodm9pZCAwIT09ZS5taW56b29tJiZyPGUubWluem9vbSlyZXR1cm5bXTt2b2lkIDAhPT1lLm1heHpvb20mJnI+ZS5tYXh6b29tJiYocj1lLm1heHpvb20pO3ZhciBpPXQuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQodGhpcy5jZW50ZXIpLGE9TWF0aC5wb3coMixyKSxvPVthKmkueCxhKmkueSwwXSxzPXduLmZyb21JbnZQcm9qZWN0aW9uTWF0cml4KHRoaXMuaW52UHJvak1hdHJpeCx0aGlzLndvcmxkU2l6ZSxyKSxsPWUubWluem9vbXx8MDt0aGlzLnBpdGNoPD02MCYmdGhpcy5fZWRnZUluc2V0cy50b3A8LjEmJihsPXIpO3ZhciBjPWZ1bmN0aW9uKHQpe3JldHVybnthYWJiOm5ldyBUbihbdCphLDAsMF0sWyh0KzEpKmEsYSwwXSksem9vbTowLHg6MCx5OjAsd3JhcDp0LGZ1bGx5VmlzaWJsZTohMX19LHU9W10sZj1bXSxoPXIscD1lLnJlcGFyc2VPdmVyc2NhbGVkP246cjtpZih0aGlzLl9yZW5kZXJXb3JsZENvcGllcylmb3IodmFyIGQ9MTtkPD0zO2QrKyl1LnB1c2goYygtZCkpLHUucHVzaChjKGQpKTtmb3IodS5wdXNoKGMoMCkpO3UubGVuZ3RoPjA7KXt2YXIgbT11LnBvcCgpLGc9bS54LHY9bS55LHk9bS5mdWxseVZpc2libGU7aWYoIXkpe3ZhciB4PW0uYWFiYi5pbnRlcnNlY3RzKHMpO2lmKDA9PT14KWNvbnRpbnVlO3k9Mj09PXh9dmFyIGI9bS5hYWJiLmRpc3RhbmNlWChvKSxfPW0uYWFiYi5kaXN0YW5jZVkobyksdz1NYXRoLm1heChNYXRoLmFicyhiKSxNYXRoLmFicyhfKSksVD0zKygxPDxoLW0uem9vbSktMjtpZihtLnpvb209PT1ofHx3PlQmJm0uem9vbT49bClmLnB1c2goe3RpbGVJRDpuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKG0uem9vbT09PWg/cDptLnpvb20sbS53cmFwLG0uem9vbSxnLHYpLGRpc3RhbmNlU3E6dC5zcXJMZW4oW29bMF0tLjUtZyxvWzFdLS41LXZdKX0pO2Vsc2UgZm9yKHZhciBrPTA7azw0O2srKyl7dmFyIEE9KGc8PDEpK2slMixNPSh2PDwxKSsoaz4+MSk7dS5wdXNoKHthYWJiOm0uYWFiYi5xdWFkcmFudChrKSx6b29tOm0uem9vbSsxLHg6QSx5Ok0sd3JhcDptLndyYXAsZnVsbHlWaXNpYmxlOnl9KX19cmV0dXJuIGYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZVNxLWUuZGlzdGFuY2VTcX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKX0sQW4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMucGl4ZWxzVG9HTFVuaXRzPVsyL3QsLTIvZV0sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCl9LE1uLnVubW9kaWZpZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VubW9kaWZpZWR9LEFuLnByb3RvdHlwZS56b29tU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9LEFuLnByb3RvdHlwZS5zY2FsZVpvb209ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfSxBbi5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LmNsYW1wKGUubGF0LC10aGlzLm1heFZhbGlkTGF0aXR1ZGUsdGhpcy5tYXhWYWxpZExhdGl0dWRlKTtyZXR1cm4gbmV3IHQuUG9pbnQodC5tZXJjYXRvclhmcm9tTG5nKGUubG5nKSp0aGlzLndvcmxkU2l6ZSx0Lm1lcmNhdG9yWWZyb21MYXQocikqdGhpcy53b3JsZFNpemUpfSxBbi5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoZS54L3RoaXMud29ybGRTaXplLGUueS90aGlzLndvcmxkU2l6ZSkudG9MbmdMYXQoKX0sTW4ucG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvamVjdCh0aGlzLmNlbnRlcil9LEFuLnByb3RvdHlwZS5zZXRMb2NhdGlvbkF0UG9pbnQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLnBvaW50Q29vcmRpbmF0ZShyKSxpPXRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpLGE9dGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUoZSksbz1uZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoYS54LShuLngtaS54KSxhLnktKG4ueS1pLnkpKTt0aGlzLmNlbnRlcj10aGlzLmNvb3JkaW5hdGVMb2NhdGlvbihvKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuY2VudGVyPXRoaXMuY2VudGVyLndyYXAoKSl9LEFuLnByb3RvdHlwZS5sb2NhdGlvblBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVQb2ludCh0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZSh0KSl9LEFuLnByb3RvdHlwZS5wb2ludExvY2F0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0KSl9LEFuLnByb3RvdHlwZS5sb2NhdGlvbkNvb3JkaW5hdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQoZSl9LEFuLnByb3RvdHlwZS5jb29yZGluYXRlTG9jYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9MbmdMYXQoKX0sQW4ucHJvdG90eXBlLnBvaW50Q29vcmRpbmF0ZT1mdW5jdGlvbihlKXt2YXIgcj1bZS54LGUueSwwLDFdLG49W2UueCxlLnksMSwxXTt0LnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKSx0LnRyYW5zZm9ybU1hdDQobixuLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTt2YXIgaT1yWzNdLGE9blszXSxvPXJbMF0vaSxzPW5bMF0vYSxsPXJbMV0vaSxjPW5bMV0vYSx1PXJbMl0vaSxmPW5bMl0vYSxoPXU9PT1mPzA6KDAtdSkvKGYtdSk7cmV0dXJuIG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSh0Lm51bWJlcihvLHMsaCkvdGhpcy53b3JsZFNpemUsdC5udW1iZXIobCxjLGgpL3RoaXMud29ybGRTaXplKX0sQW4ucHJvdG90eXBlLmNvb3JkaW5hdGVQb2ludD1mdW5jdGlvbihlKXt2YXIgcj1bZS54KnRoaXMud29ybGRTaXplLGUueSp0aGlzLndvcmxkU2l6ZSwwLDFdO3JldHVybiB0LnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXgpLG5ldyB0LlBvaW50KHJbMF0vclszXSxyWzFdL3JbM10pfSxBbi5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0LkxuZ0xhdEJvdW5kcykuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgdC5Qb2ludCgwLDApKSkuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgdC5Qb2ludCh0aGlzLndpZHRoLDApKSkuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgdC5Qb2ludCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSkpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQoMCx0aGlzLmhlaWdodCkpKX0sQW4ucHJvdG90eXBlLmdldE1heEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhdFJhbmdlJiYyPT09dGhpcy5sYXRSYW5nZS5sZW5ndGgmJnRoaXMubG5nUmFuZ2UmJjI9PT10aGlzLmxuZ1JhbmdlLmxlbmd0aD9uZXcgdC5MbmdMYXRCb3VuZHMoW3RoaXMubG5nUmFuZ2VbMF0sdGhpcy5sYXRSYW5nZVswXV0sW3RoaXMubG5nUmFuZ2VbMV0sdGhpcy5sYXRSYW5nZVsxXV0pOm51bGx9LEFuLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24odCl7dD8odGhpcy5sbmdSYW5nZT1bdC5nZXRXZXN0KCksdC5nZXRFYXN0KCldLHRoaXMubGF0UmFuZ2U9W3QuZ2V0U291dGgoKSx0LmdldE5vcnRoKCldLHRoaXMuX2NvbnN0cmFpbigpKToodGhpcy5sbmdSYW5nZT1udWxsLHRoaXMubGF0UmFuZ2U9Wy10aGlzLm1heFZhbGlkTGF0aXR1ZGUsdGhpcy5tYXhWYWxpZExhdGl0dWRlXSl9LEFuLnByb3RvdHlwZS5jYWxjdWxhdGVQb3NNYXRyaXg9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj0hMSk7dmFyIG49ZS5rZXksaT1yP3RoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZTp0aGlzLl9wb3NNYXRyaXhDYWNoZTtpZihpW25dKXJldHVybiBpW25dO3ZhciBhPWUuY2Fub25pY2FsLG89dGhpcy53b3JsZFNpemUvdGhpcy56b29tU2NhbGUoYS56KSxzPWEueCtNYXRoLnBvdygyLGEueikqZS53cmFwLGw9dC5pZGVudGl0eShuZXcgRmxvYXQ2NEFycmF5KDE2KSk7cmV0dXJuIHQudHJhbnNsYXRlKGwsbCxbcypvLGEueSpvLDBdKSx0LnNjYWxlKGwsbCxbby90LkVYVEVOVCxvL3QuRVhURU5ULDFdKSx0Lm11bHRpcGx5KGwscj90aGlzLmFsaWduZWRQcm9qTWF0cml4OnRoaXMucHJvak1hdHJpeCxsKSxpW25dPW5ldyBGbG9hdDMyQXJyYXkobCksaVtuXX0sQW4ucHJvdG90eXBlLmN1c3RvbUxheWVyTWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVyY2F0b3JNYXRyaXguc2xpY2UoKX0sQW4ucHJvdG90eXBlLl9jb25zdHJhaW49ZnVuY3Rpb24oKXtpZih0aGlzLmNlbnRlciYmdGhpcy53aWR0aCYmdGhpcy5oZWlnaHQmJiF0aGlzLl9jb25zdHJhaW5pbmcpe3RoaXMuX2NvbnN0cmFpbmluZz0hMDt2YXIgZSxyLG4saSxhPS05MCxvPTkwLHM9LTE4MCxsPTE4MCxjPXRoaXMuc2l6ZSx1PXRoaXMuX3VubW9kaWZpZWQ7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGY9dGhpcy5sYXRSYW5nZTthPXQubWVyY2F0b3JZZnJvbUxhdChmWzFdKSp0aGlzLndvcmxkU2l6ZSxlPShvPXQubWVyY2F0b3JZZnJvbUxhdChmWzBdKSp0aGlzLndvcmxkU2l6ZSktYTxjLnk/Yy55LyhvLWEpOjB9aWYodGhpcy5sbmdSYW5nZSl7dmFyIGg9dGhpcy5sbmdSYW5nZTtzPXQubWVyY2F0b3JYZnJvbUxuZyhoWzBdKSp0aGlzLndvcmxkU2l6ZSxyPShsPXQubWVyY2F0b3JYZnJvbUxuZyhoWzFdKSp0aGlzLndvcmxkU2l6ZSktczxjLng/Yy54LyhsLXMpOjB9dmFyIHA9dGhpcy5wb2ludCxkPU1hdGgubWF4KHJ8fDAsZXx8MCk7aWYoZClyZXR1cm4gdGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuUG9pbnQocj8obCtzKS8yOnAueCxlPyhvK2EpLzI6cC55KSksdGhpcy56b29tKz10aGlzLnNjYWxlWm9vbShkKSx0aGlzLl91bm1vZGlmaWVkPXUsdm9pZCh0aGlzLl9jb25zdHJhaW5pbmc9ITEpO2lmKHRoaXMubGF0UmFuZ2Upe3ZhciBtPXAueSxnPWMueS8yO20tZzxhJiYoaT1hK2cpLG0rZz5vJiYoaT1vLWcpfWlmKHRoaXMubG5nUmFuZ2Upe3ZhciB2PXAueCx5PWMueC8yO3YteTxzJiYobj1zK3kpLHYreT5sJiYobj1sLXkpfXZvaWQgMD09PW4mJnZvaWQgMD09PWl8fCh0aGlzLmNlbnRlcj10aGlzLnVucHJvamVjdChuZXcgdC5Qb2ludCh2b2lkIDAhPT1uP246cC54LHZvaWQgMCE9PWk/aTpwLnkpKSksdGhpcy5fdW5tb2RpZmllZD11LHRoaXMuX2NvbnN0cmFpbmluZz0hMX19LEFuLnByb3RvdHlwZS5fY2FsY01hdHJpY2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5oZWlnaHQpe3ZhciBlPXRoaXMuX2Zvdi8yLHI9dGhpcy5jZW50ZXJPZmZzZXQ7dGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlPS41L01hdGgudGFuKGUpKnRoaXMuaGVpZ2h0O3ZhciBuPU1hdGguUEkvMit0aGlzLl9waXRjaCxpPXRoaXMuX2ZvdiooLjUrci55L3RoaXMuaGVpZ2h0KSxhPU1hdGguc2luKGkpKnRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9NYXRoLnNpbih0LmNsYW1wKE1hdGguUEktbi1pLC4wMSxNYXRoLlBJLS4wMSkpLG89dGhpcy5wb2ludCxzPW8ueCxsPW8ueSxjPTEuMDEqKE1hdGguY29zKE1hdGguUEkvMi10aGlzLl9waXRjaCkqYSt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLHU9dGhpcy5oZWlnaHQvNTAsZj1uZXcgRmxvYXQ2NEFycmF5KDE2KTt0LnBlcnNwZWN0aXZlKGYsdGhpcy5fZm92LHRoaXMud2lkdGgvdGhpcy5oZWlnaHQsdSxjKSxmWzhdPTIqLXIueC90aGlzLndpZHRoLGZbOV09MipyLnkvdGhpcy5oZWlnaHQsdC5zY2FsZShmLGYsWzEsLTEsMV0pLHQudHJhbnNsYXRlKGYsZixbMCwwLC10aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2VdKSx0LnJvdGF0ZVgoZixmLHRoaXMuX3BpdGNoKSx0LnJvdGF0ZVooZixmLHRoaXMuYW5nbGUpLHQudHJhbnNsYXRlKGYsZixbLXMsLWwsMF0pLHRoaXMubWVyY2F0b3JNYXRyaXg9dC5zY2FsZShbXSxmLFt0aGlzLndvcmxkU2l6ZSx0aGlzLndvcmxkU2l6ZSx0aGlzLndvcmxkU2l6ZV0pLHQuc2NhbGUoZixmLFsxLDEsdC5tZXJjYXRvclpmcm9tQWx0aXR1ZGUoMSx0aGlzLmNlbnRlci5sYXQpKnRoaXMud29ybGRTaXplLDFdKSx0aGlzLnByb2pNYXRyaXg9Zix0aGlzLmludlByb2pNYXRyaXg9dC5pbnZlcnQoW10sdGhpcy5wcm9qTWF0cml4KTt2YXIgaD10aGlzLndpZHRoJTIvMixwPXRoaXMuaGVpZ2h0JTIvMixkPU1hdGguY29zKHRoaXMuYW5nbGUpLG09TWF0aC5zaW4odGhpcy5hbmdsZSksZz1zLU1hdGgucm91bmQocykrZCpoK20qcCx2PWwtTWF0aC5yb3VuZChsKStkKnArbSpoLHk9bmV3IEZsb2F0NjRBcnJheShmKTtpZih0LnRyYW5zbGF0ZSh5LHksW2c+LjU/Zy0xOmcsdj4uNT92LTE6diwwXSksdGhpcy5hbGlnbmVkUHJvak1hdHJpeD15LGY9dC5jcmVhdGUoKSx0LnNjYWxlKGYsZixbdGhpcy53aWR0aC8yLC10aGlzLmhlaWdodC8yLDFdKSx0LnRyYW5zbGF0ZShmLGYsWzEsLTEsMF0pLHRoaXMubGFiZWxQbGFuZU1hdHJpeD1mLGY9dC5jcmVhdGUoKSx0LnNjYWxlKGYsZixbMSwtMSwxXSksdC50cmFuc2xhdGUoZixmLFstMSwtMSwwXSksdC5zY2FsZShmLGYsWzIvdGhpcy53aWR0aCwyL3RoaXMuaGVpZ2h0LDFdKSx0aGlzLmdsQ29vcmRNYXRyaXg9Zix0aGlzLnBpeGVsTWF0cml4PXQubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5sYWJlbFBsYW5lTWF0cml4LHRoaXMucHJvak1hdHJpeCksIShmPXQuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMucGl4ZWxNYXRyaXgpKSl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBpbnZlcnQgbWF0cml4Iik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9Zix0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319fSxBbi5wcm90b3R5cGUubWF4UGl0Y2hTY2FsZUZhY3Rvcj1mdW5jdGlvbigpe2lmKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSlyZXR1cm4gMTt2YXIgZT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLDApKSxyPVtlLngqdGhpcy53b3JsZFNpemUsZS55KnRoaXMud29ybGRTaXplLDAsMV07cmV0dXJuIHQudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeClbM10vdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlfSxBbi5wcm90b3R5cGUuZ2V0Q2FtZXJhUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9waXRjaCxyPU1hdGgudGFuKGUpKih0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2V8fDEpO3JldHVybiB0aGlzLmNlbnRlclBvaW50LmFkZChuZXcgdC5Qb2ludCgwLHIpKX0sQW4ucHJvdG90eXBlLmdldENhbWVyYVF1ZXJ5R2VvbWV0cnk9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5nZXRDYW1lcmFQb2ludCgpO2lmKDE9PT1lLmxlbmd0aClyZXR1cm5bZVswXSxyXTtmb3IodmFyIG49ci54LGk9ci55LGE9ci54LG89ci55LHM9MCxsPWU7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdO249TWF0aC5taW4obixjLngpLGk9TWF0aC5taW4oaSxjLnkpLGE9TWF0aC5tYXgoYSxjLngpLG89TWF0aC5tYXgobyxjLnkpfXJldHVybltuZXcgdC5Qb2ludChuLGkpLG5ldyB0LlBvaW50KGEsaSksbmV3IHQuUG9pbnQoYSxvKSxuZXcgdC5Qb2ludChuLG8pLG5ldyB0LlBvaW50KG4saSldfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBbi5wcm90b3R5cGUsTW4pO3ZhciBTbj1mdW5jdGlvbihlKXt2YXIgcixuLGksYSxvO3RoaXMuX2hhc2hOYW1lPWUmJmVuY29kZVVSSUNvbXBvbmVudChlKSx0LmJpbmRBbGwoWyJfZ2V0Q3VycmVudEhhc2giLCJfb25IYXNoQ2hhbmdlIiwiX3VwZGF0ZUhhc2giXSx0aGlzKSx0aGlzLl91cGRhdGVIYXNoPShyPXRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLG49MzAwLGk9ITEsYT1udWxsLG89ZnVuY3Rpb24oKXthPW51bGwsaSYmKHIoKSxhPXNldFRpbWVvdXQobyxuKSxpPSExKX0sZnVuY3Rpb24oKXtyZXR1cm4gaT0hMCxhfHxvKCksYX0pfTtTbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcD1lLHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9uKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSx0aGlzfSxTbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlSGFzaCksY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZUhhc2goKSksZGVsZXRlIHRoaXMuX21hcCx0aGlzfSxTbi5wcm90b3R5cGUuZ2V0SGFzaFN0cmluZz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9tYXAuZ2V0Q2VudGVyKCksbj1NYXRoLnJvdW5kKDEwMCp0aGlzLl9tYXAuZ2V0Wm9vbSgpKS8xMDAsaT1NYXRoLmNlaWwoKG4qTWF0aC5MTjIrTWF0aC5sb2coNTEyLzM2MC8uNSkpL01hdGguTE4xMCksYT1NYXRoLnBvdygxMCxpKSxvPU1hdGgucm91bmQoci5sbmcqYSkvYSxzPU1hdGgucm91bmQoci5sYXQqYSkvYSxsPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksYz10aGlzLl9tYXAuZ2V0UGl0Y2goKSx1PSIiO2lmKHUrPWU/Ii8iK28rIi8iK3MrIi8iK246bisiLyIrcysiLyIrbywobHx8YykmJih1Kz0iLyIrTWF0aC5yb3VuZCgxMCpsKS8xMCksYyYmKHUrPSIvIitNYXRoLnJvdW5kKGMpKSx0aGlzLl9oYXNoTmFtZSl7dmFyIGY9dGhpcy5faGFzaE5hbWUsaD0hMSxwPXQud2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSkuc3BsaXQoIiYiKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3BsaXQoIj0iKVswXTtyZXR1cm4gZT09PWY/KGg9ITAsZSsiPSIrdSk6dH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3JldHVybiBofHxwLnB1c2goZisiPSIrdSksIiMiK3Auam9pbigiJiIpfXJldHVybiIjIit1fSxTbi5wcm90b3R5cGUuX2dldEN1cnJlbnRIYXNoPWZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLG49dC53aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKCIjIiwiIik7cmV0dXJuIHRoaXMuX2hhc2hOYW1lPyhuLnNwbGl0KCImIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiPSIpfSkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3RbMF09PT1yLl9oYXNoTmFtZSYmKGU9dCl9KSksKGUmJmVbMV18fCIiKS5zcGxpdCgiLyIpKTpuLnNwbGl0KCIvIil9LFNuLnByb3RvdHlwZS5fb25IYXNoQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0Q3VycmVudEhhc2goKTtpZih0Lmxlbmd0aD49MyYmIXQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQpfSkpKXt2YXIgZT10aGlzLl9tYXAuZHJhZ1JvdGF0ZS5pc0VuYWJsZWQoKSYmdGhpcy5fbWFwLnRvdWNoWm9vbVJvdGF0ZS5pc0VuYWJsZWQoKT8rKHRbM118fDApOnRoaXMuX21hcC5nZXRCZWFyaW5nKCk7cmV0dXJuIHRoaXMuX21hcC5qdW1wVG8oe2NlbnRlcjpbK3RbMl0sK3RbMV1dLHpvb206K3RbMF0sYmVhcmluZzplLHBpdGNoOisodFs0XXx8MCl9KSwhMH1yZXR1cm4hMX0sU24ucHJvdG90eXBlLl91cGRhdGVIYXNoVW50aHJvdHRsZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEhhc2hTdHJpbmcoKTt0cnl7dC53aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUodC53aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixlKX1jYXRjaCh0KXt9fTt2YXIgRW49e2xpbmVhcml0eTouMyxlYXNpbmc6dC5iZXppZXIoMCwwLC4zLDEpfSxMbj10LmV4dGVuZCh7ZGVjZWxlcmF0aW9uOjI1MDAsbWF4U3BlZWQ6MTQwMH0sRW4pLENuPXQuZXh0ZW5kKHtkZWNlbGVyYXRpb246MjAsbWF4U3BlZWQ6MTQwMH0sRW4pLFBuPXQuZXh0ZW5kKHtkZWNlbGVyYXRpb246MWUzLG1heFNwZWVkOjM2MH0sRW4pLEluPXQuZXh0ZW5kKHtkZWNlbGVyYXRpb246MWUzLG1heFNwZWVkOjkwfSxFbiksT249ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5jbGVhcigpfTtmdW5jdGlvbiB6bih0LGUpeyghdC5kdXJhdGlvbnx8dC5kdXJhdGlvbjxlLmR1cmF0aW9uKSYmKHQuZHVyYXRpb249ZS5kdXJhdGlvbix0LmVhc2luZz1lLmVhc2luZyl9ZnVuY3Rpb24gRG4oZSxyLG4pe3ZhciBpPW4ubWF4U3BlZWQsYT1uLmxpbmVhcml0eSxvPW4uZGVjZWxlcmF0aW9uLHM9dC5jbGFtcChlKmEvKHIvMWUzKSwtaSxpKSxsPU1hdGguYWJzKHMpLyhvKmEpO3JldHVybntlYXNpbmc6bi5lYXNpbmcsZHVyYXRpb246MWUzKmwsYW1vdW50OnMqKGwvMil9fU9uLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2luZXJ0aWFCdWZmZXI9W119LE9uLnByb3RvdHlwZS5yZWNvcmQ9ZnVuY3Rpb24oZSl7dGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksdGhpcy5faW5lcnRpYUJ1ZmZlci5wdXNoKHt0aW1lOnQuYnJvd3Nlci5ub3coKSxzZXR0aW5nczplfSl9LE9uLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2luZXJ0aWFCdWZmZXIscj10LmJyb3dzZXIubm93KCk7ZS5sZW5ndGg+MCYmci1lWzBdLnRpbWU+MTYwOyllLnNoaWZ0KCl9LE9uLnByb3RvdHlwZS5fb25Nb3ZlRW5kPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLCEodGhpcy5faW5lcnRpYUJ1ZmZlci5sZW5ndGg8Mikpe2Zvcih2YXIgcj17em9vbTowLGJlYXJpbmc6MCxwaXRjaDowLHBhbjpuZXcgdC5Qb2ludCgwLDApLHBpbmNoQXJvdW5kOnZvaWQgMCxhcm91bmQ6dm9pZCAwfSxuPTAsaT10aGlzLl9pbmVydGlhQnVmZmVyO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXS5zZXR0aW5ncztyLnpvb20rPWEuem9vbURlbHRhfHwwLHIuYmVhcmluZys9YS5iZWFyaW5nRGVsdGF8fDAsci5waXRjaCs9YS5waXRjaERlbHRhfHwwLGEucGFuRGVsdGEmJnIucGFuLl9hZGQoYS5wYW5EZWx0YSksYS5hcm91bmQmJihyLmFyb3VuZD1hLmFyb3VuZCksYS5waW5jaEFyb3VuZCYmKHIucGluY2hBcm91bmQ9YS5waW5jaEFyb3VuZCl9dmFyIG89dGhpcy5faW5lcnRpYUJ1ZmZlclt0aGlzLl9pbmVydGlhQnVmZmVyLmxlbmd0aC0xXS50aW1lLXRoaXMuX2luZXJ0aWFCdWZmZXJbMF0udGltZSxzPXt9O2lmKHIucGFuLm1hZygpKXt2YXIgbD1EbihyLnBhbi5tYWcoKSxvLHQuZXh0ZW5kKHt9LExuLGV8fHt9KSk7cy5vZmZzZXQ9ci5wYW4ubXVsdChsLmFtb3VudC9yLnBhbi5tYWcoKSkscy5jZW50ZXI9dGhpcy5fbWFwLnRyYW5zZm9ybS5jZW50ZXIsem4ocyxsKX1pZihyLnpvb20pe3ZhciBjPURuKHIuem9vbSxvLENuKTtzLnpvb209dGhpcy5fbWFwLnRyYW5zZm9ybS56b29tK2MuYW1vdW50LHpuKHMsYyl9aWYoci5iZWFyaW5nKXt2YXIgdT1EbihyLmJlYXJpbmcsbyxQbik7cy5iZWFyaW5nPXRoaXMuX21hcC50cmFuc2Zvcm0uYmVhcmluZyt0LmNsYW1wKHUuYW1vdW50LC0xNzksMTc5KSx6bihzLHUpfWlmKHIucGl0Y2gpe3ZhciBmPURuKHIucGl0Y2gsbyxJbik7cy5waXRjaD10aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoK2YuYW1vdW50LHpuKHMsZil9aWYocy56b29tfHxzLmJlYXJpbmcpe3ZhciBoPXZvaWQgMD09PXIucGluY2hBcm91bmQ/ci5hcm91bmQ6ci5waW5jaEFyb3VuZDtzLmFyb3VuZD1oP3RoaXMuX21hcC51bnByb2plY3QoaCk6dGhpcy5fbWFwLmdldENlbnRlcigpfXJldHVybiB0aGlzLmNsZWFyKCksdC5leHRlbmQocyx7bm9Nb3ZlU3RhcnQ6ITB9KX19O3ZhciBSbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4saSxhLG8pe3ZvaWQgMD09PW8mJihvPXt9KTt2YXIgcz1yLm1vdXNlUG9zKGkuZ2V0Q2FudmFzQ29udGFpbmVyKCksYSksbD1pLnVucHJvamVjdChzKTtlLmNhbGwodGhpcyxuLHQuZXh0ZW5kKHtwb2ludDpzLGxuZ0xhdDpsLG9yaWdpbmFsRXZlbnQ6YX0sbykpLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy50YXJnZXQ9aX1lJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bjt2YXIgaT17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIG4ucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0saS5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSxpKSxufSh0LkV2ZW50KSxGbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4saSxhKXt2YXIgbz0idG91Y2hlbmQiPT09bj9hLmNoYW5nZWRUb3VjaGVzOmEudG91Y2hlcyxzPXIudG91Y2hQb3MoaS5nZXRDYW52YXNDb250YWluZXIoKSxvKSxsPXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaS51bnByb2plY3QodCl9KSksYz1zLnJlZHVjZSgoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuYWRkKGUuZGl2KG4ubGVuZ3RoKSl9KSxuZXcgdC5Qb2ludCgwLDApKSx1PWkudW5wcm9qZWN0KGMpO2UuY2FsbCh0aGlzLG4se3BvaW50czpzLHBvaW50OmMsbG5nTGF0czpsLGxuZ0xhdDp1LG9yaWdpbmFsRXZlbnQ6YX0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9ZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW47dmFyIGk9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LGkuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0odC5FdmVudCksQm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSx7b3JpZ2luYWxFdmVudDpufSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGUucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sci5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfSh0LkV2ZW50KSxObj1mdW5jdGlvbih0LGUpe3RoaXMuX21hcD10LHRoaXMuX2NsaWNrVG9sZXJhbmNlPWUuY2xpY2tUb2xlcmFuY2V9O05uLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9tb3VzZWRvd25Qb3N9LE5uLnByb3RvdHlwZS53aGVlbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBCbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9tb3VzZWRvd25Qb3M9ZSx0aGlzLl9maXJlUHJldmVudGFibGUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUubW91c2V1cD1mdW5jdGlvbih0KXt0aGlzLl9tYXAuZmlyZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5jbGljaz1mdW5jdGlvbih0LGUpe3RoaXMuX21vdXNlZG93blBvcyYmdGhpcy5fbW91c2Vkb3duUG9zLmRpc3QoZSk+PXRoaXMuX2NsaWNrVG9sZXJhbmNlfHx0aGlzLl9tYXAuZmlyZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5kYmxjbGljaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLm1vdXNlb3Zlcj1mdW5jdGlvbih0KXt0aGlzLl9tYXAuZmlyZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5tb3VzZW91dD1mdW5jdGlvbih0KXt0aGlzLl9tYXAuZmlyZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IEZuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBGbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBGbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLnRvdWNoY2FuY2VsPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBGbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLl9maXJlUHJldmVudGFibGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwLmZpcmUodCksdC5kZWZhdWx0UHJldmVudGVkKXJldHVybnt9fSxObi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LE5uLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiExfSxObi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7fSxObi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe307dmFyIGpuPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fTtqbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheUNvbnRleHRNZW51PSExLGRlbGV0ZSB0aGlzLl9jb250ZXh0TWVudUV2ZW50fSxqbi5wcm90b3R5cGUubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sam4ucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbigpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU9ITB9LGpuLnByb3RvdHlwZS5tb3VzZXVwPWZ1bmN0aW9uKCl7dGhpcy5fZGVsYXlDb250ZXh0TWVudT0hMSx0aGlzLl9jb250ZXh0TWVudUV2ZW50JiYodGhpcy5fbWFwLmZpcmUobmV3IFJuKCJjb250ZXh0bWVudSIsdGhpcy5fbWFwLHRoaXMuX2NvbnRleHRNZW51RXZlbnQpKSxkZWxldGUgdGhpcy5fY29udGV4dE1lbnVFdmVudCl9LGpuLnByb3RvdHlwZS5jb250ZXh0bWVudT1mdW5jdGlvbih0KXt0aGlzLl9kZWxheUNvbnRleHRNZW51P3RoaXMuX2NvbnRleHRNZW51RXZlbnQ9dDp0aGlzLl9tYXAuZmlyZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSksdGhpcy5fbWFwLmxpc3RlbnMoImNvbnRleHRtZW51IikmJnQucHJldmVudERlZmF1bHQoKX0sam4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEwfSxqbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sam4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe30sam4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt9O3ZhciBVbj1mdW5jdGlvbih0LGUpe3RoaXMuX21hcD10LHRoaXMuX2VsPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyPXQuZ2V0Q29udGFpbmVyKCksdGhpcy5fY2xpY2tUb2xlcmFuY2U9ZS5jbGlja1RvbGVyYW5jZXx8MX07ZnVuY3Rpb24gVm4odCxlKXtmb3IodmFyIHI9e30sbj0wO248dC5sZW5ndGg7bisrKXJbdFtuXS5pZGVudGlmaWVyXT1lW25dO3JldHVybiByfVVuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LFVuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfSxVbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VuYWJsZWQ9ITApfSxVbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sVW4ucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbih0LGUpe3RoaXMuaXNFbmFibGVkKCkmJnQuc2hpZnRLZXkmJjA9PT10LmJ1dHRvbiYmKHIuZGlzYWJsZURyYWcoKSx0aGlzLl9zdGFydFBvcz10aGlzLl9sYXN0UG9zPWUsdGhpcy5fYWN0aXZlPSEwKX0sVW4ucHJvdG90eXBlLm1vdXNlbW92ZVdpbmRvdz1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX2FjdGl2ZSl7dmFyIG49ZTtpZighKHRoaXMuX2xhc3RQb3MuZXF1YWxzKG4pfHwhdGhpcy5fYm94JiZuLmRpc3QodGhpcy5fc3RhcnRQb3MpPHRoaXMuX2NsaWNrVG9sZXJhbmNlKSl7dmFyIGk9dGhpcy5fc3RhcnRQb3M7dGhpcy5fbGFzdFBvcz1uLHRoaXMuX2JveHx8KHRoaXMuX2JveD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtYm94em9vbSIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tc3RhcnQiLHQpKTt2YXIgYT1NYXRoLm1pbihpLngsbi54KSxvPU1hdGgubWF4KGkueCxuLngpLHM9TWF0aC5taW4oaS55LG4ueSksbD1NYXRoLm1heChpLnksbi55KTtyLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsInRyYW5zbGF0ZSgiK2ErInB4LCIrcysicHgpIiksdGhpcy5fYm94LnN0eWxlLndpZHRoPW8tYSsicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9bC1zKyJweCJ9fX0sVW4ucHJvdG90eXBlLm1vdXNldXBXaW5kb3c9ZnVuY3Rpb24oZSxuKXt2YXIgaT10aGlzO2lmKHRoaXMuX2FjdGl2ZSYmMD09PWUuYnV0dG9uKXt2YXIgYT10aGlzLl9zdGFydFBvcyxvPW47aWYodGhpcy5yZXNldCgpLHIuc3VwcHJlc3NDbGljaygpLGEueCE9PW8ueHx8YS55IT09by55KXJldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiYm94em9vbWVuZCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx7Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0LmZpdFNjcmVlbkNvb3JkaW5hdGVzKGEsbyxpLl9tYXAuZ2V0QmVhcmluZygpLHtsaW5lYXI6ITB9KX19O3RoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsZSl9fSxVbi5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmUmJjI3PT09dC5rZXlDb2RlJiYodGhpcy5yZXNldCgpLHRoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsdCkpfSxVbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWNyb3NzaGFpciIpLHRoaXMuX2JveCYmKHIucmVtb3ZlKHRoaXMuX2JveCksdGhpcy5fYm94PW51bGwpLHIuZW5hYmxlRHJhZygpLGRlbGV0ZSB0aGlzLl9zdGFydFBvcyxkZWxldGUgdGhpcy5fbGFzdFBvc30sVW4ucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSx7b3JpZ2luYWxFdmVudDpyfSkpfTt2YXIgSG49ZnVuY3Rpb24odCl7dGhpcy5yZXNldCgpLHRoaXMubnVtVG91Y2hlcz10Lm51bVRvdWNoZXN9O0huLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNlbnRyb2lkLGRlbGV0ZSB0aGlzLnN0YXJ0VGltZSxkZWxldGUgdGhpcy50b3VjaGVzLHRoaXMuYWJvcnRlZD0hMX0sSG4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24oZSxyLG4peyh0aGlzLmNlbnRyb2lkfHxuLmxlbmd0aD50aGlzLm51bVRvdWNoZXMpJiYodGhpcy5hYm9ydGVkPSEwKSx0aGlzLmFib3J0ZWR8fCh2b2lkIDA9PT10aGlzLnN0YXJ0VGltZSYmKHRoaXMuc3RhcnRUaW1lPWUudGltZVN0YW1wKSxuLmxlbmd0aD09PXRoaXMubnVtVG91Y2hlcyYmKHRoaXMuY2VudHJvaWQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPW5ldyB0LlBvaW50KDAsMCksbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ci5fYWRkKGEpfXJldHVybiByLmRpdihlLmxlbmd0aCl9KHIpLHRoaXMudG91Y2hlcz1WbihuLHIpKSl9LEhuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmFib3J0ZWQmJnRoaXMuY2VudHJvaWQpe3ZhciBuPVZuKHIsZSk7Zm9yKHZhciBpIGluIHRoaXMudG91Y2hlcyl7dmFyIGE9dGhpcy50b3VjaGVzW2ldLG89bltpXTsoIW98fG8uZGlzdChhKT4zMCkmJih0aGlzLmFib3J0ZWQ9ITApfX19LEhuLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7aWYoKCF0aGlzLmNlbnRyb2lkfHx0LnRpbWVTdGFtcC10aGlzLnN0YXJ0VGltZT41MDApJiYodGhpcy5hYm9ydGVkPSEwKSwwPT09ci5sZW5ndGgpe3ZhciBuPSF0aGlzLmFib3J0ZWQmJnRoaXMuY2VudHJvaWQ7aWYodGhpcy5yZXNldCgpLG4pcmV0dXJuIG59fTt2YXIgcW49ZnVuY3Rpb24odCl7dGhpcy5zaW5nbGVUYXA9bmV3IEhuKHQpLHRoaXMubnVtVGFwcz10Lm51bVRhcHMsdGhpcy5yZXNldCgpfTtxbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmxhc3RUaW1lPTEvMCxkZWxldGUgdGhpcy5sYXN0VGFwLHRoaXMuY291bnQ9MCx0aGlzLnNpbmdsZVRhcC5yZXNldCgpfSxxbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7dGhpcy5zaW5nbGVUYXAudG91Y2hzdGFydCh0LGUscil9LHFuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2luZ2xlVGFwLnRvdWNobW92ZSh0LGUscil9LHFuLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zaW5nbGVUYXAudG91Y2hlbmQodCxlLHIpO2lmKG4pe3ZhciBpPXQudGltZVN0YW1wLXRoaXMubGFzdFRpbWU8NTAwLGE9IXRoaXMubGFzdFRhcHx8dGhpcy5sYXN0VGFwLmRpc3Qobik8MzA7aWYoaSYmYXx8dGhpcy5yZXNldCgpLHRoaXMuY291bnQrKyx0aGlzLmxhc3RUaW1lPXQudGltZVN0YW1wLHRoaXMubGFzdFRhcD1uLHRoaXMuY291bnQ9PT10aGlzLm51bVRhcHMpcmV0dXJuIHRoaXMucmVzZXQoKSxufX07dmFyIEduPWZ1bmN0aW9uKCl7dGhpcy5fem9vbUluPW5ldyBxbih7bnVtVG91Y2hlczoxLG51bVRhcHM6Mn0pLHRoaXMuX3pvb21PdXQ9bmV3IHFuKHtudW1Ub3VjaGVzOjIsbnVtVGFwczoxfSksdGhpcy5yZXNldCgpfTtHbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fem9vbUluLnJlc2V0KCksdGhpcy5fem9vbU91dC5yZXNldCgpfSxHbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7dGhpcy5fem9vbUluLnRvdWNoc3RhcnQodCxlLHIpLHRoaXMuX3pvb21PdXQudG91Y2hzdGFydCh0LGUscil9LEduLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3pvb21Jbi50b3VjaG1vdmUodCxlLHIpLHRoaXMuX3pvb21PdXQudG91Y2htb3ZlKHQsZSxyKX0sR24ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9dGhpcy5fem9vbUluLnRvdWNoZW5kKHQsZSxyKSxhPXRoaXMuX3pvb21PdXQudG91Y2hlbmQodCxlLHIpO3JldHVybiBpPyh0aGlzLl9hY3RpdmU9ITAsdC5wcmV2ZW50RGVmYXVsdCgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzZXQoKX0pLDApLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWFzZVRvKHtkdXJhdGlvbjozMDAsem9vbTplLmdldFpvb20oKSsxLGFyb3VuZDplLnVucHJvamVjdChpKX0se29yaWdpbmFsRXZlbnQ6dH0pfX0pOmE/KHRoaXMuX2FjdGl2ZT0hMCx0LnByZXZlbnREZWZhdWx0KCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXNldCgpfSksMCkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5lYXNlVG8oe2R1cmF0aW9uOjMwMCx6b29tOmUuZ2V0Wm9vbSgpLTEsYXJvdW5kOmUudW5wcm9qZWN0KGEpfSx7b3JpZ2luYWxFdmVudDp0fSl9fSk6dm9pZCAwfSxHbi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LEduLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxHbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxHbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LEduLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBZbj1mdW5jdGlvbih0KXt0aGlzLnJlc2V0KCksdGhpcy5fY2xpY2tUb2xlcmFuY2U9dC5jbGlja1RvbGVyYW5jZXx8MX07WW4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX21vdmVkPSExLGRlbGV0ZSB0aGlzLl9sYXN0UG9pbnQsZGVsZXRlIHRoaXMuX2V2ZW50QnV0dG9ufSxZbi5wcm90b3R5cGUuX2NvcnJlY3RCdXR0b249ZnVuY3Rpb24odCxlKXtyZXR1cm4hMX0sWW4ucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJue319LFluLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24odCxlKXtpZighdGhpcy5fbGFzdFBvaW50KXt2YXIgbj1yLm1vdXNlQnV0dG9uKHQpO3RoaXMuX2NvcnJlY3RCdXR0b24odCxuKSYmKHRoaXMuX2xhc3RQb2ludD1lLHRoaXMuX2V2ZW50QnV0dG9uPW4pfX0sWW4ucHJvdG90eXBlLm1vdXNlbW92ZVdpbmRvdz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xhc3RQb2ludDtpZihyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX21vdmVkfHwhKGUuZGlzdChyKTx0aGlzLl9jbGlja1RvbGVyYW5jZSkpKXJldHVybiB0aGlzLl9tb3ZlZD0hMCx0aGlzLl9sYXN0UG9pbnQ9ZSx0aGlzLl9tb3ZlKHIsZSl9LFluLnByb3RvdHlwZS5tb3VzZXVwV2luZG93PWZ1bmN0aW9uKHQpe3IubW91c2VCdXR0b24odCk9PT10aGlzLl9ldmVudEJ1dHRvbiYmKHRoaXMuX21vdmVkJiZyLnN1cHByZXNzQ2xpY2soKSx0aGlzLnJlc2V0KCkpfSxZbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sWW4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sWW4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxZbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgV249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5tb3VzZWRvd24uY2FsbCh0aGlzLGUsciksdGhpcy5fbGFzdFBvaW50JiYodGhpcy5fYWN0aXZlPSEwKX0sZS5wcm90b3R5cGUuX2NvcnJlY3RCdXR0b249ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWUmJiF0LmN0cmxLZXl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2Fyb3VuZDplLHBhbkRlbHRhOmUuc3ViKHQpfX0sZX0oWW4pLFhuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX2NvcnJlY3RCdXR0b249ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWUmJnQuY3RybEtleXx8Mj09PWV9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9LjgqKGUueC10LngpO2lmKHIpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7YmVhcmluZ0RlbHRhOnJ9fSxlLnByb3RvdHlwZS5jb250ZXh0bWVudT1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LGV9KFluKSxabj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9jb3JyZWN0QnV0dG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lJiZ0LmN0cmxLZXl8fDI9PT1lfSxlLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPS0uNSooZS55LXQueSk7aWYocilyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHtwaXRjaERlbHRhOnJ9fSxlLnByb3RvdHlwZS5jb250ZXh0bWVudT1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LGV9KFluKSxKbj1mdW5jdGlvbih0KXt0aGlzLl9taW5Ub3VjaGVzPTEsdGhpcy5fY2xpY2tUb2xlcmFuY2U9dC5jbGlja1RvbGVyYW5jZXx8MSx0aGlzLnJlc2V0KCl9O0puLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl90b3VjaGVzPXt9LHRoaXMuX3N1bT1uZXcgdC5Qb2ludCgwLDApfSxKbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZVRyYW5zZm9ybSh0LGUscil9LEpuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2FjdGl2ZSlyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2NhbGN1bGF0ZVRyYW5zZm9ybSh0LGUscil9LEpuLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKHQsZSxyKSx0aGlzLl9hY3RpdmUmJnIubGVuZ3RoPHRoaXMuX21pblRvdWNoZXMmJnRoaXMucmVzZXQoKX0sSm4ucHJvdG90eXBlLnRvdWNoY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfSxKbi5wcm90b3R5cGUuX2NhbGN1bGF0ZVRyYW5zZm9ybT1mdW5jdGlvbihlLHIsbil7bi5sZW5ndGg+MCYmKHRoaXMuX2FjdGl2ZT0hMCk7dmFyIGk9Vm4obixyKSxhPW5ldyB0LlBvaW50KDAsMCksbz1uZXcgdC5Qb2ludCgwLDApLHM9MDtmb3IodmFyIGwgaW4gaSl7dmFyIGM9aVtsXSx1PXRoaXMuX3RvdWNoZXNbbF07dSYmKGEuX2FkZChjKSxvLl9hZGQoYy5zdWIodSkpLHMrKyxpW2xdPWMpfWlmKHRoaXMuX3RvdWNoZXM9aSwhKHM8dGhpcy5fbWluVG91Y2hlcykmJm8ubWFnKCkpe3ZhciBmPW8uZGl2KHMpO2lmKHRoaXMuX3N1bS5fYWRkKGYpLCEodGhpcy5fc3VtLm1hZygpPHRoaXMuX2NsaWNrVG9sZXJhbmNlKSlyZXR1cm57YXJvdW5kOmEuZGl2KHMpLHBhbkRlbHRhOmZ9fX0sSm4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LEpuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LEpuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sSm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIEtuPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfTtmdW5jdGlvbiBRbih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pZGVudGlmaWVyPT09cilyZXR1cm4gZVtuXX1Lbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsZGVsZXRlIHRoaXMuX2ZpcnN0VHdvVG91Y2hlc30sS24ucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbih0KXt9LEtuLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUscil7cmV0dXJue319LEtuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9maXJzdFR3b1RvdWNoZXN8fHIubGVuZ3RoPDJ8fCh0aGlzLl9maXJzdFR3b1RvdWNoZXM9W3JbMF0uaWRlbnRpZmllcixyWzFdLmlkZW50aWZpZXJdLHRoaXMuX3N0YXJ0KFtlWzBdLGVbMV1dKSl9LEtuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2ZpcnN0VHdvVG91Y2hlcyl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXRoaXMuX2ZpcnN0VHdvVG91Y2hlcyxpPW5bMF0sYT1uWzFdLG89UW4ocixlLGkpLHM9UW4ocixlLGEpO2lmKG8mJnMpe3ZhciBsPXRoaXMuX2Fyb3VuZENlbnRlcj9udWxsOm8uYWRkKHMpLmRpdigyKTtyZXR1cm4gdGhpcy5fbW92ZShbbyxzXSxsLHQpfX19LEtuLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5fZmlyc3RUd29Ub3VjaGVzKXt2YXIgaT10aGlzLl9maXJzdFR3b1RvdWNoZXMsYT1pWzBdLG89aVsxXSxzPVFuKG4sZSxhKSxsPVFuKG4sZSxvKTtzJiZsfHwodGhpcy5fYWN0aXZlJiZyLnN1cHByZXNzQ2xpY2soKSx0aGlzLnJlc2V0KCkpfX0sS24ucHJvdG90eXBlLnRvdWNoY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfSxLbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fYXJvdW5kQ2VudGVyPSEhdCYmImNlbnRlciI9PT10LmFyb3VuZH0sS24ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sS24ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxLbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTtmdW5jdGlvbiAkbih0LGUpe3JldHVybiBNYXRoLmxvZyh0L2UpL01hdGguTE4yfXZhciB0aT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKSxkZWxldGUgdGhpcy5fZGlzdGFuY2UsZGVsZXRlIHRoaXMuX3N0YXJ0RGlzdGFuY2V9LGUucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbih0KXt0aGlzLl9zdGFydERpc3RhbmNlPXRoaXMuX2Rpc3RhbmNlPXRbMF0uZGlzdCh0WzFdKX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9kaXN0YW5jZTtpZih0aGlzLl9kaXN0YW5jZT10WzBdLmRpc3QodFsxXSksdGhpcy5fYWN0aXZlfHwhKE1hdGguYWJzKCRuKHRoaXMuX2Rpc3RhbmNlLHRoaXMuX3N0YXJ0RGlzdGFuY2UpKTwuMSkpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7em9vbURlbHRhOiRuKHRoaXMuX2Rpc3RhbmNlLHIpLHBpbmNoQXJvdW5kOmV9fSxlfShLbik7ZnVuY3Rpb24gZWkodCxlKXtyZXR1cm4gMTgwKnQuYW5nbGVXaXRoKGUpL01hdGguUEl9dmFyIHJpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpLGRlbGV0ZSB0aGlzLl9taW5EaWFtZXRlcixkZWxldGUgdGhpcy5fc3RhcnRWZWN0b3IsZGVsZXRlIHRoaXMuX3ZlY3Rvcn0sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0VmVjdG9yPXRoaXMuX3ZlY3Rvcj10WzBdLnN1Yih0WzFdKSx0aGlzLl9taW5EaWFtZXRlcj10WzBdLmRpc3QodFsxXSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmVjdG9yO2lmKHRoaXMuX3ZlY3Rvcj10WzBdLnN1Yih0WzFdKSx0aGlzLl9hY3RpdmV8fCF0aGlzLl9pc0JlbG93VGhyZXNob2xkKHRoaXMuX3ZlY3RvcikpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7YmVhcmluZ0RlbHRhOmVpKHRoaXMuX3ZlY3RvcixyKSxwaW5jaEFyb3VuZDplfX0sZS5wcm90b3R5cGUuX2lzQmVsb3dUaHJlc2hvbGQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluRGlhbWV0ZXI9TWF0aC5taW4odGhpcy5fbWluRGlhbWV0ZXIsdC5tYWcoKSk7dmFyIGU9MjUvKE1hdGguUEkqdGhpcy5fbWluRGlhbWV0ZXIpKjM2MCxyPWVpKHQsdGhpcy5fc3RhcnRWZWN0b3IpO3JldHVybiBNYXRoLmFicyhyKTxlfSxlfShLbik7ZnVuY3Rpb24gbmkodCl7cmV0dXJuIE1hdGguYWJzKHQueSk+TWF0aC5hYnModC54KX12YXIgaWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fdmFsaWQ9dm9pZCAwLGRlbGV0ZSB0aGlzLl9maXJzdE1vdmUsZGVsZXRlIHRoaXMuX2xhc3RQb2ludHN9LGUucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbih0KXt0aGlzLl9sYXN0UG9pbnRzPXQsbmkodFswXS5zdWIodFsxXSkpJiYodGhpcy5fdmFsaWQ9ITEpfSxlLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dFswXS5zdWIodGhpcy5fbGFzdFBvaW50c1swXSksaT10WzFdLnN1Yih0aGlzLl9sYXN0UG9pbnRzWzFdKTtpZih0aGlzLl92YWxpZD10aGlzLmdlc3R1cmVCZWdpbnNWZXJ0aWNhbGx5KG4saSxyLnRpbWVTdGFtcCksdGhpcy5fdmFsaWQpe3RoaXMuX2xhc3RQb2ludHM9dCx0aGlzLl9hY3RpdmU9ITA7cmV0dXJue3BpdGNoRGVsdGE6LS41Kigobi55K2kueSkvMil9fX0sZS5wcm90b3R5cGUuZ2VzdHVyZUJlZ2luc1ZlcnRpY2FsbHk9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMCE9PXRoaXMuX3ZhbGlkKXJldHVybiB0aGlzLl92YWxpZDt2YXIgbj10Lm1hZygpPj0yLGk9ZS5tYWcoKT49MjtpZihufHxpKXtpZighbnx8IWkpcmV0dXJuIHZvaWQgMD09PXRoaXMuX2ZpcnN0TW92ZSYmKHRoaXMuX2ZpcnN0TW92ZT1yKSxyLXRoaXMuX2ZpcnN0TW92ZTwxMDAmJnZvaWQgMDt2YXIgYT10Lnk+MD09ZS55PjA7cmV0dXJuIG5pKHQpJiZuaShlKSYmYX19LGV9KEtuKSxhaT17cGFuU3RlcDoxMDAsYmVhcmluZ1N0ZXA6MTUscGl0Y2hTdGVwOjEwfSxvaT1mdW5jdGlvbigpe3ZhciB0PWFpO3RoaXMuX3BhblN0ZXA9dC5wYW5TdGVwLHRoaXMuX2JlYXJpbmdTdGVwPXQuYmVhcmluZ1N0ZXAsdGhpcy5fcGl0Y2hTdGVwPXQucGl0Y2hTdGVwfTtmdW5jdGlvbiBzaSh0KXtyZXR1cm4gdCooMi10KX1vaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9LG9pLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgcj0wLG49MCxpPTAsYT0wLG89MDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDYxOmNhc2UgMTA3OmNhc2UgMTcxOmNhc2UgMTg3OnI9MTticmVhaztjYXNlIDE4OTpjYXNlIDEwOTpjYXNlIDE3MzpyPS0xO2JyZWFrO2Nhc2UgMzc6dC5zaGlmdEtleT9uPS0xOih0LnByZXZlbnREZWZhdWx0KCksYT0tMSk7YnJlYWs7Y2FzZSAzOTp0LnNoaWZ0S2V5P249MToodC5wcmV2ZW50RGVmYXVsdCgpLGE9MSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P2k9MToodC5wcmV2ZW50RGVmYXVsdCgpLG89LTEpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9pPS0xOih0LnByZXZlbnREZWZhdWx0KCksbz0xKTticmVhaztkZWZhdWx0OnJldHVybn1yZXR1cm57Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKHMpe3ZhciBsPXMuZ2V0Wm9vbSgpO3MuZWFzZVRvKHtkdXJhdGlvbjozMDAsZWFzZUlkOiJrZXlib2FyZEhhbmRsZXIiLGVhc2luZzpzaSx6b29tOnI/TWF0aC5yb3VuZChsKStyKih0LnNoaWZ0S2V5PzI6MSk6bCxiZWFyaW5nOnMuZ2V0QmVhcmluZygpK24qZS5fYmVhcmluZ1N0ZXAscGl0Y2g6cy5nZXRQaXRjaCgpK2kqZS5fcGl0Y2hTdGVwLG9mZnNldDpbLWEqZS5fcGFuU3RlcCwtbyplLl9wYW5TdGVwXSxjZW50ZXI6cy5nZXRDZW50ZXIoKX0se29yaWdpbmFsRXZlbnQ6dH0pfX19fSxvaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sb2kucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sb2kucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxvaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgbGk9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2hhbmRsZXI9cix0aGlzLl9kZWx0YT0wLHRoaXMuX2RlZmF1bHRab29tUmF0ZT0uMDEsdGhpcy5fd2hlZWxab29tUmF0ZT0xLzQ1MCx0LmJpbmRBbGwoWyJfb25XaGVlbCIsIl9vblRpbWVvdXQiLCJfb25TY3JvbGxGcmFtZSIsIl9vblNjcm9sbEZpbmlzaGVkIl0sdGhpcyl9O2xpLnByb3RvdHlwZS5zZXRab29tUmF0ZT1mdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Wm9vbVJhdGU9dH0sbGkucHJvdG90eXBlLnNldFdoZWVsWm9vbVJhdGU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlZWxab29tUmF0ZT10fSxsaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxsaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZXx8dm9pZCAwIT09dGhpcy5fZmluaXNoVGltZW91dH0sbGkucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fem9vbWluZ30sbGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9dCYmImNlbnRlciI9PT10LmFyb3VuZCl9LGxpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxsaS5wcm90b3R5cGUud2hlZWw9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VuYWJsZWQoKSl7dmFyIHI9ZS5kZWx0YU1vZGU9PT10LndpbmRvdy5XaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FPzQwKmUuZGVsdGFZOmUuZGVsdGFZLG49dC5icm93c2VyLm5vdygpLGk9bi0odGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lfHwwKTt0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWU9biwwIT09ciYmciU0LjAwMDI0NDE0MDYyNT09MD90aGlzLl90eXBlPSJ3aGVlbCI6MCE9PXImJk1hdGguYWJzKHIpPDQ/dGhpcy5fdHlwZT0idHJhY2twYWQiOmk+NDAwPyh0aGlzLl90eXBlPW51bGwsdGhpcy5fbGFzdFZhbHVlPXIsdGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCw0MCxlKSk6dGhpcy5fdHlwZXx8KHRoaXMuX3R5cGU9TWF0aC5hYnMoaSpyKTwyMDA/InRyYWNrcGFkIjoid2hlZWwiLHRoaXMuX3RpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksdGhpcy5fdGltZW91dD1udWxsLHIrPXRoaXMuX2xhc3RWYWx1ZSkpLGUuc2hpZnRLZXkmJnImJihyLz00KSx0aGlzLl90eXBlJiYodGhpcy5fbGFzdFdoZWVsRXZlbnQ9ZSx0aGlzLl9kZWx0YS09cix0aGlzLl9hY3RpdmV8fHRoaXMuX3N0YXJ0KGUpKSxlLnByZXZlbnREZWZhdWx0KCl9fSxsaS5wcm90b3R5cGUuX29uVGltZW91dD1mdW5jdGlvbih0KXt0aGlzLl90eXBlPSJ3aGVlbCIsdGhpcy5fZGVsdGEtPXRoaXMuX2xhc3RWYWx1ZSx0aGlzLl9hY3RpdmV8fHRoaXMuX3N0YXJ0KHQpfSxsaS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RlbHRhKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD1udWxsKSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5pc1pvb21pbmcoKXx8KHRoaXMuX3pvb21pbmc9ITApLHRoaXMuX2ZpbmlzaFRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fZmluaXNoVGltZW91dCksZGVsZXRlIHRoaXMuX2ZpbmlzaFRpbWVvdXQpO3ZhciBuPXIubW91c2VQb3ModGhpcy5fZWwsZSk7dGhpcy5fYXJvdW5kPXQuTG5nTGF0LmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyP3RoaXMuX21hcC5nZXRDZW50ZXIoKTp0aGlzLl9tYXAudW5wcm9qZWN0KG4pKSx0aGlzLl9hcm91bmRQb2ludD10aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD0hMCx0aGlzLl9oYW5kbGVyLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSl9fSxsaS5wcm90b3R5cGUucmVuZGVyRnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25TY3JvbGxGcmFtZSgpfSxsaS5wcm90b3R5cGUuX29uU2Nyb2xsRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX2ZyYW1lSWQmJih0aGlzLl9mcmFtZUlkPW51bGwsdGhpcy5pc0FjdGl2ZSgpKSl7dmFyIHI9dGhpcy5fbWFwLnRyYW5zZm9ybTtpZigwIT09dGhpcy5fZGVsdGEpe3ZhciBuPSJ3aGVlbCI9PT10aGlzLl90eXBlJiZNYXRoLmFicyh0aGlzLl9kZWx0YSk+NC4wMDAyNDQxNDA2MjU/dGhpcy5fd2hlZWxab29tUmF0ZTp0aGlzLl9kZWZhdWx0Wm9vbVJhdGUsaT0yLygxK01hdGguZXhwKC1NYXRoLmFicyh0aGlzLl9kZWx0YSpuKSkpO3RoaXMuX2RlbHRhPDAmJjAhPT1pJiYoaT0xL2kpO3ZhciBhPSJudW1iZXIiPT10eXBlb2YgdGhpcy5fdGFyZ2V0Wm9vbT9yLnpvb21TY2FsZSh0aGlzLl90YXJnZXRab29tKTpyLnNjYWxlO3RoaXMuX3RhcmdldFpvb209TWF0aC5taW4oci5tYXhab29tLE1hdGgubWF4KHIubWluWm9vbSxyLnNjYWxlWm9vbShhKmkpKSksIndoZWVsIj09PXRoaXMuX3R5cGUmJih0aGlzLl9zdGFydFpvb209ci56b29tLHRoaXMuX2Vhc2luZz10aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKSksdGhpcy5fZGVsdGE9MH12YXIgbyxzPSJudW1iZXIiPT10eXBlb2YgdGhpcy5fdGFyZ2V0Wm9vbT90aGlzLl90YXJnZXRab29tOnIuem9vbSxsPXRoaXMuX3N0YXJ0Wm9vbSxjPXRoaXMuX2Vhc2luZyx1PSExO2lmKCJ3aGVlbCI9PT10aGlzLl90eXBlJiZsJiZjKXt2YXIgZj1NYXRoLm1pbigodC5icm93c2VyLm5vdygpLXRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSkvMjAwLDEpLGg9YyhmKTtvPXQubnVtYmVyKGwscyxoKSxmPDE/dGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9ITApOnU9ITB9ZWxzZSBvPXMsdT0hMDtyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZmluaXNoVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuX3pvb21pbmc9ITEsZS5faGFuZGxlci5fdHJpZ2dlclJlbmRlckZyYW1lKCksZGVsZXRlIGUuX3RhcmdldFpvb20sZGVsZXRlIGUuX2ZpbmlzaFRpbWVvdXR9KSwyMDApKSx7bm9JbmVydGlhOiEwLG5lZWRzUmVuZGVyRnJhbWU6IXUsem9vbURlbHRhOm8tci56b29tLGFyb3VuZDp0aGlzLl9hcm91bmRQb2ludCxvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RXaGVlbEV2ZW50fX19LGxpLnByb3RvdHlwZS5fc21vb3RoT3V0RWFzaW5nPWZ1bmN0aW9uKGUpe3ZhciByPXQuZWFzZTtpZih0aGlzLl9wcmV2RWFzZSl7dmFyIG49dGhpcy5fcHJldkVhc2UsaT0odC5icm93c2VyLm5vdygpLW4uc3RhcnQpL24uZHVyYXRpb24sYT1uLmVhc2luZyhpKy4wMSktbi5lYXNpbmcoaSksbz0uMjcvTWF0aC5zcXJ0KGEqYSsxZS00KSouMDEscz1NYXRoLnNxcnQoLjA3MjktbypvKTtyPXQuYmV6aWVyKG8scywuMjUsMSl9cmV0dXJuIHRoaXMuX3ByZXZFYXNlPXtzdGFydDp0LmJyb3dzZXIubm93KCksZHVyYXRpb246ZSxlYXNpbmc6cn0scn0sbGkucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExfTt2YXIgY2k9ZnVuY3Rpb24odCxlKXt0aGlzLl9jbGlja1pvb209dCx0aGlzLl90YXBab29tPWV9O2NpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9jbGlja1pvb20uZW5hYmxlKCksdGhpcy5fdGFwWm9vbS5lbmFibGUoKX0sY2kucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9jbGlja1pvb20uZGlzYWJsZSgpLHRoaXMuX3RhcFpvb20uZGlzYWJsZSgpfSxjaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaWNrWm9vbS5pc0VuYWJsZWQoKSYmdGhpcy5fdGFwWm9vbS5pc0VuYWJsZWQoKX0sY2kucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaWNrWm9vbS5pc0FjdGl2ZSgpfHx0aGlzLl90YXBab29tLmlzQWN0aXZlKCl9O3ZhciB1aT1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX07dWkucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExfSx1aS5wcm90b3R5cGUuZGJsY2xpY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24ocil7ci5lYXNlVG8oe2R1cmF0aW9uOjMwMCx6b29tOnIuZ2V0Wm9vbSgpKyh0LnNoaWZ0S2V5Py0xOjEpLGFyb3VuZDpyLnVucHJvamVjdChlKX0se29yaWdpbmFsRXZlbnQ6dH0pfX19LHVpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSx1aS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSx1aS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LHVpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBmaT1mdW5jdGlvbigpe3RoaXMuX3RhcD1uZXcgcW4oe251bVRvdWNoZXM6MSxudW1UYXBzOjF9KSx0aGlzLnJlc2V0KCl9O2ZpLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSxkZWxldGUgdGhpcy5fc3dpcGVQb2ludCxkZWxldGUgdGhpcy5fc3dpcGVUb3VjaCxkZWxldGUgdGhpcy5fdGFwVGltZSx0aGlzLl90YXAucmVzZXQoKX0sZmkucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3N3aXBlUG9pbnR8fCh0aGlzLl90YXBUaW1lJiZ0LnRpbWVTdGFtcC10aGlzLl90YXBUaW1lPjUwMCYmdGhpcy5yZXNldCgpLHRoaXMuX3RhcFRpbWU/ci5sZW5ndGg+MCYmKHRoaXMuX3N3aXBlUG9pbnQ9ZVswXSx0aGlzLl9zd2lwZVRvdWNoPXJbMF0uaWRlbnRpZmllcik6dGhpcy5fdGFwLnRvdWNoc3RhcnQodCxlLHIpKX0sZmkucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fdGFwVGltZSl7aWYodGhpcy5fc3dpcGVQb2ludCl7aWYoclswXS5pZGVudGlmaWVyIT09dGhpcy5fc3dpcGVUb3VjaClyZXR1cm47dmFyIG49ZVswXSxpPW4ueS10aGlzLl9zd2lwZVBvaW50Lnk7cmV0dXJuIHRoaXMuX3N3aXBlUG9pbnQ9bix0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZlPSEwLHt6b29tRGVsdGE6aS8xMjh9fX1lbHNlIHRoaXMuX3RhcC50b3VjaG1vdmUodCxlLHIpfSxmaS5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3RhcFRpbWU/dGhpcy5fc3dpcGVQb2ludCYmMD09PXIubGVuZ3RoJiZ0aGlzLnJlc2V0KCk6dGhpcy5fdGFwLnRvdWNoZW5kKHQsZSxyKSYmKHRoaXMuX3RhcFRpbWU9dC50aW1lU3RhbXApfSxmaS5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LGZpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxmaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxmaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LGZpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBoaT1mdW5jdGlvbih0LGUscil7dGhpcy5fZWw9dCx0aGlzLl9tb3VzZVBhbj1lLHRoaXMuX3RvdWNoUGFuPXJ9O2hpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5faW5lcnRpYU9wdGlvbnM9dHx8e30sdGhpcy5fbW91c2VQYW4uZW5hYmxlKCksdGhpcy5fdG91Y2hQYW4uZW5hYmxlKCksdGhpcy5fZWwuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4iKX0saGkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZVBhbi5kaXNhYmxlKCksdGhpcy5fdG91Y2hQYW4uZGlzYWJsZSgpLHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXRvdWNoLWRyYWctcGFuIil9LGhpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW91c2VQYW4uaXNFbmFibGVkKCkmJnRoaXMuX3RvdWNoUGFuLmlzRW5hYmxlZCgpfSxoaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW91c2VQYW4uaXNBY3RpdmUoKXx8dGhpcy5fdG91Y2hQYW4uaXNBY3RpdmUoKX07dmFyIHBpPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9waXRjaFdpdGhSb3RhdGU9dC5waXRjaFdpdGhSb3RhdGUsdGhpcy5fbW91c2VSb3RhdGU9ZSx0aGlzLl9tb3VzZVBpdGNoPXJ9O3BpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZVJvdGF0ZS5lbmFibGUoKSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX21vdXNlUGl0Y2guZW5hYmxlKCl9LHBpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fbW91c2VSb3RhdGUuZGlzYWJsZSgpLHRoaXMuX21vdXNlUGl0Y2guZGlzYWJsZSgpfSxwaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdXNlUm90YXRlLmlzRW5hYmxlZCgpJiYoIXRoaXMuX3BpdGNoV2l0aFJvdGF0ZXx8dGhpcy5fbW91c2VQaXRjaC5pc0VuYWJsZWQoKSl9LHBpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVJvdGF0ZS5pc0FjdGl2ZSgpfHx0aGlzLl9tb3VzZVBpdGNoLmlzQWN0aXZlKCl9O3ZhciBkaT1mdW5jdGlvbih0LGUscixuKXt0aGlzLl9lbD10LHRoaXMuX3RvdWNoWm9vbT1lLHRoaXMuX3RvdWNoUm90YXRlPXIsdGhpcy5fdGFwRHJhZ1pvb209bix0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSExLHRoaXMuX2VuYWJsZWQ9ITB9O2RpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5fdG91Y2hab29tLmVuYWJsZSh0KSx0aGlzLl9yb3RhdGlvbkRpc2FibGVkfHx0aGlzLl90b3VjaFJvdGF0ZS5lbmFibGUodCksdGhpcy5fdGFwRHJhZ1pvb20uZW5hYmxlKCksdGhpcy5fZWwuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUiKX0sZGkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl90b3VjaFpvb20uZGlzYWJsZSgpLHRoaXMuX3RvdWNoUm90YXRlLmRpc2FibGUoKSx0aGlzLl90YXBEcmFnWm9vbS5kaXNhYmxlKCksdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUiKX0sZGkucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3VjaFpvb20uaXNFbmFibGVkKCkmJih0aGlzLl9yb3RhdGlvbkRpc2FibGVkfHx0aGlzLl90b3VjaFJvdGF0ZS5pc0VuYWJsZWQoKSkmJnRoaXMuX3RhcERyYWdab29tLmlzRW5hYmxlZCgpfSxkaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG91Y2hab29tLmlzQWN0aXZlKCl8fHRoaXMuX3RvdWNoUm90YXRlLmlzQWN0aXZlKCl8fHRoaXMuX3RhcERyYWdab29tLmlzQWN0aXZlKCl9LGRpLnByb3RvdHlwZS5kaXNhYmxlUm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSEwLHRoaXMuX3RvdWNoUm90YXRlLmRpc2FibGUoKX0sZGkucHJvdG90eXBlLmVuYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMSx0aGlzLl90b3VjaFpvb20uaXNFbmFibGVkKCkmJnRoaXMuX3RvdWNoUm90YXRlLmVuYWJsZSgpfTt2YXIgbWk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuem9vbXx8dC5kcmFnfHx0LnBpdGNofHx0LnJvdGF0ZX0sZ2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfSh0LkV2ZW50KTtmdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5wYW5EZWx0YSYmdC5wYW5EZWx0YS5tYWcoKXx8dC56b29tRGVsdGF8fHQuYmVhcmluZ0RlbHRhfHx0LnBpdGNoRGVsdGF9dmFyIHlpPWZ1bmN0aW9uKGUsbil7dGhpcy5fbWFwPWUsdGhpcy5fZWw9dGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2hhbmRsZXJzPVtdLHRoaXMuX2hhbmRsZXJzQnlJZD17fSx0aGlzLl9jaGFuZ2VzPVtdLHRoaXMuX2luZXJ0aWE9bmV3IE9uKGUpLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdGhpcy5fcHJldmlvdXNBY3RpdmVIYW5kbGVycz17fSx0aGlzLl9ldmVudHNJblByb2dyZXNzPXt9LHRoaXMuX2FkZERlZmF1bHRIYW5kbGVycyhuKSx0LmJpbmRBbGwoWyJoYW5kbGVFdmVudCIsImhhbmRsZVdpbmRvd0V2ZW50Il0sdGhpcyk7dmFyIGk9dGhpcy5fZWw7dGhpcy5fbGlzdGVuZXJzPVtbaSwidG91Y2hzdGFydCIse3Bhc3NpdmU6ITF9XSxbaSwidG91Y2htb3ZlIix7cGFzc2l2ZTohMX1dLFtpLCJ0b3VjaGVuZCIsdm9pZCAwXSxbaSwidG91Y2hjYW5jZWwiLHZvaWQgMF0sW2ksIm1vdXNlZG93biIsdm9pZCAwXSxbaSwibW91c2Vtb3ZlIix2b2lkIDBdLFtpLCJtb3VzZXVwIix2b2lkIDBdLFt0LndpbmRvdy5kb2N1bWVudCwibW91c2Vtb3ZlIix7Y2FwdHVyZTohMH1dLFt0LndpbmRvdy5kb2N1bWVudCwibW91c2V1cCIsdm9pZCAwXSxbaSwibW91c2VvdmVyIix2b2lkIDBdLFtpLCJtb3VzZW91dCIsdm9pZCAwXSxbaSwiZGJsY2xpY2siLHZvaWQgMF0sW2ksImNsaWNrIix2b2lkIDBdLFtpLCJrZXlkb3duIix7Y2FwdHVyZTohMX1dLFtpLCJrZXl1cCIsdm9pZCAwXSxbaSwid2hlZWwiLHtwYXNzaXZlOiExfV0sW2ksImNvbnRleHRtZW51Iix2b2lkIDBdLFt0LndpbmRvdywiYmx1ciIsdm9pZCAwXV07Zm9yKHZhciBhPTAsbz10aGlzLl9saXN0ZW5lcnM7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9c1swXSxjPXNbMV0sdT1zWzJdO3IuYWRkRXZlbnRMaXN0ZW5lcihsLGMsbD09PXQud2luZG93LmRvY3VtZW50P3RoaXMuaGFuZGxlV2luZG93RXZlbnQ6dGhpcy5oYW5kbGVFdmVudCx1KX19O3lpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsbj10aGlzLl9saXN0ZW5lcnM7ZTxuLmxlbmd0aDtlKz0xKXt2YXIgaT1uW2VdLGE9aVswXSxvPWlbMV0scz1pWzJdO3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLG8sYT09PXQud2luZG93LmRvY3VtZW50P3RoaXMuaGFuZGxlV2luZG93RXZlbnQ6dGhpcy5oYW5kbGVFdmVudCxzKX19LHlpLnByb3RvdHlwZS5fYWRkRGVmYXVsdEhhbmRsZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxyPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCk7dGhpcy5fYWRkKCJtYXBFdmVudCIsbmV3IE5uKGUsdCkpO3ZhciBuPWUuYm94Wm9vbT1uZXcgVW4oZSx0KTt0aGlzLl9hZGQoImJveFpvb20iLG4pO3ZhciBpPW5ldyBHbixhPW5ldyB1aTtlLmRvdWJsZUNsaWNrWm9vbT1uZXcgY2koYSxpKSx0aGlzLl9hZGQoInRhcFpvb20iLGkpLHRoaXMuX2FkZCgiY2xpY2tab29tIixhKTt2YXIgbz1uZXcgZmk7dGhpcy5fYWRkKCJ0YXBEcmFnWm9vbSIsbyk7dmFyIHM9ZS50b3VjaFBpdGNoPW5ldyBpaTt0aGlzLl9hZGQoInRvdWNoUGl0Y2giLHMpO3ZhciBsPW5ldyBYbih0KSxjPW5ldyBabih0KTtlLmRyYWdSb3RhdGU9bmV3IHBpKHQsbCxjKSx0aGlzLl9hZGQoIm1vdXNlUm90YXRlIixsLFsibW91c2VQaXRjaCJdKSx0aGlzLl9hZGQoIm1vdXNlUGl0Y2giLGMsWyJtb3VzZVJvdGF0ZSJdKTt2YXIgdT1uZXcgV24odCksZj1uZXcgSm4odCk7ZS5kcmFnUGFuPW5ldyBoaShyLHUsZiksdGhpcy5fYWRkKCJtb3VzZVBhbiIsdSksdGhpcy5fYWRkKCJ0b3VjaFBhbiIsZixbInRvdWNoWm9vbSIsInRvdWNoUm90YXRlIl0pO3ZhciBoPW5ldyByaSxwPW5ldyB0aTtlLnRvdWNoWm9vbVJvdGF0ZT1uZXcgZGkocixwLGgsbyksdGhpcy5fYWRkKCJ0b3VjaFJvdGF0ZSIsaCxbInRvdWNoUGFuIiwidG91Y2hab29tIl0pLHRoaXMuX2FkZCgidG91Y2hab29tIixwLFsidG91Y2hQYW4iLCJ0b3VjaFJvdGF0ZSJdKTt2YXIgZD1lLnNjcm9sbFpvb209bmV3IGxpKGUsdGhpcyk7dGhpcy5fYWRkKCJzY3JvbGxab29tIixkLFsibW91c2VQYW4iXSk7dmFyIG09ZS5rZXlib2FyZD1uZXcgb2k7dGhpcy5fYWRkKCJrZXlib2FyZCIsbSksdGhpcy5fYWRkKCJibG9ja2FibGVNYXBFdmVudCIsbmV3IGpuKGUpKTtmb3IodmFyIGc9MCx2PVsiYm94Wm9vbSIsImRvdWJsZUNsaWNrWm9vbSIsInRhcERyYWdab29tIiwidG91Y2hQaXRjaCIsImRyYWdSb3RhdGUiLCJkcmFnUGFuIiwidG91Y2hab29tUm90YXRlIiwic2Nyb2xsWm9vbSIsImtleWJvYXJkIl07Zzx2Lmxlbmd0aDtnKz0xKXt2YXIgeT12W2ddO3QuaW50ZXJhY3RpdmUmJnRbeV0mJmVbeV0uZW5hYmxlKHRbeV0pfX0seWkucHJvdG90eXBlLl9hZGQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2hhbmRsZXJzLnB1c2goe2hhbmRsZXJOYW1lOnQsaGFuZGxlcjplLGFsbG93ZWQ6cn0pLHRoaXMuX2hhbmRsZXJzQnlJZFt0XT1lfSx5aS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe2lmKCF0aGlzLl91cGRhdGluZ0NhbWVyYSl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVyczt0PGUubGVuZ3RoO3QrPTEpe2VbdF0uaGFuZGxlci5yZXNldCgpfXRoaXMuX2luZXJ0aWEuY2xlYXIoKSx0aGlzLl9maXJlRXZlbnRzKHt9LHt9KSx0aGlzLl9jaGFuZ2VzPVtdfX0seWkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVyczt0PGUubGVuZ3RoO3QrPTEpe2lmKGVbdF0uaGFuZGxlci5pc0FjdGl2ZSgpKXJldHVybiEwfXJldHVybiExfSx5aS5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9ldmVudHNJblByb2dyZXNzLnpvb218fHRoaXMuX21hcC5zY3JvbGxab29tLmlzWm9vbWluZygpfSx5aS5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcy5yb3RhdGV9LHlpLnByb3RvdHlwZS5pc01vdmluZz1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKG1pKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpKXx8dGhpcy5pc1pvb21pbmcoKX0seWkucHJvdG90eXBlLl9ibG9ja2VkQnlBY3RpdmU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiB0KWlmKG4hPT1yJiYoIWV8fGUuaW5kZXhPZihuKTwwKSlyZXR1cm4hMDtyZXR1cm4hMX0seWkucHJvdG90eXBlLmhhbmRsZVdpbmRvd0V2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuaGFuZGxlRXZlbnQodCx0LnR5cGUrIldpbmRvdyIpfSx5aS5wcm90b3R5cGUuX2dldE1hcFRvdWNoZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS50YXJnZXQ7dGhpcy5fZWwuY29udGFpbnMoYSkmJmUucHVzaChpKX1yZXR1cm4gZX0seWkucHJvdG90eXBlLmhhbmRsZUV2ZW50PWZ1bmN0aW9uKHQsZSl7aWYoImJsdXIiIT09dC50eXBlKXt0aGlzLl91cGRhdGluZ0NhbWVyYT0hMDtmb3IodmFyIG49InJlbmRlckZyYW1lIj09PXQudHlwZT92b2lkIDA6dCxpPXtuZWVkc1JlbmRlckZyYW1lOiExfSxhPXt9LG89e30scz10LnRvdWNoZXM/dGhpcy5fZ2V0TWFwVG91Y2hlcyh0LnRvdWNoZXMpOnZvaWQgMCxsPXM/ci50b3VjaFBvcyh0aGlzLl9lbCxzKTpyLm1vdXNlUG9zKHRoaXMuX2VsLHQpLGM9MCx1PXRoaXMuX2hhbmRsZXJzO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPWYuaGFuZGxlck5hbWUscD1mLmhhbmRsZXIsZD1mLmFsbG93ZWQ7aWYocC5pc0VuYWJsZWQoKSl7dmFyIG09dm9pZCAwO3RoaXMuX2Jsb2NrZWRCeUFjdGl2ZShvLGQsaCk/cC5yZXNldCgpOnBbZXx8dC50eXBlXSYmKG09cFtlfHx0LnR5cGVdKHQsbCxzKSx0aGlzLm1lcmdlSGFuZGxlclJlc3VsdChpLGEsbSxoLG4pLG0mJm0ubmVlZHNSZW5kZXJGcmFtZSYmdGhpcy5fdHJpZ2dlclJlbmRlckZyYW1lKCkpLChtfHxwLmlzQWN0aXZlKCkpJiYob1toXT1wKX19dmFyIGc9e307Zm9yKHZhciB2IGluIHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnMpb1t2XXx8KGdbdl09bik7dGhpcy5fcHJldmlvdXNBY3RpdmVIYW5kbGVycz1vLChPYmplY3Qua2V5cyhnKS5sZW5ndGh8fHZpKGkpKSYmKHRoaXMuX2NoYW5nZXMucHVzaChbaSxhLGddKSx0aGlzLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSksKE9iamVjdC5rZXlzKG8pLmxlbmd0aHx8dmkoaSkpJiZ0aGlzLl9tYXAuX3N0b3AoITApLHRoaXMuX3VwZGF0aW5nQ2FtZXJhPSExO3ZhciB5PWkuY2FtZXJhQW5pbWF0aW9uO3kmJih0aGlzLl9pbmVydGlhLmNsZWFyKCksdGhpcy5fZmlyZUV2ZW50cyh7fSx7fSksdGhpcy5fY2hhbmdlcz1bXSx5KHRoaXMuX21hcCkpfWVsc2UgdGhpcy5zdG9wKCl9LHlpLnByb3RvdHlwZS5tZXJnZUhhbmRsZXJSZXN1bHQ9ZnVuY3Rpb24oZSxyLG4saSxhKXtpZihuKXt0LmV4dGVuZChlLG4pO3ZhciBvPXtoYW5kbGVyTmFtZTppLG9yaWdpbmFsRXZlbnQ6bi5vcmlnaW5hbEV2ZW50fHxhfTt2b2lkIDAhPT1uLnpvb21EZWx0YSYmKHIuem9vbT1vKSx2b2lkIDAhPT1uLnBhbkRlbHRhJiYoci5kcmFnPW8pLHZvaWQgMCE9PW4ucGl0Y2hEZWx0YSYmKHIucGl0Y2g9byksdm9pZCAwIT09bi5iZWFyaW5nRGVsdGEmJihyLnJvdGF0ZT1vKX19LHlpLnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXt9LHI9e30sbj17fSxpPTAsYT10aGlzLl9jaGFuZ2VzO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdLGM9b1syXTtzLnBhbkRlbHRhJiYoZS5wYW5EZWx0YT0oZS5wYW5EZWx0YXx8bmV3IHQuUG9pbnQoMCwwKSkuX2FkZChzLnBhbkRlbHRhKSkscy56b29tRGVsdGEmJihlLnpvb21EZWx0YT0oZS56b29tRGVsdGF8fDApK3Muem9vbURlbHRhKSxzLmJlYXJpbmdEZWx0YSYmKGUuYmVhcmluZ0RlbHRhPShlLmJlYXJpbmdEZWx0YXx8MCkrcy5iZWFyaW5nRGVsdGEpLHMucGl0Y2hEZWx0YSYmKGUucGl0Y2hEZWx0YT0oZS5waXRjaERlbHRhfHwwKStzLnBpdGNoRGVsdGEpLHZvaWQgMCE9PXMuYXJvdW5kJiYoZS5hcm91bmQ9cy5hcm91bmQpLHZvaWQgMCE9PXMucGluY2hBcm91bmQmJihlLnBpbmNoQXJvdW5kPXMucGluY2hBcm91bmQpLHMubm9JbmVydGlhJiYoZS5ub0luZXJ0aWE9cy5ub0luZXJ0aWEpLHQuZXh0ZW5kKHIsbCksdC5leHRlbmQobixjKX10aGlzLl91cGRhdGVNYXBUcmFuc2Zvcm0oZSxyLG4pLHRoaXMuX2NoYW5nZXM9W119LHlpLnByb3RvdHlwZS5fdXBkYXRlTWFwVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9tYXAsaT1uLnRyYW5zZm9ybTtpZighdmkodCkpcmV0dXJuIHRoaXMuX2ZpcmVFdmVudHMoZSxyKTt2YXIgYT10LnBhbkRlbHRhLG89dC56b29tRGVsdGEscz10LmJlYXJpbmdEZWx0YSxsPXQucGl0Y2hEZWx0YSxjPXQuYXJvdW5kLHU9dC5waW5jaEFyb3VuZDt2b2lkIDAhPT11JiYoYz11KSxuLl9zdG9wKCEwKSxjPWN8fG4udHJhbnNmb3JtLmNlbnRlclBvaW50O3ZhciBmPWkucG9pbnRMb2NhdGlvbihhP2Muc3ViKGEpOmMpO3MmJihpLmJlYXJpbmcrPXMpLGwmJihpLnBpdGNoKz1sKSxvJiYoaS56b29tKz1vKSxpLnNldExvY2F0aW9uQXRQb2ludChmLGMpLHRoaXMuX21hcC5fdXBkYXRlKCksdC5ub0luZXJ0aWF8fHRoaXMuX2luZXJ0aWEucmVjb3JkKHQpLHRoaXMuX2ZpcmVFdmVudHMoZSxyKX0seWkucHJvdG90eXBlLl9maXJlRXZlbnRzPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPW1pKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpLGE9bWkoZSksbz17fTtmb3IodmFyIHMgaW4gZSl7dmFyIGw9ZVtzXS5vcmlnaW5hbEV2ZW50O3RoaXMuX2V2ZW50c0luUHJvZ3Jlc3Nbc118fChvW3MrInN0YXJ0Il09bCksdGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tzXT1lW3NdfWZvcih2YXIgYyBpbiFpJiZhJiZ0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsYS5vcmlnaW5hbEV2ZW50KSxvKXRoaXMuX2ZpcmVFdmVudChjLG9bY10pO2Zvcih2YXIgdSBpbiBlLnJvdGF0ZSYmKHRoaXMuX2JlYXJpbmdDaGFuZ2VkPSEwKSxhJiZ0aGlzLl9maXJlRXZlbnQoIm1vdmUiLGEub3JpZ2luYWxFdmVudCksZSl7dmFyIGY9ZVt1XS5vcmlnaW5hbEV2ZW50O3RoaXMuX2ZpcmVFdmVudCh1LGYpfXZhciBoLHA9e307Zm9yKHZhciBkIGluIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Mpe3ZhciBtPXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbZF0sZz1tLmhhbmRsZXJOYW1lLHY9bS5vcmlnaW5hbEV2ZW50O3RoaXMuX2hhbmRsZXJzQnlJZFtnXS5pc0FjdGl2ZSgpfHwoZGVsZXRlIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbZF0saD1yW2ddfHx2LHBbZCsiZW5kIl09aCl9Zm9yKHZhciB5IGluIHApdGhpcy5fZmlyZUV2ZW50KHkscFt5XSk7dmFyIHg9bWkodGhpcy5fZXZlbnRzSW5Qcm9ncmVzcyk7aWYoKGl8fGEpJiYheCl7dGhpcy5fdXBkYXRpbmdDYW1lcmE9ITA7dmFyIGI9dGhpcy5faW5lcnRpYS5fb25Nb3ZlRW5kKHRoaXMuX21hcC5kcmFnUGFuLl9pbmVydGlhT3B0aW9ucyksXz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQmJi1uLl9iZWFyaW5nU25hcDx0JiZ0PG4uX2JlYXJpbmdTbmFwfTtiPyhfKGIuYmVhcmluZ3x8dGhpcy5fbWFwLmdldEJlYXJpbmcoKSkmJihiLmJlYXJpbmc9MCksdGhpcy5fbWFwLmVhc2VUbyhiLHtvcmlnaW5hbEV2ZW50Omh9KSk6KHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIix7b3JpZ2luYWxFdmVudDpofSkpLF8odGhpcy5fbWFwLmdldEJlYXJpbmcoKSkmJnRoaXMuX21hcC5yZXNldE5vcnRoKCkpLHRoaXMuX2JlYXJpbmdDaGFuZ2VkPSExLHRoaXMuX3VwZGF0aW5nQ2FtZXJhPSExfX0seWkucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0seWkucHJvdG90eXBlLl90cmlnZ2VyUmVuZGVyRnJhbWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3ZvaWQgMD09PXRoaXMuX2ZyYW1lSWQmJih0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKChmdW5jdGlvbihlKXtkZWxldGUgdC5fZnJhbWVJZCx0LmhhbmRsZUV2ZW50KG5ldyBnaSgicmVuZGVyRnJhbWUiLHt0aW1lU3RhbXA6ZX0pKSx0Ll9hcHBseUNoYW5nZXMoKX0pKSl9O3ZhciB4aT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbil7ZS5jYWxsKHRoaXMpLHRoaXMuX21vdmluZz0hMSx0aGlzLl96b29taW5nPSExLHRoaXMudHJhbnNmb3JtPXIsdGhpcy5fYmVhcmluZ1NuYXA9bi5iZWFyaW5nU25hcCx0LmJpbmRBbGwoWyJfcmVuZGVyRnJhbWVDYWxsYmFjayJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuTG5nTGF0KHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcsdGhpcy50cmFuc2Zvcm0uY2VudGVyLmxhdCl9LHIucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7Y2VudGVyOnR9LGUpfSxyLnByb3RvdHlwZS5wYW5CeT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9dC5Qb2ludC5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBhZGRpbmd9LHIucHJvdG90eXBlLnNldFBhZGRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BhZGRpbmc6dH0sZSksdGhpc30sci5wcm90b3R5cGUucm90YXRlVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7YmVhcmluZzplfSxyKSxuKX0sci5wcm90b3R5cGUucmVzZXROb3J0aD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLnJvdGF0ZVRvKDAsdC5leHRlbmQoe2R1cmF0aW9uOjFlM30sZSksciksdGhpc30sci5wcm90b3R5cGUucmVzZXROb3J0aFBpdGNoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOjAscGl0Y2g6MCxkdXJhdGlvbjoxZTN9LGUpLHIpLHRoaXN9LHIucHJvdG90eXBlLnNuYXBUb05vcnRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKTx0aGlzLl9iZWFyaW5nU25hcD90aGlzLnJlc2V0Tm9ydGgodCxlKTp0aGlzfSxyLnByb3RvdHlwZS5nZXRQaXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5waXRjaH0sci5wcm90b3R5cGUuc2V0UGl0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BpdGNoOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmNhbWVyYUZvckJvdW5kcz1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQuTG5nTGF0Qm91bmRzLmNvbnZlcnQoZSksdGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhlLmdldE5vcnRoV2VzdCgpLGUuZ2V0U291dGhFYXN0KCksMCxyKX0sci5wcm90b3R5cGUuX2NhbWVyYUZvckJveEFuZEJlYXJpbmc9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9e3RvcDowLGJvdHRvbTowLHJpZ2h0OjAsbGVmdDowfTtpZigibnVtYmVyIj09dHlwZW9mKGk9dC5leHRlbmQoe3BhZGRpbmc6YSxvZmZzZXQ6WzAsMF0sbWF4Wm9vbTp0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxpKSkucGFkZGluZyl7dmFyIG89aS5wYWRkaW5nO2kucGFkZGluZz17dG9wOm8sYm90dG9tOm8scmlnaHQ6byxsZWZ0Om99fWkucGFkZGluZz10LmV4dGVuZChhLGkucGFkZGluZyk7dmFyIHM9dGhpcy50cmFuc2Zvcm0sbD1zLnBhZGRpbmcsYz1zLnByb2plY3QodC5MbmdMYXQuY29udmVydChlKSksdT1zLnByb2plY3QodC5MbmdMYXQuY29udmVydChyKSksZj1jLnJvdGF0ZSgtbipNYXRoLlBJLzE4MCksaD11LnJvdGF0ZSgtbipNYXRoLlBJLzE4MCkscD1uZXcgdC5Qb2ludChNYXRoLm1heChmLngsaC54KSxNYXRoLm1heChmLnksaC55KSksZD1uZXcgdC5Qb2ludChNYXRoLm1pbihmLngsaC54KSxNYXRoLm1pbihmLnksaC55KSksbT1wLnN1YihkKSxnPShzLndpZHRoLShsLmxlZnQrbC5yaWdodCtpLnBhZGRpbmcubGVmdCtpLnBhZGRpbmcucmlnaHQpKS9tLngsdj0ocy5oZWlnaHQtKGwudG9wK2wuYm90dG9tK2kucGFkZGluZy50b3AraS5wYWRkaW5nLmJvdHRvbSkpL20ueTtpZighKHY8MHx8ZzwwKSl7dmFyIHk9TWF0aC5taW4ocy5zY2FsZVpvb20ocy5zY2FsZSpNYXRoLm1pbihnLHYpKSxpLm1heFpvb20pLHg9dC5Qb2ludC5jb252ZXJ0KGkub2Zmc2V0KSxiPShpLnBhZGRpbmcubGVmdC1pLnBhZGRpbmcucmlnaHQpLzIsXz0oaS5wYWRkaW5nLnRvcC1pLnBhZGRpbmcuYm90dG9tKS8yLHc9bmV3IHQuUG9pbnQoeC54K2IseC55K18pLm11bHQocy5zY2FsZS9zLnpvb21TY2FsZSh5KSk7cmV0dXJue2NlbnRlcjpzLnVucHJvamVjdChjLmFkZCh1KS5kaXYoMikuc3ViKHcpKSx6b29tOnksYmVhcmluZzpufX10Lndhcm5PbmNlKCJNYXAgY2Fubm90IGZpdCB3aXRoaW4gY2FudmFzIHdpdGggdGhlIGdpdmVuIGJvdW5kcywgcGFkZGluZywgYW5kL29yIG9mZnNldC4iKX0sci5wcm90b3R5cGUuZml0Qm91bmRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwodGhpcy5jYW1lcmFGb3JCb3VuZHModCxlKSxlLHIpfSxyLnByb3RvdHlwZS5maXRTY3JlZW5Db29yZGluYXRlcz1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB0aGlzLl9maXRJbnRlcm5hbCh0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5Qb2ludC5jb252ZXJ0KGUpKSx0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChyKSksbixpKSxpLGEpfSxyLnByb3RvdHlwZS5fZml0SW50ZXJuYWw9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPyhkZWxldGUocj10LmV4dGVuZChlLHIpKS5wYWRkaW5nLHIubGluZWFyP3RoaXMuZWFzZVRvKHIsbik6dGhpcy5mbHlUbyhyLG4pKTp0aGlzfSxyLnByb3RvdHlwZS5qdW1wVG89ZnVuY3Rpb24oZSxyKXt0aGlzLnN0b3AoKTt2YXIgbj10aGlzLnRyYW5zZm9ybSxpPSExLGE9ITEsbz0hMTtyZXR1cm4iem9vbSJpbiBlJiZuLnpvb20hPT0rZS56b29tJiYoaT0hMCxuLnpvb209K2Uuem9vbSksdm9pZCAwIT09ZS5jZW50ZXImJihuLmNlbnRlcj10LkxuZ0xhdC5jb252ZXJ0KGUuY2VudGVyKSksImJlYXJpbmciaW4gZSYmbi5iZWFyaW5nIT09K2UuYmVhcmluZyYmKGE9ITAsbi5iZWFyaW5nPStlLmJlYXJpbmcpLCJwaXRjaCJpbiBlJiZuLnBpdGNoIT09K2UucGl0Y2gmJihvPSEwLG4ucGl0Y2g9K2UucGl0Y2gpLG51bGw9PWUucGFkZGluZ3x8bi5pc1BhZGRpbmdFcXVhbChlLnBhZGRpbmcpfHwobi5wYWRkaW5nPWUucGFkZGluZyksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIixyKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJ6b29tIixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIscikpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGUiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVlbmQiLHIpKSxvJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaCIscikpLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoZW5kIixyKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixyKSl9LHIucHJvdG90eXBlLmVhc2VUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5fc3RvcCghMSxlLmVhc2VJZCksKCExPT09KGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxkdXJhdGlvbjo1MDAsZWFzaW5nOnQuZWFzZX0sZSkpLmFuaW1hdGV8fCFlLmVzc2VudGlhbCYmdC5icm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKSYmKGUuZHVyYXRpb249MCk7dmFyIGk9dGhpcy50cmFuc2Zvcm0sYT10aGlzLmdldFpvb20oKSxvPXRoaXMuZ2V0QmVhcmluZygpLHM9dGhpcy5nZXRQaXRjaCgpLGw9dGhpcy5nZXRQYWRkaW5nKCksYz0iem9vbSJpbiBlPytlLnpvb206YSx1PSJiZWFyaW5nImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcsbyk6byxmPSJwaXRjaCJpbiBlPytlLnBpdGNoOnMsaD0icGFkZGluZyJpbiBlP2UucGFkZGluZzppLnBhZGRpbmcscD10LlBvaW50LmNvbnZlcnQoZS5vZmZzZXQpLGQ9aS5jZW50ZXJQb2ludC5hZGQocCksbT1pLnBvaW50TG9jYXRpb24oZCksZz10LkxuZ0xhdC5jb252ZXJ0KGUuY2VudGVyfHxtKTt0aGlzLl9ub3JtYWxpemVDZW50ZXIoZyk7dmFyIHYseSx4PWkucHJvamVjdChtKSxiPWkucHJvamVjdChnKS5zdWIoeCksXz1pLnpvb21TY2FsZShjLWEpO2UuYXJvdW5kJiYodj10LkxuZ0xhdC5jb252ZXJ0KGUuYXJvdW5kKSx5PWkubG9jYXRpb25Qb2ludCh2KSk7dmFyIHc9e21vdmluZzp0aGlzLl9tb3Zpbmcsem9vbWluZzp0aGlzLl96b29taW5nLHJvdGF0aW5nOnRoaXMuX3JvdGF0aW5nLHBpdGNoaW5nOnRoaXMuX3BpdGNoaW5nfTtyZXR1cm4gdGhpcy5fem9vbWluZz10aGlzLl96b29taW5nfHxjIT09YSx0aGlzLl9yb3RhdGluZz10aGlzLl9yb3RhdGluZ3x8byE9PXUsdGhpcy5fcGl0Y2hpbmc9dGhpcy5fcGl0Y2hpbmd8fGYhPT1zLHRoaXMuX3BhZGRpbmc9IWkuaXNQYWRkaW5nRXF1YWwoaCksdGhpcy5fZWFzZUlkPWUuZWFzZUlkLHRoaXMuX3ByZXBhcmVFYXNlKHIsZS5ub01vdmVTdGFydCx3KSxjbGVhclRpbWVvdXQodGhpcy5fZWFzZUVuZFRpbWVvdXRJRCksdGhpcy5fZWFzZSgoZnVuY3Rpb24oZSl7aWYobi5fem9vbWluZyYmKGkuem9vbT10Lm51bWJlcihhLGMsZSkpLG4uX3JvdGF0aW5nJiYoaS5iZWFyaW5nPXQubnVtYmVyKG8sdSxlKSksbi5fcGl0Y2hpbmcmJihpLnBpdGNoPXQubnVtYmVyKHMsZixlKSksbi5fcGFkZGluZyYmKGkuaW50ZXJwb2xhdGVQYWRkaW5nKGwsaCxlKSxkPWkuY2VudGVyUG9pbnQuYWRkKHApKSx2KWkuc2V0TG9jYXRpb25BdFBvaW50KHYseSk7ZWxzZXt2YXIgbT1pLnpvb21TY2FsZShpLnpvb20tYSksZz1jPmE/TWF0aC5taW4oMixfKTpNYXRoLm1heCguNSxfKSx3PU1hdGgucG93KGcsMS1lKSxUPWkudW5wcm9qZWN0KHguYWRkKGIubXVsdChlKncpKS5tdWx0KG0pKTtpLnNldExvY2F0aW9uQXRQb2ludChpLnJlbmRlcldvcmxkQ29waWVzP1Qud3JhcCgpOlQsZCl9bi5fZmlyZU1vdmVFdmVudHMocil9KSwoZnVuY3Rpb24odCl7bi5fYWZ0ZXJFYXNlKHIsdCl9KSxlKSx0aGlzfSxyLnByb3RvdHlwZS5fcHJlcGFyZUVhc2U9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9tb3Zpbmc9ITAscnx8bi5tb3Zpbmd8fHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSksdGhpcy5fem9vbWluZyYmIW4uem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tc3RhcnQiLGUpKSx0aGlzLl9yb3RhdGluZyYmIW4ucm90YXRpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlc3RhcnQiLGUpKSx0aGlzLl9waXRjaGluZyYmIW4ucGl0Y2hpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hzdGFydCIsZSkpfSxyLnByb3RvdHlwZS5fZmlyZU1vdmVFdmVudHM9ZnVuY3Rpb24oZSl7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tIixlKSksdGhpcy5fcm90YXRpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlIixlKSksdGhpcy5fcGl0Y2hpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2giLGUpKX0sci5wcm90b3R5cGUuX2FmdGVyRWFzZT1mdW5jdGlvbihlLHIpe2lmKCF0aGlzLl9lYXNlSWR8fCFyfHx0aGlzLl9lYXNlSWQhPT1yKXtkZWxldGUgdGhpcy5fZWFzZUlkO3ZhciBuPXRoaXMuX3pvb21pbmcsaT10aGlzLl9yb3RhdGluZyxhPXRoaXMuX3BpdGNoaW5nO3RoaXMuX21vdmluZz0hMSx0aGlzLl96b29taW5nPSExLHRoaXMuX3JvdGF0aW5nPSExLHRoaXMuX3BpdGNoaW5nPSExLHRoaXMuX3BhZGRpbmc9ITEsbiYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tZW5kIixlKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVlbmQiLGUpKSxhJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoZW5kIixlKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixlKSl9fSxyLnByb3RvdHlwZS5mbHlUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYoIWUuZXNzZW50aWFsJiZ0LmJyb3dzZXIucHJlZmVyc1JlZHVjZWRNb3Rpb24pe3ZhciBpPXQucGljayhlLFsiY2VudGVyIiwiem9vbSIsImJlYXJpbmciLCJwaXRjaCIsImFyb3VuZCJdKTtyZXR1cm4gdGhpcy5qdW1wVG8oaSxyKX10aGlzLnN0b3AoKSxlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sc3BlZWQ6MS4yLGN1cnZlOjEuNDIsZWFzaW5nOnQuZWFzZX0sZSk7dmFyIGE9dGhpcy50cmFuc2Zvcm0sbz10aGlzLmdldFpvb20oKSxzPXRoaXMuZ2V0QmVhcmluZygpLGw9dGhpcy5nZXRQaXRjaCgpLGM9dGhpcy5nZXRQYWRkaW5nKCksdT0iem9vbSJpbiBlP3QuY2xhbXAoK2Uuem9vbSxhLm1pblpvb20sYS5tYXhab29tKTpvLGY9ImJlYXJpbmciaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxzKTpzLGg9InBpdGNoImluIGU/K2UucGl0Y2g6bCxwPSJwYWRkaW5nImluIGU/ZS5wYWRkaW5nOmEucGFkZGluZyxkPWEuem9vbVNjYWxlKHUtbyksbT10LlBvaW50LmNvbnZlcnQoZS5vZmZzZXQpLGc9YS5jZW50ZXJQb2ludC5hZGQobSksdj1hLnBvaW50TG9jYXRpb24oZykseT10LkxuZ0xhdC5jb252ZXJ0KGUuY2VudGVyfHx2KTt0aGlzLl9ub3JtYWxpemVDZW50ZXIoeSk7dmFyIHg9YS5wcm9qZWN0KHYpLGI9YS5wcm9qZWN0KHkpLnN1Yih4KSxfPWUuY3VydmUsdz1NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KSxUPXcvZCxrPWIubWFnKCk7aWYoIm1pblpvb20iaW4gZSl7dmFyIEE9dC5jbGFtcChNYXRoLm1pbihlLm1pblpvb20sbyx1KSxhLm1pblpvb20sYS5tYXhab29tKSxNPXcvYS56b29tU2NhbGUoQS1vKTtfPU1hdGguc3FydChNL2sqMil9dmFyIFM9XypfO2Z1bmN0aW9uIEUodCl7dmFyIGU9KFQqVC13KncrKHQ/LTE6MSkqUypTKmsqaykvKDIqKHQ/VDp3KSpTKmspO3JldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoZSplKzEpLWUpfWZ1bmN0aW9uIEwodCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBDKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9dmFyIFA9RSgwKSxJPWZ1bmN0aW9uKHQpe3JldHVybiBDKFApL0MoUCtfKnQpfSxPPWZ1bmN0aW9uKHQpe3JldHVybiB3KigoQyhQKSooTChlPVArXyp0KS9DKGUpKS1MKFApKS9TKS9rO3ZhciBlfSx6PShFKDEpLVApL187aWYoTWF0aC5hYnMoayk8MWUtNnx8IWlzRmluaXRlKHopKXtpZihNYXRoLmFicyh3LVQpPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKGUscik7dmFyIEQ9VDx3Py0xOjE7ej1NYXRoLmFicyhNYXRoLmxvZyhUL3cpKS9fLE89ZnVuY3Rpb24oKXtyZXR1cm4gMH0sST1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5leHAoRCpfKnQpfX1pZigiZHVyYXRpb24iaW4gZSllLmR1cmF0aW9uPStlLmR1cmF0aW9uO2Vsc2V7dmFyIFI9InNjcmVlblNwZWVkImluIGU/K2Uuc2NyZWVuU3BlZWQvXzorZS5zcGVlZDtlLmR1cmF0aW9uPTFlMyp6L1J9cmV0dXJuIGUubWF4RHVyYXRpb24mJmUuZHVyYXRpb24+ZS5tYXhEdXJhdGlvbiYmKGUuZHVyYXRpb249MCksdGhpcy5fem9vbWluZz0hMCx0aGlzLl9yb3RhdGluZz1zIT09Zix0aGlzLl9waXRjaGluZz1oIT09bCx0aGlzLl9wYWRkaW5nPSFhLmlzUGFkZGluZ0VxdWFsKHApLHRoaXMuX3ByZXBhcmVFYXNlKHIsITEpLHRoaXMuX2Vhc2UoKGZ1bmN0aW9uKGUpe3ZhciBpPWUqeixkPTEvSShpKTthLnpvb209MT09PWU/dTpvK2Euc2NhbGVab29tKGQpLG4uX3JvdGF0aW5nJiYoYS5iZWFyaW5nPXQubnVtYmVyKHMsZixlKSksbi5fcGl0Y2hpbmcmJihhLnBpdGNoPXQubnVtYmVyKGwsaCxlKSksbi5fcGFkZGluZyYmKGEuaW50ZXJwb2xhdGVQYWRkaW5nKGMscCxlKSxnPWEuY2VudGVyUG9pbnQuYWRkKG0pKTt2YXIgdj0xPT09ZT95OmEudW5wcm9qZWN0KHguYWRkKGIubXVsdChPKGkpKSkubXVsdChkKSk7YS5zZXRMb2NhdGlvbkF0UG9pbnQoYS5yZW5kZXJXb3JsZENvcGllcz92LndyYXAoKTp2LGcpLG4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0pLGUpLHRoaXN9LHIucHJvdG90eXBlLmlzRWFzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lYXNlRnJhbWVJZH0sci5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdG9wKCl9LHIucHJvdG90eXBlLl9zdG9wPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fZWFzZUZyYW1lSWQmJih0aGlzLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9lYXNlRnJhbWVJZCksZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkLGRlbGV0ZSB0aGlzLl9vbkVhc2VGcmFtZSksdGhpcy5fb25FYXNlRW5kKXt2YXIgcj10aGlzLl9vbkVhc2VFbmQ7ZGVsZXRlIHRoaXMuX29uRWFzZUVuZCxyLmNhbGwodGhpcyxlKX1pZighdCl7dmFyIG49dGhpcy5oYW5kbGVycztuJiZuLnN0b3AoKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUuX2Vhc2U9ZnVuY3Rpb24oZSxyLG4peyExPT09bi5hbmltYXRlfHwwPT09bi5kdXJhdGlvbj8oZSgxKSxyKCkpOih0aGlzLl9lYXNlU3RhcnQ9dC5icm93c2VyLm5vdygpLHRoaXMuX2Vhc2VPcHRpb25zPW4sdGhpcy5fb25FYXNlRnJhbWU9ZSx0aGlzLl9vbkVhc2VFbmQ9cix0aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjaykpfSxyLnByb3RvdHlwZS5fcmVuZGVyRnJhbWVDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciBlPU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fZWFzZVN0YXJ0KS90aGlzLl9lYXNlT3B0aW9ucy5kdXJhdGlvbiwxKTt0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcoZSkpLGU8MT90aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk6dGhpcy5zdG9wKCl9LHIucHJvdG90eXBlLl9ub3JtYWxpemVCZWFyaW5nPWZ1bmN0aW9uKGUscil7ZT10LndyYXAoZSwtMTgwLDE4MCk7dmFyIG49TWF0aC5hYnMoZS1yKTtyZXR1cm4gTWF0aC5hYnMoZS0zNjAtcik8biYmKGUtPTM2MCksTWF0aC5hYnMoZSszNjAtcik8biYmKGUrPTM2MCksZX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUNlbnRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRyYW5zZm9ybTtpZihlLnJlbmRlcldvcmxkQ29waWVzJiYhZS5sbmdSYW5nZSl7dmFyIHI9dC5sbmctZS5jZW50ZXIubG5nO3QubG5nKz1yPjE4MD8tMzYwOnI8LTE4MD8zNjA6MH19LHJ9KHQuRXZlbnRlZCksYmk9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMub3B0aW9ucz1lLHQuYmluZEFsbChbIl91cGRhdGVFZGl0TGluayIsIl91cGRhdGVEYXRhIiwiX3VwZGF0ZUNvbXBhY3QiXSx0aGlzKX07YmkucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tcmlnaHQifSxiaS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuY29tcGFjdDtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtYXR0cmliIiksdGhpcy5faW5uZXJDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIix0aGlzLl9jb250YWluZXIpLGUmJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0IiksdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSx0aGlzLl9tYXAub24oInN0eWxlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx2b2lkIDA9PT1lJiYodGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSksdGhpcy5fY29udGFpbmVyfSxiaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoInN0eWxlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHRoaXMuX21hcC5vZmYoInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fbWFwPXZvaWQgMCx0aGlzLl9hdHRyaWJIVE1MPXZvaWQgMH0sYmkucHJvdG90eXBlLl91cGRhdGVFZGl0TGluaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2VkaXRMaW5rO2V8fChlPXRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFwYm94LWltcHJvdmUtbWFwIikpO3ZhciByPVt7a2V5OiJvd25lciIsdmFsdWU6dGhpcy5zdHlsZU93bmVyfSx7a2V5OiJpZCIsdmFsdWU6dGhpcy5zdHlsZUlkfSx7a2V5OiJhY2Nlc3NfdG9rZW4iLHZhbHVlOnRoaXMuX21hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VufHx0LmNvbmZpZy5BQ0NFU1NfVE9LRU59XTtpZihlKXt2YXIgbj1yLnJlZHVjZSgoZnVuY3Rpb24odCxlLG4pe3JldHVybiBlLnZhbHVlJiYodCs9ZS5rZXkrIj0iK2UudmFsdWUrKG48ci5sZW5ndGgtMT8iJiI6IiIpKSx0fSksIj8iKTtlLmhyZWY9dC5jb25maWcuRkVFREJBQ0tfVVJMKyIvIituKyh0aGlzLl9tYXAuX2hhc2g/dGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcoITApOiIiKSxlLnJlbD0ibm9vcGVuZXIgbm9mb2xsb3cifX0sYmkucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpeyF0fHwibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZSYmInN0eWxlIiE9PXQuZGF0YVR5cGV8fCh0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpKX0sYmkucHJvdG90eXBlLl91cGRhdGVBdHRyaWJ1dGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PVtdO2lmKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiYmKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKT90PXQuY29uY2F0KHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8iIjp0fSkpKToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiYmdC5wdXNoKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbikpLHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0KXt2YXIgZT10aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldDt0aGlzLnN0eWxlT3duZXI9ZS5vd25lcix0aGlzLnN0eWxlSWQ9ZS5pZH12YXIgcj10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dO2lmKGkudXNlZCl7dmFyIGE9aS5nZXRTb3VyY2UoKTthLmF0dHJpYnV0aW9uJiZ0LmluZGV4T2YoYS5hdHRyaWJ1dGlvbik8MCYmdC5wdXNoKGEuYXR0cmlidXRpb24pfX10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSkpO3ZhciBvPSh0PXQuZmlsdGVyKChmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yKzE7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pbmRleE9mKGUpPj0wKXJldHVybiExO3JldHVybiEwfSkpKS5qb2luKCIgfCAiKTtvIT09dGhpcy5fYXR0cmliSFRNTCYmKHRoaXMuX2F0dHJpYkhUTUw9byx0Lmxlbmd0aD8odGhpcy5faW5uZXJDb250YWluZXIuaW5uZXJIVE1MPW8sdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtYXR0cmliLWVtcHR5IiksdGhpcy5fZWRpdExpbms9bnVsbCl9fSxiaS5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8PTY0MD90aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jb21wYWN0Iil9O3ZhciBfaT1mdW5jdGlvbigpe3QuYmluZEFsbChbIl91cGRhdGVMb2dvIl0sdGhpcyksdC5iaW5kQWxsKFsiX3VwZGF0ZUNvbXBhY3QiXSx0aGlzKX07X2kucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCIpO3ZhciBlPXIuY3JlYXRlKCJhIiwibWFwYm94Z2wtY3RybC1sb2dvIik7cmV0dXJuIGUudGFyZ2V0PSJfYmxhbmsiLGUucmVsPSJub29wZW5lciBub2ZvbGxvdyIsZS5ocmVmPSJodHRwczovL3d3dy5tYXBib3guY29tLyIsZS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIkxvZ29Db250cm9sLlRpdGxlIikpLGUuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciBub2ZvbGxvdyIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKSx0aGlzLl91cGRhdGVMb2dvKCksdGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSx0aGlzLl9jb250YWluZXJ9LF9pLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fbWFwLm9mZigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KX0sX2kucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LF9pLnByb3RvdHlwZS5fdXBkYXRlTG9nbz1mdW5jdGlvbih0KXt0JiYibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpPyJibG9jayI6Im5vbmUiKX0sX2kucHJvdG90eXBlLl9sb2dvUmVxdWlyZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpe2lmKHRbZV0uZ2V0U291cmNlKCkubWFwYm94X2xvZ28pcmV0dXJuITB9cmV0dXJuITF9fSxfaS5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXIuY2hpbGRyZW47aWYodC5sZW5ndGgpe3ZhciBlPXRbMF07dGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoPDI1MD9lLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWNvbXBhY3QiKTplLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWNvbXBhY3QiKX19O3ZhciB3aT1mdW5jdGlvbigpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX2lkPTAsdGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfTt3aS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSsrdGhpcy5faWQ7cmV0dXJuIHRoaXMuX3F1ZXVlLnB1c2goe2NhbGxiYWNrOnQsaWQ6ZSxjYW5jZWxsZWQ6ITF9KSxlfSx3aS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jdXJyZW50bHlSdW5uaW5nLHI9MCxuPWU/dGhpcy5fcXVldWUuY29uY2F0KGUpOnRoaXMuX3F1ZXVlO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpZihpLmlkPT09dClyZXR1cm4gdm9pZChpLmNhbmNlbGxlZD0hMCl9fSx3aS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PTApO3ZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9dGhpcy5fcXVldWU7dGhpcy5fcXVldWU9W107Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtpZighaS5jYW5jZWxsZWQmJihpLmNhbGxiYWNrKHQpLHRoaXMuX2NsZWFyZWQpKWJyZWFrfXRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX0sd2kucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudGx5UnVubmluZyYmKHRoaXMuX2NsZWFyZWQ9ITApLHRoaXMuX3F1ZXVlPVtdfTt2YXIgVGk9eyJGdWxsc2NyZWVuQ29udHJvbC5FbnRlciI6IkVudGVyIGZ1bGxzY3JlZW4iLCJGdWxsc2NyZWVuQ29udHJvbC5FeGl0IjoiRXhpdCBmdWxsc2NyZWVuIiwiR2VvbG9jYXRlQ29udHJvbC5GaW5kTXlMb2NhdGlvbiI6IkZpbmQgbXkgbG9jYXRpb24iLCJHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlIjoiTG9jYXRpb24gbm90IGF2YWlsYWJsZSIsIkxvZ29Db250cm9sLlRpdGxlIjoiTWFwYm94IGxvZ28iLCJOYXZpZ2F0aW9uQ29udHJvbC5SZXNldEJlYXJpbmciOiJSZXNldCBiZWFyaW5nIHRvIG5vcnRoIiwiTmF2aWdhdGlvbkNvbnRyb2wuWm9vbUluIjoiWm9vbSBpbiIsIk5hdmlnYXRpb25Db250cm9sLlpvb21PdXQiOiJab29tIG91dCIsIlNjYWxlQ29udHJvbC5GZWV0IjoiZnQiLCJTY2FsZUNvbnRyb2wuTWV0ZXJzIjoibSIsIlNjYWxlQ29udHJvbC5LaWxvbWV0ZXJzIjoia20iLCJTY2FsZUNvbnRyb2wuTWlsZXMiOiJtaSIsIlNjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzIjoibm0ifSxraT10LndpbmRvdy5IVE1MSW1hZ2VFbGVtZW50LEFpPXQud2luZG93LkhUTUxFbGVtZW50LE1pPXQud2luZG93LkltYWdlQml0bWFwLFNpPXtjZW50ZXI6WzAsMF0sem9vbTowLGJlYXJpbmc6MCxwaXRjaDowLG1pblpvb206LTIsbWF4Wm9vbToyMixtaW5QaXRjaDowLG1heFBpdGNoOjYwLGludGVyYWN0aXZlOiEwLHNjcm9sbFpvb206ITAsYm94Wm9vbTohMCxkcmFnUm90YXRlOiEwLGRyYWdQYW46ITAsa2V5Ym9hcmQ6ITAsZG91YmxlQ2xpY2tab29tOiEwLHRvdWNoWm9vbVJvdGF0ZTohMCx0b3VjaFBpdGNoOiEwLGJlYXJpbmdTbmFwOjcsY2xpY2tUb2xlcmFuY2U6MyxwaXRjaFdpdGhSb3RhdGU6ITAsaGFzaDohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITAsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsdHJhY2tSZXNpemU6ITAscmVuZGVyV29ybGRDb3BpZXM6ITAscmVmcmVzaEV4cGlyZWRUaWxlczohMCxtYXhUaWxlQ2FjaGVTaXplOm51bGwsbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiJzYW5zLXNlcmlmIix0cmFuc2Zvcm1SZXF1ZXN0Om51bGwsYWNjZXNzVG9rZW46bnVsbCxmYWRlRHVyYXRpb246MzAwLGNyb3NzU291cmNlQ29sbGlzaW9uczohMH0sRWk9ZnVuY3Rpb24obil7ZnVuY3Rpb24gaShlKXt2YXIgcj10aGlzO2lmKG51bGwhPShlPXQuZXh0ZW5kKHt9LFNpLGUpKS5taW5ab29tJiZudWxsIT1lLm1heFpvb20mJmUubWluWm9vbT5lLm1heFpvb20pdGhyb3cgbmV3IEVycm9yKCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblpvb20iKTtpZihudWxsIT1lLm1pblBpdGNoJiZudWxsIT1lLm1heFBpdGNoJiZlLm1pblBpdGNoPmUubWF4UGl0Y2gpdGhyb3cgbmV3IEVycm9yKCJtYXhQaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5QaXRjaCIpO2lmKG51bGwhPWUubWluUGl0Y2gmJmUubWluUGl0Y2g8MCl0aHJvdyBuZXcgRXJyb3IoIm1pblBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAiKTtpZihudWxsIT1lLm1heFBpdGNoJiZlLm1heFBpdGNoPjYwKXRocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjAiKTt2YXIgaT1uZXcgQW4oZS5taW5ab29tLGUubWF4Wm9vbSxlLm1pblBpdGNoLGUubWF4UGl0Y2gsZS5yZW5kZXJXb3JsZENvcGllcyk7aWYobi5jYWxsKHRoaXMsaSxlKSx0aGlzLl9pbnRlcmFjdGl2ZT1lLmludGVyYWN0aXZlLHRoaXMuX21heFRpbGVDYWNoZVNpemU9ZS5tYXhUaWxlQ2FjaGVTaXplLHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcj1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLl9hbnRpYWxpYXM9ZS5hbnRpYWxpYXMsdGhpcy5fdHJhY2tSZXNpemU9ZS50cmFja1Jlc2l6ZSx0aGlzLl9iZWFyaW5nU25hcD1lLmJlYXJpbmdTbmFwLHRoaXMuX3JlZnJlc2hFeHBpcmVkVGlsZXM9ZS5yZWZyZXNoRXhwaXJlZFRpbGVzLHRoaXMuX2ZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLl9jcm9zc1NvdXJjZUNvbGxpc2lvbnM9ZS5jcm9zc1NvdXJjZUNvbGxpc2lvbnMsdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3I9MSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVuZGVyVGFza1F1ZXVlPW5ldyB3aSx0aGlzLl9jb250cm9scz1bXSx0aGlzLl9tYXBJZD10LnVuaXF1ZUlkKCksdGhpcy5fbG9jYWxlPXQuZXh0ZW5kKHt9LFRpLGUubG9jYWxlKSx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgdC5SZXF1ZXN0TWFuYWdlcihlLnRyYW5zZm9ybVJlcXVlc3QsZS5hY2Nlc3NUb2tlbiksInN0cmluZyI9PXR5cGVvZiBlLmNvbnRhaW5lcil7aWYodGhpcy5fY29udGFpbmVyPXQud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUuY29udGFpbmVyKSwhdGhpcy5fY29udGFpbmVyKXRocm93IG5ldyBFcnJvcigiQ29udGFpbmVyICciK2UuY29udGFpbmVyKyInIG5vdCBmb3VuZC4iKX1lbHNle2lmKCEoZS5jb250YWluZXIgaW5zdGFuY2VvZiBBaSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHR5cGU6ICdjb250YWluZXInIG11c3QgYmUgYSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQuIik7dGhpcy5fY29udGFpbmVyPWUuY29udGFpbmVyfWlmKGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksdC5iaW5kQWxsKFsiX29uV2luZG93T25saW5lIiwiX29uV2luZG93UmVzaXplIiwiX2NvbnRleHRMb3N0IiwiX2NvbnRleHRSZXN0b3JlZCJdLHRoaXMpLHRoaXMuX3NldHVwQ29udGFpbmVyKCksdGhpcy5fc2V0dXBQYWludGVyKCksdm9pZCAwPT09dGhpcy5wYWludGVyKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wuIik7dGhpcy5vbigibW92ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3VwZGF0ZSghMSl9KSksdGhpcy5vbigibW92ZWVuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3VwZGF0ZSghMSl9KSksdGhpcy5vbigiem9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3VwZGF0ZSghMCl9KSksdm9pZCAwIT09dC53aW5kb3cmJih0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJvbmxpbmUiLHRoaXMuX29uV2luZG93T25saW5lLCExKSx0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSksdGhpcy5oYW5kbGVycz1uZXcgeWkodGhpcyxlKTt2YXIgYT0ic3RyaW5nIj09dHlwZW9mIGUuaGFzaCYmZS5oYXNofHx2b2lkIDA7dGhpcy5faGFzaD1lLmhhc2gmJm5ldyBTbihhKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8KHRoaXMuanVtcFRvKHtjZW50ZXI6ZS5jZW50ZXIsem9vbTplLnpvb20sYmVhcmluZzplLmJlYXJpbmcscGl0Y2g6ZS5waXRjaH0pLGUuYm91bmRzJiYodGhpcy5yZXNpemUoKSx0aGlzLmZpdEJvdW5kcyhlLmJvdW5kcyx0LmV4dGVuZCh7fSxlLmZpdEJvdW5kc09wdGlvbnMse2R1cmF0aW9uOjB9KSkpKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IGJpKHtjdXN0b21BdHRyaWJ1dGlvbjplLmN1c3RvbUF0dHJpYnV0aW9ufSkpLHRoaXMuYWRkQ29udHJvbChuZXcgX2ksZS5sb2dvUG9zaXRpb24pLHRoaXMub24oInN0eWxlLmxvYWQiLChmdW5jdGlvbigpe3IudHJhbnNmb3JtLnVubW9kaWZpZWQmJnIuanVtcFRvKHIuc3R5bGUuc3R5bGVzaGVldCl9KSksdGhpcy5vbigiZGF0YSIsKGZ1bmN0aW9uKGUpe3IuX3VwZGF0ZSgic3R5bGUiPT09ZS5kYXRhVHlwZSksci5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGEiLGUpKX0pKSx0aGlzLm9uKCJkYXRhbG9hZGluZyIsKGZ1bmN0aW9uKGUpe3IuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhbG9hZGluZyIsZSkpfSkpfW4mJihpLl9fcHJvdG9fXz1uKSxpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4mJm4ucHJvdG90eXBlKSxpLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pO3ZhciBhPXtzaG93VGlsZUJvdW5kYXJpZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd1BhZGRpbmc6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd0NvbGxpc2lvbkJveGVzOntjb25maWd1cmFibGU6ITB9LHNob3dPdmVyZHJhd0luc3BlY3Rvcjp7Y29uZmlndXJhYmxlOiEwfSxyZXBhaW50Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LHZlcnNpb246e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBpLnByb3RvdHlwZS5fZ2V0TWFwSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwSWR9LGkucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDA9PT1yJiZlLmdldERlZmF1bHRQb3NpdGlvbiYmKHI9ZS5nZXREZWZhdWx0UG9zaXRpb24oKSksdm9pZCAwPT09ciYmKHI9InRvcC1yaWdodCIpLCFlfHwhZS5vbkFkZClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5hZGRDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuIikpKTt2YXIgbj1lLm9uQWRkKHRoaXMpO3RoaXMuX2NvbnRyb2xzLnB1c2goZSk7dmFyIGk9dGhpcy5fY29udHJvbFBvc2l0aW9uc1tyXTtyZXR1cm4tMSE9PXIuaW5kZXhPZigiYm90dG9tIik/aS5pbnNlcnRCZWZvcmUobixpLmZpcnN0Q2hpbGQpOmkuYXBwZW5kQ2hpbGQobiksdGhpc30saS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbihlKXtpZighZXx8IWUub25SZW1vdmUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudCB0byBtYXAucmVtb3ZlQ29udHJvbCgpLiBBcmd1bWVudCBtdXN0IGJlIGEgY29udHJvbCB3aXRoIG9uQWRkIGFuZCBvblJlbW92ZSBtZXRob2RzLiIpKSk7dmFyIHI9dGhpcy5fY29udHJvbHMuaW5kZXhPZihlKTtyZXR1cm4gcj4tMSYmdGhpcy5fY29udHJvbHMuc3BsaWNlKHIsMSksZS5vblJlbW92ZSh0aGlzKSx0aGlzfSxpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpLG49clswXSxpPXJbMV07dGhpcy5fcmVzaXplQ2FudmFzKG4saSksdGhpcy50cmFuc2Zvcm0ucmVzaXplKG4saSksdGhpcy5wYWludGVyLnJlc2l6ZShuLGkpO3ZhciBhPSF0aGlzLl9tb3Zpbmc7cmV0dXJuIGEmJih0aGlzLnN0b3AoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIsZSkpLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLGUpKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZXNpemUiLGUpKSxhJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLGUpKSx0aGlzfSxpLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uZ2V0Qm91bmRzKCl9LGkucHJvdG90eXBlLmdldE1heEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRNYXhCb3VuZHMoKX0saS5wcm90b3R5cGUuc2V0TWF4Qm91bmRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5zZXRNYXhCb3VuZHModC5MbmdMYXRCb3VuZHMuY29udmVydChlKSksdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLnNldE1pblpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8tMjp0KT49LTImJnQ8PXRoaXMudHJhbnNmb3JtLm1heFpvb20pcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKTx0JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1pblpvb20gbXVzdCBiZSBiZXR3ZWVuIC0yIGFuZCB0aGUgY3VycmVudCBtYXhab29tLCBpbmNsdXNpdmUiKX0saS5wcm90b3R5cGUuZ2V0TWluWm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tfSxpLnByb3RvdHlwZS5zZXRNYXhab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MjI6dCk+PXRoaXMudHJhbnNmb3JtLm1pblpvb20pcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKT50JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluWm9vbSIpfSxpLnByb3RvdHlwZS5nZXRNYXhab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb219LGkucHJvdG90eXBlLnNldE1pblBpdGNoPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MDp0KTwwKXRocm93IG5ldyBFcnJvcigibWluUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCIpO2lmKHQ+PTAmJnQ8PXRoaXMudHJhbnNmb3JtLm1heFBpdGNoKXJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5QaXRjaD10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0UGl0Y2goKTx0JiZ0aGlzLnNldFBpdGNoKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtaW5QaXRjaCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgdGhlIGN1cnJlbnQgbWF4UGl0Y2gsIGluY2x1c2l2ZSIpfSxpLnByb3RvdHlwZS5nZXRNaW5QaXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5taW5QaXRjaH0saS5wcm90b3R5cGUuc2V0TWF4UGl0Y2g9ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD82MDp0KT42MCl0aHJvdyBuZXcgRXJyb3IoIm1heFBpdGNoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDYwIik7aWYodD49dGhpcy50cmFuc2Zvcm0ubWluUGl0Y2gpcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFBpdGNoPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRQaXRjaCgpPnQmJnRoaXMuc2V0UGl0Y2godCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1heFBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblBpdGNoIil9LGkucHJvdG90eXBlLmdldE1heFBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFBpdGNofSxpLnByb3RvdHlwZS5nZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllc30saS5wcm90b3R5cGUuc2V0UmVuZGVyV29ybGRDb3BpZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzPXQsdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodC5MbmdMYXQuY29udmVydChlKSl9LGkucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQoZSkpfSxpLnByb3RvdHlwZS5pc01vdmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3Zpbmd8fHRoaXMuaGFuZGxlcnMuaXNNb3ZpbmcoKX0saS5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb21pbmd8fHRoaXMuaGFuZGxlcnMuaXNab29taW5nKCl9LGkucHJvdG90eXBlLmlzUm90YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm90YXRpbmd8fHRoaXMuaGFuZGxlcnMuaXNSb3RhdGluZygpfSxpLnByb3RvdHlwZS5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcztpZigibW91c2VlbnRlciI9PT10fHwibW91c2VvdmVyIj09PXQpe3ZhciBhPSExO3JldHVybntsYXllcjplLGxpc3RlbmVyOnIsZGVsZWdhdGVzOnttb3VzZW1vdmU6ZnVuY3Rpb24obil7dmFyIG89aS5nZXRMYXllcihlKT9pLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhuLnBvaW50LHtsYXllcnM6W2VdfSk6W107by5sZW5ndGg/YXx8KGE9ITAsci5jYWxsKGksbmV3IFJuKHQsaSxuLm9yaWdpbmFsRXZlbnQse2ZlYXR1cmVzOm99KSkpOmE9ITF9LG1vdXNlb3V0OmZ1bmN0aW9uKCl7YT0hMX19fX1pZigibW91c2VsZWF2ZSI9PT10fHwibW91c2VvdXQiPT09dCl7dmFyIG89ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6cixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihuKXsoaS5nZXRMYXllcihlKT9pLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhuLnBvaW50LHtsYXllcnM6W2VdfSk6W10pLmxlbmd0aD9vPSEwOm8mJihvPSExLHIuY2FsbChpLG5ldyBSbih0LGksbi5vcmlnaW5hbEV2ZW50KSkpfSxtb3VzZW91dDpmdW5jdGlvbihlKXtvJiYobz0hMSxyLmNhbGwoaSxuZXcgUm4odCxpLGUub3JpZ2luYWxFdmVudCkpKX19fX1yZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpyLGRlbGVnYXRlczoobj17fSxuW3RdPWZ1bmN0aW9uKHQpe3ZhciBuPWkuZ2V0TGF5ZXIoZSk/aS5xdWVyeVJlbmRlcmVkRmVhdHVyZXModC5wb2ludCx7bGF5ZXJzOltlXX0pOltdO24ubGVuZ3RoJiYodC5mZWF0dXJlcz1uLHIuY2FsbChpLHQpLGRlbGV0ZSB0LmZlYXR1cmVzKX0sbil9fSxpLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09cilyZXR1cm4gbi5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSk7dmFyIGk9dGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodCxlLHIpO2Zvcih2YXIgYSBpbiB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnM9dGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzfHx7fSx0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF09dGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdfHxbXSx0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0ucHVzaChpKSxpLmRlbGVnYXRlcyl0aGlzLm9uKGEsaS5kZWxlZ2F0ZXNbYV0pO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vbmNlLmNhbGwodGhpcyx0LGUpO3ZhciBpPXRoaXMuX2NyZWF0ZURlbGVnYXRlZExpc3RlbmVyKHQsZSxyKTtmb3IodmFyIGEgaW4gaS5kZWxlZ2F0ZXMpdGhpcy5vbmNlKGEsaS5kZWxlZ2F0ZXNbYV0pO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXM7aWYodm9pZCAwPT09cilyZXR1cm4gbi5wcm90b3R5cGUub2ZmLmNhbGwodGhpcyx0LGUpO3JldHVybiB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMmJnRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XSYmZnVuY3Rpb24obil7Zm9yKHZhciBhPW5bdF0sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2lmKHMubGF5ZXI9PT1lJiZzLmxpc3RlbmVyPT09cil7Zm9yKHZhciBsIGluIHMuZGVsZWdhdGVzKWkub2ZmKGwscy5kZWxlZ2F0ZXNbbF0pO3JldHVybiBhLnNwbGljZShvLDEpLGl9fX0odGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzKSx0aGlzfSxpLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXtpZighdGhpcy5zdHlsZSlyZXR1cm5bXTt2YXIgbjtpZih2b2lkIDAhPT1yfHx2b2lkIDA9PT1lfHxlIGluc3RhbmNlb2YgdC5Qb2ludHx8QXJyYXkuaXNBcnJheShlKXx8KHI9ZSxlPXZvaWQgMCkscj1yfHx7fSwoZT1lfHxbWzAsMF0sW3RoaXMudHJhbnNmb3JtLndpZHRoLHRoaXMudHJhbnNmb3JtLmhlaWdodF1dKWluc3RhbmNlb2YgdC5Qb2ludHx8Im51bWJlciI9PXR5cGVvZiBlWzBdKW49W3QuUG9pbnQuY29udmVydChlKV07ZWxzZXt2YXIgaT10LlBvaW50LmNvbnZlcnQoZVswXSksYT10LlBvaW50LmNvbnZlcnQoZVsxXSk7bj1baSxuZXcgdC5Qb2ludChhLngsaS55KSxhLG5ldyB0LlBvaW50KGkueCxhLnkpLGldfXJldHVybiB0aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhuLHIsdGhpcy50cmFuc2Zvcm0pfSxpLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyh0LGUpfSxpLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlLHIpe3JldHVybiExIT09KHI9dC5leHRlbmQoe30se2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTp0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9LHIpKS5kaWZmJiZyLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT09PXRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSYmdGhpcy5zdHlsZSYmZT8odGhpcy5fZGlmZlN0eWxlKGUsciksdGhpcyk6KHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1yLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSx0aGlzLl91cGRhdGVTdHlsZShlLHIpKX0saS5wcm90b3R5cGUuX2dldFVJU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvY2FsZVt0XTtpZihudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBVSSBzdHJpbmcgJyIrdCsiJyIpO3JldHVybiBlfSxpLnByb3RvdHlwZS5fdXBkYXRlU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnN0eWxlLl9yZW1vdmUoKSksdD8odGhpcy5zdHlsZT1uZXcgcWUodGhpcyxlfHx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5zdHlsZS5sb2FkVVJMKHQpOnRoaXMuc3R5bGUubG9hZEpTT04odCksdGhpcyk6KGRlbGV0ZSB0aGlzLnN0eWxlLHRoaXMpfSxpLnByb3RvdHlwZS5fbGF6eUluaXRFbXB0eVN0eWxlPWZ1bmN0aW9uKCl7dGhpcy5zdHlsZXx8KHRoaXMuc3R5bGU9bmV3IHFlKHRoaXMse30pLHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtzdHlsZTp0aGlzLnN0eWxlfSksdGhpcy5zdHlsZS5sb2FkRW1wdHkoKSl9LGkucHJvdG90eXBlLl9kaWZmU3R5bGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIGk9dGhpcy5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3R5bGVVUkwoZSksYT10aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuU3R5bGUpO3QuZ2V0SlNPTihhLChmdW5jdGlvbihlLGkpe2U/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOmkmJm4uX3VwZGF0ZURpZmYoaSxyKX0pKX1lbHNlIm9iamVjdCI9PXR5cGVvZiBlJiZ0aGlzLl91cGRhdGVEaWZmKGUscil9LGkucHJvdG90eXBlLl91cGRhdGVEaWZmPWZ1bmN0aW9uKGUscil7dHJ5e3RoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCl9Y2F0Y2gobil7dC53YXJuT25jZSgiVW5hYmxlIHRvIHBlcmZvcm0gc3R5bGUgZGlmZjogIisobi5tZXNzYWdlfHxuLmVycm9yfHxuKSsiLiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLiIpLHRoaXMuX3VwZGF0ZVN0eWxlKGUscil9fSxpLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LGkucHJvdG90eXBlLmlzU3R5bGVMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZT90aGlzLnN0eWxlLmxvYWRlZCgpOnQud2Fybk9uY2UoIlRoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuIil9LGkucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnIitlKyInIikpKX0saS5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoImxvYWRlZCIhPT1pLnN0YXRlJiYiZXJyb3JlZCIhPT1pLnN0YXRlKXJldHVybiExfX1yZXR1cm4hMH0saS5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LGkucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZSh0KX0saS5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaT1uLnBpeGVsUmF0aW87dm9pZCAwPT09aSYmKGk9MSk7dmFyIGE9bi5zZGY7dm9pZCAwPT09YSYmKGE9ITEpO3ZhciBvPW4uc3RyZXRjaFgscz1uLnN0cmV0Y2hZLGw9bi5jb250ZW50O3RoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO2lmKHIgaW5zdGFuY2VvZiBraXx8TWkmJnIgaW5zdGFuY2VvZiBNaSl7dmFyIGM9dC5icm93c2VyLmdldEltYWdlRGF0YShyKSx1PWMud2lkdGgsZj1jLmhlaWdodCxoPWMuZGF0YTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDp1LGhlaWdodDpmfSxoKSxwaXhlbFJhdGlvOmksc3RyZXRjaFg6byxzdHJldGNoWTpzLGNvbnRlbnQ6bCxzZGY6YSx2ZXJzaW9uOjB9KX1lbHNle2lmKHZvaWQgMD09PXIud2lkdGh8fHZvaWQgMD09PXIuaGVpZ2h0KXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7dmFyIHA9ci53aWR0aCxkPXIuaGVpZ2h0LG09ci5kYXRhLGc9cjt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpwLGhlaWdodDpkfSxuZXcgVWludDhBcnJheShtKSkscGl4ZWxSYXRpbzppLHN0cmV0Y2hYOm8sc3RyZXRjaFk6cyxjb250ZW50Omwsc2RmOmEsdmVyc2lvbjowLHVzZXJJbWFnZTpnfSksZy5vbkFkZCYmZy5vbkFkZCh0aGlzLGUpfX0saS5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLnN0eWxlLmdldEltYWdlKGUpO2lmKCFuKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBtYXAgaGFzIG5vIGltYWdlIHdpdGggdGhhdCBpZC4gSWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgaW1hZ2UgdXNlIGBtYXAuYWRkSW1hZ2UoLi4uKWAgaW5zdGVhZC4iKSkpO3ZhciBpPXIgaW5zdGFuY2VvZiBraXx8TWkmJnIgaW5zdGFuY2VvZiBNaT90LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKHIpOnIsYT1pLndpZHRoLG89aS5oZWlnaHQscz1pLmRhdGE7aWYodm9pZCAwPT09YXx8dm9pZCAwPT09bylyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAudXBkYXRlSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAsIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAiKSkpO2lmKGEhPT1uLmRhdGEud2lkdGh8fG8hPT1uLmRhdGEuaGVpZ2h0KXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB1cGRhdGVkIGltYWdlIG11c3QgYmUgdGhhdCBzYW1lIGFzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBpbWFnZSIpKSk7dmFyIGw9IShyIGluc3RhbmNlb2Yga2l8fE1pJiZyIGluc3RhbmNlb2YgTWkpO24uZGF0YS5yZXBsYWNlKHMsbCksdGhpcy5zdHlsZS51cGRhdGVJbWFnZShlLG4pfSxpLnByb3RvdHlwZS5oYXNJbWFnZT1mdW5jdGlvbihlKXtyZXR1cm4gZT8hIXRoaXMuc3R5bGUuZ2V0SW1hZ2UoZSk6KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBpbWFnZSBpZCIpKSksITEpfSxpLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXt0aGlzLnN0eWxlLnJlbW92ZUltYWdlKHQpfSxpLnByb3RvdHlwZS5sb2FkSW1hZ2U9ZnVuY3Rpb24oZSxyKXt0LmdldEltYWdlKHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5JbWFnZSkscil9LGkucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5saXN0SW1hZ2VzKCl9LGkucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHRoaXMuc3R5bGUuYWRkTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5tb3ZlTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5yZW1vdmVMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVMYXllcih0KSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXllcih0KX0saS5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheWVyWm9vbVJhbmdlKHQsZSxyKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksdGhpcy5zdHlsZS5zZXRGaWx0ZXIodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIodCl9LGkucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIsbiksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkodCxlKX0saS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyLG4pLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0saS5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHRoaXMuc3R5bGUuc2V0TGlnaHQodCxlKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmdldExpZ2h0KCl9LGkucHJvdG90eXBlLnNldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnNldEZlYXR1cmVTdGF0ZSh0LGUpLHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVGZWF0dXJlU3RhdGUodCxlKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUuZ2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldEZlYXR1cmVTdGF0ZSh0KX0saS5wcm90b3R5cGUuZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0saS5wcm90b3R5cGUuZ2V0Q2FudmFzQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcn0saS5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc30saS5wcm90b3R5cGUuX2NvbnRhaW5lckRpbWVuc2lvbnM9ZnVuY3Rpb24oKXt2YXIgdD0wLGU9MDtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodD10aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGh8fDQwMCxlPXRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHR8fDMwMCksW3QsZV19LGkucHJvdG90eXBlLl9kZXRlY3RNaXNzaW5nQ1NTPWZ1bmN0aW9uKCl7InJnYigyNTAsIDEyOCwgMTE0KSIhPT10LndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21pc3NpbmdDU1NDYW5hcnkpLmdldFByb3BlcnR5VmFsdWUoImJhY2tncm91bmQtY29sb3IiKSYmdC53YXJuT25jZSgiVGhpcyBwYWdlIGFwcGVhcnMgdG8gYmUgbWlzc2luZyBDU1MgZGVjbGFyYXRpb25zIGZvciBNYXBib3ggR0wgSlMsIHdoaWNoIG1heSBjYXVzZSB0aGUgbWFwIHRvIGRpc3BsYXkgaW5jb3JyZWN0bHkuIFBsZWFzZSBlbnN1cmUgeW91ciBwYWdlIGluY2x1ZGVzIG1hcGJveC1nbC5jc3MsIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvLiIpfSxpLnByb3RvdHlwZS5fc2V0dXBDb250YWluZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1tYXAiKSwodGhpcy5fbWlzc2luZ0NTU0NhbmFyeT1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY2FuYXJ5Iix0KSkuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl9kZXRlY3RNaXNzaW5nQ1NTKCk7dmFyIGU9dGhpcy5fY2FudmFzQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jYW52YXMtY29udGFpbmVyIix0KTt0aGlzLl9pbnRlcmFjdGl2ZSYmZS5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2NhbnZhcz1yLmNyZWF0ZSgiY2FudmFzIiwibWFwYm94Z2wtY2FudmFzIixlKSx0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsdGhpcy5fY29udGV4dExvc3QsITEpLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdGhpcy5fY29udGV4dFJlc3RvcmVkLCExKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiTWFwIik7dmFyIG49dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpO3RoaXMuX3Jlc2l6ZUNhbnZhcyhuWzBdLG5bMV0pO3ZhciBpPXRoaXMuX2NvbnRyb2xDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNvbnRyb2wtY29udGFpbmVyIix0KSxhPXRoaXMuX2NvbnRyb2xQb3NpdGlvbnM9e307WyJ0b3AtbGVmdCIsInRvcC1yaWdodCIsImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0Il0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YVt0XT1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybC0iK3QsaSl9KSl9LGkucHJvdG90eXBlLl9yZXNpemVDYW52YXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpb3x8MTt0aGlzLl9jYW52YXMud2lkdGg9biplLHRoaXMuX2NhbnZhcy5oZWlnaHQ9bipyLHRoaXMuX2NhbnZhcy5zdHlsZS53aWR0aD1lKyJweCIsdGhpcy5fY2FudmFzLnN0eWxlLmhlaWdodD1yKyJweCJ9LGkucHJvdG90eXBlLl9zZXR1cFBhaW50ZXI9ZnVuY3Rpb24oKXt2YXIgcj10LmV4dGVuZCh7fSxlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMse2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyLGFudGlhbGlhczp0aGlzLl9hbnRpYWxpYXN8fCExfSksbj10aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHIpfHx0aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixyKTtuPyh0aGlzLnBhaW50ZXI9bmV3IF9uKG4sdGhpcy50cmFuc2Zvcm0pLHQud2VicFN1cHBvcnRlZC50ZXN0U3VwcG9ydChuKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTCIpKSl9LGkucHJvdG90eXBlLl9jb250ZXh0TG9zdD1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZnJhbWUmJih0aGlzLl9mcmFtZS5jYW5jZWwoKSx0aGlzLl9mcmFtZT1udWxsKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIndlYmdsY29udGV4dGxvc3QiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LGkucHJvdG90eXBlLl9jb250ZXh0UmVzdG9yZWQ9ZnVuY3Rpb24oZSl7dGhpcy5fc2V0dXBQYWludGVyKCksdGhpcy5yZXNpemUoKSx0aGlzLl91cGRhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIndlYmdsY29udGV4dHJlc3RvcmVkIix7b3JpZ2luYWxFdmVudDplfSkpfSxpLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fc3R5bGVEaXJ0eSYmIXRoaXMuX3NvdXJjZXNEaXJ0eSYmISF0aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLmxvYWRlZCgpfSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlPyh0aGlzLl9zdHlsZURpcnR5PXRoaXMuX3N0eWxlRGlydHl8fHQsdGhpcy5fc291cmNlc0RpcnR5PSEwLHRoaXMudHJpZ2dlclJlcGFpbnQoKSx0aGlzKTp0aGlzfSxpLnByb3RvdHlwZS5fcmVxdWVzdFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91cGRhdGUoKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUuYWRkKHQpfSxpLnByb3RvdHlwZS5fY2FuY2VsUmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJlbW92ZSh0KX0saS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbihlKXt2YXIgcixuPXRoaXMsaT0wLGE9dGhpcy5wYWludGVyLmNvbnRleHQuZXh0VGltZXJRdWVyeTtpZih0aGlzLmxpc3RlbnMoImdwdS10aW1pbmctZnJhbWUiKSYmKHI9YS5jcmVhdGVRdWVyeUVYVCgpLGEuYmVnaW5RdWVyeUVYVChhLlRJTUVfRUxBUFNFRF9FWFQsciksaT10LmJyb3dzZXIubm93KCkpLHRoaXMucGFpbnRlci5jb250ZXh0LnNldERpcnR5KCksdGhpcy5wYWludGVyLnNldEJhc2VTdGF0ZSgpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5ydW4oZSksIXRoaXMuX3JlbW92ZWQpe3ZhciBvPSExO2lmKHRoaXMuc3R5bGUmJnRoaXMuX3N0eWxlRGlydHkpe3RoaXMuX3N0eWxlRGlydHk9ITE7dmFyIHM9dGhpcy50cmFuc2Zvcm0uem9vbSxsPXQuYnJvd3Nlci5ub3coKTt0aGlzLnN0eWxlLnpvb21IaXN0b3J5LnVwZGF0ZShzLGwpO3ZhciBjPW5ldyB0LkV2YWx1YXRpb25QYXJhbWV0ZXJzKHMse25vdzpsLGZhZGVEdXJhdGlvbjp0aGlzLl9mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6dGhpcy5zdHlsZS56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnRoaXMuc3R5bGUuZ2V0VHJhbnNpdGlvbigpfSksdT1jLmNyb3NzRmFkaW5nRmFjdG9yKCk7MT09PXUmJnU9PT10aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcnx8KG89ITAsdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3I9dSksdGhpcy5zdHlsZS51cGRhdGUoYyl9aWYodGhpcy5zdHlsZSYmdGhpcy5fc291cmNlc0RpcnR5JiYodGhpcy5fc291cmNlc0RpcnR5PSExLHRoaXMuc3R5bGUuX3VwZGF0ZVNvdXJjZXModGhpcy50cmFuc2Zvcm0pKSx0aGlzLl9wbGFjZW1lbnREaXJ0eT10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLl91cGRhdGVQbGFjZW1lbnQodGhpcy5wYWludGVyLnRyYW5zZm9ybSx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyx0aGlzLl9mYWRlRHVyYXRpb24sdGhpcy5fY3Jvc3NTb3VyY2VDb2xsaXNpb25zKSx0aGlzLnBhaW50ZXIucmVuZGVyKHRoaXMuc3R5bGUse3Nob3dUaWxlQm91bmRhcmllczp0aGlzLnNob3dUaWxlQm91bmRhcmllcyxzaG93T3ZlcmRyYXdJbnNwZWN0b3I6dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yLHJvdGF0aW5nOnRoaXMuaXNSb3RhdGluZygpLHpvb21pbmc6dGhpcy5pc1pvb21pbmcoKSxtb3Zpbmc6dGhpcy5pc01vdmluZygpLGZhZGVEdXJhdGlvbjp0aGlzLl9mYWRlRHVyYXRpb24sc2hvd1BhZGRpbmc6dGhpcy5zaG93UGFkZGluZyxncHVUaW1pbmc6ISF0aGlzLmxpc3RlbnMoImdwdS10aW1pbmctbGF5ZXIiKX0pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVuZGVyIikpLHRoaXMubG9hZGVkKCkmJiF0aGlzLl9sb2FkZWQmJih0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJsb2FkIikpKSx0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5oYXNUcmFuc2l0aW9ucygpfHxvKSYmKHRoaXMuX3N0eWxlRGlydHk9ITApLHRoaXMuc3R5bGUmJiF0aGlzLl9wbGFjZW1lbnREaXJ0eSYmdGhpcy5zdHlsZS5fcmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpLHRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1mcmFtZSIpKXt2YXIgZj10LmJyb3dzZXIubm93KCktaTthLmVuZFF1ZXJ5RVhUKGEuVElNRV9FTEFQU0VEX0VYVCxyKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciBlPWEuZ2V0UXVlcnlPYmplY3RFWFQocixhLlFVRVJZX1JFU1VMVF9FWFQpLzFlNjthLmRlbGV0ZVF1ZXJ5RVhUKHIpLG4uZmlyZShuZXcgdC5FdmVudCgiZ3B1LXRpbWluZy1mcmFtZSIse2NwdVRpbWU6ZixncHVUaW1lOmV9KSl9KSw1MCl9aWYodGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWxheWVyIikpe3ZhciBoPXRoaXMucGFpbnRlci5jb2xsZWN0R3B1VGltZXJzKCk7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgZT1uLnBhaW50ZXIucXVlcnlHcHVUaW1lcnMoaCk7bi5maXJlKG5ldyB0LkV2ZW50KCJncHUtdGltaW5nLWxheWVyIix7bGF5ZXJUaW1lczplfSkpfSksNTApfXJldHVybiB0aGlzLl9zb3VyY2VzRGlydHl8fHRoaXMuX3N0eWxlRGlydHl8fHRoaXMuX3BsYWNlbWVudERpcnR5fHx0aGlzLl9yZXBhaW50P3RoaXMudHJpZ2dlclJlcGFpbnQoKTohdGhpcy5pc01vdmluZygpJiZ0aGlzLmxvYWRlZCgpJiYodGhpcy5fZnVsbHlMb2FkZWR8fCh0aGlzLl9mdWxseUxvYWRlZD0hMCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJpZGxlIikpKSx0aGlzfX0saS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKTtmb3IodmFyIGU9MCxyPXRoaXMuX2NvbnRyb2xzO2U8ci5sZW5ndGg7ZSs9MSl7cltlXS5vblJlbW92ZSh0aGlzKX10aGlzLl9jb250cm9scz1bXSx0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lLmNhbmNlbCgpLHRoaXMuX2ZyYW1lPW51bGwpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMucGFpbnRlci5kZXN0cm95KCksdGhpcy5oYW5kbGVycy5kZXN0cm95KCksZGVsZXRlIHRoaXMuaGFuZGxlcnMsdGhpcy5zZXRTdHlsZShudWxsKSx2b2lkIDAhPT10LndpbmRvdyYmKHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpLHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpKTt2YXIgbj10aGlzLnBhaW50ZXIuY29udGV4dC5nbC5nZXRFeHRlbnNpb24oIldFQkdMX2xvc2VfY29udGV4dCIpO24mJm4ubG9zZUNvbnRleHQoKSxMaSh0aGlzLl9jYW52YXNDb250YWluZXIpLExpKHRoaXMuX2NvbnRyb2xDb250YWluZXIpLExpKHRoaXMuX21pc3NpbmdDU1NDYW5hcnkpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1tYXAiKSx0aGlzLl9yZW1vdmVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVtb3ZlIikpfSxpLnByb3RvdHlwZS50cmlnZ2VyUmVwYWludD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zdHlsZSYmIXRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWU9dC5icm93c2VyLmZyYW1lKChmdW5jdGlvbih0KXtlLl9mcmFtZT1udWxsLGUuX3JlbmRlcih0KX0pKSl9LGkucHJvdG90eXBlLl9vbldpbmRvd09ubGluZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5fb25XaW5kb3dSZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMucmVzaXplKHtvcmlnaW5hbEV2ZW50OnR9KS5fdXBkYXRlKCl9LGEuc2hvd1RpbGVCb3VuZGFyaWVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxhLnNob3dUaWxlQm91bmRhcmllcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzIT09dCYmKHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcz10LHRoaXMuX3VwZGF0ZSgpKX0sYS5zaG93UGFkZGluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dQYWRkaW5nfSxhLnNob3dQYWRkaW5nLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93UGFkZGluZyE9PXQmJih0aGlzLl9zaG93UGFkZGluZz10LHRoaXMuX3VwZGF0ZSgpKX0sYS5zaG93Q29sbGlzaW9uQm94ZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LGEuc2hvd0NvbGxpc2lvbkJveGVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMhPT10JiYodGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPXQsdD90aGlzLnN0eWxlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzKCk6dGhpcy5fdXBkYXRlKCkpfSxhLnNob3dPdmVyZHJhd0luc3BlY3Rvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcn0sYS5zaG93T3ZlcmRyYXdJbnNwZWN0b3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciE9PXQmJih0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9dCx0aGlzLl91cGRhdGUoKSl9LGEucmVwYWludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3JlcGFpbnR9LGEucmVwYWludC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVwYWludCE9PXQmJih0aGlzLl9yZXBhaW50PXQsdGhpcy50cmlnZ2VyUmVwYWludCgpKX0sYS52ZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3ZlcnRpY2VzfSxhLnZlcnRpY2VzLnNldD1mdW5jdGlvbih0KXt0aGlzLl92ZXJ0aWNlcz10LHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5fc2V0Q2FjaGVMaW1pdHM9ZnVuY3Rpb24oZSxyKXt0LnNldENhY2hlTGltaXRzKGUscil9LGEudmVyc2lvbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC52ZXJzaW9ufSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLnByb3RvdHlwZSxhKSxpfSh4aSk7ZnVuY3Rpb24gTGkodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9dmFyIENpPXtzaG93Q29tcGFzczohMCxzaG93Wm9vbTohMCx2aXN1YWxpemVQaXRjaDohMX0sUGk9ZnVuY3Rpb24oZSl7dmFyIG49dGhpczt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sQ2ksZSksdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMub3B0aW9ucy5zaG93Wm9vbSYmKHQuYmluZEFsbChbIl9zZXRCdXR0b25UaXRsZSIsIl91cGRhdGVab29tQnV0dG9ucyJdLHRoaXMpLHRoaXMuX3pvb21JbkJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtem9vbS1pbiIsKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9tYXAuem9vbUluKHt9LHtvcmlnaW5hbEV2ZW50OnR9KX0pKSxyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fem9vbUluQnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtem9vbS1vdXQiLChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbWFwLnpvb21PdXQoe30se29yaWdpbmFsRXZlbnQ6dH0pfSkpLHIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl96b29tT3V0QnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCkpLHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHQuYmluZEFsbChbIl9yb3RhdGVDb21wYXNzQXJyb3ciXSx0aGlzKSx0aGlzLl9jb21wYXNzPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC1jb21wYXNzIiwoZnVuY3Rpb24odCl7bi5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoP24uX21hcC5yZXNldE5vcnRoUGl0Y2goe30se29yaWdpbmFsRXZlbnQ6dH0pOm4uX21hcC5yZXNldE5vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KX0pKSx0aGlzLl9jb21wYXNzSWNvbj1yLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fY29tcGFzcyksdGhpcy5fY29tcGFzc0ljb24uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApKX07UGkucHJvdG90eXBlLl91cGRhdGVab29tQnV0dG9ucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRab29tKCk7dGhpcy5fem9vbUluQnV0dG9uLmRpc2FibGVkPXQ9PT10aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpLHRoaXMuX3pvb21PdXRCdXR0b24uZGlzYWJsZWQ9dD09PXRoaXMuX21hcC5nZXRNaW5ab29tKCl9LFBpLnByb3RvdHlwZS5fcm90YXRlQ29tcGFzc0Fycm93PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoPyJzY2FsZSgiKzEvTWF0aC5wb3coTWF0aC5jb3ModGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCooTWF0aC5QSS8xODApKSwuNSkrIikgcm90YXRlWCgiK3RoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2grImRlZykgcm90YXRlWigiK3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUqKDE4MC9NYXRoLlBJKSsiZGVnKSI6InJvdGF0ZSgiK3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUqKDE4MC9NYXRoLlBJKSsiZGVnKSI7dGhpcy5fY29tcGFzc0ljb24uc3R5bGUudHJhbnNmb3JtPXR9LFBpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5vcHRpb25zLnNob3dab29tJiYodGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbUluQnV0dG9uLCJab29tSW4iKSx0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl96b29tT3V0QnV0dG9uLCJab29tT3V0IiksdGhpcy5fbWFwLm9uKCJ6b29tIix0aGlzLl91cGRhdGVab29tQnV0dG9ucyksdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMoKSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fY29tcGFzcywiUmVzZXRCZWFyaW5nIiksdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoJiZ0aGlzLl9tYXAub24oInBpdGNoIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX21hcC5vbigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdygpLHRoaXMuX2hhbmRsZXI9bmV3IElpKHRoaXMuX21hcCx0aGlzLl9jb21wYXNzLHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkpLHRoaXMuX2NvbnRhaW5lcn0sUGkucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJnRoaXMuX21hcC5vZmYoInpvb20iLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gmJnRoaXMuX21hcC5vZmYoInBpdGNoIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX21hcC5vZmYoInJvdGF0ZSIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9oYW5kbGVyLm9mZigpLGRlbGV0ZSB0aGlzLl9oYW5kbGVyKSxkZWxldGUgdGhpcy5fbWFwfSxQaS5wcm90b3R5cGUuX2NyZWF0ZUJ1dHRvbj1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY3JlYXRlKCJidXR0b24iLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gbi50eXBlPSJidXR0b24iLG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGUpLG59LFBpLnByb3RvdHlwZS5fc2V0QnV0dG9uVGl0bGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJOYXZpZ2F0aW9uQ29udHJvbC4iK2UpO3QudGl0bGU9cix0LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIscil9O3ZhciBJaT1mdW5jdGlvbihlLG4saSl7dm9pZCAwPT09aSYmKGk9ITEpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPTEwLHRoaXMuZWxlbWVudD1uLHRoaXMubW91c2VSb3RhdGU9bmV3IFhuKHtjbGlja1RvbGVyYW5jZTplLmRyYWdSb3RhdGUuX21vdXNlUm90YXRlLl9jbGlja1RvbGVyYW5jZX0pLHRoaXMubWFwPWUsaSYmKHRoaXMubW91c2VQaXRjaD1uZXcgWm4oe2NsaWNrVG9sZXJhbmNlOmUuZHJhZ1JvdGF0ZS5fbW91c2VQaXRjaC5fY2xpY2tUb2xlcmFuY2V9KSksdC5iaW5kQWxsKFsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInJlc2V0Il0sdGhpcyksci5hZGRFdmVudExpc3RlbmVyKG4sIm1vdXNlZG93biIsdGhpcy5tb3VzZWRvd24pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaHN0YXJ0Iix0aGlzLnRvdWNoc3RhcnQse3Bhc3NpdmU6ITF9KSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2htb3ZlIix0aGlzLnRvdWNobW92ZSksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNoZW5kIix0aGlzLnRvdWNoZW5kKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2hjYW5jZWwiLHRoaXMucmVzZXQpfTtmdW5jdGlvbiBPaShlLHIsbil7aWYoZT1uZXcgdC5MbmdMYXQoZS5sbmcsZS5sYXQpLHIpe3ZhciBpPW5ldyB0LkxuZ0xhdChlLmxuZy0zNjAsZS5sYXQpLGE9bmV3IHQuTG5nTGF0KGUubG5nKzM2MCxlLmxhdCksbz1uLmxvY2F0aW9uUG9pbnQoZSkuZGlzdFNxcihyKTtuLmxvY2F0aW9uUG9pbnQoaSkuZGlzdFNxcihyKTxvP2U9aTpuLmxvY2F0aW9uUG9pbnQoYSkuZGlzdFNxcihyKTxvJiYoZT1hKX1mb3IoO01hdGguYWJzKGUubG5nLW4uY2VudGVyLmxuZyk+MTgwOyl7dmFyIHM9bi5sb2NhdGlvblBvaW50KGUpO2lmKHMueD49MCYmcy55Pj0wJiZzLng8PW4ud2lkdGgmJnMueTw9bi5oZWlnaHQpYnJlYWs7ZS5sbmc+bi5jZW50ZXIubG5nP2UubG5nLT0zNjA6ZS5sbmcrPTM2MH1yZXR1cm4gZX1JaS5wcm90b3R5cGUuZG93bj1mdW5jdGlvbih0LGUpe3RoaXMubW91c2VSb3RhdGUubW91c2Vkb3duKHQsZSksdGhpcy5tb3VzZVBpdGNoJiZ0aGlzLm1vdXNlUGl0Y2gubW91c2Vkb3duKHQsZSksci5kaXNhYmxlRHJhZygpfSxJaS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubWFwLG49dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZW1vdmVXaW5kb3codCxlKTtpZihuJiZuLmJlYXJpbmdEZWx0YSYmci5zZXRCZWFyaW5nKHIuZ2V0QmVhcmluZygpK24uYmVhcmluZ0RlbHRhKSx0aGlzLm1vdXNlUGl0Y2gpe3ZhciBpPXRoaXMubW91c2VQaXRjaC5tb3VzZW1vdmVXaW5kb3codCxlKTtpJiZpLnBpdGNoRGVsdGEmJnIuc2V0UGl0Y2goci5nZXRQaXRjaCgpK2kucGl0Y2hEZWx0YSl9fSxJaS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50O3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJtb3VzZWRvd24iLHRoaXMubW91c2Vkb3duKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2hzdGFydCIsdGhpcy50b3VjaHN0YXJ0LHtwYXNzaXZlOiExfSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNobW92ZSIsdGhpcy50b3VjaG1vdmUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaGVuZCIsdGhpcy50b3VjaGVuZCksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNoY2FuY2VsIix0aGlzLnJlc2V0KSx0aGlzLm9mZlRlbXAoKX0sSWkucHJvdG90eXBlLm9mZlRlbXA9ZnVuY3Rpb24oKXtyLmVuYWJsZURyYWcoKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3csIm1vdXNlbW92ZSIsdGhpcy5tb3VzZW1vdmUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2V1cCIsdGhpcy5tb3VzZXVwKX0sSWkucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbihlKXt0aGlzLmRvd24odC5leHRlbmQoe30sZSx7Y3RybEtleTohMCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9fSksci5tb3VzZVBvcyh0aGlzLmVsZW1lbnQsZSkpLHIuYWRkRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2Vtb3ZlIix0aGlzLm1vdXNlbW92ZSksci5hZGRFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZXVwIix0aGlzLm1vdXNldXApfSxJaS5wcm90b3R5cGUubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMubW92ZSh0LHIubW91c2VQb3ModGhpcy5lbGVtZW50LHQpKX0sSWkucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24odCl7dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZXVwV2luZG93KHQpLHRoaXMubW91c2VQaXRjaCYmdGhpcy5tb3VzZVBpdGNoLm1vdXNldXBXaW5kb3codCksdGhpcy5vZmZUZW1wKCl9LElpLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQpezEhPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP3RoaXMucmVzZXQoKToodGhpcy5fc3RhcnRQb3M9dGhpcy5fbGFzdFBvcz1yLnRvdWNoUG9zKHRoaXMuZWxlbWVudCx0LnRhcmdldFRvdWNoZXMpWzBdLHRoaXMuZG93bih7dHlwZToibW91c2Vkb3duIixidXR0b246MCxjdHJsS2V5OiEwLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX19LHRoaXMuX3N0YXJ0UG9zKSl9LElpLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCl7MSE9PXQudGFyZ2V0VG91Y2hlcy5sZW5ndGg/dGhpcy5yZXNldCgpOih0aGlzLl9sYXN0UG9zPXIudG91Y2hQb3ModGhpcy5lbGVtZW50LHQudGFyZ2V0VG91Y2hlcylbMF0sdGhpcy5tb3ZlKHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9fSx0aGlzLl9sYXN0UG9zKSl9LElpLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0KXswPT09dC50YXJnZXRUb3VjaGVzLmxlbmd0aCYmdGhpcy5fc3RhcnRQb3MmJnRoaXMuX2xhc3RQb3MmJnRoaXMuX3N0YXJ0UG9zLmRpc3QodGhpcy5fbGFzdFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UmJnRoaXMuZWxlbWVudC5jbGljaygpLHRoaXMucmVzZXQoKX0sSWkucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5tb3VzZVJvdGF0ZS5yZXNldCgpLHRoaXMubW91c2VQaXRjaCYmdGhpcy5tb3VzZVBpdGNoLnJlc2V0KCksZGVsZXRlIHRoaXMuX3N0YXJ0UG9zLGRlbGV0ZSB0aGlzLl9sYXN0UG9zLHRoaXMub2ZmVGVtcCgpfTt2YXIgemk9e2NlbnRlcjoidHJhbnNsYXRlKC01MCUsLTUwJSkiLHRvcDoidHJhbnNsYXRlKC01MCUsMCkiLCJ0b3AtbGVmdCI6InRyYW5zbGF0ZSgwLDApIiwidG9wLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLDApIixib3R0b206InRyYW5zbGF0ZSgtNTAlLC0xMDAlKSIsImJvdHRvbS1sZWZ0IjoidHJhbnNsYXRlKDAsLTEwMCUpIiwiYm90dG9tLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLC0xMDAlKSIsbGVmdDoidHJhbnNsYXRlKDAsLTUwJSkiLHJpZ2h0OiJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkifTtmdW5jdGlvbiBEaSh0LGUscil7dmFyIG49dC5jbGFzc0xpc3Q7Zm9yKHZhciBpIGluIHppKW4ucmVtb3ZlKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIitpKTtuLmFkZCgibWFwYm94Z2wtIityKyItYW5jaG9yLSIrZSl9dmFyIFJpLEZpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpKXt2YXIgYT10aGlzO2lmKGUuY2FsbCh0aGlzKSwobiBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxFbGVtZW50fHxpKSYmKG49dC5leHRlbmQoe2VsZW1lbnQ6bn0saSkpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25Nb3ZlIiwiX29uVXAiLCJfYWRkRHJhZ0hhbmRsZXIiLCJfb25NYXBDbGljayIsIl9vbktleVByZXNzIl0sdGhpcyksdGhpcy5fYW5jaG9yPW4mJm4uYW5jaG9yfHwiY2VudGVyIix0aGlzLl9jb2xvcj1uJiZuLmNvbG9yfHwiIzNGQjFDRSIsdGhpcy5fZHJhZ2dhYmxlPW4mJm4uZHJhZ2dhYmxlfHwhMSx0aGlzLl9zdGF0ZT0iaW5hY3RpdmUiLHRoaXMuX3JvdGF0aW9uPW4mJm4ucm90YXRpb258fDAsdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ9biYmbi5yb3RhdGlvbkFsaWdubWVudHx8ImF1dG8iLHRoaXMuX3BpdGNoQWxpZ25tZW50PW4mJm4ucGl0Y2hBbGlnbm1lbnQmJiJhdXRvIiE9PW4ucGl0Y2hBbGlnbm1lbnQ/bi5waXRjaEFsaWdubWVudDp0aGlzLl9yb3RhdGlvbkFsaWdubWVudCxuJiZuLmVsZW1lbnQpdGhpcy5fZWxlbWVudD1uLmVsZW1lbnQsdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChuJiZuLm9mZnNldHx8WzAsMF0pO2Vsc2V7dGhpcy5fZGVmYXVsdE1hcmtlcj0hMCx0aGlzLl9lbGVtZW50PXIuY3JlYXRlKCJkaXYiKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk1hcCBtYXJrZXIiKTt2YXIgbz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO28uc2V0QXR0cmlidXRlTlMobnVsbCwiZGlzcGxheSIsImJsb2NrIiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLCI0MXB4Iiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsIjI3cHgiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgMjcgNDEiKTt2YXIgcz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtzLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZSIsIm5vbmUiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS13aWR0aCIsIjEiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJub25lIikscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIik7dmFyIGw9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJub256ZXJvIik7dmFyIGM9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7Yy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMy4wLCAyOS4wKSIpLGMuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKTtmb3IodmFyIHU9MCxmPVt7cng6IjEwLjUiLHJ5OiI1LjI1MDAyMjczIn0se3J4OiIxMC41IixyeToiNS4yNTAwMjI3MyJ9LHtyeDoiOS41IixyeToiNC43NzI3NTAwNyJ9LHtyeDoiOC41IixyeToiNC4yOTU0OTkzNiJ9LHtyeDoiNy41IixyeToiMy44MTgyMjMwOCJ9LHtyeDoiNi41IixyeToiMy4zNDA5NDY3OSJ9LHtyeDoiNS41IixyeToiMi44NjM2NzA1MSJ9LHtyeDoiNC41IixyeToiMi4zODYzNjg2NCJ9XTt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV0scD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImVsbGlwc2UiKTtwLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjA0IikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjEwLjUiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS44MDAyOTAwOCIpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwicngiLGgucngpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwicnkiLGgucnkpLGMuYXBwZW5kQ2hpbGQocCl9dmFyIGQ9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7ZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0aGlzLl9jb2xvcik7dmFyIG09ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7bS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTTI3LDEzLjUgQzI3LDE5LjA3NDY0NCAyMC4yNTAwMDEsMjcuMDAwMDAyIDE0Ljc1LDM0LjUwMDAwMiBDMTQuMDE2NjY1LDM1LjUwMDAwNCAxMi45ODMzMzUsMzUuNTAwMDA0IDEyLjI1LDM0LjUwMDAwMiBDNi43NDk5OTkzLDI3LjAwMDAwMiAwLDE5LjIyMjU2MiAwLDEzLjUgQzAsNi4wNDQxNTU5IDYuMDQ0MTU1OSwwIDEzLjUsMCBDMjAuOTU1ODQ0LDAgMjcsNi4wNDQxNTU5IDI3LDEzLjUgWiIpLGQuYXBwZW5kQ2hpbGQobSk7dmFyIGc9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4yNSIpLGcuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKTt2YXIgdj1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNMTMuNSwwIEM2LjA0NDE1NTksMCAwLDYuMDQ0MTU1OSAwLDEzLjUgQzAsMTkuMjIyNTYyIDYuNzQ5OTk5MywyNyAxMi4yNSwzNC41IEMxMywzNS41MjI3MjcgMTQuMDE2NjY0LDM1LjUwMDAwNCAxNC43NSwzNC41IEMyMC4yNTAwMDEsMjcgMjcsMTkuMDc0NjQ0IDI3LDEzLjUgQzI3LDYuMDQ0MTU1OSAyMC45NTU4NDQsMCAxMy41LDAgWiBNMTMuNSwxIEMyMC40MTU0MDQsMSAyNiw2LjU4NDU5NiAyNiwxMy41IEMyNiwxNS44OTg2NTcgMjQuNDk1NTg0LDE5LjE4MTQzMSAyMi4yMjA3MDMsMjIuNzM4MjgxIEMxOS45NDU4MjMsMjYuMjk1MTMyIDE2LjcwNTExOSwzMC4xNDIxNjcgMTMuOTQzMzU5LDMzLjkwODIwMyBDMTMuNzQzNDQ1LDM0LjE4MDgxNCAxMy42MTI3MTUsMzQuMzIyNzM4IDEzLjUsMzQuNDQxNDA2IEMxMy4zODcyODUsMzQuMzIyNzM4IDEzLjI1NjU1NSwzNC4xODA4MTQgMTMuMDU2NjQxLDMzLjkwODIwMyBDMTAuMjg0NDgxLDMwLjEyNzk4NSA3LjQxNDg2ODQsMjYuMzE0MTU5IDUuMDE1NjI1LDIyLjc3MzQzOCBDMi42MTYzODE2LDE5LjIzMjcxNSAxLDE1Ljk1MzUzOCAxLDEzLjUgQzEsNi41ODQ1OTYgNi41ODQ1OTYsMSAxMy41LDEgWiIpLGcuYXBwZW5kQ2hpbGQodik7dmFyIHk9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7eS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNi4wLCA3LjApIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiI0ZGRkZGRiIpO3ZhciB4PXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3guc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDguMCwgOC4wKSIpO3ZhciBiPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7Yi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMjUiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiNS41IiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuNSIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsIjUuNDk5OTk2MiIpO3ZhciBfPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7Xy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiI0ZGRkZGRiIpLF8uc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCI1LjUiKSxfLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS41IiksXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyIiwiNS40OTk5OTYyIikseC5hcHBlbmRDaGlsZChiKSx4LmFwcGVuZENoaWxkKF8pLGwuYXBwZW5kQ2hpbGQoYyksbC5hcHBlbmRDaGlsZChkKSxsLmFwcGVuZENoaWxkKGcpLGwuYXBwZW5kQ2hpbGQoeSksbC5hcHBlbmRDaGlsZCh4KSxvLmFwcGVuZENoaWxkKGwpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobyksdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChuJiZuLm9mZnNldHx8WzAsLTE0XSl9dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1tYXJrZXIiKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24oKXt2YXIgdD1hLl9tYXAuZ2V0Q29udGFpbmVyKCk7dC5zY3JvbGxUb3A9MCx0LnNjcm9sbExlZnQ9MH0pKSxEaSh0aGlzLl9lbGVtZW50LHRoaXMuX2FuY2hvciwibWFya2VyIiksdGhpcy5fcG9wdXA9bnVsbH1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQsdC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0Lm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHQub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZSksdGhpcy5zZXREcmFnZ2FibGUodGhpcy5fZHJhZ2dhYmxlKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9vbk1hcENsaWNrKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uTWFwQ2xpY2spLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZWRvd24iLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9mZigibW91c2V1cCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9mZigidG91Y2hlbmQiLHRoaXMuX29uVXApLHRoaXMuX21hcC5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSksZGVsZXRlIHRoaXMuX21hcCksci5yZW1vdmUodGhpcy5fZWxlbWVudCksdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldExuZ0xhdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sbmdMYXR9LG4ucHJvdG90eXBlLnNldExuZ0xhdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbG5nTGF0PXQuTG5nTGF0LmNvbnZlcnQoZSksdGhpcy5fcG9zPW51bGwsdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudH0sbi5wcm90b3R5cGUuc2V0UG9wdXA9ZnVuY3Rpb24odCl7aWYodGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzLl9wb3B1cD1udWxsLHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MpLHRoaXMuX29yaWdpbmFsVGFiSW5kZXh8fHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpKSx0KXtpZighKCJvZmZzZXQiaW4gdC5vcHRpb25zKSl7dmFyIGU9TWF0aC5zcXJ0KE1hdGgucG93KDEzLjUsMikvMik7dC5vcHRpb25zLm9mZnNldD10aGlzLl9kZWZhdWx0TWFya2VyP3t0b3A6WzAsMF0sInRvcC1sZWZ0IjpbMCwwXSwidG9wLXJpZ2h0IjpbMCwwXSxib3R0b206WzAsLTM4LjFdLCJib3R0b20tbGVmdCI6W2UsLTEqKDI0LjYrZSldLCJib3R0b20tcmlnaHQiOlstZSwtMSooMjQuNitlKV0sbGVmdDpbMTMuNSwtMjQuNl0scmlnaHQ6Wy0xMy41LC0yNC42XX06dGhpcy5fb2Zmc2V0fXRoaXMuX3BvcHVwPXQsdGhpcy5fbG5nTGF0JiZ0aGlzLl9wb3B1cC5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl9vcmlnaW5hbFRhYkluZGV4PXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX29yaWdpbmFsVGFiSW5kZXh8fHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIix0aGlzLl9vbktleVByZXNzKX1yZXR1cm4gdGhpc30sbi5wcm90b3R5cGUuX29uS2V5UHJlc3M9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb2RlLHI9dC5jaGFyQ29kZXx8dC5rZXlDb2RlOyJTcGFjZSIhPT1lJiYiRW50ZXIiIT09ZSYmMzIhPT1yJiYxMyE9PXJ8fHRoaXMudG9nZ2xlUG9wdXAoKX0sbi5wcm90b3R5cGUuX29uTWFwQ2xpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmlnaW5hbEV2ZW50LnRhcmdldCxyPXRoaXMuX2VsZW1lbnQ7dGhpcy5fcG9wdXAmJihlPT09cnx8ci5jb250YWlucyhlKSkmJnRoaXMudG9nZ2xlUG9wdXAoKX0sbi5wcm90b3R5cGUuZ2V0UG9wdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LG4ucHJvdG90eXBlLnRvZ2dsZVBvcHVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcG9wdXA7cmV0dXJuIHQ/KHQuaXNPcGVuKCk/dC5yZW1vdmUoKTp0LmFkZFRvKHRoaXMuX21hcCksdGhpcyk6dGhpc30sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9tYXApe3RoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLl9sbmdMYXQ9T2kodGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksdGhpcy5fcG9zPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpO3ZhciBlPSIiOyJ2aWV3cG9ydCI9PT10aGlzLl9yb3RhdGlvbkFsaWdubWVudHx8ImF1dG8iPT09dGhpcy5fcm90YXRpb25BbGlnbm1lbnQ/ZT0icm90YXRlWigiK3RoaXMuX3JvdGF0aW9uKyJkZWcpIjoibWFwIj09PXRoaXMuX3JvdGF0aW9uQWxpZ25tZW50JiYoZT0icm90YXRlWigiKyh0aGlzLl9yb3RhdGlvbi10aGlzLl9tYXAuZ2V0QmVhcmluZygpKSsiZGVnKSIpO3ZhciBuPSIiOyJ2aWV3cG9ydCI9PT10aGlzLl9waXRjaEFsaWdubWVudHx8ImF1dG8iPT09dGhpcy5fcGl0Y2hBbGlnbm1lbnQ/bj0icm90YXRlWCgwZGVnKSI6Im1hcCI9PT10aGlzLl9waXRjaEFsaWdubWVudCYmKG49InJvdGF0ZVgoIit0aGlzLl9tYXAuZ2V0UGl0Y2goKSsiZGVnKSIpLHQmJiJtb3ZlZW5kIiE9PXQudHlwZXx8KHRoaXMuX3Bvcz10aGlzLl9wb3Mucm91bmQoKSksci5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCx6aVt0aGlzLl9hbmNob3JdKyIgdHJhbnNsYXRlKCIrdGhpcy5fcG9zLngrInB4LCAiK3RoaXMuX3Bvcy55KyJweCkgIituKyIgIitlKX19LG4ucHJvdG90eXBlLmdldE9mZnNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZzZXR9LG4ucHJvdG90eXBlLnNldE9mZnNldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKGUpe3RoaXMuX3Bvcz1lLnBvaW50LnN1Yih0aGlzLl9wb3NpdGlvbkRlbHRhKSx0aGlzLl9sbmdMYXQ9dGhpcy5fbWFwLnVucHJvamVjdCh0aGlzLl9wb3MpLHRoaXMuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIiwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJhY3RpdmUiLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZ3N0YXJ0IikpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRyYWciKSl9LG4ucHJvdG90eXBlLl9vblVwPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzPSJhdXRvIix0aGlzLl9wb3NpdGlvbkRlbHRhPW51bGwsdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vZmYoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSwiYWN0aXZlIj09PXRoaXMuX3N0YXRlJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRyYWdlbmQiKSksdGhpcy5fc3RhdGU9ImluYWN0aXZlIn0sbi5wcm90b3R5cGUuX2FkZERyYWdIYW5kbGVyPWZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnQuY29udGFpbnModC5vcmlnaW5hbEV2ZW50LnRhcmdldCkmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcG9zaXRpb25EZWx0YT10LnBvaW50LnN1Yih0aGlzLl9wb3MpLmFkZCh0aGlzLl9vZmZzZXQpLHRoaXMuX3N0YXRlPSJwZW5kaW5nIix0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXAub24oInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXAub25jZSgibW91c2V1cCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9uY2UoInRvdWNoZW5kIix0aGlzLl9vblVwKSl9LG4ucHJvdG90eXBlLnNldERyYWdnYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlPSEhdCx0aGlzLl9tYXAmJih0Pyh0aGlzLl9tYXAub24oIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vbigidG91Y2hzdGFydCIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpKToodGhpcy5fbWFwLm9mZigibW91c2Vkb3duIix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9mZigidG91Y2hzdGFydCIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpKSksdGhpc30sbi5wcm90b3R5cGUuaXNEcmFnZ2FibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlfSxuLnByb3RvdHlwZS5zZXRSb3RhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcm90YXRpb249dHx8MCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRSb3RhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGlvbn0sbi5wcm90b3R5cGUuc2V0Um90YXRpb25BbGlnbm1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50PXR8fCJhdXRvIix0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRSb3RhdGlvbkFsaWdubWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudH0sbi5wcm90b3R5cGUuc2V0UGl0Y2hBbGlnbm1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BpdGNoQWxpZ25tZW50PXQmJiJhdXRvIiE9PXQ/dDp0aGlzLl9yb3RhdGlvbkFsaWdubWVudCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRQaXRjaEFsaWdubWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9waXRjaEFsaWdubWVudH0sbn0odC5FdmVudGVkKSxCaT17cG9zaXRpb25PcHRpb25zOntlbmFibGVIaWdoQWNjdXJhY3k6ITEsbWF4aW11bUFnZTowLHRpbWVvdXQ6NmUzfSxmaXRCb3VuZHNPcHRpb25zOnttYXhab29tOjE1fSx0cmFja1VzZXJMb2NhdGlvbjohMSxzaG93QWNjdXJhY3lDaXJjbGU6ITAsc2hvd1VzZXJMb2NhdGlvbjohMH07dmFyIE5pPTAsamk9ITEsVWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LEJpLHIpLHQuYmluZEFsbChbIl9vblN1Y2Nlc3MiLCJfb25FcnJvciIsIl9vblpvb20iLCJfZmluaXNoIiwiX3NldHVwVUkiLCJfdXBkYXRlQ2FtZXJhIiwiX3VwZGF0ZU1hcmtlciJdLHRoaXMpfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSxuPXRoaXMuX3NldHVwVUksdm9pZCAwIT09Umk/bihSaSk6dm9pZCAwIT09dC53aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zP3Qud2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZToiZ2VvbG9jYXRpb24ifSkudGhlbigoZnVuY3Rpb24odCl7Umk9ImRlbmllZCIhPT10LnN0YXRlLG4oUmkpfSkpOihSaT0hIXQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbixuKFJpKSksdGhpcy5fY29udGFpbmVyfSxuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmKHQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXZvaWQgMCksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlciYmdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpLHRoaXMub3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGUmJnRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyJiZ0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlci5yZW1vdmUoKSxyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoInpvb20iLHRoaXMuX29uWm9vbSksdGhpcy5fbWFwPXZvaWQgMCxOaT0wLGppPSExfSxuLnByb3RvdHlwZS5faXNPdXRPZk1hcE1heEJvdW5kcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0TWF4Qm91bmRzKCkscj10LmNvb3JkcztyZXR1cm4gZSYmKHIubG9uZ2l0dWRlPGUuZ2V0V2VzdCgpfHxyLmxvbmdpdHVkZT5lLmdldEVhc3QoKXx8ci5sYXRpdHVkZTxlLmdldFNvdXRoKCl8fHIubGF0aXR1ZGU+ZS5nZXROb3J0aCgpKX0sbi5wcm90b3R5cGUuX3NldEVycm9yU3RhdGU9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJXQUlUSU5HX0FDVElWRSI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0VSUk9SIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpO2JyZWFrO2Nhc2UiQUNUSVZFX0xPQ0siOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORF9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIil9fSxuLnByb3RvdHlwZS5fb25TdWNjZXNzPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX21hcCl7aWYodGhpcy5faXNPdXRPZk1hcE1heEJvdW5kcyhlKSlyZXR1cm4gdGhpcy5fc2V0RXJyb3JTdGF0ZSgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgib3V0b2ZtYXhib3VuZHMiLGUpKSx0aGlzLl91cGRhdGVNYXJrZXIoKSx2b2lkIHRoaXMuX2ZpbmlzaCgpO2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbilzd2l0Y2godGhpcy5fbGFzdEtub3duUG9zaXRpb249ZSx0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjpjYXNlIkFDVElWRV9MT0NLIjpjYXNlIkFDVElWRV9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOmNhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIil9dGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJiJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5fdXBkYXRlTWFya2VyKGUpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmIkFDVElWRV9MT0NLIiE9PXRoaXMuX3dhdGNoU3RhdGV8fHRoaXMuX3VwZGF0ZUNhbWVyYShlKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZSIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZ2VvbG9jYXRlIixlKSksdGhpcy5fZmluaXNoKCl9fSxuLnByb3RvdHlwZS5fdXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKGUpe3ZhciByPW5ldyB0LkxuZ0xhdChlLmNvb3Jkcy5sb25naXR1ZGUsZS5jb29yZHMubGF0aXR1ZGUpLG49ZS5jb29yZHMuYWNjdXJhY3ksaT10aGlzLl9tYXAuZ2V0QmVhcmluZygpLGE9dC5leHRlbmQoe2JlYXJpbmc6aX0sdGhpcy5vcHRpb25zLmZpdEJvdW5kc09wdGlvbnMpO3RoaXMuX21hcC5maXRCb3VuZHMoci50b0JvdW5kcyhuKSxhLHtnZW9sb2NhdGVTb3VyY2U6ITB9KX0sbi5wcm90b3R5cGUuX3VwZGF0ZU1hcmtlcj1mdW5jdGlvbihlKXtpZihlKXt2YXIgcj1uZXcgdC5MbmdMYXQoZS5jb29yZHMubG9uZ2l0dWRlLGUuY29vcmRzLmxhdGl0dWRlKTt0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlci5zZXRMbmdMYXQocikuYWRkVG8odGhpcy5fbWFwKSx0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KHIpLmFkZFRvKHRoaXMuX21hcCksdGhpcy5fYWNjdXJhY3k9ZS5jb29yZHMuYWNjdXJhY3ksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMub3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGUmJnRoaXMuX3VwZGF0ZUNpcmNsZVJhZGl1cygpfWVsc2UgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpLHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnJlbW92ZSgpfSxuLnByb3RvdHlwZS5fdXBkYXRlQ2lyY2xlUmFkaXVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXIuY2xpZW50SGVpZ2h0LzIsZT10aGlzLl9tYXAudW5wcm9qZWN0KFswLHRdKSxyPXRoaXMuX21hcC51bnByb2plY3QoWzEsdF0pLG49ZS5kaXN0YW5jZVRvKHIpLGk9TWF0aC5jZWlsKDIqdGhpcy5fYWNjdXJhY3kvbik7dGhpcy5fY2lyY2xlRWxlbWVudC5zdHlsZS53aWR0aD1pKyJweCIsdGhpcy5fY2lyY2xlRWxlbWVudC5zdHlsZS5oZWlnaHQ9aSsicHgifSxuLnByb3RvdHlwZS5fb25ab29tPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMub3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGUmJnRoaXMuX3VwZGF0ZUNpcmNsZVJhZGl1cygpfSxuLnByb3RvdHlwZS5fb25FcnJvcj1mdW5jdGlvbihlKXtpZih0aGlzLl9tYXApe2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbilpZigxPT09ZS5jb2RlKXt0aGlzLl93YXRjaFN0YXRlPSJPRkYiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkPSEwO3ZhciByPXRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIkdlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUiKTt0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGU9cix0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixyKSx2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJnRoaXMuX2NsZWFyV2F0Y2goKX1lbHNle2lmKDM9PT1lLmNvZGUmJmppKXJldHVybjt0aGlzLl9zZXRFcnJvclN0YXRlKCl9Ik9GRiIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZSIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZXJyb3IiLGUpKSx0aGlzLl9maW5pc2goKX19LG4ucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9LG4ucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLl9nZW9sb2NhdGVCdXR0b249ci5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlIix0aGlzLl9jb250YWluZXIpLHIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl9nZW9sb2NhdGVCdXR0b24pLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24udHlwZT0iYnV0dG9uIiwhMT09PWUpe3Qud2Fybk9uY2UoIkdlb2xvY2F0aW9uIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBzbyB0aGUgR2VvbG9jYXRlQ29udHJvbCB3aWxsIGJlIGRpc2FibGVkLiIpO3ZhciBpPXRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIkdlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUiKTt0aGlzLl9nZW9sb2NhdGVCdXR0b24uZGlzYWJsZWQ9ITAsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnRpdGxlPWksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsaSl9ZWxzZXt2YXIgYT10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJHZW9sb2NhdGVDb250cm9sLkZpbmRNeUxvY2F0aW9uIik7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnRpdGxlPWEsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsYSl9dGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYodGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSx0aGlzLl93YXRjaFN0YXRlPSJPRkYiKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmKHRoaXMuX2RvdEVsZW1lbnQ9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90IiksdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyPW5ldyBGaSh0aGlzLl9kb3RFbGVtZW50KSx0aGlzLl9jaXJjbGVFbGVtZW50PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWFjY3VyYWN5LWNpcmNsZSIpLHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyPW5ldyBGaSh7ZWxlbWVudDp0aGlzLl9jaXJjbGVFbGVtZW50LHBpdGNoQWxpZ25tZW50OiJtYXAifSksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYodGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIiksdGhpcy5fbWFwLm9uKCJ6b29tIix0aGlzLl9vblpvb20pKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMudHJpZ2dlci5iaW5kKHRoaXMpKSx0aGlzLl9zZXR1cD0hMCx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJnRoaXMuX21hcC5vbigibW92ZXN0YXJ0IiwoZnVuY3Rpb24oZSl7dmFyIHI9ZS5vcmlnaW5hbEV2ZW50JiYicmVzaXplIj09PWUub3JpZ2luYWxFdmVudC50eXBlO2UuZ2VvbG9jYXRlU291cmNlfHwiQUNUSVZFX0xPQ0siIT09bi5fd2F0Y2hTdGF0ZXx8cnx8KG4uX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkQiLG4uX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksbi5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLG4uZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25lbmQiKSkpfSkpfSxuLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3NldHVwKXJldHVybiB0Lndhcm5PbmNlKCJHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwIiksITE7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXtzd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJPRkYiOnRoaXMuX3dhdGNoU3RhdGU9IldBSVRJTkdfQUNUSVZFIix0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSk7YnJlYWs7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOmNhc2UiQkFDS0dST1VORF9FUlJPUiI6TmktLSxqaT0hMSx0aGlzLl93YXRjaFN0YXRlPSJPRkYiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbmVuZCIpKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9MT0NLIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLHRoaXMuX2xhc3RLbm93blBvc2l0aW9uJiZ0aGlzLl91cGRhdGVDYW1lcmEodGhpcy5fbGFzdEtub3duUG9zaXRpb24pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25zdGFydCIpKX1zd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJXQUlUSU5HX0FDVElWRSI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJBQ1RJVkVfTE9DSyI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQUNUSVZFX0VSUk9SIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIil9aWYoIk9GRiI9PT10aGlzLl93YXRjaFN0YXRlJiZ2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpdGhpcy5fY2xlYXJXYXRjaCgpO2Vsc2UgaWYodm9pZCAwPT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKXt2YXIgZTt0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsInRydWUiKSwrK05pPjE/KGU9e21heGltdW1BZ2U6NmU1LHRpbWVvdXQ6MH0samk9ITApOihlPXRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMsamk9ITEpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD10LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbih0aGlzLl9vblN1Y2Nlc3MsdGhpcy5fb25FcnJvcixlKX19ZWxzZSB0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaCwxZTQpO3JldHVybiEwfSxuLnByb3RvdHlwZS5fY2xlYXJXYXRjaD1mdW5jdGlvbigpe3Qud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXZvaWQgMCx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX3VwZGF0ZU1hcmtlcihudWxsKX0sbn0odC5FdmVudGVkKSxWaT17bWF4V2lkdGg6MTAwLHVuaXQ6Im1ldHJpYyJ9LEhpPWZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxWaSxlKSx0LmJpbmRBbGwoWyJfb25Nb3ZlIiwic2V0VW5pdCJdLHRoaXMpfTtmdW5jdGlvbiBxaSh0LGUscil7dmFyIG49ciYmci5tYXhXaWR0aHx8MTAwLGk9dC5fY29udGFpbmVyLmNsaWVudEhlaWdodC8yLGE9dC51bnByb2plY3QoWzAsaV0pLG89dC51bnByb2plY3QoW24saV0pLHM9YS5kaXN0YW5jZVRvKG8pO2lmKHImJiJpbXBlcmlhbCI9PT1yLnVuaXQpe3ZhciBsPTMuMjgwOCpzO2lmKGw+NTI4MClHaShlLG4sbC81MjgwLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuTWlsZXMiKSk7ZWxzZSBHaShlLG4sbCx0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLkZlZXQiKSl9ZWxzZSBpZihyJiYibmF1dGljYWwiPT09ci51bml0KXtHaShlLG4scy8xODUyLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuTmF1dGljYWxNaWxlcyIpKX1lbHNlIHM+PTFlMz9HaShlLG4scy8xZTMsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5LaWxvbWV0ZXJzIikpOkdpKGUsbixzLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuTWV0ZXJzIikpfWZ1bmN0aW9uIEdpKHQsZSxyLG4pe3ZhciBpLGEsbyxzPShpPXIsYT1NYXRoLnBvdygxMCwoIiIrTWF0aC5mbG9vcihpKSkubGVuZ3RoLTEpLG89KG89aS9hKT49MTA/MTA6bz49NT81Om8+PTM/MzpvPj0yPzI6bz49MT8xOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDEwLE1hdGguY2VpbCgtTWF0aC5sb2codCkvTWF0aC5MTjEwKSk7cmV0dXJuIE1hdGgucm91bmQodCplKS9lfShvKSxhKm8pLGw9cy9yO3Quc3R5bGUud2lkdGg9ZSpsKyJweCIsdC5pbm5lckhUTUw9cysiJm5ic3A7IitufUhpLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iYm90dG9tLWxlZnQifSxIaS5wcm90b3R5cGUuX29uTW92ZT1mdW5jdGlvbigpe3FpKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX0sSGkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1zY2FsZSIsdC5nZXRDb250YWluZXIoKSksdGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX29uTW92ZSgpLHRoaXMuX2NvbnRhaW5lcn0sSGkucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcD12b2lkIDB9LEhpLnByb3RvdHlwZS5zZXRVbml0PWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy51bml0PXQscWkodGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfTt2YXIgWWk9ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbHNjcmVlbj0hMSxlJiZlLmNvbnRhaW5lciYmKGUuY29udGFpbmVyIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTEVsZW1lbnQ/dGhpcy5fY29udGFpbmVyPWUuY29udGFpbmVyOnQud2Fybk9uY2UoIkZ1bGwgc2NyZWVuIGNvbnRyb2wgJ2NvbnRhaW5lcicgbXVzdCBiZSBhIERPTSBlbGVtZW50LiIpKSx0LmJpbmRBbGwoWyJfb25DbGlja0Z1bGxzY3JlZW4iLCJfY2hhbmdlSWNvbiJdLHRoaXMpLCJvbmZ1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0iZnVsbHNjcmVlbmNoYW5nZSI6Im9ubW96ZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJtb3pmdWxsc2NyZWVuY2hhbmdlIjoib253ZWJraXRmdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9IndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiOiJvbm1zZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudCYmKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9Ik1TRnVsbHNjcmVlbkNoYW5nZSIpfTtZaS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcD1lLHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj10aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCkpLHRoaXMuX2NvbnRyb2xDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLHRoaXMuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKT90aGlzLl9zZXR1cFVJKCk6KHRoaXMuX2NvbnRyb2xDb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdC53YXJuT25jZSgiVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBmdWxsc2NyZWVuIG1vZGUuIikpLHRoaXMuX2NvbnRyb2xDb250YWluZXJ9LFlpLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpLHRoaXMuX21hcD1udWxsLHQud2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0sWWkucHJvdG90eXBlLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuISEodC53aW5kb3cuZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fHQud2luZG93LmRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbmFibGVkfHx0LndpbmRvdy5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkfHx0LndpbmRvdy5kb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZCl9LFlpLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Z1bGxzY3JlZW5CdXR0b249ci5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLWN0cmwtZnVsbHNjcmVlbiIsdGhpcy5fY29udHJvbENvbnRhaW5lcik7ci5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWljb24iLGUpLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSxlLnR5cGU9ImJ1dHRvbiIsdGhpcy5fdXBkYXRlVGl0bGUoKSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrRnVsbHNjcmVlbiksdC53aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxZaS5wcm90b3R5cGUuX3VwZGF0ZVRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0VGl0bGUoKTt0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi50aXRsZT10fSxZaS5wcm90b3R5cGUuX2dldFRpdGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcodGhpcy5faXNGdWxsc2NyZWVuKCk/IkZ1bGxzY3JlZW5Db250cm9sLkV4aXQiOiJGdWxsc2NyZWVuQ29udHJvbC5FbnRlciIpfSxZaS5wcm90b3R5cGUuX2lzRnVsbHNjcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mdWxsc2NyZWVufSxZaS5wcm90b3R5cGUuX2NoYW5nZUljb249ZnVuY3Rpb24oKXsodC53aW5kb3cuZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fHQud2luZG93LmRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHx0LndpbmRvdy5kb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8dC53aW5kb3cuZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCk9PT10aGlzLl9jb250YWluZXIhPT10aGlzLl9mdWxsc2NyZWVuJiYodGhpcy5fZnVsbHNjcmVlbj0hdGhpcy5fZnVsbHNjcmVlbix0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoIm1hcGJveGdsLWN0cmwtc2hyaW5rIiksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCJtYXBib3hnbC1jdHJsLWZ1bGxzY3JlZW4iKSx0aGlzLl91cGRhdGVUaXRsZSgpKX0sWWkucHJvdG90eXBlLl9vbkNsaWNrRnVsbHNjcmVlbj1mdW5jdGlvbigpe3RoaXMuX2lzRnVsbHNjcmVlbigpP3Qud2luZG93LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuP3Qud2luZG93LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6dC53aW5kb3cuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbj90LndpbmRvdy5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk6dC53aW5kb3cuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbj90LndpbmRvdy5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk6dC53aW5kb3cuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbiYmdC53aW5kb3cuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4/dGhpcy5fY29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fY29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLl9jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4mJnRoaXMuX2NvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpfTt2YXIgV2k9e2Nsb3NlQnV0dG9uOiEwLGNsb3NlT25DbGljazohMCxjbGFzc05hbWU6IiIsbWF4V2lkdGg6IjI0MHB4In0sWGk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihyKXtlLmNhbGwodGhpcyksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKE9iamVjdC5jcmVhdGUoV2kpLHIpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25DbG9zZSIsInJlbW92ZSIsIl9vbk1vdXNlTW92ZSIsIl9vbk1vdXNlVXAiLCJfb25EcmFnIl0sdGhpcyl9cmV0dXJuIGUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAmJnRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPWUsdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25DbG9zZSksdGhpcy5vcHRpb25zLmNsb3NlT25Nb3ZlJiZ0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vbigicmVtb3ZlIix0aGlzLnJlbW92ZSksdGhpcy5fdXBkYXRlKCksdGhpcy5fdHJhY2tQb2ludGVyPyh0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUpLHRoaXMuX21hcC5vbigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSx0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIiksdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdHJhY2stcG9pbnRlciIpKTp0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJvcGVuIikpLHRoaXN9LG4ucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwfSxuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudCYmci5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGFpbmVyJiYoci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbkNsb3NlKSx0aGlzLl9tYXAub2ZmKCJyZW1vdmUiLHRoaXMucmVtb3ZlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX21hcC5vZmYoImRyYWciLHRoaXMuX29uRHJhZyksZGVsZXRlIHRoaXMuX21hcCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJjbG9zZSIpKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxuLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xuZ0xhdD10LkxuZ0xhdC5jb252ZXJ0KGUpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3RyYWNrUG9pbnRlcj0hMSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpLHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXRyYWNrLXBvaW50ZXIiKSksdGhpc30sbi5wcm90b3R5cGUudHJhY2tQb2ludGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYWNrUG9pbnRlcj0hMCx0aGlzLl9wb3M9bnVsbCx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fbWFwLm9uKCJkcmFnIix0aGlzLl9vbkRyYWcpLHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpLHRoaXN9LG4ucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxuLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQodC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfSxuLnByb3RvdHlwZS5zZXRIVE1MPWZ1bmN0aW9uKGUpe3ZhciByLG49dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpO2ZvcihpLmlubmVySFRNTD1lO3I9aS5maXJzdENoaWxkOyluLmFwcGVuZENoaWxkKHIpO3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQobil9LG4ucHJvdG90eXBlLmdldE1heFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRofSxuLnByb3RvdHlwZS5zZXRNYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFdpZHRoPXQsdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuc2V0RE9NQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlQ29udGVudCgpLHRoaXMuX2NvbnRlbnQuYXBwZW5kQ2hpbGQodCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuYWRkQ2xhc3NOYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodCl9LG4ucHJvdG90eXBlLnJlbW92ZUNsYXNzTmFtZT1mdW5jdGlvbih0KXt0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKHQpfSxuLnByb3RvdHlwZS50b2dnbGVDbGFzc05hbWU9ZnVuY3Rpb24odCl7aWYodGhpcy5fY29udGFpbmVyKXJldHVybiB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSh0KX0sbi5wcm90b3R5cGUuX2NyZWF0ZUNvbnRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb250ZW50JiZyLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250ZW50PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC1jb250ZW50Iix0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHRoaXMuX2Nsb3NlQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b24iLHRoaXMuX2NvbnRlbnQpLHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgcG9wdXAiKSx0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9IiYjMjE1OyIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xvc2UpKX0sbi5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl9vbkRyYWc9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKHQucG9pbnQpfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMsaT10aGlzLl9sbmdMYXR8fHRoaXMuX3RyYWNrUG9pbnRlcjtpZih0aGlzLl9tYXAmJmkmJnRoaXMuX2NvbnRlbnQmJih0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwIix0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCkpLHRoaXMuX3RpcD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAtdGlwIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50KSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZ0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHQpfSkpLHRoaXMuX3RyYWNrUG9pbnRlciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSksdGhpcy5vcHRpb25zLm1heFdpZHRoJiZ0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGghPT10aGlzLm9wdGlvbnMubWF4V2lkdGgmJih0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGg9dGhpcy5vcHRpb25zLm1heFdpZHRoKSx0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzJiYhdGhpcy5fdHJhY2tQb2ludGVyJiYodGhpcy5fbG5nTGF0PU9pKHRoaXMuX2xuZ0xhdCx0aGlzLl9wb3MsdGhpcy5fbWFwLnRyYW5zZm9ybSkpLCF0aGlzLl90cmFja1BvaW50ZXJ8fGUpKXt2YXIgYT10aGlzLl9wb3M9dGhpcy5fdHJhY2tQb2ludGVyJiZlP2U6dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KSxvPXRoaXMub3B0aW9ucy5hbmNob3Iscz1mdW5jdGlvbiBlKHIpe2lmKHIpe2lmKCJudW1iZXIiPT10eXBlb2Ygcil7dmFyIG49TWF0aC5yb3VuZChNYXRoLnNxcnQoLjUqTWF0aC5wb3cociwyKSkpO3JldHVybntjZW50ZXI6bmV3IHQuUG9pbnQoMCwwKSx0b3A6bmV3IHQuUG9pbnQoMCxyKSwidG9wLWxlZnQiOm5ldyB0LlBvaW50KG4sbiksInRvcC1yaWdodCI6bmV3IHQuUG9pbnQoLW4sbiksYm90dG9tOm5ldyB0LlBvaW50KDAsLXIpLCJib3R0b20tbGVmdCI6bmV3IHQuUG9pbnQobiwtbiksImJvdHRvbS1yaWdodCI6bmV3IHQuUG9pbnQoLW4sLW4pLGxlZnQ6bmV3IHQuUG9pbnQociwwKSxyaWdodDpuZXcgdC5Qb2ludCgtciwwKX19aWYociBpbnN0YW5jZW9mIHQuUG9pbnR8fEFycmF5LmlzQXJyYXkocikpe3ZhciBpPXQuUG9pbnQuY29udmVydChyKTtyZXR1cm57Y2VudGVyOmksdG9wOmksInRvcC1sZWZ0IjppLCJ0b3AtcmlnaHQiOmksYm90dG9tOmksImJvdHRvbS1sZWZ0IjppLCJib3R0b20tcmlnaHQiOmksbGVmdDppLHJpZ2h0Oml9fXJldHVybntjZW50ZXI6dC5Qb2ludC5jb252ZXJ0KHIuY2VudGVyfHxbMCwwXSksdG9wOnQuUG9pbnQuY29udmVydChyLnRvcHx8WzAsMF0pLCJ0b3AtbGVmdCI6dC5Qb2ludC5jb252ZXJ0KHJbInRvcC1sZWZ0Il18fFswLDBdKSwidG9wLXJpZ2h0Ijp0LlBvaW50LmNvbnZlcnQoclsidG9wLXJpZ2h0Il18fFswLDBdKSxib3R0b206dC5Qb2ludC5jb252ZXJ0KHIuYm90dG9tfHxbMCwwXSksImJvdHRvbS1sZWZ0Ijp0LlBvaW50LmNvbnZlcnQoclsiYm90dG9tLWxlZnQiXXx8WzAsMF0pLCJib3R0b20tcmlnaHQiOnQuUG9pbnQuY29udmVydChyWyJib3R0b20tcmlnaHQiXXx8WzAsMF0pLGxlZnQ6dC5Qb2ludC5jb252ZXJ0KHIubGVmdHx8WzAsMF0pLHJpZ2h0OnQuUG9pbnQuY29udmVydChyLnJpZ2h0fHxbMCwwXSl9fXJldHVybiBlKG5ldyB0LlBvaW50KDAsMCkpfSh0aGlzLm9wdGlvbnMub2Zmc2V0KTtpZighbyl7dmFyIGwsYz10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGgsdT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O2w9YS55K3MuYm90dG9tLnk8dT9bInRvcCJdOmEueT50aGlzLl9tYXAudHJhbnNmb3JtLmhlaWdodC11P1siYm90dG9tIl06W10sYS54PGMvMj9sLnB1c2goImxlZnQiKTphLng+dGhpcy5fbWFwLnRyYW5zZm9ybS53aWR0aC1jLzImJmwucHVzaCgicmlnaHQiKSxvPTA9PT1sLmxlbmd0aD8iYm90dG9tIjpsLmpvaW4oIi0iKX12YXIgZj1hLmFkZChzW29dKS5yb3VuZCgpO3Iuc2V0VHJhbnNmb3JtKHRoaXMuX2NvbnRhaW5lcix6aVtvXSsiIHRyYW5zbGF0ZSgiK2YueCsicHgsIitmLnkrInB4KSIpLERpKHRoaXMuX2NvbnRhaW5lcixvLCJwb3B1cCIpfX0sbi5wcm90b3R5cGUuX29uQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZSgpfSxufSh0LkV2ZW50ZWQpO3ZhciBaaT17dmVyc2lvbjp0LnZlcnNpb24sc3VwcG9ydGVkOmUsc2V0UlRMVGV4dFBsdWdpbjp0LnNldFJUTFRleHRQbHVnaW4sZ2V0UlRMVGV4dFBsdWdpblN0YXR1czp0LmdldFJUTFRleHRQbHVnaW5TdGF0dXMsTWFwOkVpLE5hdmlnYXRpb25Db250cm9sOlBpLEdlb2xvY2F0ZUNvbnRyb2w6VWksQXR0cmlidXRpb25Db250cm9sOmJpLFNjYWxlQ29udHJvbDpIaSxGdWxsc2NyZWVuQ29udHJvbDpZaSxQb3B1cDpYaSxNYXJrZXI6RmksU3R5bGU6cWUsTG5nTGF0OnQuTG5nTGF0LExuZ0xhdEJvdW5kczp0LkxuZ0xhdEJvdW5kcyxQb2ludDp0LlBvaW50LE1lcmNhdG9yQ29vcmRpbmF0ZTp0Lk1lcmNhdG9yQ29vcmRpbmF0ZSxFdmVudGVkOnQuRXZlbnRlZCxjb25maWc6dC5jb25maWcscHJld2FybTpmdW5jdGlvbigpe0J0KCkuYWNxdWlyZSh6dCl9LGNsZWFyUHJld2FybWVkUmVzb3VyY2VzOmZ1bmN0aW9uKCl7dmFyIHQ9UnQ7dCYmKHQuaXNQcmVsb2FkZWQoKSYmMT09PXQubnVtQWN0aXZlKCk/KHQucmVsZWFzZSh6dCksUnQ9bnVsbCk6Y29uc29sZS53YXJuKCJDb3VsZCBub3QgY2xlYXIgV2ViV29ya2VycyBzaW5jZSB0aGVyZSBhcmUgYWN0aXZlIE1hcCBpbnN0YW5jZXMgdGhhdCBzdGlsbCByZWZlcmVuY2UgaXQuIFRoZSBwcmUtd2FybWVkIFdlYldvcmtlciBwb29sIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiBhbGwgbWFwIGluc3RhbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZCB3aXRoIG1hcC5yZW1vdmUoKSIpKX0sZ2V0IGFjY2Vzc1Rva2VuKCl7cmV0dXJuIHQuY29uZmlnLkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKGUpe3QuY29uZmlnLkFDQ0VTU19UT0tFTj1lfSxnZXQgYmFzZUFwaVVybCgpe3JldHVybiB0LmNvbmZpZy5BUElfVVJMfSxzZXQgYmFzZUFwaVVybChlKXt0LmNvbmZpZy5BUElfVVJMPWV9LGdldCB3b3JrZXJDb3VudCgpe3JldHVybiBEdC53b3JrZXJDb3VudH0sc2V0IHdvcmtlckNvdW50KHQpe0R0LndvcmtlckNvdW50PXR9LGdldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMoKXtyZXR1cm4gdC5jb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTfSxzZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKGUpe3QuY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUz1lfSxjbGVhclN0b3JhZ2U6ZnVuY3Rpb24oZSl7dC5jbGVhclRpbGVDYWNoZShlKX0sd29ya2VyVXJsOiIifTtyZXR1cm4gWml9KSkscn0pKX0se31dLDI0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9TWF0aC5sb2cyfHxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkqTWF0aC5MT0cyRX19LHt9XSwyNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9dCx0PXdpbmRvdyk7dmFyIHI9MCxpPTAsYT0wLG89e3NoaWZ0OiExLGFsdDohMSxjb250cm9sOiExLG1ldGE6ITF9LHM9ITE7ZnVuY3Rpb24gbCh0KXt2YXIgZT0hMTtyZXR1cm4iYWx0S2V5ImluIHQmJihlPWV8fHQuYWx0S2V5IT09by5hbHQsby5hbHQ9ISF0LmFsdEtleSksInNoaWZ0S2V5ImluIHQmJihlPWV8fHQuc2hpZnRLZXkhPT1vLnNoaWZ0LG8uc2hpZnQ9ISF0LnNoaWZ0S2V5KSwiY3RybEtleSJpbiB0JiYoZT1lfHx0LmN0cmxLZXkhPT1vLmNvbnRyb2wsby5jb250cm9sPSEhdC5jdHJsS2V5KSwibWV0YUtleSJpbiB0JiYoZT1lfHx0Lm1ldGFLZXkhPT1vLm1ldGEsby5tZXRhPSEhdC5tZXRhS2V5KSxlfWZ1bmN0aW9uIGModCxzKXt2YXIgYz1uLngocyksdT1uLnkocyk7ImJ1dHRvbnMiaW4gcyYmKHQ9MHxzLmJ1dHRvbnMpLCh0IT09cnx8YyE9PWl8fHUhPT1hfHxsKHMpKSYmKHI9MHx0LGk9Y3x8MCxhPXV8fDAsZSYmZShyLGksYSxvKSl9ZnVuY3Rpb24gdSh0KXtjKDAsdCl9ZnVuY3Rpb24gZigpeyhyfHxpfHxhfHxvLnNoaWZ0fHxvLmFsdHx8by5tZXRhfHxvLmNvbnRyb2wpJiYoaT1hPTAscj0wLG8uc2hpZnQ9by5hbHQ9by5jb250cm9sPW8ubWV0YT0hMSxlJiZlKDAsMCwwLG8pKX1mdW5jdGlvbiBoKHQpe2wodCkmJmUmJmUocixpLGEsbyl9ZnVuY3Rpb24gcCh0KXswPT09bi5idXR0b25zKHQpP2MoMCx0KTpjKHIsdCl9ZnVuY3Rpb24gZCh0KXtjKHJ8bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIG0odCl7YyhyJn5uLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gZygpe3N8fChzPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixtKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSx0IT09d2luZG93JiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCkpKX1nKCk7dmFyIHY9e2VsZW1lbnQ6dH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHYse2VuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7ZT9nKCk6ZnVuY3Rpb24oKXtpZighcylyZXR1cm47cz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpKX0oKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGVudW1lcmFibGU6ITB9fSksdn07dmFyIG49dCgibW91c2UtZXZlbnQiKX0seyJtb3VzZS1ldmVudCI6MjQzfV0sMjQyOltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudHx8d2luZG93fXIuYnV0dG9ucz1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJidXR0b25zImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZigid2hpY2giaW4gdCl7aWYoMj09PShlPXQud2hpY2gpKXJldHVybiA0O2lmKDM9PT1lKXJldHVybiAyO2lmKGU+MClyZXR1cm4gMTw8ZS0xfWVsc2UgaWYoImJ1dHRvbiJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WCJpbiB0KXJldHVybiB0Lm9mZnNldFg7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRYLWUubGVmdH1yZXR1cm4gMH0sci55PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFkiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSwyNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidG8tcHgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKCJleCIsdCksYT1mdW5jdGlvbih0KXtyJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dC5kZWx0YVh8fDAsYT10LmRlbHRhWXx8MCxvPXQuZGVsdGFafHwwLHM9MTtzd2l0Y2godC5kZWx0YU1vZGUpe2Nhc2UgMTpzPWk7YnJlYWs7Y2FzZSAyOnM9d2luZG93LmlubmVySGVpZ2h0fWlmKGEqPXMsbyo9cywobio9cyl8fGF8fG8pcmV0dXJuIGUobixhLG8sdCl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhKSxhfX0seyJ0by1weCI6MzE0fV0sMjQ1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQscil7KGZ1bmN0aW9uKCl7Ci8qISBOYXRpdmUgUHJvbWlzZSBPbmx5CiAgICB2MC44LjEgKGMpIEt5bGUgU2ltcHNvbgogICAgTUlUIExpY2Vuc2U6IGh0dHA6Ly9nZXRpZnkubWl0LWxpY2Vuc2Uub3JnCiovCiFmdW5jdGlvbih0LHIsbil7clt0XT1yW3RdfHxuKCksdm9pZCAwIT09ZSYmZS5leHBvcnRzJiYoZS5leHBvcnRzPXJbdF0pfSgiUHJvbWlzZSIsdm9pZCAwIT09dD90OnRoaXMsKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0LGUsbixpPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsYT12b2lkIDAhPT1yP2Z1bmN0aW9uKHQpe3JldHVybiByKHQpfTpzZXRUaW1lb3V0O3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KSx0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSE9PW59KX19Y2F0Y2goZSl7dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fX1mdW5jdGlvbiBvKHQscil7bi5hZGQodCxyKSxlfHwoZT1hKG4uZHJhaW4pKX1mdW5jdGlvbiBzKHQpe3ZhciBlLHI9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJvYmplY3QiIT1yJiYiZnVuY3Rpb24iIT1yfHwoZT10LnRoZW4pLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlfWZ1bmN0aW9uIGwoKXtmb3IodmFyIHQ9MDt0PHRoaXMuY2hhaW4ubGVuZ3RoO3QrKyljKHRoaXMsMT09PXRoaXMuc3RhdGU/dGhpcy5jaGFpblt0XS5zdWNjZXNzOnRoaXMuY2hhaW5bdF0uZmFpbHVyZSx0aGlzLmNoYWluW3RdKTt0aGlzLmNoYWluLmxlbmd0aD0wfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuLGk7dHJ5eyExPT09ZT9yLnJlamVjdCh0Lm1zZyk6KG49ITA9PT1lP3QubXNnOmUuY2FsbCh2b2lkIDAsdC5tc2cpKT09PXIucHJvbWlzZT9yLnJlamVjdChUeXBlRXJyb3IoIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KGk9cyhuKSk/aS5jYWxsKG4sci5yZXNvbHZlLHIucmVqZWN0KTpyLnJlc29sdmUobil9Y2F0Y2godCl7ci5yZWplY3QodCl9fWZ1bmN0aW9uIHUodCl7dmFyIGUscj10aGlzO2lmKCFyLnRyaWdnZXJlZCl7ci50cmlnZ2VyZWQ9ITAsci5kZWYmJihyPXIuZGVmKTt0cnl7KGU9cyh0KSk/bygoZnVuY3Rpb24oKXt2YXIgbj1uZXcgcChyKTt0cnl7ZS5jYWxsKHQsKGZ1bmN0aW9uKCl7dS5hcHBseShuLGFyZ3VtZW50cyl9KSwoZnVuY3Rpb24oKXtmLmFwcGx5KG4sYXJndW1lbnRzKX0pKX1jYXRjaCh0KXtmLmNhbGwobix0KX19KSk6KHIubXNnPXQsci5zdGF0ZT0xLHIuY2hhaW4ubGVuZ3RoPjAmJm8obCxyKSl9Y2F0Y2godCl7Zi5jYWxsKG5ldyBwKHIpLHQpfX19ZnVuY3Rpb24gZih0KXt2YXIgZT10aGlzO2UudHJpZ2dlcmVkfHwoZS50cmlnZ2VyZWQ9ITAsZS5kZWYmJihlPWUuZGVmKSxlLm1zZz10LGUuc3RhdGU9MixlLmNoYWluLmxlbmd0aD4wJiZvKGwsZSkpfWZ1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspIWZ1bmN0aW9uKGkpe3QucmVzb2x2ZShlW2ldKS50aGVuKChmdW5jdGlvbih0KXtyKGksdCl9KSxuKX0oaSl9ZnVuY3Rpb24gcCh0KXt0aGlzLmRlZj10LHRoaXMudHJpZ2dlcmVkPSExfWZ1bmN0aW9uIGQodCl7dGhpcy5wcm9taXNlPXQsdGhpcy5zdGF0ZT0wLHRoaXMudHJpZ2dlcmVkPSExLHRoaXMuY2hhaW49W10sdGhpcy5tc2c9dm9pZCAwfWZ1bmN0aW9uIG0odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO2lmKDAhPT10aGlzLl9fTlBPX18pdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBwcm9taXNlIik7dGhpcy5fX05QT19fPTE7dmFyIGU9bmV3IGQodGhpcyk7dGhpcy50aGVuPWZ1bmN0aW9uKHQscil7dmFyIG49e3N1Y2Nlc3M6ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQsZmFpbHVyZToiZnVuY3Rpb24iPT10eXBlb2YgciYmcn07cmV0dXJuIG4ucHJvbWlzZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcigoZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO24ucmVzb2x2ZT10LG4ucmVqZWN0PWV9KSksZS5jaGFpbi5wdXNoKG4pLDAhPT1lLnN0YXRlJiZvKGwsZSksbi5wcm9taXNlfSx0aGlzLmNhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfTt0cnl7dC5jYWxsKHZvaWQgMCwoZnVuY3Rpb24odCl7dS5jYWxsKGUsdCl9KSwoZnVuY3Rpb24odCl7Zi5jYWxsKGUsdCl9KSl9Y2F0Y2godCl7Zi5jYWxsKGUsdCl9fW49ZnVuY3Rpb24oKXt2YXIgdCxyLG47ZnVuY3Rpb24gaSh0LGUpe3RoaXMuZm49dCx0aGlzLnNlbGY9ZSx0aGlzLm5leHQ9dm9pZCAwfXJldHVybnthZGQ6ZnVuY3Rpb24oZSxhKXtuPW5ldyBpKGUsYSkscj9yLm5leHQ9bjp0PW4scj1uLG49dm9pZCAwfSxkcmFpbjpmdW5jdGlvbigpe3ZhciBuPXQ7Zm9yKHQ9cj1lPXZvaWQgMDtuOyluLmZuLmNhbGwobi5zZWxmKSxuPW4ubmV4dH19fSgpO3ZhciBnPXQoe30sImNvbnN0cnVjdG9yIixtLCExKTtyZXR1cm4gbS5wcm90b3R5cGU9Zyx0KGcsIl9fTlBPX18iLDAsITEpLHQobSwicmVzb2x2ZSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJjE9PT10Ll9fTlBPX18/dDpuZXcgdGhpcygoZnVuY3Rpb24oZSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO2UodCl9KSl9KSksdChtLCJyZWplY3QiLChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRoaXMoKGZ1bmN0aW9uKGUscil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGV8fCJmdW5jdGlvbiIhPXR5cGVvZiByKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTtyKHQpfSkpfSkpLHQobSwiYWxsIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4iW29iamVjdCBBcnJheV0iIT1pLmNhbGwodCk/ZS5yZWplY3QoVHlwZUVycm9yKCJOb3QgYW4gYXJyYXkiKSk6MD09PXQubGVuZ3RoP2UucmVzb2x2ZShbXSk6bmV3IGUoKGZ1bmN0aW9uKHIsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTt2YXIgaT10Lmxlbmd0aCxhPUFycmF5KGkpLG89MDtoKGUsdCwoZnVuY3Rpb24odCxlKXthW3RdPWUsKytvPT09aSYmcihhKX0pLG4pfSkpfSkpLHQobSwicmFjZSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIltvYmplY3QgQXJyYXldIiE9aS5jYWxsKHQpP2UucmVqZWN0KFR5cGVFcnJvcigiTm90IGFuIGFycmF5IikpOm5ldyBlKChmdW5jdGlvbihyLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByfHwiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7aChlLHQsKGZ1bmN0aW9uKHQsZSl7cihlKX0pLG4pfSkpfSkpLG19KSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sdCgidGltZXJzIikuc2V0SW1tZWRpYXRlKX0se3RpbWVyczozMTF9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLlBJLGk9YygxMjApO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuWyJDIix0LGUscixuLHIsbl19ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7cmV0dXJuWyJDIix0LzMrMi8zKnIsZS8zKzIvMypuLGkvMysyLzMqcixhLzMrMi8zKm4saSxhXX1mdW5jdGlvbiBzKHQsZSxyLGEsbyxjLHUsZixoLHApe2lmKHApVD1wWzBdLGs9cFsxXSxfPXBbMl0sdz1wWzNdO2Vsc2V7dmFyIGQ9bCh0LGUsLW8pO3Q9ZC54LGU9ZC55O3ZhciBtPSh0LShmPShkPWwoZixoLC1vKSkueCkpLzIsZz0oZS0oaD1kLnkpKS8yLHY9bSptLyhyKnIpK2cqZy8oYSphKTt2PjEmJihyKj12PU1hdGguc3FydCh2KSxhKj12KTt2YXIgeT1yKnIseD1hKmEsYj0oYz09dT8tMToxKSpNYXRoLnNxcnQoTWF0aC5hYnMoKHkqeC15KmcqZy14Km0qbSkvKHkqZypnK3gqbSptKSkpO2I9PTEvMCYmKGI9MSk7dmFyIF89YipyKmcvYSsodCtmKS8yLHc9YiotYSptL3IrKGUraCkvMixUPU1hdGguYXNpbigoKGUtdykvYSkudG9GaXhlZCg5KSksaz1NYXRoLmFzaW4oKChoLXcpL2EpLnRvRml4ZWQoOSkpOyhUPXQ8Xz9uLVQ6VCk8MCYmKFQ9MipuK1QpLChrPWY8Xz9uLWs6ayk8MCYmKGs9MipuK2spLHUmJlQ+ayYmKFQtPTIqbiksIXUmJms+VCYmKGstPTIqbil9aWYoTWF0aC5hYnMoay1UKT5pKXt2YXIgQT1rLE09ZixTPWg7az1UK2kqKHUmJms+VD8xOi0xKTt2YXIgRT1zKGY9XytyKk1hdGguY29zKGspLGg9dythKk1hdGguc2luKGspLHIsYSxvLDAsdSxNLFMsW2ssQSxfLHddKX12YXIgTD1NYXRoLnRhbigoay1UKS80KSxDPTQvMypyKkwsUD00LzMqYSpMLEk9WzIqdC0odCtDKk1hdGguc2luKFQpKSwyKmUtKGUtUCpNYXRoLmNvcyhUKSksZitDKk1hdGguc2luKGspLGgtUCpNYXRoLmNvcyhrKSxmLGhdO2lmKHApcmV0dXJuIEk7RSYmKEk9SS5jb25jYXQoRSkpO2Zvcih2YXIgTz0wO088SS5sZW5ndGg7KXt2YXIgej1sKElbT10sSVtPKzFdLG8pO0lbTysrXT16LngsSVtPKytdPXoueX1yZXR1cm4gSX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm57eDp0Kk1hdGguY29zKHIpLWUqTWF0aC5zaW4ocikseTp0Kk1hdGguc2luKHIpK2UqTWF0aC5jb3Mocil9fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQqKG4vMTgwKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbj0wLGk9MCxsPTAsdT0wLGY9bnVsbCxoPW51bGwscD0wLGQ9MCxtPTAsZz10Lmxlbmd0aDttPGc7bSsrKXt2YXIgdj10W21dLHk9dlswXTtzd2l0Y2goeSl7Y2FzZSJNIjpsPXZbMV0sdT12WzJdO2JyZWFrO2Nhc2UiQSI6KHY9cyhwLGQsdlsxXSx2WzJdLGModlszXSksdls0XSx2WzVdLHZbNl0sdls3XSkpLnVuc2hpZnQoIkMiKSx2Lmxlbmd0aD43JiYoci5wdXNoKHYuc3BsaWNlKDAsNykpLHYudW5zaGlmdCgiQyIpKTticmVhaztjYXNlIlMiOnZhciB4PXAsYj1kOyJDIiE9ZSYmIlMiIT1lfHwoeCs9eC1uLGIrPWItaSksdj1bIkMiLHgsYix2WzFdLHZbMl0sdlszXSx2WzRdXTticmVhaztjYXNlIlQiOiJRIj09ZXx8IlQiPT1lPyhmPTIqcC1mLGg9MipkLWgpOihmPXAsaD1kKSx2PW8ocCxkLGYsaCx2WzFdLHZbMl0pO2JyZWFrO2Nhc2UiUSI6Zj12WzFdLGg9dlsyXSx2PW8ocCxkLHZbMV0sdlsyXSx2WzNdLHZbNF0pO2JyZWFrO2Nhc2UiTCI6dj1hKHAsZCx2WzFdLHZbMl0pO2JyZWFrO2Nhc2UiSCI6dj1hKHAsZCx2WzFdLGQpO2JyZWFrO2Nhc2UiViI6dj1hKHAsZCxwLHZbMV0pO2JyZWFrO2Nhc2UiWiI6dj1hKHAsZCxsLHUpfWU9eSxwPXZbdi5sZW5ndGgtMl0sZD12W3YubGVuZ3RoLTFdLHYubGVuZ3RoPjQ/KG49dlt2Lmxlbmd0aC00XSxpPXZbdi5sZW5ndGgtM10pOihuPXAsaT1kKSxyLnB1c2godil9cmV0dXJuIHJ9fSx7fV0sMjQ3OltmdW5jdGlvbih0LGUscil7Ci8qCm9iamVjdC1hc3NpZ24KKGMpIFNpbmRyZSBTb3JodXMKQGxpY2Vuc2UgTUlUCiovCiJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZnVuY3Rpb24gbyh0KXtpZihudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE9iamVjdCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIHQ9bmV3IFN0cmluZygiYWJjIik7aWYodFs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpWzBdKXJldHVybiExO2Zvcih2YXIgZT17fSxyPTA7cjwxMDtyKyspZVsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpLmpvaW4oIiIpKXJldHVybiExO3ZhciBuPXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe25bdF09dH0pKSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxuKSkuam9pbigiIil9Y2F0Y2godCl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIscyxsPW8odCksYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe2Zvcih2YXIgdSBpbiByPU9iamVjdChhcmd1bWVudHNbY10pKWkuY2FsbChyLHUpJiYobFt1XT1yW3VdKTtpZihuKXtzPW4ocik7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDtmKyspYS5jYWxsKHIsc1tmXSkmJihsW3NbZl1dPXJbc1tmXV0pfX1yZXR1cm4gbH19LHt9XSwyNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm5bdF07dmFyIHI9W3RdOyJzdHJpbmciPT10eXBlb2YgZXx8QXJyYXkuaXNBcnJheShlKT9lPXticmFja2V0czplfTplfHwoZT17fSk7dmFyIG49ZS5icmFja2V0cz9BcnJheS5pc0FycmF5KGUuYnJhY2tldHMpP2UuYnJhY2tldHM6W2UuYnJhY2tldHNdOlsie30iLCJbXSIsIigpIl0saT1lLmVzY2FwZXx8Il9fXyIsYT0hIWUuZmxhdDtuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoWyJcXCIsdFswXSwiW15cXCIsdFswXSwiXFwiLHRbMV0sIl0qXFwiLHRbMV1dLmpvaW4oIiIpKSxuPVtdO2Z1bmN0aW9uIGEoZSxhLG8pe3ZhciBzPXIucHVzaChlLnNsaWNlKHRbMF0ubGVuZ3RoLC10WzFdLmxlbmd0aCkpLTE7cmV0dXJuIG4ucHVzaChzKSxpK3MraX1yLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7Zm9yKHZhciBpLG89MDt0IT1pOylpZihpPXQsdD10LnJlcGxhY2UoZSxhKSxvKys+MWU0KXRocm93IEVycm9yKCJSZWZlcmVuY2VzIGhhdmUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gUGxlYXNlLCBjaGVjayB0aGVtLiIpO3Jbbl09dH0pKSxuPW4ucmV2ZXJzZSgpLHI9ci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHIpe2U9ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihcXCIraStyKyJcXCIraSsiKSIsImciKSx0WzBdKyIkMSIrdFsxXSl9KSksZX0pKX0pKTt2YXIgbz1uZXcgUmVnRXhwKCJcXCIraSsiKFswLTldKylcXCIraSk7cmV0dXJuIGE/cjpmdW5jdGlvbiB0KGUscixuKXtmb3IodmFyIGksYT1bXSxzPTA7aT1vLmV4ZWMoZSk7KXtpZihzKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluIHBhcmVudGhlc2lzIik7YS5wdXNoKGUuc2xpY2UoMCxpLmluZGV4KSksYS5wdXNoKHQocltpWzFdXSxyKSksZT1lLnNsaWNlKGkuaW5kZXgraVswXS5sZW5ndGgpfXJldHVybiBhLnB1c2goZSksYX0oclswXSxyKX1mdW5jdGlvbiBpKHQsZSl7aWYoZSYmZS5mbGF0KXt2YXIgcixuPWUmJmUuZXNjYXBlfHwiX19fIixpPXRbMF07aWYoIWkpcmV0dXJuIiI7Zm9yKHZhciBhPW5ldyBSZWdFeHAoIlxcIituKyIoWzAtOV0rKVxcIituKSxvPTA7aSE9cjspe2lmKG8rKz4xZTQpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gIit0KTtyPWksaT1pLnJlcGxhY2UoYSxzKX1yZXR1cm4gaX1yZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmKHI9ci5yZWR1Y2UodCwiIikpLGUrcn0pLCIiKTtmdW5jdGlvbiBzKGUscil7aWYobnVsbD09dFtyXSl0aHJvdyBFcnJvcigiUmVmZXJlbmNlICIrcisiaXMgdW5kZWZpbmVkIik7cmV0dXJuIHRbcl19fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9pKHQsZSk6bih0LGUpfWEucGFyc2U9bixhLnN0cmluZ2lmeT1pLGUuZXhwb3J0cz1hfSx7fV0sMjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7YXJndW1lbnRzLmxlbmd0aD4xJiYodD1hcmd1bWVudHMpOyJzdHJpbmciPT10eXBlb2YgdD90PXQuc3BsaXQoL1xzLykubWFwKHBhcnNlRmxvYXQpOiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9W3RdKTt0Lmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiB0WzBdP2U9MT09PXQubGVuZ3RoP3t3aWR0aDp0WzBdLGhlaWdodDp0WzBdLHg6MCx5OjB9OjI9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFsxXSx4OjAseTowfTp7eDp0WzBdLHk6dFsxXSx3aWR0aDp0WzJdLXRbMF18fDAsaGVpZ2h0OnRbM10tdFsxXXx8MH06dCYmKHQ9bih0LHtsZWZ0OiJ4IGwgbGVmdCBMZWZ0Iix0b3A6InkgdCB0b3AgVG9wIix3aWR0aDoidyB3aWR0aCBXIFdpZHRoIixoZWlnaHQ6ImggaGVpZ2h0IFcgV2lkdGgiLGJvdHRvbToiYiBib3R0b20gQm90dG9tIixyaWdodDoiciByaWdodCBSaWdodCJ9KSxlPXt4OnQubGVmdHx8MCx5OnQudG9wfHwwfSxudWxsPT10LndpZHRoP3QucmlnaHQ/ZS53aWR0aD10LnJpZ2h0LWUueDplLndpZHRoPTA6ZS53aWR0aD10LndpZHRoLG51bGw9PXQuaGVpZ2h0P3QuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD0wOmUuaGVpZ2h0PXQuaGVpZ2h0KTtyZXR1cm4gZX19LHsicGljay1ieS1hbGlhcyI6MjUzfV0sMjUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0LnJlcGxhY2UoaSwoZnVuY3Rpb24odCxyLGkpe3ZhciBvPXIudG9Mb3dlckNhc2UoKTtmb3IoaT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGEpO3JldHVybiBlP2UubWFwKE51bWJlcik6W119KGkpLCJtIj09byYmaS5sZW5ndGg+MiYmKGUucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsMikpKSxvPSJsIixyPSJtIj09cj8ibCI6IkwiKTs7KXtpZihpLmxlbmd0aD09bltvXSlyZXR1cm4gaS51bnNoaWZ0KHIpLGUucHVzaChpKTtpZihpLmxlbmd0aDxuW29dKXRocm93IG5ldyBFcnJvcigibWFsZm9ybWVkIHBhdGggZGF0YSIpO2UucHVzaChbcl0uY29uY2F0KGkuc3BsaWNlKDAsbltvXSkpKX19KSksZX07dmFyIG49e2E6NyxjOjYsaDoxLGw6MixtOjIscTo0LHM6NCx0OjIsdjoxLHo6MH0saT0vKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2dpO3ZhciBhPS8tP1swLTldKlwuP1swLTldKyg/OmVbLStdP1xkKyk/L2dpfSx7fV0sMjUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9WzAsIiJdKSx0PVN0cmluZyh0KTt2YXIgcj1wYXJzZUZsb2F0KHQsMTApO3JldHVybiBlWzBdPXIsZVsxXT10Lm1hdGNoKC9bXGQuXC1cK10qXHMqKC4qKS8pWzFdfHwiIixlfX0se31dLDI1MjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXsoZnVuY3Rpb24oKXt2YXIgcixuLGksYSxvLHM7InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmbnVsbCE9PXBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpudWxsIT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKHIoKS1vKS8xZTZ9LG49dC5ocnRpbWUsYT0ocj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiAxZTkqKHQ9bigpKVswXSt0WzFdfSkoKSxzPTFlOSp0LnVwdGltZSgpLG89YS1zKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktaX0saT1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktaX0saT0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjI3N31dLDI1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz17fTtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWkoZSkpLEFycmF5LmlzQXJyYXkoZSkpe3ZhciBzPXt9O2ZvcihhPTA7YTxlLmxlbmd0aDthKyspc1tlW2FdXT0hMDtlPXN9Zm9yKG4gaW4gZSllW25dPWkoZVtuXSk7dmFyIGw9e307Zm9yKG4gaW4gZSl7dmFyIGM9ZVtuXTtpZihBcnJheS5pc0FycmF5KGMpKWZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07aWYociYmKGxbdV09ITApLHUgaW4gdCl7aWYob1tuXT10W3VdLHIpZm9yKHZhciBmPWE7ZjxjLmxlbmd0aDtmKyspbFtjW2ZdXT0hMDticmVha319ZWxzZSBuIGluIHQmJihlW25dJiYob1tuXT10W25dKSxyJiYobFtuXT0hMCkpfWlmKHIpZm9yKG4gaW4gdClsW25dfHwob1tuXT10W25dKTtyZXR1cm4gb307dmFyIG49e307ZnVuY3Rpb24gaSh0KXtyZXR1cm4gblt0XT9uW3RdOigic3RyaW5nIj09dHlwZW9mIHQmJih0PW5bdF09dC5zcGxpdCgvXHMqLFxzKnxccysvKSksdCl9fSx7fV0sMjU0OltmdW5jdGlvbih0LGUscil7Ci8qCiAqIEBjb3B5cmlnaHQgMjAxNiBTZWFuIENvbm5lbGx5IChAdm9pZHFrKSwgaHR0cDovL3N5bnRoZXRpLmNjCiAqIEBsaWNlbnNlIE1JVAogKiBAcHJlc2VydmUgUHJvamVjdCBIb21lOiBodHRwczovL2dpdGh1Yi5jb20vdm9pZHFrL3BvbHlib29sanMKICovCnZhciBuLGk9dCgiLi9saWIvYnVpbGQtbG9nIiksYT10KCIuL2xpYi9lcHNpbG9uIiksbz10KCIuL2xpYi9pbnRlcnNlY3RlciIpLHM9dCgiLi9saWIvc2VnbWVudC1jaGFpbmVyIiksbD10KCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIiksYz10KCIuL2xpYi9nZW9qc29uIiksdT0hMSxmPWEoKTtmdW5jdGlvbiBoKHQsZSxyKXt2YXIgaT1uLnNlZ21lbnRzKHQpLGE9bi5zZWdtZW50cyhlKSxvPXIobi5jb21iaW5lKGksYSkpO3JldHVybiBuLnBvbHlnb24obyl9bj17YnVpbGRMb2c6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P3U9aSgpOiExPT09dCYmKHU9ITEpLCExIT09dSYmdS5saXN0fSxlcHNpbG9uOmZ1bmN0aW9uKHQpe3JldHVybiBmLmVwc2lsb24odCl9LHNlZ21lbnRzOmZ1bmN0aW9uKHQpe3ZhciBlPW8oITAsZix1KTtyZXR1cm4gdC5yZWdpb25zLmZvckVhY2goZS5hZGRSZWdpb24pLHtzZWdtZW50czplLmNhbGN1bGF0ZSh0LmludmVydGVkKSxpbnZlcnRlZDp0LmludmVydGVkfX0sY29tYmluZTpmdW5jdGlvbih0LGUpe3JldHVybntjb21iaW5lZDpvKCExLGYsdSkuY2FsY3VsYXRlKHQuc2VnbWVudHMsdC5pbnZlcnRlZCxlLnNlZ21lbnRzLGUuaW52ZXJ0ZWQpLGludmVydGVkMTp0LmludmVydGVkLGludmVydGVkMjplLmludmVydGVkfX0sc2VsZWN0VW5pb246ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwudW5pb24odC5jb21iaW5lZCx1KSxpbnZlcnRlZDp0LmludmVydGVkMXx8dC5pbnZlcnRlZDJ9fSxzZWxlY3RJbnRlcnNlY3Q6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuaW50ZXJzZWN0KHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZTpmdW5jdGlvbih0KXtyZXR1cm57c2VnbWVudHM6bC5kaWZmZXJlbmNlKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJiF0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZVJldih0LmNvbWJpbmVkLHUpLGludmVydGVkOiF0LmludmVydGVkMSYmdC5pbnZlcnRlZDJ9fSxzZWxlY3RYb3I6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwueG9yKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEhPT10LmludmVydGVkMn19LHBvbHlnb246ZnVuY3Rpb24odCl7cmV0dXJue3JlZ2lvbnM6cyh0LnNlZ21lbnRzLGYsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LHBvbHlnb25Gcm9tR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy50b1BvbHlnb24obix0KX0scG9seWdvblRvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy5mcm9tUG9seWdvbihuLGYsdCl9LHVuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0VW5pb24pfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0LGUsbi5zZWxlY3RJbnRlcnNlY3QpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0RGlmZmVyZW5jZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0LGUsbi5zZWxlY3REaWZmZXJlbmNlUmV2KX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0WG9yKX19LCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYod2luZG93LlBvbHlCb29sPW4pLGUuZXhwb3J0cz1ufSx7Ii4vbGliL2J1aWxkLWxvZyI6MjU1LCIuL2xpYi9lcHNpbG9uIjoyNTYsIi4vbGliL2dlb2pzb24iOjI1NywiLi9saWIvaW50ZXJzZWN0ZXIiOjI1OCwiLi9saWIvc2VnbWVudC1jaGFpbmVyIjoyNjAsIi4vbGliL3NlZ21lbnQtc2VsZWN0b3IiOjI2MX1dLDI1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9MCxyPSExO2Z1bmN0aW9uIG4oZSxyKXtyZXR1cm4gdC5saXN0LnB1c2goe3R5cGU6ZSxkYXRhOnI/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyKSk6dm9pZCAwfSksdH1yZXR1cm4gdD17bGlzdDpbXSxzZWdtZW50SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSsrfSxjaGVja0ludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGVjayIse3NlZzE6dCxzZWcyOmV9KX0sc2VnbWVudENob3A6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiZGl2X3NlZyIse3NlZzp0LHB0OmV9KSxuKCJjaG9wIix7c2VnOnQscHQ6ZX0pfSxzdGF0dXNSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInBvcF9zZWciLHtzZWc6dH0pfSxzZWdtZW50VXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWdfdXBkYXRlIix7c2VnOnR9KX0sc2VnbWVudE5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJuZXdfc2VnIix7c2VnOnQscHJpbWFyeTplfSl9LHNlZ21lbnRSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInJlbV9zZWciLHtzZWc6dH0pfSx0ZW1wU3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigidGVtcF9zdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0scmV3aW5kOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZXdpbmQiLHtzZWc6dH0pfSxzdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKCJzdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0sdmVydDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXI/dDoocj1lLG4oInZlcnQiLHt4OmV9KSl9LGxvZzpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJih0PUpTT04uc3RyaW5naWZ5KHQsITEsIiAgIikpLG4oImxvZyIse3R4dDp0fSl9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4oInJlc2V0Iil9LHNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWxlY3RlZCIse3NlZ3M6dH0pfSxjaGFpblN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9zdGFydCIse3NlZzp0fSl9LGNoYWluUmVtb3ZlSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9yZW1faGVhZCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpblJlbW92ZVRhaWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX3RhaWwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5OZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fbmV3Iix7cHQxOnQscHQyOmV9KX0sY2hhaW5NYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fbWF0Y2giLHtpbmRleDp0fSl9LGNoYWluQ2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX2Nsb3NlIix7aW5kZXg6dH0pfSxjaGFpbkFkZEhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fYWRkX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5BZGRUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQ29ubmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9jb24iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxjaGFpblJldmVyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX3JldiIse2luZGV4OnR9KX0sY2hhaW5Kb2luOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2pvaW4iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxkb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG4oImRvbmUiKX19fX0se31dLDI1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsibnVtYmVyIiE9dHlwZW9mIHQmJih0PTFlLTEwKTt2YXIgZT17ZXBzaWxvbjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJih0PWUpLHR9LHBvaW50QWJvdmVPck9uTGluZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1uWzBdLHM9blsxXSxsPWVbMF07cmV0dXJuKG8taSkqKGVbMV0tYSktKHMtYSkqKGwtaSk+PS10fSxwb2ludEJldHdlZW46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMV0tclsxXSxhPW5bMF0tclswXSxvPWVbMF0tclswXSxzPW5bMV0tclsxXSxsPW8qYStpKnM7cmV0dXJuIShsPHQpJiYhKGwtKGEqYStzKnMpPi10KX0scG9pbnRzU2FtZVg6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVswXS1yWzBdKTx0fSxwb2ludHNTYW1lWTpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzFdLXJbMV0pPHR9LHBvaW50c1NhbWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpJiZlLnBvaW50c1NhbWVZKHQscil9LHBvaW50c0NvbXBhcmU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpP2UucG9pbnRzU2FtZVkodCxyKT8wOnRbMV08clsxXT8tMToxOnRbMF08clswXT8tMToxfSxwb2ludHNDb2xsaW5lYXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMF0tclswXSxhPWVbMV0tclsxXSxvPXJbMF0tblswXSxzPXJbMV0tblsxXTtyZXR1cm4gTWF0aC5hYnMoaSpzLW8qYSk8dH0sbGluZXNJbnRlcnNlY3Q6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9clswXS1lWzBdLG89clsxXS1lWzFdLHM9aVswXS1uWzBdLGw9aVsxXS1uWzFdLGM9YSpsLW8qcztpZihNYXRoLmFicyhjKTx0KXJldHVybiExO3ZhciB1PWVbMF0tblswXSxmPWVbMV0tblsxXSxoPShzKmYtbCp1KS9jLHA9KGEqZi1vKnUpL2MsZD17YWxvbmdBOjAsYWxvbmdCOjAscHQ6W2VbMF0raCphLGVbMV0raCpvXX07cmV0dXJuIGQuYWxvbmdBPWg8PS10Py0yOmg8dD8tMTpoLTE8PS10PzA6aC0xPHQ/MToyLGQuYWxvbmdCPXA8PS10Py0yOnA8dD8tMTpwLTE8PS10PzA6cC0xPHQ/MToyLGR9LHBvaW50SW5zaWRlUmVnaW9uOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWVbMF0saT1lWzFdLGE9cltyLmxlbmd0aC0xXVswXSxvPXJbci5sZW5ndGgtMV1bMV0scz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF1bMF0sdT1yW2xdWzFdO3UtaT50IT1vLWk+dCYmKGEtYykqKGktdSkvKG8tdSkrYy1uPnQmJihzPSFzKSxhPWMsbz11fXJldHVybiBzfX07cmV0dXJuIGV9fSx7fV0sMjU3OltmdW5jdGlvbih0LGUscil7dmFyIG49e3RvUG9seWdvbjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7aWYoZS5sZW5ndGg8PTApcmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KTtmdW5jdGlvbiByKGUpe3ZhciByPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbcl19KX1mb3IodmFyIG49cihlWzBdKSxpPTE7aTxlLmxlbmd0aDtpKyspbj10LnNlbGVjdERpZmZlcmVuY2UodC5jb21iaW5lKG4scihlW2ldKSkpO3JldHVybiBufWlmKCJQb2x5Z29uIj09PWUudHlwZSlyZXR1cm4gdC5wb2x5Z29uKHIoZS5jb29yZGluYXRlcykpO2lmKCJNdWx0aVBvbHlnb24iPT09ZS50eXBlKXtmb3IodmFyIG49dC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pLGk9MDtpPGUuY29vcmRpbmF0ZXMubGVuZ3RoO2krKyluPXQuc2VsZWN0VW5pb24odC5jb21iaW5lKG4scihlLmNvb3JkaW5hdGVzW2ldKSkpO3JldHVybiB0LnBvbHlnb24obil9dGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogQ2Fubm90IGNvbnZlcnQgR2VvSlNPTiBvYmplY3QgdG8gUG9seUJvb2wgcG9seWdvbiIpfSxmcm9tUG9seWdvbjpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLnBvaW50SW5zaWRlUmVnaW9uKFsuNSoodFswXVswXSt0WzFdWzBdKSwuNSoodFswXVsxXSt0WzFdWzFdKV0scil9ZnVuY3Rpb24gaSh0KXtyZXR1cm57cmVnaW9uOnQsY2hpbGRyZW46W119fXI9dC5wb2x5Z29uKHQuc2VnbWVudHMocikpO3ZhciBhPWkobnVsbCk7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXtpZihuKGUsKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uKSlyZXR1cm4gdm9pZCBvKHMsZSl9dmFyIGE9aShlKTtmb3Iocj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgcztuKChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbixlKSYmKGEuY2hpbGRyZW4ucHVzaChzKSx0LmNoaWxkcmVuLnNwbGljZShyLDEpLHItLSl9dC5jaGlsZHJlbi5wdXNoKGEpfWZvcih2YXIgcz0wO3M8ci5yZWdpb25zLmxlbmd0aDtzKyspe3ZhciBsPXIucmVnaW9uc1tzXTtsLmxlbmd0aDwzfHxvKGEsbCl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dFt0Lmxlbmd0aC0xXVswXSxpPXRbdC5sZW5ndGgtMV1bMV0sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb11bMF0sbD10W29dWzFdO2EucHVzaChbcyxsXSkscis9bCpuLXMqaSxuPXMsaT1sfXJldHVybiByPDAhPT1lJiZhLnJldmVyc2UoKSxhLnB1c2goW2FbMF1bMF0sYVswXVsxXV0pLGF9dmFyIHU9W107ZnVuY3Rpb24gZih0KXt2YXIgZT1bYyh0LnJlZ2lvbiwhMSldO3UucHVzaChlKTtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLnB1c2goaCh0LmNoaWxkcmVuW3JdKSl9ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9MDtlPHQuY2hpbGRyZW4ubGVuZ3RoO2UrKylmKHQuY2hpbGRyZW5bZV0pO3JldHVybiBjKHQucmVnaW9uLCEwKX1mb3Iocz0wO3M8YS5jaGlsZHJlbi5sZW5ndGg7cysrKWYoYS5jaGlsZHJlbltzXSk7cmV0dXJuIHUubGVuZ3RoPD0wP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbXX06MT09dS5sZW5ndGg/e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnVbMF19Ont0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnV9fX07ZS5leHBvcnRzPW59LHt9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2xpbmtlZC1saXN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm57aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQsZW5kOmUsbXlGaWxsOnthYm92ZTpuLm15RmlsbC5hYm92ZSxiZWxvdzpuLm15RmlsbC5iZWxvd30sb3RoZXJGaWxsOm51bGx9fXZhciBhPW4uY3JlYXRlKCk7ZnVuY3Rpb24gbyh0LHIpe2EuaW5zZXJ0QmVmb3JlKHQsKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixpLGEsbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsYSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09aT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixpP2E6byxpP286YSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSkpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByPW4ubm9kZSh7aXNTdGFydDohMCxwdDp0LnN0YXJ0LHNlZzp0LHByaW1hcnk6ZSxvdGhlcjpudWxsLHN0YXR1czpudWxsfSk7cmV0dXJuIG8ocix0LmVuZCkscn0odCxlKTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4ubm9kZSh7aXNTdGFydDohMSxwdDplLmVuZCxzZWc6ZSxwcmltYXJ5OnIsb3RoZXI6dCxzdGF0dXM6bnVsbH0pO3Qub3RoZXI9aSxvKGksdC5wdCl9KHIsdCxlKSxyfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1pKGUsdC5zZWcuZW5kLHQuc2VnKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyJiZyLnNlZ21lbnRDaG9wKHQuc2VnLGUpLHQub3RoZXIucmVtb3ZlKCksdC5zZWcuZW5kPWUsdC5vdGhlci5wdD1lLG8odC5vdGhlcix0LnB0KX0odCxlKSxzKG4sdC5wcmltYXJ5KX1mdW5jdGlvbiBjKGksbyl7dmFyIHM9bi5jcmVhdGUoKTtmdW5jdGlvbiBjKHQpe3JldHVybiBzLmZpbmRUcmFuc2l0aW9uKChmdW5jdGlvbihyKXt2YXIgbixpLGEsbyxzLGw7cmV0dXJuKG49dCxpPXIuZXYsYT1uLnNlZy5zdGFydCxvPW4uc2VnLmVuZCxzPWkuc2VnLnN0YXJ0LGw9aS5zZWcuZW5kLGUucG9pbnRzQ29sbGluZWFyKGEscyxsKT9lLnBvaW50c0NvbGxpbmVhcihvLHMsbCl8fGUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGEscyxsKT8xOi0xKT4wfSkpfWZ1bmN0aW9uIHUodCxuKXt2YXIgaT10LnNlZyxhPW4uc2VnLG89aS5zdGFydCxzPWkuZW5kLGM9YS5zdGFydCx1PWEuZW5kO3ImJnIuY2hlY2tJbnRlcnNlY3Rpb24oaSxhKTt2YXIgZj1lLmxpbmVzSW50ZXJzZWN0KG8scyxjLHUpO2lmKCExPT09Zil7aWYoIWUucG9pbnRzQ29sbGluZWFyKG8scyxjKSlyZXR1cm4hMTtpZihlLnBvaW50c1NhbWUobyx1KXx8ZS5wb2ludHNTYW1lKHMsYykpcmV0dXJuITE7dmFyIGg9ZS5wb2ludHNTYW1lKG8sYykscD1lLnBvaW50c1NhbWUocyx1KTtpZihoJiZwKXJldHVybiBuO3ZhciBkPSFoJiZlLnBvaW50QmV0d2VlbihvLGMsdSksbT0hcCYmZS5wb2ludEJldHdlZW4ocyxjLHUpO2lmKGgpcmV0dXJuIG0/bChuLHMpOmwodCx1KSxuO2QmJihwfHwobT9sKG4scyk6bCh0LHUpKSxsKG4sbykpfWVsc2UgMD09PWYuYWxvbmdBJiYoLTE9PT1mLmFsb25nQj9sKHQsYyk6MD09PWYuYWxvbmdCP2wodCxmLnB0KToxPT09Zi5hbG9uZ0ImJmwodCx1KSksMD09PWYuYWxvbmdCJiYoLTE9PT1mLmFsb25nQT9sKG4sbyk6MD09PWYuYWxvbmdBP2wobixmLnB0KToxPT09Zi5hbG9uZ0EmJmwobixzKSk7cmV0dXJuITF9Zm9yKHZhciBmPVtdOyFhLmlzRW1wdHkoKTspe3ZhciBoPWEuZ2V0SGVhZCgpO2lmKHImJnIudmVydChoLnB0WzBdKSxoLmlzU3RhcnQpe3ImJnIuc2VnbWVudE5ldyhoLnNlZyxoLnByaW1hcnkpO3ZhciBwPWMoaCksZD1wLmJlZm9yZT9wLmJlZm9yZS5ldjpudWxsLG09cC5hZnRlcj9wLmFmdGVyLmV2Om51bGw7ZnVuY3Rpb24gZygpe2lmKGQpe3ZhciB0PXUoaCxkKTtpZih0KXJldHVybiB0fXJldHVybiEhbSYmdShoLG0pfXImJnIudGVtcFN0YXR1cyhoLnNlZywhIWQmJmQuc2VnLCEhbSYmbS5zZWcpO3ZhciB2LHk9ZygpO2lmKHkpe3ZhciB4O2lmKHQpKHg9bnVsbD09PWguc2VnLm15RmlsbC5iZWxvd3x8aC5zZWcubXlGaWxsLmFib3ZlIT09aC5zZWcubXlGaWxsLmJlbG93KSYmKHkuc2VnLm15RmlsbC5hYm92ZT0heS5zZWcubXlGaWxsLmFib3ZlKTtlbHNlIHkuc2VnLm90aGVyRmlsbD1oLnNlZy5teUZpbGw7ciYmci5zZWdtZW50VXBkYXRlKHkuc2VnKSxoLm90aGVyLnJlbW92ZSgpLGgucmVtb3ZlKCl9aWYoYS5nZXRIZWFkKCkhPT1oKXtyJiZyLnJld2luZChoLnNlZyk7Y29udGludWV9aWYodCl4PW51bGw9PT1oLnNlZy5teUZpbGwuYmVsb3d8fGguc2VnLm15RmlsbC5hYm92ZSE9PWguc2VnLm15RmlsbC5iZWxvdyxoLnNlZy5teUZpbGwuYmVsb3c9bT9tLnNlZy5teUZpbGwuYWJvdmU6aSxoLnNlZy5teUZpbGwuYWJvdmU9eD8haC5zZWcubXlGaWxsLmJlbG93Omguc2VnLm15RmlsbC5iZWxvdztlbHNlIGlmKG51bGw9PT1oLnNlZy5vdGhlckZpbGwpdj1tP2gucHJpbWFyeT09PW0ucHJpbWFyeT9tLnNlZy5vdGhlckZpbGwuYWJvdmU6bS5zZWcubXlGaWxsLmFib3ZlOmgucHJpbWFyeT9vOmksaC5zZWcub3RoZXJGaWxsPXthYm92ZTp2LGJlbG93OnZ9O3ImJnIuc3RhdHVzKGguc2VnLCEhZCYmZC5zZWcsISFtJiZtLnNlZyksaC5vdGhlci5zdGF0dXM9cC5pbnNlcnQobi5ub2RlKHtldjpofSkpfWVsc2V7dmFyIGI9aC5zdGF0dXM7aWYobnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtpZihzLmV4aXN0cyhiLnByZXYpJiZzLmV4aXN0cyhiLm5leHQpJiZ1KGIucHJldi5ldixiLm5leHQuZXYpLHImJnIuc3RhdHVzUmVtb3ZlKGIuZXYuc2VnKSxiLnJlbW92ZSgpLCFoLnByaW1hcnkpe3ZhciBfPWguc2VnLm15RmlsbDtoLnNlZy5teUZpbGw9aC5zZWcub3RoZXJGaWxsLGguc2VnLm90aGVyRmlsbD1ffWYucHVzaChoLnNlZyl9YS5nZXRIZWFkKCkucmVtb3ZlKCl9cmV0dXJuIHImJnIuZG9uZSgpLGZ9cmV0dXJuIHQ/e2FkZFJlZ2lvbjpmdW5jdGlvbih0KXtmb3IodmFyIG4saSxhLG89dFt0Lmxlbmd0aC0xXSxsPTA7bDx0Lmxlbmd0aDtsKyspe249byxvPXRbbF07dmFyIGM9ZS5wb2ludHNDb21wYXJlKG4sbyk7MCE9PWMmJnMoKGk9YzwwP246byxhPWM8MD9vOm4se2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDppLGVuZDphLG15RmlsbDp7YWJvdmU6bnVsbCxiZWxvdzpudWxsfSxvdGhlckZpbGw6bnVsbH0pLCEwKX19LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCExKX19OntjYWxjdWxhdGU6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITApfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITEpfSkpLGMoZSxuKX19fX0seyIuL2xpbmtlZC1saXN0IjoyNTl9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXtyb290Ontyb290OiEwLG5leHQ6bnVsbH0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmZSE9PXQucm9vdH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dC5yb290Lm5leHR9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5yb290Lm5leHR9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnJvb3QsaT10LnJvb3QubmV4dDtudWxsIT09aTspe2lmKHIoaSkpcmV0dXJuIGUucHJldj1pLnByZXYsZS5uZXh0PWksaS5wcmV2Lm5leHQ9ZSx2b2lkKGkucHJldj1lKTtuPWksaT1pLm5leHR9bi5uZXh0PWUsZS5wcmV2PW4sZS5uZXh0PW51bGx9LGZpbmRUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10LnJvb3Qsbj10LnJvb3QubmV4dDtudWxsIT09biYmIWUobik7KXI9bixuPW4ubmV4dDtyZXR1cm57YmVmb3JlOnI9PT10LnJvb3Q/bnVsbDpyLGFmdGVyOm4saW5zZXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9cix0Lm5leHQ9bixyLm5leHQ9dCxudWxsIT09biYmKG4ucHJldj10KSx0fX19fTtyZXR1cm4gdH0sbm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PW51bGwsdC5uZXh0PW51bGwsdC5yZW1vdmU9ZnVuY3Rpb24oKXt0LnByZXYubmV4dD10Lm5leHQsdC5uZXh0JiYodC5uZXh0LnByZXY9dC5wcmV2KSx0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbH0sdH19fSx7fV0sMjYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPXQuc3RhcnQsbz10LmVuZDtpZihlLnBvaW50c1NhbWUoYSxvKSljb25zb2xlLndhcm4oIlBvbHlCb29sOiBXYXJuaW5nOiBaZXJvLWxlbmd0aCBzZWdtZW50IGRldGVjdGVkOyB5b3VyIGVwc2lsb24gaXMgcHJvYmFibHkgdG9vIHNtYWxsIG9yIHRvbyBsYXJnZSIpO2Vsc2V7ciYmci5jaGFpblN0YXJ0KHQpO2Zvcih2YXIgcz17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGw9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxjPXMsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgZj0oZz1uW3VdKVswXSxoPShnWzFdLGdbZy5sZW5ndGgtMV0pO2dbZy5sZW5ndGgtMl07aWYoZS5wb2ludHNTYW1lKGYsYSkpe2lmKGsodSwhMCwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoZixvKSl7aWYoayh1LCEwLCExKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLGEpKXtpZihrKHUsITEsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGgsbykmJmsodSwhMSwhMSkpYnJlYWt9aWYoYz09PXMpcmV0dXJuIG4ucHVzaChbYSxvXSksdm9pZChyJiZyLmNoYWluTmV3KGEsbykpO2lmKGM9PT1sKXtyJiZyLmNoYWluTWF0Y2gocy5pbmRleCk7dmFyIHA9cy5pbmRleCxkPXMubWF0Y2hlc19wdDE/bzphLG09cy5tYXRjaGVzX2hlYWQsZz1uW3BdLHY9bT9nWzBdOmdbZy5sZW5ndGgtMV0seT1tP2dbMV06Z1tnLmxlbmd0aC0yXSx4PW0/Z1tnLmxlbmd0aC0xXTpnWzBdLGI9bT9nW2cubGVuZ3RoLTJdOmdbMV07cmV0dXJuIGUucG9pbnRzQ29sbGluZWFyKHksdixkKSYmKG0/KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsZCksZy5zaGlmdCgpKToociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxkKSxnLnBvcCgpKSx2PXkpLGUucG9pbnRzU2FtZSh4LGQpPyhuLnNwbGljZShwLDEpLGUucG9pbnRzQ29sbGluZWFyKGIseCx2KSYmKG0/KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsdiksZy5wb3AoKSk6KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsdiksZy5zaGlmdCgpKSksciYmci5jaGFpbkNsb3NlKHMuaW5kZXgpLHZvaWQgaS5wdXNoKGcpKTp2b2lkKG0/KHImJnIuY2hhaW5BZGRIZWFkKHMuaW5kZXgsZCksZy51bnNoaWZ0KGQpKToociYmci5jaGFpbkFkZFRhaWwocy5pbmRleCxkKSxnLnB1c2goZCkpKX12YXIgXz1zLmluZGV4LHc9bC5pbmRleDtyJiZyLmNoYWluQ29ubmVjdChfLHcpO3ZhciBUPW5bX10ubGVuZ3RoPG5bd10ubGVuZ3RoO3MubWF0Y2hlc19oZWFkP2wubWF0Y2hlc19oZWFkP1Q/KEEoXyksTShfLHcpKTooQSh3KSxNKHcsXykpOk0odyxfKTpsLm1hdGNoZXNfaGVhZD9NKF8sdyk6VD8oQShfKSxNKHcsXykpOihBKHcpLE0oXyx3KSl9ZnVuY3Rpb24gayh0LGUscil7cmV0dXJuIGMuaW5kZXg9dCxjLm1hdGNoZXNfaGVhZD1lLGMubWF0Y2hlc19wdDE9cixjPT09cz8oYz1sLCExKTooYz1udWxsLCEwKX1mdW5jdGlvbiBBKHQpe3ImJnIuY2hhaW5SZXZlcnNlKHQpLG5bdF0ucmV2ZXJzZSgpfWZ1bmN0aW9uIE0odCxpKXt2YXIgYT1uW3RdLG89bltpXSxzPWFbYS5sZW5ndGgtMV0sbD1hW2EubGVuZ3RoLTJdLGM9b1swXSx1PW9bMV07ZS5wb2ludHNDb2xsaW5lYXIobCxzLGMpJiYociYmci5jaGFpblJlbW92ZVRhaWwodCxzKSxhLnBvcCgpLHM9bCksZS5wb2ludHNDb2xsaW5lYXIocyxjLHUpJiYociYmci5jaGFpblJlbW92ZUhlYWQoaSxjKSxvLnNoaWZ0KCkpLHImJnIuY2hhaW5Kb2luKHQsaSksblt0XT1hLmNvbmNhdChvKSxuLnNwbGljZShpLDEpfX0pKSxpfX0se31dLDI2MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbaV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbaV0sYmVsb3c6Mj09PWVbaV19LG90aGVyRmlsbDpudWxsfSl9KSksciYmci5zZWxlY3RlZChuKSxufXZhciBpPXt1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwyLDAsMCwxLDAsMSwwLDAsMCwwLDBdLGUpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDAsMiwwLDIsMCwwLDEsMSwwLDIsMSwwXSxlKX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMiwwLDIsMCwxLDEsMCwwLDAsMSwyLDBdLGUpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwwLDAsMSwxLDAsMiwwLDIsMCwwLDAsMF0sZSl9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwwLDAsMSwxLDAsMCwyLDAsMSwyLDBdLGUpfX07ZS5leHBvcnRzPWl9LHt9XSwyNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3RyZWFtIikuVHJhbnNmb3JtLGk9dCgic3RyZWFtLXBhcnNlciIpO2Z1bmN0aW9uIGEoKXtuLmNhbGwodGhpcyx7cmVhZGFibGVPYmplY3RNb2RlOiEwfSl9ZnVuY3Rpb24gbyh0LGUscil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5tZXNzYWdlPXQsZSYmKHRoaXMuY29kZT1lKSxyJiYodGhpcy5zdGF0dXNDb2RlPXIpfWEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEsaShhLnByb3RvdHlwZSksci5QYXJzZXJTdHJlYW09YSxyLnNsaWNlRXE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLGk9MDtpPHIubGVuZ3RoOylpZih0W24rK10hPT1yW2krK10pcmV0dXJuITE7cmV0dXJuITB9LHIuc3RyMmFycj1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49MDtpZihlJiYiaGV4Ij09PWUpZm9yKDtuPHQubGVuZ3RoOylyLnB1c2gocGFyc2VJbnQodC5zbGljZShuLG4rMiksMTYpKSxuKz0yO2Vsc2UgZm9yKDtuPHQubGVuZ3RoO24rKylyLnB1c2goMjU1JnQuY2hhckNvZGVBdChuKSk7cmV0dXJuIHJ9LHIucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV18dFtlKzFdPDw4fSxyLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2UrMV18dFtlXTw8OH0sci5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNnwxNjc3NzIxNip0W2UrM119LHIucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZSszXXx0W2UrMl08PDh8dFtlKzFdPDwxNnwxNjc3NzIxNip0W2VdfSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksby5wcm90b3R5cGUuY29uc3RydWN0b3I9byxyLlByb2JlRXJyb3I9b30se3N0cmVhbToyODUsInN0cmVhbS1wYXJzZXIiOjMwMX1dLDI2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9bmV3IEVycm9yKHQpO3JldHVybiByLmNvZGU9ZSxyfWZ1bmN0aW9uIGkodCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHQpKX1jYXRjaChlKXtyZXR1cm4gdH19ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5pbnB1dD10LnN1YmFycmF5KGUsciksdGhpcy5zdGFydD1lO3ZhciBpPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0aGlzLmlucHV0LnN1YmFycmF5KDAsNCkpO2lmKCJJSSpcMCIhPT1pJiYiTU1cMCoiIT09aSl0aHJvdyBuKCJpbnZhbGlkIFRJRkYgc2lnbmF0dXJlIiwiRUJBRERBVEEiKTt0aGlzLmJpZ19lbmRpYW49Ik0iPT09aVswXX1hLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKHQpe3RoaXMuYWJvcnRlZD0hMTt2YXIgZT10aGlzLnJlYWRfdWludDMyKDQpO2Zvcih0aGlzLmlmZHNfdG9fcmVhZD1be2lkOjAsb2Zmc2V0OmV9XTt0aGlzLmlmZHNfdG9fcmVhZC5sZW5ndGg+MCYmIXRoaXMuYWJvcnRlZDspe3ZhciByPXRoaXMuaWZkc190b19yZWFkLnNoaWZ0KCk7ci5vZmZzZXQmJnRoaXMuc2Nhbl9pZmQoci5pZCxyLm9mZnNldCx0KX19LGEucHJvdG90eXBlLnJlYWRfdWludDE2PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQ7aWYodCsyPmUubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtyZXR1cm4gdGhpcy5iaWdfZW5kaWFuPzI1NiplW3RdK2VbdCsxXTplW3RdKzI1NiplW3QrMV19LGEucHJvdG90eXBlLnJlYWRfdWludDMyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQ7aWYodCs0PmUubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtyZXR1cm4gdGhpcy5iaWdfZW5kaWFuPzE2Nzc3MjE2KmVbdF0rNjU1MzYqZVt0KzFdKzI1NiplW3QrMl0rZVt0KzNdOmVbdF0rMjU2KmVbdCsxXSs2NTUzNiplW3QrMl0rMTY3NzcyMTYqZVt0KzNdfSxhLnByb3RvdHlwZS5pc19zdWJpZmRfbGluaz1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dCYmMzQ2NjU9PT1lfHwwPT09dCYmMzQ4NTM9PT1lfHwzNDY2NT09PXQmJjQwOTY1PT09ZX0sYS5wcm90b3R5cGUuZXhpZl9mb3JtYXRfbGVuZ3RoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOmNhc2UgNjpjYXNlIDc6cmV0dXJuIDE7Y2FzZSAzOmNhc2UgODpyZXR1cm4gMjtjYXNlIDQ6Y2FzZSA5OmNhc2UgMTE6cmV0dXJuIDQ7Y2FzZSA1OmNhc2UgMTA6Y2FzZSAxMjpyZXR1cm4gODtkZWZhdWx0OnJldHVybiAwfX0sYS5wcm90b3R5cGUuZXhpZl9mb3JtYXRfcmVhZD1mdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOnJldHVybiByPXRoaXMuaW5wdXRbZV07Y2FzZSA2OnJldHVybihyPXRoaXMuaW5wdXRbZV0pfDMzNTU0NDMwKigxMjgmcik7Y2FzZSAzOnJldHVybiByPXRoaXMucmVhZF91aW50MTYoZSk7Y2FzZSA4OnJldHVybihyPXRoaXMucmVhZF91aW50MTYoZSkpfDEzMTA3MCooMzI3Njgmcik7Y2FzZSA0OnJldHVybiByPXRoaXMucmVhZF91aW50MzIoZSk7Y2FzZSA5OnJldHVybiAwfChyPXRoaXMucmVhZF91aW50MzIoZSkpO2Nhc2UgNTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDc6ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGEucHJvdG90eXBlLnNjYW5faWZkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLnJlYWRfdWludDE2KGUpO2UrPTI7Zm9yKHZhciBvPTA7bzxhO28rKyl7dmFyIHM9dGhpcy5yZWFkX3VpbnQxNihlKSxsPXRoaXMucmVhZF91aW50MTYoZSsyKSxjPXRoaXMucmVhZF91aW50MzIoZSs0KSx1PXRoaXMuZXhpZl9mb3JtYXRfbGVuZ3RoKGwpLGY9Yyp1LGg9Zjw9ND9lKzg6dGhpcy5yZWFkX3VpbnQzMihlKzgpLHA9ITE7aWYoaCtmPnRoaXMuaW5wdXQubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtmb3IodmFyIGQ9W10sbT1oLGc9MDtnPGM7ZysrLG0rPXUpe3ZhciB2PXRoaXMuZXhpZl9mb3JtYXRfcmVhZChsLG0pO2lmKG51bGw9PT12KXtkPW51bGw7YnJlYWt9ZC5wdXNoKHYpfWlmKEFycmF5LmlzQXJyYXkoZCkmJjI9PT1sJiYoZD1pKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKSkpJiYiXDAiPT09ZFtkLmxlbmd0aC0xXSYmKGQ9ZC5zbGljZSgwLC0xKSksdGhpcy5pc19zdWJpZmRfbGluayh0LHMpJiZBcnJheS5pc0FycmF5KGQpJiZOdW1iZXIuaXNJbnRlZ2VyKGRbMF0pJiZkWzBdPjAmJih0aGlzLmlmZHNfdG9fcmVhZC5wdXNoKHtpZDpzLG9mZnNldDpkWzBdfSkscD0hMCksITE9PT1yKHtpc19iaWdfZW5kaWFuOnRoaXMuYmlnX2VuZGlhbixpZmQ6dCx0YWc6cyxmb3JtYXQ6bCxjb3VudDpjLGVudHJ5X29mZnNldDplK3RoaXMuc3RhcnQsZGF0YV9sZW5ndGg6ZixkYXRhX29mZnNldDpoK3RoaXMuc3RhcnQsdmFsdWU6ZCxpc19zdWJpZmRfbGluazpwfSkpcmV0dXJuIHZvaWQodGhpcy5hYm9ydGVkPSEwKTtlKz0xMn0wPT09dCYmdGhpcy5pZmRzX3RvX3JlYWQucHVzaCh7aWQ6MSxvZmZzZXQ6dGhpcy5yZWFkX3VpbnQzMihlKX0pfSxlLmV4cG9ydHMuRXhpZlBhcnNlcj1hLGUuZXhwb3J0cy5nZXRfb3JpZW50YXRpb249ZnVuY3Rpb24odCl7dmFyIGU9MDt0cnl7cmV0dXJuIG5ldyBhKHQsMCx0Lmxlbmd0aCkuZWFjaCgoZnVuY3Rpb24odCl7aWYoMD09PXQuaWZkJiYyNzQ9PT10LnRhZyYmQXJyYXkuaXNBcnJheSh0LnZhbHVlKSlyZXR1cm4gZT10LnZhbHVlWzBdLCExfSkpLGV9Y2F0Y2godCl7cmV0dXJuLTF9fX0se31dLDI2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbW1vbiIpLnJlYWRVSW50MTZCRSxpPXQoIi4vY29tbW9uIikucmVhZFVJbnQzMkJFO2Z1bmN0aW9uIGEodCxlKXtpZih0Lmxlbmd0aDw0K2UpcmV0dXJuIG51bGw7dmFyIHI9aSh0LGUpO3JldHVybiB0Lmxlbmd0aDxyK2V8fHI8OD9udWxsOntib3h0eXBlOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnNsaWNlKGUrNCxlKzgpKSxkYXRhOnQuc2xpY2UoZSs4LGUrciksZW5kOmUrcn19ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wOzspe3ZhciBuPWEodCxyKTtpZighbilicmVhaztzd2l0Y2gobi5ib3h0eXBlKXtjYXNlImlzcGUiOmUuc2l6ZXMucHVzaCh7d2lkdGg6aShuLmRhdGEsNCksaGVpZ2h0Omkobi5kYXRhLDgpfSk7YnJlYWs7Y2FzZSJpcm90IjplLnRyYW5zZm9ybXMucHVzaCh7dHlwZToiaXJvdCIsdmFsdWU6MyZuLmRhdGFbMF19KTticmVhaztjYXNlImltaXIiOmUudHJhbnNmb3Jtcy5wdXNoKHt0eXBlOiJpbWlyIix2YWx1ZToxJm4uZGF0YVswXX0pfXI9bi5lbmR9fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHI7aSsrKW49MjU2Km4rKHRbZStpXXx8MCk7cmV0dXJuIG59ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj10WzRdPj40JjE1LGk9MTUmdFs0XSxhPXRbNV0+PjQmMTUsbz1uKHQsNiksbD04LGM9MDtjPG87YysrKXt2YXIgdT1uKHQsbCksZj1uKHQsbCs9MiksaD1zKHQsbCs9MixhKSxwPW4odCxsKz1hKTtpZihsKz0yLDA9PT1mJiYxPT09cCl7dmFyIGQ9cyh0LGwsciksbT1zKHQsbCtyLGkpO2UuaXRlbV9sb2NbdV09e2xlbmd0aDptLG9mZnNldDpkK2h9fWwrPXAqKHIraSl9fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bih0LDQpLGk9NixvPTA7bzxyO28rKyl7dmFyIHM9YSh0LGkpO2lmKCFzKWJyZWFrO2lmKCJpbmZlIj09PXMuYm94dHlwZSl7Zm9yKHZhciBsPW4ocy5kYXRhLDQpLGM9IiIsdT04O3U8cy5kYXRhLmxlbmd0aCYmcy5kYXRhW3VdO3UrKyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMuZGF0YVt1XSk7ZS5pdGVtX2luZltjXT1sfWk9cy5lbmR9fWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9MDs7KXt2YXIgbj1hKHQscik7aWYoIW4pYnJlYWs7ImlwY28iPT09bi5ib3h0eXBlJiZvKG4uZGF0YSxlKSxyPW4uZW5kfX1lLmV4cG9ydHMudW5ib3g9YSxlLmV4cG9ydHMucmVhZFNpemVGcm9tTWV0YT1mdW5jdGlvbih0KXt2YXIgZT17c2l6ZXM6W10sdHJhbnNmb3JtczpbXSxpdGVtX2luZjp7fSxpdGVtX2xvYzp7fX07aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDs7KXt2YXIgbj1hKHQscik7aWYoIW4pYnJlYWs7ImlwcnAiPT09bi5ib3h0eXBlJiZ1KG4uZGF0YSxlKSwiaWxvYyI9PT1uLmJveHR5cGUmJmwobi5kYXRhLGUpLCJpaW5mIj09PW4uYm94dHlwZSYmYyhuLmRhdGEsZSkscj1uLmVuZH19KHQsZSksZS5zaXplcy5sZW5ndGgpe3ZhciByLG4saSxvPShyPWUuc2l6ZXMsbj1yLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC53aWR0aD5lLndpZHRofHx0LndpZHRoPT09ZS53aWR0aCYmdC5oZWlnaHQ+ZS5oZWlnaHQ/dDplfSkpLGk9ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaGVpZ2h0PmUuaGVpZ2h0fHx0LmhlaWdodD09PWUuaGVpZ2h0JiZ0LndpZHRoPmUud2lkdGg/dDplfSkpLG4ud2lkdGg+aS5oZWlnaHR8fG4ud2lkdGg9PT1pLmhlaWdodCYmbi5oZWlnaHQ+aS53aWR0aD9uOmkpLHM9MTtlLnRyYW5zZm9ybXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ezE6NiwyOjUsMzo4LDQ6Nyw1OjQsNjozLDc6Miw4OjF9LHI9ezE6NCwyOjMsMzoyLDQ6MSw1OjYsNjo1LDc6OCw4Ojd9O2lmKCJpbWlyIj09PXQudHlwZSYmKHM9MD09PXQudmFsdWU/cltzXTplW3M9ZVtzPXJbc11dXSksImlyb3QiPT09dC50eXBlKWZvcih2YXIgbj0wO248dC52YWx1ZTtuKyspcz1lW3NdfSkpO3ZhciBmPW51bGw7cmV0dXJuIGUuaXRlbV9pbmYuRXhpZiYmKGY9ZS5pdGVtX2xvY1tlLml0ZW1faW5mLkV4aWZdKSx7d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHQsb3JpZW50YXRpb246ZS50cmFuc2Zvcm1zLmxlbmd0aD9zOm51bGwsdmFyaWFudHM6ZS5zaXplcyxleGlmX2xvY2F0aW9uOmZ9fX0sZS5leHBvcnRzLmdldE1pbWVUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnNsaWNlKDAsNCkpLHI9e307cltlXT0hMDtmb3IodmFyIG49ODtuPHQubGVuZ3RoO24rPTQpcltTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZShuLG4rNCkpXT0hMDtpZihyLm1pZjF8fHIubXNmMXx8ci5taWFmKXJldHVybiJhdmlmIj09PWV8fCJhdmlzIj09PWV8fCJhdmlvIj09PWU/e3R5cGU6ImF2aWYiLG1pbWU6ImltYWdlL2F2aWYifToiaGVpYyI9PT1lfHwiaGVpeCI9PT1lP3t0eXBlOiJoZWljIixtaW1lOiJpbWFnZS9oZWljIn06ImhldmMiPT09ZXx8ImhldngiPT09ZT97dHlwZToiaGVpYyIsbWltZToiaW1hZ2UvaGVpYy1zZXF1ZW5jZSJ9OnIuYXZpZnx8ci5hdmlzP3t0eXBlOiJhdmlmIixtaW1lOiJpbWFnZS9hdmlmIn06ci5oZWljfHxyLmhlaXh8fHIuaGV2Y3x8ci5oZXZ4fHxyLmhlaXM/ci5tc2YxP3t0eXBlOiJoZWlmIixtaW1lOiJpbWFnZS9oZWlmLXNlcXVlbmNlIn06e3R5cGU6ImhlaWYiLG1pbWU6ImltYWdlL2hlaWYifTp7dHlwZToiYXZpZiIsbWltZToiaW1hZ2UvYXZpZiJ9fX0seyIuL2NvbW1vbiI6MjYyfV0sMjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkJFLG89dCgiLi4vbWlhZl91dGlscyIpLHM9dCgiLi4vZXhpZl91dGlscyIpLGw9bigiZnR5cCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihpKHQsNCxsKSl7dmFyIGU9by51bmJveCh0LDApO2lmKGUpe3ZhciByPW8uZ2V0TWltZVR5cGUoZS5kYXRhKTtpZihyKXtmb3IodmFyIG4sYz1lLmVuZDs7KXt2YXIgdT1vLnVuYm94KHQsYyk7aWYoIXUpYnJlYWs7aWYoYz11LmVuZCwibWRhdCI9PT11LmJveHR5cGUpcmV0dXJuO2lmKCJtZXRhIj09PXUuYm94dHlwZSl7bj11LmRhdGE7YnJlYWt9fWlmKG4pe3ZhciBmPW8ucmVhZFNpemVGcm9tTWV0YShuKTtpZihmKXt2YXIgaD17d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHQsdHlwZTpyLnR5cGUsbWltZTpyLm1pbWUsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9O2lmKGYudmFyaWFudHMubGVuZ3RoPjEmJihoLnZhcmlhbnRzPWYudmFyaWFudHMpLGYub3JpZW50YXRpb24mJihoLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24pLGYuZXhpZl9sb2NhdGlvbiYmZi5leGlmX2xvY2F0aW9uLm9mZnNldCtmLmV4aWZfbG9jYXRpb24ubGVuZ3RoPD10Lmxlbmd0aCl7dmFyIHA9YSh0LGYuZXhpZl9sb2NhdGlvbi5vZmZzZXQpLGQ9dC5zbGljZShmLmV4aWZfbG9jYXRpb24ub2Zmc2V0K3ArNCxmLmV4aWZfbG9jYXRpb24ub2Zmc2V0K2YuZXhpZl9sb2NhdGlvbi5sZW5ndGgpLG09cy5nZXRfb3JpZW50YXRpb24oZCk7bT4wJiYoaC5vcmllbnRhdGlvbj1tKX1yZXR1cm4gaH19fX19fX0seyIuLi9jb21tb24iOjI2MiwiLi4vZXhpZl91dGlscyI6MjYzLCIuLi9taWFmX3V0aWxzIjoyNjR9XSwyNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz1uKCJCTSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDI2KSYmaSh0LDAsbykpcmV0dXJue3dpZHRoOmEodCwxOCksaGVpZ2h0OmEodCwyMiksdHlwZToiYm1wIixtaW1lOiJpbWFnZS9ibXAiLHdVbml0czoicHgiLGhVbml0czoicHgifX19LHsiLi4vY29tbW9uIjoyNjJ9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz1uKCJHSUY4N2EiKSxzPW4oIkdJRjg5YSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDEwKSYmKGkodCwwLG8pfHxpKHQsMCxzKSkpcmV0dXJue3dpZHRoOmEodCw2KSxoZWlnaHQ6YSh0LDgpLHR5cGU6ImdpZiIsbWltZToiaW1hZ2UvZ2lmIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6MjYyfV0sMjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MTZMRTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0LDApLHI9bih0LDIpLGk9bih0LDQpO2lmKDA9PT1lJiYxPT09ciYmaSl7Zm9yKHZhciBhPVtdLG89e3dpZHRoOjAsaGVpZ2h0OjB9LHM9MDtzPGk7cysrKXt2YXIgbD10WzYrMTYqc118fDI1NixjPXRbNisxNipzKzFdfHwyNTYsdT17d2lkdGg6bCxoZWlnaHQ6Y307YS5wdXNoKHUpLChsPm8ud2lkdGh8fGM+by5oZWlnaHQpJiYobz11KX1yZXR1cm57d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHQsdmFyaWFudHM6YSx0eXBlOiJpY28iLG1pbWU6ImltYWdlL3gtaWNvbiIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX19LHsiLi4vY29tbW9uIjoyNjJ9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkJFLGk9dCgiLi4vY29tbW9uIikuc3RyMmFycixhPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsbz10KCIuLi9leGlmX3V0aWxzIikscz1pKCJFeGlmXDBcMCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDIpJiYyNTU9PT10WzBdJiYyMTY9PT10WzFdJiYyNTU9PT10WzJdKWZvcih2YXIgZT0yOzspe2Zvcig7Oyl7aWYodC5sZW5ndGgtZTwyKXJldHVybjtpZigyNTU9PT10W2UrK10pYnJlYWt9Zm9yKHZhciByLGksbD10W2UrK107MjU1PT09bDspbD10W2UrK107aWYoMjA4PD1sJiZsPD0yMTd8fDE9PT1sKXI9MDtlbHNle2lmKCEoMTkyPD1sJiZsPD0yNTQpKXJldHVybjtpZih0Lmxlbmd0aC1lPDIpcmV0dXJuO3I9bih0LGUpLTIsZSs9Mn1pZigyMTc9PT1sfHwyMTg9PT1sKXJldHVybjtpZigyMjU9PT1sJiZyPj0xMCYmYSh0LGUscykmJihpPW8uZ2V0X29yaWVudGF0aW9uKHQuc2xpY2UoZSs2LGUrcikpKSxyPj01JiYxOTI8PWwmJmw8PTIwNyYmMTk2IT09bCYmMjAwIT09bCYmMjA0IT09bCl7aWYodC5sZW5ndGgtZTxyKXJldHVybjt2YXIgYz17d2lkdGg6bih0LGUrMyksaGVpZ2h0Om4odCxlKzEpLHR5cGU6ImpwZyIsbWltZToiaW1hZ2UvanBlZyIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9O3JldHVybiBpPjAmJihjLm9yaWVudGF0aW9uPWkpLGN9ZSs9cn19fSx7Ii4uL2NvbW1vbiI6MjYyLCIuLi9leGlmX3V0aWxzIjoyNjN9XSwyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDMyQkUsbz1uKCJceDg5UE5HXHJcblx4MWFcbiIpLHM9bigiSUhEUiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDI0KSYmaSh0LDAsbykmJmkodCwxMixzKSlyZXR1cm57d2lkdGg6YSh0LDE2KSxoZWlnaHQ6YSh0LDIwKSx0eXBlOiJwbmciLG1pbWU6ImltYWdlL3BuZyIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX0seyIuLi9jb21tb24iOjI2Mn1dLDI3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21tb24iKS5zdHIyYXJyLGk9dCgiLi4vY29tbW9uIikuc2xpY2VFcSxhPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MzJCRSxvPW4oIjhCUFNcMFx4MDEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwyMikmJmkodCwwLG8pKXJldHVybnt3aWR0aDphKHQsMTgpLGhlaWdodDphKHQsMTQpLHR5cGU6InBzZCIsbWltZToiaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX0seyIuLi9jb21tb24iOjI2Mn1dLDI3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmaXNGaW5pdGUodCkmJnQ+MH12YXIgaT0vPFstXy46YS16QS1aMC05XVtePl0qPi8sYT0vXjwoWy1fLjphLXpBLVowLTldKzopP3N2Z1xzLyxvPS9bXi1dXGJ3aWR0aD0iKFteJV0rPykifFteLV1cYndpZHRoPScoW14lXSs/KScvLHM9L1xiaGVpZ2h0PSIoW14lXSs/KSJ8XGJoZWlnaHQ9JyhbXiVdKz8pJy8sbD0vXGJ2aWV3W2JCXW94PSIoLis/KSJ8XGJ2aWV3W2JCXW94PScoLis/KScvLGM9L2luJHxtbSR8Y20kfHB0JHxwYyR8cHgkfGVtJHxleCQvO2Z1bmN0aW9uIHUodCl7cmV0dXJuIGMudGVzdCh0KT90Lm1hdGNoKGMpWzBdOiJweCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKHQpe3ZhciBlLHI9MCxuPXQubGVuZ3RoO2ZvcigyMzk9PT10WzBdJiYxODc9PT10WzFdJiYxOTE9PT10WzJdJiYocj0zKTtyPG4mJigzMj09PShlPXRbcl0pfHw5PT09ZXx8MTM9PT1lfHwxMD09PWUpOylyKys7cmV0dXJuIHIhPT1uJiY2MD09PXRbcl19KHQpKXtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtyXSk7dmFyIGM9KGUubWF0Y2goaSl8fFsiIl0pWzBdO2lmKGEudGVzdChjKSl7dmFyIGY9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChvKSxyPXQubWF0Y2gocyksbj10Lm1hdGNoKGwpO3JldHVybnt3aWR0aDplJiYoZVsxXXx8ZVsyXSksaGVpZ2h0OnImJihyWzFdfHxyWzJdKSx2aWV3Ym94Om4mJihuWzFdfHxuWzJdKX19KGMpLGg9cGFyc2VGbG9hdChmLndpZHRoKSxwPXBhcnNlRmxvYXQoZi5oZWlnaHQpO2lmKGYud2lkdGgmJmYuaGVpZ2h0KXtpZighbihoKXx8IW4ocCkpcmV0dXJuO3JldHVybnt3aWR0aDpoLGhlaWdodDpwLHR5cGU6InN2ZyIsbWltZToiaW1hZ2Uvc3ZnK3htbCIsd1VuaXRzOnUoZi53aWR0aCksaFVuaXRzOnUoZi5oZWlnaHQpfX12YXIgZD0oZi52aWV3Ym94fHwiIikuc3BsaXQoIiAiKSxtPXt3aWR0aDpkWzJdLGhlaWdodDpkWzNdfSxnPXBhcnNlRmxvYXQobS53aWR0aCksdj1wYXJzZUZsb2F0KG0uaGVpZ2h0KTtpZihuKGcpJiZuKHYpJiZ1KG0ud2lkdGgpPT09dShtLmhlaWdodCkpe3ZhciB5PWcvdjtpZihmLndpZHRoKXtpZighbihoKSlyZXR1cm47cmV0dXJue3dpZHRoOmgsaGVpZ2h0OmgveSx0eXBlOiJzdmciLG1pbWU6ImltYWdlL3N2Zyt4bWwiLHdVbml0czp1KGYud2lkdGgpLGhVbml0czp1KGYud2lkdGgpfX1pZihmLmhlaWdodCl7aWYoIW4ocCkpcmV0dXJuO3JldHVybnt3aWR0aDpwKnksaGVpZ2h0OnAsdHlwZToic3ZnIixtaW1lOiJpbWFnZS9zdmcreG1sIix3VW5pdHM6dShmLmhlaWdodCksaFVuaXRzOnUoZi5oZWlnaHQpfX1yZXR1cm57d2lkdGg6ZyxoZWlnaHQ6dix0eXBlOiJzdmciLG1pbWU6ImltYWdlL3N2Zyt4bWwiLHdVbml0czp1KG0ud2lkdGgpLGhVbml0czp1KG0uaGVpZ2h0KX19fX19fSx7fV0sMjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkxFLG89dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkJFLHM9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkxFLGw9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkJFLGM9bigiSUkqXDAiKSx1PW4oIk1NXDAqIik7ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuIHI/byh0LGUpOmEodCxlKX1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gcj9sKHQsZSk6cyh0LGUpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPWYodCxlKzIscik7cmV0dXJuIDEhPT1oKHQsZSs0LHIpfHwzIT09biYmNCE9PW4/bnVsbDozPT09bj9mKHQsZSs4LHIpOmgodCxlKzgscil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8OCkmJihpKHQsMCxjKXx8aSh0LDAsdSkpKXt2YXIgZT03Nz09PXRbMF0scj1oKHQsNCxlKS04O2lmKCEocjwwKSl7dmFyIG49cis4O2lmKCEodC5sZW5ndGgtbjwyKSl7dmFyIGE9MTIqZih0LG4rMCxlKTtpZighKGE8PTB8fChuKz0yLHQubGVuZ3RoLW48YSkpKXt2YXIgbyxzLGwsZDtmb3Iobz0wO288YTtvKz0xMikyNTY9PT0oZD1mKHQsbitvLGUpKT9zPXAodCxuK28sZSk6MjU3PT09ZCYmKGw9cCh0LG4rbyxlKSk7cmV0dXJuIHMmJmw/e3dpZHRoOnMsaGVpZ2h0OmwsdHlwZToidGlmZiIsbWltZToiaW1hZ2UvdGlmZiIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9OnZvaWQgMH19fX19fSx7Ii4uL2NvbW1vbiI6MjYyfV0sMjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkxFLG89dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkxFLHM9dCgiLi4vZXhpZl91dGlscyIpLGw9bigiUklGRiIpLGM9bigiV0VCUCIpO2Z1bmN0aW9uIHUodCxlKXtpZigxNTc9PT10W2UrM10mJjE9PT10W2UrNF0mJjQyPT09dFtlKzVdKXJldHVybnt3aWR0aDoxNjM4MyZhKHQsZSs2KSxoZWlnaHQ6MTYzODMmYSh0LGUrOCksdHlwZToid2VicCIsbWltZToiaW1hZ2Uvd2VicCIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fWZ1bmN0aW9uIGYodCxlKXtpZig0Nz09PXRbZV0pe3ZhciByPW8odCxlKzEpO3JldHVybnt3aWR0aDoxKygxNjM4MyZyKSxoZWlnaHQ6MSsocj4+MTQmMTYzODMpLHR5cGU6IndlYnAiLG1pbWU6ImltYWdlL3dlYnAiLHdVbml0czoicHgiLGhVbml0czoicHgifX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybnt3aWR0aDoxKyh0W2UrNl08PDE2fHRbZSs1XTw8OHx0W2UrNF0pLGhlaWdodDoxKyh0W2UrOV08PGV8dFtlKzhdPDw4fHRbZSs3XSksdHlwZToid2VicCIsbWltZToiaW1hZ2Uvd2VicCIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDE2KSYmKGkodCwwLGwpfHxpKHQsOCxjKSkpe3ZhciBlPTEyLHI9bnVsbCxuPTAsYT1vKHQsNCkrODtpZighKGE+dC5sZW5ndGgpKXtmb3IoO2UrODxhOylpZigwIT09dFtlXSl7dmFyIHA9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc2xpY2UoZSxlKzQpKSxkPW8odCxlKzQpOyJWUDggIj09PXAmJmQ+PTEwP3I9cnx8dSh0LGUrOCk6IlZQOEwiPT09cCYmZD49OT9yPXJ8fGYodCxlKzgpOiJWUDhYIj09PXAmJmQ+PTEwP3I9cnx8aCh0LGUrOCk6IkVYSUYiPT09cCYmKG49cy5nZXRfb3JpZW50YXRpb24odC5zbGljZShlKzgsZSs4K2QpKSxlPTEvMCksZSs9OCtkfWVsc2UgZSsrO2lmKHIpcmV0dXJuIG4+MCYmKHIub3JpZW50YXRpb249bikscn19fX0seyIuLi9jb21tb24iOjI2MiwiLi4vZXhpZl91dGlscyI6MjYzfV0sMjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXZpZjp0KCIuL3BhcnNlX3N5bmMvYXZpZiIpLGJtcDp0KCIuL3BhcnNlX3N5bmMvYm1wIiksZ2lmOnQoIi4vcGFyc2Vfc3luYy9naWYiKSxpY286dCgiLi9wYXJzZV9zeW5jL2ljbyIpLGpwZWc6dCgiLi9wYXJzZV9zeW5jL2pwZWciKSxwbmc6dCgiLi9wYXJzZV9zeW5jL3BuZyIpLHBzZDp0KCIuL3BhcnNlX3N5bmMvcHNkIiksc3ZnOnQoIi4vcGFyc2Vfc3luYy9zdmciKSx0aWZmOnQoIi4vcGFyc2Vfc3luYy90aWZmIiksd2VicDp0KCIuL3BhcnNlX3N5bmMvd2VicCIpfX0seyIuL3BhcnNlX3N5bmMvYXZpZiI6MjY1LCIuL3BhcnNlX3N5bmMvYm1wIjoyNjYsIi4vcGFyc2Vfc3luYy9naWYiOjI2NywiLi9wYXJzZV9zeW5jL2ljbyI6MjY4LCIuL3BhcnNlX3N5bmMvanBlZyI6MjY5LCIuL3BhcnNlX3N5bmMvcG5nIjoyNzAsIi4vcGFyc2Vfc3luYy9wc2QiOjI3MSwiLi9wYXJzZV9zeW5jL3N2ZyI6MjcyLCIuL3BhcnNlX3N5bmMvdGlmZiI6MjczLCIuL3BhcnNlX3N5bmMvd2VicCI6Mjc0fV0sMjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3BhcnNlcnNfc3luYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKG4pLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9bltlW3JdXSh0KTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfSh0KX0sZS5leHBvcnRzLnBhcnNlcnM9bn0seyIuL2xpYi9wYXJzZXJzX3N5bmMiOjI3NX1dLDI3NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIHMoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGwodCl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQodCwwKTt0cnl7cmV0dXJuIG4odCwwKX1jYXRjaChlKXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLHQsMCl9Y2F0Y2goZSl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om99Y2F0Y2godCl7bj1vfXRyeXtpPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnN9Y2F0Y2godCl7aT1zfX0oKTt2YXIgYyx1PVtdLGY9ITEsaD0tMTtmdW5jdGlvbiBwKCl7ZiYmYyYmKGY9ITEsYy5sZW5ndGg/dT1jLmNvbmNhdCh1KTpoPS0xLHUubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighZil7dmFyIHQ9bChwKTtmPSEwO2Zvcih2YXIgZT11Lmxlbmd0aDtlOyl7Zm9yKGM9dSx1PVtdOysraDxlOyljJiZjW2hdLnJ1bigpO2g9LTEsZT11Lmxlbmd0aH1jPW51bGwsZj0hMSxmdW5jdGlvbih0KXtpZihpPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGk9PT1zfHwhaSkmJmNsZWFyVGltZW91dClyZXR1cm4gaT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtpKHQpfWNhdGNoKGUpe3RyeXtyZXR1cm4gaS5jYWxsKG51bGwsdCl9Y2F0Y2goZSl7cmV0dXJuIGkuY2FsbCh0aGlzLHQpfX19KHQpfX1mdW5jdGlvbiBtKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gZygpe31hLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dS5wdXNoKG5ldyBtKHQsZSkpLDEhPT11Lmxlbmd0aHx8Znx8bChkKX0sbS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sYS50aXRsZT0iYnJvd3NlciIsYS5icm93c2VyPSEwLGEuZW52PXt9LGEuYXJndj1bXSxhLnZlcnNpb249IiIsYS52ZXJzaW9ucz17fSxhLm9uPWcsYS5hZGRMaXN0ZW5lcj1nLGEub25jZT1nLGEub2ZmPWcsYS5yZW1vdmVMaXN0ZW5lcj1nLGEucmVtb3ZlQWxsTGlzdGVuZXJzPWcsYS5lbWl0PWcsYS5wcmVwZW5kTGlzdGVuZXI9ZyxhLnByZXBlbmRPbmNlTGlzdGVuZXI9ZyxhLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sYS5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sYS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGEuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sYS51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDI3ODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXtmb3IodmFyIG49dCgicGVyZm9ybWFuY2Utbm93IiksaT0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz9yOndpbmRvdyxhPVsibW96Iiwid2Via2l0Il0sbz0iQW5pbWF0aW9uRnJhbWUiLHM9aVsicmVxdWVzdCIrb10sbD1pWyJjYW5jZWwiK29dfHxpWyJjYW5jZWxSZXF1ZXN0IitvXSxjPTA7IXMmJmM8YS5sZW5ndGg7YysrKXM9aVthW2NdKyJSZXF1ZXN0IitvXSxsPWlbYVtjXSsiQ2FuY2VsIitvXXx8aVthW2NdKyJDYW5jZWxSZXF1ZXN0IitvXTtpZighc3x8IWwpe3ZhciB1PTAsZj0wLGg9W107cz1mdW5jdGlvbih0KXtpZigwPT09aC5sZW5ndGgpe3ZhciBlPW4oKSxyPU1hdGgubWF4KDAsMWUzLzYwLShlLXUpKTt1PXIrZSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciB0PWguc2xpY2UoMCk7aC5sZW5ndGg9MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighdFtlXS5jYW5jZWxsZWQpdHJ5e3RbZV0uY2FsbGJhY2sodSl9Y2F0Y2godCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyB0fSksMCl9fSksTWF0aC5yb3VuZChyKSl9cmV0dXJuIGgucHVzaCh7aGFuZGxlOisrZixjYWxsYmFjazp0LGNhbmNlbGxlZDohMX0pLGZ9LGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxoLmxlbmd0aDtlKyspaFtlXS5oYW5kbGU9PT10JiYoaFtlXS5jYW5jZWxsZWQ9ITApfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbChpLHQpfSxlLmV4cG9ydHMuY2FuY2VsPWZ1bmN0aW9uKCl7bC5hcHBseShpLGFyZ3VtZW50cyl9LGUuZXhwb3J0cy5wb2x5ZmlsbD1mdW5jdGlvbih0KXt0fHwodD1pKSx0LnJlcXVlc3RBbmltYXRpb25GcmFtZT1zLHQuY2FuY2VsQW5pbWF0aW9uRnJhbWU9bH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7InBlcmZvcm1hbmNlLW5vdyI6MjUyfV0sMjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpLGk9dCgiY29sb3Itbm9ybWFsaXplIiksYT10KCJ1cGRhdGUtZGlmZiIpLG89dCgicGljay1ieS1hbGlhcyIpLHM9dCgib2JqZWN0LWFzc2lnbiIpLGw9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGM9dCgidG8tZmxvYXQzMiIpLHU9Yy5mbG9hdDMyLGY9Yy5mcmFjdDMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOmU9dDtlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO2lmKCEodD1lLnJlZ2wpLmhhc0V4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXRocm93IEVycm9yKCJyZWdsLWVycm9yMmQ6IGBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzYCBleHRlbnNpb24gc2hvdWxkIGJlIGVuYWJsZWQiKTt2YXIgcixjLHAsZCxtLGcsdj10Ll9nbCx5PXtjb2xvcjoiYmxhY2siLGNhcFNpemU6NSxsaW5lV2lkdGg6MSxvcGFjaXR5OjEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLG9mZnNldDowLGNvdW50OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLGVycm9yczpbXX0seD1bXTtyZXR1cm4gZD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksYz10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSkscD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksbT10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksZz10LmJ1ZmZlcih7dXNhZ2U6InN0YXRpYyIsdHlwZToiZmxvYXQiLGRhdGE6aH0pLFQoZSkscj10KHt2ZXJ0OiJcblx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblx0XHRhdHRyaWJ1dGUgdmVjNCBlcnJvcjtcblx0XHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMyIGRpcmVjdGlvbiwgbGluZU9mZnNldCwgY2FwT2Zmc2V0O1xuXG5cdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdHVuaWZvcm0gZmxvYXQgbGluZVdpZHRoLCBjYXBTaXplO1xuXHRcdHVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cblx0XHRcdHZlYzIgcGl4ZWxPZmZzZXQgPSBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0ICsgKGNhcFNpemUgKyBsaW5lV2lkdGgpICogY2FwT2Zmc2V0O1xuXG5cdFx0XHR2ZWMyIGR4eSA9IC1zdGVwKC41LCBkaXJlY3Rpb24ueHkpICogZXJyb3IueHogKyBzdGVwKGRpcmVjdGlvbi54eSwgdmVjMigtLjUpKSAqIGVycm9yLnl3O1xuXG5cdFx0XHR2ZWMyIHBvc2l0aW9uID0gcG9zaXRpb24gKyBkeHk7XG5cblx0XHRcdHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG5cdFx0XHRwb3MgKz0gcGl4ZWxPZmZzZXQgLyB2aWV3cG9ydC56dztcblxuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xuXHRcdH1cblx0XHQiLGZyYWc6IlxuXHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdFx0XHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHRcdH1cblx0XHQiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoInJhbmdlIiksbGluZVdpZHRoOnQucHJvcCgibGluZVdpZHRoIiksY2FwU2l6ZTp0LnByb3AoImNhcFNpemUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e2NvbG9yOntidWZmZXI6ZCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gNCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbjp7YnVmZmVyOmMsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnAsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZXJyb3I6e2J1ZmZlcjptLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiAxNiplLm9mZnNldH0sZGl2aXNvcjoxfSxkaXJlY3Rpb246e2J1ZmZlcjpnLHN0cmlkZToyNCxvZmZzZXQ6MH0sbGluZU9mZnNldDp7YnVmZmVyOmcsc3RyaWRlOjI0LG9mZnNldDo4fSxjYXBPZmZzZXQ6e2J1ZmZlcjpnLHN0cmlkZToyNCxvZmZzZXQ6MTZ9fSxwcmltaXRpdmU6InRyaWFuZ2xlcyIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOiExLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6aC5sZW5ndGh9KSxzKGIse3VwZGF0ZTpULGRyYXc6XyxkZXN0cm95OmsscmVnbDp0LGdsOnYsY2FudmFzOnYuY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/VCh0KTpudWxsPT09dCYmaygpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3QmJihlJiYoZVtyXT90LmRyYXc9ITA6dC5kcmF3PSExKSx0LmRyYXc/dyhyKTp0LmRyYXc9ITApfSkpfWZ1bmN0aW9uIHcodCl7Im51bWJlciI9PXR5cGVvZiB0JiYodD14W3RdKSxudWxsIT10JiZ0JiZ0LmNvdW50JiZ0LmNvbG9yJiZ0Lm9wYWNpdHkmJnQucG9zaXRpb25zJiZ0LnBvc2l0aW9ucy5sZW5ndGg+MSYmKHQuc2NhbGVSYXRpbz1bdC5zY2FsZVswXSp0LnZpZXdwb3J0LndpZHRoLHQuc2NhbGVbMV0qdC52aWV3cG9ydC5oZWlnaHRdLHIodCksdC5hZnRlciYmdC5hZnRlcih0KSl9ZnVuY3Rpb24gVCh0KXtpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgZT0wLHI9MDtpZihiLmdyb3Vwcz14PXQubWFwKChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OiJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1vKHQse2NvbG9yOiJjb2xvciBjb2xvcnMgZmlsbCIsY2FwU2l6ZToiY2FwU2l6ZSBjYXAgY2Fwc2l6ZSBjYXAtc2l6ZSIsbGluZVdpZHRoOiJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzcyIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94IixlcnJvcnM6ImVycm9ycyBlcnJvciIscG9zaXRpb25zOiJwb3NpdGlvbnMgcG9zaXRpb24gZGF0YSBwb2ludHMifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCwiZmxvYXQ2NCIpLHIuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxyLmJvdW5kcz1uKHQsMiksci5vZmZzZXQ9ZSxlKz1yLmNvdW50LHR9fSx7Y29sb3I6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvdW50O2lmKHR8fCh0PSJ0cmFuc3BhcmVudCIpLCFBcnJheS5pc0FycmF5KHQpfHwibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKCJOb3QgZW5vdWdoIGNvbG9ycyIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSg0KnIpLHM9MDtzPHI7cysrKXt2YXIgbD1pKHRbc10sInVpbnQ4Iik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9ZihlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWYoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6di5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnYuZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pKSxlfHxyKXt2YXIgaD14LnJlZHVjZSgoZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KyhlP2UuY291bnQ6MCl9KSwwKSxnPW5ldyBGbG9hdDY0QXJyYXkoMipoKSxfPW5ldyBVaW50OEFycmF5KDQqaCksdz1uZXcgRmxvYXQzMkFycmF5KDQqaCk7eC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxpPXQub2Zmc2V0LGE9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChhLDQqaSksdy5zZXQobyw0KmkpLGcuc2V0KHIsMippKSl9fSkpO3ZhciBUPXUoZyk7YyhUKTt2YXIgaz1mKGcsVCk7cChrKSxkKF8pLG0odyl9fX1mdW5jdGlvbiBrKCl7Yy5kZXN0cm95KCkscC5kZXN0cm95KCksZC5kZXN0cm95KCksbS5kZXN0cm95KCksZy5kZXN0cm95KCl9fTt2YXIgaD1bWzEsMCwwLDEsMCwwXSxbMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsMSwwLDBdLFsxLDAsMCwxLDAsMF0sWzEsMCwtMSwwLDAsMV0sWzEsMCwtMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsMV0sWzEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWzAsMSwxLDAsMCwwXSxbMCwxLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLDEsMSwwLDAsMF0sWzAsLTEsMSwwLDAsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLC0xLC0xLDBdLFswLDEsMCwxLC0xLDBdLFswLDEsMCwxLDEsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsLTEsLTEsMF0sWzAsLTEsMCwxLC0xLDBdLFswLC0xLDAsMSwxLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLDEsLTEsMF1dfSx7ImFycmF5LWJvdW5kcyI6NzEsImNvbG9yLW5vcm1hbGl6ZSI6ODksImZsYXR0ZW4tdmVydGV4LWRhdGEiOjE5MSwib2JqZWN0LWFzc2lnbiI6MjQ3LCJwaWNrLWJ5LWFsaWFzIjoyNTMsInRvLWZsb2F0MzIiOjMxMywidXBkYXRlLWRpZmYiOjMyOX1dLDI4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1ub3JtYWxpemUiKSxpPXQoImFycmF5LWJvdW5kcyIpLGE9dCgib2JqZWN0LWFzc2lnbiIpLG89dCgiZ2xzbGlmeSIpLHM9dCgicGljay1ieS1hbGlhcyIpLGw9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGM9dCgiZWFyY3V0IiksdT10KCJhcnJheS1ub3JtYWxpemUiKSxmPXQoInRvLWZsb2F0MzIiKSxoPWYuZmxvYXQzMixwPWYuZnJhY3QzMixkPXQoImVzNi13ZWFrLW1hcCIpLG09dCgicGFyc2UtcmVjdCIpLGc9dCgiYXJyYXktZmluZC1pbmRleCIpO2Z1bmN0aW9uIHYodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCxlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQsZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKSwhKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dGhpcy5nbD10Ll9nbCx0aGlzLnJlZ2w9dCx0aGlzLnBhc3Nlcz1bXSx0aGlzLnNoYWRlcnM9di5zaGFkZXJzLmhhcyh0KT92LnNoYWRlcnMuZ2V0KHQpOnYuc2hhZGVycy5zZXQodCx2LmNyZWF0ZVNoYWRlcnModCkpLmdldCh0KSx0aGlzLnVwZGF0ZShlKX1lLmV4cG9ydHM9dix2LmRhc2hNdWx0PTIsdi5tYXhQYXR0ZXJuTGVuZ3RoPTI1Nix2LnByZWNpc2lvblRocmVzaG9sZD0zZTYsdi5tYXhQb2ludHM9MWU0LHYubWF4TGluZXM9MjA0OCx2LnNoYWRlcnM9bmV3IGQsdi5jcmVhdGVTaGFkZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOlswLDEsMCwwLDEsMSwxLDBdfSksbj17cHJpbWl0aXZlOiJ0cmlhbmdsZSBzdHJpcCIsaW5zdGFuY2VzOnQucHJvcCgiY291bnQiKSxjb3VudDo0LG9mZnNldDowLHVuaWZvcm1zOnttaXRlck1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4icm91bmQiPT09ZS5qb2luPzI6MX0sbWl0ZXJMaW1pdDp0LnByb3AoIm1pdGVyTGltaXQiKSxzY2FsZTp0LnByb3AoInNjYWxlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdGhpY2tuZXNzOnQucHJvcCgidGhpY2tuZXNzIiksZGFzaFRleHR1cmU6dC5wcm9wKCJkYXNoVGV4dHVyZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksZGFzaExlbmd0aDp0LnByb3AoImRhc2hMZW5ndGgiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX0sZGVwdGg6dC5wcm9wKCJkZXB0aCIpfSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwwXSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxkZXB0aDp7ZW5hYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIWUub3ZlcmxheX19LHN0ZW5jaWw6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKX0saT10KGEoe3ZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBhQ29vcmRGcmFjdCwgYkNvb3JkRnJhY3Q7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZlYzIgcHJvamVjdCh2ZWMyIHBvc2l0aW9uLCB2ZWMyIHBvc2l0aW9uRnJhY3QsIHZlYzIgc2NhbGUsIHZlYzIgc2NhbGVGcmFjdCwgdmVjMiB0cmFuc2xhdGUsIHZlYzIgdHJhbnNsYXRlRnJhY3QpIHtcblx0Ly8gdGhlIG9yZGVyIGlzIGltcG9ydGFudFxuXHRyZXR1cm4gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlICsgdHJhbnNsYXRlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uICogc2NhbGVGcmFjdFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xuXHRmbG9hdCBsaW5lT2Zmc2V0ID0gbGluZVRvcCAqIDIuIC0gMS47XG5cblx0dmVjMiBkaWZmID0gKGJDb29yZCArIGJDb29yZEZyYWN0IC0gYUNvb3JkIC0gYUNvb3JkRnJhY3QpO1xuXHR0YW5nZW50ID0gbm9ybWFsaXplKGRpZmYgKiBzY2FsZSAqIHZpZXdwb3J0Lnp3KTtcblx0dmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHByb2plY3QoYUNvb3JkLCBhQ29vcmRGcmFjdCwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QpICogbGluZVN0YXJ0XG5cdFx0KyBwcm9qZWN0KGJDb29yZCwgYkNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVFbmRcblxuXHRcdCsgdGhpY2tuZXNzICogbm9ybWFsICogLjUgKiBsaW5lT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XG5cblx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xufVxuIl0pLGZyYWc6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gZmxvYXQgZGFzaExlbmd0aCwgcGl4ZWxSYXRpbywgdGhpY2tuZXNzLCBvcGFjaXR5LCBpZDtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLjtcblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoTGVuZ3RoKSAqIC41ICsgLjI1O1xuXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKHQsIC41KSkucjtcblxuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XG59XG4iXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxhQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxjb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9fX0sbikpO3RyeXtlPXQoYSh7Y3VsbDp7ZW5hYmxlOiEwLGZhY2U6ImJhY2sifSx2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgbmV4dENvb3JkLCBwcmV2Q29vcmQ7XG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3IsIGJDb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHRyYW5zbGF0ZTtcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzLCBwaXhlbFJhdGlvLCBpZCwgZGVwdGg7XG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG51bmlmb3JtIGZsb2F0IG1pdGVyTGltaXQsIG1pdGVyTW9kZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xuXG5jb25zdCBmbG9hdCBSRVZFUlNFX1RIUkVTSE9MRCA9IC0uODc1O1xuY29uc3QgZmxvYXQgTUlOX0RJRkYgPSAxZS02O1xuXG4vLyBUT0RPOiBwb3NzaWJsZSBvcHRpbWl6YXRpb25zOiBhdm9pZCBvdmVyY2FsY3VsYXRpbmcgYWxsIGZvciB2ZXJ0aWNlcyBhbmQgY2FsYyBqdXN0IG9uZSBpbnN0ZWFkXG4vLyBUT0RPOiBwcmVjYWxjdWxhdGUgZG90IHByb2R1Y3RzLCBub3JtYWxpemUgdGhpbmdzIGJlZm9yZWhlYWQgZXRjLlxuLy8gVE9ETzogcmVmYWN0b3IgdG8gcmVjdGFuZ3VsYXIgYWxnb3JpdGhtXG5cbmZsb2F0IGRpc3RUb0xpbmUodmVjMiBwLCB2ZWMyIGEsIHZlYzIgYikge1xuXHR2ZWMyIGRpZmYgPSBiIC0gYTtcblx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XG5cdHJldHVybiBkb3QocCAtIGEsIHBlcnApO1xufVxuXG5ib29sIGlzTmFOKCBmbG9hdCB2YWwgKXtcbiAgcmV0dXJuICggdmFsIDwgMC4wIHx8IDAuMCA8IHZhbCB8fCB2YWwgPT0gMC4wICkgPyBmYWxzZSA6IHRydWU7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0dmVjMiBhQ29vcmQgPSBhQ29vcmQsIGJDb29yZCA9IGJDb29yZCwgcHJldkNvb3JkID0gcHJldkNvb3JkLCBuZXh0Q29vcmQgPSBuZXh0Q29vcmQ7XG5cbiAgdmVjMiBhZGp1c3RlZFNjYWxlO1xuICBhZGp1c3RlZFNjYWxlLnggPSAoYWJzKHNjYWxlLngpIDwgTUlOX0RJRkYpID8gTUlOX0RJRkYgOiBzY2FsZS54O1xuICBhZGp1c3RlZFNjYWxlLnkgPSAoYWJzKHNjYWxlLnkpIDwgTUlOX0RJRkYpID8gTUlOX0RJRkYgOiBzY2FsZS55O1xuXG4gIHZlYzIgc2NhbGVSYXRpbyA9IGFkanVzdGVkU2NhbGUgKiB2aWV3cG9ydC56dztcblx0dmVjMiBub3JtYWxXaWR0aCA9IHRoaWNrbmVzcyAvIHNjYWxlUmF0aW87XG5cblx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xuXHRmbG9hdCBsaW5lQm90ID0gMS4gLSBsaW5lVG9wO1xuXG5cdGZyYWdDb2xvciA9IChsaW5lU3RhcnQgKiBhQ29sb3IgKyBsaW5lRW5kICogYkNvbG9yKSAvIDI1NS47XG5cblx0aWYgKGlzTmFOKGFDb29yZC54KSB8fCBpc05hTihhQ29vcmQueSkgfHwgaXNOYU4oYkNvb3JkLngpIHx8IGlzTmFOKGJDb29yZC55KSkgcmV0dXJuO1xuXG5cdGlmIChhQ29vcmQgPT0gcHJldkNvb3JkKSBwcmV2Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblx0aWYgKGJDb29yZCA9PSBuZXh0Q29vcmQpIG5leHRDb29yZCA9IGJDb29yZCAtIG5vcm1hbGl6ZShiQ29vcmQgLSBhQ29vcmQpO1xuXG5cdHZlYzIgcHJldkRpZmYgPSBhQ29vcmQgLSBwcmV2Q29vcmQ7XG5cdHZlYzIgY3VyckRpZmYgPSBiQ29vcmQgLSBhQ29vcmQ7XG5cdHZlYzIgbmV4dERpZmYgPSBuZXh0Q29vcmQgLSBiQ29vcmQ7XG5cblx0dmVjMiBwcmV2VGFuZ2VudCA9IG5vcm1hbGl6ZShwcmV2RGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIGN1cnJUYW5nZW50ID0gbm9ybWFsaXplKGN1cnJEaWZmICogc2NhbGVSYXRpbyk7XG5cdHZlYzIgbmV4dFRhbmdlbnQgPSBub3JtYWxpemUobmV4dERpZmYgKiBzY2FsZVJhdGlvKTtcblxuXHR2ZWMyIHByZXZOb3JtYWwgPSB2ZWMyKC1wcmV2VGFuZ2VudC55LCBwcmV2VGFuZ2VudC54KTtcblx0dmVjMiBjdXJyTm9ybWFsID0gdmVjMigtY3VyclRhbmdlbnQueSwgY3VyclRhbmdlbnQueCk7XG5cdHZlYzIgbmV4dE5vcm1hbCA9IHZlYzIoLW5leHRUYW5nZW50LnksIG5leHRUYW5nZW50LngpO1xuXG5cdHZlYzIgc3RhcnRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKHByZXZUYW5nZW50IC0gY3VyclRhbmdlbnQpO1xuXHR2ZWMyIGVuZEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUoY3VyclRhbmdlbnQgLSBuZXh0VGFuZ2VudCk7XG5cblx0Ly8gY29sbGFwc2VkL3VuaWRpcmVjdGlvbmFsIHNlZ21lbnQgY2FzZXNcblx0Ly8gRklYTUU6IHRoZXJlIHNob3VsZCBiZSBtb3JlIGVsZWdhbnQgc29sdXRpb25cblx0dmVjMiBwcmV2VGFuRGlmZiA9IGFicyhwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBuZXh0VGFuRGlmZiA9IGFicyhuZXh0VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0aWYgKG1heChwcmV2VGFuRGlmZi54LCBwcmV2VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0c3RhcnRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcblx0fVxuXHRpZiAobWF4KG5leHRUYW5EaWZmLngsIG5leHRUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcblx0fVxuXHRpZiAoYUNvb3JkID09IGJDb29yZCkge1xuXHRcdGVuZEpvaW5EaXJlY3Rpb24gPSBzdGFydEpvaW5EaXJlY3Rpb247XG5cdFx0Y3Vyck5vcm1hbCA9IHByZXZOb3JtYWw7XG5cdFx0Y3VyclRhbmdlbnQgPSBwcmV2VGFuZ2VudDtcblx0fVxuXG5cdHRhbmdlbnQgPSBjdXJyVGFuZ2VudDtcblxuXHQvL2NhbGN1bGF0ZSBqb2luIHNoaWZ0cyByZWxhdGl2ZSB0byBub3JtYWxzXG5cdGZsb2F0IHN0YXJ0Sm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIHN0YXJ0Sm9pbkRpcmVjdGlvbik7XG5cdGZsb2F0IGVuZEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBlbmRKb2luRGlyZWN0aW9uKTtcblxuXHRmbG9hdCBzdGFydE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBzdGFydEpvaW5TaGlmdCk7XG5cdGZsb2F0IGVuZE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBlbmRKb2luU2hpZnQpO1xuXG5cdHZlYzIgc3RhcnRKb2luID0gc3RhcnRKb2luRGlyZWN0aW9uICogc3RhcnRNaXRlclJhdGlvO1xuXHR2ZWMyIGVuZEpvaW4gPSBlbmRKb2luRGlyZWN0aW9uICogZW5kTWl0ZXJSYXRpbztcblxuXHR2ZWMyIHN0YXJ0VG9wSm9pbiwgc3RhcnRCb3RKb2luLCBlbmRUb3BKb2luLCBlbmRCb3RKb2luO1xuXHRzdGFydFRvcEpvaW4gPSBzaWduKHN0YXJ0Sm9pblNoaWZ0KSAqIHN0YXJ0Sm9pbiAqIC41O1xuXHRzdGFydEJvdEpvaW4gPSAtc3RhcnRUb3BKb2luO1xuXG5cdGVuZFRvcEpvaW4gPSBzaWduKGVuZEpvaW5TaGlmdCkgKiBlbmRKb2luICogLjU7XG5cdGVuZEJvdEpvaW4gPSAtZW5kVG9wSm9pbjtcblxuXHR2ZWMyIGFUb3BDb29yZCA9IGFDb29yZCArIG5vcm1hbFdpZHRoICogc3RhcnRUb3BKb2luO1xuXHR2ZWMyIGJUb3BDb29yZCA9IGJDb29yZCArIG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0dmVjMiBhQm90Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0dmVjMiBiQm90Q29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW47XG5cblx0Ly9taXRlciBhbnRpLWNsaXBwaW5nXG5cdGZsb2F0IGJhQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGJDb29yZCwgYUNvb3JkLCBhQm90Q29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1zdGFydEJvdEpvaW4ueSwgc3RhcnRCb3RKb2luLngpKSk7XG5cdGZsb2F0IGFiQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGFDb29yZCwgYkNvb3JkLCBiVG9wQ29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLWVuZEJvdEpvaW4ueSwgZW5kQm90Sm9pbi54KSkpO1xuXG5cdC8vcHJldmVudCBjbG9zZSB0byByZXZlcnNlIGRpcmVjdGlvbiBzd2l0Y2hcblx0Ym9vbCBwcmV2UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIHByZXZOb3JtYWwpKSAqIG1pbihsZW5ndGgocHJldkRpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcblx0Ym9vbCBuZXh0UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgbmV4dFRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIG5leHROb3JtYWwpKSAqIG1pbihsZW5ndGgobmV4dERpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcblxuXHRpZiAocHJldlJldmVyc2UpIHtcblx0XHQvL21ha2Ugam9pbiByZWN0YW5ndWxhclxuXHRcdHZlYzIgbWl0ZXJTaGlmdCA9IG5vcm1hbFdpZHRoICogc3RhcnRKb2luRGlyZWN0aW9uICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdGZsb2F0IG5vcm1hbEFkanVzdCA9IDEuIC0gbWluKG1pdGVyTGltaXQgLyBzdGFydE1pdGVyUmF0aW8sIDEuKTtcblx0XHRhQm90Q29vcmQgPSBhQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YVRvcENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFuZXh0UmV2ZXJzZSAmJiBiYUNsaXBwaW5nID4gMC4gJiYgYmFDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pKSB7XG5cdFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcblx0XHRiVG9wQ29vcmQgLT0gbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xuXHRcdGJUb3BDb29yZCArPSBub3JtYWxpemUoZW5kVG9wSm9pbiAqIG5vcm1hbFdpZHRoKSAqIGJhQ2xpcHBpbmc7XG5cdH1cblxuXHRpZiAobmV4dFJldmVyc2UpIHtcblx0XHQvL21ha2Ugam9pbiByZWN0YW5ndWxhclxuXHRcdHZlYzIgbWl0ZXJTaGlmdCA9IG5vcm1hbFdpZHRoICogZW5kSm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gZW5kTWl0ZXJSYXRpbywgMS4pO1xuXHRcdGJCb3RDb29yZCA9IGJDb29yZCArIG1pdGVyU2hpZnQgLSBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0XHRiVG9wQ29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0ICsgbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdH1cblx0ZWxzZSBpZiAoIXByZXZSZXZlcnNlICYmIGFiQ2xpcHBpbmcgPiAwLiAmJiBhYkNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YUJvdENvb3JkIC09IG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luO1xuXHRcdGFCb3RDb29yZCArPSBub3JtYWxpemUoc3RhcnRCb3RKb2luICogbm9ybWFsV2lkdGgpICogYWJDbGlwcGluZztcblx0fVxuXG5cdHZlYzIgYVRvcFBvc2l0aW9uID0gKGFUb3BDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXHR2ZWMyIGFCb3RQb3NpdGlvbiA9IChhQm90Q29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblxuXHR2ZWMyIGJUb3BQb3NpdGlvbiA9IChiVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBiQm90UG9zaXRpb24gPSAoYkJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0Ly9wb3NpdGlvbiBpcyBub3JtYWxpemVkIDAuLjEgY29vcmQgb24gdGhlIHNjcmVlblxuXHR2ZWMyIHBvc2l0aW9uID0gKGFUb3BQb3NpdGlvbiAqIGxpbmVUb3AgKyBhQm90UG9zaXRpb24gKiBsaW5lQm90KSAqIGxpbmVTdGFydCArIChiVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYkJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lRW5kO1xuXG5cdHN0YXJ0Q29vcmQgPSBhQ29vcmQgKiBzY2FsZVJhdGlvICsgdHJhbnNsYXRlICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblx0ZW5kQ29vcmQgPSBiQ29vcmQgKiBzY2FsZVJhdGlvICsgdHJhbnNsYXRlICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XG5cblx0ZW5hYmxlU3RhcnRNaXRlciA9IHN0ZXAoZG90KGN1cnJUYW5nZW50LCBwcmV2VGFuZ2VudCksIC41KTtcblx0ZW5hYmxlRW5kTWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgbmV4dFRhbmdlbnQpLCAuNSk7XG5cblx0Ly9iZXZlbCBtaXRlciBjdXRvZmZzXG5cdGlmIChtaXRlck1vZGUgPT0gMS4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBzdGFydE1pdGVyV2lkdGggPSB2ZWMyKHN0YXJ0Sm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xuXHRcdFx0c3RhcnRDdXRvZmYuencgKz0gdmVjMigtc3RhcnRKb2luRGlyZWN0aW9uLnksIHN0YXJ0Sm9pbkRpcmVjdGlvbi54KSAvIHNjYWxlUmF0aW87XG5cdFx0XHRzdGFydEN1dG9mZiA9IHN0YXJ0Q3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xuXHRcdFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHN0YXJ0TWl0ZXJXaWR0aC54eXh5O1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRcdGVuZEN1dG9mZiA9IHZlYzQoYkNvb3JkLCBiQ29vcmQpO1xuXHRcdFx0ZW5kQ3V0b2ZmLnp3ICs9IHZlYzIoLWVuZEpvaW5EaXJlY3Rpb24ueSwgZW5kSm9pbkRpcmVjdGlvbi54KSAgLyBzY2FsZVJhdGlvO1xuXHRcdFx0ZW5kQ3V0b2ZmID0gZW5kQ3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRlbmRDdXRvZmYgKz0gZW5kTWl0ZXJXaWR0aC54eXh5O1xuXHRcdH1cblx0fVxuXG5cdC8vcm91bmQgbWl0ZXIgY3V0b2Zmc1xuXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBzdGFydE1pdGVyV2lkdGggPSB2ZWMyKHN0YXJ0Sm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KHN0YXJ0Sm9pbkRpcmVjdGlvbiwgY3Vyck5vcm1hbCkpICogLjU7XG5cdFx0XHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xuXHRcdFx0c3RhcnRDdXRvZmYuencgKz0gdmVjMigtc3RhcnRKb2luRGlyZWN0aW9uLnksIHN0YXJ0Sm9pbkRpcmVjdGlvbi54KSAvIHNjYWxlUmF0aW87XG5cdFx0XHRzdGFydEN1dG9mZiA9IHN0YXJ0Q3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xuXHRcdFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHN0YXJ0TWl0ZXJXaWR0aC54eXh5O1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIGFicyhkb3QoZW5kSm9pbkRpcmVjdGlvbiwgY3Vyck5vcm1hbCkpICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIGZsb2F0IGRhc2hMZW5ndGgsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQsIG1pdGVyTW9kZTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiBzdGFydENvb3JkLCBlbmRDb29yZDtcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XG5cbmZsb2F0IGRpc3RUb0xpbmUodmVjMiBwLCB2ZWMyIGEsIHZlYzIgYikge1xuXHR2ZWMyIGRpZmYgPSBiIC0gYTtcblx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XG5cdHJldHVybiBkb3QocCAtIGEsIHBlcnApO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGFscGhhID0gMS4sIGRpc3RUb1N0YXJ0LCBkaXN0VG9FbmQ7XG5cdGZsb2F0IGN1dG9mZiA9IHRoaWNrbmVzcyAqIC41O1xuXG5cdC8vYmV2ZWwgbWl0ZXJcblx0aWYgKG1pdGVyTW9kZSA9PSAxLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb1N0YXJ0IDwgLTEuKSB7XG5cdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvU3RhcnQgKyAxLiwgMC4pLCAxLik7XG5cdFx0fVxuXG5cdFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb0VuZCA8IC0xLikge1xuXHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb0VuZCArIDEuLCAwLiksIDEuKTtcblx0XHR9XG5cdH1cblxuXHQvLyByb3VuZCBtaXRlclxuXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9TdGFydCA8IDAuKSB7XG5cdFx0XHRcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBzdGFydENvb3JkKTtcblxuXHRcdFx0XHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xuXHRcdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb0VuZCA8IDAuKSB7XG5cdFx0XHRcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBlbmRDb29yZCk7XG5cblx0XHRcdFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcblx0XHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFscGhhIC09IHNtb290aHN0ZXAoY3V0b2ZmIC0gLjUsIGN1dG9mZiArIC41LCByYWRpdXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZsb2F0IHQgPSBmcmFjdChkb3QodGFuZ2VudCwgZ2xfRnJhZ0Nvb3JkLnh5KSAvIGRhc2hMZW5ndGgpICogLjUgKyAuMjU7XG5cdGZsb2F0IGRhc2ggPSB0ZXh0dXJlMkQoZGFzaFRleHR1cmUsIHZlYzIodCwgLjUpKS5yO1xuXG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcbn1cbiJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX0sYkNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDo0LGRpdmlzb3I6MX0scHJldkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDowLGRpdmlzb3I6MX0sYUNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LG5leHRDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MjQsZGl2aXNvcjoxfX19LG4pKX1jYXRjaCh0KXtlPWl9cmV0dXJue2ZpbGw6dCh7cHJpbWl0aXZlOiJ0cmlhbmdsZSIsZWxlbWVudHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50cmlhbmdsZXN9LG9mZnNldDowLHZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xuXG51bmlmb3JtIHZlYzQgY29sb3I7XG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIGlkO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5jb25zdCBmbG9hdCBNQVhfTElORVMgPSAyNTYuO1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGRlcHRoID0gKE1BWF9MSU5FUyAtIDQuIC0gaWQpIC8gKE1BWF9MSU5FUyk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcblx0ZnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSx1bmlmb3Jtczp7c2NhbGU6dC5wcm9wKCJzY2FsZSIpLGNvbG9yOnQucHJvcCgiZmlsbCIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntwb3NpdGlvbjp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4fX0sYmxlbmQ6bi5ibGVuZCxkZXB0aDp7ZW5hYmxlOiExfSxzY2lzc29yOm4uc2Npc3NvcixzdGVuY2lsOm4uc3RlbmNpbCx2aWV3cG9ydDpuLnZpZXdwb3J0fSkscmVjdDppLG1pdGVyOmV9fSx2LmRlZmF1bHRzPXtkYXNoZXM6bnVsbCxqb2luOiJtaXRlciIsbWl0ZXJMaW1pdDoxLHRoaWNrbmVzczoxMCxjYXA6InNxdWFyZSIsY29sb3I6ImJsYWNrIixvcGFjaXR5OjEsb3ZlcmxheTohMSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsY2xvc2U6ITEsZmlsbDpudWxsfSx2LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCl9LHYucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybihlLmxlbmd0aD9lOnRoaXMucGFzc2VzKS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuO2lmKGUmJkFycmF5LmlzQXJyYXkoZSkpcmV0dXJuKG49dCkuZHJhdy5hcHBseShuLGUpOyJudW1iZXIiPT10eXBlb2YgZSYmKGU9dC5wYXNzZXNbZV0pLGUmJmUuY291bnQ+MSYmZS5vcGFjaXR5JiYodC5yZWdsLl9yZWZyZXNoKCksZS5maWxsJiZlLnRyaWFuZ2xlcyYmZS50cmlhbmdsZXMubGVuZ3RoPjImJnQuc2hhZGVycy5maWxsKGUpLGUudGhpY2tuZXNzJiYoZS5zY2FsZVswXSplLnZpZXdwb3J0LndpZHRoPnYucHJlY2lzaW9uVGhyZXNob2xkfHxlLnNjYWxlWzFdKmUudmlld3BvcnQuaGVpZ2h0PnYucHJlY2lzaW9uVGhyZXNob2xkfHwicmVjdCI9PT1lLmpvaW58fCFlLmpvaW4mJihlLnRoaWNrbmVzczw9Mnx8ZS5jb3VudD49di5tYXhQb2ludHMpP3Quc2hhZGVycy5yZWN0KGUpOnQuc2hhZGVycy5taXRlcihlKSkpfSkpLHRoaXN9LHYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQpe251bGwhPXQubGVuZ3RoPyJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciByPXRoaXMucmVnbCxvPXRoaXMuZ2w7aWYodC5mb3JFYWNoKChmdW5jdGlvbih0LGYpe3ZhciBkPWUucGFzc2VzW2ZdO2lmKHZvaWQgMCE9PXQpaWYobnVsbCE9PXQpe2lmKCJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1zKHQse3Bvc2l0aW9uczoicG9zaXRpb25zIHBvaW50cyBkYXRhIGNvb3JkcyIsdGhpY2tuZXNzOiJ0aGlja25lc3MgbGluZVdpZHRoIGxpbmVXaWR0aHMgbGluZS13aWR0aCBsaW5ld2lkdGggd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZXdpZHRoIHN0cm9rZVdpZHRoIixqb2luOiJsaW5lSm9pbiBsaW5lam9pbiBqb2luIHR5cGUgbW9kZSIsbWl0ZXJMaW1pdDoibWl0ZXJsaW1pdCBtaXRlckxpbWl0IixkYXNoZXM6ImRhc2ggZGFzaGVzIGRhc2hhcnJheSBkYXNoLWFycmF5IGRhc2hBcnJheSIsY29sb3I6ImNvbG9yIGNvbG91ciBzdHJva2UgY29sb3JzIGNvbG91cnMgc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixmaWxsOiJmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJhbHBoYSBvcGFjaXR5IixvdmVybGF5OiJvdmVybGF5IGNyZWFzZSBvdmVybGFwIGludGVyc2VjdCIsY2xvc2U6ImNsb3NlZCBjbG9zZSBjbG9zZWQtcGF0aCBjbG9zZVBhdGgiLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCIsaG9sZToiaG9sZXMgaG9sZSBob2xsb3ciLHNwbGl0TnVsbDoic3BsaXROdWxsIn0pLGR8fChlLnBhc3Nlc1tmXT1kPXtpZDpmLHNjYWxlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZTpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsY291bnQ6MCxob2xlOltdLGRlcHRoOjAsZGFzaExlbmd0aDoxLGRhc2hUZXh0dXJlOnIudGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOm5ldyBVaW50OEFycmF5KFsyNTVdKSx3aWR0aDoxLGhlaWdodDoxLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9KSxjb2xvckJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25CdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uRnJhY3RCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheX0pfSx0PWEoe30sdi5kZWZhdWx0cyx0KSksbnVsbCE9dC50aGlja25lc3MmJihkLnRoaWNrbmVzcz1wYXJzZUZsb2F0KHQudGhpY2tuZXNzKSksbnVsbCE9dC5vcGFjaXR5JiYoZC5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC5taXRlckxpbWl0JiYoZC5taXRlckxpbWl0PXBhcnNlRmxvYXQodC5taXRlckxpbWl0KSksbnVsbCE9dC5vdmVybGF5JiYoZC5vdmVybGF5PSEhdC5vdmVybGF5LGY8di5tYXhMaW5lcyYmKGQuZGVwdGg9Mioodi5tYXhMaW5lcy0xLWYldi5tYXhMaW5lcykvdi5tYXhMaW5lcy0xKSksbnVsbCE9dC5qb2luJiYoZC5qb2luPXQuam9pbiksbnVsbCE9dC5ob2xlJiYoZC5ob2xlPXQuaG9sZSksbnVsbCE9dC5maWxsJiYoZC5maWxsPXQuZmlsbD9uKHQuZmlsbCwidWludDgiKTpudWxsKSxudWxsIT10LnZpZXdwb3J0JiYoZC52aWV3cG9ydD1tKHQudmlld3BvcnQpKSxkLnZpZXdwb3J0fHwoZC52aWV3cG9ydD1tKFtvLmRyYXdpbmdCdWZmZXJXaWR0aCxvLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSksbnVsbCE9dC5jbG9zZSYmKGQuY2xvc2U9dC5jbG9zZSksbnVsbD09PXQucG9zaXRpb25zJiYodC5wb3NpdGlvbnM9W10pLHQucG9zaXRpb25zKXt2YXIgeSx4O2lmKHQucG9zaXRpb25zLngmJnQucG9zaXRpb25zLnkpe3ZhciBiPXQucG9zaXRpb25zLngsXz10LnBvc2l0aW9ucy55O3g9ZC5jb3VudD1NYXRoLm1heChiLmxlbmd0aCxfLmxlbmd0aCkseT1uZXcgRmxvYXQ2NEFycmF5KDIqeCk7Zm9yKHZhciB3PTA7dzx4O3crKyl5WzIqd109Ylt3XSx5WzIqdysxXT1fW3ddfWVsc2UgeT1sKHQucG9zaXRpb25zLCJmbG9hdDY0IikseD1kLmNvdW50PU1hdGguZmxvb3IoeS5sZW5ndGgvMik7dmFyIFQ9ZC5ib3VuZHM9aSh5LDIpO2lmKGQuZmlsbCl7Zm9yKHZhciBrPVtdLEE9e30sTT0wLFM9MCxFPTAsTD1kLmNvdW50O1M8TDtTKyspe3ZhciBDPXlbMipTXSxQPXlbMipTKzFdO2lzTmFOKEMpfHxpc05hTihQKXx8bnVsbD09Q3x8bnVsbD09UD8oQz15WzIqTV0sUD15WzIqTSsxXSxBW1NdPU0pOk09UyxrW0UrK109QyxrW0UrK109UH1pZih0LnNwbGl0TnVsbCl7ZC5jb3VudC0xIGluIEF8fChBW2QuY291bnRdPWQuY291bnQtMSk7dmFyIEk9T2JqZWN0LmtleXMoQSkubWFwKE51bWJlcikuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLE89W10sej0wLEQ9bnVsbCE9ZC5ob2xlP2QuaG9sZVswXTpudWxsO2lmKG51bGwhPUQpe3ZhciBSPWcoSSwoZnVuY3Rpb24odCl7cmV0dXJuIHQ+PUR9KSk7KEk9SS5zbGljZSgwLFIpKS5wdXNoKEQpfWZvcih2YXIgRj1mdW5jdGlvbih0KXt2YXIgZT1rLnNsaWNlKDIqeiwyKklbdF0pLmNvbmNhdChEP2suc2xpY2UoMipEKTpbXSkscj0oZC5ob2xlfHxbXSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS1EKyhJW3RdLXopfSkpLG49YyhlLHIpO249bi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlK3orKGUrejxJW3RdPzA6RC1JW3RdKX0pKSxPLnB1c2guYXBwbHkoTyxuKSx6PUlbdF0rMX0sQj0wO0I8SS5sZW5ndGg7QisrKUYoQik7Zm9yKHZhciBOPTAsaj1PLmxlbmd0aDtOPGo7TisrKW51bGwhPUFbT1tOXV0mJihPW05dPUFbT1tOXV0pO2QudHJpYW5nbGVzPU99ZWxzZXtmb3IodmFyIFU9YyhrLGQuaG9sZXx8W10pLFY9MCxIPVUubGVuZ3RoO1Y8SDtWKyspbnVsbCE9QVtVW1ZdXSYmKFVbVl09QVtVW1ZdXSk7ZC50cmlhbmdsZXM9VX19dmFyIHE9bmV3IEZsb2F0NjRBcnJheSh5KTt1KHEsMixUKTt2YXIgRz1uZXcgRmxvYXQ2NEFycmF5KDIqeCs2KTtkLmNsb3NlP3lbMF09PT15WzIqeC0yXSYmeVsxXT09PXlbMip4LTFdPyhHWzBdPXFbMip4LTRdLEdbMV09cVsyKngtM10pOihHWzBdPXFbMip4LTJdLEdbMV09cVsyKngtMV0pOihHWzBdPXFbMF0sR1sxXT1xWzFdKSxHLnNldChxLDIpLGQuY2xvc2U/eVswXT09PXlbMip4LTJdJiZ5WzFdPT09eVsyKngtMV0/KEdbMip4KzJdPXFbMl0sR1syKngrM109cVszXSxkLmNvdW50LT0xKTooR1syKngrMl09cVswXSxHWzIqeCszXT1xWzFdLEdbMip4KzRdPXFbMl0sR1syKngrNV09cVszXSk6KEdbMip4KzJdPXFbMip4LTJdLEdbMip4KzNdPXFbMip4LTFdLEdbMip4KzRdPXFbMip4LTJdLEdbMip4KzVdPXFbMip4LTFdKTt2YXIgWT1oKEcpO2QucG9zaXRpb25CdWZmZXIoWSk7dmFyIFc9cChHLFkpO2QucG9zaXRpb25GcmFjdEJ1ZmZlcihXKX1pZih0LnJhbmdlP2QucmFuZ2U9dC5yYW5nZTpkLnJhbmdlfHwoZC5yYW5nZT1kLmJvdW5kcyksKHQucmFuZ2V8fHQucG9zaXRpb25zKSYmZC5jb3VudCl7dmFyIFg9ZC5ib3VuZHMsWj1YWzJdLVhbMF0sSj1YWzNdLVhbMV0sSz1kLnJhbmdlWzJdLWQucmFuZ2VbMF0sUT1kLnJhbmdlWzNdLWQucmFuZ2VbMV07ZC5zY2FsZT1bWi9LLEovUV0sZC50cmFuc2xhdGU9Wy1kLnJhbmdlWzBdL0srWFswXS9LfHwwLC1kLnJhbmdlWzFdL1ErWFsxXS9RfHwwXSxkLnNjYWxlRnJhY3Q9cChkLnNjYWxlKSxkLnRyYW5zbGF0ZUZyYWN0PXAoZC50cmFuc2xhdGUpfWlmKHQuZGFzaGVzKXt2YXIgJCx0dD0wO2lmKCF0LmRhc2hlc3x8dC5kYXNoZXMubGVuZ3RoPDIpdHQ9MSwkPW5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSk7ZWxzZXt0dD0wO2Zvcih2YXIgZXQ9MDtldDx0LmRhc2hlcy5sZW5ndGg7KytldCl0dCs9dC5kYXNoZXNbZXRdOyQ9bmV3IFVpbnQ4QXJyYXkodHQqdi5kYXNoTXVsdCk7Zm9yKHZhciBydD0wLG50PTI1NSxpdD0wO2l0PDI7aXQrKylmb3IodmFyIGF0PTA7YXQ8dC5kYXNoZXMubGVuZ3RoOysrYXQpe2Zvcih2YXIgb3Q9MCxzdD10LmRhc2hlc1thdF0qdi5kYXNoTXVsdCouNTtvdDxzdDsrK290KSRbcnQrK109bnQ7bnRePTI1NX19ZC5kYXNoTGVuZ3RoPXR0LGQuZGFzaFRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTokLHdpZHRoOiQubGVuZ3RoLGhlaWdodDoxLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9LDAsMCl9aWYodC5jb2xvcil7dmFyIGx0PWQuY291bnQsY3Q9dC5jb2xvcjtjdHx8KGN0PSJ0cmFuc3BhcmVudCIpO3ZhciB1dD1uZXcgVWludDhBcnJheSg0Kmx0KzQpO2lmKEFycmF5LmlzQXJyYXkoY3QpJiYibnVtYmVyIiE9dHlwZW9mIGN0WzBdKXtmb3IodmFyIGZ0PTA7ZnQ8bHQ7ZnQrKyl7dmFyIGh0PW4oY3RbZnRdLCJ1aW50OCIpO3V0LnNldChodCw0KmZ0KX11dC5zZXQobihjdFswXSwidWludDgiKSw0Kmx0KX1lbHNlIGZvcih2YXIgcHQ9bihjdCwidWludDgiKSxkdD0wO2R0PGx0KzE7ZHQrKyl1dC5zZXQocHQsNCpkdCk7ZC5jb2xvckJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOnV0fSl9fWVsc2UgZS5wYXNzZXNbZl09bnVsbH0pKSx0Lmxlbmd0aDx0aGlzLnBhc3Nlcy5sZW5ndGgpe2Zvcih2YXIgZj10Lmxlbmd0aDtmPHRoaXMucGFzc2VzLmxlbmd0aDtmKyspe3ZhciBkPXRoaXMucGFzc2VzW2ZdO2QmJihkLmNvbG9yQnVmZmVyLmRlc3Ryb3koKSxkLnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSxkLmRhc2hUZXh0dXJlLmRlc3Ryb3koKSl9dGhpcy5wYXNzZXMubGVuZ3RoPXQubGVuZ3RofWZvcih2YXIgeT1bXSx4PTA7eDx0aGlzLnBhc3Nlcy5sZW5ndGg7eCsrKW51bGwhPT10aGlzLnBhc3Nlc1t4XSYmeS5wdXNoKHRoaXMucGFzc2VzW3hdKTtyZXR1cm4gdGhpcy5wYXNzZXM9eSx0aGlzfX0sdi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhc3Nlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmRhc2hUZXh0dXJlLmRlc3Ryb3koKX0pKSx0aGlzLnBhc3Nlcy5sZW5ndGg9MCx0aGlzfX0seyJhcnJheS1ib3VuZHMiOjcxLCJhcnJheS1maW5kLWluZGV4Ijo3MiwiYXJyYXktbm9ybWFsaXplIjo3MywiY29sb3Itbm9ybWFsaXplIjo4OSxlYXJjdXQ6MTI5LCJlczYtd2Vhay1tYXAiOjE4MywiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MTkxLGdsc2xpZnk6MjI3LCJvYmplY3QtYXNzaWduIjoyNDcsInBhcnNlLXJlY3QiOjI0OSwicGljay1ieS1hbGlhcyI6MjUzLCJ0by1mbG9hdDMyIjozMTN9XSwyODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fSh0KXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsPT10P251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKG51bGw9PXIpcmV0dXJuO3ZhciBuLGksYT1bXSxvPSEwLHM9ITE7dHJ5e2ZvcihyPXIuY2FsbCh0KTshKG89KG49ci5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKG4udmFsdWUpLCFlfHxhLmxlbmd0aCE9PWUpO289ITApO31jYXRjaCh0KXtzPSEwLGk9dH1maW5hbGx5e3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19cmV0dXJuIGF9KHQsZSl8fGEodCxlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG8odCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxhKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG8odCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9vKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBvKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59dmFyIHM9dCgiY29sb3Itbm9ybWFsaXplIiksbD10KCJhcnJheS1ib3VuZHMiKSxjPXQoImNvbG9yLWlkIiksdT10KCJAcGxvdGx5L3BvaW50LWNsdXN0ZXIiKSxmPXQoIm9iamVjdC1hc3NpZ24iKSxoPXQoImdsc2xpZnkiKSxwPXQoInBpY2stYnktYWxpYXMiKSxkPXQoInVwZGF0ZS1kaWZmIiksbT10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksZz10KCJpcy1pZXhwbG9yZXIiKSx2PXQoInRvLWZsb2F0MzIiKSx5PXQoInBhcnNlLXJlY3QiKSx4PWI7ZnVuY3Rpb24gYih0LGUpe3ZhciByPXRoaXM7aWYoISh0aGlzIGluc3RhbmNlb2YgYikpcmV0dXJuIG5ldyBiKHQsZSk7ImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6KGU9dCx0PW51bGwpLGUmJmUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSk7dmFyIG4saT0odD1lLnJlZ2wpLl9nbCxhPVtdO3RoaXMudG9vTWFueUNvbG9ycz1nLG49dC50ZXh0dXJlKHtkYXRhOm5ldyBVaW50OEFycmF5KDEwMjApLHdpZHRoOjI1NSxoZWlnaHQ6MSx0eXBlOiJ1aW50OCIsZm9ybWF0OiJyZ2JhIix3cmFwUzoiY2xhbXAiLHdyYXBUOiJjbGFtcCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QifSksZih0aGlzLHtyZWdsOnQsZ2w6aSxncm91cHM6W10sbWFya2VyQ2FjaGU6W251bGxdLG1hcmtlclRleHR1cmVzOltudWxsXSxwYWxldHRlOmEscGFsZXR0ZUlkczp7fSxwYWxldHRlVGV4dHVyZTpuLG1heENvbG9yczoyNTUsbWF4U2l6ZToxMDAsY2FudmFzOmkuY2FudmFzfSksdGhpcy51cGRhdGUoZSk7dmFyIG89e3VuaWZvcm1zOntjb25zdFBvaW50U2l6ZTohIWUuY29uc3RQb2ludFNpemUsb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxwYWxldHRlU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltyLnRvb01hbnlDb2xvcnM/MDoyNTUsbi5oZWlnaHRdfSxwaXhlbFJhdGlvOnQuY29udGV4dCgicGl4ZWxSYXRpbyIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSxtYXJrZXJUZXh0dXJlOnQucHJvcCgibWFya2VyVGV4dHVyZSIpLHBhbGV0dGVUZXh0dXJlOm59LGF0dHJpYnV0ZXM6e3g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSx4RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDowfX0seUZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MH06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLnNpemUvci5tYXhTaXplKV19fSxib3JkZXJTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyU2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjF9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5ib3JkZXJTaXplL3IubWF4U2l6ZSldfX0sY29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OjB9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/YS5zbGljZSg0KmUuY29sb3IsNCplLmNvbG9yKzQpOltlLmNvbG9yXX19LGJvcmRlckNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJDb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDpyLnRvb01hbnlDb2xvcnM/NDoyfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmJvcmRlckNvbG9yLDQqZS5ib3JkZXJDb2xvcis0KTpbZS5ib3JkZXJDb2xvcl19fSxpc0FjdGl2ZTpmdW5jdGlvbih0LGUpe3JldHVybiEwPT09ZS5hY3RpdmF0aW9uP3tjb25zdGFudDpbMV19OmUuYWN0aXZhdGlvbj9lLmFjdGl2YXRpb246e2NvbnN0YW50OlswXX19fSxibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxzY2lzc29yOntlbmFibGU6ITAsYm94OnQucHJvcCgidmlld3BvcnQiKX0sdmlld3BvcnQ6dC5wcm9wKCJ2aWV3cG9ydCIpLHN0ZW5jaWw6e2VuYWJsZTohMX0sZGVwdGg6e2VuYWJsZTohMX0sZWxlbWVudHM6dC5wcm9wKCJlbGVtZW50cyIpLGNvdW50OnQucHJvcCgiY291bnQiKSxvZmZzZXQ6dC5wcm9wKCJvZmZzZXQiKSxwcmltaXRpdmU6InBvaW50cyJ9LHM9Zih7fSxvKTtzLmZyYWc9aChbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcmtlclRleHR1cmU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ1dpZHRoLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCwgZnJhZ0NvbG9yTGV2ZWw7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKG1hcmtlclRleHR1cmUsIGdsX1BvaW50Q29vcmQpLnIsIGRlbHRhID0gZnJhZ1dpZHRoO1xuXG4gIC8vIG1heC1kaXN0YW5jZSBhbHBoYVxuICBpZiAoZGlzdCA8IDAuMDAzKSBkaXNjYXJkO1xuXG4gIC8vIG51bGwtYm9yZGVyIGNhc2VcbiAgaWYgKGZyYWdCb3JkZXJDb2xvckxldmVsID09IGZyYWdDb2xvckxldmVsIHx8IGZyYWdCb3JkZXJDb2xvci5hID09IDAuKSB7XG4gICAgZmxvYXQgY29sb3JBbXQgPSBzbW9vdGhzdGVwKC41IC0gZGVsdGEsIC41ICsgZGVsdGEsIGRpc3QpO1xuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiwgY29sb3JBbXQgKiBmcmFnQ29sb3IuYSAqIG9wYWNpdHkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZsb2F0IGJvcmRlckNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQm9yZGVyQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoZnJhZ0NvbG9yTGV2ZWwgLSBkZWx0YSwgZnJhZ0NvbG9yTGV2ZWwgKyBkZWx0YSwgZGlzdCk7XG5cbiAgICB2ZWM0IGNvbG9yID0gZnJhZ0JvcmRlckNvbG9yO1xuICAgIGNvbG9yLmEgKj0gYm9yZGVyQ29sb3JBbXQ7XG4gICAgY29sb3IgPSBtaXgoY29sb3IsIGZyYWdDb2xvciwgY29sb3JBbXQpO1xuICAgIGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xuICB9XG5cbn1cbiJdKSxzLnZlcnQ9aChbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcblxudW5pZm9ybSBib29sIGNvbnN0UG9pbnRTaXplO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0LCBwYWxldHRlU2l6ZTtcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGVUZXh0dXJlO1xuXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcbmNvbnN0IGZsb2F0IGJvcmRlckxldmVsID0gLjU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ1BvaW50U2l6ZSwgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCwgZnJhZ0NvbG9yTGV2ZWw7XG5cbmZsb2F0IHBvaW50U2l6ZVNjYWxlID0gKGNvbnN0UG9pbnRTaXplKSA/IDIuIDogcGl4ZWxSYXRpbztcblxuYm9vbCBpc0RpcmVjdCA9IChwYWxldHRlU2l6ZS54IDwgMS4pO1xuXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcbiAgcmV0dXJuIGlzRGlyZWN0ID8gaWQgLyAyNTUuIDogdGV4dHVyZTJEKHBhbGV0dGVUZXh0dXJlLFxuICAgIHZlYzIoXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgICApXG4gICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gaWdub3JlIGluYWN0aXZlIHBvaW50c1xuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcblxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XG5cbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XG5cbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcblxuICBnbF9Qb2ludFNpemUgPSAyLiAqIHNpemUgKiBwb2ludFNpemVTY2FsZTtcbiAgZnJhZ1BvaW50U2l6ZSA9IHNpemUgKiBwaXhlbFJhdGlvO1xuXG4gIHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLiwgMS4pO1xuXG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjtcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XG5cbiAgZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCAtIGJvcmRlckxldmVsICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XG4gIGZyYWdDb2xvckxldmVsID0gY2xhbXAoYm9yZGVyTGV2ZWwgKyAoMS4gLSBib3JkZXJMZXZlbCkgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbn0iXSksdGhpcy5kcmF3TWFya2VyPXQocyk7dmFyIGw9Zih7fSxvKTtsLmZyYWc9aChbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoO1xuXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdCB4KSB7XG5cdGZsb2F0IHQ7XG5cdHQgPSBjbGFtcCgoeCAtIGVkZ2UwKSAvIChlZGdlMSAtIGVkZ2UwKSwgMC4wLCAxLjApO1xuXHRyZXR1cm4gdCAqIHQgKiAoMy4wIC0gMi4wICogdCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgcmFkaXVzLCBhbHBoYSA9IDEuMCwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cblx0cmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuXG5cdGlmIChyYWRpdXMgPiAxLjAgKyBkZWx0YSkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblxuXHRhbHBoYSAtPSBzbW9vdGhzdGVwKDEuMCAtIGRlbHRhLCAxLjAgKyBkZWx0YSwgcmFkaXVzKTtcblxuXHRmbG9hdCBib3JkZXJSYWRpdXMgPSBmcmFnQm9yZGVyUmFkaXVzO1xuXHRmbG9hdCByYXRpbyA9IHNtb290aHN0ZXAoYm9yZGVyUmFkaXVzIC0gZGVsdGEsIGJvcmRlclJhZGl1cyArIGRlbHRhLCByYWRpdXMpO1xuXHR2ZWM0IGNvbG9yID0gbWl4KGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yLCByYXRpbyk7XG5cdGNvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5O1xuXHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxsLnZlcnQ9aChbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcblxudW5pZm9ybSBib29sIGNvbnN0UG9pbnRTaXplO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWMyIHBhbGV0dGVTaXplLCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdDtcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGVUZXh0dXJlO1xuXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbmZsb2F0IHBvaW50U2l6ZVNjYWxlID0gKGNvbnN0UG9pbnRTaXplKSA/IDIuIDogcGl4ZWxSYXRpbztcblxuYm9vbCBpc0RpcmVjdCA9IChwYWxldHRlU2l6ZS54IDwgMS4pO1xuXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcbiAgcmV0dXJuIGlzRGlyZWN0ID8gaWQgLyAyNTUuIDogdGV4dHVyZTJEKHBhbGV0dGVUZXh0dXJlLFxuICAgIHZlYzIoXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgICApXG4gICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gaWdub3JlIGluYWN0aXZlIHBvaW50c1xuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcblxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XG5cbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XG5cbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcblxuICBnbF9Qb2ludFNpemUgPSAoc2l6ZSArIGJvcmRlclNpemUpICogcG9pbnRTaXplU2NhbGU7XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAuLCAxLik7XG5cbiAgZnJhZ0JvcmRlclJhZGl1cyA9IDEuIC0gMi4gKiBib3JkZXJTaXplIC8gKHNpemUgKyBib3JkZXJTaXplKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yLmEgPT0gMC4gfHwgYm9yZGVyU2l6ZSA9PSAwLiA/IHZlYzQoY29sb3IucmdiLCAwLikgOiBib3JkZXJDb2xvcjtcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XG59XG4iXSksZyYmKGwuZnJhZz1sLmZyYWcucmVwbGFjZSgic21vb3Roc3RlcCIsInNtb290aFN0ZXAiKSxzLmZyYWc9cy5mcmFnLnJlcGxhY2UoInNtb290aHN0ZXAiLCJzbW9vdGhTdGVwIikpLHRoaXMuZHJhd0NpcmNsZT10KGwpfWIuZGVmYXVsdHM9e2NvbG9yOiJibGFjayIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjAsc2l6ZToxMixvcGFjaXR5OjEsbWFya2VyOnZvaWQgMCx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwscGl4ZWxTaXplOm51bGwsY291bnQ6MCxvZmZzZXQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sc25hcDoxZTR9LGIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ0aGlzLnVwZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5kcmF3KCksdGhpc30sYi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10aGlzLmdyb3VwcztpZigxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihudWxsPT09clswXVswXXx8QXJyYXkuaXNBcnJheShyWzBdWzBdKSkmJihyPXJbMF0pLHRoaXMucmVnbC5fcmVmcmVzaCgpLHIubGVuZ3RoKWZvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXRoaXMuZHJhd0l0ZW0oYSxyW2FdKTtlbHNlIGkuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt0LmRyYXdJdGVtKHIpfSkpO3JldHVybiB0aGlzfSxiLnByb3RvdHlwZS5kcmF3SXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ3JvdXBzLG49clt0XTtpZigibnVtYmVyIj09dHlwZW9mIGUmJih0PWUsbj1yW2VdLGU9bnVsbCksbiYmbi5jb3VudCYmbi5vcGFjaXR5KXtuLmFjdGl2YXRpb25bMF0mJnRoaXMuZHJhd0NpcmNsZSh0aGlzLmdldE1hcmtlckRyYXdPcHRpb25zKDAsbixlKSk7Zm9yKHZhciBhPVtdLG89MTtvPG4uYWN0aXZhdGlvbi5sZW5ndGg7bysrKW4uYWN0aXZhdGlvbltvXSYmKCEwPT09bi5hY3RpdmF0aW9uW29dfHxuLmFjdGl2YXRpb25bb10uZGF0YS5sZW5ndGgpJiZhLnB1c2guYXBwbHkoYSxpKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMobyxuLGUpKSk7YS5sZW5ndGgmJnRoaXMuZHJhd01hcmtlcihhKX19LGIucHJvdG90eXBlLmdldE1hcmtlckRyYXdPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnJhbmdlLGE9ZS50cmVlLG89ZS52aWV3cG9ydCxzPWUuYWN0aXZhdGlvbixsPWUuc2VsZWN0aW9uQnVmZmVyLGM9ZS5jb3VudDt0aGlzLnJlZ2w7aWYoIWEpcmV0dXJuIHI/W2Yoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxjb3VudDpyLmxlbmd0aCxlbGVtZW50czpyLG9mZnNldDowfSldOltmKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnNbdF0sb2Zmc2V0OjB9KV07dmFyIHU9W10saD1hLnJhbmdlKGkse2xvZDohMCxweDpbKGlbMl0taVswXSkvby53aWR0aCwoaVszXS1pWzFdKS9vLmhlaWdodF19KTtpZihyKXtmb3IodmFyIHA9c1t0XS5kYXRhLGQ9bmV3IFVpbnQ4QXJyYXkoYyksbT0wO208ci5sZW5ndGg7bSsrKXt2YXIgZz1yW21dO2RbZ109cD9wW2ddOjF9bC5zdWJkYXRhKGQpfWZvcih2YXIgdj1oLmxlbmd0aDt2LS07KXt2YXIgeT1uKGhbdl0sMikseD15WzBdLGI9eVsxXTt1LnB1c2goZih7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpyP2w6c1t0XSxvZmZzZXQ6eCxjb3VudDpiLXh9KSl9cmV0dXJuIHV9LGIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPWFyZ3VtZW50c1tuXTtpZihyLmxlbmd0aCl7MT09PXIubGVuZ3RoJiZBcnJheS5pc0FycmF5KHJbMF0pJiYocj1yWzBdKTt2YXIgaT10aGlzLmdyb3VwcyxhPXRoaXMuZ2wsbz10aGlzLnJlZ2wscz10aGlzLm1heFNpemUsYz10aGlzLm1heENvbG9ycyxoPXRoaXMucGFsZXR0ZTt0aGlzLmdyb3Vwcz1pPXIubWFwKChmdW5jdGlvbihlLHIpe3ZhciBuPWlbcl07aWYodm9pZCAwPT09ZSlyZXR1cm4gbjtudWxsPT09ZT9lPXtwb3NpdGlvbnM6bnVsbH06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZT17b25kcmF3OmV9OiJudW1iZXIiPT10eXBlb2YgZVswXSYmKGU9e3Bvc2l0aW9uczplfSksbnVsbD09PShlPXAoZSx7cG9zaXRpb25zOiJwb3NpdGlvbnMgZGF0YSBwb2ludHMiLHNuYXA6InNuYXAgY2x1c3RlciBsb2QgdHJlZSIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixjb2xvcjoiY29sb3JzIGNvbG9yIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLGJvcmRlckNvbG9yOiJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsbWFya2VyOiJtYXJrZXJzIG1hcmtlciBzaGFwZSIscmFuZ2U6InJhbmdlIGRhdGFCb3ggZGF0YWJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdQb3J0IHZpZXdCb3ggdmlld2JveCIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kiLGJvdW5kczoiYm91bmQgYm91bmRzIGJvdW5kYXJpZXMgbGltaXRzIix0b29NYW55Q29sb3JzOiJ0b29NYW55Q29sb3JzIHBhbGV0dGUgcGFsZXR0ZU1vZGUgb3B0aW1pemVQYWxldHRlIGVuYWJsZVBhbGV0dGUifSkpLnBvc2l0aW9ucyYmKGUucG9zaXRpb25zPVtdKSxudWxsIT1lLnRvb01hbnlDb2xvcnMmJih0LnRvb01hbnlDb2xvcnM9ZS50b29NYW55Q29sb3JzKSxufHwoaVtyXT1uPXtpZDpyLHNjYWxlOm51bGwsdHJhbnNsYXRlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsYWN0aXZhdGlvbjpbXSxzZWxlY3Rpb25CdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6InN0cmVhbSIsdHlwZToidWludDgifSksc2l6ZUJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgifSksY29sb3JCdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4In0pLHBvc2l0aW9uQnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KX0sZT1mKHt9LGIuZGVmYXVsdHMsZSkpLGUucG9zaXRpb25zJiYhKCJtYXJrZXIiaW4gZSkmJihlLm1hcmtlcj1uLm1hcmtlcixkZWxldGUgbi5tYXJrZXIpLGUubWFya2VyJiYhKCJwb3NpdGlvbnMiaW4gZSkmJihlLnBvc2l0aW9ucz1uLnBvc2l0aW9ucyxkZWxldGUgbi5wb3NpdGlvbnMpO3ZhciBnPTAseD0wO2lmKGQobixlLFt7c25hcDohMCxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PWIuZGVmYXVsdHMuc2l6ZSksZys9dCYmdC5sZW5ndGg/MTowLHR9LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9Yi5kZWZhdWx0cy5ib3JkZXJTaXplKSxnKz10JiZ0Lmxlbmd0aD8xOjAsdH0sb3BhY2l0eTpwYXJzZUZsb2F0LGNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPWIuZGVmYXVsdHMuY29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSx4KyssZX0sYm9yZGVyQ29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9Yi5kZWZhdWx0cy5ib3JkZXJDb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLHgrKyxlfSxib3VuZHM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiJyYW5nZSJpbiByfHwoci5yYW5nZT1udWxsKSx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuc25hcCxpPWUucG9zaXRpb25CdWZmZXIsYT1lLnBvc2l0aW9uRnJhY3RCdWZmZXIscz1lLnNlbGVjdGlvbkJ1ZmZlcjtpZih0Lnh8fHQueSlyZXR1cm4gdC54Lmxlbmd0aD9lLnhBdHRyPXtidWZmZXI6by5idWZmZXIodC54KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LngubGVuZ3RofTplLnhBdHRyPXtidWZmZXI6dC54LmJ1ZmZlcixvZmZzZXQ6NCp0Lngub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnguc3RyaWRlfHwxKSxjb3VudDp0LnguY291bnR9LHQueS5sZW5ndGg/ZS55QXR0cj17YnVmZmVyOm8uYnVmZmVyKHQueSksb2Zmc2V0OjAsc3RyaWRlOjQsY291bnQ6dC55Lmxlbmd0aH06ZS55QXR0cj17YnVmZmVyOnQueS5idWZmZXIsb2Zmc2V0OjQqdC55Lm9mZnNldHx8MCxzdHJpZGU6NCoodC55LnN0cmlkZXx8MSksY291bnQ6dC55LmNvdW50fSxlLmNvdW50PU1hdGgubWF4KGUueEF0dHIuY291bnQsZS55QXR0ci5jb3VudCksdDt0PW0odCwiZmxvYXQ2NCIpO3ZhciBjPWUuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxmPWUuYm91bmRzPWM/bCh0LDIpOm51bGw7aWYoci5yYW5nZXx8ZS5yYW5nZXx8KGRlbGV0ZSBlLnJhbmdlLHIucmFuZ2U9Ziksci5tYXJrZXJ8fGUubWFya2VyfHwoZGVsZXRlIGUubWFya2VyLHIubWFya2VyPW51bGwpLG4mJighMD09PW58fGM+bik/ZS50cmVlPXUodCx7Ym91bmRzOmZ9KTpuJiZuLmxlbmd0aCYmKGUudHJlZT1uKSxlLnRyZWUpe3ZhciBoPXtwcmltaXRpdmU6InBvaW50cyIsdXNhZ2U6InN0YXRpYyIsZGF0YTplLnRyZWUsdHlwZToidWludDMyIn07ZS5lbGVtZW50cz9lLmVsZW1lbnRzKGgpOmUuZWxlbWVudHM9by5lbGVtZW50cyhoKX12YXIgcD12LmZsb2F0MzIodCk7cmV0dXJuIGkoe2RhdGE6cCx1c2FnZToiZHluYW1pYyJ9KSxhKHtkYXRhOnYuZnJhY3QzMih0LHApLHVzYWdlOiJkeW5hbWljIn0pLHMoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoYyksdHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdH19LHttYXJrZXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuYWN0aXZhdGlvbjtpZihpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLGkubGVuZ3RoPTAsZSYmIm51bWJlciIhPXR5cGVvZiBlWzBdKXtmb3IodmFyIGE9W10scz0wLGw9TWF0aC5taW4oZS5sZW5ndGgsci5jb3VudCk7czxsO3MrKyl7dmFyIGM9dC5hZGRNYXJrZXIoZVtzXSk7YVtjXXx8KGFbY109bmV3IFVpbnQ4QXJyYXkoci5jb3VudCkpLGFbY11bc109MX1mb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKylpZihhW3VdKXt2YXIgZj17ZGF0YTphW3VdLHR5cGU6InVpbnQ4Iix1c2FnZToic3RhdGljIn07aVt1XT9pW3VdKGYpOmlbdV09by5idWZmZXIoZiksaVt1XS5kYXRhPWFbdV19fWVsc2V7aVt0LmFkZE1hcmtlcihlKV09ITB9cmV0dXJuIGV9LHJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmJvdW5kcztpZihuKXJldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PXYuZnJhY3QoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD12LmZyYWN0KGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXtyZXR1cm4geSh0fHxbYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0XSl9fV0pLGcpe3ZhciBfPW4sdz1fLmNvdW50LFQ9Xy5zaXplLGs9Xy5ib3JkZXJTaXplLEE9Xy5zaXplQnVmZmVyLE09bmV3IFVpbnQ4QXJyYXkoMip3KTtpZihULmxlbmd0aHx8ay5sZW5ndGgpZm9yKHZhciBTPTA7Uzx3O1MrKylNWzIqU109TWF0aC5yb3VuZCgyNTUqKG51bGw9PVRbU10/VDpUW1NdKS9zKSxNWzIqUysxXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09a1tTXT9rOmtbU10pL3MpO0Eoe2RhdGE6TSx1c2FnZToiZHluYW1pYyJ9KX1pZih4KXt2YXIgRSxMPW4sQz1MLmNvdW50LFA9TC5jb2xvcixJPUwuYm9yZGVyQ29sb3IsTz1MLmNvbG9yQnVmZmVyO2lmKHQudG9vTWFueUNvbG9ycyl7aWYoUC5sZW5ndGh8fEkubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDgqQyk7Zm9yKHZhciB6PTA7ejxDO3orKyl7dmFyIEQ9UFt6XTtFWzgqel09aFs0KkRdLEVbOCp6KzFdPWhbNCpEKzFdLEVbOCp6KzJdPWhbNCpEKzJdLEVbOCp6KzNdPWhbNCpEKzNdO3ZhciBSPUlbel07RVs4KnorNF09aFs0KlJdLEVbOCp6KzVdPWhbNCpSKzFdLEVbOCp6KzZdPWhbNCpSKzJdLEVbOCp6KzddPWhbNCpSKzNdfX19ZWxzZSBpZihQLmxlbmd0aHx8SS5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoNCpDKzIpO2Zvcih2YXIgRj0wO0Y8QztGKyspbnVsbCE9UFtGXSYmKEVbNCpGXT1QW0ZdJWMsRVs0KkYrMV09TWF0aC5mbG9vcihQW0ZdL2MpKSxudWxsIT1JW0ZdJiYoRVs0KkYrMl09SVtGXSVjLEVbNCpGKzNdPU1hdGguZmxvb3IoSVtGXS9jKSl9Tyh7ZGF0YTpFfHxuZXcgVWludDhBcnJheSgwKSx0eXBlOiJ1aW50OCIsdXNhZ2U6ImR5bmFtaWMifSl9cmV0dXJuIG59KSl9fSxiLnByb3RvdHlwZS5hZGRNYXJrZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLm1hcmtlclRleHR1cmVzLG49dGhpcy5yZWdsLGk9dGhpcy5tYXJrZXJDYWNoZSxhPW51bGw9PXQ/MDppLmluZGV4T2YodCk7aWYoYT49MClyZXR1cm4gYTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KWU9dDtlbHNle2U9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgbz0wLHM9dC5sZW5ndGg7bzxzO28rKyllW29dPTI1NSp0W29dfXZhciBsPU1hdGguZmxvb3IoTWF0aC5zcXJ0KGUubGVuZ3RoKSk7cmV0dXJuIGE9ci5sZW5ndGgsaS5wdXNoKHQpLHIucHVzaChuLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTplLHJhZGl1czpsLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9KSksYX0sYi5wcm90b3R5cGUudXBkYXRlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYWxldHRlSWRzLHI9dGhpcy5wYWxldHRlLG49dGhpcy5tYXhDb2xvcnM7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgaT1bXTtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBhPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKz00KWEucHVzaCh0LnNsaWNlKG8sbys0KSk7ZWxzZSBmb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrPTQpYS5wdXNoKHQuc3ViYXJyYXkobCxsKzQpKTt0PWF9Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBmPXRbdV07Zj1zKGYsInVpbnQ4Iik7dmFyIGg9YyhmLCExKTtpZihudWxsPT1lW2hdKXt2YXIgcD1yLmxlbmd0aDtlW2hdPU1hdGguZmxvb3IocC80KSxyW3BdPWZbMF0scltwKzFdPWZbMV0scltwKzJdPWZbMl0scltwKzNdPWZbM119aVt1XT1lW2hdfXJldHVybiF0aGlzLnRvb01hbnlDb2xvcnMmJnIubGVuZ3RoPjQqbiYmKHRoaXMudG9vTWFueUNvbG9ycz0hMCksdGhpcy51cGRhdGVQYWxldHRlKHIpLDE9PT1pLmxlbmd0aD9pWzBdOml9LGIucHJvdG90eXBlLnVwZGF0ZVBhbGV0dGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMudG9vTWFueUNvbG9ycyl7dmFyIGU9dGhpcy5tYXhDb2xvcnMscj10aGlzLnBhbGV0dGVUZXh0dXJlLG49TWF0aC5jZWlsKC4yNSp0Lmxlbmd0aC9lKTtpZihuPjEpZm9yKHZhciBpPS4yNSoodD10LnNsaWNlKCkpLmxlbmd0aCVlO2k8biplO2krKyl0LnB1c2goMCwwLDAsMCk7ci5oZWlnaHQ8biYmci5yZXNpemUoZSxuKSxyLnN1YmltYWdlKHt3aWR0aDpNYXRoLm1pbiguMjUqdC5sZW5ndGgsZSksaGVpZ2h0Om4sZGF0YTp0fSwwLDApfX0sYi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3Vwcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNpemVCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25GcmFjdEJ1ZmZlci5kZXN0cm95KCksdC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5hY3RpdmF0aW9uLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLHQuc2VsZWN0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmVsZW1lbnRzJiZ0LmVsZW1lbnRzLmRlc3Ryb3koKX0pKSx0aGlzLmdyb3Vwcy5sZW5ndGg9MCx0aGlzLnBhbGV0dGVUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLm1hcmtlclRleHR1cmVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLHRoaXN9O3ZhciBfPXQoIm9iamVjdC1hc3NpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgeCh0LGUpLG49ci5yZW5kZXIuYmluZChyKTtyZXR1cm4gXyhuLHtyZW5kZXI6bix1cGRhdGU6ci51cGRhdGUuYmluZChyKSxkcmF3OnIuZHJhdy5iaW5kKHIpLGRlc3Ryb3k6ci5kZXN0cm95LmJpbmQocikscmVnbDpyLnJlZ2wsZ2w6ci5nbCxjYW52YXM6ci5nbC5jYW52YXMsZ3JvdXBzOnIuZ3JvdXBzLG1hcmtlcnM6ci5tYXJrZXJDYWNoZSxwYWxldHRlOnIucGFsZXR0ZX0pLG59fSx7IkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTksImFycmF5LWJvdW5kcyI6NzEsImNvbG9yLWlkIjo4NywiY29sb3Itbm9ybWFsaXplIjo4OSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MTkxLGdsc2xpZnk6MjI3LCJpcy1pZXhwbG9yZXIiOjIzMywib2JqZWN0LWFzc2lnbiI6MjQ3LCJwYXJzZS1yZWN0IjoyNDksInBpY2stYnktYWxpYXMiOjI1MywidG8tZmxvYXQzMiI6MzEzLCJ1cGRhdGUtZGlmZiI6MzI5fV0sMjgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc2NhdHRlcjJkIiksaT10KCJwaWNrLWJ5LWFsaWFzIiksYT10KCJhcnJheS1ib3VuZHMiKSxvPXQoInJhZiIpLHM9dCgiYXJyYXktcmFuZ2UiKSxsPXQoInBhcnNlLXJlY3QiKSxjPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKTtmdW5jdGlvbiB1KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1KHQsZSk7dGhpcy50cmFjZXM9W10sdGhpcy5wYXNzZXM9e30sdGhpcy5yZWdsPXQsdGhpcy5zY2F0dGVyPW4odCksdGhpcy5jYW52YXM9dGhpcy5zY2F0dGVyLmNhbnZhc31mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4obnVsbCE9dC5pZD90LmlkOnQpPDwxNnwoMjU1JmUpPDw4fDI1NSZyfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuLGksYSxvLHM9dFtlXSxsPXRbcl07cmV0dXJuIHMubGVuZ3RoPjI/KHNbMF0sc1syXSxuPXNbMV0saT1zWzNdKTpzLmxlbmd0aD8obj1zWzBdLGk9c1sxXSk6KHMueCxuPXMueSxzLngrcy53aWR0aCxpPXMueStzLmhlaWdodCksbC5sZW5ndGg+Mj8oYT1sWzBdLG89bFsyXSxsWzFdLGxbM10pOmwubGVuZ3RoPyhhPWxbMF0sbz1sWzFdKTooYT1sLngsbC55LG89bC54K2wud2lkdGgsbC55K2wuaGVpZ2h0KSxbYSxuLG8saV19ZnVuY3Rpb24gcCh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuW3QsdCx0LHRdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bdFswXSx0WzFdLHRbMF0sdFsxXV07dmFyIGU9bCh0KTtyZXR1cm5bZS54LGUueSxlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdfWUuZXhwb3J0cz11LHUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7bi0tOylyW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gci5sZW5ndGgmJih0PXRoaXMpLnVwZGF0ZS5hcHBseSh0LHIpLHRoaXMucmVnbC5hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj90aGlzLmRyYXcoKToodGhpcy5kaXJ0eT9udWxsPT10aGlzLnBsYW5uZWQmJih0aGlzLnBsYW5uZWQ9bygoZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpKToodGhpcy5kcmF3KCksdGhpcy5kaXJ0eT0hMCxvKChmdW5jdGlvbigpe2UuZGlydHk9ITF9KSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy51cGRhdGVJdGVtKG4sZVtuXSk7dGhpcy50cmFjZXM9dGhpcy50cmFjZXMuZmlsdGVyKEJvb2xlYW4pO2Zvcih2YXIgaT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4odD10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseSh0LGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6ImRhdGEgaXRlbXMgY29sdW1ucyByb3dzIHZhbHVlcyBkaW1lbnNpb25zIHNhbXBsZXMgeCIsc25hcDoic25hcCBjbHVzdGVyIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWUiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIGJvcmRlcmNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCB2aWV3Ym94Iixkb21haW46ImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXMiLHBhZGRpbmc6InBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnMiLHRyYW5zcG9zZToidHJhbnNwb3NlIHRyYW5zcG9zZWQiLGRpYWdvbmFsOiJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbCIsdXBwZXI6InVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGYiLGxvd2VyOiJsb3dlciBsb3cgYm90dG9tIGxvd2VyaGFsZiBsb3dlckhhbGYgc2hvd2xvd2VyaGFsZiBzaG93TG93ZXJIYWxmIHNob3dMb3dlciJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjoiYmxhY2siLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjEsdmlld3BvcnQ6bChbci5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHIuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxwYWRkaW5nOlswLDAsMCwwXSxvcGFjaXR5OjEsZGlhZ29uYWw6ITAsdXBwZXI6ITAsbG93ZXI6ITB9KTtpZihudWxsIT1vLmNvbG9yJiYocy5jb2xvcj1vLmNvbG9yKSxudWxsIT1vLnNpemUmJihzLnNpemU9by5zaXplKSxudWxsIT1vLm1hcmtlciYmKHMubWFya2VyPW8ubWFya2VyKSxudWxsIT1vLmJvcmRlckNvbG9yJiYocy5ib3JkZXJDb2xvcj1vLmJvcmRlckNvbG9yKSxudWxsIT1vLmJvcmRlclNpemUmJihzLmJvcmRlclNpemU9by5ib3JkZXJTaXplKSxudWxsIT1vLm9wYWNpdHkmJihzLm9wYWNpdHk9by5vcGFjaXR5KSxvLnZpZXdwb3J0JiYocy52aWV3cG9ydD1sKG8udmlld3BvcnQpKSxudWxsIT1vLmRpYWdvbmFsJiYocy5kaWFnb25hbD1vLmRpYWdvbmFsKSxudWxsIT1vLnVwcGVyJiYocy51cHBlcj1vLnVwcGVyKSxudWxsIT1vLmxvd2VyJiYocy5sb3dlcj1vLmxvd2VyKSxvLmRhdGEpe3MuYnVmZmVyKGMoby5kYXRhKSkscy5jb2x1bW5zPW8uZGF0YS5sZW5ndGgscy5jb3VudD1vLmRhdGFbMF0ubGVuZ3RoLHMuYm91bmRzPVtdO2Zvcih2YXIgdT0wO3U8cy5jb2x1bW5zO3UrKylzLmJvdW5kc1t1XT1hKG8uZGF0YVt1XSwxKX1vLnJhbmdlJiYocy5yYW5nZT1vLnJhbmdlLG49cy5yYW5nZSYmIm51bWJlciIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJiJudW1iZXIiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBtPXMuY29sdW1ucyxnPXMuY291bnQsdj1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz12L20sdz15L207cy5wYXNzZXM9W107Zm9yKHZhciBUPTA7VDxtO1QrKylmb3IodmFyIGs9MDtrPG07aysrKWlmKChzLmRpYWdvbmFsfHxrIT09VCkmJihzLnVwcGVyfHwhKFQ+aykpJiYocy5sb3dlcnx8IShUPGspKSl7dmFyIEE9ZihzLmlkLFQsayksTT10aGlzLnBhc3Nlc1tBXXx8KHRoaXMucGFzc2VzW0FdPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9NLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDprLGNvdW50Omcsc3RyaWRlOm19LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCxjb3VudDpnLHN0cmlkZTptfX06TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6aypnLGNvdW50Omd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCpnLGNvdW50Omd9fSxNLmJvdW5kcz1oKHMuYm91bmRzLFQsaykpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/aChzLnBhZGRpbmcsVCxrKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWgocy5kb21haW4sVCxrKSxMPUVbMF0sQz1FWzFdLFA9RVsyXSxJPUVbM107TS52aWV3cG9ydD1beCtMKnYrU1swXSxiK0MqeStTWzFdLHgrUCp2LVNbMl0sYitJKnktU1szXV19ZWxzZSBNLnZpZXdwb3J0PVt4K2sqXytfKlNbMF0sYitUKncrdypTWzFdLHgrKGsrMSkqXy1fKlNbMl0sYisoVCsxKSp3LXcqU1szXV19by5jb2xvciYmKE0uY29sb3I9cy5jb2xvciksby5zaXplJiYoTS5zaXplPXMuc2l6ZSksby5tYXJrZXImJihNLm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoTS5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKE0uYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoTS5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKE0ucmFuZ2U9bj9oKHMucmFuZ2UsVCxrKTpzLnJhbmdlfHxNLmJvdW5kcykscy5wYXNzZXMucHVzaChBKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtpXSl7dmFyIGE9dGhpcy50cmFjZXNbZVtpXV0sbz1hLnBhc3NlcyxsPWEucGFzc09mZnNldDtuLnB1c2guYXBwbHkobixzKGwsbCtvLmxlbmd0aCkpfWVsc2UgaWYoZVtpXS5sZW5ndGgpe3ZhciBjPWVbaV0sdT10aGlzLnRyYWNlc1tpXSxmPXUucGFzc2VzLGg9dS5wYXNzT2Zmc2V0O2Y9Zi5tYXAoKGZ1bmN0aW9uKHQsZSl7bltoK2VdPWN9KSl9KHQ9dGhpcy5zY2F0dGVyKS5kcmF3LmFwcGx5KHQsbil9ZWxzZSB0aGlzLnNjYXR0ZXIuZHJhdygpO3JldHVybiB0aGlzfSx1LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhY2VzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuYnVmZmVyJiZ0LmJ1ZmZlci5kZXN0cm95JiZ0LmJ1ZmZlci5kZXN0cm95KCl9KSksdGhpcy50cmFjZXM9bnVsbCx0aGlzLnBhc3Nlcz1udWxsLHRoaXMuc2NhdHRlci5kZXN0cm95KCksdGhpc319LHsiYXJyYXktYm91bmRzIjo3MSwiYXJyYXktcmFuZ2UiOjc0LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoxOTEsInBhcnNlLXJlY3QiOjI0OSwicGljay1ieS1hbGlhcyI6MjUzLHJhZjoyNzgsInJlZ2wtc2NhdHRlcjJkIjoyODF9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/ZS5leHBvcnRzPW4oKTp0LmNyZWF0ZVJFR0w9bigpfSh0aGlzLChmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmlkPVUrKyx0aGlzLnR5cGU9dCx0aGlzLmRhdGE9ZX1mdW5jdGlvbiBlKHQpe3JldHVybiJbIitmdW5jdGlvbiB0KGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm5bXTt2YXIgcj1lLmNoYXJBdCgwKSxuPWUuY2hhckF0KGUubGVuZ3RoLTEpO2lmKDE8ZS5sZW5ndGgmJnI9PT1uJiYoJyInPT09cnx8IiciPT09cikpcmV0dXJuWyciJytlLnN1YnN0cigxLGUubGVuZ3RoLTIpLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8iL2csJ1xcIicpKyciJ107aWYocj0vXFsoZmFsc2V8dHJ1ZXxudWxsfFxkK3wnW14nXSonfCJbXiJdKiIpXF0vLmV4ZWMoZSkpcmV0dXJuIHQoZS5zdWJzdHIoMCxyLmluZGV4KSkuY29uY2F0KHQoclsxXSkpLmNvbmNhdCh0KGUuc3Vic3RyKHIuaW5kZXgrclswXS5sZW5ndGgpKSk7aWYoMT09PShyPWUuc3BsaXQoIi4iKSkubGVuZ3RoKXJldHVyblsnIicrZS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKSsnIiddO2ZvcihlPVtdLG49MDtuPHIubGVuZ3RoOysrbillPWUuY29uY2F0KHQocltuXSkpO3JldHVybiBlfSh0KS5qb2luKCJdWyIpKyJdIn1mdW5jdGlvbiByKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KCk6dH1mdW5jdGlvbiBuKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnR9ZnVuY3Rpb24gaSh0KXt2YXIgZSxpLGEsbyxzPXR8fHt9O3Q9e307dmFyIGw9W10sYz1bXSx1PSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PzE6d2luZG93LmRldmljZVBpeGVsUmF0aW8sZj0hMSxoPWZ1bmN0aW9uKHQpe30scD1mdW5jdGlvbigpe307aWYoInN0cmluZyI9PXR5cGVvZiBzP2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKToib2JqZWN0Ij09dHlwZW9mIHMmJigic3RyaW5nIj09dHlwZW9mIHMubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/ZT1zOiJmdW5jdGlvbiI9PXR5cGVvZiBzLmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiBzLmRyYXdFbGVtZW50cz9hPShvPXMpLmNhbnZhczooImdsImluIHM/bz1zLmdsOiJjYW52YXMiaW4gcz9hPW4ocy5jYW52YXMpOiJjb250YWluZXIiaW4gcyYmKGk9bihzLmNvbnRhaW5lcikpLCJhdHRyaWJ1dGVzImluIHMmJih0PXMuYXR0cmlidXRlcyksImV4dGVuc2lvbnMiaW4gcyYmKGw9cihzLmV4dGVuc2lvbnMpKSwib3B0aW9uYWxFeHRlbnNpb25zImluIHMmJihjPXIocy5vcHRpb25hbEV4dGVuc2lvbnMpKSwib25Eb25lImluIHMmJihoPXMub25Eb25lKSwicHJvZmlsZSJpbiBzJiYoZj0hIXMucHJvZmlsZSksInBpeGVsUmF0aW8iaW4gcyYmKHU9K3MucGl4ZWxSYXRpbykpKSxlJiYoImNhbnZhcyI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/YT1lOmk9ZSksIW8pe2lmKCFhKXtpZighKGU9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgZT13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodDt0IT09ZG9jdW1lbnQuYm9keSYmKGU9KG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkucmlnaHQtbi5sZWZ0LG49bi5ib3R0b20tbi50b3ApLGEud2lkdGg9ciplLGEuaGVpZ2h0PXIqbn12YXIgaSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBqKGEuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KSx0LmFwcGVuZENoaWxkKGEpLHQ9PT1kb2N1bWVudC5ib2R5JiYoYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGoodC5zdHlsZSx7bWFyZ2luOjAscGFkZGluZzowfSkpLHQhPT1kb2N1bWVudC5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/KGk9bmV3IFJlc2l6ZU9ic2VydmVyKChmdW5jdGlvbigpe3NldFRpbWVvdXQobil9KSkpLm9ic2VydmUodCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiwhMSksbigpLHtjYW52YXM6YSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtpP2kuZGlzY29ubmVjdCgpOndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pLHQucmVtb3ZlQ2hpbGQoYSl9fX0oaXx8ZG9jdW1lbnQuYm9keSwwLHUpKSlyZXR1cm4gbnVsbDthPWUuY2FudmFzLHA9ZS5vbkRlc3Ryb3l9dm9pZCAwPT09dC5wcmVtdWx0aXBsaWVkQWxwaGEmJih0LnByZW11bHRpcGxpZWRBbHBoYT0hMCksbz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocil7dHJ5e3JldHVybiB0LmdldENvbnRleHQocixlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19cmV0dXJuIHIoIndlYmdsIil8fHIoImV4cGVyaW1lbnRhbC13ZWJnbCIpfHxyKCJ3ZWJnbC1leHBlcmltZW50YWwiKX0oYSx0KX1yZXR1cm4gbz97Z2w6byxjYW52YXM6YSxjb250YWluZXI6aSxleHRlbnNpb25zOmwsb3B0aW9uYWxFeHRlbnNpb25zOmMscGl4ZWxSYXRpbzp1LHByb2ZpbGU6ZixvbkRvbmU6aCxvbkRlc3Ryb3k6cH06KHAoKSxoKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnIiksbnVsbCl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPSg2NTUzNTx0KTw8NCxlfD1yPSgyNTU8KHQ+Pj49ZSkpPDwzLChlfD1yPSgxNTwodD4+Pj1yKSk8PDIpfChyPSgzPCh0Pj4+PXIpKTw8MSl8dD4+PnI+PjF9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQodCl7dDp7Zm9yKHZhciBlPTE2OzI2ODQzNTQ1Nj49ZTtlKj0xNilpZih0PD1lKXt0PWU7YnJlYWsgdH10PTB9cmV0dXJuIDA8KGU9cltvKHQpPj4yXSkubGVuZ3RoP2UucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGUodCl7cltvKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9dmFyIHI9YSg4LChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybnthbGxvYzp0LGZyZWU6ZSxhbGxvY1R5cGU6ZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3N3aXRjaChlKXtjYXNlIDUxMjA6bj1uZXcgSW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjE6bj1uZXcgVWludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIyOm49bmV3IEludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTIzOm49bmV3IFVpbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNDpuPW5ldyBJbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNTpuPW5ldyBVaW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjY6bj1uZXcgRmxvYXQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG4ubGVuZ3RoIT09cj9uLnN1YmFycmF5KDAscik6bn0sZnJlZVR5cGU6ZnVuY3Rpb24odCl7ZSh0LmJ1ZmZlcil9fX1mdW5jdGlvbiBsKHQpe3JldHVybiEhdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fFcodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfEpbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPXR0KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPSQoZSxpLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSl9ZWxzZSJudW1iZXIiPT10eXBlb2YgZVswXT8odC5kaW1lbnNpb249aSxmKGk9Ry5hbGxvY1R5cGUodC5kdHlwZSxlLmxlbmd0aCksZSksYSh0LGksciksbz90LnBlcnNpc3RlbnREYXRhPWk6Ry5mcmVlVHlwZShpKSk6VyhlWzBdKSYmKHQuZGltZW5zaW9uPWVbMF0ubGVuZ3RoLHQuZHR5cGU9bnx8dShlWzBdKXx8NTEyNixhKHQsZT0kKGUsW2UubGVuZ3RoLGVbMF0ubGVuZ3RoXSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpHLmZyZWVUeXBlKGUpKX1lbHNlIGlmKFcoZSkpdC5kdHlwZT1ufHx1KGUpLHQuZGltZW5zaW9uPWksYSh0LGUsciksbyYmKHQucGVyc2lzdGVudERhdGE9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKSk7ZWxzZSBpZihsKGUpKXtpPWUuc2hhcGU7dmFyIGM9ZS5zdHJpZGUscD0ocz1lLm9mZnNldCwwKSxkPTAsbT0wLGc9MDsxPT09aS5sZW5ndGg/KHA9aVswXSxkPTEsbT1jWzBdLGc9MCk6Mj09PWkubGVuZ3RoJiYocD1pWzBdLGQ9aVsxXSxtPWNbMF0sZz1jWzFdKSx0LmR0eXBlPW58fHUoZS5kYXRhKXx8NTEyNix0LmRpbWVuc2lvbj1kLGgoaT1HLmFsbG9jVHlwZSh0LmR0eXBlLHAqZCksZS5kYXRhLHAsZCxtLGcscyksYSh0LGksciksbz90LnBlcnNpc3RlbnREYXRhPWk6Ry5mcmVlVHlwZShpKX1lbHNlIGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKHQuZHR5cGU9NTEyMSx0LmRpbWVuc2lvbj1pLGEodCxlLHIpLG8mJih0LnBlcnNpc3RlbnREYXRhPW5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGUpKSkpfWZ1bmN0aW9uIHMocil7ZS5idWZmZXJDb3VudC0tLG4ociksdC5kZWxldGVCdWZmZXIoci5idWZmZXIpLHIuYnVmZmVyPW51bGwsZGVsZXRlIHBbci5pZF19dmFyIGM9MCxwPXt9O2kucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0LmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuYnVmZmVyKX0saS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ModGhpcyl9O3ZhciBkPVtdO3JldHVybiByLnByb2ZpbGUmJihlLmdldFRvdGFsQnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QrPXBbZV0uc3RhdHMuc2l6ZX0pKSx0fSkse2NyZWF0ZTpmdW5jdGlvbihuLGEsYyxkKXtmdW5jdGlvbiBtKGUpe3ZhciBuPTM1MDQ0LGk9bnVsbCxhPTAscz0wLGM9MTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8VyhlKXx8bChlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2k9ZToibnVtYmVyIj09dHlwZW9mIGU/YT0wfGU6ZSYmKCJkYXRhImluIGUmJihpPWUuZGF0YSksInVzYWdlImluIGUmJihuPVFbZS51c2FnZV0pLCJ0eXBlImluIGUmJihzPUtbZS50eXBlXSksImRpbWVuc2lvbiJpbiBlJiYoYz0wfGUuZGltZW5zaW9uKSwibGVuZ3RoImluIGUmJihhPTB8ZS5sZW5ndGgpKSxnLmJpbmQoKSxpP28oZyxpLG4scyxjLGQpOihhJiZ0LmJ1ZmZlckRhdGEoZy50eXBlLGEsbiksZy5kdHlwZT1zfHw1MTIxLGcudXNhZ2U9bixnLmRpbWVuc2lvbj1jLGcuYnl0ZUxlbmd0aD1hKSxyLnByb2ZpbGUmJihnLnN0YXRzLnNpemU9Zy5ieXRlTGVuZ3RoKmV0W2cuZHR5cGVdKSxtfWUuYnVmZmVyQ291bnQrKzt2YXIgZz1uZXcgaShhKTtyZXR1cm4gcFtnLmlkXT1nLGN8fG0obiksbS5fcmVnbFR5cGU9ImJ1ZmZlciIsbS5fYnVmZmVyPWcsbS5zdWJkYXRhPWZ1bmN0aW9uKGUscil7dmFyIG4saT0wfChyfHwwKTtpZihnLmJpbmQoKSxXKGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpdC5idWZmZXJTdWJEYXRhKGcudHlwZSxpLGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMDxlLmxlbmd0aClpZigibnVtYmVyIj09dHlwZW9mIGVbMF0pe3ZhciBhPUcuYWxsb2NUeXBlKGcuZHR5cGUsZS5sZW5ndGgpO2YoYSxlKSx0LmJ1ZmZlclN1YkRhdGEoZy50eXBlLGksYSksRy5mcmVlVHlwZShhKX1lbHNlKEFycmF5LmlzQXJyYXkoZVswXSl8fFcoZVswXSkpJiYobj10dChlKSxhPSQoZSxuLGcuZHR5cGUpLHQuYnVmZmVyU3ViRGF0YShnLnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpKX1lbHNlIGlmKGwoZSkpe249ZS5zaGFwZTt2YXIgbz1lLnN0cmlkZSxzPWE9MCxjPTAscD0wOzE9PT1uLmxlbmd0aD8oYT1uWzBdLHM9MSxjPW9bMF0scD0wKToyPT09bi5sZW5ndGgmJihhPW5bMF0scz1uWzFdLGM9b1swXSxwPW9bMV0pLG49QXJyYXkuaXNBcnJheShlLmRhdGEpP2cuZHR5cGU6dShlLmRhdGEpLGgobj1HLmFsbG9jVHlwZShuLGEqcyksZS5kYXRhLGEscyxjLHAsZS5vZmZzZXQpLHQuYnVmZmVyU3ViRGF0YShnLnR5cGUsaSxuKSxHLmZyZWVUeXBlKG4pfXJldHVybiBtfSxyLnByb2ZpbGUmJihtLnN0YXRzPWcuc3RhdHMpLG0uZGVzdHJveT1mdW5jdGlvbigpe3MoZyl9LG19LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBpKHQpKSxyLmJpbmQoKSxvKHIsZSwzNTA0MCwwLDEsITEpLHJ9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7ZC5wdXNoKHQpfSxjbGVhcjpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChzKSxkLmZvckVhY2gocyl9LGdldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fYnVmZmVyIGluc3RhbmNlb2YgaT90Ll9idWZmZXI6bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe1gocCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0LmJpbmRCdWZmZXIoZS50eXBlLGUuYnVmZmVyKSx0LmJ1ZmZlckRhdGEoZS50eXBlLGUucGVyc2lzdGVudERhdGF8fGUuYnl0ZUxlbmd0aCxlLnVzYWdlKX0pKX0sX2luaXRCdWZmZXI6b319ZnVuY3Rpb24gZCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3RoaXMuaWQ9YysrLHNbdGhpcy5pZF09dGhpcyx0aGlzLmJ1ZmZlcj10LHRoaXMucHJpbVR5cGU9NCx0aGlzLnR5cGU9dGhpcy52ZXJ0Q291bnQ9MH1mdW5jdGlvbiBhKG4saSxhLG8scyxjLHUpe3ZhciBmO2lmKG4uYnVmZmVyLmJpbmQoKSxpPygoZj11KXx8VyhpKSYmKCFsKGkpfHxXKGkuZGF0YSkpfHwoZj1lLm9lc19lbGVtZW50X2luZGV4X3VpbnQ/NTEyNTo1MTIzKSxyLl9pbml0QnVmZmVyKG4uYnVmZmVyLGksYSxmLDMpKToodC5idWZmZXJEYXRhKDM0OTYzLGMsYSksbi5idWZmZXIuZHR5cGU9Znx8NTEyMSxuLmJ1ZmZlci51c2FnZT1hLG4uYnVmZmVyLmRpbWVuc2lvbj0zLG4uYnVmZmVyLmJ5dGVMZW5ndGg9YyksZj11LCF1KXtzd2l0Y2gobi5idWZmZXIuZHR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjA6Zj01MTIxO2JyZWFrO2Nhc2UgNTEyMzpjYXNlIDUxMjI6Zj01MTIzO2JyZWFrO2Nhc2UgNTEyNTpjYXNlIDUxMjQ6Zj01MTI1fW4uYnVmZmVyLmR0eXBlPWZ9bi50eXBlPWYsMD4oaT1zKSYmKGk9bi5idWZmZXIuYnl0ZUxlbmd0aCw1MTIzPT09Zj9pPj49MTo1MTI1PT09ZiYmKGk+Pj0yKSksbi52ZXJ0Q291bnQ9aSxpPW8sMD5vJiYoaT00LDE9PT0obz1uLmJ1ZmZlci5kaW1lbnNpb24pJiYoaT0wKSwyPT09byYmKGk9MSksMz09PW8mJihpPTQpKSxuLnByaW1UeXBlPWl9ZnVuY3Rpb24gbyh0KXtuLmVsZW1lbnRzQ291bnQtLSxkZWxldGUgc1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH12YXIgcz17fSxjPTAsdT17dWludDg6NTEyMSx1aW50MTY6NTEyM307ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYodS51aW50MzI9NTEyNSksaS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuYnVmZmVyLmJpbmQoKX07dmFyIGY9W107cmV0dXJue2NyZWF0ZTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHModCl7aWYodClpZigibnVtYmVyIj09dHlwZW9mIHQpYyh0KSxmLnByaW1UeXBlPTQsZi52ZXJ0Q291bnQ9MHx0LGYudHlwZT01MTIxO2Vsc2V7dmFyIGU9bnVsbCxyPTM1MDQ0LG49LTEsaT0tMSxvPTAsaD0wO0FycmF5LmlzQXJyYXkodCl8fFcodCl8fGwodCk/ZT10OigiZGF0YSJpbiB0JiYoZT10LmRhdGEpLCJ1c2FnZSJpbiB0JiYocj1RW3QudXNhZ2VdKSwicHJpbWl0aXZlImluIHQmJihuPXJ0W3QucHJpbWl0aXZlXSksImNvdW50ImluIHQmJihpPTB8dC5jb3VudCksInR5cGUiaW4gdCYmKGg9dVt0LnR5cGVdKSwibGVuZ3RoImluIHQ/bz0wfHQubGVuZ3RoOihvPWksNTEyMz09PWh8fDUxMjI9PT1oP28qPTI6NTEyNSE9PWgmJjUxMjQhPT1ofHwobyo9NCkpKSxhKGYsZSxyLG4saSxvLGgpfWVsc2UgYygpLGYucHJpbVR5cGU9NCxmLnZlcnRDb3VudD0wLGYudHlwZT01MTIxO3JldHVybiBzfXZhciBjPXIuY3JlYXRlKG51bGwsMzQ5NjMsITApLGY9bmV3IGkoYy5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50Kysscyh0KSxzLl9yZWdsVHlwZT0iZWxlbWVudHMiLHMuX2VsZW1lbnRzPWYscy5zdWJkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMuc3ViZGF0YSh0LGUpLHN9LHMuZGVzdHJveT1mdW5jdGlvbigpe28oZil9LHN9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1mLnBvcCgpO3JldHVybiBlfHwoZT1uZXcgaShyLmNyZWF0ZShudWxsLDM0OTYzLCEwLCExKS5fYnVmZmVyKSksYShlLHQsMzUwNDAsLTEsLTEsMCwwKSxlfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2YucHVzaCh0KX0sZ2V0RWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe1gocykuZm9yRWFjaChvKX19fWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPUcuYWxsb2NUeXBlKDUxMjMsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYoMS8wPT09dFtyXSllW3JdPTMxNzQ0O2Vsc2UgaWYoLTEvMD09PXRbcl0pZVtyXT02NDUxMjtlbHNle250WzBdPXRbcl07dmFyIG49KGE9aXRbMF0pPj4+MzE8PDE1LGk9KGE8PDE+Pj4yNCktMTI3LGE9YT4+MTMmMTAyMztlW3JdPS0yND5pP246LTE0Pmk/bisoYSsxMDI0Pj4tMTQtaSk6MTU8aT9uKzMxNzQ0Om4rKGkrMTU8PDEwKSthfXJldHVybiBlfWZ1bmN0aW9uIGcodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFcodCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4iW29iamVjdCAiK3QrIl0ifWZ1bmN0aW9uIHkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJigwPT09dC5sZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgdFswXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGh8fCFnKHRbMF0pKX1mdW5jdGlvbiBiKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1iKHQpO3JldHVybiAwPD1kdC5pbmRleE9mKGUpfHwoeSh0KXx8eCh0KXx8bCh0KSl9ZnVuY3Rpb24gdyh0LGUpezM2MTkzPT09dC50eXBlPyh0LmRhdGE9bShlKSxHLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBUKHQsZSxyLG4saSxhKXtpZih0PXZvaWQgMCE9PWd0W3RdP2d0W3RdOnN0W3RdKm10W2VdLGEmJih0Kj02KSxpKXtmb3Iobj0wOzE8PXI7KW4rPXQqcipyLHIvPTI7cmV0dXJuIG59cmV0dXJuIHQqcipufWZ1bmN0aW9uIGsodCxlLHIsbixpLGEsbyl7ZnVuY3Rpb24gcygpe3RoaXMuZm9ybWF0PXRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLnR5cGU9NTEyMSx0aGlzLmZsaXBZPXRoaXMucHJlbXVsdGlwbHlBbHBoYT10aGlzLmNvbXByZXNzZWQ9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLmNvbG9yU3BhY2U9Mzc0NDQsdGhpcy5jaGFubmVscz10aGlzLmhlaWdodD10aGlzLndpZHRoPTB9ZnVuY3Rpb24gYyh0LGUpe3QuaW50ZXJuYWxmb3JtYXQ9ZS5pbnRlcm5hbGZvcm1hdCx0LmZvcm1hdD1lLmZvcm1hdCx0LnR5cGU9ZS50eXBlLHQuY29tcHJlc3NlZD1lLmNvbXByZXNzZWQsdC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSx0LmZsaXBZPWUuZmxpcFksdC51bnBhY2tBbGlnbm1lbnQ9ZS51bnBhY2tBbGlnbm1lbnQsdC5jb2xvclNwYWNlPWUuY29sb3JTcGFjZSx0LndpZHRoPWUud2lkdGgsdC5oZWlnaHQ9ZS5oZWlnaHQsdC5jaGFubmVscz1lLmNoYW5uZWxzfWZ1bmN0aW9uIHUodCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmUpeyJwcmVtdWx0aXBseUFscGhhImluIGUmJih0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhKSwiZmxpcFkiaW4gZSYmKHQuZmxpcFk9ZS5mbGlwWSksImFsaWdubWVudCJpbiBlJiYodC51bnBhY2tBbGlnbm1lbnQ9ZS5hbGlnbm1lbnQpLCJjb2xvclNwYWNlImluIGUmJih0LmNvbG9yU3BhY2U9SFtlLmNvbG9yU3BhY2VdKSwidHlwZSJpbiBlJiYodC50eXBlPXFbZS50eXBlXSk7dmFyIHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5jaGFubmVscyxhPSExOyJzaGFwZSJpbiBlPyhyPWUuc2hhcGVbMF0sbj1lLnNoYXBlWzFdLDM9PT1lLnNoYXBlLmxlbmd0aCYmKGk9ZS5zaGFwZVsyXSxhPSEwKSk6KCJyYWRpdXMiaW4gZSYmKHI9bj1lLnJhZGl1cyksIndpZHRoImluIGUmJihyPWUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKG49ZS5oZWlnaHQpLCJjaGFubmVscyJpbiBlJiYoaT1lLmNoYW5uZWxzLGE9ITApKSx0LndpZHRoPTB8cix0LmhlaWdodD0wfG4sdC5jaGFubmVscz0wfGkscj0hMSwiZm9ybWF0ImluIGUmJihyPWUuZm9ybWF0LG49dC5pbnRlcm5hbGZvcm1hdD1ZW3JdLHQuZm9ybWF0PWR0W25dLHIgaW4gcSYmISgidHlwZSJpbiBlKSYmKHQudHlwZT1xW3JdKSxyIGluIEsmJih0LmNvbXByZXNzZWQ9ITApLHI9ITApLCFhJiZyP3QuY2hhbm5lbHM9c3RbdC5mb3JtYXRdOmEmJiFyJiZ0LmNoYW5uZWxzIT09b3RbdC5mb3JtYXRdJiYodC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFt0LmNoYW5uZWxzXSl9fWZ1bmN0aW9uIGYoZSl7dC5waXhlbFN0b3JlaSgzNzQ0MCxlLmZsaXBZKSx0LnBpeGVsU3RvcmVpKDM3NDQxLGUucHJlbXVsdGlwbHlBbHBoYSksdC5waXhlbFN0b3JlaSgzNzQ0MyxlLmNvbG9yU3BhY2UpLHQucGl4ZWxTdG9yZWkoMzMxNyxlLnVucGFja0FsaWdubWVudCl9ZnVuY3Rpb24gaCgpe3MuY2FsbCh0aGlzKSx0aGlzLnlPZmZzZXQ9dGhpcy54T2Zmc2V0PTAsdGhpcy5kYXRhPW51bGwsdGhpcy5uZWVkc0ZyZWU9ITEsdGhpcy5lbGVtZW50PW51bGwsdGhpcy5uZWVkc0NvcHk9ITF9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPW51bGw7aWYoXyhlKT9yPWU6ZSYmKHUodCxlKSwieCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSwieSJpbiBlJiYodC55T2Zmc2V0PTB8ZS55KSxfKGUuZGF0YSkmJihyPWUuZGF0YSkpLGUuY29weSl7dmFyIG49aS52aWV3cG9ydFdpZHRoLGE9aS52aWV3cG9ydEhlaWdodDt0LndpZHRoPXQud2lkdGh8fG4tdC54T2Zmc2V0LHQuaGVpZ2h0PXQuaGVpZ2h0fHxhLXQueU9mZnNldCx0Lm5lZWRzQ29weT0hMH1lbHNlIGlmKHIpe2lmKFcocikpdC5jaGFubmVscz10LmNoYW5uZWxzfHw0LHQuZGF0YT1yLCJ0eXBlImluIGV8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHxKW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKV0pO2Vsc2UgaWYoeShyKSl7c3dpdGNoKHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCxhPShuPXIpLmxlbmd0aCx0LnR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjM6Y2FzZSA1MTI1OmNhc2UgNTEyNjooYT1HLmFsbG9jVHlwZSh0LnR5cGUsYSkpLnNldChuKSx0LmRhdGE9YTticmVhaztjYXNlIDM2MTkzOnQuZGF0YT1tKG4pfXQuYWxpZ25tZW50PTEsdC5uZWVkc0ZyZWU9ITB9ZWxzZSBpZihsKHIpKXtuPXIuZGF0YSxBcnJheS5pc0FycmF5KG4pfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8SltPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobildKTthPXIuc2hhcGU7dmFyIG8scyxjLGYsaD1yLnN0cmlkZTszPT09YS5sZW5ndGg/KGM9YVsyXSxmPWhbMl0pOmY9Yz0xLG89YVswXSxzPWFbMV0sYT1oWzBdLGg9aFsxXSx0LmFsaWdubWVudD0xLHQud2lkdGg9byx0LmhlaWdodD1zLHQuY2hhbm5lbHM9Yyx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2NdLHQubmVlZHNGcmVlPSEwLG89ZixyPXIub2Zmc2V0LGM9dC53aWR0aCxmPXQuaGVpZ2h0LHM9dC5jaGFubmVscztmb3IodmFyIHA9Ry5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYypmKnMpLGQ9MCx2PTA7djxmOysrdilmb3IodmFyIFQ9MDtUPGM7KytUKWZvcih2YXIgaz0wO2s8czsrK2spcFtkKytdPW5bYSpUK2gqditvKmsrcl07dyh0LHApfWVsc2UgaWYoYihyKT09PWx0fHxiKHIpPT09Y3R8fGIocik9PT11dCliKHIpPT09bHR8fGIocik9PT1jdD90LmVsZW1lbnQ9cjp0LmVsZW1lbnQ9ci5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09ZnQpdC5lbGVtZW50PXIsdC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1odCl0LmVsZW1lbnQ9cix0LndpZHRoPXIubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PXIubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09cHQpdC5lbGVtZW50PXIsdC53aWR0aD1yLnZpZGVvV2lkdGgsdC5oZWlnaHQ9ci52aWRlb0hlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih4KHIpKXtmb3Iobj10LndpZHRofHxyWzBdLmxlbmd0aCxhPXQuaGVpZ2h0fHxyLmxlbmd0aCxoPXQuY2hhbm5lbHMsaD1nKHJbMF1bMF0pP2h8fHJbMF1bMF0ubGVuZ3RoOmh8fDEsbz1aLnNoYXBlKHIpLGM9MSxmPTA7ZjxvLmxlbmd0aDsrK2YpYyo9b1tmXTtjPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMpLFouZmxhdHRlbihyLG8sIiIsYyksdyh0LGMpLHQuYWxpZ25tZW50PTEsdC53aWR0aD1uLHQuaGVpZ2h0PWEsdC5jaGFubmVscz1oLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbaF0sdC5uZWVkc0ZyZWU9ITB9fWVsc2UgdC53aWR0aD10LndpZHRofHwxLHQuaGVpZ2h0PXQuaGVpZ2h0fHwxLHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NH1mdW5jdGlvbiBkKGUscixpLGEsbyl7dmFyIHM9ZS5lbGVtZW50LGw9ZS5kYXRhLGM9ZS5pbnRlcm5hbGZvcm1hdCx1PWUuZm9ybWF0LGg9ZS50eXBlLHA9ZS53aWR0aCxkPWUuaGVpZ2h0O2YoZSkscz90LnRleFN1YkltYWdlMkQocixvLGksYSx1LGgscyk6ZS5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleFN1YkltYWdlMkQocixvLGksYSxjLHAsZCxsKTplLm5lZWRzQ29weT8obigpLHQuY29weVRleFN1YkltYWdlMkQocixvLGksYSxlLnhPZmZzZXQsZS55T2Zmc2V0LHAsZCkpOnQudGV4U3ViSW1hZ2UyRChyLG8saSxhLHAsZCx1LGgsbCl9ZnVuY3Rpb24gdigpe3JldHVybiBtdC5wb3AoKXx8bmV3IGh9ZnVuY3Rpb24gayh0KXt0Lm5lZWRzRnJlZSYmRy5mcmVlVHlwZSh0LmRhdGEpLGguY2FsbCh0KSxtdC5wdXNoKHQpfWZ1bmN0aW9uIEEoKXtzLmNhbGwodGhpcyksdGhpcy5nZW5NaXBtYXBzPSExLHRoaXMubWlwbWFwSGludD00MzUyLHRoaXMubWlwbWFzaz0wLHRoaXMuaW1hZ2VzPUFycmF5KDE2KX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10LmltYWdlc1swXT12KCk7dC5taXBtYXNrPTEsbi53aWR0aD10LndpZHRoPWUsbi5oZWlnaHQ9dC5oZWlnaHQ9cixuLmNoYW5uZWxzPXQuY2hhbm5lbHM9NH1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9bnVsbDtpZihfKGUpKWMocj10LmltYWdlc1swXT12KCksdCkscChyLGUpLHQubWlwbWFzaz0xO2Vsc2UgaWYodSh0LGUpLEFycmF5LmlzQXJyYXkoZS5taXBtYXApKWZvcih2YXIgbj1lLm1pcG1hcCxpPTA7aTxuLmxlbmd0aDsrK2kpYyhyPXQuaW1hZ2VzW2ldPXYoKSx0KSxyLndpZHRoPj49aSxyLmhlaWdodD4+PWkscChyLG5baV0pLHQubWlwbWFza3w9MTw8aTtlbHNlIGMocj10LmltYWdlc1swXT12KCksdCkscChyLGUpLHQubWlwbWFzaz0xO2ModCx0LmltYWdlc1swXSl9ZnVuY3Rpb24gRShlLHIpe2Zvcih2YXIgaT1lLmltYWdlcyxhPTA7YTxpLmxlbmd0aCYmaVthXTsrK2Epe3ZhciBvPWlbYV0scz1yLGw9YSxjPW8uZWxlbWVudCx1PW8uZGF0YSxoPW8uaW50ZXJuYWxmb3JtYXQscD1vLmZvcm1hdCxkPW8udHlwZSxtPW8ud2lkdGgsZz1vLmhlaWdodDtmKG8pLGM/dC50ZXhJbWFnZTJEKHMsbCxwLHAsZCxjKTpvLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4SW1hZ2UyRChzLGwsaCxtLGcsMCx1KTpvLm5lZWRzQ29weT8obigpLHQuY29weVRleEltYWdlMkQocyxsLHAsby54T2Zmc2V0LG8ueU9mZnNldCxtLGcsMCkpOnQudGV4SW1hZ2UyRChzLGwscCxtLGcsMCxwLGQsdXx8bnVsbCl9fWZ1bmN0aW9uIEwoKXt2YXIgdD1ndC5wb3AoKXx8bmV3IEE7cy5jYWxsKHQpO2Zvcih2YXIgZT10Lm1pcG1hc2s9MDsxNj5lOysrZSl0LmltYWdlc1tlXT1udWxsO3JldHVybiB0fWZ1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQuaW1hZ2VzLHI9MDtyPGUubGVuZ3RoOysrcillW3JdJiZrKGVbcl0pLGVbcl09bnVsbDtndC5wdXNoKHQpfWZ1bmN0aW9uIFAoKXt0aGlzLm1hZ0ZpbHRlcj10aGlzLm1pbkZpbHRlcj05NzI4LHRoaXMud3JhcFQ9dGhpcy53cmFwUz0zMzA3MSx0aGlzLmFuaXNvdHJvcGljPTEsdGhpcy5nZW5NaXBtYXBzPSExLHRoaXMubWlwbWFwSGludD00MzUyfWZ1bmN0aW9uIEkodCxlKXsibWluImluIGUmJih0Lm1pbkZpbHRlcj1WW2UubWluXSwwPD1hdC5pbmRleE9mKHQubWluRmlsdGVyKSYmISgiZmFjZXMiaW4gZSkmJih0Lmdlbk1pcG1hcHM9ITApKSwibWFnImluIGUmJih0Lm1hZ0ZpbHRlcj1VW2UubWFnXSk7dmFyIHI9dC53cmFwUyxuPXQud3JhcFQ7aWYoIndyYXAiaW4gZSl7dmFyIGk9ZS53cmFwOyJzdHJpbmciPT10eXBlb2YgaT9yPW49TltpXTpBcnJheS5pc0FycmF5KGkpJiYocj1OW2lbMF1dLG49TltpWzFdXSl9ZWxzZSJ3cmFwUyJpbiBlJiYocj1OW2Uud3JhcFNdKSwid3JhcFQiaW4gZSYmKG49TltlLndyYXBUXSk7aWYodC53cmFwUz1yLHQud3JhcFQ9biwiYW5pc290cm9waWMiaW4gZSYmKHQuYW5pc290cm9waWM9ZS5hbmlzb3Ryb3BpYyksIm1pcG1hcCJpbiBlKXtzd2l0Y2gocj0hMSx0eXBlb2YgZS5taXBtYXApe2Nhc2Uic3RyaW5nIjp0Lm1pcG1hcEhpbnQ9QltlLm1pcG1hcF0scj10Lmdlbk1pcG1hcHM9ITA7YnJlYWs7Y2FzZSJib29sZWFuIjpyPXQuZ2VuTWlwbWFwcz1lLm1pcG1hcDticmVhaztjYXNlIm9iamVjdCI6dC5nZW5NaXBtYXBzPSExLHI9ITB9IXJ8fCJtaW4iaW4gZXx8KHQubWluRmlsdGVyPTk5ODQpfX1mdW5jdGlvbiBPKHIsbil7dC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDEsci5taW5GaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLHIubWFnRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MixyLndyYXBTKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MyxyLndyYXBUKSxlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmdC50ZXhQYXJhbWV0ZXJpKG4sMzQwNDYsci5hbmlzb3Ryb3BpYyksci5nZW5NaXBtYXBzJiYodC5oaW50KDMzMTcwLHIubWlwbWFwSGludCksdC5nZW5lcmF0ZU1pcG1hcChuKSl9ZnVuY3Rpb24geihlKXtzLmNhbGwodGhpcyksdGhpcy5taXBtYXNrPTAsdGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMuaWQ9dnQrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy50YXJnZXQ9ZSx0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdGhpcy51bml0PS0xLHRoaXMuYmluZENvdW50PTAsdGhpcy50ZXhJbmZvPW5ldyBQLG8ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIEQoZSl7dC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSl9ZnVuY3Rpb24gUigpe3ZhciBlPWJ0WzBdO2U/dC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpOnQuYmluZFRleHR1cmUoMzU1MyxudWxsKX1mdW5jdGlvbiBGKGUpe3ZhciByPWUudGV4dHVyZSxuPWUudW5pdCxpPWUudGFyZ2V0OzA8PW4mJih0LmFjdGl2ZVRleHR1cmUoMzM5ODQrbiksdC5iaW5kVGV4dHVyZShpLG51bGwpLGJ0W25dPW51bGwpLHQuZGVsZXRlVGV4dHVyZShyKSxlLnRleHR1cmU9bnVsbCxlLnBhcmFtcz1udWxsLGUucGl4ZWxzPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSB5dFtlLmlkXSxhLnRleHR1cmVDb3VudC0tfXZhciBCPXsiZG9uJ3QgY2FyZSI6NDM1MiwiZG9udCBjYXJlIjo0MzUyLG5pY2U6NDM1NCxmYXN0OjQzNTN9LE49e3JlcGVhdDoxMDQ5NyxjbGFtcDozMzA3MSxtaXJyb3I6MzM2NDh9LFU9e25lYXJlc3Q6OTcyOCxsaW5lYXI6OTcyOX0sVj1qKHttaXBtYXA6OTk4NywibmVhcmVzdCBtaXBtYXAgbmVhcmVzdCI6OTk4NCwibGluZWFyIG1pcG1hcCBuZWFyZXN0Ijo5OTg1LCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiOjk5ODYsImxpbmVhciBtaXBtYXAgbGluZWFyIjo5OTg3fSxVKSxIPXtub25lOjAsYnJvd3NlcjozNzQ0NH0scT17dWludDg6NTEyMSxyZ2JhNDozMjgxOSxyZ2I1NjU6MzM2MzUsInJnYjUgYTEiOjMyODIwfSxZPXthbHBoYTo2NDA2LGx1bWluYW5jZTo2NDA5LCJsdW1pbmFuY2UgYWxwaGEiOjY0MTAscmdiOjY0MDcscmdiYTo2NDA4LHJnYmE0OjMyODU0LCJyZ2I1IGExIjozMjg1NSxyZ2I1NjU6MzYxOTR9LEs9e307ZS5leHRfc3JnYiYmKFkuc3JnYj0zNTkwNCxZLnNyZ2JhPTM1OTA2KSxlLm9lc190ZXh0dXJlX2Zsb2F0JiYocS5mbG9hdDMyPXEuZmxvYXQ9NTEyNiksZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiYocS5mbG9hdDE2PXFbImhhbGYgZmxvYXQiXT0zNjE5MyksZS53ZWJnbF9kZXB0aF90ZXh0dXJlJiYoaihZLHtkZXB0aDo2NDAyLCJkZXB0aCBzdGVuY2lsIjozNDA0MX0pLGoocSx7dWludDE2OjUxMjMsdWludDMyOjUxMjUsImRlcHRoIHN0ZW5jaWwiOjM0MDQyfSkpLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMmJmooSyx7InJnYiBzM3RjIGR4dDEiOjMzNzc2LCJyZ2JhIHMzdGMgZHh0MSI6MzM3NzcsInJnYmEgczN0YyBkeHQzIjozMzc3OCwicmdiYSBzM3RjIGR4dDUiOjMzNzc5fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjJiZqKEsseyJyZ2IgYXRjIjozNTk4NiwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGEiOjM1OTg3LCJyZ2JhIGF0YyBpbnRlcnBvbGF0ZWQgYWxwaGEiOjM0Nzk4fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMmJmooSyx7InJnYiBwdnJ0YyA0YnBwdjEiOjM1ODQwLCJyZ2IgcHZydGMgMmJwcHYxIjozNTg0MSwicmdiYSBwdnJ0YyA0YnBwdjEiOjM1ODQyLCJyZ2JhIHB2cnRjIDJicHB2MSI6MzU4NDN9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJiYoS1sicmdiIGV0YzEiXT0zNjE5Nik7dmFyIFE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRQYXJhbWV0ZXIoMzQ0NjcpKTtPYmplY3Qua2V5cyhLKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1LW3RdOzA8PVEuaW5kZXhPZihlKSYmKFlbdF09ZSl9KSk7dmFyICQ9T2JqZWN0LmtleXMoWSk7ci50ZXh0dXJlRm9ybWF0cz0kO3ZhciB0dD1bXTtPYmplY3Qua2V5cyhZKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0dFtZW3RdXT10fSkpO3ZhciBldD1bXTtPYmplY3Qua2V5cyhxKS5mb3JFYWNoKChmdW5jdGlvbih0KXtldFtxW3RdXT10fSkpO3ZhciBydD1bXTtPYmplY3Qua2V5cyhVKS5mb3JFYWNoKChmdW5jdGlvbih0KXtydFtVW3RdXT10fSkpO3ZhciBudD1bXTtPYmplY3Qua2V5cyhWKS5mb3JFYWNoKChmdW5jdGlvbih0KXtudFtWW3RdXT10fSkpO3ZhciBpdD1bXTtPYmplY3Qua2V5cyhOKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpdFtOW3RdXT10fSkpO3ZhciBkdD0kLnJlZHVjZSgoZnVuY3Rpb24odCxyKXt2YXIgbj1ZW3JdO3JldHVybiA2NDA5PT09bnx8NjQwNj09PW58fDY0MDk9PT1ufHw2NDEwPT09bnx8NjQwMj09PW58fDM0MDQxPT09bnx8ZS5leHRfc3JnYiYmKDM1OTA0PT09bnx8MzU5MDY9PT1uKT90W25dPW46MzI4NTU9PT1ufHwwPD1yLmluZGV4T2YoInJnYmEiKT90W25dPTY0MDg6dFtuXT02NDA3LHR9KSx7fSksbXQ9W10sZ3Q9W10sdnQ9MCx5dD17fSx4dD1yLm1heFRleHR1cmVVbml0cyxidD1BcnJheSh4dCkubWFwKChmdW5jdGlvbigpe3JldHVybiBudWxsfSkpO3JldHVybiBqKHoucHJvdG90eXBlLHtiaW5kOmZ1bmN0aW9uKCl7dGhpcy5iaW5kQ291bnQrPTE7dmFyIGU9dGhpcy51bml0O2lmKDA+ZSl7Zm9yKHZhciByPTA7cjx4dDsrK3Ipe3ZhciBuPWJ0W3JdO2lmKG4pe2lmKDA8bi5iaW5kQ291bnQpY29udGludWU7bi51bml0PS0xfWJ0W3JdPXRoaXMsZT1yO2JyZWFrfW8ucHJvZmlsZSYmYS5tYXhUZXh0dXJlVW5pdHM8ZSsxJiYoYS5tYXhUZXh0dXJlVW5pdHM9ZSsxKSx0aGlzLnVuaXQ9ZSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSh0aGlzLnRhcmdldCx0aGlzLnRleHR1cmUpfXJldHVybiBlfSx1bmJpbmQ6ZnVuY3Rpb24oKXstLXRoaXMuYmluZENvdW50fSxkZWNSZWY6ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJkYodGhpcyl9fSksby5wcm9maWxlJiYoYS5nZXRUb3RhbFRleHR1cmVTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMoeXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QrPXl0W2VdLnN0YXRzLnNpemV9KSksdH0pLHtjcmVhdGUyRDpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pLnRleEluZm87UC5jYWxsKHIpO3ZhciBhPUwoKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/TShhLDB8dCwibnVtYmVyIj09dHlwZW9mIGU/MHxlOjB8dCk6dD8oSShyLHQpLFMoYSx0KSk6TShhLDEsMSksci5nZW5NaXBtYXBzJiYoYS5taXBtYXNrPShhLndpZHRoPDwxKS0xKSxpLm1pcG1hc2s9YS5taXBtYXNrLGMoaSxhKSxpLmludGVybmFsZm9ybWF0PWEuaW50ZXJuYWxmb3JtYXQsbi53aWR0aD1hLndpZHRoLG4uaGVpZ2h0PWEuaGVpZ2h0LEQoaSksRShhLDM1NTMpLE8ociwzNTUzKSxSKCksQyhhKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9VChpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLndpZHRoLGEuaGVpZ2h0LHIuZ2VuTWlwbWFwcywhMSkpLG4uZm9ybWF0PXR0W2kuaW50ZXJuYWxmb3JtYXRdLG4udHlwZT1ldFtpLnR5cGVdLG4ubWFnPXJ0W3IubWFnRmlsdGVyXSxuLm1pbj1udFtyLm1pbkZpbHRlcl0sbi53cmFwUz1pdFtyLndyYXBTXSxuLndyYXBUPWl0W3Iud3JhcFRdLG59dmFyIGk9bmV3IHooMzU1Myk7cmV0dXJuIHl0W2kuaWRdPWksYS50ZXh0dXJlQ291bnQrKyxuKGUsciksbi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixhKXtlfD0wLHJ8PTAsYXw9MDt2YXIgbz12KCk7cmV0dXJuIGMobyxpKSxvLndpZHRoPTAsby5oZWlnaHQ9MCxwKG8sdCksby53aWR0aD1vLndpZHRofHwoaS53aWR0aD4+YSktZSxvLmhlaWdodD1vLmhlaWdodHx8KGkuaGVpZ2h0Pj5hKS1yLEQoaSksZChvLDM1NTMsZSxyLGEpLFIoKSxrKG8pLG59LG4ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIGE9MHxlLHM9MHxyfHxhO2lmKGE9PT1pLndpZHRoJiZzPT09aS5oZWlnaHQpcmV0dXJuIG47bi53aWR0aD1pLndpZHRoPWEsbi5oZWlnaHQ9aS5oZWlnaHQ9cyxEKGkpO2Zvcih2YXIgbD0wO2kubWlwbWFzaz4+bDsrK2wpe3ZhciBjPWE+PmwsdT1zPj5sO2lmKCFjfHwhdSlicmVhazt0LnRleEltYWdlMkQoMzU1MyxsLGkuZm9ybWF0LGMsdSwwLGkuZm9ybWF0LGkudHlwZSxudWxsKX1yZXR1cm4gUigpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1UKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEscywhMSwhMSkpLG59LG4uX3JlZ2xUeXBlPSJ0ZXh0dXJlMmQiLG4uX3RleHR1cmU9aSxvLnByb2ZpbGUmJihuLnN0YXRzPWkuc3RhdHMpLG4uZGVzdHJveT1mdW5jdGlvbigpe2kuZGVjUmVmKCl9LG59LGNyZWF0ZUN1YmU6ZnVuY3Rpb24oZSxyLG4saSxzLGwpe2Z1bmN0aW9uIGYodCxlLHIsbixpLGEpe3ZhciBzLGw9aC50ZXhJbmZvO2ZvcihQLmNhbGwobCkscz0wOzY+czsrK3MpbVtzXT1MKCk7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpaWYoZSlTKG1bMF0sdCksUyhtWzFdLGUpLFMobVsyXSxyKSxTKG1bM10sbiksUyhtWzRdLGkpLFMobVs1XSxhKTtlbHNlIGlmKEkobCx0KSx1KGgsdCksImZhY2VzImluIHQpZm9yKHQ9dC5mYWNlcyxzPTA7Nj5zOysrcyljKG1bc10saCksUyhtW3NdLHRbc10pO2Vsc2UgZm9yKHM9MDs2PnM7KytzKVMobVtzXSx0KX1lbHNlIGZvcih0PTB8dHx8MSxzPTA7Nj5zOysrcylNKG1bc10sdCx0KTtmb3IoYyhoLG1bMF0pLGgubWlwbWFzaz1sLmdlbk1pcG1hcHM/KG1bMF0ud2lkdGg8PDEpLTE6bVswXS5taXBtYXNrLGguaW50ZXJuYWxmb3JtYXQ9bVswXS5pbnRlcm5hbGZvcm1hdCxmLndpZHRoPW1bMF0ud2lkdGgsZi5oZWlnaHQ9bVswXS5oZWlnaHQsRChoKSxzPTA7Nj5zOysrcylFKG1bc10sMzQwNjkrcyk7Zm9yKE8obCwzNDA2NyksUigpLG8ucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1UKGguaW50ZXJuYWxmb3JtYXQsaC50eXBlLGYud2lkdGgsZi5oZWlnaHQsbC5nZW5NaXBtYXBzLCEwKSksZi5mb3JtYXQ9dHRbaC5pbnRlcm5hbGZvcm1hdF0sZi50eXBlPWV0W2gudHlwZV0sZi5tYWc9cnRbbC5tYWdGaWx0ZXJdLGYubWluPW50W2wubWluRmlsdGVyXSxmLndyYXBTPWl0W2wud3JhcFNdLGYud3JhcFQ9aXRbbC53cmFwVF0scz0wOzY+czsrK3MpQyhtW3NdKTtyZXR1cm4gZn12YXIgaD1uZXcgeigzNDA2Nyk7eXRbaC5pZF09aCxhLmN1YmVDb3VudCsrO3ZhciBtPUFycmF5KDYpO3JldHVybiBmKGUscixuLGkscyxsKSxmLnN1YmltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cnw9MCxufD0wLGl8PTA7dmFyIGE9digpO3JldHVybiBjKGEsaCksYS53aWR0aD0wLGEuaGVpZ2h0PTAscChhLGUpLGEud2lkdGg9YS53aWR0aHx8KGgud2lkdGg+PmkpLXIsYS5oZWlnaHQ9YS5oZWlnaHR8fChoLmhlaWdodD4+aSktbixEKGgpLGQoYSwzNDA2OSt0LHIsbixpKSxSKCksayhhKSxmfSxmLnJlc2l6ZT1mdW5jdGlvbihlKXtpZigoZXw9MCkhPT1oLndpZHRoKXtmLndpZHRoPWgud2lkdGg9ZSxmLmhlaWdodD1oLmhlaWdodD1lLEQoaCk7Zm9yKHZhciByPTA7Nj5yOysrcilmb3IodmFyIG49MDtoLm1pcG1hc2s+Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStyLG4saC5mb3JtYXQsZT4+bixlPj5uLDAsaC5mb3JtYXQsaC50eXBlLG51bGwpO3JldHVybiBSKCksby5wcm9maWxlJiYoaC5zdGF0cy5zaXplPVQoaC5pbnRlcm5hbGZvcm1hdCxoLnR5cGUsZi53aWR0aCxmLmhlaWdodCwhMSwhMCkpLGZ9fSxmLl9yZWdsVHlwZT0idGV4dHVyZUN1YmUiLGYuX3RleHR1cmU9aCxvLnByb2ZpbGUmJihmLnN0YXRzPWguc3RhdHMpLGYuZGVzdHJveT1mdW5jdGlvbigpe2guZGVjUmVmKCl9LGZ9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx4dDsrK2UpdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSxidFtlXT1udWxsO1goeXQpLmZvckVhY2goRiksYS5jdWJlQ291bnQ9MCxhLnRleHR1cmVDb3VudD0wfSxnZXRUZXh0dXJlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx4dDsrK2Upe3ZhciByPWJ0W2VdO3ImJihyLmJpbmRDb3VudD0wLHIudW5pdD0tMSxidFtlXT1udWxsKX1YKHl0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpO2Zvcih2YXIgcj0wOzMyPnI7KytyKWlmKDAhPShlLm1pcG1hc2smMTw8cikpaWYoMzU1Mz09PWUudGFyZ2V0KXQudGV4SW1hZ2UyRCgzNTUzLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDs2Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStuLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7TyhlLnRleEluZm8sZS50YXJnZXQpfSkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx4dDsrK2Upe3ZhciByPWJ0W2VdO3ImJihyLmJpbmRDb3VudD0wLHIudW5pdD0tMSxidFtlXT1udWxsKSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLHQuYmluZFRleHR1cmUoMzQwNjcsbnVsbCl9fX19ZnVuY3Rpb24gQSh0LGUscixuLGksYSl7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy50YXJnZXQ9dCx0aGlzLnRleHR1cmU9ZSx0aGlzLnJlbmRlcmJ1ZmZlcj1yO3ZhciBuPXQ9MDtlPyh0PWUud2lkdGgsbj1lLmhlaWdodCk6ciYmKHQ9ci53aWR0aCxuPXIuaGVpZ2h0KSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBzKHQpe3QmJih0LnRleHR1cmUmJnQudGV4dHVyZS5fdGV4dHVyZS5kZWNSZWYoKSx0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5kZWNSZWYoKSl9ZnVuY3Rpb24gbCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUuX3RleHR1cmUucmVmQ291bnQrPTE6dC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudCs9MSl9ZnVuY3Rpb24gYyhlLHIpe3ImJihyLnRleHR1cmU/dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxlLHIudGFyZ2V0LHIudGV4dHVyZS5fdGV4dHVyZS50ZXh0dXJlLDApOnQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsZSwzNjE2MSxyLnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlbmRlcmJ1ZmZlcikpfWZ1bmN0aW9uIHUodCl7dmFyIGU9MzU1MyxyPW51bGwsbj1udWxsLGk9dDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJihpPXQuZGF0YSwidGFyZ2V0ImluIHQmJihlPTB8dC50YXJnZXQpKSwidGV4dHVyZTJkIj09PSh0PWkuX3JlZ2xUeXBlKXx8InRleHR1cmVDdWJlIj09PXQ/cj1pOiJyZW5kZXJidWZmZXIiPT09dCYmKG49aSxlPTM2MTYxKSxuZXcgbyhlLHIsbil9ZnVuY3Rpb24gZih0LGUscixhLHMpe3JldHVybiByPygodD1uLmNyZWF0ZTJEKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphLHR5cGU6c30pKS5fdGV4dHVyZS5yZWZDb3VudD0wLG5ldyBvKDM1NTMsdCxudWxsKSk6KCh0PWkuY3JlYXRlKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphfSkpLl9yZW5kZXJidWZmZXIucmVmQ291bnQ9MCxuZXcgbygzNjE2MSxudWxsLHQpKX1mdW5jdGlvbiBoKHQpe3JldHVybiB0JiYodC50ZXh0dXJlfHx0LnJlbmRlcmJ1ZmZlcil9ZnVuY3Rpb24gcCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUucmVzaXplKGUscik6dC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLnJlc2l6ZShlLHIpLHQud2lkdGg9ZSx0LmhlaWdodD1yKX1mdW5jdGlvbiBkKCl7dGhpcy5pZD1UKyssa1t0aGlzLmlkXT10aGlzLHRoaXMuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCx0aGlzLmNvbG9yQXR0YWNobWVudHM9W10sdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PXRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5kZXB0aEF0dGFjaG1lbnQ9bnVsbH1mdW5jdGlvbiBtKHQpe3QuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKHMpLHModC5kZXB0aEF0dGFjaG1lbnQpLHModC5zdGVuY2lsQXR0YWNobWVudCkscyh0LmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpfWZ1bmN0aW9uIGcoZSl7dC5kZWxldGVGcmFtZWJ1ZmZlcihlLmZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyPW51bGwsYS5mcmFtZWJ1ZmZlckNvdW50LS0sZGVsZXRlIGtbZS5pZF19ZnVuY3Rpb24gdihlKXt2YXIgbjt0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlLmZyYW1lYnVmZmVyKTt2YXIgaT1lLmNvbG9yQXR0YWNobWVudHM7Zm9yKG49MDtuPGkubGVuZ3RoOysrbiljKDM2MDY0K24saVtuXSk7Zm9yKG49aS5sZW5ndGg7bjxyLm1heENvbG9yQXR0YWNobWVudHM7KytuKXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQrbiwzNTUzLG51bGwsMCk7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjEyOCwzNTUzLG51bGwsMCksYygzNjA5NixlLmRlcHRoQXR0YWNobWVudCksYygzNjEyOCxlLnN0ZW5jaWxBdHRhY2htZW50KSxjKDMzMzA2LGUuZGVwdGhTdGVuY2lsQXR0YWNobWVudCksdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSx0LmlzQ29udGV4dExvc3QoKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx4Lm5leHQ/eC5uZXh0LmZyYW1lYnVmZmVyOm51bGwpLHguY3VyPXgubmV4dCx0LmdldEVycm9yKCl9ZnVuY3Rpb24geSh0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgaSxhPTAsbz0wLHM9ITAsYz0hMDtpPW51bGw7dmFyIHA9ITAsZD0icmdiYSIsZz0idWludDgiLHk9MSx4PW51bGwsdz1udWxsLFQ9bnVsbCxrPSExOyJudW1iZXIiPT10eXBlb2YgdD8oYT0wfHQsbz0wfGV8fGEpOnQ/KCJzaGFwZSJpbiB0PyhhPShvPXQuc2hhcGUpWzBdLG89b1sxXSk6KCJyYWRpdXMiaW4gdCYmKGE9bz10LnJhZGl1cyksIndpZHRoImluIHQmJihhPXQud2lkdGgpLCJoZWlnaHQiaW4gdCYmKG89dC5oZWlnaHQpKSwoImNvbG9yImluIHR8fCJjb2xvcnMiaW4gdCkmJihpPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkoaSkpLGl8fCgiY29sb3JDb3VudCJpbiB0JiYoeT0wfHQuY29sb3JDb3VudCksImNvbG9yVGV4dHVyZSJpbiB0JiYocD0hIXQuY29sb3JUZXh0dXJlLGQ9InJnYmE0IiksImNvbG9yVHlwZSJpbiB0JiYoZz10LmNvbG9yVHlwZSwhcCkmJigiaGFsZiBmbG9hdCI9PT1nfHwiZmxvYXQxNiI9PT1nP2Q9InJnYmExNmYiOiJmbG9hdCIhPT1nJiYiZmxvYXQzMiIhPT1nfHwoZD0icmdiYTMyZiIpKSwiY29sb3JGb3JtYXQiaW4gdCYmKGQ9dC5jb2xvckZvcm1hdCwwPD1iLmluZGV4T2YoZCk/cD0hMDowPD1fLmluZGV4T2YoZCkmJihwPSExKSkpLCgiZGVwdGhUZXh0dXJlImluIHR8fCJkZXB0aFN0ZW5jaWxUZXh0dXJlImluIHQpJiYoaz0hKCF0LmRlcHRoVGV4dHVyZSYmIXQuZGVwdGhTdGVuY2lsVGV4dHVyZSkpLCJkZXB0aCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aD9zPXQuZGVwdGg6KHg9dC5kZXB0aCxjPSExKSksInN0ZW5jaWwiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuc3RlbmNpbD9jPXQuc3RlbmNpbDoodz10LnN0ZW5jaWwscz0hMSkpLCJkZXB0aFN0ZW5jaWwiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuZGVwdGhTdGVuY2lsP3M9Yz10LmRlcHRoU3RlbmNpbDooVD10LmRlcHRoU3RlbmNpbCxjPXM9ITEpKSk6YT1vPTE7dmFyIEE9bnVsbCxNPW51bGwsUz1udWxsLEU9bnVsbDtpZihBcnJheS5pc0FycmF5KGkpKUE9aS5tYXAodSk7ZWxzZSBpZihpKUE9W3UoaSldO2Vsc2UgZm9yKEE9QXJyYXkoeSksaT0wO2k8eTsrK2kpQVtpXT1mKGEsbyxwLGQsZyk7Zm9yKGE9YXx8QVswXS53aWR0aCxvPW98fEFbMF0uaGVpZ2h0LHg/TT11KHgpOnMmJiFjJiYoTT1mKGEsbyxrLCJkZXB0aCIsInVpbnQzMiIpKSx3P1M9dSh3KTpjJiYhcyYmKFM9ZihhLG8sITEsInN0ZW5jaWwiLCJ1aW50OCIpKSxUP0U9dShUKToheCYmIXcmJmMmJnMmJihFPWYoYSxvLGssImRlcHRoIHN0ZW5jaWwiLCJkZXB0aCBzdGVuY2lsIikpLHM9bnVsbCxpPTA7aTxBLmxlbmd0aDsrK2kpbChBW2ldKSxBW2ldJiZBW2ldLnRleHR1cmUmJihjPXh0W0FbaV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXRdKmJ0W0FbaV0udGV4dHVyZS5fdGV4dHVyZS50eXBlXSxudWxsPT09cyYmKHM9YykpO3JldHVybiBsKE0pLGwoUyksbChFKSxtKG4pLG4ud2lkdGg9YSxuLmhlaWdodD1vLG4uY29sb3JBdHRhY2htZW50cz1BLG4uZGVwdGhBdHRhY2htZW50PU0sbi5zdGVuY2lsQXR0YWNobWVudD1TLG4uZGVwdGhTdGVuY2lsQXR0YWNobWVudD1FLHIuY29sb3I9QS5tYXAoaCksci5kZXB0aD1oKE0pLHIuc3RlbmNpbD1oKFMpLHIuZGVwdGhTdGVuY2lsPWgoRSksci53aWR0aD1uLndpZHRoLHIuaGVpZ2h0PW4uaGVpZ2h0LHYobikscn12YXIgbj1uZXcgZDtyZXR1cm4gYS5mcmFtZWJ1ZmZlckNvdW50Kysscih0LGUpLGoocix7cmVzaXplOmZ1bmN0aW9uKHQsZSl7dmFyIGk9TWF0aC5tYXgoMHx0LDEpLGE9TWF0aC5tYXgoMHxlfHxpLDEpO2lmKGk9PT1uLndpZHRoJiZhPT09bi5oZWlnaHQpcmV0dXJuIHI7Zm9yKHZhciBvPW4uY29sb3JBdHRhY2htZW50cyxzPTA7czxvLmxlbmd0aDsrK3MpcChvW3NdLGksYSk7cmV0dXJuIHAobi5kZXB0aEF0dGFjaG1lbnQsaSxhKSxwKG4uc3RlbmNpbEF0dGFjaG1lbnQsaSxhKSxwKG4uZGVwdGhTdGVuY2lsQXR0YWNobWVudCxpLGEpLG4ud2lkdGg9ci53aWR0aD1pLG4uaGVpZ2h0PXIuaGVpZ2h0PWEsdihuKSxyfSxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyIixfZnJhbWVidWZmZXI6bixkZXN0cm95OmZ1bmN0aW9uKCl7ZyhuKSxtKG4pfSx1c2U6ZnVuY3Rpb24odCl7eC5zZXRGQk8oe2ZyYW1lYnVmZmVyOnJ9LHQpfX0pfXZhciB4PXtjdXI6bnVsbCxuZXh0Om51bGwsZGlydHk6ITEsc2V0RkJPOm51bGx9LGI9WyJyZ2JhIl0sXz1bInJnYmE0IiwicmdiNTY1IiwicmdiNSBhMSJdO2UuZXh0X3NyZ2ImJl8ucHVzaCgic3JnYmEiKSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmXy5wdXNoKCJyZ2JhMTZmIiwicmdiMTZmIiksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJl8ucHVzaCgicmdiYTMyZiIpO3ZhciB3PVsidWludDgiXTtlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJncucHVzaCgiaGFsZiBmbG9hdCIsImZsb2F0MTYiKSxlLm9lc190ZXh0dXJlX2Zsb2F0JiZ3LnB1c2goImZsb2F0IiwiZmxvYXQzMiIpO3ZhciBUPTAsaz17fTtyZXR1cm4gaih4LHtnZXRGcmFtZWJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmImZyYW1lYnVmZmVyIj09PXQuX3JlZ2xUeXBlJiYodD10Ll9mcmFtZWJ1ZmZlcilpbnN0YW5jZW9mIGQ/dDpudWxsfSxjcmVhdGU6eSxjcmVhdGVDdWJlOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGksYT17Y29sb3I6bnVsbH0sbz0wLHM9bnVsbDtpPSJyZ2JhIjt2YXIgbD0idWludDgiLGM9MTtpZigibnVtYmVyIj09dHlwZW9mIHQ/bz0wfHQ6dD8oInNoYXBlImluIHQ/bz10LnNoYXBlWzBdOigicmFkaXVzImluIHQmJihvPTB8dC5yYWRpdXMpLCJ3aWR0aCJpbiB0P289MHx0LndpZHRoOiJoZWlnaHQiaW4gdCYmKG89MHx0LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKHM9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShzKSksc3x8KCJjb2xvckNvdW50ImluIHQmJihjPTB8dC5jb2xvckNvdW50KSwiY29sb3JUeXBlImluIHQmJihsPXQuY29sb3JUeXBlKSwiY29sb3JGb3JtYXQiaW4gdCYmKGk9dC5jb2xvckZvcm1hdCkpLCJkZXB0aCJpbiB0JiYoYS5kZXB0aD10LmRlcHRoKSwic3RlbmNpbCJpbiB0JiYoYS5zdGVuY2lsPXQuc3RlbmNpbCksImRlcHRoU3RlbmNpbCJpbiB0JiYoYS5kZXB0aFN0ZW5jaWw9dC5kZXB0aFN0ZW5jaWwpKTpvPTEscylpZihBcnJheS5pc0FycmF5KHMpKWZvcih0PVtdLGk9MDtpPHMubGVuZ3RoOysraSl0W2ldPXNbaV07ZWxzZSB0PVtzXTtlbHNlIGZvcih0PUFycmF5KGMpLHM9e3JhZGl1czpvLGZvcm1hdDppLHR5cGU6bH0saT0wO2k8YzsrK2kpdFtpXT1uLmNyZWF0ZUN1YmUocyk7Zm9yKGEuY29sb3I9QXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoOysraSljPXRbaV0sbz1vfHxjLndpZHRoLGEuY29sb3JbaV09e3RhcmdldDozNDA2OSxkYXRhOnRbaV19O2ZvcihpPTA7Nj5pOysraSl7Zm9yKGM9MDtjPHQubGVuZ3RoOysrYylhLmNvbG9yW2NdLnRhcmdldD0zNDA2OStpOzA8aSYmKGEuZGVwdGg9clswXS5kZXB0aCxhLnN0ZW5jaWw9clswXS5zdGVuY2lsLGEuZGVwdGhTdGVuY2lsPXJbMF0uZGVwdGhTdGVuY2lsKSxyW2ldP3JbaV0oYSk6cltpXT15KGEpfXJldHVybiBqKGUse3dpZHRoOm8saGVpZ2h0Om8sY29sb3I6dH0pfXZhciByPUFycmF5KDYpO3JldHVybiBlKHQpLGooZSx7ZmFjZXM6cixyZXNpemU6ZnVuY3Rpb24odCl7dmFyIG49MHx0O2lmKG49PT1lLndpZHRoKXJldHVybiBlO3ZhciBpPWUuY29sb3I7Zm9yKHQ9MDt0PGkubGVuZ3RoOysrdClpW3RdLnJlc2l6ZShuKTtmb3IodD0wOzY+dDsrK3Qpclt0XS5yZXNpemUobik7cmV0dXJuIGUud2lkdGg9ZS5oZWlnaHQ9bixlfSxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyQ3ViZSIsZGVzdHJveTpmdW5jdGlvbigpe3IuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXN0cm95KCl9KSl9fSl9LGNsZWFyOmZ1bmN0aW9uKCl7WChrKS5mb3JFYWNoKGcpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7eC5jdXI9bnVsbCx4Lm5leHQ9bnVsbCx4LmRpcnR5PSEwLFgoaykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdihlKX0pKX19KX1mdW5jdGlvbiBNKCl7dGhpcy53PXRoaXMuej10aGlzLnk9dGhpcy54PXRoaXMuc3RhdGU9MCx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuc2l6ZT0wLHRoaXMubm9ybWFsaXplZD0hMSx0aGlzLnR5cGU9NTEyNix0aGlzLmRpdmlzb3I9dGhpcy5zdHJpZGU9dGhpcy5vZmZzZXQ9MH1mdW5jdGlvbiBTKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmlkPSsrZix0aGlzLmF0dHJpYnV0ZXM9W10sdGhpcy5lbGVtZW50cz1udWxsLHRoaXMub3duc0VsZW1lbnRzPSExLHRoaXMub2Zmc2V0PXRoaXMuY291bnQ9MCx0aGlzLmluc3RhbmNlcz0tMSx0aGlzLnByaW1pdGl2ZT00O3ZhciB0PWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dGhpcy52YW89dD90LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk6bnVsbCxoW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXJzPVtdfXZhciBjPXIubWF4QXR0cmlidXRlcyx1PUFycmF5KGMpO2ZvcihyPTA7cjxjOysrcil1W3JdPW5ldyBNO3ZhciBmPTAsaD17fSxwPXtSZWNvcmQ6TSxzY29wZTp7fSxzdGF0ZTp1LGN1cnJlbnRWQU86bnVsbCx0YXJnZXRWQU86bnVsbCxyZXN0b3JlOmUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q/ZnVuY3Rpb24oKXtlLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0JiZYKGgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSkpfTpmdW5jdGlvbigpe30sY3JlYXRlVkFPOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIG47QXJyYXkuaXNBcnJheSh0KT8obj10LHIuZWxlbWVudHMmJnIub3duc0VsZW1lbnRzJiZyLmVsZW1lbnRzLmRlc3Ryb3koKSxyLmVsZW1lbnRzPW51bGwsci5vd25zRWxlbWVudHM9ITEsci5vZmZzZXQ9MCxyLmNvdW50PTAsci5pbnN0YW5jZXM9LTEsci5wcmltaXRpdmU9NCk6KHQuZWxlbWVudHM/KG49dC5lbGVtZW50cyxyLm93bnNFbGVtZW50cz8oImZ1bmN0aW9uIj09dHlwZW9mIG4mJiJlbGVtZW50cyI9PT1uLl9yZWdsVHlwZT9yLmVsZW1lbnRzLmRlc3Ryb3koKTpyLmVsZW1lbnRzKG4pLHIub3duc0VsZW1lbnRzPSExKTphLmdldEVsZW1lbnRzKHQuZWxlbWVudHMpPyhyLmVsZW1lbnRzPXQuZWxlbWVudHMsci5vd25zRWxlbWVudHM9ITEpOihyLmVsZW1lbnRzPWEuY3JlYXRlKHQuZWxlbWVudHMpLHIub3duc0VsZW1lbnRzPSEwKSk6KHIuZWxlbWVudHM9bnVsbCxyLm93bnNFbGVtZW50cz0hMSksbj10LmF0dHJpYnV0ZXMsci5vZmZzZXQ9MCxyLmNvdW50PS0xLHIuaW5zdGFuY2VzPS0xLHIucHJpbWl0aXZlPTQsci5lbGVtZW50cyYmKHIuY291bnQ9ci5lbGVtZW50cy5fZWxlbWVudHMudmVydENvdW50LHIucHJpbWl0aXZlPXIuZWxlbWVudHMuX2VsZW1lbnRzLnByaW1UeXBlKSwib2Zmc2V0ImluIHQmJihyLm9mZnNldD0wfHQub2Zmc2V0KSwiY291bnQiaW4gdCYmKHIuY291bnQ9MHx0LmNvdW50KSwiaW5zdGFuY2VzImluIHQmJihyLmluc3RhbmNlcz0wfHQuaW5zdGFuY2VzKSwicHJpbWl0aXZlImluIHQmJihyLnByaW1pdGl2ZT1ydFt0LnByaW1pdGl2ZV0pKSx0PXt9O3ZhciBvPXIuYXR0cmlidXRlcztvLmxlbmd0aD1uLmxlbmd0aDtmb3IodmFyIHM9MDtzPG4ubGVuZ3RoOysrcyl7dmFyIGMsdT1uW3NdLGY9b1tzXT1uZXcgTSxoPXUuZGF0YXx8dTtpZihBcnJheS5pc0FycmF5KGgpfHxXKGgpfHxsKGgpKXIuYnVmZmVyc1tzXSYmKGM9ci5idWZmZXJzW3NdLFcoaCkmJmMuX2J1ZmZlci5ieXRlTGVuZ3RoPj1oLmJ5dGVMZW5ndGg/Yy5zdWJkYXRhKGgpOihjLmRlc3Ryb3koKSxyLmJ1ZmZlcnNbc109bnVsbCkpLHIuYnVmZmVyc1tzXXx8KGM9ci5idWZmZXJzW3NdPWkuY3JlYXRlKHUsMzQ5NjIsITEsITApKSxmLmJ1ZmZlcj1pLmdldEJ1ZmZlcihjKSxmLnNpemU9MHxmLmJ1ZmZlci5kaW1lbnNpb24sZi5ub3JtYWxpemVkPSExLGYudHlwZT1mLmJ1ZmZlci5kdHlwZSxmLm9mZnNldD0wLGYuc3RyaWRlPTAsZi5kaXZpc29yPTAsZi5zdGF0ZT0xLHRbc109MTtlbHNlIGkuZ2V0QnVmZmVyKHUpPyhmLmJ1ZmZlcj1pLmdldEJ1ZmZlcih1KSxmLnNpemU9MHxmLmJ1ZmZlci5kaW1lbnNpb24sZi5ub3JtYWxpemVkPSExLGYudHlwZT1mLmJ1ZmZlci5kdHlwZSxmLm9mZnNldD0wLGYuc3RyaWRlPTAsZi5kaXZpc29yPTAsZi5zdGF0ZT0xKTppLmdldEJ1ZmZlcih1LmJ1ZmZlcik/KGYuYnVmZmVyPWkuZ2V0QnVmZmVyKHUuYnVmZmVyKSxmLnNpemU9MHwoK3Uuc2l6ZXx8Zi5idWZmZXIuZGltZW5zaW9uKSxmLm5vcm1hbGl6ZWQ9ISF1Lm5vcm1hbGl6ZWR8fCExLGYudHlwZT0idHlwZSJpbiB1P0tbdS50eXBlXTpmLmJ1ZmZlci5kdHlwZSxmLm9mZnNldD0wfCh1Lm9mZnNldHx8MCksZi5zdHJpZGU9MHwodS5zdHJpZGV8fDApLGYuZGl2aXNvcj0wfCh1LmRpdmlzb3J8fDApLGYuc3RhdGU9MSk6IngiaW4gdSYmKGYueD0rdS54fHwwLGYueT0rdS55fHwwLGYuej0rdS56fHwwLGYudz0rdS53fHwwLGYuc3RhdGU9Mil9Zm9yKGM9MDtjPHIuYnVmZmVycy5sZW5ndGg7KytjKSF0W2NdJiZyLmJ1ZmZlcnNbY10mJihyLmJ1ZmZlcnNbY10uZGVzdHJveSgpLHIuYnVmZmVyc1tjXT1udWxsKTtyZXR1cm4gci5yZWZyZXNoKCksZX12YXIgcj1uZXcgcztyZXR1cm4gbi52YW9Db3VudCs9MSxlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHIuYnVmZmVycy5sZW5ndGg7Kyt0KXIuYnVmZmVyc1t0XSYmci5idWZmZXJzW3RdLmRlc3Ryb3koKTtyLmJ1ZmZlcnMubGVuZ3RoPTAsci5vd25zRWxlbWVudHMmJihyLmVsZW1lbnRzLmRlc3Ryb3koKSxyLmVsZW1lbnRzPW51bGwsci5vd25zRWxlbWVudHM9ITEpLHIuZGVzdHJveSgpfSxlLl92YW89cixlLl9yZWdsVHlwZT0idmFvIixlKHQpfSxnZXRWQU86ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX3Zhbz90Ll92YW86bnVsbH0sZGVzdHJveUJ1ZmZlcjpmdW5jdGlvbihlKXtmb3IodmFyIHI9MDtyPHUubGVuZ3RoOysrcil7dmFyIG49dVtyXTtuLmJ1ZmZlcj09PWUmJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShyKSxuLmJ1ZmZlcj1udWxsKX19LHNldFZBTzplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKHQpe2lmKHQhPT1wLmN1cnJlbnRWQU8pe3ZhciByPWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dD9yLmJpbmRWZXJ0ZXhBcnJheU9FUyh0LnZhbyk6ci5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCkscC5jdXJyZW50VkFPPXR9fTpmdW5jdGlvbihyKXtpZihyIT09cC5jdXJyZW50VkFPKXtpZihyKXIuYmluZEF0dHJzKCk7ZWxzZXtmb3IodmFyIG49ZS5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLGk9MDtpPHUubGVuZ3RoOysraSl7dmFyIGE9dVtpXTthLmJ1ZmZlcj8odC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSxhLmJ1ZmZlci5iaW5kKCksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksYS5zaXplLGEudHlwZSxhLm5vcm1hbGl6ZWQsYS5zdHJpZGUsYS5vZmZmc2V0KSxuJiZhLmRpdmlzb3ImJm4udmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGksYS5kaXZpc29yKSk6KHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliNGYoaSxhLngsYS55LGEueixhLncpKX1vLmVsZW1lbnRzP3QuYmluZEJ1ZmZlcigzNDk2MyxvLmVsZW1lbnRzLmJ1ZmZlci5idWZmZXIpOnQuYmluZEJ1ZmZlcigzNDk2MyxudWxsKX1wLmN1cnJlbnRWQU89cn19LGNsZWFyOmUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q/ZnVuY3Rpb24oKXtYKGgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfTpmdW5jdGlvbigpe319O3JldHVybiBzLnByb3RvdHlwZS5iaW5kQXR0cnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9ZS5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLG49dGhpcy5hdHRyaWJ1dGVzLGk9MDtpPG4ubGVuZ3RoOysraSl7dmFyIG89bltpXTtvLmJ1ZmZlcj8odC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LmJpbmRCdWZmZXIoMzQ5NjIsby5idWZmZXIuYnVmZmVyKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxvLnNpemUsby50eXBlLG8ubm9ybWFsaXplZCxvLnN0cmlkZSxvLm9mZnNldCksciYmby5kaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpLG8uZGl2aXNvcikpOih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYjRmKGksby54LG8ueSxvLnosby53KSl9Zm9yKHI9bi5sZW5ndGg7cjxjOysrcil0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShyKTsocj1hLmdldEVsZW1lbnRzKHRoaXMuZWxlbWVudHMpKT90LmJpbmRCdWZmZXIoMzQ5NjMsci5idWZmZXIuYnVmZmVyKTp0LmJpbmRCdWZmZXIoMzQ5NjMsbnVsbCl9LHMucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgdD1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3QmJih0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy5iaW5kQXR0cnMoKSxwLmN1cnJlbnRWQU89bnVsbCx0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKSl9LHMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLnZhbyl7dmFyIHQ9ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdDt0aGlzPT09cC5jdXJyZW50VkFPJiYocC5jdXJyZW50VkFPPW51bGwsdC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCkpLHQuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMudmFvPW51bGx9dGhpcy5vd25zRWxlbWVudHMmJih0aGlzLmVsZW1lbnRzLmRlc3Ryb3koKSx0aGlzLmVsZW1lbnRzPW51bGwsdGhpcy5vd25zRWxlbWVudHM9ITEpLGhbdGhpcy5pZF0mJihkZWxldGUgaFt0aGlzLmlkXSwtLW4udmFvQ291bnQpfSxwfWZ1bmN0aW9uIEUodCxlLHIsbil7ZnVuY3Rpb24gaSh0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLmlkPWUsdGhpcy5sb2NhdGlvbj1yLHRoaXMuaW5mbz1ufWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdLmlkPT09ZS5pZClyZXR1cm4gdm9pZCh0W3JdLmxvY2F0aW9uPWUubG9jYXRpb24pO3QucHVzaChlKX1mdW5jdGlvbiBvKHIsbixpKXtpZighKG89KGk9MzU2MzI9PT1yP2M6dSlbbl0pKXt2YXIgYT1lLnN0cihuKSxvPXQuY3JlYXRlU2hhZGVyKHIpO3Quc2hhZGVyU291cmNlKG8sYSksdC5jb21waWxlU2hhZGVyKG8pLGlbbl09b31yZXR1cm4gb31mdW5jdGlvbiBzKHQsZSl7dGhpcy5pZD1wKyssdGhpcy5mcmFnSWQ9dCx0aGlzLnZlcnRJZD1lLHRoaXMucHJvZ3JhbT1udWxsLHRoaXMudW5pZm9ybXM9W10sdGhpcy5hdHRyaWJ1dGVzPVtdLHRoaXMucmVmQ291bnQ9MSxuLnByb2ZpbGUmJih0aGlzLnN0YXRzPXt1bmlmb3Jtc0NvdW50OjAsYXR0cmlidXRlc0NvdW50OjB9KX1mdW5jdGlvbiBsKHIscyxsKXt2YXIgYztjPW8oMzU2MzIsci5mcmFnSWQpO3ZhciB1PW8oMzU2MzMsci52ZXJ0SWQpO2lmKHM9ci5wcm9ncmFtPXQuY3JlYXRlUHJvZ3JhbSgpLHQuYXR0YWNoU2hhZGVyKHMsYyksdC5hdHRhY2hTaGFkZXIocyx1KSxsKWZvcihjPTA7YzxsLmxlbmd0aDsrK2MpdT1sW2NdLHQuYmluZEF0dHJpYkxvY2F0aW9uKHMsdVswXSx1WzFdKTt0LmxpbmtQcm9ncmFtKHMpLHU9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsMzU3MTgpLG4ucHJvZmlsZSYmKHIuc3RhdHMudW5pZm9ybXNDb3VudD11KTt2YXIgZj1yLnVuaWZvcm1zO2ZvcihjPTA7Yzx1OysrYylpZihsPXQuZ2V0QWN0aXZlVW5pZm9ybShzLGMpKXtpZigxPGwuc2l6ZSlmb3IodmFyIGg9MDtoPGwuc2l6ZTsrK2gpe3ZhciBwPWwubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitoKyJdIik7YShmLG5ldyBpKHAsZS5pZChwKSx0LmdldFVuaWZvcm1Mb2NhdGlvbihzLHApLGwpKX1oPWwubmFtZSwxPGwuc2l6ZSYmKGg9aC5yZXBsYWNlKCJbMF0iLCIiKSksYShmLG5ldyBpKGgsZS5pZChoKSx0LmdldFVuaWZvcm1Mb2NhdGlvbihzLGgpLGwpKX1mb3IodT10LmdldFByb2dyYW1QYXJhbWV0ZXIocywzNTcyMSksbi5wcm9maWxlJiYoci5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ9dSkscj1yLmF0dHJpYnV0ZXMsYz0wO2M8dTsrK2MpKGw9dC5nZXRBY3RpdmVBdHRyaWIocyxjKSkmJmEocixuZXcgaShsLm5hbWUsZS5pZChsLm5hbWUpLHQuZ2V0QXR0cmliTG9jYXRpb24ocyxsLm5hbWUpLGwpKX12YXIgYz17fSx1PXt9LGY9e30saD1bXSxwPTA7cmV0dXJuIG4ucHJvZmlsZSYmKHIuZ2V0TWF4VW5pZm9ybXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGguZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zdGF0cy51bmlmb3Jtc0NvdW50PnQmJih0PWUuc3RhdHMudW5pZm9ybXNDb3VudCl9KSksdH0sci5nZXRNYXhBdHRyaWJ1dGVzQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBoLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhdHMuYXR0cmlidXRlc0NvdW50PnQmJih0PWUuc3RhdHMuYXR0cmlidXRlc0NvdW50KX0pKSx0fSkse2NsZWFyOmZ1bmN0aW9uKCl7dmFyIGU9dC5kZWxldGVTaGFkZXIuYmluZCh0KTtYKGMpLmZvckVhY2goZSksYz17fSxYKHUpLmZvckVhY2goZSksdT17fSxoLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuZGVsZXRlUHJvZ3JhbShlLnByb2dyYW0pfSkpLGgubGVuZ3RoPTAsZj17fSxyLnNoYWRlckNvdW50PTB9LHByb2dyYW06ZnVuY3Rpb24oZSxuLGksYSl7dmFyIG89ZltuXTtvfHwobz1mW25dPXt9KTt2YXIgcD1vW2VdO2lmKHAmJihwLnJlZkNvdW50KyssIWEpKXJldHVybiBwO3ZhciBkPW5ldyBzKG4sZSk7cmV0dXJuIHIuc2hhZGVyQ291bnQrKyxsKGQsaSxhKSxwfHwob1tlXT1kKSxoLnB1c2goZCksaihkLHtkZXN0cm95OmZ1bmN0aW9uKCl7aWYoZC5yZWZDb3VudC0tLDA+PWQucmVmQ291bnQpe3QuZGVsZXRlUHJvZ3JhbShkLnByb2dyYW0pO3ZhciBlPWguaW5kZXhPZihkKTtoLnNwbGljZShlLDEpLHIuc2hhZGVyQ291bnQtLX0wPj1vW2QudmVydElkXS5yZWZDb3VudCYmKHQuZGVsZXRlU2hhZGVyKHVbZC52ZXJ0SWRdKSxkZWxldGUgdVtkLnZlcnRJZF0sZGVsZXRlIGZbZC5mcmFnSWRdW2QudmVydElkXSksT2JqZWN0LmtleXMoZltkLmZyYWdJZF0pLmxlbmd0aHx8KHQuZGVsZXRlU2hhZGVyKGNbZC5mcmFnSWRdKSxkZWxldGUgY1tkLmZyYWdJZF0sZGVsZXRlIGZbZC5mcmFnSWRdKX19KX0scmVzdG9yZTpmdW5jdGlvbigpe2M9e30sdT17fTtmb3IodmFyIHQ9MDt0PGgubGVuZ3RoOysrdClsKGhbdF0sbnVsbCxoW3RdLmF0dHJpYnV0ZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bdC5sb2NhdGlvbix0Lm5hbWVdfSkpKX0sc2hhZGVyOm8sZnJhZzotMSx2ZXJ0Oi0xfX1mdW5jdGlvbiBMKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoaSl7dmFyIGE7YT1udWxsPT09ZS5uZXh0PzUxMjE6ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZS5fdGV4dHVyZS50eXBlO3ZhciBvPTAscz0wLGw9bi5mcmFtZWJ1ZmZlcldpZHRoLGM9bi5mcmFtZWJ1ZmZlckhlaWdodCx1PW51bGw7cmV0dXJuIFcoaSk/dT1pOmkmJihvPTB8aS54LHM9MHxpLnksbD0wfChpLndpZHRofHxuLmZyYW1lYnVmZmVyV2lkdGgtbyksYz0wfChpLmhlaWdodHx8bi5mcmFtZWJ1ZmZlckhlaWdodC1zKSx1PWkuZGF0YXx8bnVsbCkscigpLGk9bCpjKjQsdXx8KDUxMjE9PT1hP3U9bmV3IFVpbnQ4QXJyYXkoaSk6NTEyNj09PWEmJih1PXV8fG5ldyBGbG9hdDMyQXJyYXkoaSkpKSx0LnBpeGVsU3RvcmVpKDMzMzMsNCksdC5yZWFkUGl4ZWxzKG8scyxsLGMsNjQwOCxhLHUpLHV9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnJhbWVidWZmZXIiaW4gdD9mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gZS5zZXRGQk8oe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXJ9LChmdW5jdGlvbigpe3I9cyh0KX0pKSxyfSh0KTpzKHQpfX1mdW5jdGlvbiBDKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KX1mdW5jdGlvbiBQKHQpe3JldHVybiBDKHQpLmpvaW4oIiIpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFcodCl8fGwodCl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiJ2aWV3cG9ydCI9PT10Py0xOiJ2aWV3cG9ydCI9PT1lPzE6dDxlPy0xOjF9KSl9ZnVuY3Rpb24geih0LGUscixuKXt0aGlzLnRoaXNEZXA9dCx0aGlzLmNvbnRleHREZXA9ZSx0aGlzLnByb3BEZXA9cix0aGlzLmFwcGVuZD1ufWZ1bmN0aW9uIEQodCl7cmV0dXJuIHQmJiEodC50aGlzRGVwfHx0LmNvbnRleHREZXB8fHQucHJvcERlcCl9ZnVuY3Rpb24gUih0KXtyZXR1cm4gbmV3IHooITEsITEsITEsdCl9ZnVuY3Rpb24gRih0LGUpe3ZhciByPXQudHlwZTtpZigwPT09cilyZXR1cm4gbmV3IHooITAsMTw9KHI9dC5kYXRhLmxlbmd0aCksMjw9cixlKTtpZig0PT09cilyZXR1cm4gbmV3IHooKHI9dC5kYXRhKS50aGlzRGVwLHIuY29udGV4dERlcCxyLnByb3BEZXAsZSk7aWYoNT09PXIpcmV0dXJuIG5ldyB6KCExLCExLCExLGUpO2lmKDY9PT1yKXtmb3IodmFyIG49cj0hMSxpPSExLGE9MDthPHQuZGF0YS5sZW5ndGg7KythKXt2YXIgbz10LmRhdGFbYV07MT09PW8udHlwZT9pPSEwOjI9PT1vLnR5cGU/bj0hMDozPT09by50eXBlP3I9ITA6MD09PW8udHlwZT8ocj0hMCwxPD0obz1vLmRhdGEpJiYobj0hMCksMjw9byYmKGk9ITApKTo0PT09by50eXBlJiYocj1yfHxvLmRhdGEudGhpc0RlcCxuPW58fG8uZGF0YS5jb250ZXh0RGVwLGk9aXx8by5kYXRhLnByb3BEZXApfXJldHVybiBuZXcgeihyLG4saSxlKX1yZXR1cm4gbmV3IHooMz09PXIsMj09PXIsMT09PXIsZSl9ZnVuY3Rpb24gQih0LGUscixuLGksbyxzLGwsYyx1LGYsaCxwLGQsbSl7ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5yZXBsYWNlKCIuIiwiXyIpfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXYodCk7b3QucHVzaCh0KSxhdFtuXT1pdFtuXT0hIXIsc3Rbbl09ZX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj12KHQpO290LnB1c2godCksQXJyYXkuaXNBcnJheShyKT8oaXRbbl09ci5zbGljZSgpLGF0W25dPXIuc2xpY2UoKSk6aXRbbl09YXRbbl09cixsdFtuXT1lfWZ1bmN0aW9uIGIoKXt2YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgdD1bXSxlPVtdO3JldHVybiBqKChmdW5jdGlvbigpe3QucHVzaC5hcHBseSh0LEMoYXJndW1lbnRzKSl9KSx7ZGVmOmZ1bmN0aW9uKCl7dmFyIG49InYiK3IrKztyZXR1cm4gZS5wdXNoKG4pLDA8YXJndW1lbnRzLmxlbmd0aCYmKHQucHVzaChuLCI9IiksdC5wdXNoLmFwcGx5KHQsQyhhcmd1bWVudHMpKSx0LnB1c2goIjsiKSksbn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gUChbMDxlLmxlbmd0aD8idmFyICIrZS5qb2luKCIsIikrIjsiOiIiLFAodCldKX19KX1mdW5jdGlvbiBlKCl7ZnVuY3Rpb24gZSh0LGUpe24odCxlLCI9IixyLmRlZih0LGUpLCI7Iil9dmFyIHI9dCgpLG49dCgpLGk9ci50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuIGooKGZ1bmN0aW9uKCl7ci5hcHBseShyLEMoYXJndW1lbnRzKSl9KSx7ZGVmOnIuZGVmLGVudHJ5OnIsZXhpdDpuLHNhdmU6ZSxzZXQ6ZnVuY3Rpb24odCxuLGkpe2UodCxuKSxyKHQsbiwiPSIsaSwiOyIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBpKCkrYSgpfX0pfXZhciByPTAsbj1bXSxpPVtdLGE9dCgpLG89e307cmV0dXJue2dsb2JhbDphLGxpbms6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxpLmxlbmd0aDsrK2UpaWYoaVtlXT09PXQpcmV0dXJuIG5bZV07cmV0dXJuIGU9ImciK3IrKyxuLnB1c2goZSksaS5wdXNoKHQpLGV9LGJsb2NrOnQscHJvYzpmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD0iYSIraS5sZW5ndGg7cmV0dXJuIGkucHVzaCh0KSx0fXZhciBpPVtdO3I9cnx8MDtmb3IodmFyIGE9MDthPHI7KythKW4oKTt2YXIgcz0oYT1lKCkpLnRvU3RyaW5nO3JldHVybiBvW3RdPWooYSx7YXJnOm4sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gUChbImZ1bmN0aW9uKCIsaS5qb2luKCksIil7IixzKCksIn0iXSl9fSl9LHNjb3BlOmUsY29uZDpmdW5jdGlvbigpe3ZhciB0PVAoYXJndW1lbnRzKSxyPWUoKSxuPWUoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKHIse3RoZW46ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseShyLEMoYXJndW1lbnRzKSksdGhpc30sZWxzZTpmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KG4sQyhhcmd1bWVudHMpKSx0aGlzfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPWEoKTtyZXR1cm4gZSYmKGU9ImVsc2V7IitlKyJ9IiksUChbImlmKCIsdCwiKXsiLGkoKSwifSIsZV0pfX0pfSxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIHQ9WycidXNlIHN0cmljdCI7JyxhLCJyZXR1cm4geyJdO09iamVjdC5rZXlzKG8pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaCgnIicsZSwnIjonLG9bZV0udG9TdHJpbmcoKSwiLCIpfSkpLHQucHVzaCgifSIpO3ZhciBlPVAodCkucmVwbGFjZSgvOy9nLCI7XG4iKS5yZXBsYWNlKC99L2csIn1cbiIpLnJlcGxhY2UoL3svZywie1xuIik7cmV0dXJuIEZ1bmN0aW9uLmFwcGx5KG51bGwsbi5jb25jYXQoZSkpLmFwcGx5KG51bGwsaSl9fX0oKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9ZnQrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIoY3QpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKGN0KS5mb3JFYWNoKChmdW5jdGlvbih0KXthW3RdPW4uZGVmKGksIi4iLHQpfSkpO3ZhciBvPXQubmV4dD17fSxzPXQuY3VycmVudD17fTtPYmplY3Qua2V5cyhsdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheShpdFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pKTt2YXIgbD10LmNvbnN0YW50cz17fTtPYmplY3Qua2V5cyh1dCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7bFt0XT1uLmRlZihKU09OLnN0cmluZ2lmeSh1dFt0XSkpfSkpLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSAwOnZhciBpPVsidGhpcyIsYS5jb250ZXh0LGEucHJvcHMsdC5iYXRjaElkXTtyZXR1cm4gZS5kZWYocihuLmRhdGEpLCIuY2FsbCgiLGkuc2xpY2UoMCxNYXRoLm1heChuLmRhdGEubGVuZ3RoKzEsNCkpLCIpIik7Y2FzZSAxOnJldHVybiBlLmRlZihhLnByb3BzLG4uZGF0YSk7Y2FzZSAyOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIDM6cmV0dXJuIGUuZGVmKCJ0aGlzIixuLmRhdGEpO2Nhc2UgNDpyZXR1cm4gbi5kYXRhLmFwcGVuZCh0LGUpLG4uZGF0YS5yZWY7Y2FzZSA1OnJldHVybiBuLmRhdGEudG9TdHJpbmcoKTtjYXNlIDY6cmV0dXJuIG4uZGF0YS5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiB0Lmludm9rZShlLHIpfSkpfX0sdC5hdHRyaWJDYWNoZT17fTt2YXIgYz17fTtyZXR1cm4gdC5zY29wZUF0dHJpYj1mdW5jdGlvbih0KXtpZigodD1lLmlkKHQpKWluIGMpcmV0dXJuIGNbdF07dmFyIG49dS5zY29wZVt0XTtyZXR1cm4gbnx8KG49dS5zY29wZVt0XT1uZXcgUSksY1t0XT1yKG4pfSx0fWZ1bmN0aW9uIF8odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYztpZigiZnJhbWVidWZmZXIiaW4gcil7dmFyIGk9ci5mcmFtZWJ1ZmZlcjtyZXR1cm4gaT8oaT1sLmdldEZyYW1lYnVmZmVyKGkpLFIoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5saW5rKGkpLG49dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KG4uZnJhbWVidWZmZXIsIi5uZXh0IixyKSxuPW4uY29udGV4dCxlLnNldChuLCIuZnJhbWVidWZmZXJXaWR0aCIscisiLndpZHRoIiksZS5zZXQobiwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyIuaGVpZ2h0Iikscn0pKSk6UigoZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZDtyZXR1cm4gZS5zZXQoci5mcmFtZWJ1ZmZlciwiLm5leHQiLCJudWxsIikscj1yLmNvbnRleHQsZS5zZXQociwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIi5kcmF3aW5nQnVmZmVyV2lkdGgiKSxlLnNldChyLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIi5kcmF3aW5nQnVmZmVySGVpZ2h0IiksIm51bGwifSkpfWlmKCJmcmFtZWJ1ZmZlciJpbiBuKXt2YXIgYT1uLmZyYW1lYnVmZmVyO3JldHVybiBGKGEsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcjtyPWUuZGVmKGksIi5nZXRGcmFtZWJ1ZmZlcigiLHIsIikiKTtyZXR1cm4gZS5zZXQoaSwiLm5leHQiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyI/IityKyIud2lkdGg6IituKyIuZHJhd2luZ0J1ZmZlcldpZHRoIiksZS5zZXQobiwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyI/IityKyIuaGVpZ2h0OiIrbisiLmRyYXdpbmdCdWZmZXJIZWlnaHQiKSxyfSkpfXJldHVybiBudWxsfWZ1bmN0aW9uIHcodCxyLG4pe2Z1bmN0aW9uIGkodCl7aWYodCBpbiBhKXt2YXIgcj1lLmlkKGFbdF0pO3JldHVybih0PVIoKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSkpLmlkPXIsdH1pZih0IGluIG8pe3ZhciBuPW9bdF07cmV0dXJuIEYobiwoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLG4pO3JldHVybiBlLmRlZih0LnNoYXJlZC5zdHJpbmdzLCIuaWQoIixyLCIpIil9KSl9cmV0dXJuIG51bGx9dmFyIGE9dC5zdGF0aWMsbz10LmR5bmFtaWMscz1pKCJmcmFnIiksbD1pKCJ2ZXJ0IiksYz1udWxsO3JldHVybiBEKHMpJiZEKGwpPyhjPWYucHJvZ3JhbShsLmlkLHMuaWQsbnVsbCxuKSx0PVIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluayhjKX0pKSk6dD1uZXcgeihzJiZzLnRoaXNEZXB8fGwmJmwudGhpc0RlcCxzJiZzLmNvbnRleHREZXB8fGwmJmwuY29udGV4dERlcCxzJiZzLnByb3BEZXB8fGwmJmwucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5zaGFyZWQuc2hhZGVyO3JldHVybiByPXM/cy5hcHBlbmQodCxlKTplLmRlZihpLCIuIiwiZnJhZyIpLG49bD9sLmFwcGVuZCh0LGUpOmUuZGVmKGksIi4iLCJ2ZXJ0IiksZS5kZWYoaSsiLnByb2dyYW0oIituKyIsIityKyIpIil9KSkse2ZyYWc6cyx2ZXJ0OmwscHJvZ1Zhcjp0LHByb2dyYW06Y319ZnVuY3Rpb24gVCh0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZih0IGluIG4pe3ZhciByPTB8blt0XTtyZXR1cm4gZT9hLm9mZnNldD1yOmEuaW5zdGFuY2VzPXIsUigoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSYmKHQuT0ZGU0VUPXIpLHJ9KSl9aWYodCBpbiBpKXt2YXIgbz1pW3RdO3JldHVybiBGKG8sKGZ1bmN0aW9uKHQscil7dmFyIG49dC5pbnZva2UocixvKTtyZXR1cm4gZSYmKHQuT0ZGU0VUPW4pLG59KSl9aWYoZSl7aWYoYylyZXR1cm4gUigoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5PRkZTRVQ9MH0pKTtpZihzKXJldHVybiBuZXcgeihsLnRoaXNEZXAsbC5jb250ZXh0RGVwLGwucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5zaGFyZWQudmFvKyIuY3VycmVudFZBTz8iK3Quc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8ub2Zmc2V0OjAiKX0pKX1lbHNlIGlmKHMpcmV0dXJuIG5ldyB6KGwudGhpc0RlcCxsLmNvbnRleHREZXAsbC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPPyIrdC5zaGFyZWQudmFvKyIuY3VycmVudFZBTy5pbnN0YW5jZXM6LTEiKX0pKTtyZXR1cm4gbnVsbH12YXIgbj10LnN0YXRpYyxpPXQuZHluYW1pYyxhPXt9LHM9ITEsbD1mdW5jdGlvbigpe2lmKCJ2YW8iaW4gbil7dmFyIHQ9bi52YW87cmV0dXJuIG51bGwhPT10JiZudWxsPT09dS5nZXRWQU8odCkmJih0PXUuY3JlYXRlVkFPKHQpKSxzPSEwLGEudmFvPXQsUigoZnVuY3Rpb24oZSl7dmFyIHI9dS5nZXRWQU8odCk7cmV0dXJuIHI/ZS5saW5rKHIpOiJudWxsIn0pKX1pZigidmFvImluIGkpe3M9ITA7dmFyIGU9aS52YW87cmV0dXJuIEYoZSwoZnVuY3Rpb24odCxyKXt2YXIgbj10Lmludm9rZShyLGUpO3JldHVybiByLmRlZih0LnNoYXJlZC52YW8rIi5nZXRWQU8oIituKyIpIil9KSl9cmV0dXJuIG51bGx9KCksYz0hMSxmPWZ1bmN0aW9uKCl7aWYoImVsZW1lbnRzImluIG4pe3ZhciB0PW4uZWxlbWVudHM7aWYoYS5lbGVtZW50cz10LEkodCkpe3ZhciBlPWEuZWxlbWVudHM9by5jcmVhdGUodCwhMCk7dD1vLmdldEVsZW1lbnRzKGUpO2M9ITB9ZWxzZSB0JiYodD1vLmdldEVsZW1lbnRzKHQpLGM9ITApO3JldHVybihlPVIoKGZ1bmN0aW9uKGUscil7aWYodCl7dmFyIG49ZS5saW5rKHQpO3JldHVybiBlLkVMRU1FTlRTPW59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbH0pKSkudmFsdWU9dCxlfWlmKCJlbGVtZW50cyJpbiBpKXtjPSEwO3ZhciByPWkuZWxlbWVudHM7cmV0dXJuIEYociwoZnVuY3Rpb24odCxlKXt2YXIgbj0oaT10LnNoYXJlZCkuaXNCdWZmZXJBcmdzLGk9aS5lbGVtZW50cyxhPXQuaW52b2tlKGUsciksbz1lLmRlZigibnVsbCIpO249ZS5kZWYobiwiKCIsYSwiKSIpLGE9dC5jb25kKG4pLnRoZW4obywiPSIsaSwiLmNyZWF0ZVN0cmVhbSgiLGEsIik7IikuZWxzZShvLCI9IixpLCIuZ2V0RWxlbWVudHMoIixhLCIpOyIpO3JldHVybiBlLmVudHJ5KGEpLGUuZXhpdCh0LmNvbmQobikudGhlbihpLCIuZGVzdHJveVN0cmVhbSgiLG8sIik7IikpLHQuRUxFTUVOVFM9b30pKX1yZXR1cm4gcz9uZXcgeihsLnRoaXNEZXAsbC5jb250ZXh0RGVwLGwucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5zaGFyZWQudmFvKyIuY3VycmVudFZBTz8iK3Quc2hhcmVkLmVsZW1lbnRzKyIuZ2V0RWxlbWVudHMoIit0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPLmVsZW1lbnRzKTpudWxsIil9KSk6bnVsbH0oKSxoPXIoIm9mZnNldCIsITApLHA9ZnVuY3Rpb24oKXtpZigicHJpbWl0aXZlImluIG4pe3ZhciB0PW4ucHJpbWl0aXZlO3JldHVybiBhLnByaW1pdGl2ZT10LFIoKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ0W3RdfSkpfWlmKCJwcmltaXRpdmUiaW4gaSl7dmFyIGU9aS5wcmltaXRpdmU7cmV0dXJuIEYoZSwoZnVuY3Rpb24odCxyKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShyLGUpO3JldHVybiByLmRlZihuLCJbIixpLCJdIil9KSl9cmV0dXJuIGM/RChmKT9mLnZhbHVlP1IoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsIi5wcmltVHlwZSIpfSkpOlIoKGZ1bmN0aW9uKCl7cmV0dXJuIDR9KSk6bmV3IHooZi50aGlzRGVwLGYuY29udGV4dERlcCxmLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYociwiPyIsciwiLnByaW1UeXBlOiIsNCl9KSk6cz9uZXcgeihsLnRoaXNEZXAsbC5jb250ZXh0RGVwLGwucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5zaGFyZWQudmFvKyIuY3VycmVudFZBTz8iK3Quc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8ucHJpbWl0aXZlOjQiKX0pKTpudWxsfSgpLGQ9ZnVuY3Rpb24oKXtpZigiY291bnQiaW4gbil7dmFyIHQ9MHxuLmNvdW50O3JldHVybiBhLmNvdW50PXQsUigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX1pZigiY291bnQiaW4gaSl7dmFyIGU9aS5jb3VudDtyZXR1cm4gRihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfXJldHVybiBjP0QoZik/Zj9oP25ldyB6KGgudGhpc0RlcCxoLmNvbnRleHREZXAsaC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50LSIsdC5PRkZTRVQpfSkpOlIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQiKX0pKTpSKChmdW5jdGlvbigpe3JldHVybi0xfSkpOm5ldyB6KGYudGhpc0RlcHx8aC50aGlzRGVwLGYuY29udGV4dERlcHx8aC5jb250ZXh0RGVwLGYucHJvcERlcHx8aC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIHQuT0ZGU0VUP2UuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCwiOi0xIik6ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudDotMSIpfSkpOnM/bmV3IHoobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbywiLmN1cnJlbnRWQU8/Iix0LnNoYXJlZC52YW8sIi5jdXJyZW50VkFPLmNvdW50Oi0xIil9KSk6bnVsbH0oKSxtPXIoImluc3RhbmNlcyIsITEpO3JldHVybntlbGVtZW50czpmLHByaW1pdGl2ZTpwLGNvdW50OmQsaW5zdGFuY2VzOm0sb2Zmc2V0OmgsdmFvOmwsdmFvQWN0aXZlOnMsZWxlbWVudHNBY3RpdmU6YyxzdGF0aWM6YX19ZnVuY3Rpb24gayh0LHIpe3ZhciBuPXQuc3RhdGljLGE9dC5keW5hbWljLG89e307cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW5bdF0sYT1lLmlkKHQpLHM9bmV3IFE7aWYoSShyKSlzLnN0YXRlPTEscy5idWZmZXI9aS5nZXRCdWZmZXIoaS5jcmVhdGUociwzNDk2MiwhMSwhMCkpLHMudHlwZT0wO2Vsc2UgaWYoYz1pLmdldEJ1ZmZlcihyKSlzLnN0YXRlPTEscy5idWZmZXI9YyxzLnR5cGU9MDtlbHNlIGlmKCJjb25zdGFudCJpbiByKXt2YXIgbD1yLmNvbnN0YW50O3MuYnVmZmVyPSJudWxsIixzLnN0YXRlPTIsIm51bWJlciI9PXR5cGVvZiBsP3MueD1sOl90LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ZTxsLmxlbmd0aCYmKHNbdF09bFtlXSl9KSl9ZWxzZXt2YXIgYz1JKHIuYnVmZmVyKT9pLmdldEJ1ZmZlcihpLmNyZWF0ZShyLmJ1ZmZlciwzNDk2MiwhMSwhMCkpOmkuZ2V0QnVmZmVyKHIuYnVmZmVyKSx1PTB8ci5vZmZzZXQsZj0wfHIuc3RyaWRlLGg9MHxyLnNpemUscD0hIXIubm9ybWFsaXplZCxkPTA7InR5cGUiaW4gciYmKGQ9S1tyLnR5cGVdKSxyPTB8ci5kaXZpc29yLHMuYnVmZmVyPWMscy5zdGF0ZT0xLHMuc2l6ZT1oLHMubm9ybWFsaXplZD1wLHMudHlwZT1kfHxjLmR0eXBlLHMub2Zmc2V0PXUscy5zdHJpZGU9ZixzLmRpdmlzb3I9cn1vW3RdPVIoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyaWJDYWNoZTtpZihhIGluIHIpcmV0dXJuIHJbYV07dmFyIG49e2lzU3RyZWFtOiExfTtyZXR1cm4gT2JqZWN0LmtleXMocykuZm9yRWFjaCgoZnVuY3Rpb24odCl7blt0XT1zW3RdfSkpLHMuYnVmZmVyJiYobi5idWZmZXI9dC5saW5rKHMuYnVmZmVyKSxuLnR5cGU9bi50eXBlfHxuLmJ1ZmZlcisiLmR0eXBlIiksclthXT1ufSkpfSkpLE9iamVjdC5rZXlzKGEpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07b1t0XT1GKGUsKGZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbih0KXtyKGxbdF0sIj0iLGksIi4iLHQsInwwOyIpfXZhciBpPXQuaW52b2tlKHIsZSksYT10LnNoYXJlZCxvPXQuY29uc3RhbnRzLHM9YS5pc0J1ZmZlckFyZ3MsbD0oYT1hLmJ1ZmZlcix7aXNTdHJlYW06ci5kZWYoITEpfSksYz1uZXcgUTtjLnN0YXRlPTEsT2JqZWN0LmtleXMoYykuZm9yRWFjaCgoZnVuY3Rpb24odCl7bFt0XT1yLmRlZigiIitjW3RdKX0pKTt2YXIgdT1sLmJ1ZmZlcixmPWwudHlwZTtyZXR1cm4gcigiaWYoIixzLCIoIixpLCIpKXsiLGwuaXNTdHJlYW0sIj10cnVlOyIsdSwiPSIsYSwiLmNyZWF0ZVN0cmVhbSgiLDM0OTYyLCIsIixpLCIpOyIsZiwiPSIsdSwiLmR0eXBlOyIsIn1lbHNleyIsdSwiPSIsYSwiLmdldEJ1ZmZlcigiLGksIik7IiwiaWYoIix1LCIpeyIsZiwiPSIsdSwiLmR0eXBlOyIsJ31lbHNlIGlmKCJjb25zdGFudCIgaW4gJyxpLCIpeyIsbC5zdGF0ZSwiPSIsMiwiOyIsImlmKHR5cGVvZiAiK2krJy5jb25zdGFudCA9PT0gIm51bWJlciIpeycsbFtfdFswXV0sIj0iLGksIi5jb25zdGFudDsiLF90LnNsaWNlKDEpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGxbdF19KSkuam9pbigiPSIpLCI9MDsiLCJ9ZWxzZXsiLF90Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbFt0XSsiPSIraSsiLmNvbnN0YW50Lmxlbmd0aD4iK2UrIj8iK2krIi5jb25zdGFudFsiK2UrIl06MDsifSkpLmpvaW4oIiIpLCJ9fWVsc2V7IiwiaWYoIixzLCIoIixpLCIuYnVmZmVyKSl7Iix1LCI9IixhLCIuY3JlYXRlU3RyZWFtKCIsMzQ5NjIsIiwiLGksIi5idWZmZXIpOyIsIn1lbHNleyIsdSwiPSIsYSwiLmdldEJ1ZmZlcigiLGksIi5idWZmZXIpOyIsIn0iLGYsJz0idHlwZSIgaW4gJyxpLCI/IixvLmdsVHlwZXMsIlsiLGksIi50eXBlXToiLHUsIi5kdHlwZTsiLGwubm9ybWFsaXplZCwiPSEhIixpLCIubm9ybWFsaXplZDsiKSxuKCJzaXplIiksbigib2Zmc2V0Iiksbigic3RyaWRlIiksbigiZGl2aXNvciIpLHIoIn19Iiksci5leGl0KCJpZigiLGwuaXNTdHJlYW0sIil7IixhLCIuZGVzdHJveVN0cmVhbSgiLHUsIik7IiwifSIpLGx9KSl9KSksb31mdW5jdGlvbiBBKHQsZSxuLGksbyl7ZnVuY3Rpb24gcyh0KXt2YXIgZT1jW3RdO2UmJihoW3RdPWUpfXZhciBsPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZihyPXQuc3RhdGljKS5mcmFnJiYic3RyaW5nIj09dHlwZW9mIHIudmVydCl7aWYoMDxPYmplY3Qua2V5cyhlLmR5bmFtaWMpLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcj1lLnN0YXRpYyxuPU9iamVjdC5rZXlzKHIpO2lmKDA8bi5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgcltuWzBdXSl7Zm9yKHZhciBpPVtdLGE9MDthPG4ubGVuZ3RoOysrYSlpLnB1c2goWzB8cltuW2FdXSxuW2FdXSk7cmV0dXJuIGl9fXJldHVybiBudWxsfSh0LGUpLGM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCBpbiBpKXt2YXIgcj1pW3RdO3Q9ITA7dmFyIG4sbyxzPTB8ci54LGw9MHxyLnk7cmV0dXJuIndpZHRoImluIHI/bj0wfHIud2lkdGg6dD0hMSwiaGVpZ2h0ImluIHI/bz0wfHIuaGVpZ2h0OnQ9ITEsbmV3IHooIXQmJmUmJmUudGhpc0RlcCwhdCYmZSYmZS5jb250ZXh0RGVwLCF0JiZlJiZlLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5zaGFyZWQuY29udGV4dCxhPW47IndpZHRoImluIHJ8fChhPWUuZGVmKGksIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiwiLSIscykpO3ZhciBjPW87cmV0dXJuImhlaWdodCJpbiByfHwoYz1lLmRlZihpLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiLCItIixsKSksW3MsbCxhLGNdfSkpfWlmKHQgaW4gYSl7dmFyIGM9YVt0XTtyZXR1cm4gdD1GKGMsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxjKSxuPXQuc2hhcmVkLmNvbnRleHQsaT1lLmRlZihyLCIueHwwIiksYT1lLmRlZihyLCIueXwwIik7cmV0dXJuW2ksYSxlLmRlZignIndpZHRoIiBpbiAnLHIsIj8iLHIsIi53aWR0aHwwOiIsIigiLG4sIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiwiLSIsaSwiKSIpLHI9ZS5kZWYoJyJoZWlnaHQiIGluICcsciwiPyIsciwiLmhlaWdodHwwOiIsIigiLG4sIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIsIi0iLGEsIikiKV19KSksZSYmKHQudGhpc0RlcD10LnRoaXNEZXB8fGUudGhpc0RlcCx0LmNvbnRleHREZXA9dC5jb250ZXh0RGVwfHxlLmNvbnRleHREZXAsdC5wcm9wRGVwPXQucHJvcERlcHx8ZS5wcm9wRGVwKSx0fXJldHVybiBlP25ldyB6KGUudGhpc0RlcCxlLmNvbnRleHREZXAsZS5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIpLGUuZGVmKHIsIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIpXX0pKTpudWxsfXZhciBpPXQuc3RhdGljLGE9dC5keW5hbWljO2lmKHQ9bigidmlld3BvcnQiKSl7dmFyIG89dDt0PW5ldyB6KHQudGhpc0RlcCx0LmNvbnRleHREZXAsdC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPW8uYXBwZW5kKHQsZSksbj10LnNoYXJlZC5jb250ZXh0O3JldHVybiBlLnNldChuLCIudmlld3BvcnRXaWR0aCIsclsyXSksZS5zZXQobiwiLnZpZXdwb3J0SGVpZ2h0IixyWzNdKSxyfSkpfXJldHVybnt2aWV3cG9ydDp0LHNjaXNzb3JfYm94Om4oInNjaXNzb3IuYm94Iil9fSh0LGQ9Xyh0KSksZj1UKHQpLGg9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBvdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsYSl7aWYodCBpbiByKXt2YXIgcz1lKHJbdF0pO2lbb109UigoZnVuY3Rpb24oKXtyZXR1cm4gc30pKX1lbHNlIGlmKHQgaW4gbil7dmFyIGw9blt0XTtpW29dPUYobCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0LGUsdC5pbnZva2UoZSxsKSl9KSl9fXZhciBvPXYodCk7c3dpdGNoKHQpe2Nhc2UiY3VsbC5lbmFibGUiOmNhc2UiYmxlbmQuZW5hYmxlIjpjYXNlImRpdGhlciI6Y2FzZSJzdGVuY2lsLmVuYWJsZSI6Y2FzZSJkZXB0aC5lbmFibGUiOmNhc2Uic2Npc3Nvci5lbmFibGUiOmNhc2UicG9seWdvbk9mZnNldC5lbmFibGUiOmNhc2Uic2FtcGxlLmFscGhhIjpjYXNlInNhbXBsZS5lbmFibGUiOmNhc2UiZGVwdGgubWFzayI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcn0pKTtjYXNlImRlcHRoLmZ1bmMiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4ga3RbdF19KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZih0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsIlsiLHIsIl0iKX0pKTtjYXNlImRlcHRoLnJhbmdlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZigiKyIsciwiWzBdIiksZT1lLmRlZigiKyIsciwiWzFdIildfSkpO2Nhc2UiYmxlbmQuZnVuYyI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybltUdFsic3JjUkdCImluIHQ/dC5zcmNSR0I6dC5zcmNdLFR0WyJkc3RSR0IiaW4gdD90LmRzdFJHQjp0LmRzdF0sVHRbInNyY0FscGhhImluIHQ/dC5zcmNBbHBoYTp0LnNyY10sVHRbImRzdEFscGhhImluIHQ/dC5kc3RBbHBoYTp0LmRzdF1dfSksKGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIGUuZGVmKCciJyx0LG4sJyIgaW4gJyxyLCI/IixyLCIuIix0LG4sIjoiLHIsIi4iLHQpfXQ9dC5jb25zdGFudHMuYmxlbmRGdW5jczt2YXIgaT1uKCJzcmMiLCJSR0IiKSxhPW4oImRzdCIsIlJHQiIpLG89KGk9ZS5kZWYodCwiWyIsaSwiXSIpLGUuZGVmKHQsIlsiLG4oInNyYyIsIkFscGhhIiksIl0iKSk7cmV0dXJuW2ksYT1lLmRlZih0LCJbIixhLCJdIiksbyx0PWUuZGVmKHQsIlsiLG4oImRzdCIsIkFscGhhIiksIl0iKV19KSk7Y2FzZSJibGVuZC5lcXVhdGlvbiI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9bJFt0XSwkW3RdXToib2JqZWN0Ij09dHlwZW9mIHQ/WyRbdC5yZ2JdLCRbdC5hbHBoYV1dOnZvaWQgMH0pLChmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnMsaT1lLmRlZigpLGE9ZS5kZWYoKTtyZXR1cm4odD10LmNvbmQoInR5cGVvZiAiLHIsJz09PSJzdHJpbmciJykpLnRoZW4oaSwiPSIsYSwiPSIsbiwiWyIsciwiXTsiKSx0LmVsc2UoaSwiPSIsbiwiWyIsciwiLnJnYl07IixhLCI9IixuLCJbIixyLCIuYWxwaGFdOyIpLGUodCksW2ksYV19KSk7Y2FzZSJibGVuZC5jb2xvciI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiBhKDQsKGZ1bmN0aW9uKGUpe3JldHVybit0W2VdfSkpfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSg0LChmdW5jdGlvbih0KXtyZXR1cm4gZS5kZWYoIisiLHIsIlsiLHQsIl0iKX0pKX0pKTtjYXNlInN0ZW5jaWwubWFzayI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiAwfHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyLCJ8MCIpfSkpO2Nhc2Uic3RlbmNpbC5mdW5jIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuW2t0W3QuY21wfHwia2VlcCJdLHQucmVmfHwwLCJtYXNrImluIHQ/dC5tYXNrOi0xXX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW3Q9ZS5kZWYoJyJjbXAiIGluICcsciwiPyIsdC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLCJbIixyLCIuY21wXSIsIjoiLDc2ODApLGUuZGVmKHIsIi5yZWZ8MCIpLGU9ZS5kZWYoJyJtYXNrIiBpbiAnLHIsIj8iLHIsIi5tYXNrfDA6LTEiKV19KSk7Y2FzZSJzdGVuY2lsLm9wRnJvbnQiOmNhc2Uic3RlbmNpbC5vcEJhY2siOnJldHVybiBlKChmdW5jdGlvbihlKXtyZXR1cm5bInN0ZW5jaWwub3BCYWNrIj09PXQ/MTAyOToxMDI4LEF0W2UuZmFpbHx8ImtlZXAiXSxBdFtlLnpmYWlsfHwia2VlcCJdLEF0W2UuenBhc3N8fCJrZWVwIl1dfSksKGZ1bmN0aW9uKGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiByLmRlZignIicsdCwnIiBpbiAnLG4sIj8iLGEsIlsiLG4sIi4iLHQsIl06Iiw3NjgwKX12YXIgYT1lLmNvbnN0YW50cy5zdGVuY2lsT3BzO3JldHVyblsic3RlbmNpbC5vcEJhY2siPT09dD8xMDI5OjEwMjgsaSgiZmFpbCIpLGkoInpmYWlsIiksaSgienBhc3MiKV19KSk7Y2FzZSJwb2x5Z29uT2Zmc2V0Lm9mZnNldCI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVyblswfHQuZmFjdG9yLDB8dC51bml0c119KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZihyLCIuZmFjdG9yfDAiKSxlPWUuZGVmKHIsIi51bml0c3wwIildfSkpO2Nhc2UiY3VsbC5mYWNlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4iZnJvbnQiPT09dD9lPTEwMjg6ImJhY2siPT09dCYmKGU9MTAyOSksZX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsJz09PSJmcm9udCI/JywxMDI4LCI6IiwxMDI5KX0pKTtjYXNlImxpbmVXaWR0aCI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcn0pKTtjYXNlImZyb250RmFjZSI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiBNdFt0XX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIrJz09PSJjdyI/MjMwNDoyMzA1Jyl9KSk7Y2FzZSJjb2xvck1hc2siOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCwoZnVuY3Rpb24odCl7cmV0dXJuIiEhIityKyJbIit0KyJdIn0pKX0pKTtjYXNlInNhbXBsZS5jb3ZlcmFnZSI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVyblsidmFsdWUiaW4gdD90LnZhbHVlOjEsISF0LmludmVydF19KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZignInZhbHVlIiBpbiAnLHIsIj8rIixyLCIudmFsdWU6MSIpLGU9ZS5kZWYoIiEhIixyLCIuaW52ZXJ0IildfSkpfX0pKSxpfSh0KSxwPXcodCwwLGwpO3MoInZpZXdwb3J0Iikscyh2KCJzY2lzc29yLmJveCIpKTt2YXIgZCxtPTA8T2JqZWN0LmtleXMoaCkubGVuZ3RoO2lmKChkPXtmcmFtZWJ1ZmZlcjpkLGRyYXc6ZixzaGFkZXI6cCxzdGF0ZTpoLGRpcnR5Om0sc2NvcGVWQU86bnVsbCxkcmF3VkFPOm51bGwsdXNlVkFPOiExLGF0dHJpYnV0ZXM6e319KS5wcm9maWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zdGF0aWM7aWYodD10LmR5bmFtaWMsInByb2ZpbGUiaW4gcil7dmFyIG49ISFyLnByb2ZpbGU7KGU9UigoZnVuY3Rpb24odCxlKXtyZXR1cm4gbn0pKSkuZW5hYmxlPW59ZWxzZSBpZigicHJvZmlsZSJpbiB0KXt2YXIgaT10LnByb2ZpbGU7ZT1GKGksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW52b2tlKGUsaSl9KSl9cmV0dXJuIGV9KHQpLGQudW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZSxuPXJbdF07aWYoIm51bWJlciI9PXR5cGVvZiBufHwiYm9vbGVhbiI9PXR5cGVvZiBuKWU9UigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgbz1uLl9yZWdsVHlwZTsidGV4dHVyZTJkIj09PW98fCJ0ZXh0dXJlQ3ViZSI9PT1vP2U9UigoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhuKX0pKToiZnJhbWVidWZmZXIiIT09byYmImZyYW1lYnVmZmVyQ3ViZSIhPT1vfHwoZT1SKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4uY29sb3JbMF0pfSkpKX1lbHNlIGcobikmJihlPVIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbC5kZWYoIlsiLGEobi5sZW5ndGgsKGZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfSkpLCJdIil9KSkpO2UudmFsdWU9bixpW3RdPWV9KSksT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9blt0XTtpW3RdPUYoZSwoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pKX0pKSxpfShuKSxkLmRyYXdWQU89ZC5zY29wZVZBTz1mLnZhbywhZC5kcmF3VkFPJiZwLnByb2dyYW0mJiFsJiZyLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMmJmYuc3RhdGljLmVsZW1lbnRzKXt2YXIgeT0hMDtpZih0PXAucHJvZ3JhbS5hdHRyaWJ1dGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5zdGF0aWNbdF0seT15JiYhIXQsdH0pKSx5JiYwPHQubGVuZ3RoKXt2YXIgeD11LmdldFZBTyh1LmNyZWF0ZVZBTyh7YXR0cmlidXRlczp0LGVsZW1lbnRzOmYuc3RhdGljLmVsZW1lbnRzfSkpO2QuZHJhd1ZBTz1uZXcgeihudWxsLG51bGwsbnVsbCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKHgpfSkpLGQudXNlVkFPPSEwfX1yZXR1cm4gbD9kLnVzZVZBTz0hMDpkLmF0dHJpYnV0ZXM9ayhlKSxkLmNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0aWMscj10LmR5bmFtaWMsbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZVt0XTtuW3RdPVIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByPyIiK3I6dC5saW5rKHIpfSkpfSkpLE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07blt0XT1GKGUsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KSl9KSksbn0oaSksZH1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10LnNoYXJlZC5jb250ZXh0LGk9dC5zY29wZSgpO09iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKGEpe2Uuc2F2ZShuLCIuIithKTt2YXIgbz1yW2FdLmFwcGVuZCh0LGUpO0FycmF5LmlzQXJyYXkobyk/aShuLCIuIixhLCI9WyIsby5qb2luKCksIl07Iik6aShuLCIuIixhLCI9IixvLCI7Iil9KSksZShpKX1mdW5jdGlvbiBTKHQsZSxyLG4pe3ZhciBpLGE9KHM9dC5zaGFyZWQpLmdsLG89cy5mcmFtZWJ1ZmZlcjtldCYmKGk9ZS5kZWYocy5leHRlbnNpb25zLCIud2ViZ2xfZHJhd19idWZmZXJzIikpO3ZhciBzPShsPXQuY29uc3RhbnRzKS5kcmF3QnVmZmVyLGw9bC5iYWNrQnVmZmVyO3Q9cj9yLmFwcGVuZCh0LGUpOmUuZGVmKG8sIi5uZXh0Iiksbnx8ZSgiaWYoIix0LCIhPT0iLG8sIi5jdXIpeyIpLGUoImlmKCIsdCwiKXsiLGEsIi5iaW5kRnJhbWVidWZmZXIoIiwzNjE2MCwiLCIsdCwiLmZyYW1lYnVmZmVyKTsiKSxldCYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLHMsIlsiLHQsIi5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOyIpLGUoIn1lbHNleyIsYSwiLmJpbmRGcmFtZWJ1ZmZlcigiLDM2MTYwLCIsbnVsbCk7IiksZXQmJmUoaSwiLmRyYXdCdWZmZXJzV0VCR0woIixsLCIpOyIpLGUoIn0iLG8sIi5jdXI9Iix0LCI7Iiksbnx8ZSgifSIpfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPXQuc2hhcmVkLGk9bi5nbCxvPXQuY3VycmVudCxzPXQubmV4dCxsPW4uY3VycmVudCxjPW4ubmV4dCx1PXQuY29uZChsLCIuZGlydHkiKTtvdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbixmO2lmKCEoKGU9dihlKSlpbiByLnN0YXRlKSlpZihlIGluIHMpe249c1tlXSxmPW9bZV07dmFyIGg9YShpdFtlXS5sZW5ndGgsKGZ1bmN0aW9uKHQpe3JldHVybiB1LmRlZihuLCJbIix0LCJdIil9KSk7dSh0LmNvbmQoaC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiE9PSIrZisiWyIrZSsiXSJ9KSkuam9pbigifHwiKSkudGhlbihpLCIuIixsdFtlXSwiKCIsaCwiKTsiLGgubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBmKyJbIitlKyJdPSIrdH0pKS5qb2luKCI7IiksIjsiKSl9ZWxzZSBuPXUuZGVmKGMsIi4iLGUpLGg9dC5jb25kKG4sIiE9PSIsbCwiLiIsZSksdShoKSxlIGluIHN0P2godC5jb25kKG4pLnRoZW4oaSwiLmVuYWJsZSgiLHN0W2VdLCIpOyIpLmVsc2UoaSwiLmRpc2FibGUoIixzdFtlXSwiKTsiKSxsLCIuIixlLCI9IixuLCI7Iik6aChpLCIuIixsdFtlXSwiKCIsbiwiKTsiLGwsIi4iLGUsIj0iLG4sIjsiKX0pKSwwPT09T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiZ1KGwsIi5kaXJ0eT1mYWxzZTsiKSxlKHUpfWZ1bmN0aW9uIEwodCxlLHIsbil7dmFyIGk9dC5zaGFyZWQsYT10LmN1cnJlbnQsbz1pLmN1cnJlbnQscz1pLmdsO08oT2JqZWN0LmtleXMocikpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBsPXJbaV07aWYoIW58fG4obCkpe3ZhciBjPWwuYXBwZW5kKHQsZSk7aWYoc3RbaV0pe3ZhciB1PXN0W2ldO0QobCk/ZShzLGM/Ii5lbmFibGUoIjoiLmRpc2FibGUoIix1LCIpOyIpOmUodC5jb25kKGMpLnRoZW4ocywiLmVuYWJsZSgiLHUsIik7IikuZWxzZShzLCIuZGlzYWJsZSgiLHUsIik7IikpLGUobywiLiIsaSwiPSIsYywiOyIpfWVsc2UgaWYoZyhjKSl7dmFyIGY9YVtpXTtlKHMsIi4iLGx0W2ldLCIoIixjLCIpOyIsYy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYrIlsiK2UrIl09Iit0fSkpLmpvaW4oIjsiKSwiOyIpfWVsc2UgZShzLCIuIixsdFtpXSwiKCIsYywiKTsiLG8sIi4iLGksIj0iLGMsIjsiKX19KSl9ZnVuY3Rpb24gQih0LGUpe3R0JiYodC5pbnN0YW5jaW5nPWUuZGVmKHQuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpfWZ1bmN0aW9uIE4odCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBwZXJmb3JtYW5jZT8iRGF0ZS5ub3coKSI6InBlcmZvcm1hbmNlLm5vdygpIn1mdW5jdGlvbiBvKHQpe3QoYz1lLmRlZigpLCI9IixhKCksIjsiKSwic3RyaW5nIj09dHlwZW9mIGk/dChoLCIuY291bnQrPSIsaSwiOyIpOnQoaCwiLmNvdW50Kys7IiksZCYmKG4/dCh1PWUuZGVmKCksIj0iLG0sIi5nZXROdW1QZW5kaW5nUXVlcmllcygpOyIpOnQobSwiLmJlZ2luUXVlcnkoIixoLCIpOyIpKX1mdW5jdGlvbiBzKHQpe3QoaCwiLmNwdVRpbWUrPSIsYSgpLCItIixjLCI7IiksZCYmKG4/dChtLCIucHVzaFNjb3BlU3RhdHMoIix1LCIsIixtLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKSwiLGgsIik7Iik6dChtLCIuZW5kUXVlcnkoKTsiKSl9ZnVuY3Rpb24gbCh0KXt2YXIgcj1lLmRlZihwLCIucHJvZmlsZSIpO2UocCwiLnByb2ZpbGU9Iix0LCI7IiksZS5leGl0KHAsIi5wcm9maWxlPSIsciwiOyIpfXZhciBjLHUsZj10LnNoYXJlZCxoPXQuc3RhdHMscD1mLmN1cnJlbnQsbT1mLnRpbWVyO2lmKHI9ci5wcm9maWxlKXtpZihEKHIpKXJldHVybiB2b2lkKHIuZW5hYmxlPyhvKGUpLHMoZS5leGl0KSxsKCJ0cnVlIikpOmwoImZhbHNlIikpO2wocj1yLmFwcGVuZCh0LGUpKX1lbHNlIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtvKGY9dC5ibG9jaygpKSxlKCJpZigiLHIsIil7IixmLCJ9Iikscyh0PXQuYmxvY2soKSksZS5leGl0KCJpZigiLHIsIil7Iix0LCJ9Iil9ZnVuY3Rpb24gVSh0LGUscixuLGkpe2Z1bmN0aW9uIGEocixuLGkpe2Z1bmN0aW9uIGEoKXtlKCJpZighIix1LCIuYnVmZmVyKXsiLGwsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7fSIpO3ZhciByLGE9aS50eXBlO3I9aS5zaXplP2UuZGVmKGkuc2l6ZSwifHwiLG4pOm4sZSgiaWYoIix1LCIudHlwZSE9PSIsYSwifHwiLHUsIi5zaXplIT09IixyLCJ8fCIscC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyIhPT0iK2lbdF19KSkuam9pbigifHwiKSwiKXsiLGwsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLGYsIi5idWZmZXIpOyIsbCwiLnZlcnRleEF0dHJpYlBvaW50ZXIoIixbYyxyLGEsaS5ub3JtYWxpemVkLGkuc3RyaWRlLGkub2Zmc2V0XSwiKTsiLHUsIi50eXBlPSIsYSwiOyIsdSwiLnNpemU9IixyLCI7IixwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHUrIi4iK3QrIj0iK2lbdF0rIjsifSkpLmpvaW4oIiIpLCJ9IiksdHQmJihhPWkuZGl2aXNvcixlKCJpZigiLHUsIi5kaXZpc29yIT09IixhLCIpeyIsdC5pbnN0YW5jaW5nLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsW2MsYV0sIik7Iix1LCIuZGl2aXNvcj0iLGEsIjt9IikpfWZ1bmN0aW9uIHMoKXtlKCJpZigiLHUsIi5idWZmZXIpeyIsbCwiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7Iix1LCIuYnVmZmVyPW51bGw7IiwifWlmKCIsX3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB1KyIuIit0KyIhPT0iK2hbZV19KSkuam9pbigifHwiKSwiKXsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLGMsIiwiLGgsIik7IixfdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIj0iK2hbZV0rIjsifSkpLmpvaW4oIiIpLCJ9Iil9dmFyIGw9by5nbCxjPWUuZGVmKHIsIi5sb2NhdGlvbiIpLHU9ZS5kZWYoby5hdHRyaWJ1dGVzLCJbIixjLCJdIik7cj1pLnN0YXRlO3ZhciBmPWkuYnVmZmVyLGg9W2kueCxpLnksaS56LGkud10scD1bImJ1ZmZlciIsIm5vcm1hbGl6ZWQiLCJvZmZzZXQiLCJzdHJpZGUiXTsxPT09cj9hKCk6Mj09PXI/cygpOihlKCJpZigiLHIsIj09PSIsMSwiKXsiKSxhKCksZSgifWVsc2V7IikscygpLGUoIn0iKSl9dmFyIG89dC5zaGFyZWQ7bi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbyxzPW4ubmFtZSxsPXIuYXR0cmlidXRlc1tzXTtpZihsKXtpZighaShsKSlyZXR1cm47bz1sLmFwcGVuZCh0LGUpfWVsc2V7aWYoIWkoU3QpKXJldHVybjt2YXIgYz10LnNjb3BlQXR0cmliKHMpO289e30sT2JqZWN0LmtleXMobmV3IFEpLmZvckVhY2goKGZ1bmN0aW9uKHQpe29bdF09ZS5kZWYoYywiLiIsdCl9KSl9YSh0LmxpbmsobiksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMzU2NjQ6Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiAyO2Nhc2UgMzU2NjU6Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiAzO2Nhc2UgMzU2NjY6Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIDF9fShuLmluZm8udHlwZSksbyl9KSl9ZnVuY3Rpb24gSCh0LHIsbixpLG8scyl7Zm9yKHZhciBsLGM9dC5zaGFyZWQsdT1jLmdsLGY9e30saD0wO2g8aS5sZW5ndGg7KytoKXt2YXIgcD0oYj1pW2hdKS5uYW1lLGQ9Yi5pbmZvLnR5cGUsbT1iLmluZm8uc2l6ZSx2PW4udW5pZm9ybXNbcF07aWYoMTxtKXtpZighdiljb250aW51ZTt2YXIgeT1wLnJlcGxhY2UoIlswXSIsIiIpO2lmKGZbeV0pY29udGludWU7Zlt5XT0xfXZhciB4LGI9dC5saW5rKGIpKyIubG9jYXRpb24iO2lmKHYpe2lmKCFvKHYpKWNvbnRpbnVlO2lmKEQodikpe2lmKHA9di52YWx1ZSwzNTY3OD09PWR8fDM1NjgwPT09ZClyKHUsIi51bmlmb3JtMWkoIixiLCIsIiwoZD10LmxpbmsocC5fdGV4dHVyZXx8cC5jb2xvclswXS5fdGV4dHVyZSkpKyIuYmluZCgpKTsiKSxyLmV4aXQoZCwiLnVuYmluZCgpOyIpO2Vsc2UgaWYoMzU2NzQ9PT1kfHwzNTY3NT09PWR8fDM1Njc2PT09ZCltPXQuZ2xvYmFsLmRlZigibmV3IEZsb2F0MzJBcnJheShbIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwKSsiXSkiKSxwPTIsMzU2NzU9PT1kP3A9MzozNTY3Nj09PWQmJihwPTQpLHIodSwiLnVuaWZvcm1NYXRyaXgiLHAsImZ2KCIsYiwiLGZhbHNlLCIsbSwiKTsiKTtlbHNle3N3aXRjaChkKXtjYXNlIDUxMjY6bD0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6bD0iMmYiO2JyZWFrO2Nhc2UgMzU2NjU6bD0iM2YiO2JyZWFrO2Nhc2UgMzU2NjY6bD0iNGYiO2JyZWFrO2Nhc2UgMzU2NzA6Y2FzZSA1MTI0Omw9IjFpIjticmVhaztjYXNlIDM1NjcxOmNhc2UgMzU2Njc6bD0iMmkiO2JyZWFrO2Nhc2UgMzU2NzI6Y2FzZSAzNTY2ODpsPSIzaSI7YnJlYWs7Y2FzZSAzNTY3MzpsPSI0aSI7YnJlYWs7Y2FzZSAzNTY2OTpsPSI0aSJ9MTxtPyhsKz0idiIscD10Lmdsb2JhbC5kZWYoIlsiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHApKyJdIikpOnA9ZyhwKT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwKTpwLHIodSwiLnVuaWZvcm0iLGwsIigiLGIsIiwiLHAsIik7Iil9Y29udGludWV9eD12LmFwcGVuZCh0LHIpfWVsc2V7aWYoIW8oU3QpKWNvbnRpbnVlO3g9ci5kZWYoYy51bmlmb3JtcywiWyIsZS5pZChwKSwiXSIpfXN3aXRjaCgzNTY3OD09PWQ/cigiaWYoIix4LCImJiIseCwnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlciIpeycseCwiPSIseCwiLmNvbG9yWzBdOyIsIn0iKTozNTY4MD09PWQmJnIoImlmKCIseCwiJiYiLHgsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXJDdWJlIil7Jyx4LCI9Iix4LCIuY29sb3JbMF07IiwifSIpLHA9MSxkKXtjYXNlIDM1Njc4OmNhc2UgMzU2ODA6ZD1yLmRlZih4LCIuX3RleHR1cmUiKSxyKHUsIi51bmlmb3JtMWkoIixiLCIsIixkLCIuYmluZCgpKTsiKSxyLmV4aXQoZCwiLnVuYmluZCgpOyIpO2NvbnRpbnVlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOmw9IjFpIjticmVhaztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6bD0iMmkiLHA9MjticmVhaztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6bD0iM2kiLHA9MzticmVhaztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6bD0iNGkiLHA9NDticmVhaztjYXNlIDUxMjY6bD0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6bD0iMmYiLHA9MjticmVhaztjYXNlIDM1NjY1Omw9IjNmIixwPTM7YnJlYWs7Y2FzZSAzNTY2NjpsPSI0ZiIscD00O2JyZWFrO2Nhc2UgMzU2NzQ6bD0iTWF0cml4MmZ2IjticmVhaztjYXNlIDM1Njc1Omw9Ik1hdHJpeDNmdiI7YnJlYWs7Y2FzZSAzNTY3NjpsPSJNYXRyaXg0ZnYifWlmKC0xPT09bC5pbmRleE9mKCJNYXRyaXgiKSYmMTxtJiYobCs9InYiLHA9MSksIk0iPT09bC5jaGFyQXQoMCkpe3IodSwiLnVuaWZvcm0iLGwsIigiLGIsIiwiKTtiPU1hdGgucG93KGQtMzU2NzQrMiwyKTt2YXIgXz10Lmdsb2JhbC5kZWYoIm5ldyBGbG9hdDMyQXJyYXkoIixiLCIpIik7QXJyYXkuaXNBcnJheSh4KT9yKCJmYWxzZSwoIixhKGIsKGZ1bmN0aW9uKHQpe3JldHVybiBfKyJbIit0KyJdPSIreFt0XX0pKSwiLCIsXywiKSIpOnIoImZhbHNlLChBcnJheS5pc0FycmF5KCIseCwiKXx8Iix4LCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpPyIseCwiOigiLGEoYiwoZnVuY3Rpb24odCl7cmV0dXJuIF8rIlsiK3QrIl09Iit4KyJbIit0KyJdIn0pKSwiLCIsXywiKSIpLHIoIik7Iil9ZWxzZXtpZigxPHApe2Q9W107dmFyIHc9W107Zm9yKG09MDttPHA7KyttKUFycmF5LmlzQXJyYXkoeCk/dy5wdXNoKHhbbV0pOncucHVzaChyLmRlZih4KyJbIittKyJdIikpLHMmJmQucHVzaChyLmRlZigpKTtzJiZyKCJpZighIix0LmJhdGNoSWQsInx8IixkLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiIT09Iit3W2VdfSkpLmpvaW4oInx8IiksIil7IixkLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiPSIrd1tlXSsiOyJ9KSkuam9pbigiIikpLHIodSwiLnVuaWZvcm0iLGwsIigiLGIsIiwiLHcuam9pbigiLCIpLCIpOyIpfWVsc2UgcyYmKGQ9ci5kZWYoKSxyKCJpZighIix0LmJhdGNoSWQsInx8IixkLCIhPT0iLHgsIil7IixkLCI9Iix4LCI7IikpLHIodSwiLnVuaWZvcm0iLGwsIigiLGIsIiwiLHgsIik7Iik7cyYmcigifSIpfX19ZnVuY3Rpb24gcSh0LGUscixuKXtmdW5jdGlvbiBpKGkpe3ZhciBhPWhbaV07cmV0dXJuIGE/YS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXA/YS5hcHBlbmQodCxyKTphLmFwcGVuZCh0LGUpOmUuZGVmKGYsIi4iLGkpfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiB0KCl7cihsLCIuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoIixbZCxnLHYsbSsiPDwoKCIrdisiLTUxMjEpPj4xKSIsc10sIik7Iil9ZnVuY3Rpb24gZSgpe3IobCwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSgiLFtkLG0sZyxzXSwiKTsiKX1wJiYibnVsbCIhPT1wP3k/dCgpOihyKCJpZigiLHAsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IodSsiLmRyYXdFbGVtZW50cygiK1tkLGcsdixtKyI8PCgoIit2KyItNTEyMSk+PjEpIl0rIik7Iil9ZnVuY3Rpb24gZSgpe3IodSsiLmRyYXdBcnJheXMoIitbZCxtLGddKyIpOyIpfXAmJiJudWxsIiE9PXA/eT90KCk6KHIoImlmKCIscCwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfXZhciBzLGwsYz10LnNoYXJlZCx1PWMuZ2wsZj1jLmRyYXcsaD1uLmRyYXcscD1mdW5jdGlvbigpe3ZhciBpPWguZWxlbWVudHMsYT1lO3JldHVybiBpPygoaS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxpLnByb3BEZXApJiYoYT1yKSxpPWkuYXBwZW5kKHQsYSksaC5lbGVtZW50c0FjdGl2ZSYmYSgiaWYoIitpKyIpIit1KyIuYmluZEJ1ZmZlcigzNDk2MywiK2krIi5idWZmZXIuYnVmZmVyKTsiKSk6KGk9YS5kZWYoKSxhKGksIj0iLGYsIi4iLCJlbGVtZW50cyIsIjsiLCJpZigiLGksIil7Iix1LCIuYmluZEJ1ZmZlcigiLDM0OTYzLCIsIixpLCIuYnVmZmVyLmJ1ZmZlcik7fSIsImVsc2UgaWYoIixjLnZhbywiLmN1cnJlbnRWQU8peyIsaSwiPSIsdC5zaGFyZWQuZWxlbWVudHMrIi5nZXRFbGVtZW50cygiK2MudmFvLCIuY3VycmVudFZBTy5lbGVtZW50cyk7IixudD8iIjoiaWYoIitpKyIpIit1KyIuYmluZEJ1ZmZlcigzNDk2MywiK2krIi5idWZmZXIuYnVmZmVyKTsiLCJ9IikpLGl9KCksZD1pKCJwcmltaXRpdmUiKSxtPWkoIm9mZnNldCIpLGc9ZnVuY3Rpb24oKXt2YXIgaT1oLmNvdW50LGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGYsIi4iLCJjb3VudCIpLGl9KCk7aWYoIm51bWJlciI9PXR5cGVvZiBnKXtpZigwPT09ZylyZXR1cm59ZWxzZSByKCJpZigiLGcsIil7Iiksci5leGl0KCJ9Iik7dHQmJihzPWkoImluc3RhbmNlcyIpLGw9dC5pbnN0YW5jaW5nKTt2YXIgdj1wKyIudHlwZSIseT1oLmVsZW1lbnRzJiZEKGguZWxlbWVudHMpJiYhaC52YW9BY3RpdmU7dHQmJigibnVtYmVyIiE9dHlwZW9mIHN8fDA8PXMpPyJzdHJpbmciPT10eXBlb2Ygcz8ocigiaWYoIixzLCI+MCl7IiksYSgpLHIoIn1lbHNlIGlmKCIscywiPDApeyIpLG8oKSxyKCJ9IikpOmEoKTpvKCl9ZnVuY3Rpb24gRyh0LGUscixuLGkpe3JldHVybiBpPShlPWIoKSkucHJvYygiYm9keSIsaSksdHQmJihlLmluc3RhbmNpbmc9aS5kZWYoZS5zaGFyZWQuZXh0ZW5zaW9ucywiLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMiKSksdChlLGkscixuKSxlLmNvbXBpbGUoKS5ib2R5fWZ1bmN0aW9uIFkodCxlLHIsbil7Qih0LGUpLHIudXNlVkFPP3IuZHJhd1ZBTz9lKHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHIuZHJhd1ZBTy5hcHBlbmQodCxlKSwiKTsiKTplKHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHQuc2hhcmVkLnZhbywiLnRhcmdldFZBTyk7Iik6KGUodC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpLFUodCxlLHIsbi5hdHRyaWJ1dGVzLChmdW5jdGlvbigpe3JldHVybiEwfSkpKSxIKHQsZSxyLG4udW5pZm9ybXMsKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSwhMSkscSh0LGUsZSxyKX1mdW5jdGlvbiBXKHQsZSxyLG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4hMH10LmJhdGNoSWQ9ImExIixCKHQsZSksVSh0LGUscixuLmF0dHJpYnV0ZXMsaSksSCh0LGUscixuLnVuaWZvcm1zLGksITEpLHEodCxlLGUscil9ZnVuY3Rpb24gWCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0LmNvbnRleHREZXAmJm98fHQucHJvcERlcH1mdW5jdGlvbiBhKHQpe3JldHVybiFpKHQpfUIodCxlKTt2YXIgbz1yLmNvbnRleHREZXAscz1lLmRlZigpLGw9ZS5kZWYoKTt0LnNoYXJlZC5wcm9wcz1sLHQuYmF0Y2hJZD1zO3ZhciBjPXQuc2NvcGUoKSx1PXQuc2NvcGUoKTtlKGMuZW50cnksImZvcigiLHMsIj0wOyIscywiPCIsImExIiwiOysrIixzLCIpeyIsbCwiPSIsImEwIiwiWyIscywiXTsiLHUsIn0iLGMuZXhpdCksci5uZWVkc0NvbnRleHQmJk0odCx1LHIuY29udGV4dCksci5uZWVkc0ZyYW1lYnVmZmVyJiZTKHQsdSxyLmZyYW1lYnVmZmVyKSxMKHQsdSxyLnN0YXRlLGkpLHIucHJvZmlsZSYmaShyLnByb2ZpbGUpJiZOKHQsdSxyLCExLCEwKSxuPyhyLnVzZVZBTz9yLmRyYXdWQU8/aShyLmRyYXdWQU8pP3UodC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsci5kcmF3VkFPLmFwcGVuZCh0LHUpLCIpOyIpOmModC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsci5kcmF3VkFPLmFwcGVuZCh0LGMpLCIpOyIpOmModC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsdC5zaGFyZWQudmFvLCIudGFyZ2V0VkFPKTsiKTooYyh0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7IiksVSh0LGMscixuLmF0dHJpYnV0ZXMsYSksVSh0LHUscixuLmF0dHJpYnV0ZXMsaSkpLEgodCxjLHIsbi51bmlmb3JtcyxhLCExKSxIKHQsdSxyLG4udW5pZm9ybXMsaSwhMCkscSh0LGMsdSxyKSk6KGU9dC5nbG9iYWwuZGVmKCJ7fSIpLG49ci5zaGFkZXIucHJvZ1Zhci5hcHBlbmQodCx1KSxsPXUuZGVmKG4sIi5pZCIpLGM9dS5kZWYoZSwiWyIsbCwiXSIpLHUodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIsImlmKCEiLGMsIil7IixjLCI9IixlLCJbIixsLCJdPSIsdC5saW5rKChmdW5jdGlvbihlKXtyZXR1cm4gRyhXLHQscixlLDIpfSkpLCIoIixuLCIpO30iLGMsIi5jYWxsKHRoaXMsYTBbIixzLCJdLCIscywiKTsiKSl9ZnVuY3Rpb24gWih0LHIpe2Z1bmN0aW9uIG4oZSl7dmFyIG49ci5zaGFkZXJbZV07biYmaS5zZXQoYS5zaGFkZXIsIi4iK2Usbi5hcHBlbmQodCxpKSl9dmFyIGk9dC5wcm9jKCJzY29wZSIsMyk7dC5iYXRjaElkPSJhMiI7dmFyIGE9dC5zaGFyZWQsbz1hLmN1cnJlbnQ7TSh0LGksci5jb250ZXh0KSxyLmZyYW1lYnVmZmVyJiZyLmZyYW1lYnVmZmVyLmFwcGVuZCh0LGkpLE8oT2JqZWN0LmtleXMoci5zdGF0ZSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXIuc3RhdGVbZV0uYXBwZW5kKHQsaSk7ZyhuKT9uLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7aS5zZXQodC5uZXh0W2VdLCJbIituKyJdIixyKX0pKTppLnNldChhLm5leHQsIi4iK2Usbil9KSksTih0LGksciwhMCwhMCksWyJlbGVtZW50cyIsIm9mZnNldCIsImNvdW50IiwiaW5zdGFuY2VzIiwicHJpbWl0aXZlIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ci5kcmF3W2VdO24mJmkuc2V0KGEuZHJhdywiLiIrZSwiIituLmFwcGVuZCh0LGkpKX0pKSxPYmplY3Qua2V5cyhyLnVuaWZvcm1zKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbz1yLnVuaWZvcm1zW25dLmFwcGVuZCh0LGkpO0FycmF5LmlzQXJyYXkobykmJihvPSJbIitvLmpvaW4oKSsiXSIpLGkuc2V0KGEudW5pZm9ybXMsIlsiK2UuaWQobikrIl0iLG8pfSkpLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ci5hdHRyaWJ1dGVzW2VdLmFwcGVuZCh0LGkpLGE9dC5zY29wZUF0dHJpYihlKTtPYmplY3Qua2V5cyhuZXcgUSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pKX0pKSxyLnNjb3BlVkFPJiZpLnNldChhLnZhbywiLnRhcmdldFZBTyIsci5zY29wZVZBTy5hcHBlbmQodCxpKSksbigidmVydCIpLG4oImZyYWciKSwwPE9iamVjdC5rZXlzKHIuc3RhdGUpLmxlbmd0aCYmKGkobywiLmRpcnR5PXRydWU7IiksaS5leGl0KG8sIi5kaXJ0eT10cnVlOyIpKSxpKCJhMSgiLHQuc2hhcmVkLmNvbnRleHQsIixhMCwiLHQuYmF0Y2hJZCwiKTsiKX1mdW5jdGlvbiBKKHQsZSxyKXt2YXIgbj1lLnN0YXRpY1tyXTtpZihuJiZmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFnKHQpKXtmb3IodmFyIGU9T2JqZWN0LmtleXModCkscj0wO3I8ZS5sZW5ndGg7KytyKWlmKFYuaXNEeW5hbWljKHRbZVtyXV0pKXJldHVybiEwO3JldHVybiExfX0obikpe3ZhciBpPXQuZ2xvYmFsLGE9T2JqZWN0LmtleXMobiksbz0hMSxzPSExLGw9ITEsYz10Lmdsb2JhbC5kZWYoInt9Iik7YS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKFYuaXNEeW5hbWljKHIpKSJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1uW2VdPVYudW5ib3gocikpLGU9RihyLG51bGwpLG89b3x8ZS50aGlzRGVwLGw9bHx8ZS5wcm9wRGVwLHM9c3x8ZS5jb250ZXh0RGVwO2Vsc2V7c3dpdGNoKGkoYywiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6aShyKTticmVhaztjYXNlInN0cmluZyI6aSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZpKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6aSh0LmxpbmsocikpfWkoIjsiKX19KSksZS5keW5hbWljW3JdPW5ldyBWLkR5bmFtaWNWYXJpYWJsZSg0LHt0aGlzRGVwOm8sY29udGV4dERlcDpzLHByb3BEZXA6bCxyZWY6YyxhcHBlbmQ6ZnVuY3Rpb24odCxlKXthLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPW5bcl07Vi5pc0R5bmFtaWMoaSkmJihpPXQuaW52b2tlKGUsaSksZShjLCIuIixyLCI9IixpLCI7IikpfSkpfX0pLGRlbGV0ZSBlLnN0YXRpY1tyXX19dmFyIFE9dS5SZWNvcmQsJD17YWRkOjMyNzc0LHN1YnRyYWN0OjMyNzc4LCJyZXZlcnNlIHN1YnRyYWN0IjozMjc3OX07ci5leHRfYmxlbmRfbWlubWF4JiYoJC5taW49MzI3NzUsJC5tYXg9MzI3NzYpO3ZhciB0dD1yLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMsZXQ9ci53ZWJnbF9kcmF3X2J1ZmZlcnMsbnQ9ci5vZXNfdmVydGV4X2FycmF5X29iamVjdCxpdD17ZGlydHk6ITAscHJvZmlsZTptLnByb2ZpbGV9LGF0PXt9LG90PVtdLHN0PXt9LGx0PXt9O3koImRpdGhlciIsMzAyNCkseSgiYmxlbmQuZW5hYmxlIiwzMDQyKSx4KCJibGVuZC5jb2xvciIsImJsZW5kQ29sb3IiLFswLDAsMCwwXSkseCgiYmxlbmQuZXF1YXRpb24iLCJibGVuZEVxdWF0aW9uU2VwYXJhdGUiLFszMjc3NCwzMjc3NF0pLHgoImJsZW5kLmZ1bmMiLCJibGVuZEZ1bmNTZXBhcmF0ZSIsWzEsMCwxLDBdKSx5KCJkZXB0aC5lbmFibGUiLDI5MjksITApLHgoImRlcHRoLmZ1bmMiLCJkZXB0aEZ1bmMiLDUxMykseCgiZGVwdGgucmFuZ2UiLCJkZXB0aFJhbmdlIixbMCwxXSkseCgiZGVwdGgubWFzayIsImRlcHRoTWFzayIsITApLHgoImNvbG9yTWFzayIsImNvbG9yTWFzayIsWyEwLCEwLCEwLCEwXSkseSgiY3VsbC5lbmFibGUiLDI4ODQpLHgoImN1bGwuZmFjZSIsImN1bGxGYWNlIiwxMDI5KSx4KCJmcm9udEZhY2UiLCJmcm9udEZhY2UiLDIzMDUpLHgoImxpbmVXaWR0aCIsImxpbmVXaWR0aCIsMSkseSgicG9seWdvbk9mZnNldC5lbmFibGUiLDMyODIzKSx4KCJwb2x5Z29uT2Zmc2V0Lm9mZnNldCIsInBvbHlnb25PZmZzZXQiLFswLDBdKSx5KCJzYW1wbGUuYWxwaGEiLDMyOTI2KSx5KCJzYW1wbGUuZW5hYmxlIiwzMjkyOCkseCgic2FtcGxlLmNvdmVyYWdlIiwic2FtcGxlQ292ZXJhZ2UiLFsxLCExXSkseSgic3RlbmNpbC5lbmFibGUiLDI5NjApLHgoInN0ZW5jaWwubWFzayIsInN0ZW5jaWxNYXNrIiwtMSkseCgic3RlbmNpbC5mdW5jIiwic3RlbmNpbEZ1bmMiLFs1MTksMCwtMV0pLHgoInN0ZW5jaWwub3BGcm9udCIsInN0ZW5jaWxPcFNlcGFyYXRlIixbMTAyOCw3NjgwLDc2ODAsNzY4MF0pLHgoInN0ZW5jaWwub3BCYWNrIiwic3RlbmNpbE9wU2VwYXJhdGUiLFsxMDI5LDc2ODAsNzY4MCw3NjgwXSkseSgic2Npc3Nvci5lbmFibGUiLDMwODkpLHgoInNjaXNzb3IuYm94Iiwic2Npc3NvciIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKSx4KCJ2aWV3cG9ydCIsInZpZXdwb3J0IixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pO3ZhciBjdD17Z2w6dCxjb250ZXh0OnAsc3RyaW5nczplLG5leHQ6YXQsY3VycmVudDppdCxkcmF3OmgsZWxlbWVudHM6byxidWZmZXI6aSxzaGFkZXI6ZixhdHRyaWJ1dGVzOnUuc3RhdGUsdmFvOnUsdW5pZm9ybXM6YyxmcmFtZWJ1ZmZlcjpsLGV4dGVuc2lvbnM6cix0aW1lcjpkLGlzQnVmZmVyQXJnczpJfSx1dD17cHJpbVR5cGVzOnJ0LGNvbXBhcmVGdW5jczprdCxibGVuZEZ1bmNzOlR0LGJsZW5kRXF1YXRpb25zOiQsc3RlbmNpbE9wczpBdCxnbFR5cGVzOkssb3JpZW50YXRpb25UeXBlOk10fTtldCYmKHV0LmJhY2tCdWZmZXI9WzEwMjldLHV0LmRyYXdCdWZmZXI9YShuLm1heERyYXdidWZmZXJzLChmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOmEodCwoZnVuY3Rpb24odCl7cmV0dXJuIDM2MDY0K3R9KSl9KSkpO3ZhciBmdD0wO3JldHVybntuZXh0OmF0LGN1cnJlbnQ6aXQscHJvY3M6ZnVuY3Rpb24oKXt2YXIgdD1iKCksZT10LnByb2MoInBvbGwiKSxpPXQucHJvYygicmVmcmVzaCIpLG89dC5ibG9jaygpO2UobyksaShvKTt2YXIgcyxsPXQuc2hhcmVkLGM9bC5nbCx1PWwubmV4dCxmPWwuY3VycmVudDtvKGYsIi5kaXJ0eT1mYWxzZTsiKSxTKHQsZSksUyh0LGksbnVsbCwhMCksdHQmJihzPXQubGluayh0dCkpLHIub2VzX3ZlcnRleF9hcnJheV9vYmplY3QmJmkodC5saW5rKHIub2VzX3ZlcnRleF9hcnJheV9vYmplY3QpLCIuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOyIpO2Zvcih2YXIgaD0wO2g8bi5tYXhBdHRyaWJ1dGVzOysraCl7dmFyIHA9aS5kZWYobC5hdHRyaWJ1dGVzLCJbIixoLCJdIiksZD10LmNvbmQocCwiLmJ1ZmZlciIpO2QudGhlbihjLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixoLCIpOyIsYywiLmJpbmRCdWZmZXIoIiwzNDk2MiwiLCIscCwiLmJ1ZmZlci5idWZmZXIpOyIsYywiLnZlcnRleEF0dHJpYlBvaW50ZXIoIixoLCIsIixwLCIuc2l6ZSwiLHAsIi50eXBlLCIscCwiLm5vcm1hbGl6ZWQsIixwLCIuc3RyaWRlLCIscCwiLm9mZnNldCk7IikuZWxzZShjLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsaCwiKTsiLGMsIi52ZXJ0ZXhBdHRyaWI0ZigiLGgsIiwiLHAsIi54LCIscCwiLnksIixwLCIueiwiLHAsIi53KTsiLHAsIi5idWZmZXI9bnVsbDsiKSxpKGQpLHR0JiZpKHMsIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixoLCIsIixwLCIuZGl2aXNvcik7Iil9cmV0dXJuIGkodC5zaGFyZWQudmFvLCIuY3VycmVudFZBTz1udWxsOyIsdC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsdC5zaGFyZWQudmFvLCIudGFyZ2V0VkFPKTsiKSxPYmplY3Qua2V5cyhzdCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49c3Rbcl0sYT1vLmRlZih1LCIuIixyKSxzPXQuYmxvY2soKTtzKCJpZigiLGEsIil7IixjLCIuZW5hYmxlKCIsbiwiKX1lbHNleyIsYywiLmRpc2FibGUoIixuLCIpfSIsZiwiLiIsciwiPSIsYSwiOyIpLGkocyksZSgiaWYoIixhLCIhPT0iLGYsIi4iLHIsIil7IixzLCJ9Iil9KSksT2JqZWN0LmtleXMobHQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuLHMsbD1sdFtyXSxoPWl0W3JdLHA9dC5ibG9jaygpO3AoYywiLiIsbCwiKCIpLGcoaCk/KGw9aC5sZW5ndGgsbj10Lmdsb2JhbC5kZWYodSwiLiIscikscz10Lmdsb2JhbC5kZWYoZiwiLiIscikscChhKGwsKGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIn0pKSwiKTsiLGEobCwoZnVuY3Rpb24odCl7cmV0dXJuIHMrIlsiK3QrIl09IituKyJbIit0KyJdOyJ9KSkuam9pbigiIikpLGUoImlmKCIsYShsLChmdW5jdGlvbih0KXtyZXR1cm4gbisiWyIrdCsiXSE9PSIrcysiWyIrdCsiXSJ9KSkuam9pbigifHwiKSwiKXsiLHAsIn0iKSk6KG49by5kZWYodSwiLiIscikscz1vLmRlZihmLCIuIixyKSxwKG4sIik7IixmLCIuIixyLCI9IixuLCI7IiksZSgiaWYoIixuLCIhPT0iLHMsIil7IixwLCJ9IikpLGkocCl9KSksdC5jb21waWxlKCl9KCksY29tcGlsZTpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWIoKTthLnN0YXRzPWEubGluayhpKSxPYmplY3Qua2V5cyhlLnN0YXRpYykuZm9yRWFjaCgoZnVuY3Rpb24odCl7SihhLGUsdCl9KSksd3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7SihhLHQsZSl9KSk7dmFyIG89QSh0LGUscixuKTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2MoImRyYXciLDEpO0IodCxyKSxNKHQscixlLmNvbnRleHQpLFModCxyLGUuZnJhbWVidWZmZXIpLEUodCxyLGUpLEwodCxyLGUuc3RhdGUpLE4odCxyLGUsITEsITApO3ZhciBuPWUuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQscik7aWYocih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlZKHQscixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7cih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIGk9dC5nbG9iYWwuZGVmKCJ7fSIpLGE9ci5kZWYobiwiLmlkIiksbz1yLmRlZihpLCJbIixhLCJdIik7cih0LmNvbmQobykudGhlbihvLCIuY2FsbCh0aGlzLGEwKTsiKS5lbHNlKG8sIj0iLGksIlsiLGEsIl09Iix0LmxpbmsoKGZ1bmN0aW9uKHIpe3JldHVybiBHKFksdCxlLHIsMSl9KSksIigiLG4sIik7IixvLCIuY2FsbCh0aGlzLGEwKTsiKSl9MDxPYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGgmJnIodC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7IiksdC5zaGFyZWQudmFvJiZyKHQuc2hhcmVkLnZhbywiLnNldFZBTyhudWxsKTsiKX0oYSxvKSxaKGEsbyksZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiB0LmNvbnRleHREZXAmJml8fHQucHJvcERlcH12YXIgbj10LnByb2MoImJhdGNoIiwyKTt0LmJhdGNoSWQ9IjAiLEIodCxuKTt2YXIgaT0hMSxhPSEwO09iamVjdC5rZXlzKGUuY29udGV4dCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aT1pfHxlLmNvbnRleHRbdF0ucHJvcERlcH0pKSxpfHwoTSh0LG4sZS5jb250ZXh0KSxhPSExKTt2YXIgbz0hMTtpZigocz1lLmZyYW1lYnVmZmVyKT8ocy5wcm9wRGVwP2k9bz0hMDpzLmNvbnRleHREZXAmJmkmJihvPSEwKSxvfHxTKHQsbixzKSk6Uyh0LG4sbnVsbCksZS5zdGF0ZS52aWV3cG9ydCYmZS5zdGF0ZS52aWV3cG9ydC5wcm9wRGVwJiYoaT0hMCksRSh0LG4sZSksTCh0LG4sZS5zdGF0ZSwoZnVuY3Rpb24odCl7cmV0dXJuIXIodCl9KSksZS5wcm9maWxlJiZyKGUucHJvZmlsZSl8fE4odCxuLGUsITEsImExIiksZS5jb250ZXh0RGVwPWksZS5uZWVkc0NvbnRleHQ9YSxlLm5lZWRzRnJhbWVidWZmZXI9bywoYT1lLnNoYWRlci5wcm9nVmFyKS5jb250ZXh0RGVwJiZpfHxhLnByb3BEZXApWCh0LG4sZSxudWxsKTtlbHNlIGlmKGE9YS5hcHBlbmQodCxuKSxuKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLGEsIi5wcm9ncmFtKTsiKSxlLnNoYWRlci5wcm9ncmFtKVgodCxuLGUsZS5zaGFkZXIucHJvZ3JhbSk7ZWxzZXtuKHQuc2hhcmVkLnZhbywiLnNldFZBTyhudWxsKTsiKTt2YXIgcz10Lmdsb2JhbC5kZWYoInt9IiksbD0obz1uLmRlZihhLCIuaWQiKSxuLmRlZihzLCJbIixvLCJdIikpO24odC5jb25kKGwpLnRoZW4obCwiLmNhbGwodGhpcyxhMCxhMSk7IikuZWxzZShsLCI9IixzLCJbIixvLCJdPSIsdC5saW5rKChmdW5jdGlvbihyKXtyZXR1cm4gRyhYLHQsZSxyLDIpfSkpLCIoIixhLCIpOyIsbCwiLmNhbGwodGhpcyxhMCxhMSk7IikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZuKHQuc2hhcmVkLmN1cnJlbnQsIi5kaXJ0eT10cnVlOyIpLHQuc2hhcmVkLnZhbyYmbih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iil9KGEsbyksaihhLmNvbXBpbGUoKSx7ZGVzdHJveTpmdW5jdGlvbigpe28uc2hhZGVyLnByb2dyYW0uZGVzdHJveSgpfX0pfX19ZnVuY3Rpb24gTih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfXZhciBqPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoOysrbil0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9LFU9MCxWPXtEeW5hbWljVmFyaWFibGU6dCxkZWZpbmU6ZnVuY3Rpb24ocixuKXtyZXR1cm4gbmV3IHQocixlKG4rIiIpKX0saXNEeW5hbWljOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYhZS5fcmVnbFR5cGV8fGUgaW5zdGFuY2VvZiB0fSx1bmJveDpmdW5jdGlvbiBlKHIsbil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/bmV3IHQoMCxyKToibnVtYmVyIj09dHlwZW9mIHJ8fCJib29sZWFuIj09dHlwZW9mIHI/bmV3IHQoNSxyKTpBcnJheS5pc0FycmF5KHIpP25ldyB0KDYsci5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCxuKyJbIityKyJdIil9KSkpOnIgaW5zdGFuY2VvZiB0P3I6dm9pZCAwfSxhY2Nlc3NvcjplfSxIPXtuZXh0OiJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZnVuY3Rpb24odCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX06ZnVuY3Rpb24odCl7cmV0dXJuIHNldFRpbWVvdXQodCwxNil9LGNhbmNlbDoiZnVuY3Rpb24iPT10eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWU/ZnVuY3Rpb24odCl7cmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpfTpjbGVhclRpbWVvdXR9LHE9InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sRz1zKCk7Ry56ZXJvPXMoKTt2YXIgWT1mdW5jdGlvbih0LGUpe3ZhciByPTE7ZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJihyPXQuZ2V0UGFyYW1ldGVyKDM0MDQ3KSk7dmFyIG49MSxpPTE7ZS53ZWJnbF9kcmF3X2J1ZmZlcnMmJihuPXQuZ2V0UGFyYW1ldGVyKDM0ODUyKSxpPXQuZ2V0UGFyYW1ldGVyKDM2MDYzKSk7dmFyIGE9ISFlLm9lc190ZXh0dXJlX2Zsb2F0O2lmKGEpe2E9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSgzNTUzLGEpLHQudGV4SW1hZ2UyRCgzNTUzLDAsNjQwOCwxLDEsMCw2NDA4LDUxMjYsbnVsbCk7dmFyIG89dC5jcmVhdGVGcmFtZWJ1ZmZlcigpO2lmKHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG8pLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzU1MyxhLDApLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSwzNjA1MyE9PXQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCkpYT0hMTtlbHNle3Qudmlld3BvcnQoMCwwLDEsMSksdC5jbGVhckNvbG9yKDEsMCwwLDEpLHQuY2xlYXIoMTYzODQpO3ZhciBzPUcuYWxsb2NUeXBlKDUxMjYsNCk7dC5yZWFkUGl4ZWxzKDAsMCwxLDEsNjQwOCw1MTI2LHMpLHQuZ2V0RXJyb3IoKT9hPSExOih0LmRlbGV0ZUZyYW1lYnVmZmVyKG8pLHQuZGVsZXRlVGV4dHVyZShhKSxhPTE9PT1zWzBdKSxHLmZyZWVUeXBlKHMpfX1yZXR1cm4gcz0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvVHJpZGVudFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKXx8L0VkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpfHwocz10LmNyZWF0ZVRleHR1cmUoKSxvPUcuYWxsb2NUeXBlKDUxMjEsMzYpLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZSgzNDA2NyxzKSx0LnRleEltYWdlMkQoMzQwNjksMCw2NDA4LDMsMywwLDY0MDgsNTEyMSxvKSxHLmZyZWVUeXBlKG8pLHQuYmluZFRleHR1cmUoMzQwNjcsbnVsbCksdC5kZWxldGVUZXh0dXJlKHMpLHM9IXQuZ2V0RXJyb3IoKSkse2NvbG9yQml0czpbdC5nZXRQYXJhbWV0ZXIoMzQxMCksdC5nZXRQYXJhbWV0ZXIoMzQxMSksdC5nZXRQYXJhbWV0ZXIoMzQxMiksdC5nZXRQYXJhbWV0ZXIoMzQxMyldLGRlcHRoQml0czp0LmdldFBhcmFtZXRlcigzNDE0KSxzdGVuY2lsQml0czp0LmdldFBhcmFtZXRlcigzNDE1KSxzdWJwaXhlbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQwOCksZXh0ZW5zaW9uczpPYmplY3Qua2V5cyhlKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiEhZVt0XX0pKSxtYXhBbmlzb3Ryb3BpYzpyLG1heERyYXdidWZmZXJzOm4sbWF4Q29sb3JBdHRhY2htZW50czppLHBvaW50U2l6ZURpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDEpLGxpbmVXaWR0aERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDIpLG1heFZpZXdwb3J0RGltczp0LmdldFBhcmFtZXRlcigzMzg2KSxtYXhDb21iaW5lZFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MSksbWF4Q3ViZU1hcFNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLG1heFJlbmRlcmJ1ZmZlclNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwMjQpLG1heFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNDkzMCksbWF4VGV4dHVyZVNpemU6dC5nZXRQYXJhbWV0ZXIoMzM3OSksbWF4QXR0cmlidXRlczp0LmdldFBhcmFtZXRlcigzNDkyMSksbWF4VmVydGV4VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLG1heFZlcnRleFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MCksbWF4VmFyeWluZ1ZlY3RvcnM6dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLG1heEZyYWdtZW50VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLGdsc2w6dC5nZXRQYXJhbWV0ZXIoMzU3MjQpLHJlbmRlcmVyOnQuZ2V0UGFyYW1ldGVyKDc5MzcpLHZlbmRvcjp0LmdldFBhcmFtZXRlcig3OTM2KSx2ZXJzaW9uOnQuZ2V0UGFyYW1ldGVyKDc5MzgpLHJlYWRGbG9hdDphLG5wb3RUZXh0dXJlQ3ViZTpzfX0sVz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgSW50OEFycmF5fHx0IGluc3RhbmNlb2YgSW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheX0sWD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX0sWj17c2hhcGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3QubGVuZ3RoO3Q9dFswXSllLnB1c2godC5sZW5ndGgpO3JldHVybiBlfSxmbGF0dGVuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7aWYoZS5sZW5ndGgpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpaSo9ZVthXTtlbHNlIGk9MDtzd2l0Y2gocj1ufHxHLmFsbG9jVHlwZShyLGkpLGUubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmZvcihuPWVbMF0sZT0wO2U8bjsrK2UpcltlXT10W2VdO2JyZWFrO2Nhc2UgMjpmb3Iobj1lWzBdLGU9ZVsxXSxhPWk9MDthPG47KythKWZvcih2YXIgbz10W2FdLHM9MDtzPGU7KytzKXJbaSsrXT1vW3NdO2JyZWFrO2Nhc2UgMzpjKHQsZVswXSxlWzFdLGVbMl0sciwwKTticmVhaztkZWZhdWx0OiFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKHZhciBvPTEscz1uKzE7czxyLmxlbmd0aDsrK3Mpbyo9cltzXTt2YXIgbD1yW25dO2lmKDQ9PXIubGVuZ3RoLW4pe3ZhciB1PXJbbisxXSxmPXJbbisyXTtmb3Iocj1yW24rM10scz0wO3M8bDsrK3MpYyhlW3NdLHUsZixyLGksYSksYSs9b31lbHNlIGZvcihzPTA7czxsOysrcyl0KGVbc10scixuKzEsaSxhKSxhKz1vfSh0LGUsMCxyLDApfXJldHVybiByfX0sSj17IltvYmplY3QgSW50OEFycmF5XSI6NTEyMCwiW29iamVjdCBJbnQxNkFycmF5XSI6NTEyMiwiW29iamVjdCBJbnQzMkFycmF5XSI6NTEyNCwiW29iamVjdCBVaW50OEFycmF5XSI6NTEyMSwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDE2QXJyYXldIjo1MTIzLCJbb2JqZWN0IFVpbnQzMkFycmF5XSI6NTEyNSwiW29iamVjdCBGbG9hdDMyQXJyYXldIjo1MTI2LCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOjUxMjEsIltvYmplY3QgQXJyYXlCdWZmZXJdIjo1MTIxfSxLPXtpbnQ4OjUxMjAsaW50MTY6NTEyMixpbnQzMjo1MTI0LHVpbnQ4OjUxMjEsdWludDE2OjUxMjMsdWludDMyOjUxMjUsZmxvYXQ6NTEyNixmbG9hdDMyOjUxMjZ9LFE9e2R5bmFtaWM6MzUwNDgsc3RyZWFtOjM1MDQwLHN0YXRpYzozNTA0NH0sJD1aLmZsYXR0ZW4sdHQ9Wi5zaGFwZSxldD1bXTtldFs1MTIwXT0xLGV0WzUxMjJdPTIsZXRbNTEyNF09NCxldFs1MTIxXT0xLGV0WzUxMjNdPTIsZXRbNTEyNV09NCxldFs1MTI2XT00O3ZhciBydD17cG9pbnRzOjAscG9pbnQ6MCxsaW5lczoxLGxpbmU6MSx0cmlhbmdsZXM6NCx0cmlhbmdsZTo0LCJsaW5lIGxvb3AiOjIsImxpbmUgc3RyaXAiOjMsInRyaWFuZ2xlIHN0cmlwIjo1LCJ0cmlhbmdsZSBmYW4iOjZ9LG50PW5ldyBGbG9hdDMyQXJyYXkoMSksaXQ9bmV3IFVpbnQzMkFycmF5KG50LmJ1ZmZlciksYXQ9Wzk5ODQsOTk4Niw5OTg1LDk5ODddLG90PVswLDY0MDksNjQxMCw2NDA3LDY0MDhdLHN0PXt9O3N0WzY0MDldPXN0WzY0MDZdPXN0WzY0MDJdPTEsc3RbMzQwNDFdPXN0WzY0MTBdPTIsc3RbNjQwN109c3RbMzU5MDRdPTMsc3RbNjQwOF09c3RbMzU5MDZdPTQ7dmFyIGx0PXYoIkhUTUxDYW52YXNFbGVtZW50IiksY3Q9digiT2Zmc2NyZWVuQ2FudmFzIiksdXQ9digiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiksZnQ9digiSW1hZ2VCaXRtYXAiKSxodD12KCJIVE1MSW1hZ2VFbGVtZW50IikscHQ9digiSFRNTFZpZGVvRWxlbWVudCIpLGR0PU9iamVjdC5rZXlzKEopLmNvbmNhdChbbHQsY3QsdXQsZnQsaHQscHRdKSxtdD1bXTttdFs1MTIxXT0xLG10WzUxMjZdPTQsbXRbMzYxOTNdPTIsbXRbNTEyM109MixtdFs1MTI1XT00O3ZhciBndD1bXTtndFszMjg1NF09MixndFszMjg1NV09MixndFszNjE5NF09MixndFszNDA0MV09NCxndFszMzc3Nl09LjUsZ3RbMzM3NzddPS41LGd0WzMzNzc4XT0xLGd0WzMzNzc5XT0xLGd0WzM1OTg2XT0uNSxndFszNTk4N109MSxndFszNDc5OF09MSxndFszNTg0MF09LjUsZ3RbMzU4NDFdPS4yNSxndFszNTg0Ml09LjUsZ3RbMzU4NDNdPS4yNSxndFszNjE5Nl09LjU7dmFyIHZ0PVtdO3Z0WzMyODU0XT0yLHZ0WzMyODU1XT0yLHZ0WzM2MTk0XT0yLHZ0WzMzMTg5XT0yLHZ0WzM2MTY4XT0xLHZ0WzM0MDQxXT00LHZ0WzM1OTA3XT00LHZ0WzM0ODM2XT0xNix2dFszNDg0Ml09OCx2dFszNDg0M109Njt2YXIgeXQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3RoaXMuaWQ9YysrLHRoaXMucmVmQ291bnQ9MSx0aGlzLnJlbmRlcmJ1ZmZlcj10LHRoaXMuZm9ybWF0PTMyODU0LHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCxpLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBvKGUpe3ZhciByPWUucmVuZGVyYnVmZmVyO3QuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSx0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSxlLnJlbmRlcmJ1ZmZlcj1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgdVtlLmlkXSxuLnJlbmRlcmJ1ZmZlckNvdW50LS19dmFyIHM9e3JnYmE0OjMyODU0LHJnYjU2NTozNjE5NCwicmdiNSBhMSI6MzI4NTUsZGVwdGg6MzMxODksc3RlbmNpbDozNjE2OCwiZGVwdGggc3RlbmNpbCI6MzQwNDF9O2UuZXh0X3NyZ2ImJihzLnNyZ2JhPTM1OTA3KSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmKHMucmdiYTE2Zj0zNDg0MixzLnJnYjE2Zj0zNDg0MyksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJihzLnJnYmEzMmY9MzQ4MzYpO3ZhciBsPVtdO09iamVjdC5rZXlzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbc1t0XV09dH0pKTt2YXIgYz0wLHU9e307cmV0dXJuIGEucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmbyh0aGlzKX0saS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh1KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz11W2VdLnN0YXRzLnNpemV9KSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUscil7dmFyIG49MCxhPTAsdT0zMjg1NDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmU/KCJzaGFwZSJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOigicmFkaXVzImluIGUmJihuPWE9MHxlLnJhZGl1cyksIndpZHRoImluIGUmJihuPTB8ZS53aWR0aCksImhlaWdodCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksImZvcm1hdCJpbiBlJiYodT1zW2UuZm9ybWF0XSkpOiJudW1iZXIiPT10eXBlb2YgZT8obj0wfGUsYT0ibnVtYmVyIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHR8fChvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGMuZm9ybWF0LG4sYSksaS5wcm9maWxlJiYoYy5zdGF0cy5zaXplPXZ0W2MuZm9ybWF0XSpjLndpZHRoKmMuaGVpZ2h0KSksb30sby5fcmVnbFR5cGU9InJlbmRlcmJ1ZmZlciIsby5fcmVuZGVyYnVmZmVyPWMsaS5wcm9maWxlJiYoby5zdGF0cz1jLnN0YXRzKSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjLmRlY1JlZigpfSxvfSxjbGVhcjpmdW5jdGlvbigpe1godSkuZm9yRWFjaChvKX0scmVzdG9yZTpmdW5jdGlvbigpe1godSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZS5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxlLmZvcm1hdCxlLndpZHRoLGUuaGVpZ2h0KX0pKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9fX0seHQ9W107eHRbNjQwOF09NCx4dFs2NDA3XT0zO3ZhciBidD1bXTtidFs1MTIxXT0xLGJ0WzUxMjZdPTQsYnRbMzYxOTNdPTI7dmFyIF90PVsieCIsInkiLCJ6IiwidyJdLHd0PSJibGVuZC5mdW5jIGJsZW5kLmVxdWF0aW9uIHN0ZW5jaWwuZnVuYyBzdGVuY2lsLm9wRnJvbnQgc3RlbmNpbC5vcEJhY2sgc2FtcGxlLmNvdmVyYWdlIHZpZXdwb3J0IHNjaXNzb3IuYm94IHBvbHlnb25PZmZzZXQub2Zmc2V0Ii5zcGxpdCgiICIpLFR0PXswOjAsMToxLHplcm86MCxvbmU6MSwic3JjIGNvbG9yIjo3NjgsIm9uZSBtaW51cyBzcmMgY29sb3IiOjc2OSwic3JjIGFscGhhIjo3NzAsIm9uZSBtaW51cyBzcmMgYWxwaGEiOjc3MSwiZHN0IGNvbG9yIjo3NzQsIm9uZSBtaW51cyBkc3QgY29sb3IiOjc3NSwiZHN0IGFscGhhIjo3NzIsIm9uZSBtaW51cyBkc3QgYWxwaGEiOjc3MywiY29uc3RhbnQgY29sb3IiOjMyNzY5LCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiOjMyNzcwLCJjb25zdGFudCBhbHBoYSI6MzI3NzEsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSI6MzI3NzIsInNyYyBhbHBoYSBzYXR1cmF0ZSI6Nzc2fSxrdD17bmV2ZXI6NTEyLGxlc3M6NTEzLCI8Ijo1MTMsZXF1YWw6NTE0LCI9Ijo1MTQsIj09Ijo1MTQsIj09PSI6NTE0LGxlcXVhbDo1MTUsIjw9Ijo1MTUsZ3JlYXRlcjo1MTYsIj4iOjUxNixub3RlcXVhbDo1MTcsIiE9Ijo1MTcsIiE9PSI6NTE3LGdlcXVhbDo1MTgsIj49Ijo1MTgsYWx3YXlzOjUxOX0sQXQ9ezA6MCx6ZXJvOjAsa2VlcDo3NjgwLHJlcGxhY2U6NzY4MSxpbmNyZW1lbnQ6NzY4MixkZWNyZW1lbnQ6NzY4MywiaW5jcmVtZW50IHdyYXAiOjM0MDU1LCJkZWNyZW1lbnQgd3JhcCI6MzQwNTYsaW52ZXJ0OjUzODZ9LE10PXtjdzoyMzA0LGNjdzoyMzA1fSxTdD1uZXcgeighMSwhMSwhMSwoZnVuY3Rpb24oKXt9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZigwPT09Si5sZW5ndGgpdyYmdy51cGRhdGUoKSx0dD1udWxsO2Vsc2V7dHQ9SC5uZXh0KGUpLGYoKTtmb3IodmFyIHQ9Si5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIHI9Slt0XTtyJiZyKFAsbnVsbCwwKX1nLmZsdXNoKCksdyYmdy51cGRhdGUoKX19ZnVuY3Rpb24gcigpeyF0dCYmMDxKLmxlbmd0aCYmKHR0PUgubmV4dChlKSl9ZnVuY3Rpb24gbigpe3R0JiYoSC5jYW5jZWwoZSksdHQ9bnVsbCl9ZnVuY3Rpb24gYSh0KXt0LnByZXZlbnREZWZhdWx0KCksbigpLEsuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCgpfSkpfWZ1bmN0aW9uIG8odCl7Zy5nZXRFcnJvcigpLHkucmVzdG9yZSgpLFIucmVzdG9yZSgpLE8ucmVzdG9yZSgpLEYucmVzdG9yZSgpLFUucmVzdG9yZSgpLEcucmVzdG9yZSgpLEQucmVzdG9yZSgpLHcmJncucmVzdG9yZSgpLFcucHJvY3MucmVmcmVzaCgpLHIoKSxRLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgYT10W2ldO2lmKFYuaXNEeW5hbWljKGEpKW5baV09Vi51bmJveChhLGkpO2Vsc2V7aWYoZSYmQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIG89MDtvPGEubGVuZ3RoOysrbylpZihWLmlzRHluYW1pYyhhW29dKSlyZXR1cm4gdm9pZChuW2ldPVYudW5ib3goYSxpKSk7cltpXT1hfX0pKSx7ZHluYW1pYzpuLHN0YXRpYzpyfX12YXIgcj1lKHQuY29udGV4dHx8e30sITApLG49ZSh0LnVuaWZvcm1zfHx7fSwhMCksaT1lKHQuYXR0cmlidXRlc3x8e30sITEpO3Q9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQgaW4gcil7dmFyIGU9clt0XTtkZWxldGUgclt0XSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtyW3QrIi4iK25dPWVbbl19KSl9fXZhciByPWooe30sdCk7cmV0dXJuIGRlbGV0ZSByLnVuaWZvcm1zLGRlbGV0ZSByLmF0dHJpYnV0ZXMsZGVsZXRlIHIuY29udGV4dCxkZWxldGUgci52YW8sInN0ZW5jaWwiaW4gciYmci5zdGVuY2lsLm9wJiYoci5zdGVuY2lsLm9wQmFjaz1yLnN0ZW5jaWwub3BGcm9udD1yLnN0ZW5jaWwub3AsZGVsZXRlIHIuc3RlbmNpbC5vcCksZSgiYmxlbmQiKSxlKCJkZXB0aCIpLGUoImN1bGwiKSxlKCJzdGVuY2lsIiksZSgicG9seWdvbk9mZnNldCIpLGUoInNjaXNzb3IiKSxlKCJzYW1wbGUiKSwidmFvImluIHQmJihyLnZhbz10LnZhbykscn0odCksITEpO3ZhciBhPXtncHVUaW1lOjAsY3B1VGltZTowLGNvdW50OjB9LG89Vy5jb21waWxlKHQsaSxuLHIsYSkscz1vLmRyYXcsbD1vLmJhdGNoLGM9by5zY29wZSx1PVtdO3JldHVybiBqKChmdW5jdGlvbih0LGUpe3ZhciByO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBjLmNhbGwodGhpcyxudWxsLHQsMCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpaWYoIm51bWJlciI9PXR5cGVvZiB0KWZvcihyPTA7cjx0OysrciljLmNhbGwodGhpcyxudWxsLGUscik7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gYy5jYWxsKHRoaXMsdCxlLDApO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpYy5jYWxsKHRoaXMsdFtyXSxlLHIpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZigwPHQpcmV0dXJuIGwuY2FsbCh0aGlzLGZ1bmN0aW9uKHQpe2Zvcig7dS5sZW5ndGg8dDspdS5wdXNoKG51bGwpO3JldHVybiB1fSgwfHQpLDB8dCl9ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gcy5jYWxsKHRoaXMsdCk7aWYodC5sZW5ndGgpcmV0dXJuIGwuY2FsbCh0aGlzLHQsdC5sZW5ndGgpfX0pLHtzdGF0czphLGRlc3Ryb3k6ZnVuY3Rpb24oKXtvLmRlc3Ryb3koKX19KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtXLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJihnLmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PTE2Mzg0KSwiZGVwdGgiaW4gZSYmKGcuY2xlYXJEZXB0aCgrZS5kZXB0aCkscnw9MjU2KSwic3RlbmNpbCJpbiBlJiYoZy5jbGVhclN0ZW5jaWwoMHxlLnN0ZW5jaWwpLHJ8PTEwMjQpLGcuY2xlYXIocil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gSi5wdXNoKHQpLHIoKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7dmFyIGU9TihKLHQpO0pbZV09ZnVuY3Rpb24gdCgpe3ZhciBlPU4oSix0KTtKW2VdPUpbSi5sZW5ndGgtMV0sLS1KLmxlbmd0aCwwPj1KLmxlbmd0aCYmbigpfX19fWZ1bmN0aW9uIHUoKXt2YXIgdD1YLnZpZXdwb3J0LGU9WC5zY2lzc29yX2JveDt0WzBdPXRbMV09ZVswXT1lWzFdPTAsUC52aWV3cG9ydFdpZHRoPVAuZnJhbWVidWZmZXJXaWR0aD1QLmRyYXdpbmdCdWZmZXJXaWR0aD10WzJdPWVbMl09Zy5kcmF3aW5nQnVmZmVyV2lkdGgsUC52aWV3cG9ydEhlaWdodD1QLmZyYW1lYnVmZmVySGVpZ2h0PVAuZHJhd2luZ0J1ZmZlckhlaWdodD10WzNdPWVbM109Zy5kcmF3aW5nQnVmZmVySGVpZ2h0fWZ1bmN0aW9uIGYoKXtQLnRpY2srPTEsUC50aW1lPW0oKSx1KCksVy5wcm9jcy5wb2xsKCl9ZnVuY3Rpb24gaCgpe0YucmVmcmVzaCgpLHUoKSxXLnByb2NzLnJlZnJlc2goKSx3JiZ3LnVwZGF0ZSgpfWZ1bmN0aW9uIG0oKXtyZXR1cm4ocSgpLVQpLzFlM31pZighKHQ9aSh0KSkpcmV0dXJuIG51bGw7dmFyIGc9dC5nbCx2PWcuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTtnLmlzQ29udGV4dExvc3QoKTt2YXIgeT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7dmFyIHI7ZT1lLnRvTG93ZXJDYXNlKCk7dHJ5e3I9bltlXT10LmdldEV4dGVuc2lvbihlKX1jYXRjaCh0KXt9cmV0dXJuISFyfWZvcih2YXIgbj17fSxpPTA7aTxlLmV4dGVuc2lvbnMubGVuZ3RoOysraSl7dmFyIGE9ZS5leHRlbnNpb25zW2ldO2lmKCFyKGEpKXJldHVybiBlLm9uRGVzdHJveSgpLGUub25Eb25lKCciJythKyciIGV4dGVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFdlYkdMIGNvbnRleHQsIHRyeSB1cGdyYWRpbmcgeW91ciBzeXN0ZW0gb3IgYSBkaWZmZXJlbnQgYnJvd3NlcicpLG51bGx9cmV0dXJuIGUub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2gocikse2V4dGVuc2lvbnM6bixyZXN0b3JlOmZ1bmN0aW9uKCl7T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoblt0XSYmIXIodCkpdGhyb3cgRXJyb3IoIihyZWdsKTogZXJyb3IgcmVzdG9yaW5nIGV4dGVuc2lvbiAiK3QpfSkpfX19KGcsdCk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgdD17IiI6MH0sZT1bIiJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwobj10W3JdPWUubGVuZ3RoLGUucHVzaChyKSxuKX0sc3RyOmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfX19KCksYj17dmFvQ291bnQ6MCxidWZmZXJDb3VudDowLGVsZW1lbnRzQ291bnQ6MCxmcmFtZWJ1ZmZlckNvdW50OjAsc2hhZGVyQ291bnQ6MCx0ZXh0dXJlQ291bnQ6MCxjdWJlQ291bnQ6MCxyZW5kZXJidWZmZXJDb3VudDowLG1heFRleHR1cmVVbml0czowfSxfPXkuZXh0ZW5zaW9ucyx3PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuZW5kUXVlcnlJbmRleD10aGlzLnN0YXJ0UXVlcnlJbmRleD0tMSx0aGlzLnN1bT0wLHRoaXMuc3RhdHM9bnVsbH1mdW5jdGlvbiBuKHQsZSxuKXt2YXIgaT1vLnBvcCgpfHxuZXcgcjtpLnN0YXJ0UXVlcnlJbmRleD10LGkuZW5kUXVlcnlJbmRleD1lLGkuc3VtPTAsaS5zdGF0cz1uLHMucHVzaChpKX1pZighZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkpcmV0dXJuIG51bGw7dmFyIGk9W10sYT1bXSxvPVtdLHM9W10sbD1bXSxjPVtdO3JldHVybntiZWdpblF1ZXJ5OmZ1bmN0aW9uKHQpe3ZhciByPWkucG9wKCl8fGUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmNyZWF0ZVF1ZXJ5RVhUKCk7ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuYmVnaW5RdWVyeUVYVCgzNTAwNyxyKSxhLnB1c2gociksbihhLmxlbmd0aC0xLGEubGVuZ3RoLHQpfSxlbmRRdWVyeTpmdW5jdGlvbigpe2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmVuZFF1ZXJ5RVhUKDM1MDA3KX0scHVzaFNjb3BlU3RhdHM6bix1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdCxyO2lmKDAhPT0odD1hLmxlbmd0aCkpe2MubGVuZ3RoPU1hdGgubWF4KGMubGVuZ3RoLHQrMSksbC5sZW5ndGg9TWF0aC5tYXgobC5sZW5ndGgsdCsxKSxsWzBdPTA7dmFyIG49Y1swXT0wO2ZvcihyPXQ9MDtyPGEubGVuZ3RoOysrcil7dmFyIHU9YVtyXTtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5nZXRRdWVyeU9iamVjdEVYVCh1LDM0OTE5KT8obis9ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOCksaS5wdXNoKHUpKTphW3QrK109dSxsW3IrMV09bixjW3IrMV09dH1mb3IoYS5sZW5ndGg9dCxyPXQ9MDtyPHMubGVuZ3RoOysrcil7dmFyIGY9KG49c1tyXSkuc3RhcnRRdWVyeUluZGV4O3U9bi5lbmRRdWVyeUluZGV4O24uc3VtKz1sW3VdLWxbZl0sZj1jW2ZdLCh1PWNbdV0pPT09Zj8obi5zdGF0cy5ncHVUaW1lKz1uLnN1bS8xZTYsby5wdXNoKG4pKToobi5zdGFydFF1ZXJ5SW5kZXg9ZixuLmVuZFF1ZXJ5SW5kZXg9dSxzW3QrK109bil9cy5sZW5ndGg9dH19LGdldE51bVBlbmRpbmdRdWVyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIGEubGVuZ3RofSxjbGVhcjpmdW5jdGlvbigpe2kucHVzaC5hcHBseShpLGEpO2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKGlbdF0pO2EubGVuZ3RoPTAsaS5sZW5ndGg9MH0scmVzdG9yZTpmdW5jdGlvbigpe2EubGVuZ3RoPTAsaS5sZW5ndGg9MH19fSgwLF8pLFQ9cSgpLE09Zy5kcmF3aW5nQnVmZmVyV2lkdGgsQz1nLmRyYXdpbmdCdWZmZXJIZWlnaHQsUD17dGljazowLHRpbWU6MCx2aWV3cG9ydFdpZHRoOk0sdmlld3BvcnRIZWlnaHQ6QyxmcmFtZWJ1ZmZlcldpZHRoOk0sZnJhbWVidWZmZXJIZWlnaHQ6QyxkcmF3aW5nQnVmZmVyV2lkdGg6TSxkcmF3aW5nQnVmZmVySGVpZ2h0OkMscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW99LEk9KE09e2VsZW1lbnRzOm51bGwscHJpbWl0aXZlOjQsY291bnQ6LTEsb2Zmc2V0OjAsaW5zdGFuY2VzOi0xfSxZKGcsXykpLE89cChnLGIsdCwoZnVuY3Rpb24odCl7cmV0dXJuIEQuZGVzdHJveUJ1ZmZlcih0KX0pKSx6PWQoZyxfLE8sYiksRD1TKGcsXyxJLGIsTyx6LE0pLFI9RShnLHgsYix0KSxGPWsoZyxfLEksKGZ1bmN0aW9uKCl7Vy5wcm9jcy5wb2xsKCl9KSxQLGIsdCksVT15dChnLF8sMCxiLHQpLEc9QShnLF8sSSxGLFUsYiksVz1CKGcseCxfLEksTyx6LDAsRyx7fSxELFIsTSxQLHcsdCksWD0oeD1MKGcsRyxXLnByb2NzLnBvbGwsUCksVy5uZXh0KSxaPWcuY2FudmFzLEo9W10sSz1bXSxRPVtdLCQ9W3Qub25EZXN0cm95XSx0dD1udWxsO1omJihaLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGEsITEpLFouYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLG8sITEpKTt2YXIgZXQ9Ry5zZXRGQk89cyh7ZnJhbWVidWZmZXI6Vi5kZWZpbmUuY2FsbChudWxsLDEsImZyYW1lYnVmZmVyIil9KTtyZXR1cm4gaCgpLHY9aihzLHtjbGVhcjpmdW5jdGlvbih0KXtpZigiZnJhbWVidWZmZXIiaW4gdClpZih0LmZyYW1lYnVmZmVyJiYiZnJhbWVidWZmZXJDdWJlIj09PXQuZnJhbWVidWZmZXJfcmVnbFR5cGUpZm9yKHZhciBlPTA7Nj5lOysrZSlldChqKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyLmZhY2VzW2VdfSx0KSxsKTtlbHNlIGV0KHQsbCk7ZWxzZSBsKDAsdCl9LHByb3A6Vi5kZWZpbmUuYmluZChudWxsLDEpLGNvbnRleHQ6Vi5kZWZpbmUuYmluZChudWxsLDIpLHRoaXM6Vi5kZWZpbmUuYmluZChudWxsLDMpLGRyYXc6cyh7fSksYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiBPLmNyZWF0ZSh0LDM0OTYyLCExLCExKX0sZWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuIHouY3JlYXRlKHQsITEpfSx0ZXh0dXJlOkYuY3JlYXRlMkQsY3ViZTpGLmNyZWF0ZUN1YmUscmVuZGVyYnVmZmVyOlUuY3JlYXRlLGZyYW1lYnVmZmVyOkcuY3JlYXRlLGZyYW1lYnVmZmVyQ3ViZTpHLmNyZWF0ZUN1YmUsdmFvOkQuY3JlYXRlVkFPLGF0dHJpYnV0ZXM6dixmcmFtZTpjLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI7c3dpdGNoKHQpe2Nhc2UiZnJhbWUiOnJldHVybiBjKGUpO2Nhc2UibG9zdCI6cj1LO2JyZWFrO2Nhc2UicmVzdG9yZSI6cj1RO2JyZWFrO2Nhc2UiZGVzdHJveSI6cj0kfXJldHVybiByLnB1c2goZSkse2NhbmNlbDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KWlmKHJbdF09PT1lKXtyW3RdPXJbci5sZW5ndGgtMV0sci5wb3AoKTticmVha319fX0sbGltaXRzOkksaGFzRXh0ZW5zaW9uOmZ1bmN0aW9uKHQpe3JldHVybiAwPD1JLmV4dGVuc2lvbnMuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpfSxyZWFkOngsZGVzdHJveTpmdW5jdGlvbigpe0oubGVuZ3RoPTAsbigpLFomJihaLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGEpLFoucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLG8pKSxSLmNsZWFyKCksRy5jbGVhcigpLFUuY2xlYXIoKSxELmNsZWFyKCksRi5jbGVhcigpLHouY2xlYXIoKSxPLmNsZWFyKCksdyYmdy5jbGVhcigpLCQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCgpfSkpfSxfZ2w6ZyxfcmVmcmVzaDpoLHBvbGw6ZnVuY3Rpb24oKXtmKCksdyYmdy51cGRhdGUoKX0sbm93Om0sc3RhdHM6Yn0pLHQub25Eb25lKG51bGwsdiksdn19KSl9LHt9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJidWZmZXIiKSxpPW4uQnVmZmVyO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIGkodCxlLHIpfWkuZnJvbSYmaS5hbGxvYyYmaS5hbGxvY1Vuc2FmZSYmaS5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KGEobixyKSxyLkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxhKGksbyksby5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaSh0LGUscil9LG8uYWxsb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIG49aSh0KTtyZXR1cm4gdm9pZCAwIT09ZT8ic3RyaW5nIj09dHlwZW9mIHI/bi5maWxsKGUscik6bi5maWxsKGUpOm4uZmlsbCgwKSxufSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGkodCl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4uU2xvd0J1ZmZlcih0KX19LHtidWZmZXI6ODV9XSwyODU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9aTt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gaSgpe24uY2FsbCh0aGlzKX10KCJpbmhlcml0cyIpKGksbiksaS5SZWFkYWJsZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSxpLldyaXRhYmxlPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpLGkuRHVwbGV4PXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxpLlRyYW5zZm9ybT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiksaS5QYXNzVGhyb3VnaD10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiKSxpLmZpbmlzaGVkPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksaS5waXBlbGluZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiKSxpLlN0cmVhbT1pLGkucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2Z1bmN0aW9uIGkoZSl7dC53cml0YWJsZSYmITE9PT10LndyaXRlKGUpJiZyLnBhdXNlJiZyLnBhdXNlKCl9ZnVuY3Rpb24gYSgpe3IucmVhZGFibGUmJnIucmVzdW1lJiZyLnJlc3VtZSgpfXIub24oImRhdGEiLGkpLHQub24oImRyYWluIixhKSx0Ll9pc1N0ZGlvfHxlJiYhMT09PWUuZW5kfHwoci5vbigiZW5kIixzKSxyLm9uKCJjbG9zZSIsbCkpO3ZhciBvPSExO2Z1bmN0aW9uIHMoKXtvfHwobz0hMCx0LmVuZCgpKX1mdW5jdGlvbiBsKCl7b3x8KG89ITAsImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVzdHJveSYmdC5kZXN0cm95KCkpfWZ1bmN0aW9uIGModCl7aWYodSgpLDA9PT1uLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyB0fWZ1bmN0aW9uIHUoKXtyLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixpKSx0LnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsYSksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixzKSxyLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbCksci5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGMpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHUpLHIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdSl9cmV0dXJuIHIub24oImVycm9yIixjKSx0Lm9uKCJlcnJvciIsYyksci5vbigiZW5kIix1KSxyLm9uKCJjbG9zZSIsdSksdC5vbigiY2xvc2UiLHUpLHQuZW1pdCgicGlwZSIsciksdH19LHtldmVudHM6ODQsaW5oZXJpdHM6MjMxLCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fZHVwbGV4LmpzIjoyODcsInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyI6Mjg4LCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiOjI4OSwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyI6MjkwLCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fd3JpdGFibGUuanMiOjI5MSwicmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiOjI5NSwicmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lLmpzIjoyOTd9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gaSh0LGUscil7cnx8KHI9RXJyb3IpO3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciByLG47ZnVuY3Rpb24gaShyLG4saSl7cmV0dXJuIHQuY2FsbCh0aGlzLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ZTplKHQscixuKX0ocixuLGkpKXx8dGhpc31yZXR1cm4gbj10LChyPWkpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIuX19wcm90b19fPW4saX0ocik7aS5wcm90b3R5cGUubmFtZT1yLm5hbWUsaS5wcm90b3R5cGUuY29kZT10LG5bdF09aX1mdW5jdGlvbiBhKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIHQ9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCl9KSkscj4yPyJvbmUgb2YgIi5jb25jYXQoZSwiICIpLmNvbmNhdCh0LnNsaWNlKDAsci0xKS5qb2luKCIsICIpLCIsIG9yICIpK3Rbci0xXToyPT09cj8ib25lIG9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQodFswXSwiIG9yICIpLmNvbmNhdCh0WzFdKToib2YgIi5jb25jYXQoZSwiICIpLmNvbmNhdCh0WzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoZSwiICIpLmNvbmNhdChTdHJpbmcodCkpfWkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuJ1RoZSB2YWx1ZSAiJytlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJyt0KyciJ30pLFR5cGVFcnJvciksaSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLChmdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoaT0ibm90ICIsZS5zdWJzdHIoIW98fG88MD8wOitvLGkubGVuZ3RoKT09PWkpPyhuPSJtdXN0IG5vdCBiZSIsZT1lLnJlcGxhY2UoL15ub3QgLywiIikpOm49Im11c3QgYmUiLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odm9pZCAwPT09cnx8cj50Lmxlbmd0aCkmJihyPXQubGVuZ3RoKSx0LnN1YnN0cmluZyhyLWUubGVuZ3RoLHIpPT09ZX0odCwiIGFyZ3VtZW50Iikpcz0iVGhlICIuY29uY2F0KHQsIiAiKS5jb25jYXQobiwiICIpLmNvbmNhdChhKGUsInR5cGUiKSk7ZWxzZXt2YXIgbD1mdW5jdGlvbih0LGUscil7cmV0dXJuIm51bWJlciIhPXR5cGVvZiByJiYocj0wKSwhKHIrZS5sZW5ndGg+dC5sZW5ndGgpJiYtMSE9PXQuaW5kZXhPZihlLHIpfSh0LCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO3M9J1RoZSAiJy5jb25jYXQodCwnIiAnKS5jb25jYXQobCwiICIpLmNvbmNhdChuLCIgIikuY29uY2F0KGEoZSwidHlwZSIpKX1yZXR1cm4gcys9Ii4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2Ygcil9KSxUeXBlRXJyb3IpLGkoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLGkoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIiwoZnVuY3Rpb24odCl7cmV0dXJuIlRoZSAiK3QrIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pKSxpKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLGkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIiwoZnVuY3Rpb24odCl7cmV0dXJuIkNhbm5vdCBjYWxsICIrdCsiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSkpLGkoIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLGkoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIiksaSgiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxpKCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvciksaSgiRVJSX1VOS05PV05fRU5DT0RJTkciLChmdW5jdGlvbih0KXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIit0fSksVHlwZUVycm9yKSxpKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSxlLmV4cG9ydHMuY29kZXM9bn0se31dLDI4NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX07ZS5leHBvcnRzPWM7dmFyIGk9dCgiLi9fc3RyZWFtX3JlYWRhYmxlIiksYT10KCIuL19zdHJlYW1fd3JpdGFibGUiKTt0KCJpbmhlcml0cyIpKGMsaSk7Zm9yKHZhciBvPW4oYS5wcm90b3R5cGUpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtjLnByb3RvdHlwZVtsXXx8KGMucHJvdG90eXBlW2xdPWEucHJvdG90eXBlW2xdKX1mdW5jdGlvbiBjKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyh0KTtpLmNhbGwodGhpcyx0KSxhLmNhbGwodGhpcyx0KSx0aGlzLmFsbG93SGFsZk9wZW49ITAsdCYmKCExPT09dC5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09dC53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09dC5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIix1KSkpfWZ1bmN0aW9uIHUoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxyLm5leHRUaWNrKGYsdGhpcyl9ZnVuY3Rpb24gZih0KXt0LmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQpfSxzZXQ6ZnVuY3Rpb24odCl7dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXQsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dCl9fSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vX3N0cmVhbV9yZWFkYWJsZSI6Mjg5LCIuL19zdHJlYW1fd3JpdGFibGUiOjI5MSxfcHJvY2VzczoyNzcsaW5oZXJpdHM6MjMxfV0sMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1pO3ZhciBuPXQoIi4vX3N0cmVhbV90cmFuc2Zvcm0iKTtmdW5jdGlvbiBpKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGkpKXJldHVybiBuZXcgaSh0KTtuLmNhbGwodGhpcyx0KX10KCJpbmhlcml0cyIpKGksbiksaS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7cihudWxsLHQpfX0seyIuL19zdHJlYW1fdHJhbnNmb3JtIjoyOTAsaW5oZXJpdHM6MjMxfV0sMjg5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIsbil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBpO2UuZXhwb3J0cz1BLEEuUmVhZGFibGVTdGF0ZT1rO3QoImV2ZW50cyIpLkV2ZW50RW1pdHRlcjt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpc3RlbmVycyhlKS5sZW5ndGh9LG89dCgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSIpLHM9dCgiYnVmZmVyIikuQnVmZmVyLGw9bi5VaW50OEFycmF5fHxmdW5jdGlvbigpe307dmFyIGMsdT10KCJ1dGlsIik7Yz11JiZ1LmRlYnVnbG9nP3UuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgZixoLHAsZD10KCIuL2ludGVybmFsL3N0cmVhbXMvYnVmZmVyX2xpc3QiKSxtPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IiksZz10KCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiKS5nZXRIaWdoV2F0ZXJNYXJrLHY9dCgiLi4vZXJyb3JzIikuY29kZXMseT12LkVSUl9JTlZBTElEX0FSR19UWVBFLHg9di5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLGI9di5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxfPXYuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDt0KCJpbmhlcml0cyIpKEEsbyk7dmFyIHc9bS5lcnJvck9yRGVzdHJveSxUPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIGsoZSxyLG4pe2k9aXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpLGU9ZXx8e30sImJvb2xlYW4iIT10eXBlb2YgbiYmKG49ciBpbnN0YW5jZW9mIGkpLHRoaXMub2JqZWN0TW9kZT0hIWUub2JqZWN0TW9kZSxuJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFlLnJlYWRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPWcodGhpcyxlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLG4pLHRoaXMuYnVmZmVyPW5ldyBkLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsZS5lbmNvZGluZyYmKGZ8fChmPXQoInN0cmluZ19kZWNvZGVyLyIpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgZihlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPWUuZW5jb2RpbmcpfWZ1bmN0aW9uIEEoZSl7aWYoaT1pfHx0KCIuL19zdHJlYW1fZHVwbGV4IiksISh0aGlzIGluc3RhbmNlb2YgQSkpcmV0dXJuIG5ldyBBKGUpO3ZhciByPXRoaXMgaW5zdGFuY2VvZiBpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGsoZSx0aGlzLHIpLHRoaXMucmVhZGFibGU9ITAsZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWQmJih0aGlzLl9yZWFkPWUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSksby5jYWxsKHRoaXMpfWZ1bmN0aW9uIE0odCxlLHIsbixpKXtjKCJyZWFkYWJsZUFkZENodW5rIixlKTt2YXIgYSxvPXQuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PWUpby5yZWFkaW5nPSExLGZ1bmN0aW9uKHQsZSl7aWYoYygib25Fb2ZDaHVuayIpLGUuZW5kZWQpcmV0dXJuO2lmKGUuZGVjb2Rlcil7dmFyIHI9ZS5kZWNvZGVyLmVuZCgpO3ImJnIubGVuZ3RoJiYoZS5idWZmZXIucHVzaChyKSxlLmxlbmd0aCs9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGgpfWUuZW5kZWQ9ITAsZS5zeW5jP0wodCk6KGUubmVlZFJlYWRhYmxlPSExLGUuZW1pdHRlZFJlYWRhYmxlfHwoZS5lbWl0dGVkUmVhZGFibGU9ITAsQyh0KSkpfSh0LG8pO2Vsc2UgaWYoaXx8KGE9ZnVuY3Rpb24odCxlKXt2YXIgcjtuPWUscy5pc0J1ZmZlcihuKXx8biBpbnN0YW5jZW9mIGx8fCJzdHJpbmciPT10eXBlb2YgZXx8dm9pZCAwPT09ZXx8dC5vYmplY3RNb2RlfHwocj1uZXcgeSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLGUpKTt2YXIgbjtyZXR1cm4gcn0obyxlKSksYSl3KHQsYSk7ZWxzZSBpZihvLm9iamVjdE1vZGV8fGUmJmUubGVuZ3RoPjApaWYoInN0cmluZyI9PXR5cGVvZiBlfHxvLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXMucHJvdG90eXBlfHwoZT1mdW5jdGlvbih0KXtyZXR1cm4gcy5mcm9tKHQpfShlKSksbilvLmVuZEVtaXR0ZWQ/dyh0LG5ldyBfKTpTKHQsbyxlLCEwKTtlbHNlIGlmKG8uZW5kZWQpdyh0LG5ldyB4KTtlbHNle2lmKG8uZGVzdHJveWVkKXJldHVybiExO28ucmVhZGluZz0hMSxvLmRlY29kZXImJiFyPyhlPW8uZGVjb2Rlci53cml0ZShlKSxvLm9iamVjdE1vZGV8fDAhPT1lLmxlbmd0aD9TKHQsbyxlLCExKTpQKHQsbykpOlModCxvLGUsITEpfWVsc2Ugbnx8KG8ucmVhZGluZz0hMSxQKHQsbykpO3JldHVybiFvLmVuZGVkJiYoby5sZW5ndGg8by5oaWdoV2F0ZXJNYXJrfHwwPT09by5sZW5ndGgpfWZ1bmN0aW9uIFModCxlLHIsbil7ZS5mbG93aW5nJiYwPT09ZS5sZW5ndGgmJiFlLnN5bmM/KGUuYXdhaXREcmFpbj0wLHQuZW1pdCgiZGF0YSIscikpOihlLmxlbmd0aCs9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGgsbj9lLmJ1ZmZlci51bnNoaWZ0KHIpOmUuYnVmZmVyLnB1c2gociksZS5uZWVkUmVhZGFibGUmJkwodCkpLFAodCxlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXQpfX0pLEEucHJvdG90eXBlLmRlc3Ryb3k9bS5kZXN0cm95LEEucHJvdG90eXBlLl91bmRlc3Ryb3k9bS51bmRlc3Ryb3ksQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odCxlKXtlKHQpfSxBLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBuLm9iamVjdE1vZGU/cj0hMDoic3RyaW5nIj09dHlwZW9mIHQmJigoZT1lfHxuLmRlZmF1bHRFbmNvZGluZykhPT1uLmVuY29kaW5nJiYodD1zLmZyb20odCxlKSxlPSIiKSxyPSEwKSxNKHRoaXMsdCxlLCExLHIpfSxBLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBNKHRoaXMsdCxudWxsLCEwLCExKX0sQS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sQS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7Znx8KGY9dCgic3RyaW5nX2RlY29kZXIvIikuU3RyaW5nRGVjb2Rlcik7dmFyIHI9bmV3IGYoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPXIsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBuPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsaT0iIjtudWxsIT09bjspaSs9ci53cml0ZShuLmRhdGEpLG49bi5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09aSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1pLmxlbmd0aCx0aGlzfTtmdW5jdGlvbiBFKHQsZSl7cmV0dXJuIHQ8PTB8fDA9PT1lLmxlbmd0aCYmZS5lbmRlZD8wOmUub2JqZWN0TW9kZT8xOnQhPXQ/ZS5mbG93aW5nJiZlLmxlbmd0aD9lLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOmUubGVuZ3RoOih0PmUuaGlnaFdhdGVyTWFyayYmKGUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gdD49MTA3Mzc0MTgyND90PTEwNzM3NDE4MjQ6KHQtLSx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCx0fD10Pj4+MTYsdCsrKSx0fSh0KSksdDw9ZS5sZW5ndGg/dDplLmVuZGVkP2UubGVuZ3RoOihlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gTCh0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2MoImVtaXRSZWFkYWJsZSIsZS5uZWVkUmVhZGFibGUsZS5lbWl0dGVkUmVhZGFibGUpLGUubmVlZFJlYWRhYmxlPSExLGUuZW1pdHRlZFJlYWRhYmxlfHwoYygiZW1pdFJlYWRhYmxlIixlLmZsb3dpbmcpLGUuZW1pdHRlZFJlYWRhYmxlPSEwLHIubmV4dFRpY2soQyx0KSl9ZnVuY3Rpb24gQyh0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2MoImVtaXRSZWFkYWJsZV8iLGUuZGVzdHJveWVkLGUubGVuZ3RoLGUuZW5kZWQpLGUuZGVzdHJveWVkfHwhZS5sZW5ndGgmJiFlLmVuZGVkfHwodC5lbWl0KCJyZWFkYWJsZSIpLGUuZW1pdHRlZFJlYWRhYmxlPSExKSxlLm5lZWRSZWFkYWJsZT0hZS5mbG93aW5nJiYhZS5lbmRlZCYmZS5sZW5ndGg8PWUuaGlnaFdhdGVyTWFyayxSKHQpfWZ1bmN0aW9uIFAodCxlKXtlLnJlYWRpbmdNb3JlfHwoZS5yZWFkaW5nTW9yZT0hMCxyLm5leHRUaWNrKEksdCxlKSl9ZnVuY3Rpb24gSSh0LGUpe2Zvcig7IWUucmVhZGluZyYmIWUuZW5kZWQmJihlLmxlbmd0aDxlLmhpZ2hXYXRlck1hcmt8fGUuZmxvd2luZyYmMD09PWUubGVuZ3RoKTspe3ZhciByPWUubGVuZ3RoO2lmKGMoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksdC5yZWFkKDApLHI9PT1lLmxlbmd0aClicmVha31lLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtlLnJlYWRhYmxlTGlzdGVuaW5nPXQubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLGUucmVzdW1lU2NoZWR1bGVkJiYhZS5wYXVzZWQ/ZS5mbG93aW5nPSEwOnQubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJnQucmVzdW1lKCl9ZnVuY3Rpb24geih0KXtjKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSx0LnJlYWQoMCl9ZnVuY3Rpb24gRCh0LGUpe2MoInJlc3VtZSIsZS5yZWFkaW5nKSxlLnJlYWRpbmd8fHQucmVhZCgwKSxlLnJlc3VtZVNjaGVkdWxlZD0hMSx0LmVtaXQoInJlc3VtZSIpLFIodCksZS5mbG93aW5nJiYhZS5yZWFkaW5nJiZ0LnJlYWQoMCl9ZnVuY3Rpb24gUih0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2ZvcihjKCJmbG93IixlLmZsb3dpbmcpO2UuZmxvd2luZyYmbnVsbCE9PXQucmVhZCgpOyk7fWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gMD09PWUubGVuZ3RoP251bGw6KGUub2JqZWN0TW9kZT9yPWUuYnVmZmVyLnNoaWZ0KCk6IXR8fHQ+PWUubGVuZ3RoPyhyPWUuZGVjb2Rlcj9lLmJ1ZmZlci5qb2luKCIiKToxPT09ZS5idWZmZXIubGVuZ3RoP2UuYnVmZmVyLmZpcnN0KCk6ZS5idWZmZXIuY29uY2F0KGUubGVuZ3RoKSxlLmJ1ZmZlci5jbGVhcigpKTpyPWUuYnVmZmVyLmNvbnN1bWUodCxlLmRlY29kZXIpLHIpO3ZhciByfWZ1bmN0aW9uIEIodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtjKCJlbmRSZWFkYWJsZSIsZS5lbmRFbWl0dGVkKSxlLmVuZEVtaXR0ZWR8fChlLmVuZGVkPSEwLHIubmV4dFRpY2soTixlLHQpKX1mdW5jdGlvbiBOKHQsZSl7aWYoYygiZW5kUmVhZGFibGVOVCIsdC5lbmRFbWl0dGVkLHQubGVuZ3RoKSwhdC5lbmRFbWl0dGVkJiYwPT09dC5sZW5ndGgmJih0LmVuZEVtaXR0ZWQ9ITAsZS5yZWFkYWJsZT0hMSxlLmVtaXQoImVuZCIpLHQuYXV0b0Rlc3Ryb3kpKXt2YXIgcj1lLl93cml0YWJsZVN0YXRlOyghcnx8ci5hdXRvRGVzdHJveSYmci5maW5pc2hlZCkmJmUuZGVzdHJveSgpfX1mdW5jdGlvbiBqKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfUEucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24odCl7YygicmVhZCIsdCksdD1wYXJzZUludCh0LDEwKTt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlLHI9dDtpZigwIT09dCYmKGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09dCYmZS5uZWVkUmVhZGFibGUmJigoMCE9PWUuaGlnaFdhdGVyTWFyaz9lLmxlbmd0aD49ZS5oaWdoV2F0ZXJNYXJrOmUubGVuZ3RoPjApfHxlLmVuZGVkKSlyZXR1cm4gYygicmVhZDogZW1pdFJlYWRhYmxlIixlLmxlbmd0aCxlLmVuZGVkKSwwPT09ZS5sZW5ndGgmJmUuZW5kZWQ/Qih0aGlzKTpMKHRoaXMpLG51bGw7aWYoMD09PSh0PUUodCxlKSkmJmUuZW5kZWQpcmV0dXJuIDA9PT1lLmxlbmd0aCYmQih0aGlzKSxudWxsO3ZhciBuLGk9ZS5uZWVkUmVhZGFibGU7cmV0dXJuIGMoIm5lZWQgcmVhZGFibGUiLGkpLCgwPT09ZS5sZW5ndGh8fGUubGVuZ3RoLXQ8ZS5oaWdoV2F0ZXJNYXJrKSYmYygibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGk9ITApLGUuZW5kZWR8fGUucmVhZGluZz9jKCJyZWFkaW5nIG9yIGVuZGVkIixpPSExKTppJiYoYygiZG8gcmVhZCIpLGUucmVhZGluZz0hMCxlLnN5bmM9ITAsMD09PWUubGVuZ3RoJiYoZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoZS5oaWdoV2F0ZXJNYXJrKSxlLnN5bmM9ITEsZS5yZWFkaW5nfHwodD1FKHIsZSkpKSxudWxsPT09KG49dD4wP0YodCxlKTpudWxsKT8oZS5uZWVkUmVhZGFibGU9ZS5sZW5ndGg8PWUuaGlnaFdhdGVyTWFyayx0PTApOihlLmxlbmd0aC09dCxlLmF3YWl0RHJhaW49MCksMD09PWUubGVuZ3RoJiYoZS5lbmRlZHx8KGUubmVlZFJlYWRhYmxlPSEwKSxyIT09dCYmZS5lbmRlZCYmQih0aGlzKSksbnVsbCE9PW4mJnRoaXMuZW1pdCgiZGF0YSIsbiksbn0sQS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odCl7dyh0aGlzLG5ldyBiKCJfcmVhZCgpIikpfSxBLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGkucGlwZXNDb3VudCl7Y2FzZSAwOmkucGlwZXM9dDticmVhaztjYXNlIDE6aS5waXBlcz1baS5waXBlcyx0XTticmVhaztkZWZhdWx0OmkucGlwZXMucHVzaCh0KX1pLnBpcGVzQ291bnQrPTEsYygicGlwZSBjb3VudD0lZCBvcHRzPSVqIixpLnBpcGVzQ291bnQsZSk7dmFyIG89KCFlfHwhMSE9PWUuZW5kKSYmdCE9PXIuc3Rkb3V0JiZ0IT09ci5zdGRlcnI/bDpnO2Z1bmN0aW9uIHMoZSxyKXtjKCJvbnVucGlwZSIpLGU9PT1uJiZyJiYhMT09PXIuaGFzVW5waXBlZCYmKHIuaGFzVW5waXBlZD0hMCxjKCJjbGVhbnVwIiksdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGQpLHQucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsbSksdC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHUpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixwKSx0LnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLHMpLG4ucmVtb3ZlTGlzdGVuZXIoImVuZCIsbCksbi5yZW1vdmVMaXN0ZW5lcigiZW5kIixnKSxuLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixoKSxmPSEwLCFpLmF3YWl0RHJhaW58fHQuX3dyaXRhYmxlU3RhdGUmJiF0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8dSgpKX1mdW5jdGlvbiBsKCl7Yygib25lbmQiKSx0LmVuZCgpfWkuZW5kRW1pdHRlZD9yLm5leHRUaWNrKG8pOm4ub25jZSgiZW5kIixvKSx0Lm9uKCJ1bnBpcGUiLHMpO3ZhciB1PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7YygicGlwZU9uRHJhaW4iLGUuYXdhaXREcmFpbiksZS5hd2FpdERyYWluJiZlLmF3YWl0RHJhaW4tLSwwPT09ZS5hd2FpdERyYWluJiZhKHQsImRhdGEiKSYmKGUuZmxvd2luZz0hMCxSKHQpKX19KG4pO3Qub24oImRyYWluIix1KTt2YXIgZj0hMTtmdW5jdGlvbiBoKGUpe2MoIm9uZGF0YSIpO3ZhciByPXQud3JpdGUoZSk7YygiZGVzdC53cml0ZSIsciksITE9PT1yJiYoKDE9PT1pLnBpcGVzQ291bnQmJmkucGlwZXM9PT10fHxpLnBpcGVzQ291bnQ+MSYmLTEhPT1qKGkucGlwZXMsdCkpJiYhZiYmKGMoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsaS5hd2FpdERyYWluKSxpLmF3YWl0RHJhaW4rKyksbi5wYXVzZSgpKX1mdW5jdGlvbiBwKGUpe2MoIm9uZXJyb3IiLGUpLGcoKSx0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscCksMD09PWEodCwiZXJyb3IiKSYmdyh0LGUpfWZ1bmN0aW9uIGQoKXt0LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG0pLGcoKX1mdW5jdGlvbiBtKCl7Yygib25maW5pc2giKSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZCksZygpfWZ1bmN0aW9uIGcoKXtjKCJ1bnBpcGUiKSxuLnVucGlwZSh0KX1yZXR1cm4gbi5vbigiZGF0YSIsaCksZnVuY3Rpb24odCxlLHIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gdC5wcmVwZW5kTGlzdGVuZXIoZSxyKTt0Ll9ldmVudHMmJnQuX2V2ZW50c1tlXT9BcnJheS5pc0FycmF5KHQuX2V2ZW50c1tlXSk/dC5fZXZlbnRzW2VdLnVuc2hpZnQocik6dC5fZXZlbnRzW2VdPVtyLHQuX2V2ZW50c1tlXV06dC5vbihlLHIpfSh0LCJlcnJvciIscCksdC5vbmNlKCJjbG9zZSIsZCksdC5vbmNlKCJmaW5pc2giLG0pLHQuZW1pdCgicGlwZSIsbiksaS5mbG93aW5nfHwoYygicGlwZSByZXN1bWUiKSxuLnJlc3VtZSgpKSx0fSxBLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXtoYXNVbnBpcGVkOiExfTtpZigwPT09ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1lLnBpcGVzQ291bnQpcmV0dXJuIHQmJnQhPT1lLnBpcGVzfHwodHx8KHQ9ZS5waXBlcyksZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMSx0JiZ0LmVtaXQoInVucGlwZSIsdGhpcyxyKSksdGhpcztpZighdCl7dmFyIG49ZS5waXBlcyxpPWUucGlwZXNDb3VudDtlLnBpcGVzPW51bGwsZS5waXBlc0NvdW50PTAsZS5mbG93aW5nPSExO2Zvcih2YXIgYT0wO2E8aTthKyspblthXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgbz1qKGUucGlwZXMsdCk7cmV0dXJuLTE9PT1vfHwoZS5waXBlcy5zcGxpY2UobywxKSxlLnBpcGVzQ291bnQtPTEsMT09PWUucGlwZXNDb3VudCYmKGUucGlwZXM9ZS5waXBlc1swXSksdC5lbWl0KCJ1bnBpcGUiLHRoaXMscikpLHRoaXN9LEEucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49by5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSksaT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PXQ/KGkucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1pLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT10JiYoaS5lbmRFbWl0dGVkfHxpLnJlYWRhYmxlTGlzdGVuaW5nfHwoaS5yZWFkYWJsZUxpc3RlbmluZz1pLm5lZWRSZWFkYWJsZT0hMCxpLmZsb3dpbmc9ITEsaS5lbWl0dGVkUmVhZGFibGU9ITEsYygib24gcmVhZGFibGUiLGkubGVuZ3RoLGkucmVhZGluZyksaS5sZW5ndGg/TCh0aGlzKTppLnJlYWRpbmd8fHIubmV4dFRpY2soeix0aGlzKSkpLG59LEEucHJvdG90eXBlLmFkZExpc3RlbmVyPUEucHJvdG90eXBlLm9uLEEucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49by5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLHQsZSk7cmV0dXJuInJlYWRhYmxlIj09PXQmJnIubmV4dFRpY2soTyx0aGlzKSxufSxBLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU9by5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4icmVhZGFibGUiIT09dCYmdm9pZCAwIT09dHx8ci5uZXh0VGljayhPLHRoaXMpLGV9LEEucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHQuZmxvd2luZ3x8KGMoInJlc3VtZSIpLHQuZmxvd2luZz0hdC5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbih0LGUpe2UucmVzdW1lU2NoZWR1bGVkfHwoZS5yZXN1bWVTY2hlZHVsZWQ9ITAsci5uZXh0VGljayhELHQsZSkpfSh0aGlzLHQpKSx0LnBhdXNlZD0hMSx0aGlzfSxBLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBjKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihjKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LEEucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXRoaXMuX3JlYWRhYmxlU3RhdGUsbj0hMTtmb3IodmFyIGkgaW4gdC5vbigiZW5kIiwoZnVuY3Rpb24oKXtpZihjKCJ3cmFwcGVkIGVuZCIpLHIuZGVjb2RlciYmIXIuZW5kZWQpe3ZhciB0PXIuZGVjb2Rlci5lbmQoKTt0JiZ0Lmxlbmd0aCYmZS5wdXNoKHQpfWUucHVzaChudWxsKX0pKSx0Lm9uKCJkYXRhIiwoZnVuY3Rpb24oaSl7KGMoIndyYXBwZWQgZGF0YSIpLHIuZGVjb2RlciYmKGk9ci5kZWNvZGVyLndyaXRlKGkpKSxyLm9iamVjdE1vZGUmJm51bGw9PWkpfHwoci5vYmplY3RNb2RlfHxpJiZpLmxlbmd0aCkmJihlLnB1c2goaSl8fChuPSEwLHQucGF1c2UoKSkpfSkpLHQpdm9pZCAwPT09dGhpc1tpXSYmImZ1bmN0aW9uIj09dHlwZW9mIHRbaV0mJih0aGlzW2ldPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0W2VdLmFwcGx5KHQsYXJndW1lbnRzKX19KGkpKTtmb3IodmFyIGE9MDthPFQubGVuZ3RoO2ErKyl0Lm9uKFRbYV0sdGhpcy5lbWl0LmJpbmQodGhpcyxUW2FdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oZSl7Yygid3JhcHBlZCBfcmVhZCIsZSksbiYmKG49ITEsdC5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihBLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09aCYmKGg9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL2FzeW5jX2l0ZXJhdG9yIikpLGgodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPXQpfX0pLEEuX2Zyb21MaXN0PUYsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihBLmZyb209ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdm9pZCAwPT09cCYmKHA9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20iKSkscChBLGUscil9KX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuLi9lcnJvcnMiOjI4NiwiLi9fc3RyZWFtX2R1cGxleCI6Mjg3LCIuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IiOjI5MiwiLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0IjoyOTMsIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IjoyOTQsIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tIjoyOTYsIi4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZSI6Mjk4LCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIjoyOTksX3Byb2Nlc3M6Mjc3LGJ1ZmZlcjo4NSxldmVudHM6ODQsaW5oZXJpdHM6MjMxLCJzdHJpbmdfZGVjb2Rlci8iOjMwMCx1dGlsOjgzfV0sMjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz11O3ZhciBuPXQoIi4uL2Vycm9ycyIpLmNvZGVzLGk9bi5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxhPW4uRVJSX01VTFRJUExFX0NBTExCQUNLLG89bi5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHM9bi5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAsbD10KCIuL19zdHJlYW1fZHVwbGV4Iik7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXRoaXMuX3RyYW5zZm9ybVN0YXRlO3IudHJhbnNmb3JtaW5nPSExO3ZhciBuPXIud3JpdGVjYjtpZihudWxsPT09bilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IGEpO3Iud3JpdGVjaHVuaz1udWxsLHIud3JpdGVjYj1udWxsLG51bGwhPWUmJnRoaXMucHVzaChlKSxuKHQpO3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7aS5yZWFkaW5nPSExLChpLm5lZWRSZWFkYWJsZXx8aS5sZW5ndGg8aS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChpLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIHUodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1KHQpO2wuY2FsbCh0aGlzLHQpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpjLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSx0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHQudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPXQudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5mbHVzaCYmKHRoaXMuX2ZsdXNoPXQuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLGYpfWZ1bmN0aW9uIGYoKXt2YXIgdD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/aCh0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goKGZ1bmN0aW9uKGUscil7aCh0LGUscil9KSl9ZnVuY3Rpb24gaCh0LGUscil7aWYoZSlyZXR1cm4gdC5lbWl0KCJlcnJvciIsZSk7aWYobnVsbCE9ciYmdC5wdXNoKHIpLHQuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBzO2lmKHQuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgbztyZXR1cm4gdC5wdXNoKG51bGwpfXQoImluaGVyaXRzIikodSxsKSx1LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsbC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsdCxlKX0sdS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7cihuZXcgaSgiX3RyYW5zZm9ybSgpIikpfSx1LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKG4ud3JpdGVjYj1yLG4ud3JpdGVjaHVuaz10LG4ud3JpdGVlbmNvZGluZz1lLCFuLnRyYW5zZm9ybWluZyl7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTsobi5uZWVkVHJhbnNmb3JtfHxpLm5lZWRSZWFkYWJsZXx8aS5sZW5ndGg8aS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChpLmhpZ2hXYXRlck1hcmspfX0sdS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PWUud3JpdGVjaHVua3x8ZS50cmFuc2Zvcm1pbmc/ZS5uZWVkVHJhbnNmb3JtPSEwOihlLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oZS53cml0ZWNodW5rLGUud3JpdGVlbmNvZGluZyxlLmFmdGVyVHJhbnNmb3JtKSl9LHUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHQsZSl7bC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLHQsKGZ1bmN0aW9uKHQpe2UodCl9KSl9fSx7Ii4uL2Vycm9ycyI6Mjg2LCIuL19zdHJlYW1fZHVwbGV4IjoyODcsaW5oZXJpdHM6MjMxfV0sMjkxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIsbil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7dmFyIGU9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuZW50cnk7dC5lbnRyeT1udWxsO2Zvcig7bjspe3ZhciBpPW4uY2FsbGJhY2s7ZS5wZW5kaW5nY2ItLSxpKHIpLG49bi5uZXh0fWUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9dH0oZSx0KX19dmFyIGE7ZS5leHBvcnRzPUEsQS5Xcml0YWJsZVN0YXRlPWs7dmFyIG89e2RlcHJlY2F0ZTp0KCJ1dGlsLWRlcHJlY2F0ZSIpfSxzPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxsPXQoImJ1ZmZlciIpLkJ1ZmZlcixjPW4uVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciB1LGY9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiKSxoPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZSIpLmdldEhpZ2hXYXRlck1hcmsscD10KCIuLi9lcnJvcnMiKS5jb2RlcyxkPXAuRVJSX0lOVkFMSURfQVJHX1RZUEUsbT1wLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGc9cC5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssdj1wLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUseT1wLkVSUl9TVFJFQU1fREVTVFJPWUVELHg9cC5FUlJfU1RSRUFNX05VTExfVkFMVUVTLGI9cC5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxfPXAuRVJSX1VOS05PV05fRU5DT0RJTkcsdz1mLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIFQoKXt9ZnVuY3Rpb24gayhlLG4sbyl7YT1hfHx0KCIuL19zdHJlYW1fZHVwbGV4IiksZT1lfHx7fSwiYm9vbGVhbiIhPXR5cGVvZiBvJiYobz1uIGluc3RhbmNlb2YgYSksdGhpcy5vYmplY3RNb2RlPSEhZS5vYmplY3RNb2RlLG8mJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9aCh0aGlzLGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsbyksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITE7dmFyIHM9ITE9PT1lLmRlY29kZVN0cmluZ3M7dGhpcy5kZWNvZGVTdHJpbmdzPSFzLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXt2YXIgbj10Ll93cml0YWJsZVN0YXRlLGk9bi5zeW5jLGE9bi53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBnO2lmKGZ1bmN0aW9uKHQpe3Qud3JpdGluZz0hMSx0LndyaXRlY2I9bnVsbCx0Lmxlbmd0aC09dC53cml0ZWxlbix0LndyaXRlbGVuPTB9KG4pLGUpIWZ1bmN0aW9uKHQsZSxuLGksYSl7LS1lLnBlbmRpbmdjYixuPyhyLm5leHRUaWNrKGEsaSksci5uZXh0VGljayhQLHQsZSksdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdyh0LGkpKTooYShpKSx0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx3KHQsaSksUCh0LGUpKX0odCxuLGksZSxhKTtlbHNle3ZhciBvPUwobil8fHQuZGVzdHJveWVkO298fG4uY29ya2VkfHxuLmJ1ZmZlclByb2Nlc3Npbmd8fCFuLmJ1ZmZlcmVkUmVxdWVzdHx8RSh0LG4pLGk/ci5uZXh0VGljayhTLHQsbixvLGEpOlModCxuLG8sYSl9fShuLHQpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhZS5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGkodGhpcyl9ZnVuY3Rpb24gQShlKXt2YXIgcj10aGlzIGluc3RhbmNlb2YoYT1hfHx0KCIuL19zdHJlYW1fZHVwbGV4IikpO2lmKCFyJiYhdS5jYWxsKEEsdGhpcykpcmV0dXJuIG5ldyBBKGUpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IGsoZSx0aGlzLHIpLHRoaXMud3JpdGFibGU9ITAsZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLndyaXRlJiYodGhpcy5fd3JpdGU9ZS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIGUud3JpdGV2JiYodGhpcy5fd3JpdGV2PWUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1lLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmZpbmFsJiYodGhpcy5fZmluYWw9ZS5maW5hbCkpLHMuY2FsbCh0aGlzKX1mdW5jdGlvbiBNKHQsZSxyLG4saSxhLG8pe2Uud3JpdGVsZW49bixlLndyaXRlY2I9byxlLndyaXRpbmc9ITAsZS5zeW5jPSEwLGUuZGVzdHJveWVkP2Uub253cml0ZShuZXcgeSgid3JpdGUiKSk6cj90Ll93cml0ZXYoaSxlLm9ud3JpdGUpOnQuX3dyaXRlKGksYSxlLm9ud3JpdGUpLGUuc3luYz0hMX1mdW5jdGlvbiBTKHQsZSxyLG4pe3J8fGZ1bmN0aW9uKHQsZSl7MD09PWUubGVuZ3RoJiZlLm5lZWREcmFpbiYmKGUubmVlZERyYWluPSExLHQuZW1pdCgiZHJhaW4iKSl9KHQsZSksZS5wZW5kaW5nY2ItLSxuKCksUCh0LGUpfWZ1bmN0aW9uIEUodCxlKXtlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHI9ZS5idWZmZXJlZFJlcXVlc3Q7aWYodC5fd3JpdGV2JiZyJiZyLm5leHQpe3ZhciBuPWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQsYT1uZXcgQXJyYXkobiksbz1lLmNvcmtlZFJlcXVlc3RzRnJlZTtvLmVudHJ5PXI7Zm9yKHZhciBzPTAsbD0hMDtyOylhW3NdPXIsci5pc0J1Znx8KGw9ITEpLHI9ci5uZXh0LHMrPTE7YS5hbGxCdWZmZXJzPWwsTSh0LGUsITAsZS5sZW5ndGgsYSwiIixvLmZpbmlzaCksZS5wZW5kaW5nY2IrKyxlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxvLm5leHQ/KGUuY29ya2VkUmVxdWVzdHNGcmVlPW8ubmV4dCxvLm5leHQ9bnVsbCk6ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGkoZSksZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtyOyl7dmFyIGM9ci5jaHVuayx1PXIuZW5jb2RpbmcsZj1yLmNhbGxiYWNrO2lmKE0odCxlLCExLGUub2JqZWN0TW9kZT8xOmMubGVuZ3RoLGMsdSxmKSxyPXIubmV4dCxlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sZS53cml0aW5nKWJyZWFrfW51bGw9PT1yJiYoZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfWUuYnVmZmVyZWRSZXF1ZXN0PXIsZS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIEwodCl7cmV0dXJuIHQuZW5kaW5nJiYwPT09dC5sZW5ndGgmJm51bGw9PT10LmJ1ZmZlcmVkUmVxdWVzdCYmIXQuZmluaXNoZWQmJiF0LndyaXRpbmd9ZnVuY3Rpb24gQyh0LGUpe3QuX2ZpbmFsKChmdW5jdGlvbihyKXtlLnBlbmRpbmdjYi0tLHImJncodCxyKSxlLnByZWZpbmlzaGVkPSEwLHQuZW1pdCgicHJlZmluaXNoIiksUCh0LGUpfSkpfWZ1bmN0aW9uIFAodCxlKXt2YXIgbj1MKGUpO2lmKG4mJihmdW5jdGlvbih0LGUpe2UucHJlZmluaXNoZWR8fGUuZmluYWxDYWxsZWR8fCgiZnVuY3Rpb24iIT10eXBlb2YgdC5fZmluYWx8fGUuZGVzdHJveWVkPyhlLnByZWZpbmlzaGVkPSEwLHQuZW1pdCgicHJlZmluaXNoIikpOihlLnBlbmRpbmdjYisrLGUuZmluYWxDYWxsZWQ9ITAsci5uZXh0VGljayhDLHQsZSkpKX0odCxlKSwwPT09ZS5wZW5kaW5nY2ImJihlLmZpbmlzaGVkPSEwLHQuZW1pdCgiZmluaXNoIiksZS5hdXRvRGVzdHJveSkpKXt2YXIgaT10Ll9yZWFkYWJsZVN0YXRlOyghaXx8aS5hdXRvRGVzdHJveSYmaS5lbmRFbWl0dGVkKSYmdC5kZXN0cm95KCl9cmV0dXJuIG59dCgiaW5oZXJpdHMiKShBLHMpLGsucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxlPVtdO3Q7KWUucHVzaCh0KSx0PXQubmV4dDtyZXR1cm4gZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGsucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6by5kZXByZWNhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9KSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaCh0KXt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyh1PUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuISF1LmNhbGwodGhpcyx0KXx8dGhpcz09PUEmJih0JiZ0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2Ygayl9fSkpOnU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzfSxBLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dyh0aGlzLG5ldyB2KX0sQS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dGhpcy5fd3JpdGFibGVTdGF0ZSxvPSExLHM9IWEub2JqZWN0TW9kZSYmKGk9dCxsLmlzQnVmZmVyKGkpfHxpIGluc3RhbmNlb2YgYyk7cmV0dXJuIHMmJiFsLmlzQnVmZmVyKHQpJiYodD1mdW5jdGlvbih0KXtyZXR1cm4gbC5mcm9tKHQpfSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihuPWUsZT1udWxsKSxzP2U9ImJ1ZmZlciI6ZXx8KGU9YS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1UKSxhLmVuZGluZz9mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBiO3codCxuKSxyLm5leHRUaWNrKGUsbil9KHRoaXMsbik6KHN8fGZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhO3JldHVybiBudWxsPT09bj9hPW5ldyB4OiJzdHJpbmciPT10eXBlb2Ygbnx8ZS5vYmplY3RNb2RlfHwoYT1uZXcgZCgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sbikpLCFhfHwodyh0LGEpLHIubmV4dFRpY2soaSxhKSwhMSl9KHRoaXMsYSx0LG4pKSYmKGEucGVuZGluZ2NiKyssbz1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoIXIpe3ZhciBvPWZ1bmN0aW9uKHQsZSxyKXt0Lm9iamVjdE1vZGV8fCExPT09dC5kZWNvZGVTdHJpbmdzfHwic3RyaW5nIiE9dHlwZW9mIGV8fChlPWwuZnJvbShlLHIpKTtyZXR1cm4gZX0oZSxuLGkpO24hPT1vJiYocj0hMCxpPSJidWZmZXIiLG49byl9dmFyIHM9ZS5vYmplY3RNb2RlPzE6bi5sZW5ndGg7ZS5sZW5ndGgrPXM7dmFyIGM9ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrO2N8fChlLm5lZWREcmFpbj0hMCk7aWYoZS53cml0aW5nfHxlLmNvcmtlZCl7dmFyIHU9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bixlbmNvZGluZzppLGlzQnVmOnIsY2FsbGJhY2s6YSxuZXh0Om51bGx9LHU/dS5uZXh0PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdDplLmJ1ZmZlcmVkUmVxdWVzdD1lLmxhc3RCdWZmZXJlZFJlcXVlc3QsZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIE0odCxlLCExLHMsbixpLGEpO3JldHVybiBjfSh0aGlzLGEscyx0LGUsbikpLG99LEEucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxBLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93cml0YWJsZVN0YXRlO3QuY29ya2VkJiYodC5jb3JrZWQtLSx0LndyaXRpbmd8fHQuY29ya2VkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fCF0LmJ1ZmZlcmVkUmVxdWVzdHx8RSh0aGlzLHQpKX0sQS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh0KyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IF8odCk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXQsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksQS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXtyKG5ldyBtKCJfd3JpdGUoKSIpKX0sQS5wcm90b3R5cGUuX3dyaXRldj1udWxsLEEucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8obj10LHQ9bnVsbCxlPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYobj1lLGU9bnVsbCksbnVsbCE9dCYmdGhpcy53cml0ZSh0LGUpLGkuY29ya2VkJiYoaS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxpLmVuZGluZ3x8ZnVuY3Rpb24odCxlLG4pe2UuZW5kaW5nPSEwLFAodCxlKSxuJiYoZS5maW5pc2hlZD9yLm5leHRUaWNrKG4pOnQub25jZSgiZmluaXNoIixuKSk7ZS5lbmRlZD0hMCx0LndyaXRhYmxlPSExfSh0aGlzLGksbiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dCl9fSksQS5wcm90b3R5cGUuZGVzdHJveT1mLmRlc3Ryb3ksQS5wcm90b3R5cGUuX3VuZGVzdHJveT1mLnVuZGVzdHJveSxBLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih0LGUpe2UodCl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4uL2Vycm9ycyI6Mjg2LCIuL19zdHJlYW1fZHVwbGV4IjoyODcsIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IjoyOTQsIi4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZSI6Mjk4LCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIjoyOTksX3Byb2Nlc3M6Mjc3LGJ1ZmZlcjo4NSxpbmhlcml0czoyMzEsInV0aWwtZGVwcmVjYXRlIjozMzB9XSwyOTI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuO2Z1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fXZhciBhPXQoIi4vZW5kLW9mLXN0cmVhbSIpLG89U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLHM9U3ltYm9sKCJsYXN0UmVqZWN0IiksbD1TeW1ib2woImVycm9yIiksYz1TeW1ib2woImVuZGVkIiksdT1TeW1ib2woImxhc3RQcm9taXNlIiksZj1TeW1ib2woImhhbmRsZVByb21pc2UiKSxoPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gcCh0LGUpe3JldHVybnt2YWx1ZTp0LGRvbmU6ZX19ZnVuY3Rpb24gZCh0KXt2YXIgZT10W29dO2lmKG51bGwhPT1lKXt2YXIgcj10W2hdLnJlYWQoKTtudWxsIT09ciYmKHRbdV09bnVsbCx0W29dPW51bGwsdFtzXT1udWxsLGUocChyLCExKSkpfX1mdW5jdGlvbiBtKHQpe3IubmV4dFRpY2soZCx0KX12YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoKGZ1bmN0aW9uKCl7fSkpLHY9T2JqZWN0LnNldFByb3RvdHlwZU9mKChpKG49e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1toXX0sbmV4dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzW2xdO2lmKG51bGwhPT1lKXJldHVybiBQcm9taXNlLnJlamVjdChlKTtpZih0aGlzW2NdKXJldHVybiBQcm9taXNlLnJlc29sdmUocCh2b2lkIDAsITApKTtpZih0aGlzW2hdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsbil7ci5uZXh0VGljaygoZnVuY3Rpb24oKXt0W2xdP24odFtsXSk6ZShwKHZvaWQgMCwhMCkpfSkpfSkpO3ZhciBuLGk9dGhpc1t1XTtpZihpKW49bmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXt0LnRoZW4oKGZ1bmN0aW9uKCl7ZVtjXT9yKHAodm9pZCAwLCEwKSk6ZVtmXShyLG4pfSksbil9fShpLHRoaXMpKTtlbHNle3ZhciBhPXRoaXNbaF0ucmVhZCgpO2lmKG51bGwhPT1hKXJldHVybiBQcm9taXNlLnJlc29sdmUocChhLCExKSk7bj1uZXcgUHJvbWlzZSh0aGlzW2ZdKX1yZXR1cm4gdGhpc1t1XT1uLG59fSxTeW1ib2wuYXN5bmNJdGVyYXRvciwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxpKG4sInJldHVybiIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7dFtoXS5kZXN0cm95KG51bGwsKGZ1bmN0aW9uKHQpe3Q/cih0KTplKHAodm9pZCAwLCEwKSl9KSl9KSl9KSksbiksZyk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9T2JqZWN0LmNyZWF0ZSh2LChpKGU9e30saCx7dmFsdWU6dCx3cml0YWJsZTohMH0pLGkoZSxvLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaShlLHMse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKGUsbCx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkoZSxjLHt2YWx1ZTp0Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxpKGUsZix7dmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgbj1yW2hdLnJlYWQoKTtuPyhyW3VdPW51bGwscltvXT1udWxsLHJbc109bnVsbCx0KHAobiwhMSkpKToocltvXT10LHJbc109ZSl9LHdyaXRhYmxlOiEwfSksZSkpO3JldHVybiByW3VdPW51bGwsYSh0LChmdW5jdGlvbih0KXtpZih0JiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09dC5jb2RlKXt2YXIgZT1yW3NdO3JldHVybiBudWxsIT09ZSYmKHJbdV09bnVsbCxyW29dPW51bGwscltzXT1udWxsLGUodCkpLHZvaWQocltsXT10KX12YXIgbj1yW29dO251bGwhPT1uJiYoclt1XT1udWxsLHJbb109bnVsbCxyW3NdPW51bGwsbihwKHZvaWQgMCwhMCkpKSxyW2NdPSEwfSkpLHQub24oInJlYWRhYmxlIixtLmJpbmQobnVsbCxyKSkscn19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vZW5kLW9mLXN0cmVhbSI6Mjk1LF9wcm9jZXNzOjI3N31dLDI5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19dmFyIG89dCgiYnVmZmVyIikuQnVmZmVyLHM9dCgidXRpbCIpLmluc3BlY3QsbD1zJiZzLmN1c3RvbXx8Imluc3BlY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXZhciBlLHIsYztyZXR1cm4gZT10LChyPVt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT17ZGF0YTp0LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1lOnRoaXMuaGVhZD1lLHRoaXMudGFpbD1lLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT17ZGF0YTp0LG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9ZSksdGhpcy5oZWFkPWUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsdH19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIGU9dGhpcy5oZWFkLHI9IiIrZS5kYXRhO2U9ZS5uZXh0OylyKz10K2UuZGF0YTtyZXR1cm4gcn19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBvLmFsbG9jKDApO2Zvcih2YXIgZSxyLG4saT1vLmFsbG9jVW5zYWZlKHQ+Pj4wKSxhPXRoaXMuaGVhZCxzPTA7YTspZT1hLmRhdGEscj1pLG49cyxvLnByb3RvdHlwZS5jb3B5LmNhbGwoZSxyLG4pLHMrPWEuZGF0YS5sZW5ndGgsYT1hLm5leHQ7cmV0dXJuIGl9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiB0PHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8ocj10aGlzLmhlYWQuZGF0YS5zbGljZSgwLHQpLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKHQpKTpyPXQ9PT10aGlzLmhlYWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOmU/dGhpcy5fZ2V0U3RyaW5nKHQpOnRoaXMuX2dldEJ1ZmZlcih0KSxyfX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oZWFkLHI9MSxuPWUuZGF0YTtmb3IodC09bi5sZW5ndGg7ZT1lLm5leHQ7KXt2YXIgaT1lLmRhdGEsYT10PmkubGVuZ3RoP2kubGVuZ3RoOnQ7aWYoYT09PWkubGVuZ3RoP24rPWk6bis9aS5zbGljZSgwLHQpLDA9PSh0LT1hKSl7YT09PWkubGVuZ3RoPygrK3IsZS5uZXh0P3RoaXMuaGVhZD1lLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPWUsZS5kYXRhPWkuc2xpY2UoYSkpO2JyZWFrfSsrcn1yZXR1cm4gdGhpcy5sZW5ndGgtPXIsbn19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW8uYWxsb2NVbnNhZmUodCkscj10aGlzLmhlYWQsbj0xO2ZvcihyLmRhdGEuY29weShlKSx0LT1yLmRhdGEubGVuZ3RoO3I9ci5uZXh0Oyl7dmFyIGk9ci5kYXRhLGE9dD5pLmxlbmd0aD9pLmxlbmd0aDp0O2lmKGkuY29weShlLGUubGVuZ3RoLXQsMCxhKSwwPT0odC09YSkpe2E9PT1pLmxlbmd0aD8oKytuLHIubmV4dD90aGlzLmhlYWQ9ci5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1yLHIuZGF0YT1pLnNsaWNlKGEpKTticmVha30rK259cmV0dXJuIHRoaXMubGVuZ3RoLT1uLGV9fSx7a2V5OmwsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcyh0aGlzLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP24oT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpKHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpuKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSkpfXJldHVybiB0fSh7fSxlLHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pJiZhKGUucHJvdG90eXBlLHIpLGMmJmEoZSxjKSx0fSgpfSx7YnVmZmVyOjg1LHV0aWw6ODN9XSwyOTQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlKXtpKHQsZSksbih0KX1mdW5jdGlvbiBuKHQpe3QuX3dyaXRhYmxlU3RhdGUmJiF0Ll93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8dC5fcmVhZGFibGVTdGF0ZSYmIXQuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHx0LmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gaSh0LGUpe3QuZW1pdCgiZXJyb3IiLGUpfWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbihlLGEpe3ZhciBvPXRoaXMscz10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCxsPXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO3JldHVybiBzfHxsPyhhP2EoZSk6ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx0Lm5leHRUaWNrKGksdGhpcyxlKSk6dC5uZXh0VGljayhpLHRoaXMsZSkpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShlfHxudWxsLChmdW5jdGlvbihlKXshYSYmZT9vLl93cml0YWJsZVN0YXRlP28uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3QubmV4dFRpY2sobixvKTooby5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdC5uZXh0VGljayhyLG8sZSkpOnQubmV4dFRpY2socixvLGUpOmE/KHQubmV4dFRpY2sobixvKSxhKGUpKTp0Lm5leHRUaWNrKG4sbyl9KSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9yZWFkYWJsZVN0YXRlLG49dC5fd3JpdGFibGVTdGF0ZTtyJiZyLmF1dG9EZXN0cm95fHxuJiZuLmF1dG9EZXN0cm95P3QuZGVzdHJveShlKTp0LmVtaXQoImVycm9yIixlKX19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjI3N31dLDI5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9lcnJvcnMiKS5jb2Rlcy5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBpKCl7fWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUscixhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdChlLG51bGwscik7cnx8KHI9e30pLGE9ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWUpe2U9ITA7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjtpKyspbltpXT1hcmd1bWVudHNbaV07dC5hcHBseSh0aGlzLG4pfX19KGF8fGkpO3ZhciBvPXIucmVhZGFibGV8fCExIT09ci5yZWFkYWJsZSYmZS5yZWFkYWJsZSxzPXIud3JpdGFibGV8fCExIT09ci53cml0YWJsZSYmZS53cml0YWJsZSxsPWZ1bmN0aW9uKCl7ZS53cml0YWJsZXx8dSgpfSxjPWUuX3dyaXRhYmxlU3RhdGUmJmUuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsdT1mdW5jdGlvbigpe3M9ITEsYz0hMCxvfHxhLmNhbGwoZSl9LGY9ZS5fcmVhZGFibGVTdGF0ZSYmZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLGg9ZnVuY3Rpb24oKXtvPSExLGY9ITAsc3x8YS5jYWxsKGUpfSxwPWZ1bmN0aW9uKHQpe2EuY2FsbChlLHQpfSxkPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIG8mJiFmPyhlLl9yZWFkYWJsZVN0YXRlJiZlLl9yZWFkYWJsZVN0YXRlLmVuZGVkfHwodD1uZXcgbiksYS5jYWxsKGUsdCkpOnMmJiFjPyhlLl93cml0YWJsZVN0YXRlJiZlLl93cml0YWJsZVN0YXRlLmVuZGVkfHwodD1uZXcgbiksYS5jYWxsKGUsdCkpOnZvaWQgMH0sbT1mdW5jdGlvbigpe2UucmVxLm9uKCJmaW5pc2giLHUpfTtyZXR1cm4hZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hYm9ydH0oZSk/cyYmIWUuX3dyaXRhYmxlU3RhdGUmJihlLm9uKCJlbmQiLGwpLGUub24oImNsb3NlIixsKSk6KGUub24oImNvbXBsZXRlIix1KSxlLm9uKCJhYm9ydCIsZCksZS5yZXE/bSgpOmUub24oInJlcXVlc3QiLG0pKSxlLm9uKCJlbmQiLGgpLGUub24oImZpbmlzaCIsdSksITEhPT1yLmVycm9yJiZlLm9uKCJlcnJvciIscCksZS5vbigiY2xvc2UiLGQpLGZ1bmN0aW9uKCl7ZS5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLHUpLGUucmVtb3ZlTGlzdGVuZXIoImFib3J0IixkKSxlLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixtKSxlLnJlcSYmZS5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsdSksZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixsKSxlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbCksZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIix1KSxlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGgpLGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixwKSxlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZCl9fX0seyIuLi8uLi8uLi9lcnJvcnMiOjI4Nn1dLDI5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSx7fV0sMjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuO3ZhciBpPXQoIi4uLy4uLy4uL2Vycm9ycyIpLmNvZGVzLGE9aS5FUlJfTUlTU0lOR19BUkdTLG89aS5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBzKHQpe2lmKHQpdGhyb3cgdH1mdW5jdGlvbiBsKGUscixpLGEpe2E9ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7ZXx8KGU9ITAsdC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShhKTt2YXIgcz0hMTtlLm9uKCJjbG9zZSIsKGZ1bmN0aW9uKCl7cz0hMH0pKSx2b2lkIDA9PT1uJiYobj10KCIuL2VuZC1vZi1zdHJlYW0iKSksbihlLHtyZWFkYWJsZTpyLHdyaXRhYmxlOml9LChmdW5jdGlvbih0KXtpZih0KXJldHVybiBhKHQpO3M9ITAsYSgpfSkpO3ZhciBsPSExO3JldHVybiBmdW5jdGlvbih0KXtpZighcyYmIWwpcmV0dXJuIGw9ITAsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hYm9ydH0oZSk/ZS5hYm9ydCgpOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3k/ZS5kZXN0cm95KCk6dm9pZCBhKHR8fG5ldyBvKCJwaXBlIikpfX1mdW5jdGlvbiBjKHQpe3QoKX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQucGlwZShlKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lmxlbmd0aD8iZnVuY3Rpb24iIT10eXBlb2YgdFt0Lmxlbmd0aC0xXT9zOnQucG9wKCk6c31lLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPWFyZ3VtZW50c1tyXTt2YXIgbixpPWYoZSk7aWYoQXJyYXkuaXNBcnJheShlWzBdKSYmKGU9ZVswXSksZS5sZW5ndGg8Mil0aHJvdyBuZXcgYSgic3RyZWFtcyIpO3ZhciBvPWUubWFwKChmdW5jdGlvbih0LHIpe3ZhciBhPXI8ZS5sZW5ndGgtMTtyZXR1cm4gbCh0LGEscj4wLChmdW5jdGlvbih0KXtufHwobj10KSx0JiZvLmZvckVhY2goYyksYXx8KG8uZm9yRWFjaChjKSxpKG4pKX0pKX0pKTtyZXR1cm4gZS5yZWR1Y2UodSl9fSx7Ii4uLy4uLy4uL2Vycm9ycyI6Mjg2LCIuL2VuZC1vZi1zdHJlYW0iOjI5NX1dLDI5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9lcnJvcnMiKS5jb2Rlcy5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7ZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbnVsbCE9dC5oaWdoV2F0ZXJNYXJrP3QuaGlnaFdhdGVyTWFyazplP3Rbcl06bnVsbH0oZSxpLHIpO2lmKG51bGwhPWEpe2lmKCFpc0Zpbml0ZShhKXx8TWF0aC5mbG9vcihhKSE9PWF8fGE8MCl0aHJvdyBuZXcgbihpP3I6ImhpZ2hXYXRlck1hcmsiLGEpO3JldHVybiBNYXRoLmZsb29yKGEpfXJldHVybiB0Lm9iamVjdE1vZGU/MTY6MTYzODR9fX0seyIuLi8uLi8uLi9lcnJvcnMiOjI4Nn1dLDI5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJldmVudHMiKS5FdmVudEVtaXR0ZXJ9LHtldmVudHM6ODR9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic2FmZS1idWZmZXIiKS5CdWZmZXIsaT1uLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHQpe3N3aXRjaCgodD0iIit0KSYmdC50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIGEodCl7dmFyIGU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuInV0ZjgiO2Zvcih2YXIgZTs7KXN3aXRjaCh0KXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gdDtkZWZhdWx0OmlmKGUpcmV0dXJuO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksZT0hMH19KHQpO2lmKCJzdHJpbmciIT10eXBlb2YgZSYmKG4uaXNFbmNvZGluZz09PWl8fCFpKHQpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdCk7cmV0dXJuIGV8fHR9KHQpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PWwsdGhpcy5lbmQ9YyxlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXMsZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9dSx0aGlzLmVuZD1mLGU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPWgsdm9pZCh0aGlzLmVuZD1wKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPW4uYWxsb2NVbnNhZmUoZSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw9MTI3PzA6dD4+NT09Nj8yOnQ+PjQ9PTE0PzM6dD4+Mz09MzA/NDp0Pj42PT0yPy0xOi0yfWZ1bmN0aW9uIHModCl7dmFyIGU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxyPWZ1bmN0aW9uKHQsZSxyKXtpZigxMjghPSgxOTImZVswXSkpcmV0dXJuIHQubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZih0Lmxhc3ROZWVkPjEmJmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZlWzFdKSlyZXR1cm4gdC5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKHQubGFzdE5lZWQ+MiYmZS5sZW5ndGg+MiYmMTI4IT0oMTkyJmVbMl0pKXJldHVybiB0Lmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLHQpO3JldHVybiB2b2lkIDAhPT1yP3I6dGhpcy5sYXN0TmVlZDw9dC5sZW5ndGg/KHQuY29weSh0aGlzLmxhc3RDaGFyLGUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOih0LmNvcHkodGhpcy5sYXN0Q2hhcixlLDAsdC5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09dC5sZW5ndGgpKX1mdW5jdGlvbiBsKHQsZSl7aWYoKHQubGVuZ3RoLWUpJTI9PTApe3ZhciByPXQudG9TdHJpbmcoInV0ZjE2bGUiLGUpO2lmKHIpe3ZhciBuPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKTtpZihuPj01NTI5NiYmbjw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPXRbdC5sZW5ndGgtMV0sci5zbGljZSgwLC0xKX1yZXR1cm4gcn1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTFdLHQudG9TdHJpbmcoInV0ZjE2bGUiLGUsdC5sZW5ndGgtMSl9ZnVuY3Rpb24gYyh0KXt2YXIgZT10JiZ0Lmxlbmd0aD90aGlzLndyaXRlKHQpOiIiO2lmKHRoaXMubGFzdE5lZWQpe3ZhciByPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQ7cmV0dXJuIGUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCxyKX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9KHQubGVuZ3RoLWUpJTM7cmV0dXJuIDA9PT1yP3QudG9TdHJpbmcoImJhc2U2NCIsZSk6KHRoaXMubGFzdE5lZWQ9My1yLHRoaXMubGFzdFRvdGFsPTMsMT09PXI/dGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPXRbdC5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT10W3QubGVuZ3RoLTFdKSx0LnRvU3RyaW5nKCJiYXNlNjQiLGUsdC5sZW5ndGgtcikpfWZ1bmN0aW9uIGYodCl7dmFyIGU9dCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOmV9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBwKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90aGlzLndyaXRlKHQpOiIifXIuU3RyaW5nRGVjb2Rlcj1hLGEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iIjt2YXIgZSxyO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShlPXRoaXMuZmlsbExhc3QodCkpKXJldHVybiIiO3I9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSByPTA7cmV0dXJuIHI8dC5sZW5ndGg/ZT9lK3RoaXMudGV4dCh0LHIpOnRoaXMudGV4dCh0LHIpOmV8fCIifSxhLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9lKyJcdWZmZmQiOmV9LGEucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5sZW5ndGgtMTtpZihuPHIpcmV0dXJuIDA7dmFyIGk9byhlW25dKTtpZihpPj0wKXJldHVybiBpPjAmJih0Lmxhc3ROZWVkPWktMSksaTtpZigtLW48cnx8LTI9PT1pKXJldHVybiAwO2lmKChpPW8oZVtuXSkpPj0wKXJldHVybiBpPjAmJih0Lmxhc3ROZWVkPWktMiksaTtpZigtLW48cnx8LTI9PT1pKXJldHVybiAwO2lmKChpPW8oZVtuXSkpPj0wKXJldHVybiBpPjAmJigyPT09aT9pPTA6dC5sYXN0TmVlZD1pLTMpLGk7cmV0dXJuIDB9KHRoaXMsdCxlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gdC50b1N0cmluZygidXRmOCIsZSk7dGhpcy5sYXN0VG90YWw9cjt2YXIgbj10Lmxlbmd0aC0oci10aGlzLmxhc3ROZWVkKTtyZXR1cm4gdC5jb3B5KHRoaXMubGFzdENoYXIsMCxuKSx0LnRvU3RyaW5nKCJ1dGY4IixlLG4pfSxhLnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbih0KXtpZih0aGlzLmxhc3ROZWVkPD10Lmxlbmd0aClyZXR1cm4gdC5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTt0LmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdC5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPXQubGVuZ3RofX0seyJzYWZlLWJ1ZmZlciI6Mjg0fV0sMzAxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIsbil7KGZ1bmN0aW9uKCl7dmFyIHI9dCgiYXNzZXJ0IiksaT10KCJkZWJ1ZyIpKCJzdHJlYW0tcGFyc2VyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Ll90cmFuc2Zvcm0scj10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5fd3JpdGU7aWYoIWUmJiFyKXRocm93IG5ldyBFcnJvcigibXVzdCBwYXNzIGEgV3JpdGFibGUgb3IgVHJhbnNmb3JtIHN0cmVhbSBpbiIpO2koImV4dGVuZGluZyBQYXJzZXIgaW50byBzdHJlYW0iKSx0Ll9ieXRlcz1vLHQuX3NraXBCeXRlcz1zLGUmJih0Ll9wYXNzdGhyb3VnaD1sKTtlP3QuX3RyYW5zZm9ybT11OnQuX3dyaXRlPWN9O2Z1bmN0aW9uIGEodCl7aSgiaW5pdGlhbGl6aW5nIHBhcnNlciBzdHJlYW0iKSx0Ll9wYXJzZXJCeXRlc0xlZnQ9MCx0Ll9wYXJzZXJCdWZmZXJzPVtdLHQuX3BhcnNlckJ1ZmZlcmVkPTAsdC5fcGFyc2VyU3RhdGU9LTEsdC5fcGFyc2VyQ2FsbGJhY2s9bnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgdC5wdXNoJiYodC5fcGFyc2VyT3V0cHV0PXQucHVzaC5iaW5kKHQpKSx0Ll9wYXJzZXJJbml0PSEwfWZ1bmN0aW9uIG8odCxlKXtyKCF0aGlzLl9wYXJzZXJDYWxsYmFjaywndGhlcmUgaXMgYWxyZWFkeSBhICJjYWxsYmFjayIgc2V0IScpLHIoaXNGaW5pdGUodCkmJnQ+MCwnY2FuIG9ubHkgYnVmZmVyIGEgZmluaXRlIG51bWJlciBvZiBieXRlcyA+IDAsIGdvdCAiJyt0KyciJyksdGhpcy5fcGFyc2VySW5pdHx8YSh0aGlzKSxpKCJidWZmZXJpbmcgJW8gYnl0ZXMiLHQpLHRoaXMuX3BhcnNlckJ5dGVzTGVmdD10LHRoaXMuX3BhcnNlckNhbGxiYWNrPWUsdGhpcy5fcGFyc2VyU3RhdGU9MH1mdW5jdGlvbiBzKHQsZSl7cighdGhpcy5fcGFyc2VyQ2FsbGJhY2ssJ3RoZXJlIGlzIGFscmVhZHkgYSAiY2FsbGJhY2siIHNldCEnKSxyKHQ+MCwnY2FuIG9ubHkgc2tpcCA+IDAgYnl0ZXMsIGdvdCAiJyt0KyciJyksdGhpcy5fcGFyc2VySW5pdHx8YSh0aGlzKSxpKCJza2lwcGluZyAlbyBieXRlcyIsdCksdGhpcy5fcGFyc2VyQnl0ZXNMZWZ0PXQsdGhpcy5fcGFyc2VyQ2FsbGJhY2s9ZSx0aGlzLl9wYXJzZXJTdGF0ZT0xfWZ1bmN0aW9uIGwodCxlKXtyKCF0aGlzLl9wYXJzZXJDYWxsYmFjaywnVGhlcmUgaXMgYWxyZWFkeSBhICJjYWxsYmFjayIgc2V0IScpLHIodD4wLCdjYW4gb25seSBwYXNzIHRocm91Z2ggPiAwIGJ5dGVzLCBnb3QgIicrdCsnIicpLHRoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgicGFzc2luZyB0aHJvdWdoICVvIGJ5dGVzIix0KSx0aGlzLl9wYXJzZXJCeXRlc0xlZnQ9dCx0aGlzLl9wYXJzZXJDYWxsYmFjaz1lLHRoaXMuX3BhcnNlclN0YXRlPTJ9ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5fcGFyc2VySW5pdHx8YSh0aGlzKSxpKCJ3cml0ZSglbyBieXRlcykiLHQubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSksaCh0aGlzLHQsbnVsbCxyKX1mdW5jdGlvbiB1KHQsZSxyKXt0aGlzLl9wYXJzZXJJbml0fHxhKHRoaXMpLGkoInRyYW5zZm9ybSglbyBieXRlcykiLHQubGVuZ3RoKSwiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9dGhpcy5fcGFyc2VyT3V0cHV0KSxoKHRoaXMsdCxlLHIpfWZ1bmN0aW9uIGYodCxlLHIsYSl7aWYodC5fcGFyc2VyQnl0ZXNMZWZ0LT1lLmxlbmd0aCxpKCIlbyBieXRlcyBsZWZ0IGZvciBzdHJlYW0gcGllY2UiLHQuX3BhcnNlckJ5dGVzTGVmdCksMD09PXQuX3BhcnNlclN0YXRlPyh0Ll9wYXJzZXJCdWZmZXJzLnB1c2goZSksdC5fcGFyc2VyQnVmZmVyZWQrPWUubGVuZ3RoKToyPT09dC5fcGFyc2VyU3RhdGUmJnIoZSksMCE9PXQuX3BhcnNlckJ5dGVzTGVmdClyZXR1cm4gYTt2YXIgbz10Ll9wYXJzZXJDYWxsYmFjaztpZihvJiYwPT09dC5fcGFyc2VyU3RhdGUmJnQuX3BhcnNlckJ1ZmZlcnMubGVuZ3RoPjEmJihlPW4uY29uY2F0KHQuX3BhcnNlckJ1ZmZlcnMsdC5fcGFyc2VyQnVmZmVyZWQpKSwwIT09dC5fcGFyc2VyU3RhdGUmJihlPW51bGwpLHQuX3BhcnNlckNhbGxiYWNrPW51bGwsdC5fcGFyc2VyQnVmZmVyZWQ9MCx0Ll9wYXJzZXJTdGF0ZT0tMSx0Ll9wYXJzZXJCdWZmZXJzLnNwbGljZSgwKSxvKXt2YXIgcz1bXTtlJiZzLnB1c2goZSksciYmcy5wdXNoKHIpO3ZhciBsPW8ubGVuZ3RoPnMubGVuZ3RoO2wmJnMucHVzaChwKGEpKTt2YXIgYz1vLmFwcGx5KHQscyk7aWYoIWx8fGE9PT1jKXJldHVybiBhfX12YXIgaD1wKChmdW5jdGlvbiB0KGUscixuLGkpe3JldHVybiBlLl9wYXJzZXJCeXRlc0xlZnQ8PTA/aShuZXcgRXJyb3IoImdvdCBkYXRhIGJ1dCBub3QgY3VycmVudGx5IHBhcnNpbmcgYW55dGhpbmciKSk6ci5sZW5ndGg8PWUuX3BhcnNlckJ5dGVzTGVmdD9mdW5jdGlvbigpe3JldHVybiBmKGUscixuLGkpfTpmdW5jdGlvbigpe3ZhciBhPXIuc2xpY2UoMCxlLl9wYXJzZXJCeXRlc0xlZnQpO3JldHVybiBmKGUsYSxuLChmdW5jdGlvbihvKXtyZXR1cm4gbz9pKG8pOnIubGVuZ3RoPmEubGVuZ3RoP2Z1bmN0aW9uKCl7cmV0dXJuIHQoZSxyLnNsaWNlKGEubGVuZ3RoKSxuLGkpfTp2b2lkIDB9KSl9fSkpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpOyJmdW5jdGlvbiI9PXR5cGVvZiBlOyllPWUoKTtyZXR1cm4gZX19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtfcHJvY2VzczoyNzcsYXNzZXJ0Ojc1LGJ1ZmZlcjo4NSxkZWJ1ZzozMDJ9XSwzMDI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24obil7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSgpe3ZhciB0O3RyeXt0PXIuc3RvcmFnZS5kZWJ1Z31jYXRjaCh0KXt9cmV0dXJuIXQmJnZvaWQgMCE9PW4mJiJlbnYiaW4gbiYmKHQ9bi5lbnYuREVCVUcpLHR9KHI9ZS5leHBvcnRzPXQoIi4vZGVidWciKSkubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLmxvZyYmRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csY29uc29sZSxhcmd1bWVudHMpfSxyLmZvcm1hdEFyZ3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy51c2VDb2xvcnM7aWYodFswXT0oZT8iJWMiOiIiKSt0aGlzLm5hbWVzcGFjZSsoZT8iICVjIjoiICIpK3RbMF0rKGU/IiVjICI6IiAiKSsiKyIrci5odW1hbml6ZSh0aGlzLmRpZmYpLCFlKXJldHVybjt2YXIgbj0iY29sb3I6ICIrdGhpcy5jb2xvcjt0LnNwbGljZSgxLDAsbiwiY29sb3I6IGluaGVyaXQiKTt2YXIgaT0wLGE9MDt0WzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywoZnVuY3Rpb24odCl7IiUlIiE9PXQmJihpKyssIiVjIj09PXQmJihhPWkpKX0pKSx0LnNwbGljZShhLDAsbil9LHIuc2F2ZT1mdW5jdGlvbih0KXt0cnl7bnVsbD09dD9yLnN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVidWciKTpyLnN0b3JhZ2UuZGVidWc9dH1jYXRjaCh0KXt9fSxyLmxvYWQ9aSxyLnVzZUNvbG9ycz1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmInJlbmRlcmVyIj09PXdpbmRvdy5wcm9jZXNzLnR5cGUpcmV0dXJuITA7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlfHwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmNvbnNvbGUmJih3aW5kb3cuY29uc29sZS5maXJlYnVnfHx3aW5kb3cuY29uc29sZS5leGNlcHRpb24mJndpbmRvdy5jb25zb2xlLnRhYmxlKXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFwvKFxkKykvKSYmcGFyc2VJbnQoUmVnRXhwLiQxLDEwKT49MzF8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XC8oXGQrKS8pfSxyLnN0b3JhZ2U9InVuZGVmaW5lZCIhPXR5cGVvZiBjaHJvbWUmJnZvaWQgMCE9PWNocm9tZS5zdG9yYWdlP2Nocm9tZS5zdG9yYWdlLmxvY2FsOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlfWNhdGNoKHQpe319KCksci5jb2xvcnM9WyJsaWdodHNlYWdyZWVuIiwiZm9yZXN0Z3JlZW4iLCJnb2xkZW5yb2QiLCJkb2RnZXJibHVlIiwiZGFya29yY2hpZCIsImNyaW1zb24iXSxyLmZvcm1hdHRlcnMuaj1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWNhdGNoKHQpe3JldHVybiJbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogIit0Lm1lc3NhZ2V9fSxyLmVuYWJsZShpKCkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuL2RlYnVnIjozMDMsX3Byb2Nlc3M6Mjc3fV0sMzAzOltmdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKCl7aWYoZS5lbmFibGVkKXt2YXIgdD1lLGk9K25ldyBEYXRlLGE9aS0obnx8aSk7dC5kaWZmPWEsdC5wcmV2PW4sdC5jdXJyPWksbj1pO2Zvcih2YXIgbz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscz0wO3M8by5sZW5ndGg7cysrKW9bc109YXJndW1lbnRzW3NdO29bMF09ci5jb2VyY2Uob1swXSksInN0cmluZyIhPXR5cGVvZiBvWzBdJiZvLnVuc2hpZnQoIiVPIik7dmFyIGw9MDtvWzBdPW9bMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csKGZ1bmN0aW9uKGUsbil7aWYoIiUlIj09PWUpcmV0dXJuIGU7bCsrO3ZhciBpPXIuZm9ybWF0dGVyc1tuXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaSl7dmFyIGE9b1tsXTtlPWkuY2FsbCh0LGEpLG8uc3BsaWNlKGwsMSksbC0tfXJldHVybiBlfSkpLHIuZm9ybWF0QXJncy5jYWxsKHQsbyk7dmFyIGM9ZS5sb2d8fHIubG9nfHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO2MuYXBwbHkodCxvKX19cmV0dXJuIGUubmFtZXNwYWNlPXQsZS5lbmFibGVkPXIuZW5hYmxlZCh0KSxlLnVzZUNvbG9ycz1yLnVzZUNvbG9ycygpLGUuY29sb3I9ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlIGluIHQpbj0objw8NSktbit0LmNoYXJDb2RlQXQoZSksbnw9MDtyZXR1cm4gci5jb2xvcnNbTWF0aC5hYnMobiklci5jb2xvcnMubGVuZ3RoXX0odCksImZ1bmN0aW9uIj09dHlwZW9mIHIuaW5pdCYmci5pbml0KGUpLGV9KHI9ZS5leHBvcnRzPWkuZGVidWc9aS5kZWZhdWx0PWkpLmNvZXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2t8fHQubWVzc2FnZTp0fSxyLmRpc2FibGU9ZnVuY3Rpb24oKXtyLmVuYWJsZSgiIil9LHIuZW5hYmxlPWZ1bmN0aW9uKHQpe3Iuc2F2ZSh0KSxyLm5hbWVzPVtdLHIuc2tpcHM9W107Zm9yKHZhciBlPSgic3RyaW5nIj09dHlwZW9mIHQ/dDoiIikuc3BsaXQoL1tccyxdKy8pLG49ZS5sZW5ndGgsaT0wO2k8bjtpKyspZVtpXSYmKCItIj09PSh0PWVbaV0ucmVwbGFjZSgvXCovZywiLio/IikpWzBdP3Iuc2tpcHMucHVzaChuZXcgUmVnRXhwKCJeIit0LnN1YnN0cigxKSsiJCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgiXiIrdCsiJCIpKSl9LHIuZW5hYmxlZD1mdW5jdGlvbih0KXt2YXIgZSxuO2ZvcihlPTAsbj1yLnNraXBzLmxlbmd0aDtlPG47ZSsrKWlmKHIuc2tpcHNbZV0udGVzdCh0KSlyZXR1cm4hMTtmb3IoZT0wLG49ci5uYW1lcy5sZW5ndGg7ZTxuO2UrKylpZihyLm5hbWVzW2VdLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9LHIuaHVtYW5pemU9dCgibXMiKSxyLm5hbWVzPVtdLHIuc2tpcHM9W10sci5mb3JtYXR0ZXJzPXt9fSx7bXM6MzA0fV0sMzA0OltmdW5jdGlvbih0LGUscil7dmFyIG49MWUzLGk9NmU0LGE9NjAqaSxvPTI0KmE7ZnVuY3Rpb24gcyh0LGUscil7aWYoISh0PGUpKXJldHVybiB0PDEuNSplP01hdGguZmxvb3IodC9lKSsiICIrcjpNYXRoLmNlaWwodC9lKSsiICIrcisicyJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcixsPXR5cGVvZiB0O2lmKCJzdHJpbmciPT09bCYmdC5sZW5ndGg+MClyZXR1cm4gZnVuY3Rpb24odCl7aWYoKHQ9U3RyaW5nKHQpKS5sZW5ndGg+MTAwKXJldHVybjt2YXIgZT0vXigoPzpcZCspP1wuP1xkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHQpO2lmKCFlKXJldHVybjt2YXIgcj1wYXJzZUZsb2F0KGVbMV0pO3N3aXRjaCgoZVsyXXx8Im1zIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gMzE1NTc2ZTUqcjtjYXNlImRheXMiOmNhc2UiZGF5IjpjYXNlImQiOnJldHVybiByKm87Y2FzZSJob3VycyI6Y2FzZSJob3VyIjpjYXNlImhycyI6Y2FzZSJociI6Y2FzZSJoIjpyZXR1cm4gciphO2Nhc2UibWludXRlcyI6Y2FzZSJtaW51dGUiOmNhc2UibWlucyI6Y2FzZSJtaW4iOmNhc2UibSI6cmV0dXJuIHIqaTtjYXNlInNlY29uZHMiOmNhc2Uic2Vjb25kIjpjYXNlInNlY3MiOmNhc2Uic2VjIjpjYXNlInMiOnJldHVybiByKm47Y2FzZSJtaWxsaXNlY29uZHMiOmNhc2UibWlsbGlzZWNvbmQiOmNhc2UibXNlY3MiOmNhc2UibXNlYyI6Y2FzZSJtcyI6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm59fSh0KTtpZigibnVtYmVyIj09PWwmJiExPT09aXNOYU4odCkpcmV0dXJuIGUubG9uZz9zKHI9dCxvLCJkYXkiKXx8cyhyLGEsImhvdXIiKXx8cyhyLGksIm1pbnV0ZSIpfHxzKHIsbiwic2Vjb25kIil8fHIrIiBtcyI6ZnVuY3Rpb24odCl7aWYodD49bylyZXR1cm4gTWF0aC5yb3VuZCh0L28pKyJkIjtpZih0Pj1hKXJldHVybiBNYXRoLnJvdW5kKHQvYSkrImgiO2lmKHQ+PWkpcmV0dXJuIE1hdGgucm91bmQodC9pKSsibSI7aWYodD49bilyZXR1cm4gTWF0aC5yb3VuZCh0L24pKyJzIjtyZXR1cm4gdCsibXMifSh0KTt0aHJvdyBuZXcgRXJyb3IoInZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9IitKU09OLnN0cmluZ2lmeSh0KSl9fSx7fV0sMzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcmVudGhlc2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT10KXRocm93IEVycm9yKCJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmciKTtpZihudWxsPT1lKXRocm93IEVycm9yKCJTZXBhcmF0b3Igc2hvdWxkIGJlIGEgc3RyaW5nIG9yIGEgUmVnRXhwIik7cj8oInN0cmluZyI9PXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKSYmKHI9e2lnbm9yZTpyfSk6cj17fSxudWxsPT1yLmVzY2FwZSYmKHIuZXNjYXBlPSEwKSxudWxsPT1yLmlnbm9yZT9yLmlnbm9yZT1bIltdIiwiKCkiLCJ7fSIsIjw+IiwnIiInLCInJyIsImBgIiwiXHUyMDFjXHUyMDFkIiwiXHhhYlx4YmIiXTooInN0cmluZyI9PXR5cGVvZiByLmlnbm9yZSYmKHIuaWdub3JlPVtyLmlnbm9yZV0pLHIuaWdub3JlPXIuaWdub3JlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQrPXQpLHR9KSkpO3ZhciBpPW4ucGFyc2UodCx7ZmxhdDohMCxicmFja2V0czpyLmlnbm9yZX0pLGE9aVswXS5zcGxpdChlKTtpZihyLmVzY2FwZSl7Zm9yKHZhciBvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSxjPWFbcysxXTsiXFwiPT09bFtsLmxlbmd0aC0xXSYmIlxcIiE9PWxbbC5sZW5ndGgtMl0/KG8ucHVzaChsK2UrYykscysrKTpvLnB1c2gobCl9YT1vfWZvcihzPTA7czxhLmxlbmd0aDtzKyspaVswXT1hW3NdLGFbc109bi5zdHJpbmdpZnkoaSx7ZmxhdDohMH0pO3JldHVybiBhfX0se3BhcmVudGhlc2lzOjI0OH1dLDMwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHM9bmV3IEFycmF5KGUpLGw9MDtsPGU7KytsKXJbbF09LTEsbltsXT0wLGlbbF09ITEsYVtsXT0wLG9bbF09LTEsc1tsXT1bXTt2YXIgYyx1PTAsZj1bXSxoPVtdO2Z1bmN0aW9uIHAoZSl7dmFyIGw9W2VdLGM9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Yy5sZW5ndGg+MDspe2U9Y1tjLmxlbmd0aC0xXTt2YXIgcD10W2VdO2lmKGFbZV08cC5sZW5ndGgpe2Zvcih2YXIgZD1hW2VdO2Q8cC5sZW5ndGg7KytkKXt2YXIgbT1wW2RdO2lmKHJbbV08MCl7clttXT1uW21dPXUsaVttXT0hMCx1Kz0xLGwucHVzaChtKSxjLnB1c2gobSk7YnJlYWt9aVttXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bbV0pKSxvW21dPj0wJiZzW2VdLnB1c2gob1ttXSl9YVtlXT1kfWVsc2V7aWYobltlXT09PXJbZV0pe3ZhciBnPVtdLHY9W10seT0wO2ZvcihkPWwubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB4PWxbZF07aWYoaVt4XT0hMSxnLnB1c2goeCksdi5wdXNoKHNbeF0pLHkrPXNbeF0ubGVuZ3RoLG9beF09Zi5sZW5ndGgseD09PWUpe2wubGVuZ3RoPWQ7YnJlYWt9fWYucHVzaChnKTt2YXIgYj1uZXcgQXJyYXkoeSk7Zm9yKGQ9MDtkPHYubGVuZ3RoO2QrKylmb3IodmFyIF89MDtfPHZbZF0ubGVuZ3RoO18rKyliWy0teV09dltkXVtfXTtoLnB1c2goYil9Yy5wb3AoKX19fWZvcihsPTA7bDxlOysrbClyW2xdPDAmJnAobCk7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKyl7dmFyIGQ9aFtsXTtpZigwIT09ZC5sZW5ndGgpe2Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLGM9W2RbMF1dO2Zvcih2YXIgbT0xO208ZC5sZW5ndGg7bSsrKWRbbV0hPT1kW20tMV0mJmMucHVzaChkW21dKTtoW2xdPWN9fXJldHVybntjb21wb25lbnRzOmYsYWRqYWNlbmN5TGlzdDpofX19LHt9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7IW4mJnMucmV0dXJuJiZzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9LGk9MipNYXRoLlBJLGE9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dC54LGw9dC55O3JldHVybnt4Om4qKHMqPWUpLWkqKGwqPXIpK2EseTppKnMrbipsK299fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MS41NzA3OTYzMjY3OTQ4OTY2PT09ZT8uNTUxOTE1MDI0NDk0Oi0xLjU3MDc5NjMyNjc5NDg5NjY9PT1lPy0uNTUxOTE1MDI0NDk0OjQvMypNYXRoLnRhbihlLzQpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQrZSksbz1NYXRoLnNpbih0K2UpO3JldHVyblt7eDpuLWkqcix5OmkrbipyfSx7eDphK28qcix5Om8tYSpyfSx7eDphLHk6b31dfSxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQqcitlKm47cmV0dXJuIGk+MSYmKGk9MSksaTwtMSYmKGk9LTEpLCh0Km4tZSpyPDA/LTE6MSkqTWF0aC5hY29zKGkpfTtyLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5weCxyPXQucHksbD10LmN4LGM9dC5jeSx1PXQucngsZj10LnJ5LGg9dC54QXhpc1JvdGF0aW9uLHA9dm9pZCAwPT09aD8wOmgsZD10LmxhcmdlQXJjRmxhZyxtPXZvaWQgMD09PWQ/MDpkLGc9dC5zd2VlcEZsYWcsdj12b2lkIDA9PT1nPzA6Zyx5PVtdO2lmKDA9PT11fHwwPT09ZilyZXR1cm5bXTt2YXIgeD1NYXRoLnNpbihwKmkvMzYwKSxiPU1hdGguY29zKHAqaS8zNjApLF89YiooZS1sKS8yK3gqKHItYykvMix3PS14KihlLWwpLzIrYiooci1jKS8yO2lmKDA9PT1fJiYwPT09dylyZXR1cm5bXTt1PU1hdGguYWJzKHUpLGY9TWF0aC5hYnMoZik7dmFyIFQ9TWF0aC5wb3coXywyKS9NYXRoLnBvdyh1LDIpK01hdGgucG93KHcsMikvTWF0aC5wb3coZiwyKTtUPjEmJih1Kj1NYXRoLnNxcnQoVCksZio9TWF0aC5zcXJ0KFQpKTt2YXIgaz1mdW5jdGlvbih0LGUscixuLGEsbyxsLGMsdSxmLGgscCl7dmFyIGQ9TWF0aC5wb3coYSwyKSxtPU1hdGgucG93KG8sMiksZz1NYXRoLnBvdyhoLDIpLHY9TWF0aC5wb3cocCwyKSx5PWQqbS1kKnYtbSpnO3k8MCYmKHk9MCkseS89ZCp2K20qZzt2YXIgeD0oeT1NYXRoLnNxcnQoeSkqKGw9PT1jPy0xOjEpKSphL28qcCxiPXkqLW8vYSpoLF89Zip4LXUqYisodCtyKS8yLHc9dSp4K2YqYisoZStuKS8yLFQ9KGgteCkvYSxrPShwLWIpL28sQT0oLWgteCkvYSxNPSgtcC1iKS9vLFM9cygxLDAsVCxrKSxFPXMoVCxrLEEsTSk7cmV0dXJuIDA9PT1jJiZFPjAmJihFLT1pKSwxPT09YyYmRTwwJiYoRSs9aSksW18sdyxTLEVdfShlLHIsbCxjLHUsZixtLHYseCxiLF8sdyksQT1uKGssNCksTT1BWzBdLFM9QVsxXSxFPUFbMl0sTD1BWzNdLEM9TWF0aC5hYnMoTCkvKGkvNCk7TWF0aC5hYnMoMS1DKTwxZS03JiYoQz0xKTt2YXIgUD1NYXRoLm1heChNYXRoLmNlaWwoQyksMSk7TC89UDtmb3IodmFyIEk9MDtJPFA7SSsrKXkucHVzaChvKEUsTCkpLEUrPUw7cmV0dXJuIHkubWFwKChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxmLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsZixiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGYsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSkpfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sMzA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCJhYnMtc3ZnLXBhdGgiKSxhPXQoIm5vcm1hbGl6ZS1zdmctcGF0aCIpLG89dCgiaXMtc3ZnLXBhdGgiKSxzPXQoImFzc2VydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQpJiYxPT09dC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmKHQ9dFswXSk7InN0cmluZyI9PXR5cGVvZiB0JiYocyhvKHQpLCJTdHJpbmcgaXMgbm90IGFuIFNWRyBwYXRoLiIpLHQ9bih0KSk7aWYocyhBcnJheS5pc0FycmF5KHQpLCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4iKSx0PWkodCksISh0PWEodCkpLmxlbmd0aClyZXR1cm5bMCwwLDAsMF07Zm9yKHZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF0scj0wLGw9dC5sZW5ndGg7cjxsO3IrKylmb3IodmFyIGM9dFtyXS5zbGljZSgxKSx1PTA7dTxjLmxlbmd0aDt1Kz0yKWNbdSswXTxlWzBdJiYoZVswXT1jW3UrMF0pLGNbdSsxXTxlWzFdJiYoZVsxXT1jW3UrMV0pLGNbdSswXT5lWzJdJiYoZVsyXT1jW3UrMF0pLGNbdSsxXT5lWzNdJiYoZVszXT1jW3UrMV0pO3JldHVybiBlfX0seyJhYnMtc3ZnLXBhdGgiOjcwLGFzc2VydDo3NSwiaXMtc3ZnLXBhdGgiOjIzOCwibm9ybWFsaXplLXN2Zy1wYXRoIjozMDksInBhcnNlLXN2Zy1wYXRoIjoyNTB9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG89MCxzPTAsbD0wLGM9MCx1PW51bGwsZj1udWxsLGg9MCxwPTAsZD0wLG09dC5sZW5ndGg7ZDxtO2QrKyl7dmFyIGc9dFtkXSx2PWdbMF07c3dpdGNoKHYpe2Nhc2UiTSI6bD1nWzFdLGM9Z1syXTticmVhaztjYXNlIkEiOnZhciB5PW4oe3B4OmgscHk6cCxjeDpnWzZdLGN5OmdbN10scng6Z1sxXSxyeTpnWzJdLHhBeGlzUm90YXRpb246Z1szXSxsYXJnZUFyY0ZsYWc6Z1s0XSxzd2VlcEZsYWc6Z1s1XX0pO2lmKCF5Lmxlbmd0aCljb250aW51ZTtmb3IodmFyIHgsYj0wO2I8eS5sZW5ndGg7YisrKXg9eVtiXSxnPVsiQyIseC54MSx4LnkxLHgueDIseC55Mix4LngseC55XSxiPHkubGVuZ3RoLTEmJnIucHVzaChnKTticmVhaztjYXNlIlMiOnZhciBfPWgsdz1wOyJDIiE9ZSYmIlMiIT1lfHwoXys9Xy1vLHcrPXctcyksZz1bIkMiLF8sdyxnWzFdLGdbMl0sZ1szXSxnWzRdXTticmVhaztjYXNlIlQiOiJRIj09ZXx8IlQiPT1lPyh1PTIqaC11LGY9MipwLWYpOih1PWgsZj1wKSxnPWEoaCxwLHUsZixnWzFdLGdbMl0pO2JyZWFrO2Nhc2UiUSI6dT1nWzFdLGY9Z1syXSxnPWEoaCxwLGdbMV0sZ1syXSxnWzNdLGdbNF0pO2JyZWFrO2Nhc2UiTCI6Zz1pKGgscCxnWzFdLGdbMl0pO2JyZWFrO2Nhc2UiSCI6Zz1pKGgscCxnWzFdLHApO2JyZWFrO2Nhc2UiViI6Zz1pKGgscCxoLGdbMV0pO2JyZWFrO2Nhc2UiWiI6Zz1pKGgscCxsLGMpfWU9dixoPWdbZy5sZW5ndGgtMl0scD1nW2cubGVuZ3RoLTFdLGcubGVuZ3RoPjQ/KG89Z1tnLmxlbmd0aC00XSxzPWdbZy5sZW5ndGgtM10pOihvPWgscz1wKSxyLnB1c2goZyl9cmV0dXJuIHJ9O3ZhciBuPXQoInN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIik7ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfX0seyJzdmctYXJjLXRvLWN1YmljLWJlemllciI6MzA3fV0sMzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgic3ZnLXBhdGgtYm91bmRzIiksYT10KCJwYXJzZS1zdmctcGF0aCIpLG89dCgiZHJhdy1zdmctcGF0aCIpLHM9dCgiaXMtc3ZnLXBhdGgiKSxsPXQoImJpdG1hcC1zZGYiKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHU9Yy5nZXRDb250ZXh0KCIyZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFzKHQpKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgdmFsaWQgc3ZnIHBhdGggc3RyaW5nIik7ZXx8KGU9e30pO3ZhciByLGY7ZS5zaGFwZT8ocj1lLnNoYXBlWzBdLGY9ZS5zaGFwZVsxXSk6KHI9Yy53aWR0aD1lLnd8fGUud2lkdGh8fDIwMCxmPWMuaGVpZ2h0PWUuaHx8ZS5oZWlnaHR8fDIwMCk7dmFyIGg9TWF0aC5taW4ocixmKSxwPWUuc3Ryb2tlfHwwLGQ9ZS52aWV3Ym94fHxlLnZpZXdCb3h8fGkodCksbT1bci8oZFsyXS1kWzBdKSxmLyhkWzNdLWRbMV0pXSxnPU1hdGgubWluKG1bMF18fDAsbVsxXXx8MCkvMjt1LmZpbGxTdHlsZT0iYmxhY2siLHUuZmlsbFJlY3QoMCwwLHIsZiksdS5maWxsU3R5bGU9IndoaXRlIixwJiYoIm51bWJlciIhPXR5cGVvZiBwJiYocD0xKSx1LnN0cm9rZVN0eWxlPXA+MD8id2hpdGUiOiJibGFjayIsdS5saW5lV2lkdGg9TWF0aC5hYnMocCkpO2lmKHUudHJhbnNsYXRlKC41KnIsLjUqZiksdS5zY2FsZShnLGcpLGZ1bmN0aW9uKCl7aWYobnVsbCE9bilyZXR1cm4gbjt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO2lmKHQuY2FudmFzLndpZHRoPXQuY2FudmFzLmhlaWdodD0xLCF3aW5kb3cuUGF0aDJEKXJldHVybiBuPSExO3ZhciBlPW5ldyBQYXRoMkQoIk0wLDBoMXYxaC0xdi0xWiIpO3QuZmlsbFN0eWxlPSJibGFjayIsdC5maWxsKGUpO3ZhciByPXQuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpO3JldHVybiBuPXImJnIuZGF0YSYmMjU1PT09ci5kYXRhWzNdfSgpKXt2YXIgdj1uZXcgUGF0aDJEKHQpO3UuZmlsbCh2KSxwJiZ1LnN0cm9rZSh2KX1lbHNle3ZhciB5PWEodCk7byh1LHkpLHUuZmlsbCgpLHAmJnUuc3Ryb2tlKCl9cmV0dXJuIHUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxsKHUse2N1dG9mZjpudWxsIT1lLmN1dG9mZj9lLmN1dG9mZjouNSxyYWRpdXM6bnVsbCE9ZS5yYWRpdXM/ZS5yYWRpdXM6LjUqaH0pfX0seyJiaXRtYXAtc2RmIjo4MiwiZHJhdy1zdmctcGF0aCI6MTI2LCJpcy1zdmctcGF0aCI6MjM4LCJwYXJzZS1zdmctcGF0aCI6MjUwLCJzdmctcGF0aC1ib3VuZHMiOjMwOH1dLDMxMTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4peyhmdW5jdGlvbigpe3ZhciBpPXQoInByb2Nlc3MvYnJvd3Nlci5qcyIpLm5leHRUaWNrLGE9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LG89QXJyYXkucHJvdG90eXBlLnNsaWNlLHM9e30sbD0wO2Z1bmN0aW9uIGModCxlKXt0aGlzLl9pZD10LHRoaXMuX2NsZWFyRm49ZX1yLnNldFRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGMoYS5jYWxsKHNldFRpbWVvdXQsd2luZG93LGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KX0sci5zZXRJbnRlcnZhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgYyhhLmNhbGwoc2V0SW50ZXJ2YWwsd2luZG93LGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LHIuY2xlYXJUaW1lb3V0PXIuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbih0KXt0LmNsb3NlKCl9LGMucHJvdG90eXBlLnVucmVmPWMucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sYy5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LHRoaXMuX2lkKX0sci5lbnJvbGw9ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9ZX0sci51bmVucm9sbD1mdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9LTF9LHIuX3VucmVmQWN0aXZlPXIuYWN0aXZlPWZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKTt2YXIgZT10Ll9pZGxlVGltZW91dDtlPj0wJiYodC5faWRsZVRpbWVvdXRJZD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX29uVGltZW91dCYmdC5fb25UaW1lb3V0KCl9KSxlKSl9LHIuc2V0SW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24odCl7dmFyIGU9bCsrLG49IShhcmd1bWVudHMubGVuZ3RoPDIpJiZvLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBzW2VdPSEwLGkoKGZ1bmN0aW9uKCl7c1tlXSYmKG4/dC5hcHBseShudWxsLG4pOnQuY2FsbChudWxsKSxyLmNsZWFySW1tZWRpYXRlKGUpKX0pKSxlfSxyLmNsZWFySW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24odCl7ZGVsZXRlIHNbdF19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUsdCgidGltZXJzIikuY2xlYXJJbW1lZGlhdGUpfSx7InByb2Nlc3MvYnJvd3Nlci5qcyI6Mjc3LHRpbWVyczozMTF9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7dmFyIHI9L15ccysvLG49L1xzKyQvLGk9MCxhPXQucm91bmQsbz10Lm1pbixzPXQubWF4LGw9dC5yYW5kb207ZnVuY3Rpb24gYyhlLGwpe2lmKGw9bHx8e30sKGU9ZXx8IiIpaW5zdGFuY2VvZiBjKXJldHVybiBlO2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlLGwpO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciBpPXtyOjAsZzowLGI6MH0sYT0xLGw9bnVsbCxjPW51bGwsdT1udWxsLGY9ITEsaD0hMTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKHIsIiIpLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKTt2YXIgZSxpPSExO2lmKFNbdF0pdD1TW3RdLGk9ITA7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OiJuYW1lIn07aWYoZT1qLnJnYi5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXX07aWYoZT1qLnJnYmEuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM10sYTplWzRdfTtpZihlPWouaHNsLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdfTtpZihlPWouaHNsYS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXSxhOmVbNF19O2lmKGU9ai5oc3YuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM119O2lmKGU9ai5oc3ZhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdLGE6ZVs0XX07aWYoZT1qLmhleDguZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0pLGc6SShlWzJdKSxiOkkoZVszXSksYTpSKGVbNF0pLGZvcm1hdDppPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXg2LmV4ZWModCkpcmV0dXJue3I6SShlWzFdKSxnOkkoZVsyXSksYjpJKGVbM10pLGZvcm1hdDppPyJuYW1lIjoiaGV4In07aWYoZT1qLmhleDQuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksYTpSKGVbNF0rIiIrZVs0XSksZm9ybWF0Omk/Im5hbWUiOiJoZXg4In07aWYoZT1qLmhleDMuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksZm9ybWF0Omk/Im5hbWUiOiJoZXgifTtyZXR1cm4hMX0oZSkpOyJvYmplY3QiPT10eXBlb2YgZSYmKFUoZS5yKSYmVShlLmcpJiZVKGUuYik/KHA9ZS5yLGQ9ZS5nLG09ZS5iLGk9e3I6MjU1KkMocCwyNTUpLGc6MjU1KkMoZCwyNTUpLGI6MjU1KkMobSwyNTUpfSxmPSEwLGg9IiUiPT09U3RyaW5nKGUucikuc3Vic3RyKC0xKT8icHJnYiI6InJnYiIpOlUoZS5oKSYmVShlLnMpJiZVKGUudik/KGw9eihlLnMpLGM9eihlLnYpLGk9ZnVuY3Rpb24oZSxyLG4pe2U9NipDKGUsMzYwKSxyPUMociwxMDApLG49QyhuLDEwMCk7dmFyIGk9dC5mbG9vcihlKSxhPWUtaSxvPW4qKDEtcikscz1uKigxLWEqciksbD1uKigxLSgxLWEpKnIpLGM9aSU2O3JldHVybntyOjI1NSpbbixzLG8sbyxsLG5dW2NdLGc6MjU1KltsLG4sbixzLG8sb11bY10sYjoyNTUqW28sbyxsLG4sbixzXVtjXX19KGUuaCxsLGMpLGY9ITAsaD0iaHN2Iik6VShlLmgpJiZVKGUucykmJlUoZS5sKSYmKGw9eihlLnMpLHU9eihlLmwpLGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCs2KihlLXQpKnI6cjwuNT9lOnI8Mi8zP3QrKGUtdCkqKDIvMy1yKSo2OnR9aWYodD1DKHQsMzYwKSxlPUMoZSwxMDApLHI9QyhyLDEwMCksMD09PWUpbj1pPWE9cjtlbHNle3ZhciBzPXI8LjU/ciooMStlKTpyK2UtciplLGw9MipyLXM7bj1vKGwscyx0KzEvMyksaT1vKGwscyx0KSxhPW8obCxzLHQtMS8zKX1yZXR1cm57cjoyNTUqbixnOjI1NSppLGI6MjU1KmF9fShlLmgsbCx1KSxmPSEwLGg9ImhzbCIpLGUuaGFzT3duUHJvcGVydHkoImEiKSYmKGE9ZS5hKSk7dmFyIHAsZCxtO3JldHVybiBhPUwoYSkse29rOmYsZm9ybWF0OmUuZm9ybWF0fHxoLHI6bygyNTUscyhpLnIsMCkpLGc6bygyNTUscyhpLmcsMCkpLGI6bygyNTUscyhpLmIsMCkpLGE6YX19KGUpO3RoaXMuX29yaWdpbmFsSW5wdXQ9ZSx0aGlzLl9yPXUucix0aGlzLl9nPXUuZyx0aGlzLl9iPXUuYix0aGlzLl9hPXUuYSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXMuX2Zvcm1hdD1sLmZvcm1hdHx8dS5mb3JtYXQsdGhpcy5fZ3JhZGllbnRUeXBlPWwuZ3JhZGllbnRUeXBlLHRoaXMuX3I8MSYmKHRoaXMuX3I9YSh0aGlzLl9yKSksdGhpcy5fZzwxJiYodGhpcy5fZz1hKHRoaXMuX2cpKSx0aGlzLl9iPDEmJih0aGlzLl9iPWEodGhpcy5fYikpLHRoaXMuX29rPXUub2ssdGhpcy5fdGNfaWQ9aSsrfWZ1bmN0aW9uIHUodCxlLHIpe3Q9Qyh0LDI1NSksZT1DKGUsMjU1KSxyPUMociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9KGErbCkvMjtpZihhPT1sKW49aT0wO2Vsc2V7dmFyIHU9YS1sO3N3aXRjaChpPWM+LjU/dS8oMi1hLWwpOnUvKGErbCksYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLGw6Y319ZnVuY3Rpb24gZih0LGUscil7dD1DKHQsMjU1KSxlPUMoZSwyNTUpLHI9QyhyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz1hLHU9YS1sO2lmKGk9MD09PWE/MDp1L2EsYT09bCluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLHY6Y319ZnVuY3Rpb24gaCh0LGUscixuKXt2YXIgaT1bTyhhKHQpLnRvU3RyaW5nKDE2KSksTyhhKGUpLnRvU3RyaW5nKDE2KSksTyhhKHIpLnRvU3RyaW5nKDE2KSldO3JldHVybiBuJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpP2lbMF0uY2hhckF0KDApK2lbMV0uY2hhckF0KDApK2lbMl0uY2hhckF0KDApOmkuam9pbigiIil9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm5bTyhEKG4pKSxPKGEodCkudG9TdHJpbmcoMTYpKSxPKGEoZSkudG9TdHJpbmcoMTYpKSxPKGEocikudG9TdHJpbmcoMTYpKV0uam9pbigiIil9ZnVuY3Rpb24gZCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucy09ZS8xMDAsci5zPVAoci5zKSxjKHIpfWZ1bmN0aW9uIG0odCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMrPWUvMTAwLHIucz1QKHIucyksYyhyKX1mdW5jdGlvbiBnKHQpe3JldHVybiBjKHQpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiB2KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sKz1lLzEwMCxyLmw9UChyLmwpLGMocil9ZnVuY3Rpb24geSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvUmdiKCk7cmV0dXJuIHIucj1zKDAsbygyNTUsci5yLWEoLWUvMTAwKjI1NSkpKSxyLmc9cygwLG8oMjU1LHIuZy1hKC1lLzEwMCoyNTUpKSksci5iPXMoMCxvKDI1NSxyLmItYSgtZS8xMDAqMjU1KSkpLGMocil9ZnVuY3Rpb24geCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubC09ZS8xMDAsci5sPVAoci5sKSxjKHIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1jKHQpLnRvSHNsKCksbj0oci5oK2UpJTM2MDtyZXR1cm4gci5oPW48MD8zNjArbjpuLGMocil9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jKHQpLnRvSHNsKCk7cmV0dXJuIGUuaD0oZS5oKzE4MCklMzYwLGMoZSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocisxMjApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjQwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gVCh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis5MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisxODApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjcwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gayh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis3MiklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyMTYpJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBBKHQsZSxyKXtlPWV8fDYscj1yfHwzMDt2YXIgbj1jKHQpLnRvSHNsKCksaT0zNjAvcixhPVtjKHQpXTtmb3Iobi5oPShuLmgtKGkqZT4+MSkrNzIwKSUzNjA7LS1lOyluLmg9KG4uaCtpKSUzNjAsYS5wdXNoKGMobikpO3JldHVybiBhfWZ1bmN0aW9uIE0odCxlKXtlPWV8fDY7Zm9yKHZhciByPWModCkudG9Ic3YoKSxuPXIuaCxpPXIucyxhPXIudixvPVtdLHM9MS9lO2UtLTspby5wdXNoKGMoe2g6bixzOmksdjphfSkpLGE9KGErcyklMTtyZXR1cm4gb31jLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHIsbixpPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1pLnIvMjU1LHI9aS5nLzI1NSxuPWkuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOnQucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45Mjp0LnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6dC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPUwodCksdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWYodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bTyhhKHQpLnRvU3RyaW5nKDE2KSksTyhhKGUpLnRvU3RyaW5nKDE2KSksTyhhKHIpLnRvU3RyaW5nKDE2KSksTyhEKG4pKV07aWYoaSYmb1swXS5jaGFyQXQoMCk9PW9bMF0uY2hhckF0KDEpJiZvWzFdLmNoYXJBdCgwKT09b1sxXS5jaGFyQXQoMSkmJm9bMl0uY2hhckF0KDApPT1vWzJdLmNoYXJBdCgxKSYmb1szXS5jaGFyQXQoMCk9PW9bM10uY2hhckF0KDEpKXJldHVybiBvWzBdLmNoYXJBdCgwKStvWzFdLmNoYXJBdCgwKStvWzJdLmNoYXJBdCgwKStvWzNdLmNoYXJBdCgwKTtyZXR1cm4gby5qb2luKCIiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSx0KX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4OCh0KX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKHRoaXMuX3IpLGc6YSh0aGlzLl9nKSxiOmEodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSh0aGlzLl9yKSsiLCAiK2EodGhpcy5fZykrIiwgIithKHRoaXMuX2IpKyIpIjoicmdiYSgiK2EodGhpcy5fcikrIiwgIithKHRoaXMuX2cpKyIsICIrYSh0aGlzLl9iKSsiLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOmEoMTAwKkModGhpcy5fciwyNTUpKSsiJSIsZzphKDEwMCpDKHRoaXMuX2csMjU1KSkrIiUiLGI6YSgxMDAqQyh0aGlzLl9iLDI1NSkpKyIlIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSgxMDAqQyh0aGlzLl9yLDI1NSkpKyIlLCAiK2EoMTAwKkModGhpcy5fZywyNTUpKSsiJSwgIithKDEwMCpDKHRoaXMuX2IsMjU1KSkrIiUpIjoicmdiYSgiK2EoMTAwKkModGhpcy5fciwyNTUpKSsiJSwgIithKDEwMCpDKHRoaXMuX2csMjU1KSkrIiUsICIrYSgxMDAqQyh0aGlzLl9iLDI1NSkpKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT8idHJhbnNwYXJlbnQiOiEodGhpcy5fYTwxKSYmKEVbaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPSIjIitwKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLHI9ZSxuPXRoaXMuX2dyYWRpZW50VHlwZT8iR3JhZGllbnRUeXBlID0gMSwgIjoiIjtpZih0KXt2YXIgaT1jKHQpO3I9IiMiK3AoaS5fcixpLl9nLGkuX2IsaS5fYSl9cmV0dXJuInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCgiK24rInN0YXJ0Q29sb3JzdHI9IitlKyIsZW5kQ29sb3JzdHI9IityKyIpIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8ImhleCIhPT10JiYiaGV4NiIhPT10JiYiaGV4MyIhPT10JiYiaGV4NCIhPT10JiYiaGV4OCIhPT10JiYibmFtZSIhPT10PygicmdiIj09PXQmJihyPXRoaXMudG9SZ2JTdHJpbmcoKSksInByZ2IiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksImhleCIhPT10JiYiaGV4NiIhPT10fHwocj10aGlzLnRvSGV4U3RyaW5nKCkpLCJoZXgzIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSwiaGV4NCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZyghMCkpLCJoZXg4Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCkpLCJuYW1lIj09PXQmJihyPXRoaXMudG9OYW1lKCkpLCJoc2wiPT09dCYmKHI9dGhpcy50b0hzbFN0cmluZygpKSwiaHN2Ij09PXQmJihyPXRoaXMudG9Ic3ZTdHJpbmcoKSkscnx8dGhpcy50b0hleFN0cmluZygpKToibmFtZSI9PT10JiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSk7cmV0dXJuIHRoaXMuX3I9ci5fcix0aGlzLl9nPXIuX2csdGhpcy5fYj1yLl9iLHRoaXMuc2V0QWxwaGEoci5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHksYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHgsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKG0sYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGcsYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihiLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQSxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oTSxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihULGFyZ3VtZW50cyl9fSxjLmZyb21SYXRpbz1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ImEiPT09bj90W25dOnoodFtuXSkpO3Q9cn1yZXR1cm4gYyh0LGUpfSxjLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiEoIXR8fCFlKSYmYyh0KS50b1JnYlN0cmluZygpPT1jKGUpLnRvUmdiU3RyaW5nKCl9LGMucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZnJvbVJhdGlvKHtyOmwoKSxnOmwoKSxiOmwoKX0pfSxjLm1peD1mdW5jdGlvbih0LGUscil7cj0wPT09cj8wOnJ8fDUwO3ZhciBuPWModCkudG9SZ2IoKSxpPWMoZSkudG9SZ2IoKSxhPXIvMTAwO3JldHVybiBjKHtyOihpLnItbi5yKSphK24ucixnOihpLmctbi5nKSphK24uZyxiOihpLmItbi5iKSphK24uYixhOihpLmEtbi5hKSphK24uYX0pfSxjLnJlYWRhYmlsaXR5PWZ1bmN0aW9uKGUscil7dmFyIG49YyhlKSxpPWMocik7cmV0dXJuKHQubWF4KG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KS8odC5taW4obi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpfSxjLmlzUmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1jLnJlYWRhYmlsaXR5KHQsZSk7c3dpdGNoKGk9ITEsKG49ZnVuY3Rpb24odCl7dmFyIGUscjtlPSgodD10fHx7bGV2ZWw6IkFBIixzaXplOiJzbWFsbCJ9KS5sZXZlbHx8IkFBIikudG9VcHBlckNhc2UoKSxyPSh0LnNpemV8fCJzbWFsbCIpLnRvTG93ZXJDYXNlKCksIkFBIiE9PWUmJiJBQUEiIT09ZSYmKGU9IkFBIik7InNtYWxsIiE9PXImJiJsYXJnZSIhPT1yJiYocj0ic21hbGwiKTtyZXR1cm57bGV2ZWw6ZSxzaXplOnJ9fShyKSkubGV2ZWwrbi5zaXplKXtjYXNlIkFBc21hbGwiOmNhc2UiQUFBbGFyZ2UiOmk9YT49NC41O2JyZWFrO2Nhc2UiQUFsYXJnZSI6aT1hPj0zO2JyZWFrO2Nhc2UiQUFBc21hbGwiOmk9YT49N31yZXR1cm4gaX0sYy5tb3N0UmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9bnVsbCxsPTA7aT0ocj1yfHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9ci5sZXZlbCxvPXIuc2l6ZTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKykobj1jLnJlYWRhYmlsaXR5KHQsZVt1XSkpPmwmJihsPW4scz1jKGVbdV0pKTtyZXR1cm4gYy5pc1JlYWRhYmxlKHQscyx7bGV2ZWw6YSxzaXplOm99KXx8IWk/czooci5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsYy5tb3N0UmVhZGFibGUodCxbIiNmZmYiLCIjMDAwIl0scikpfTt2YXIgUz1jLm5hbWVzPXthbGljZWJsdWU6ImYwZjhmZiIsYW50aXF1ZXdoaXRlOiJmYWViZDciLGFxdWE6IjBmZiIsYXF1YW1hcmluZToiN2ZmZmQ0IixhenVyZToiZjBmZmZmIixiZWlnZToiZjVmNWRjIixiaXNxdWU6ImZmZTRjNCIsYmxhY2s6IjAwMCIsYmxhbmNoZWRhbG1vbmQ6ImZmZWJjZCIsYmx1ZToiMDBmIixibHVldmlvbGV0OiI4YTJiZTIiLGJyb3duOiJhNTJhMmEiLGJ1cmx5d29vZDoiZGViODg3IixidXJudHNpZW5uYToiZWE3ZTVkIixjYWRldGJsdWU6IjVmOWVhMCIsY2hhcnRyZXVzZToiN2ZmZjAwIixjaG9jb2xhdGU6ImQyNjkxZSIsY29yYWw6ImZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IjY0OTVlZCIsY29ybnNpbGs6ImZmZjhkYyIsY3JpbXNvbjoiZGMxNDNjIixjeWFuOiIwZmYiLGRhcmtibHVlOiIwMDAwOGIiLGRhcmtjeWFuOiIwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6ImI4ODYwYiIsZGFya2dyYXk6ImE5YTlhOSIsZGFya2dyZWVuOiIwMDY0MDAiLGRhcmtncmV5OiJhOWE5YTkiLGRhcmtraGFraToiYmRiNzZiIixkYXJrbWFnZW50YToiOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiNTU2YjJmIixkYXJrb3JhbmdlOiJmZjhjMDAiLGRhcmtvcmNoaWQ6Ijk5MzJjYyIsZGFya3JlZDoiOGIwMDAwIixkYXJrc2FsbW9uOiJlOTk2N2EiLGRhcmtzZWFncmVlbjoiOGZiYzhmIixkYXJrc2xhdGVibHVlOiI0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IjJmNGY0ZiIsZGFya3NsYXRlZ3JleToiMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIwMGNlZDEiLGRhcmt2aW9sZXQ6Ijk0MDBkMyIsZGVlcHBpbms6ImZmMTQ5MyIsZGVlcHNreWJsdWU6IjAwYmZmZiIsZGltZ3JheToiNjk2OTY5IixkaW1ncmV5OiI2OTY5NjkiLGRvZGdlcmJsdWU6IjFlOTBmZiIsZmlyZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdoaXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVuOiIyMjhiMjIiLGZ1Y2hzaWE6ImYwZiIsZ2FpbnNib3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6ImY4ZjhmZiIsZ29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6ImRhYTUyMCIsZ3JheToiODA4MDgwIixncmVlbjoiMDA4MDAwIixncmVlbnllbGxvdzoiYWRmZjJmIixncmV5OiI4MDgwODAiLGhvbmV5ZGV3OiJmMGZmZjAiLGhvdHBpbms6ImZmNjliNCIsaW5kaWFucmVkOiJjZDVjNWMiLGluZGlnbzoiNGIwMDgyIixpdm9yeToiZmZmZmYwIixraGFraToiZjBlNjhjIixsYXZlbmRlcjoiZTZlNmZhIixsYXZlbmRlcmJsdXNoOiJmZmYwZjUiLGxhd25ncmVlbjoiN2NmYzAwIixsZW1vbmNoaWZmb246ImZmZmFjZCIsbGlnaHRibHVlOiJhZGQ4ZTYiLGxpZ2h0Y29yYWw6ImYwODA4MCIsbGlnaHRjeWFuOiJlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiJmYWZhZDIiLGxpZ2h0Z3JheToiZDNkM2QzIixsaWdodGdyZWVuOiI5MGVlOTAiLGxpZ2h0Z3JleToiZDNkM2QzIixsaWdodHBpbms6ImZmYjZjMSIsbGlnaHRzYWxtb246ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoiMjBiMmFhIixsaWdodHNreWJsdWU6Ijg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6Ijc4OSIsbGlnaHRzbGF0ZWdyZXk6Ijc4OSIsbGlnaHRzdGVlbGJsdWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6ImZmZmZlMCIsbGltZToiMGYwIixsaW1lZ3JlZW46IjMyY2QzMiIsbGluZW46ImZhZjBlNiIsbWFnZW50YToiZjBmIixtYXJvb246IjgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiNjZjZGFhIixtZWRpdW1ibHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hpZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6IjkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVlOiIxOTE5NzAiLG1pbnRjcmVhbToiZjVmZmZhIixtaXN0eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZmZGVhZCIsbmF2eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZlZHJhYjoiNmI4ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3JhbmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoiZGE3MGQ2IixwYWxlZ29sZGVucm9kOiJlZWU4YWEiLHBhbGVncmVlbjoiOThmYjk4IixwYWxldHVycXVvaXNlOiJhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImRiNzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1IixwZWFjaHB1ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNmIixwaW5rOiJmZmMwY2IiLHBsdW06ImRkYTBkZCIscG93ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6IjgwMDA4MCIscmViZWNjYXB1cnBsZToiNjYzMzk5IixyZWQ6ImYwMCIscm9zeWJyb3duOiJiYzhmOGYiLHJveWFsYmx1ZToiNDE2OWUxIixzYWRkbGVicm93bjoiOGI0NTEzIixzYWxtb246ImZhODA3MiIsc2FuZHlicm93bjoiZjRhNDYwIixzZWFncmVlbjoiMmU4YjU3IixzZWFzaGVsbDoiZmZmNWVlIixzaWVubmE6ImEwNTIyZCIsc2lsdmVyOiJjMGMwYzAiLHNreWJsdWU6Ijg3Y2VlYiIsc2xhdGVibHVlOiI2YTVhY2QiLHNsYXRlZ3JheToiNzA4MDkwIixzbGF0ZWdyZXk6IjcwODA5MCIsc25vdzoiZmZmYWZhIixzcHJpbmdncmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRlYWw6IjAwODA4MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21hdG86ImZmNjM0NyIsdHVycXVvaXNlOiI0MGUwZDAiLHZpb2xldDoiZWU4MmVlIix3aGVhdDoiZjVkZWIzIix3aGl0ZToiZmZmIix3aGl0ZXNtb2tlOiJmNWY1ZjUiLHllbGxvdzoiZmYwIix5ZWxsb3dncmVlbjoiOWFjZDMyIn0sRT1jLmhleE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3Rbcl1dPXIpO3JldHVybiBlfShTKTtmdW5jdGlvbiBMKHQpe3JldHVybiB0PXBhcnNlRmxvYXQodCksKGlzTmFOKHQpfHx0PDB8fHQ+MSkmJih0PTEpLHR9ZnVuY3Rpb24gQyhlLHIpeyhmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIi4iKSYmMT09PXBhcnNlRmxvYXQodCl9KShlKSYmKGU9IjEwMCUiKTt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIiUiKX0oZSk7cmV0dXJuIGU9byhyLHMoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSpyLDEwKS8xMDApLHQuYWJzKGUtcik8MWUtNj8xOmUlci9wYXJzZUZsb2F0KHIpfWZ1bmN0aW9uIFAodCl7cmV0dXJuIG8oMSxzKDAsdCkpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24geih0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHQucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKHQpe3JldHVybiBJKHQpLzI1NX12YXIgRixCLE4saj0oQj0iW1xcc3xcXChdKygiKyhGPSIoPzpbLVxcK10/XFxkKlxcLlxcZCslPyl8KD86Wy1cXCtdP1xcZCslPykiKSsiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/IixOPSJbXFxzfFxcKF0rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/Iix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChGKSxyZ2I6bmV3IFJlZ0V4cCgicmdiIitCKSxyZ2JhOm5ldyBSZWdFeHAoInJnYmEiK04pLGhzbDpuZXcgUmVnRXhwKCJoc2wiK0IpLGhzbGE6bmV3IFJlZ0V4cCgiaHNsYSIrTiksaHN2Om5ldyBSZWdFeHAoImhzdiIrQiksaHN2YTpuZXcgUmVnRXhwKCJoc3ZhIitOKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVSh0KXtyZXR1cm4hIWouQ1NTX1VOSVQuZXhlYyh0KX12b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPWM6d2luZG93LnRpbnljb2xvcj1jfShNYXRoKX0se31dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9aSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCk7ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8KGU9aSh0KSk7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKWVbcl09dFtyXS1lW3JdO3JldHVybiBlfXJldHVybiBpKHQtaSh0KSl9O3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT90Om5ldyBGbG9hdDMyQXJyYXkodCk6KG5bMF09dCxuWzBdKX19LHt9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2UtdW5pdCIpO2UuZXhwb3J0cz1hO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj1uKGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIHJbMF0qYShyWzFdLHQpfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fCJweCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZSIlIjpyZXR1cm4gZS5jbGllbnRIZWlnaHQvMTAwO2Nhc2UiY2giOmNhc2UiZXgiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGVbImZvbnQtc2l6ZSJdPSIxMjgiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1pKHIsImZvbnQtc2l6ZSIpLzEyODtyZXR1cm4gZS5yZW1vdmVDaGlsZChyKSxufSh0LGUpO2Nhc2UiZW0iOnJldHVybiBpKGUsImZvbnQtc2l6ZSIpO2Nhc2UicmVtIjpyZXR1cm4gaShkb2N1bWVudC5ib2R5LCJmb250LXNpemUiKTtjYXNlInZ3IjpyZXR1cm4gd2luZG93LmlubmVyV2lkdGgvMTAwO2Nhc2UidmgiOnJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQvMTAwO2Nhc2Uidm1pbiI6cmV0dXJuIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2Uidm1heCI6cmV0dXJuIE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2UiaW4iOnJldHVybiA5NjtjYXNlImNtIjpyZXR1cm4gOTYvMi41NDtjYXNlIm1tIjpyZXR1cm4gOTYvMjUuNDtjYXNlInB0IjpyZXR1cm4gOTYvNzI7Y2FzZSJwYyI6cmV0dXJuIDE2fXJldHVybiAxfX0seyJwYXJzZS11bml0IjoyNTF9XSwzMTU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLnRvcG9qc29uPXQudG9wb2pzb258fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gcih0KXtpZihudWxsPT10KXJldHVybiBlO3ZhciByLG4saT10LnNjYWxlWzBdLGE9dC5zY2FsZVsxXSxvPXQudHJhbnNsYXRlWzBdLHM9dC50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgbD0yLGM9dC5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKHVbMF09KHIrPXRbMF0pKmkrbyx1WzFdPShuKz10WzFdKSphK3M7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX1mdW5jdGlvbiBuKHQpe3ZhciBlLG49cih0LnRyYW5zZm9ybSksaT0xLzAsYT1pLG89LWkscz0taTtmdW5jdGlvbiBsKHQpeyh0PW4odCkpWzBdPGkmJihpPXRbMF0pLHRbMF0+byYmKG89dFswXSksdFsxXTxhJiYoYT10WzFdKSx0WzFdPnMmJihzPXRbMV0pfWZ1bmN0aW9uIGModCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGMpO2JyZWFrO2Nhc2UiUG9pbnQiOmwodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobCl9fWZvcihlIGluIHQuYXJjcy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxsPXQubGVuZ3RoOysrcjxsOykoZT1uKHRbcl0scikpWzBdPGkmJihpPWVbMF0pLGVbMF0+byYmKG89ZVswXSksZVsxXTxhJiYoYT1lWzFdKSxlWzFdPnMmJihzPWVbMV0pfSkpLHQub2JqZWN0cyljKHQub2JqZWN0c1tlXSk7cmV0dXJuW2ksYSxvLHNdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxvPWEodCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczppLGdlb21ldHJ5Om99Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5Om99Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b319ZnVuY3Rpb24gYSh0LGUpe3ZhciBuPXIodC50cmFuc2Zvcm0pLGk9dC5hcmNzO2Z1bmN0aW9uIGEodCxlKXtlLmxlbmd0aCYmZS5wb3AoKTtmb3IodmFyIHI9aVt0PDA/fnQ6dF0sYT0wLG89ci5sZW5ndGg7YTxvOysrYSllLnB1c2gobihyW2FdLGEpKTt0PDAmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9KGUsbyl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih0KX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWEodFtyXSxlKTtyZXR1cm4gZS5sZW5ndGg8MiYmZS5wdXNoKGVbMF0pLGV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9cyh0KTtlLmxlbmd0aDw0OyllLnB1c2goZVswXSk7cmV0dXJuIGV9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5tYXAobCl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1vKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChvKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAocyk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPWMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKGMpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXt9LG49e30saT17fSxhPVtdLG89LTE7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dO2RlbGV0ZSBlW2kuc3RhcnRdLGRlbGV0ZSBpLnN0YXJ0LGRlbGV0ZSBpLmVuZCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSksYS5wdXNoKGkpfX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihyLG4pe3ZhciBpLGE9dC5hcmNzW3I8MD9+cjpyXTthLmxlbmd0aDwzJiYhYVsxXVswXSYmIWFbMV1bMV0mJihpPWVbKytvXSxlW29dPXIsZVtuXT1pKX0pKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1mdW5jdGlvbihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3QudHJhbnNmb3JtPyhyPVswLDBdLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixpXTpbaSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWlbc10paWYoZGVsZXRlIGlbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGE9bltsXSl7ZGVsZXRlIG5bYS5zdGFydF07dmFyIGM9YT09PXI/cjpyLmNvbmNhdChhKTtuW2Muc3RhcnQ9ci5zdGFydF09aVtjLmVuZD1hLmVuZF09Y31lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGE9aVtzXSl7ZGVsZXRlIGlbYS5lbmRdO3ZhciB1PWE9PT1yP3I6YS5jb25jYXQocik7blt1LnN0YXJ0PWEuc3RhcnRdPWlbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109aVtyLmVuZD1sXT1yfSkpLHMoaSxuKSxzKG4saSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XXx8YS5wdXNoKFt0XSl9KSksYX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbixpLGE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKW49bCh0LGUscik7ZWxzZSBmb3IoaT0wLG49bmV3IEFycmF5KGE9dC5hcmNzLmxlbmd0aCk7aTxhOysraSluW2ldPWk7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsYXJjczpvKHQsbil9fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuLGk9W10sYT1bXTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQ8MD9+dDp0OyhhW2VdfHwoYVtlXT1bXSkpLnB1c2goe2k6dCxnOm59KX1mdW5jdGlvbiBzKHQpe3QuZm9yRWFjaChvKX1mdW5jdGlvbiBsKHQpe3QuZm9yRWFjaChzKX1yZXR1cm4gZnVuY3Rpb24gdChlKXtzd2l0Y2gobj1lLGUudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmwoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6IWZ1bmN0aW9uKHQpe3QuZm9yRWFjaChsKX0oZS5hcmNzKX19KGUpLGEuZm9yRWFjaChudWxsPT1yP2Z1bmN0aW9uKHQpe2kucHVzaCh0WzBdLmkpfTpmdW5jdGlvbih0KXtyKHRbMF0uZyx0W3QubGVuZ3RoLTFdLmcpJiZpLnB1c2godFswXS5pKX0pLGl9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXt9LG49W10saT1bXTtmdW5jdGlvbiBzKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSkpfSkpLG4ucHVzaCh0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPXQubGVuZ3RoLGk9dFtuLTFdLGE9MDsrK3I8bjspZT1pLGk9dFtyXSxhKz1lWzBdKmlbMV0tZVsxXSppWzBdO3JldHVybiBNYXRoLmFicyhhKX0oYSh0LHt0eXBlOiJQb2x5Z29uIixhcmNzOltlXX0pLmNvb3JkaW5hdGVzWzBdKX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2gocyl9fSkpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuXyl7dmFyIGU9W10sbj1bdF07Zm9yKHQuXz0xLGkucHVzaChlKTt0PW4ucG9wKCk7KWUucHVzaCh0KSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ffHwodC5fPTEsbi5wdXNoKHQpKX0pKX0pKX0pKX19KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLGFyY3M6aS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pKX0pKX0pKSwobj0oaT1vKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEscyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKHM9aVswXSxpWzBdPWlbY10saVtjXT1zLHU9YSk7cmV0dXJuIGl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MH0pKX19ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOyl7dmFyIGk9cituPj4+MTt0W2ldPGU/cj1pKzE6bj1pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7aWYobnVsbD09dClyZXR1cm4gZTt2YXIgcixuLGk9dC5zY2FsZVswXSxhPXQuc2NhbGVbMV0sbz10LnRyYW5zbGF0ZVswXSxzPXQudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChyPW49MCk7dmFyIGw9MixjPXQubGVuZ3RoLHU9bmV3IEFycmF5KGMpLGY9TWF0aC5yb3VuZCgodFswXS1vKS9pKSxoPU1hdGgucm91bmQoKHRbMV0tcykvYSk7Zm9yKHVbMF09Zi1yLHI9Zix1WzFdPWgtbixuPWg7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX10LmJib3g9bix0LmZlYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXQub2JqZWN0c1tlXSksIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaSh0LGUpfSkpfTppKHQsZSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVyZ2VBcmNzPWMsdC5tZXNoPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQscy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lc2hBcmNzPXMsdC5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcCgoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtmdW5jdGlvbiBuKHQscil7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0PDAmJih0PX50KTt2YXIgbj1lW3RdO24/bi5wdXNoKHIpOmVbdF09W3JdfSkpfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24odCxlKX0pKX12YXIgYT17TGluZVN0cmluZzpuLE11bHRpTGluZVN0cmluZzppLFBvbHlnb246aSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kodCxlKX0pKX19O2Zvcih2YXIgbyBpbiB0LmZvckVhY2goKGZ1bmN0aW9uIHQoZSxyKXsiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWUudHlwZT9lLmdlb21ldHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dChlLHIpfSkpOmUudHlwZSBpbiBhJiZhW2UudHlwZV0oZS5hcmNzLHIpfSkpLGUpZm9yKHZhciBzPWVbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylmb3IodmFyIGY9YysxO2Y8bDsrK2Ype3ZhciBoLHA9c1tjXSxkPXNbZl07KGg9cltwXSlbbz11KGgsZCldIT09ZCYmaC5zcGxpY2UobywwLGQpLChoPXJbZF0pW289dShoLHApXSE9PXAmJmguc3BsaWNlKG8sMCxwKX1yZXR1cm4gcn0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2lmKHQudHJhbnNmb3JtKXRocm93IG5ldyBFcnJvcigiYWxyZWFkeSBxdWFudGl6ZWQiKTtpZihlJiZlLnNjYWxlKWw9dC5iYm94O2Vsc2V7aWYoISgocj1NYXRoLmZsb29yKGUpKT49MikpdGhyb3cgbmV3IEVycm9yKCJuIG11c3QgYmUgXHUyMjY1MiIpO3ZhciByLGk9KGw9dC5iYm94fHxuKHQpKVswXSxhPWxbMV0sbz1sWzJdLHM9bFszXTtlPXtzY2FsZTpbby1pPyhvLWkpLyhyLTEpOjEscy1hPyhzLWEpLyhyLTEpOjFdLHRyYW5zbGF0ZTpbaSxhXX19dmFyIGwsYyx1PWYoZSksaD10Lm9iamVjdHMscD17fTtmdW5jdGlvbiBkKHQpe3JldHVybiB1KHQpfWZ1bmN0aW9uIG0odCl7dmFyIGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmU9e3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0Lmdlb21ldHJpZXMubWFwKG0pfTticmVhaztjYXNlIlBvaW50IjplPXt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6ZCh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjplPXt0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzLm1hcChkKX07YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH1yZXR1cm4gbnVsbCE9dC5pZCYmKGUuaWQ9dC5pZCksbnVsbCE9dC5iYm94JiYoZS5iYm94PXQuYmJveCksbnVsbCE9dC5wcm9wZXJ0aWVzJiYoZS5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyksZX1mb3IoYyBpbiBoKXBbY109bShoW2NdKTtyZXR1cm57dHlwZToiVG9wb2xvZ3kiLGJib3g6bCx0cmFuc2Zvcm06ZSxvYmplY3RzOnAsYXJjczp0LmFyY3MubWFwKChmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0xLGk9dC5sZW5ndGgsYT1uZXcgQXJyYXkoaSk7Zm9yKGFbMF09dSh0WzBdLDApOysrcjxpOykoKGU9dSh0W3JdLHIpKVswXXx8ZVsxXSkmJihhW24rK109ZSk7cmV0dXJuIDE9PT1uJiYoYVtuKytdPVswLDBdKSxhLmxlbmd0aD1uLGF9KSl9fSx0LnRyYW5zZm9ybT1yLHQudW50cmFuc2Zvcm09ZixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwzMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcHJvdG90eXBlL2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiExO2lmKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHQsImxlbmd0aCIpKXJldHVybiExO3RyeXtpZigibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RoKXJldHVybiExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNhbGwpcmV0dXJuITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuYXBwbHkpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuIW4odCl9fSx7Ii4uL3Byb3RvdHlwZS9pcyI6MzIzfV0sMzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3ZhbHVlL2lzIiksaT10KCIuLi9vYmplY3QvaXMiKSxhPXQoIi4uL3N0cmluZy9jb2VyY2UiKSxvPXQoIi4vdG8tc2hvcnQtc3RyaW5nIikscz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJlcGxhY2UoIiV2IixvKGUpKX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighaShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKHMoZSx0KSk7aWYoIW4odCkpe2lmKCJkZWZhdWx0ImluIHIpcmV0dXJuIHIuZGVmYXVsdDtpZihyLmlzT3B0aW9uYWwpcmV0dXJuIG51bGx9dmFyIG89YShyLmVycm9yTWVzc2FnZSk7dGhyb3cgbihvKXx8KG89ZSksbmV3IFR5cGVFcnJvcihzKG8sdCkpfX0seyIuLi9vYmplY3QvaXMiOjMyMCwiLi4vc3RyaW5nL2NvZXJjZSI6MzI0LCIuLi92YWx1ZS9pcyI6MzI2LCIuL3RvLXNob3J0LXN0cmluZyI6MzE5fV0sMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQudG9TdHJpbmcoKX1jYXRjaChlKXt0cnl7cmV0dXJuIFN0cmluZyh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19fX0se31dLDMxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NhZmUtdG8tc3RyaW5nIiksaT0vW1xuXHJcdTIwMjhcdTIwMjldL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCk7cmV0dXJuIG51bGw9PT1lPyI8Tm9uLWNvZXJjaWJsZSB0byBzdHJpbmcgdmFsdWU+IjooZS5sZW5ndGg+MTAwJiYoZT1lLnNsaWNlKDAsOTkpKyJcdTIwMjYiKSxlPWUucmVwbGFjZShpLChmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJcbiI6cmV0dXJuIlxcbiI7Y2FzZSJcciI6cmV0dXJuIlxcciI7Y2FzZSJcdTIwMjgiOnJldHVybiJcXHUyMDI4IjtjYXNlIlx1MjAyOSI6cmV0dXJuIlxcdTIwMjkiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNoYXJhY3RlciIpfX0pKSl9fSx7Ii4vc2FmZS10by1zdHJpbmciOjMxOH1dLDMyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi92YWx1ZS9pcyIpLGk9e29iamVjdDohMCxmdW5jdGlvbjohMCx1bmRlZmluZWQ6ITB9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIW4odCkmJmhhc093blByb3BlcnR5LmNhbGwoaSx0eXBlb2YgdCl9fSx7Ii4uL3ZhbHVlL2lzIjozMjZ9XSwzMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIiksaT10KCIuL2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP3Q6bih0LCIldiBpcyBub3QgYSBwbGFpbiBmdW5jdGlvbiIsYXJndW1lbnRzWzFdKX19LHsiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIjozMTcsIi4vaXMiOjMyMn1dLDMyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9mdW5jdGlvbi9pcyIpLGk9L15ccypjbGFzc1tcc3svfV0vLGE9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIW4odCkmJiFpLnRlc3QoYS5jYWxsKHQpKX19LHsiLi4vZnVuY3Rpb24vaXMiOjMxNn1dLDMyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9vYmplY3QvaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpcmV0dXJuITE7dHJ5e3JldHVybiEhdC5jb25zdHJ1Y3RvciYmdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU9PT10fWNhdGNoKHQpe3JldHVybiExfX19LHsiLi4vb2JqZWN0L2lzIjozMjB9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdmFsdWUvaXMiKSxpPXQoIi4uL29iamVjdC9pcyIpLGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpcmV0dXJuIG51bGw7aWYoaSh0KSl7dmFyIGU9dC50b1N0cmluZztpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbnVsbDtpZihlPT09YSlyZXR1cm4gbnVsbH10cnl7cmV0dXJuIiIrdH1jYXRjaCh0KXtyZXR1cm4gbnVsbH19fSx7Ii4uL29iamVjdC9pcyI6MzIwLCIuLi92YWx1ZS9pcyI6MzI2fV0sMzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9yZXNvbHZlLWV4Y2VwdGlvbiIpLGk9dCgiLi9pcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT90Om4odCwiQ2Fubm90IHVzZSAldiIsYXJndW1lbnRzWzFdKX19LHsiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIjozMTcsIi4vaXMiOjMyNn1dLDMyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXR9fSx7fV0sMzI3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgiZHVwIiksYT10KCJidWZmZXIiKS5CdWZmZXI7ZS5fX1RZUEVEQVJSQVlfUE9PTHx8KGUuX19UWVBFREFSUkFZX1BPT0w9e1VJTlQ4OmkoWzMyLDBdKSxVSU5UMTY6aShbMzIsMF0pLFVJTlQzMjppKFszMiwwXSksQklHVUlOVDY0OmkoWzMyLDBdKSxJTlQ4OmkoWzMyLDBdKSxJTlQxNjppKFszMiwwXSksSU5UMzI6aShbMzIsMF0pLEJJR0lOVDY0OmkoWzMyLDBdKSxGTE9BVDppKFszMiwwXSksRE9VQkxFOmkoWzMyLDBdKSxEQVRBOmkoWzMyLDBdKSxVSU5UOEM6aShbMzIsMF0pLEJVRkZFUjppKFszMiwwXSl9KTt2YXIgbz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5LHM9InVuZGVmaW5lZCIhPXR5cGVvZiBCaWdVaW50NjRBcnJheSxsPSJ1bmRlZmluZWQiIT10eXBlb2YgQmlnSW50NjRBcnJheSxjPWUuX19UWVBFREFSUkFZX1BPT0w7Yy5VSU5UOEN8fChjLlVJTlQ4Qz1pKFszMiwwXSkpLGMuQklHVUlOVDY0fHwoYy5CSUdVSU5UNjQ9aShbMzIsMF0pKSxjLkJJR0lOVDY0fHwoYy5CSUdJTlQ2ND1pKFszMiwwXSkpLGMuQlVGRkVSfHwoYy5CVUZGRVI9aShbMzIsMF0pKTt2YXIgdT1jLkRBVEEsZj1jLkJVRkZFUjtmdW5jdGlvbiBoKHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj1uLmxvZzIoZSk7dVtyXS5wdXNoKHQpfX1mdW5jdGlvbiBwKHQpe3Q9bi5uZXh0UG93Mih0KTt2YXIgZT1uLmxvZzIodCkscj11W2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHAodCksMCx0KX1mdW5jdGlvbiBtKHQpe3JldHVybiBuZXcgVWludDE2QXJyYXkocCgyKnQpLDAsdCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KHAoNCp0KSwwLHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkocCh0KSwwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyBJbnQxNkFycmF5KHAoMip0KSwwLHQpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KHAoNCp0KSwwLHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShwKDgqdCksMCx0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBvP25ldyBVaW50OENsYW1wZWRBcnJheShwKHQpLDAsdCk6ZCh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiBzP25ldyBCaWdVaW50NjRBcnJheShwKDgqdCksMCx0KTpudWxsfWZ1bmN0aW9uIGsodCl7cmV0dXJuIGw/bmV3IEJpZ0ludDY0QXJyYXkocCg4KnQpLDAsdCk6bnVsbH1mdW5jdGlvbiBBKHQpe3JldHVybiBuZXcgRGF0YVZpZXcocCh0KSwwLHQpfWZ1bmN0aW9uIE0odCl7dD1uLm5leHRQb3cyKHQpO3ZhciBlPW4ubG9nMih0KSxyPWZbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgYSh0KX1yLmZyZWU9ZnVuY3Rpb24odCl7aWYoYS5pc0J1ZmZlcih0KSlmW24ubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfG4ubG9nMihlKTt1W3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUJpZ1VpbnQ2ND1yLmZyZWVJbnQ4PXIuZnJlZUludDE2PXIuZnJlZUludDMyPXIuZnJlZUJpZ0ludDY0PXIuZnJlZUZsb2F0MzI9ci5mcmVlRmxvYXQ9ci5mcmVlRmxvYXQ2ND1yLmZyZWVEb3VibGU9ci5mcmVlVWludDhDbGFtcGVkPXIuZnJlZURhdGFWaWV3PWZ1bmN0aW9uKHQpe2godC5idWZmZXIpfSxyLmZyZWVBcnJheUJ1ZmZlcj1oLHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtmW24ubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8ImFycmF5YnVmZmVyIj09PWUpcmV0dXJuIHAodCk7c3dpdGNoKGUpe2Nhc2UidWludDgiOnJldHVybiBkKHQpO2Nhc2UidWludDE2IjpyZXR1cm4gbSh0KTtjYXNlInVpbnQzMiI6cmV0dXJuIGcodCk7Y2FzZSJpbnQ4IjpyZXR1cm4gdih0KTtjYXNlImludDE2IjpyZXR1cm4geSh0KTtjYXNlImludDMyIjpyZXR1cm4geCh0KTtjYXNlImZsb2F0IjpjYXNlImZsb2F0MzIiOnJldHVybiBiKHQpO2Nhc2UiZG91YmxlIjpjYXNlImZsb2F0NjQiOnJldHVybiBfKHQpO2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIHcodCk7Y2FzZSJiaWdpbnQ2NCI6cmV0dXJuIGsodCk7Y2FzZSJiaWd1aW50NjQiOnJldHVybiBUKHQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gTSh0KTtjYXNlImRhdGEiOmNhc2UiZGF0YXZpZXciOnJldHVybiBBKHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LHIubWFsbG9jQXJyYXlCdWZmZXI9cCxyLm1hbGxvY1VpbnQ4PWQsci5tYWxsb2NVaW50MTY9bSxyLm1hbGxvY1VpbnQzMj1nLHIubWFsbG9jSW50OD12LHIubWFsbG9jSW50MTY9eSxyLm1hbGxvY0ludDMyPXgsci5tYWxsb2NGbG9hdDMyPXIubWFsbG9jRmxvYXQ9YixyLm1hbGxvY0Zsb2F0NjQ9ci5tYWxsb2NEb3VibGU9XyxyLm1hbGxvY1VpbnQ4Q2xhbXBlZD13LHIubWFsbG9jQmlnVWludDY0PVQsci5tYWxsb2NCaWdJbnQ2ND1rLHIubWFsbG9jRGF0YVZpZXc9QSxyLm1hbGxvY0J1ZmZlcj1NLHIuY2xlYXJDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzI7Kyt0KWMuVUlOVDhbdF0ubGVuZ3RoPTAsYy5VSU5UMTZbdF0ubGVuZ3RoPTAsYy5VSU5UMzJbdF0ubGVuZ3RoPTAsYy5JTlQ4W3RdLmxlbmd0aD0wLGMuSU5UMTZbdF0ubGVuZ3RoPTAsYy5JTlQzMlt0XS5sZW5ndGg9MCxjLkZMT0FUW3RdLmxlbmd0aD0wLGMuRE9VQkxFW3RdLmxlbmd0aD0wLGMuQklHVUlOVDY0W3RdLmxlbmd0aD0wLGMuQklHSU5UNjRbdF0ubGVuZ3RoPTAsYy5VSU5UOENbdF0ubGVuZ3RoPTAsdVt0XS5sZW5ndGg9MCxmW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiYml0LXR3aWRkbGUiOjgxLGJ1ZmZlcjo4NSxkdXA6MTI4fV0sMzI4OltmdW5jdGlvbih0LGUscil7dmFyIG49L1tcJ1wiXS87ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuLnRlc3QodC5jaGFyQXQoMCkpJiYodD10LnN1YnN0cigxKSksbi50ZXN0KHQuY2hhckF0KHQubGVuZ3RoLTEpKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksdCk6IiJ9fSx7fV0sMzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShyKXx8KHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2Zvcih2YXIgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtmb3IodmFyIG8gaW4gYSlpZigodm9pZCAwPT09ZVtvXXx8QXJyYXkuaXNBcnJheShlW29dKXx8dFtvXSE9PWVbb10pJiZvIGluIGUpe3ZhciBzO2lmKCEwPT09YVtvXSlzPWVbb107ZWxzZXtpZighMT09PWFbb10pY29udGludWU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGFbb10mJnZvaWQgMD09PShzPWFbb10oZVtvXSx0LGUpKSljb250aW51ZX10W29dPXN9fXJldHVybiB0fX0se31dLDMzMDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RyeXtpZighdC5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9dmFyIHI9dC5sb2NhbFN0b3JhZ2VbZV07cmV0dXJuIG51bGwhPXImJiJ0cnVlIj09PVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gdDt2YXIgbj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighbil7aWYocigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihlKTtyKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShlKTpjb25zb2xlLndhcm4oZSksbj0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwzMzE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnZXQtY2FudmFzLWNvbnRleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIndlYmdsIix0KX19LHsiZ2V0LWNhbnZhcy1jb250ZXh0IjoxOTR9XSwzMzI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJDaGluZXNlIixqZEVwb2NoOjE3MjE0MjUuNSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDaGluZXNlIixlcG9jaHM6WyJCRUMiLCJFQyJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dC5tYXRjaChsKTtyZXR1cm4gcj9yWzBdOiIifXZhciBuPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxpPXQubW9udGgoKSxhPSIiK3RoaXMudG9DaGluZXNlTW9udGgobixpKTtyZXR1cm4gZSYmYS5sZW5ndGg8MiYmKGE9IjAiK2EpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4saSkmJihhKz0iaSIpLGF9LG1vbnRoTmFtZXM6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGMpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDBcdTY3MDgiLCJcdTRlOGNcdTY3MDgiLCJcdTRlMDlcdTY3MDgiLCJcdTU2ZGJcdTY3MDgiLCJcdTRlOTRcdTY3MDgiLCJcdTUxNmRcdTY3MDgiLCJcdTRlMDNcdTY3MDgiLCJcdTUxNmJcdTY3MDgiLCJcdTRlNWRcdTY3MDgiLCJcdTUzNDFcdTY3MDgiLCJcdTUzNDFcdTRlMDBcdTY3MDgiLCJcdTUzNDFcdTRlOGNcdTY3MDgiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGk9Ilx1OTVmMCIraSksaX0scGFyc2VNb250aDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByLG49cGFyc2VJbnQoZSk7aWYoaXNOYU4obikpIlx1OTVmMCI9PT1lWzBdJiYocj0hMCxlPWUuc3Vic3RyaW5nKDEpKSwiXHU2NzA4Ij09PWVbZS5sZW5ndGgtMV0mJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpLG49MStbIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgaT1lW2UubGVuZ3RoLTFdO3I9ImkiPT09aXx8IkkiPT09aX1yZXR1cm4gdGhpcy50b01vbnRoSW5kZXgodCxuLHIpfSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLCJudW1iZXIiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gdH0sdG9Nb250aEluZGV4OmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7aWYociYmZSE9PWl8fGU8MXx8ZT4xMil0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gaT8hciYmZTw9aT9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKGU8MHx8ZT4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksZlt0LWZbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG4ubG9jYWwuaW52YWxpZHllYXIpLHM9aFtvLWhbMF1dLGw9cz4+OSY0MDk1LGM9cz4+NSYxNSx1PTMxJnM7KGk9YS5uZXdEYXRlKGwsYyx1KSkuYWRkKDQtKGkuZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGY9dGhpcy50b0pEKHQsZSxyKS1pLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGYvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcj1mW3QtZlswXV07aWYoZT4ocj4+MTM/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKGkueWVhcigpKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSxsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgdClvPXQsYT1lfHx7fTtlbHNle3ZhciBsO2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzApKXRocm93IG5ldyBFcnJvcigiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwIik7Im9iamVjdCI9PXR5cGVvZiBuPyhsPSExLGE9bik6KGw9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6bH19cz1vLmRheS0xO3ZhciBjLHU9ZltvLnllYXItZlswXV0scD11Pj4xMztjPXAmJihvLm1vbnRoPnB8fG8uaXNJbnRlcmNhbGFyeSk/by5tb250aDpvLm1vbnRoLTE7Zm9yKHZhciBkPTA7ZDxjO2QrKyl7cys9dSYxPDwxMi1kPzMwOjI5fXZhciBtPWhbby55ZWFyLWhbMF1dLGc9bmV3IERhdGUobT4+OSY0MDk1LChtPj41JjE1KS0xLCgzMSZtKStzKTtyZXR1cm4gYS55ZWFyPWcuZ2V0RnVsbFllYXIoKSxhLm1vbnRoPTErZy5nZXRNb250aCgpLGEuZGF5PWcuZ2V0RGF0ZSgpLGF9KHQscyxyLG8pO3JldHVybiBhLnRvSkQobC55ZWFyLGwubW9udGgsbC5kYXkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2lmKCJvYmplY3QiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIG89aFtpLnllYXItaFswXV0scz1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9cz49bz9pLnllYXI6aS55ZWFyLTEsbz1oW2EueWVhci1oWzBdXTt2YXIgbCxjPW5ldyBEYXRlKG8+PjkmNDA5NSwobz4+NSYxNSktMSwzMSZvKSx1PW5ldyBEYXRlKGkueWVhcixpLm1vbnRoLTEsaS5kYXkpO2w9TWF0aC5yb3VuZCgodS1jKS84NjRlNSk7dmFyIHAsZD1mW2EueWVhci1mWzBdXTtmb3IocD0wO3A8MTM7cCsrKXt2YXIgbT1kJjE8PDEyLXA/MzA6Mjk7aWYobDxtKWJyZWFrO2wtPW19dmFyIGc9ZD4+MTM7IWd8fHA8Zz8oYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9MStwKTpwPT09Zz8oYS5pc0ludGVyY2FsYXJ5PSEwLGEubW9udGg9cCk6KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPXApO3JldHVybiBhLmRheT0xK2wsYX0oZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHMpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIG49dC55ZWFyKCksaT10Lm1vbnRoKCksYT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpLHM9dGhpcy50b0NoaW5lc2VNb250aChuLGkpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZigieSI9PT1yKXt2YXIgYz1sLnllYXIoKSx1PWwubW9udGgoKSxmPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMscyksaD1hJiZmP3RoaXMudG9Nb250aEluZGV4KGMscywhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxzLCExKTtoIT09dSYmbC5tb250aChoKX1yZXR1cm4gbH19KTt2YXIgcz0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy0vXShcZD9cZCkoW2lJXT8pWy0vXShcZD9cZCkvbSxsPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgZj1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxoPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjM0Niwib2JqZWN0LWFzc2lnbiI6MjQ3fV0sMzMzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0seyIuLi9tYWluIjozNDYsIm9iamVjdC1hc3NpZ24iOjI0N31dLDMzNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSsoaS55ZWFyKCk8MD8xOjApLGU9aS5tb250aCgpLChyPWkuZGF5KCkpKyhlPjE/MTY6MCkrKGU+Mj8zMiooZS0yKTowKSs0MDAqKHQtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCkrMTt0LT00MDAqKGUtMSksdCs9dD4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IodC8zMikrMSxuPXQtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGU8PTA/ZS0xOmUscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7Ii4uL21haW4iOjM0Niwib2JqZWN0LWFzc2lnbiI6MjQ3fV0sMzM1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWF9LHsiLi4vbWFpbiI6MzQ2LCJvYmplY3QtYXNzaWduIjoyNDd9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KXx8OD09PWUmJjU9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/MzA6OT09PWUmJjM9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/Mjk6dGhpcy5kYXlzUGVyTW9udGhbZS0xXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue3llYXJUeXBlOih0aGlzLmxlYXBZZWFyKGkpPyJlbWJvbGlzbWljIjoiY29tbW9uIikrIiAiK1siZGVmaWNpZW50IiwicmVndWxhciIsImNvbXBsZXRlIl1bdGhpcy5kYXlzSW5ZZWFyKGkpJTEwLTNdfX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dDw9MD90KzE6dCxvPXRoaXMuamRFcG9jaCt0aGlzLl9kZWxheTEoYSkrdGhpcy5fZGVsYXkyKGEpK3IrMTtpZihlPDcpe2Zvcih2YXIgcz03O3M8PXRoaXMubW9udGhzSW5ZZWFyKHQpO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7Zm9yKHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcihzPTc7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7cmV0dXJuIG99LF9kZWxheTE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcigoMjM1KnQtMjM0KS8xOSkscj0xMjA4NCsxMzc1MyplLG49MjkqZStNYXRoLmZsb29yKHIvMjU5MjApO3JldHVybiBvKDMqKG4rMSksNyk8MyYmbisrLG59LF9kZWxheTI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZGVsYXkxKHQtMSkscj10aGlzLl9kZWxheTEodCk7cmV0dXJuIHRoaXMuX2RlbGF5MSh0KzEpLXI9PTM1Nj8yOnItZT09MzgyPzE6MH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTtmb3IodmFyIGU9TWF0aC5mbG9vcig5ODQ5NioodC10aGlzLmpkRXBvY2gpLzM1OTc1MzUxKS0xO3Q+PXRoaXMudG9KRCgtMT09PWU/MTplKzEsNywxKTspZSsrO2Zvcih2YXIgcj10PHRoaXMudG9KRChlLDEsMSk/NzoxO3Q+dGhpcy50b0pEKGUscix0aGlzLmRheXNJbk1vbnRoKGUscikpOylyKys7dmFyIG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaGVicmV3PWF9LHsiLi4vbWFpbiI6MzQ2LCJvYmplY3QtYXNzaWduIjoyNDd9XSwzMzc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJJc2xhbWljIixqZEVwb2NoOjE5NDg0MzkuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJJc2xhbWljIixlcG9jaHM6WyJCSCIsIkFIIl0sbW9udGhOYW1lczpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpJyBhbC1hd3dhbCIsIlJhYmknIGFsLXRoYW5pIiwiSnVtYWRhIGFsLWF3d2FsIiwiSnVtYWRhIGFsLXRoYW5pIiwiUmFqYWIiLCJTaGEnYWJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1IGFsLVFpJ2RhaCIsIkRodSBhbC1IaWpqYWgiXSxtb250aE5hbWVzU2hvcnQ6WyJNdWgiLCJTYWYiLCJSYWIxIiwiUmFiMiIsIkp1bTEiLCJKdW0yIiwiUmFqIiwiU2hhJyIsIlJhbSIsIlNoYXciLCJEaHVRIiwiRGh1SCJdLGRheU5hbWVzOlsiWWF3bSBhbC1haGFkIiwiWWF3bSBhbC1pdGhuYXluIiwiWWF3bSBhdGgtdGh1bGFhdGhhYSciLCJZYXdtIGFsLWFyYmknYWEnIiwiWWF3bSBhbC1raGFtXHUwMTJicyIsIllhd20gYWwtanVtJ2EiLCJZYXdtIGFzLXNhYnQiXSxkYXlOYW1lc1Nob3J0OlsiQWhhIiwiSXRoIiwiVGh1IiwiQXJiIiwiS2hhIiwiSnVtIiwiU2FiIl0sZGF5TmFtZXNNaW46WyJBaCIsIkl0IiwiVGgiLCJBciIsIktoIiwiSnUiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4oMTEqdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSsxNCklMzA8MTF9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzM1NTozNTR9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHQ9dDw9MD90KzE6dCwocj1pLmRheSgpKStNYXRoLmNlaWwoMjkuNSooZS0xKSkrMzU0Kih0LTEpK01hdGguZmxvb3IoKDMrMTEqdCkvMzApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O3ZhciBlPU1hdGguZmxvb3IoKDMwKih0LXRoaXMuamRFcG9jaCkrMTA2NDYpLzEwNjMxKTtlPWU8PTA/ZS0xOmU7dmFyIHI9TWF0aC5taW4oMTIsTWF0aC5jZWlsKCh0LTI5LXRoaXMudG9KRChlLDEsMSkpLzI5LjUpKzEpLG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaXNsYW1pYz1hfSx7Ii4uL21haW4iOjM0Niwib2JqZWN0LWFzc2lnbiI6MjQ3fV0sMzM4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSnVsaWFuIixqZEVwb2NoOjE3MjE0MjMuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJKdWxpYW4iLGVwb2NoczpbIkJDIiwiQUQiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJtbS9kZC95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKSklND09MH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCksdDwwJiZ0KyssZTw9MiYmKHQtLSxlKz0xMiksTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrci0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpKzE1MjQscj1NYXRoLmZsb29yKChlLTEyMi4xKS8zNjUuMjUpLG49TWF0aC5mbG9vcigzNjUuMjUqciksaT1NYXRoLmZsb29yKChlLW4pLzMwLjYwMDEpLGE9aS1NYXRoLmZsb29yKGk8MTQ/MToxMyksbz1yLU1hdGguZmxvb3IoYT4yPzQ3MTY6NDcxNSkscz1lLW4tTWF0aC5mbG9vcigzMC42MDAxKmkpO3JldHVybiBvPD0wJiZvLS0sdGhpcy5uZXdEYXRlKG8sYSxzKX19KSxuLmNhbGVuZGFycy5qdWxpYW49YX0seyIuLi9tYWluIjozNDYsIm9iamVjdC1hc3NpZ24iOjI0N31dLDMzOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LTEsZSkrMX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiTWF5YW4iLGpkRXBvY2g6NTg0MjgyLjUsaGFzWWVhclplcm86ITAsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjAscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTWF5YW4iLGVwb2NoczpbIiIsIiJdLG1vbnRoTmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLG1vbnRoTmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sZGF5TmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNNaW46WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJZWVlZLm0uZCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOlsiUG9wIiwiVW8iLCJaaXAiLCJab3R6IiwiVHplYyIsIlh1bCIsIllheGtpbiIsIk1vbCIsIkNoZW4iLCJZYXgiLCJaYWMiLCJDZWgiLCJNYWMiLCJLYW5raW4iLCJNdWFuIiwiUGF4IiwiS2F5YWIiLCJDdW1rdSIsIlVheWViIl0sdHpvbGtpbk1vbnRoczpbIkltaXgiLCJJayIsIkFrYmFsIiwiS2FuIiwiQ2hpY2NoYW4iLCJDaW1pIiwiTWFuaWsiLCJMYW1hdCIsIk11bHVjIiwiT2MiLCJDaHVlbiIsIkViIiwiQmVuIiwiSXgiLCJNZW4iLCJDaWIiLCJDYWJhbiIsIkV0em5hYiIsIkNhdWFjIiwiQWhhdSJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZSsiLiIrTWF0aC5mbG9vcih0LzIwKSsiLiIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZigodD10LnNwbGl0KCIuIikpLmxlbmd0aDwzKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1wYXJzZUludCh0W3JdLDEwKTtpZihNYXRoLmFicyhuKT4xOXx8cj4wJiZuPDApdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkudG9KRCgpLGE9dGhpcy5fdG9IYWFiKGkpLG89dGhpcy5fdG9Uem9sa2luKGkpO3JldHVybntoYWFiTW9udGhOYW1lOnRoaXMubG9jYWwuaGFhYk1vbnRoc1thWzBdLTFdLGhhYWJNb250aDphWzBdLGhhYWJEYXk6YVsxXSx0em9sa2luRGF5TmFtZTp0aGlzLmxvY2FsLnR6b2xraW5Nb250aHNbb1swXS0xXSx0em9sa2luRGF5Om9bMF0sdHpvbGtpblRyZWNlbmE6b1sxXX19LF90b0hhYWI6ZnVuY3Rpb24odCl7dmFyIGU9bygodC09dGhpcy5qZEVwb2NoKSs4KzM0MCwzNjUpO3JldHVybltNYXRoLmZsb29yKGUvMjApKzEsbyhlLDIwKV19LF90b1R6b2xraW46ZnVuY3Rpb24odCl7cmV0dXJuW3MoKHQtPXRoaXMuamRFcG9jaCkrMjAsMjApLHModCs0LDEzKV19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiBpLmRheSgpKzIwKmkubW9udGgoKSszNjAqaS55ZWFyKCkrdGhpcy5qZEVwb2NofSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaDt2YXIgZT1NYXRoLmZsb29yKHQvMzYwKTt0JT0zNjAsdCs9dDwwPzM2MDowO3ZhciByPU1hdGguZmxvb3IodC8yMCksbj10JTIwO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLm1heWFuPWF9LHsiLi4vbWFpbiI6MzQ2LCJvYmplY3QtYXNzaWduIjoyNDd9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcjt2YXIgbz1uLmluc3RhbmNlKCJncmVnb3JpYW4iKTtpKGEucHJvdG90eXBlLHtuYW1lOiJOYW5ha3NoYWhpIixqZEVwb2NoOjIyNTc2NzMuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDMwLDMwXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOYW5ha3NoYWhpIixlcG9jaHM6WyJCTiIsIkFOIl0sbW9udGhOYW1lczpbIkNoZXQiLCJWYWlzYWtoIiwiSmV0aCIsIkhhcmgiLCJTYXdhbiIsIkJoYWRvbiIsIkFzc3UiLCJLYXRhayIsIk1hZ2hhciIsIlBvaCIsIk1hZ2giLCJQaGFndW4iXSxtb250aE5hbWVzU2hvcnQ6WyJDaGUiLCJWYWkiLCJKZXQiLCJIYXIiLCJTYXciLCJCaGEiLCJBc3MiLCJLYXQiLCJNZ3IiLCJQb2giLCJNZ2giLCJQaGEiXSxkYXlOYW1lczpbIlNvbXZhYXIiLCJNYW5nYWx2YXIiLCJCdWRodmFhciIsIlZlZXJ2YWFyIiwiU2h1a2FydmFhciIsIlNhbmljaGFydmFhciIsIkV0dmFhciJdLGRheU5hbWVzU2hvcnQ6WyJTb20iLCJNYW5nYWwiLCJCdWRoIiwiVmVlciIsIlNodWthciIsIlNhbmljaGFyIiwiRXQiXSxkYXlOYW1lc01pbjpbIlNvIiwiTWEiLCJCdSIsIlZlIiwiU2giLCJTYSIsIkV0Il0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQtbW0teXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybiBvLmxlYXBZZWFyKGUueWVhcigpKyhlLnllYXIoKTwxPzE6MCkrMTQ2OSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDEtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZE1vbnRoKTsodD1pLnllYXIoKSk8MCYmdCsrO2Zvcih2YXIgYT1pLmRheSgpLHM9MTtzPGkubW9udGgoKTtzKyspYSs9dGhpcy5kYXlzUGVyTW9udGhbcy0xXTtyZXR1cm4gYStvLnRvSkQodCsxNDY4LDMsMTMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpO2Zvcih2YXIgZT1NYXRoLmZsb29yKCh0LSh0aGlzLmpkRXBvY2gtMSkpLzM2Nik7dD49dGhpcy50b0pEKGUrMSwxLDEpOyllKys7Zm9yKHZhciByPXQtTWF0aC5mbG9vcih0aGlzLnRvSkQoZSwxLDEpKy41KSsxLG49MTtyPnRoaXMuZGF5c0luTW9udGgoZSxuKTspci09dGhpcy5kYXlzSW5Nb250aChlLG4pLG4rKztyZXR1cm4gdGhpcy5uZXdEYXRlKGUsbixyKX19KSxuLmNhbGVuZGFycy5uYW5ha3NoYWhpPWF9LHsiLi4vbWFpbiI6MzQ2LCJvYmplY3QtYXNzaWduIjoyNDd9XSwzNDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJOZXBhbGkiLGpkRXBvY2g6MTcwMDcwOS41LGRheXNQZXJNb250aDpbMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLGRheXNQZXJZZWFyOjM2NSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOZXBhbGkiLGVwb2NoczpbIkJCUyIsIkFCUyJdLG1vbnRoTmFtZXM6WyJCYWlzYWtoIiwiSmVzdGhhIiwiQXNoYWRoIiwiU2hyYXdhbiIsIkJoYWRyYSIsIkFzaHdpbiIsIkthcnRpayIsIk1hbmdzaXIiLCJQYXVzaCIsIk1hbmdoIiwiRmFsZ3VuIiwiQ2hhaXRyYSJdLG1vbnRoTmFtZXNTaG9ydDpbIkJhaSIsIkplIiwiQXMiLCJTaHJhIiwiQmhhIiwiQXNoIiwiS2FyIiwiTWFuZyIsIlBhdSIsIk1hIiwiRmFsIiwiQ2hhaSJdLGRheU5hbWVzOlsiQWFpdGFiYWFyIiwiU29tYmFhciIsIk1hbmdsYmFhciIsIkJ1ZGhhYmFhciIsIkJpaGliYWFyIiwiU2h1a3JhYmFhciIsIlNoYW5pYmFhciJdLGRheU5hbWVzU2hvcnQ6WyJBYWl0YSIsIlNvbSIsIk1hbmdsIiwiQnVkaGEiLCJCaWhpIiwiU2h1a3JhIiwiU2hhbmkiXSxkYXlOYW1lc01pbjpbIkFhaSIsIlNvIiwiTWFuIiwiQnUiLCJCaSIsIlNodSIsIlNoYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXlzSW5ZZWFyKHQpIT09dGhpcy5kYXlzUGVyWWVhcn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7aWYodD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0pcmV0dXJuIHRoaXMuZGF5c1BlclllYXI7Zm9yKHZhciBlPTAscj10aGlzLm1pbk1vbnRoO3I8PTEyO3IrKyllKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW3JdO3JldHVybiBlfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLHZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0/dGhpcy5kYXlzUGVyTW9udGhbZS0xXTp0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW2VdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9bi5pbnN0YW5jZSgpLG89MCxzPWUsbD10O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEodCk7dmFyIGM9dC0ocz45fHw5PT09cyYmcj49dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXT81Njo1Nyk7Zm9yKDkhPT1lJiYobz1yLHMtLSk7OSE9PXM7KXM8PTAmJihzPTEyLGwtLSksbys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVtzXSxzLS07cmV0dXJuIDk9PT1lPyhvKz1yLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0pPDAmJihvKz1hLmRheXNJblllYXIoYykpOm8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bOV0tdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSxhLm5ld0RhdGUoYywxLDEpLmFkZChvLCJkIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnN0YW5jZSgpLmZyb21KRCh0KSxyPWUueWVhcigpLGk9ZS5kYXlPZlllYXIoKSxhPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShhKTtmb3IodmFyIG89OSxzPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bMF0sbD10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dLXMrMTtpPmw7KSsrbz4xMiYmKG89MSxhKyspLGwrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS0obC1pKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGEsbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7ZS51bnNoaWZ0KDE3KTtmb3IodmFyIHI9dC0xO3I8dCsyO3IrKyl2b2lkIDA9PT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdJiYodGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXT1lKX0sTkVQQUxJX0NBTEVOREFSX0RBVEE6ezE5NzA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcxOlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5NzM6WzE5LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTc0OlsxOSwzMSwzMSwzMiwzMCwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NTpbMTgsMzEsMzEsMzIsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTc3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMTk3ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5Nzk6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4MTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODI6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODU6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTg2OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg5OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTE6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5MzpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTQ6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk5NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDJlMzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0seyIuLi9tYWluIjozNDYsIm9iamVjdC1hc3NpZ24iOjI0N31dLDM0MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxmPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGYpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0seyIuLi9tYWluIjozNDYsIm9iamVjdC1hc3NpZ24iOjI0N31dLDM0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6MzQ2LCJvYmplY3QtYXNzaWduIjoyNDd9XSwzNDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjM0Niwib2JqZWN0LWFzc2lnbiI6MjQ3fV0sMzQ1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGF9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWE7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjM0Niwib2JqZWN0LWFzc2lnbiI6MjQ3fV0sMzQ2OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCxlLSh0PSIiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gbCh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSxlPWV8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCsiLSIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LHN1YnN0aXR1dGVDaGluZXNlRGlnaXRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0iIixpPTA7cj4wOyl7dmFyIGE9ciUxMDtuPSgwPT09YT8iIjp0W2FdK2VbaV0pK24saSsrLHI9TWF0aC5mbG9vcihyLzEwKX1yZXR1cm4gMD09PW4uaW5kZXhPZih0WzFdK2VbMV0pJiYobj1uLnN1YnN0cigxKSksbnx8dFswXX19fSksbihhLnByb3RvdHlwZSx7bmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm5ld0RhdGUobnVsbD09dD90aGlzOnQsZSxyKX0seWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5feWVhcjp0aGlzLnNldCh0LCJ5Iil9LG1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb250aDp0aGlzLnNldCh0LCJtIil9LGRheTpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZGF5OnRoaXMuc2V0KHQsImQiKX0sZGF0ZTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodCxlLHIpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3JldHVybiB0aGlzLl95ZWFyPXQsdGhpcy5fbW9udGg9ZSx0aGlzLl9kYXk9cix0aGlzfSxsZWFwWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5sZWFwWWVhcih0aGlzKX0sZXBvY2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXBvY2godGhpcyl9LGZvcm1hdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZm9ybWF0WWVhcih0aGlzKX0sbW9udGhPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcyl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKX0sZGF5c0luWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5ZZWFyKHRoaXMpfSxkYXlPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMpfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzKX0sd2Vla0RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrRGF5KHRoaXMpfSxleHRyYUluZm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXh0cmFJbmZvKHRoaXMpfSxhZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsdCxlKX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLHQsZSl9LGNvbXBhcmVUbzpmdW5jdGlvbih0KXtpZih0aGlzLl9jYWxlbmRhci5uYW1lIT09dC5fY2FsZW5kYXIubmFtZSl0aHJvdyhjLmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0Ll9jYWxlbmRhci5sb2NhbC5uYW1lKTt2YXIgZT10aGlzLl95ZWFyIT09dC5feWVhcj90aGlzLl95ZWFyLXQuX3llYXI6dGhpcy5fbW9udGghPT10Ll9tb250aD90aGlzLm1vbnRoT2ZZZWFyKCktdC5tb250aE9mWWVhcigpOnRoaXMuX2RheS10Ll9kYXk7cmV0dXJuIDA9PT1lPzA6ZTwwPy0xOjF9LGNhbGVuZGFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyfSx0b0pEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSkQodGhpcyl9LGZyb21KRDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKHQpfSx0b0pTRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZSh0KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnModGhpcy55ZWFyKCkpLDQpKyItIitvKHRoaXMubW9udGgoKSwyKSsiLSIrbyh0aGlzLmRheSgpLDIpfX0pLG4ocy5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGw9PXQ/dGhpcy50b2RheSgpOih0LnllYXImJih0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHI9dC5kYXkoKSxlPXQubW9udGgoKSx0PXQueWVhcigpKSxuZXcgYSh0aGlzLHQsZSxyKSl9LHRvZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSl9LGVwb2NoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKS55ZWFyKCk8MD90aGlzLmxvY2FsLmVwb2Noc1swXTp0aGlzLmxvY2FsLmVwb2Noc1sxXX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4oZS55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnMoZS55ZWFyKCkpLDQpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEyfSxtb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCk7cmV0dXJuKHIubW9udGgoKSt0aGlzLm1vbnRoc0luWWVhcihyKS10aGlzLmZpcnN0TW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHIpK3RoaXMubWluTW9udGh9LGZyb21Nb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPShlK3RoaXMuZmlyc3RNb250aC0yKnRoaXMubWluTW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHQpK3RoaXMubWluTW9udGg7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQscix0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCkscn0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5sZWFwWWVhcihlKT8zNjY6MzY1fSxkYXlPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4udG9KRCgpLXRoaXMubmV3RGF0ZShuLnllYXIoKSx0aGlzLmZyb21Nb250aE9mWWVhcihuLnllYXIoKSx0aGlzLm1pbk1vbnRoKSx0aGlzLm1pbkRheSkudG9KRCgpKzF9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gN30sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybihNYXRoLmZsb29yKHRoaXMudG9KRChuKSkrMikldGhpcy5kYXlzSW5XZWVrKCl9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkse319LGFkZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHRoaXMuX2NvcnJlY3RBZGQodCx0aGlzLl9hZGQodCxlLHIpLGUscil9LF9hZGQ6ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywiZCI9PT1yfHwidyI9PT1yKXt2YXIgbj10LnRvSkQoKStlKigidyI9PT1yP3RoaXMuZGF5c0luV2VlaygpOjEpLGk9dC5jYWxlbmRhcigpLmZyb21KRChuKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLFtpLnllYXIoKSxpLm1vbnRoKCksaS5kYXkoKV19dHJ5e3ZhciBhPXQueWVhcigpKygieSI9PT1yP2U6MCksbz10Lm1vbnRoT2ZZZWFyKCkrKCJtIj09PXI/ZTowKTtpPXQuZGF5KCk7InkiPT09cj8odC5tb250aCgpIT09dGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSYmKG89dGhpcy5uZXdEYXRlKGEsdC5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpKSxvPU1hdGgubWluKG8sdGhpcy5tb250aHNJblllYXIoYSkpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKToibSI9PT1yJiYoIWZ1bmN0aW9uKHQpe2Zvcig7bzx0Lm1pbk1vbnRoOylhLS0sbys9dC5tb250aHNJblllYXIoYSk7Zm9yKHZhciBlPXQubW9udGhzSW5ZZWFyKGEpO28+ZS0xK3QubWluTW9udGg7KWErKyxvLT1lLGU9dC5tb250aHNJblllYXIoYSl9KHRoaXMpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKTt2YXIgcz1bYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pLGldO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sc31jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19LF9jb3JyZWN0QWRkOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCEodGhpcy5oYXNZZWFyWmVyb3x8InkiIT09biYmIm0iIT09bnx8MCE9PWVbMF0mJnQueWVhcigpPjA9PWVbMF0+MCkpe3ZhciBpPXt5OlsxLDEsInkiXSxtOlsxLHRoaXMubW9udGhzSW5ZZWFyKC0xKSwibSJdLHc6W3RoaXMuZGF5c0luV2VlaygpLHRoaXMuZGF5c0luWWVhcigtMSksImQiXSxkOlsxLHRoaXMuZGF5c0luWWVhcigtMSksImQiXX1bbl0sYT1yPDA/LTE6MTtlPXRoaXMuX2FkZCh0LHIqaVswXSthKmlbMV0saVsyXSl9cmV0dXJuIHQuZGF0ZShlWzBdLGVbMV0sZVsyXSl9LHNldDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dmFyIG49InkiPT09cj9lOnQueWVhcigpLGk9Im0iPT09cj9lOnQubW9udGgoKSxhPSJkIj09PXI/ZTp0LmRheSgpO3JldHVybiJ5IiE9PXImJiJtIiE9PXJ8fChhPU1hdGgubWluKGEsdGhpcy5kYXlzSW5Nb250aChuLGkpKSksdC5kYXRlKG4saSxhKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGVMZXZlbCsrO3ZhciBuPXRoaXMuaGFzWWVhclplcm98fDAhPT10O2lmKG4pe3ZhciBpPXRoaXMubmV3RGF0ZSh0LGUsdGhpcy5taW5EYXkpO249ZT49dGhpcy5taW5Nb250aCYmZS10aGlzLm1pbk1vbnRoPHRoaXMubW9udGhzSW5ZZWFyKGkpJiZyPj10aGlzLm1pbkRheSYmci10aGlzLm1pbkRheTx0aGlzLmRheXNJbk1vbnRoKGkpfXJldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sbn0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIGMuaW5zdGFuY2UoKS5mcm9tSkQodGhpcy50b0pEKG4pKS50b0pTRGF0ZSgpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyb21KRChjLmluc3RhbmNlKCkuZnJvbUpTRGF0ZSh0KS50b0pEKCkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsbil7aWYodC55ZWFyKXtpZigwPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmdGhpcy5uYW1lIT09dC5jYWxlbmRhcigpLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0LmNhbGVuZGFyKCkubG9jYWwubmFtZSk7cmV0dXJuIHR9dHJ5e2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywxPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZCh0LGUscikpdGhyb3cgbi5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0saX1jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19fSksbC5wcm90b3R5cGU9bmV3IHMsbihsLnByb3RvdHlwZSx7bmFtZToiR3JlZ29yaWFuIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJHcmVnb3JpYW4iLGVwb2NoczpbIkJDRSIsIkNFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTAmJih0JTEwMCE9MHx8dCU0MDA9PTApfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCksdDwwJiZ0KyssZTwzJiYoZSs9MTIsdC0tKTt2YXIgaT1NYXRoLmZsb29yKHQvMTAwKSxhPTItaStNYXRoLmZsb29yKGkvNCk7cmV0dXJuIE1hdGguZmxvb3IoMzY1LjI1Kih0KzQ3MTYpKStNYXRoLmZsb29yKDMwLjYwMDEqKGUrMSkpK3IrYS0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpLHI9TWF0aC5mbG9vcigoZS0xODY3MjE2LjI1KS8zNjUyNC4yNSksbj0ocj1lKzErci1NYXRoLmZsb29yKHIvNCkpKzE1MjQsaT1NYXRoLmZsb29yKChuLTEyMi4xKS8zNjUuMjUpLGE9TWF0aC5mbG9vcigzNjUuMjUqaSksbz1NYXRoLmZsb29yKChuLWEpLzMwLjYwMDEpLHM9bi1hLU1hdGguZmxvb3IoMzAuNjAwMSpvKSxsPW8tKG8+MTMuNT8xMzoxKSxjPWktKGw+Mi41PzQ3MTY6NDcxNSk7cmV0dXJuIGM8PTAmJmMtLSx0aGlzLm5ld0RhdGUoYyxsLHMpfSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxpPW5ldyBEYXRlKG4ueWVhcigpLG4ubW9udGgoKS0xLG4uZGF5KCkpO3JldHVybiBpLnNldEhvdXJzKDApLGkuc2V0TWludXRlcygwKSxpLnNldFNlY29uZHMoMCksaS5zZXRNaWxsaXNlY29uZHMoMCksaS5zZXRIb3VycyhpLmdldEhvdXJzKCk+MTI/aS5nZXRIb3VycygpKzI6MCksaX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uZXdEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCkrMSx0LmdldERhdGUoKSl9fSk7dmFyIGM9ZS5leHBvcnRzPW5ldyBpO2MuY2RhdGU9YSxjLmJhc2VDYWxlbmRhcj1zLGMuY2FsZW5kYXJzLmdyZWdvcmlhbj1sfSx7Im9iamVjdC1hc3NpZ24iOjI0N31dLDM0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKSxpPXQoIi4vbWFpbiIpO24oaS5yZWdpb25hbE9wdGlvbnNbIiJdLHtpbnZhbGlkQXJndW1lbnRzOiJJbnZhbGlkIGFyZ3VtZW50cyIsaW52YWxpZEZvcm1hdDoiQ2Fubm90IGZvcm1hdCBhIGRhdGUgZnJvbSBhbm90aGVyIGNhbGVuZGFyIixtaXNzaW5nTnVtYmVyQXQ6Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uIHswfSIsdW5rbm93bk5hbWVBdDoiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZExpdGVyYWxBdDoiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZFRleHQ6IkFkZGl0aW9uYWwgdGV4dCBmb3VuZCBhdCBlbmQifSksaS5sb2NhbD1pLnJlZ2lvbmFsT3B0aW9uc1siIl0sbihpLmNkYXRlLnByb3RvdHlwZSx7Zm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKGU9dCx0PSIiKSx0aGlzLl9jYWxlbmRhci5mb3JtYXREYXRlKHR8fCIiLHRoaXMsZSl9fSksbihpLmJhc2VDYWxlbmRhci5wcm90b3R5cGUse1VOSVhfRVBPQ0g6aS5pbnN0YW5jZSgpLm5ld0RhdGUoMTk3MCwxLDEpLnRvSkQoKSxTRUNTX1BFUl9EQVk6ODY0MDAsVElDS1NfRVBPQ0g6aS5pbnN0YW5jZSgpLmpkRXBvY2gsVElDS1NfUEVSX0RBWTo4NjRlOSxBVE9NOiJ5eXl5LW1tLWRkIixDT09LSUU6IkQsIGRkIE0geXl5eSIsRlVMTDoiREQsIE1NIGQsIHl5eXkiLElTT184NjAxOiJ5eXl5LW1tLWRkIixKVUxJQU46IkoiLFJGQ184MjI6IkQsIGQgTSB5eSIsUkZDXzg1MDoiREQsIGRkLU0teXkiLFJGQ18xMDM2OiJELCBkIE0geXkiLFJGQ18xMTIzOiJELCBkIE0geXl5eSIsUkZDXzI4MjI6IkQsIGQgTSB5eXl5IixSU1M6IkQsIGQgTSB5eSIsVElDS1M6IiEiLFRJTUVTVEFNUDoiQCIsVzNDOiJ5eXl5LW1tLWRkIixmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJihyPWUsZT10LHQ9IiIpLCFlKXJldHVybiIiO2lmKGUuY2FsZW5kYXIoKSE9PXRoaXMpdGhyb3cgaS5sb2NhbC5pbnZhbGlkRm9ybWF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZEZvcm1hdDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDtmb3IodmFyIG4sYSxvLHMsbD0ocj1yfHx7fSkuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LGM9ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyx1PXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxmPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCxoPXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLHA9KHIuY2FsY3VsYXRlV2Vla3x8dGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrLGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7dytuPHQubGVuZ3RoJiZ0LmNoYXJBdCh3K24pPT09ZTspbisrO3JldHVybiB3Kz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0pLGQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9IiIrZTtpZihwKHQsbikpZm9yKDtpLmxlbmd0aDxyOylpPSIwIitpO3JldHVybiBpfSxtPXRoaXMsZz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdT91LmNhbGwobSx0LHAoIm0iKSk6eChkKCJtIix0Lm1vbnRoKCksMikpfSx2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ImZ1bmN0aW9uIj09dHlwZW9mIGg/aC5jYWxsKG0sdCk6aFt0Lm1vbnRoKCktbS5taW5Nb250aF06ImZ1bmN0aW9uIj09dHlwZW9mIGY/Zi5jYWxsKG0sdCk6Zlt0Lm1vbnRoKCktbS5taW5Nb250aF19LHk9dGhpcy5sb2NhbC5kaWdpdHMseD1mdW5jdGlvbih0KXtyZXR1cm4gci5sb2NhbE51bWJlcnMmJnk/eSh0KTp0fSxiPSIiLF89ITEsdz0wO3c8dC5sZW5ndGg7dysrKWlmKF8pIiciIT09dC5jaGFyQXQodyl8fHAoIiciKT9iKz10LmNoYXJBdCh3KTpfPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KHcpKXtjYXNlImQiOmIrPXgoZCgiZCIsZS5kYXkoKSwyKSk7YnJlYWs7Y2FzZSJEIjpiKz0obj0iRCIsYT1lLmRheU9mV2VlaygpLG89bCxzPWMscChuKT9zW2FdOm9bYV0pO2JyZWFrO2Nhc2UibyI6Yis9ZCgibyIsZS5kYXlPZlllYXIoKSwzKTticmVhaztjYXNlInciOmIrPWQoInciLGUud2Vla09mWWVhcigpLDIpO2JyZWFrO2Nhc2UibSI6Yis9ZyhlKTticmVhaztjYXNlIk0iOmIrPXYoZSxwKCJNIikpO2JyZWFrO2Nhc2UieSI6Yis9cCgieSIsMik/ZS55ZWFyKCk6KGUueWVhcigpJTEwMDwxMD8iMCI6IiIpK2UueWVhcigpJTEwMDticmVhaztjYXNlIlkiOnAoIlkiLDIpLGIrPWUuZm9ybWF0WWVhcigpO2JyZWFrO2Nhc2UiSiI6Yis9ZS50b0pEKCk7YnJlYWs7Y2FzZSJAIjpiKz0oZS50b0pEKCktdGhpcy5VTklYX0VQT0NIKSp0aGlzLlNFQ1NfUEVSX0RBWTticmVhaztjYXNlIiEiOmIrPShlLnRvSkQoKS10aGlzLlRJQ0tTX0VQT0NIKSp0aGlzLlRJQ0tTX1BFUl9EQVk7YnJlYWs7Y2FzZSInIjpwKCInIik/Yis9IiciOl89ITA7YnJlYWs7ZGVmYXVsdDpiKz10LmNoYXJBdCh3KX1yZXR1cm4gYn0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT1lKXRocm93IGkubG9jYWwuaW52YWxpZEFyZ3VtZW50c3x8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRBcmd1bWVudHM7aWYoIiI9PT0oZT0ib2JqZWN0Ij09dHlwZW9mIGU/ZS50b1N0cmluZygpOmUrIiIpKXJldHVybiBudWxsO3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O3ZhciBuPShyPXJ8fHt9KS5zaG9ydFllYXJDdXRvZmZ8fHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO249InN0cmluZyIhPXR5cGVvZiBuP246dGhpcy50b2RheSgpLnllYXIoKSUxMDArcGFyc2VJbnQobiwxMCk7Zm9yKHZhciBhPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LG89ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxzPXIucGFyc2VNb250aHx8dGhpcy5sb2NhbC5wYXJzZU1vbnRoLGw9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGM9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LHU9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsZj0tMSxoPS0xLHA9LTEsZD0tMSxtPS0xLGc9ITEsdj0hMSx5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7TStuPHQubGVuZ3RoJiZ0LmNoYXJBdChNK24pPT09ZTspbisrO3JldHVybiBNKz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0seD1mdW5jdGlvbih0LHIpe3ZhciBuPXkodCxyKSxhPVsyLDMsbj80OjIsbj80OjIsMTAsMTEsMjBdWyJveVlKQCEiLmluZGV4T2YodCkrMV0sbz1uZXcgUmVnRXhwKCJeLT9cXGR7MSwiK2ErIn0iKSxzPWUuc3Vic3RyaW5nKEEpLm1hdGNoKG8pO2lmKCFzKXRocm93KGkubG9jYWwubWlzc2luZ051bWJlckF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0ubWlzc2luZ051bWJlckF0KS5yZXBsYWNlKC9cezBcfS8sQSk7cmV0dXJuIEErPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSxiPXRoaXMsXz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXt5KCJtIik7dmFyIHQ9bC5jYWxsKGIsZS5zdWJzdHJpbmcoQSkpO3JldHVybiBBKz10Lmxlbmd0aCx0fXJldHVybiB4KCJtIil9LHc9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBvPXkodCxhKT9uOnIscz0wO3M8by5sZW5ndGg7cysrKWlmKGUuc3Vic3RyKEEsb1tzXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1vW3NdLnRvTG93ZXJDYXNlKCkpcmV0dXJuIEErPW9bc10ubGVuZ3RoLHMrYi5taW5Nb250aDt0aHJvdyhpLmxvY2FsLnVua25vd25OYW1lQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmtub3duTmFtZUF0KS5yZXBsYWNlKC9cezBcfS8sQSl9LFQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIHQ9eSgiTSIpP3UuY2FsbChiLGUuc3Vic3RyaW5nKEEpKTpjLmNhbGwoYixlLnN1YnN0cmluZyhBKSk7cmV0dXJuIEErPXQubGVuZ3RoLHR9cmV0dXJuIHcoIk0iLGMsdSl9LGs9ZnVuY3Rpb24oKXtpZihlLmNoYXJBdChBKSE9PXQuY2hhckF0KE0pKXRocm93KGkubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1x7MFx9LyxBKTtBKyt9LEE9MCxNPTA7TTx0Lmxlbmd0aDtNKyspaWYodikiJyIhPT10LmNoYXJBdChNKXx8eSgiJyIpP2soKTp2PSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KE0pKXtjYXNlImQiOmQ9eCgiZCIpO2JyZWFrO2Nhc2UiRCI6dygiRCIsYSxvKTticmVhaztjYXNlIm8iOm09eCgibyIpO2JyZWFrO2Nhc2UidyI6eCgidyIpO2JyZWFrO2Nhc2UibSI6cD1fKCk7YnJlYWs7Y2FzZSJNIjpwPVQoKTticmVhaztjYXNlInkiOnZhciBTPU07Zz0heSgieSIsMiksTT1TLGg9eCgieSIsMik7YnJlYWs7Y2FzZSJZIjpoPXgoIlkiLDIpO2JyZWFrO2Nhc2UiSiI6Zj14KCJKIikrLjUsIi4iPT09ZS5jaGFyQXQoQSkmJihBKysseCgiSiIpKTticmVhaztjYXNlIkAiOmY9eCgiQCIpL3RoaXMuU0VDU19QRVJfREFZK3RoaXMuVU5JWF9FUE9DSDticmVhaztjYXNlIiEiOmY9eCgiISIpL3RoaXMuVElDS1NfUEVSX0RBWSt0aGlzLlRJQ0tTX0VQT0NIO2JyZWFrO2Nhc2UiKiI6QT1lLmxlbmd0aDticmVhaztjYXNlIiciOnkoIiciKT9rKCk6dj0hMDticmVhaztkZWZhdWx0OmsoKX1pZihBPGUubGVuZ3RoKXRocm93IGkubG9jYWwudW5leHBlY3RlZFRleHR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkVGV4dDtpZigtMT09PWg/aD10aGlzLnRvZGF5KCkueWVhcigpOmg8MTAwJiZnJiYoaCs9LTE9PT1uPzE5MDA6dGhpcy50b2RheSgpLnllYXIoKS10aGlzLnRvZGF5KCkueWVhcigpJTEwMC0oaDw9bj8wOjEwMCkpLCJzdHJpbmciPT10eXBlb2YgcCYmKHA9cy5jYWxsKHRoaXMsaCxwKSksbT4tMSl7cD0xLGQ9bTtmb3IodmFyIEU9dGhpcy5kYXlzSW5Nb250aChoLHApO2Q+RTtFPXRoaXMuZGF5c0luTW9udGgoaCxwKSlwKyssZC09RX1yZXR1cm4gZj4tMT90aGlzLmZyb21KRChmKTp0aGlzLm5ld0RhdGUoaCxwLGQpfSxkZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKHQsZSxyLG4saSl7ciYmIm9iamVjdCIhPXR5cGVvZiByJiYoaT1uLG49cixyPW51bGwpLCJzdHJpbmciIT10eXBlb2YgbiYmKGk9bixuPSIiKTt2YXIgYT10aGlzO3JldHVybiBlPWU/ZS5uZXdEYXRlKCk6bnVsbCx0PW51bGw9PXQ/ZToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhLnBhcnNlRGF0ZShuLHQsaSl9Y2F0Y2godCl7fWZvcih2YXIgZT0oKHQ9dC50b0xvd2VyQ2FzZSgpKS5tYXRjaCgvXmMvKSYmcj9yLm5ld0RhdGUoKTpudWxsKXx8YS50b2RheSgpLG89LyhbKy1dP1swLTldKylccyooZHx3fG18eSk/L2cscz1vLmV4ZWModCk7czspZS5hZGQocGFyc2VJbnQoc1sxXSwxMCksc1syXXx8ImQiKSxzPW8uZXhlYyh0KTtyZXR1cm4gZX0odCk6Im51bWJlciI9PXR5cGVvZiB0P2lzTmFOKHQpfHx0PT09MS8wfHx0PT09LTEvMD9lOmEudG9kYXkoKS5hZGQodCwiZCIpOmEubmV3RGF0ZSh0KX19KX0seyIuL21haW4iOjM0Niwib2JqZWN0LWFzc2lnbiI6MjQ3fV0sMzQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1be3BhdGg6IiIsYmFja29mZjowfSx7cGF0aDoiTS0yLjQsLTNWM0wwLjYsMFoiLGJhY2tvZmY6LjZ9LHtwYXRoOiJNLTMuNywtMi41VjIuNUwxLjMsMFoiLGJhY2tvZmY6MS4zfSx7cGF0aDoiTS00LjQ1LC0zTC0xLjY1LC0wLjJWMC4yTC00LjQ1LDNMMS41NSwwWiIsYmFja29mZjoxLjU1fSx7cGF0aDoiTS0yLjIsLTIuMkwtMC4yLC0wLjJWMC4yTC0yLjIsMi4yTC0xLjQsM0wxLjYsMEwtMS40LC0zWiIsYmFja29mZjoxLjZ9LHtwYXRoOiJNLTQuNCwtMi4xTC0wLjYsLTAuMlYwLjJMLTQuNCwyLjFMLTQsM0wyLDBMLTQsLTNaIixiYWNrb2ZmOjJ9LHtwYXRoOiJNMiwwQTIsMiAwIDEsMSAwLC0yQTIsMiAwIDAsMSAyLDBaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9LHtwYXRoOiJNMiwyVi0ySC0yVjJaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9XX0se31dLDM0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2Fycm93X3BhdGhzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTt0KCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO2UuZXhwb3J0cz1vKCJhbm5vdGF0aW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmb250Omkoe2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyIsY29sb3JFZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiY2VudGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sdmFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcnBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHNob3dhcnJvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sc3RhcnRhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2lkZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZW5kIiwic3RhcnQiXSxleHRyYXM6WyJub25lIl0sZGZsdDoiZW5kIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxheXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxjbGlja3Rvc2hvdzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwib25vZmYiLCJvbm91dCJdLGRmbHQ6ITEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhjbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZm9udDppKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJhcnJheWRyYXcifSxjYXB0dXJlZXZlbnRzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntyZWY6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifX19KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6NDcyLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjU2MSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODUsIi4vYXJyb3dfcGF0aHMiOjM0OH1dLDM1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2RyYXciKS5kcmF3O2Z1bmN0aW9uIG8odCl7dmFyIGU9dC5fZnVsbExheW91dDtuLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9aS5nZXRGcm9tSWQodCxlLnhyZWYpLG49aS5nZXRGcm9tSWQodCxlLnlyZWYpLGE9aS5nZXRSZWZUeXBlKGUueHJlZiksbz1pLmdldFJlZlR5cGUoZS55cmVmKTtlLl9leHRyZW1lcz17fSwicmFuZ2UiPT09YSYmcyhlLHIpLCJyYW5nZSI9PT1vJiZzKGUsbil9KSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsYT1uLmNoYXJBdCgwKSxvPXRbYV0scz10WyJhIithXSxsPXRbYSsicmVmIl0sYz10WyJhIithKyJyZWYiXSx1PXRbIl8iK2ErInBhZHBsdXMiXSxmPXRbIl8iK2ErInBhZG1pbnVzIl0saD17eDoxLHk6LTF9W2FdKnRbYSsic2hpZnQiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtoLG09cC1oLGc9Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCx2PWcraCx5PWctaDtpZihjPT09bCl7dmFyIHg9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czptfSksYj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsdikscHBhZG1pbnVzOk1hdGgubWF4KGYseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSB2PXM/ditzOnYseT1zP3ktczp5LHI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsdikscHBhZG1pbnVzOk1hdGgubWF4KGYsbSx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFthLG9dLHQpfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi9kcmF3IjozNTV9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgcixuLGksYSxvLGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1bXSxoPVtdLHA9W10sZD0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWlmKGE9KGk9dVtyXSkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxkO24rKylpZihsPShvPWVbbl0pLnhheGlzLGM9by55YXhpcyxsLl9pZD09PWkueHJlZiYmYy5faWQ9PT1pLnlyZWYmJmwuZDJyKG8ueCk9PT1zKGkuX3hjbGljayxsKSYmYy5kMnIoby55KT09PXMoaS5feWNsaWNrLGMpKXsoaS52aXNpYmxlPyJvbm91dCI9PT1hP2g6cDpmKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZpLnZpc2libGUmJiJvbm91dCI9PT1hJiZoLnB1c2gocil9cmV0dXJue29uOmYsb2ZmOmgsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiJsb2ciPT09ZS50eXBlP2UubDJyKHQpOmUuZDJyKHQpfWUuZXhwb3J0cz17aGFzQ2xpY2tUb1Nob3c6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQsZSk7cmV0dXJuIHIub24ubGVuZ3RoPjB8fHIuZXhwbGljaXRPZmYubGVuZ3RoPjB9LG9uQ2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGw9byh0LGUpLGM9bC5vbix1PWwub2ZmLmNvbmNhdChsLmV4cGxpY2l0T2ZmKSxmPXt9LGg9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucztpZighYy5sZW5ndGgmJiF1Lmxlbmd0aClyZXR1cm47Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsaFtjW3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCEwKSxuLmV4dGVuZEZsYXQoZixzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsImFubm90YXRpb25zIixoW3Vbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITEpLG4uZXh0ZW5kRmxhdChmLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBpLmNhbGwoInVwZGF0ZSIsdCx7fSxmKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uLy4uL3JlZ2lzdHJ5Ijo2Mzh9XSwzNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKCJvcGFjaXR5Iik7dmFyIG89YSgiYmdjb2xvciIpLHM9YSgiYm9yZGVyY29sb3IiKSxsPWkub3BhY2l0eShzKTthKCJib3JkZXJwYWQiKTt2YXIgYz1hKCJib3JkZXJ3aWR0aCIpLHU9YSgic2hvd2Fycm93Iik7aWYoYSgidGV4dCIsdT8iICI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGEoInRleHRhbmdsZSIpLG4uY29lcmNlRm9udChhLCJmb250IixyLmZvbnQpLGEoIndpZHRoIiksYSgiYWxpZ24iKSxhKCJoZWlnaHQiKSYmYSgidmFsaWduIiksdSl7dmFyIGYsaCxwPWEoImFycm93c2lkZSIpOy0xIT09cC5pbmRleE9mKCJlbmQiKSYmKGY9YSgiYXJyb3doZWFkIiksaD1hKCJhcnJvd3NpemUiKSksLTEhPT1wLmluZGV4T2YoInN0YXJ0IikmJihhKCJzdGFydGFycm93aGVhZCIsZiksYSgic3RhcnRhcnJvd3NpemUiLGgpKSxhKCJhcnJvd2NvbG9yIixsP2UuYm9yZGVyY29sb3I6aS5kZWZhdWx0TGluZSksYSgiYXJyb3d3aWR0aCIsMioobCYmY3x8MSkpLGEoInN0YW5kb2ZmIiksYSgic3RhcnRzdGFuZG9mZiIpfXZhciBkPWEoImhvdmVydGV4dCIpLG09ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgZz1hKCJob3ZlcmxhYmVsLmJnY29sb3IiLG0uYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSksdj1hKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixtLmJvcmRlcmNvbG9yfHxpLmNvbnRyYXN0KGcpKTtuLmNvZXJjZUZvbnQoYSwiaG92ZXJsYWJlbC5mb250Iix7ZmFtaWx5Om0uZm9udC5mYW1pbHksc2l6ZTptLmZvbnQuc2l6ZSxjb2xvcjptLmZvbnQuY29sb3J8fHZ9KX1hKCJjYXB0dXJlZXZlbnRzIiwhIWQpfX0seyIuLi8uLi9saWIiOjUwMywiLi4vY29sb3IiOjM2Nn1dLDM1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGY9ZS5faWQuY2hhckF0KDApLGg9MDtoPHUubGVuZ3RoO2grKylsPXVbaF0sYz0iYW5ub3RhdGlvbnNbIitoKyJdLiIsbFtmKyJyZWYiXT09PWUuX2lkJiZwKGYpLGxbImEiK2YrInJlZiJdPT09ZS5faWQmJnAoImEiK2YpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2kocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxhKGMrdCxzKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjUzMSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDM1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9dmFyIGw9YSgidmlzaWJsZSIpLGM9YSgiY2xpY2t0b3Nob3ciKTtpZihsfHxjKXtvKHQsZSxyLGEpO2Zvcih2YXIgdT1lLnNob3dhcnJvdyxmPVsieCIsInkiXSxoPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIG09ZltkXSxnPWkuY29lcmNlUmVmKHQsZSxwLG0sIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PWcpaS5nZXRGcm9tSWQocCxnKS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihpLmNvZXJjZVBvc2l0aW9uKGUscCxhLGcsbSwuNSksdSl7dmFyIHY9ImEiK20seT1pLmNvZXJjZVJlZih0LGUscCx2LCJwaXhlbCIsWyJwaXhlbCIsInBhcGVyIl0pOyJwaXhlbCIhPT15JiZ5IT09ZyYmKHk9ZVt2XT0icGl4ZWwiKTt2YXIgeD0icGl4ZWwiPT09eT9oW2RdOi40O2kuY29lcmNlUG9zaXRpb24oZSxwLGEseSx2LHgpfWEobSsiYW5jaG9yIiksYShtKyJzaGlmdCIpfWlmKG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSksYyl7dmFyIGI9YSgieGNsaWNrIiksXz1hKCJ5Y2xpY2siKTtlLl94Y2xpY2s9dm9pZCAwPT09Yj9lLng6aS5jbGVhblBvc2l0aW9uKGIscCxlLnhyZWYpLGUuX3ljbGljaz12b2lkIDA9PT1fP2UueTppLmNsZWFuUG9zaXRpb24oXyxwLGUueXJlZil9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi9hdHRyaWJ1dGVzIjozNDksIi4vY29tbW9uX2RlZmF1bHRzIjozNTJ9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9saWIiKSxzPW8uc3RyVHJhbnNsYXRlLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi9kcmF3aW5nIiksZj10KCIuLi9meCIpLGg9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZD10KCIuLi9kcmFnZWxlbWVudCIpLG09dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGc9dCgiLi9kcmF3X2Fycm93X2hlYWQiKTtmdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC5fZnVsbExheW91dC5hbm5vdGF0aW9uc1tlXXx8e30sbj1sLmdldEZyb21JZCh0LHIueHJlZiksaT1sLmdldEZyb21JZCh0LHIueXJlZik7biYmbi5zZXRTY2FsZSgpLGkmJmkuc2V0U2NhbGUoKSx4KHQscixlLCExLG4saSl9ZnVuY3Rpb24geSh0LGUscixuLGkpe3ZhciBhPWlbcl0sbz1pW3IrInJlZiJdLHM9LTEhPT1yLmluZGV4T2YoInkiKSxjPSJkb21haW4iPT09bC5nZXRSZWZUeXBlKG8pLHU9cz9uLmg6bi53O3JldHVybiB0P2M/YSsocz8tZTplKS90Ll9sZW5ndGg6dC5wMnIodC5yMnAoYSkrZSk6YSsocz8tZTplKS91fWZ1bmN0aW9uIHgodCxlLHIsYSx2LHgpe3ZhciBiLF8sdz10Ll9mdWxsTGF5b3V0LFQ9dC5fZnVsbExheW91dC5fc2l6ZSxrPXQuX2NvbnRleHQuZWRpdHM7YT8oYj0iYW5ub3RhdGlvbi0iK2EsXz1hKyIuYW5ub3RhdGlvbnMiKTooYj0iYW5ub3RhdGlvbiIsXz0iYW5ub3RhdGlvbnMiKTt2YXIgQT1tKHQubGF5b3V0LF8sZSksTT1BLm1vZGlmeUJhc2UsUz1BLm1vZGlmeUl0ZW0sRT1BLmdldFVwZGF0ZU9iajt3Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIitiKydbZGF0YS1pbmRleD0iJytyKyciXScpLnJlbW92ZSgpO3ZhciBMPSJjbGlwIit3Ll91aWQrIl9hbm4iK3I7aWYoZS5faW5wdXQmJiExIT09ZS52aXNpYmxlKXt2YXIgQz17eDp7fSx5Ont9fSxQPStlLnRleHRhbmdsZXx8MCxJPXcuX2luZm9sYXllci5hcHBlbmQoImciKS5jbGFzc2VkKGIsITApLmF0dHIoImRhdGEtaW5kZXgiLFN0cmluZyhyKSkuc3R5bGUoIm9wYWNpdHkiLGUub3BhY2l0eSksTz1JLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dC1nIiwhMCksej1rW2Uuc2hvd2Fycm93PyJhbm5vdGF0aW9uVGFpbCI6ImFubm90YXRpb25Qb3NpdGlvbiJdLEQ9ZS5jYXB0dXJlZXZlbnRzfHxrLmFubm90YXRpb25UZXh0fHx6LFI9Ty5hcHBlbmQoImciKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLEQ/ImFsbCI6bnVsbCkuY2FsbChwLCJwb2ludGVyIikub24oImNsaWNrIiwoZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMSx0LmVtaXQoInBsb3RseV9jbGlja2Fubm90YXRpb24iLFkobi5ldmVudCkpfSkpO2UuaG92ZXJ0ZXh0JiZSLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciByPWUuaG92ZXJsYWJlbCxuPXIuZm9udCxpPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2YubG9uZUhvdmVyKHt4MDppLmxlZnQtYS5sZWZ0LHgxOmkucmlnaHQtYS5sZWZ0LHk6KGkudG9wK2kuYm90dG9tKS8yLWEudG9wLHRleHQ6ZS5ob3ZlcnRleHQsY29sb3I6ci5iZ2NvbG9yLGJvcmRlckNvbG9yOnIuYm9yZGVyY29sb3IsZm9udEZhbWlseTpuLmZhbWlseSxmb250U2l6ZTpuLnNpemUsZm9udENvbG9yOm4uY29sb3J9LHtjb250YWluZXI6dy5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6dy5fcGFwZXIubm9kZSgpLGdkOnR9KX0pKS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2YubG9uZVVuaG92ZXIody5faG92ZXJsYXllci5ub2RlKCkpfSkpO3ZhciBGPWUuYm9yZGVyd2lkdGgsQj1lLmJvcmRlcnBhZCxOPUYrQixqPVIuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiZyIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEYrInB4IikuY2FsbChjLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGMuZmlsbCxlLmJnY29sb3IpLFU9ZS53aWR0aHx8ZS5oZWlnaHQsVj13Ll90b3BjbGlwcy5zZWxlY3RBbGwoIiMiK0wpLmRhdGEoVT9bMF06W10pO1YuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiYW5uY2xpcCIsITApLmF0dHIoImlkIixMKS5hcHBlbmQoInJlY3QiKSxWLmV4aXQoKS5yZW1vdmUoKTt2YXIgSD1lLmZvbnQscT13Ll9tZXRhP28udGVtcGxhdGVTdHJpbmcoZS50ZXh0LHcuX21ldGEpOmUudGV4dCxHPVIuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYW5ub3RhdGlvbi10ZXh0IiwhMCkudGV4dChxKTtrLmFubm90YXRpb25UZXh0P0cuY2FsbChoLm1ha2VFZGl0YWJsZSx7ZGVsZWdhdGU6UixnZDp0fSkuY2FsbChXKS5vbigiZWRpdCIsKGZ1bmN0aW9uKHIpe2UudGV4dD1yLHRoaXMuY2FsbChXKSxTKCJ0ZXh0IixyKSx2JiZ2LmF1dG9yYW5nZSYmTSh2Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCkseCYmeC5hdXRvcmFuZ2UmJk0oeC5fbmFtZSsiLmF1dG9yYW5nZSIsITApLGkuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LEUoKSl9KSk6Ry5jYWxsKFcpfWVsc2Ugbi5zZWxlY3RBbGwoIiMiK0wpLnJlbW92ZSgpO2Z1bmN0aW9uIFkodCl7dmFyIG49e2luZGV4OnIsYW5ub3RhdGlvbjplLl9pbnB1dCxmdWxsQW5ub3RhdGlvbjplLGV2ZW50OnR9O3JldHVybiBhJiYobi5zdWJwbG90SWQ9YSksbn1mdW5jdGlvbiBXKHIpe3JldHVybiByLmNhbGwodS5mb250LEgpLmF0dHIoeyJ0ZXh0LWFuY2hvciI6e2xlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn1bZS5hbGlnbl18fCJtaWRkbGUifSksaC5jb252ZXJ0VG9Uc3BhbnMocix0LFgpLHJ9ZnVuY3Rpb24gWCgpe3ZhciByPUcuc2VsZWN0QWxsKCJhIik7MT09PXIuc2l6ZSgpJiZyLnRleHQoKT09PUcudGV4dCgpJiZSLmluc2VydCgiYSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjpyLmF0dHIoInhsaW5rOmhyZWYiKSwieGxpbms6eGxpbms6c2hvdyI6ci5hdHRyKCJ4bGluazpzaG93Iil9KS5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIn0pLm5vZGUoKS5hcHBlbmRDaGlsZChqLm5vZGUoKSk7dmFyIG49Ui5zZWxlY3QoIi5hbm5vdGF0aW9uLXRleHQtbWF0aC1ncm91cCIpLGY9IW4uZW1wdHkoKSxtPXUuYkJveCgoZj9uOkcpLm5vZGUoKSksYj1tLndpZHRoLF89bS5oZWlnaHQsQT1lLndpZHRofHxiLEQ9ZS5oZWlnaHR8fF8sQj1NYXRoLnJvdW5kKEErMipOKSxIPU1hdGgucm91bmQoRCsyKk4pO2Z1bmN0aW9uIHEodCxlKXtyZXR1cm4iYXV0byI9PT1lJiYoZT10PDEvMz8ibGVmdCI6dD4yLzM/InJpZ2h0IjoiY2VudGVyIikse2NlbnRlcjowLG1pZGRsZTowLGxlZnQ6LjUsYm90dG9tOi0uNSxyaWdodDotLjUsdG9wOi41fVtlXX1mb3IodmFyIFc9ITEsWD1bIngiLCJ5Il0sWj0wO1o8WC5sZW5ndGg7WisrKXt2YXIgSixLLFEsJCx0dCxldD1YW1pdLHJ0PWVbZXQrInJlZiJdfHxldCxudD1lWyJhIitldCsicmVmIl0saXQ9e3g6dix5Onh9W2V0XSxhdD0oUCsoIngiPT09ZXQ/MDotOTApKSpNYXRoLlBJLzE4MCxvdD1CKk1hdGguY29zKGF0KSxzdD1IKk1hdGguc2luKGF0KSxsdD1NYXRoLmFicyhvdCkrTWF0aC5hYnMoc3QpLGN0PWVbZXQrImFuY2hvciJdLHV0PWVbZXQrInNoaWZ0Il0qKCJ4Ij09PWV0PzE6LTEpLGZ0PUNbZXRdLGh0PWwuZ2V0UmVmVHlwZShydCk7aWYoaXQmJiJkb21haW4iIT09aHQpe3ZhciBwdD1pdC5yMmZyYWN0aW9uKGVbZXRdKTsocHQ8MHx8cHQ+MSkmJihudD09PXJ0PygocHQ9aXQucjJmcmFjdGlvbihlWyJhIitldF0pKTwwfHxwdD4xKSYmKFc9ITApOlc9ITApLEo9aXQuX29mZnNldCtpdC5yMnAoZVtldF0pLCQ9LjV9ZWxzZXt2YXIgZHQ9ImRvbWFpbiI9PT1odDsieCI9PT1ldD8oUT1lW2V0XSxKPWR0P2l0Ll9vZmZzZXQraXQuX2xlbmd0aCpROko9VC5sK1QudypRKTooUT0xLWVbZXRdLEo9ZHQ/aXQuX29mZnNldCtpdC5fbGVuZ3RoKlE6Sj1ULnQrVC5oKlEpLCQ9ZS5zaG93YXJyb3c/LjU6UX1pZihlLnNob3dhcnJvdyl7ZnQuaGVhZD1KO3ZhciBtdD1lWyJhIitldF07aWYodHQ9b3QqcSguNSxlLnhhbmNob3IpLXN0KnEoLjUsZS55YW5jaG9yKSxudD09PXJ0KXt2YXIgZ3Q9bC5nZXRSZWZUeXBlKG50KTsiZG9tYWluIj09PWd0PygieSI9PT1ldCYmKG10PTEtbXQpLGZ0LnRhaWw9aXQuX29mZnNldCtpdC5fbGVuZ3RoKm10KToicGFwZXIiPT09Z3Q/InkiPT09ZXQ/KG10PTEtbXQsZnQudGFpbD1ULnQrVC5oKm10KTpmdC50YWlsPVQubCtULncqbXQ6ZnQudGFpbD1pdC5fb2Zmc2V0K2l0LnIycChtdCksSz10dH1lbHNlIGZ0LnRhaWw9SittdCxLPXR0K210O2Z0LnRleHQ9ZnQudGFpbCt0dDt2YXIgdnQ9d1sieCI9PT1ldD8id2lkdGgiOiJoZWlnaHQiXTtpZigicGFwZXIiPT09cnQmJihmdC5oZWFkPW8uY29uc3RyYWluKGZ0LmhlYWQsMSx2dC0xKSksInBpeGVsIj09PW50KXt2YXIgeXQ9LU1hdGgubWF4KGZ0LnRhaWwtMyxmdC50ZXh0KSx4dD1NYXRoLm1pbihmdC50YWlsKzMsZnQudGV4dCktdnQ7eXQ+MD8oZnQudGFpbCs9eXQsZnQudGV4dCs9eXQpOnh0PjAmJihmdC50YWlsLT14dCxmdC50ZXh0LT14dCl9ZnQudGFpbCs9dXQsZnQuaGVhZCs9dXR9ZWxzZSBLPXR0PWx0KnEoJCxjdCksZnQudGV4dD1KK3R0O2Z0LnRleHQrPXV0LHR0Kz11dCxLKz11dCxlWyJfIitldCsicGFkcGx1cyJdPWx0LzIrSyxlWyJfIitldCsicGFkbWludXMiXT1sdC8yLUssZVsiXyIrZXQrInNpemUiXT1sdCxlWyJfIitldCsic2hpZnQiXT10dH1pZihXKVIucmVtb3ZlKCk7ZWxzZXt2YXIgYnQ9MCxfdD0wO2lmKCJsZWZ0IiE9PWUuYWxpZ24mJihidD0oQS1iKSooImNlbnRlciI9PT1lLmFsaWduPy41OjEpKSwidG9wIiE9PWUudmFsaWduJiYoX3Q9KEQtXykqKCJtaWRkbGUiPT09ZS52YWxpZ24/LjU6MSkpLGYpbi5zZWxlY3QoInN2ZyIpLmF0dHIoe3g6TitidC0xLHk6TitfdH0pLmNhbGwodS5zZXRDbGlwVXJsLFU/TDpudWxsLHQpO2Vsc2V7dmFyIHd0PU4rX3QtbS50b3AsVHQ9TitidC1tLmxlZnQ7Ry5jYWxsKGgucG9zaXRpb25UZXh0LFR0LHd0KS5jYWxsKHUuc2V0Q2xpcFVybCxVP0w6bnVsbCx0KX1WLnNlbGVjdCgicmVjdCIpLmNhbGwodS5zZXRSZWN0LE4sTixBLEQpLGouY2FsbCh1LnNldFJlY3QsRi8yLEYvMixCLUYsSC1GKSxSLmNhbGwodS5zZXRUcmFuc2xhdGUsTWF0aC5yb3VuZChDLngudGV4dC1CLzIpLE1hdGgucm91bmQoQy55LnRleHQtSC8yKSksTy5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK1ArIiwiK0MueC50ZXh0KyIsIitDLnkudGV4dCsiKSJ9KTt2YXIga3QsQXQ9ZnVuY3Rpb24ocixuKXtJLnNlbGVjdEFsbCgiLmFubm90YXRpb24tYXJyb3ctZyIpLnJlbW92ZSgpO3ZhciBsPUMueC5oZWFkLGY9Qy55LmhlYWQsaD1DLngudGFpbCtyLHA9Qy55LnRhaWwrbixtPUMueC50ZXh0K3IsYj1DLnkudGV4dCtuLF89by5yb3RhdGlvblhZTWF0cml4KFAsbSxiKSx3PW8uYXBwbHkyRFRyYW5zZm9ybShfKSxBPW8uYXBwbHkyRFRyYW5zZm9ybTIoXyksTD0rai5hdHRyKCJ3aWR0aCIpLHo9K2ouYXR0cigiaGVpZ2h0IiksRD1tLS41KkwsRj1EK0wsQj1iLS41KnosTj1CK3osVT1bW0QsQixELE5dLFtELE4sRixOXSxbRixOLEYsQl0sW0YsQixELEJdXS5tYXAoQSk7aWYoIVUucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0XiEhby5zZWdtZW50c0ludGVyc2VjdChsLGYsbCsxZTYsZisxZTYsZVswXSxlWzFdLGVbMl0sZVszXSl9KSwhMSkpe1UuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9by5zZWdtZW50c0ludGVyc2VjdChoLHAsbCxmLHRbMF0sdFsxXSx0WzJdLHRbM10pO2UmJihoPWUueCxwPWUueSl9KSk7dmFyIFY9ZS5hcnJvd3dpZHRoLEg9ZS5hcnJvd2NvbG9yLHE9ZS5hcnJvd3NpZGUsRz1JLmFwcGVuZCgiZyIpLnN0eWxlKHtvcGFjaXR5OmMub3BhY2l0eShIKX0pLmNsYXNzZWQoImFubm90YXRpb24tYXJyb3ctZyIsITApLFk9Ry5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSIraCsiLCIrcCsiTCIrbCsiLCIrZikuc3R5bGUoInN0cm9rZS13aWR0aCIsVisicHgiKS5jYWxsKGMuc3Ryb2tlLGMucmdiKEgpKTtpZihnKFkscSxlKSxrLmFubm90YXRpb25Qb3NpdGlvbiYmWS5ub2RlKCkucGFyZW50Tm9kZSYmIWEpe3ZhciBXPWwsWD1mO2lmKGUuc3RhbmRvZmYpe3ZhciBaPU1hdGguc3FydChNYXRoLnBvdyhsLWgsMikrTWF0aC5wb3coZi1wLDIpKTtXKz1lLnN0YW5kb2ZmKihoLWwpL1osWCs9ZS5zdGFuZG9mZioocC1mKS9afXZhciBKLEssUT1HLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImFubm90YXRpb24tYXJyb3ciLCEwKS5jbGFzc2VkKCJhbm5kcmFnIiwhMCkuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEwKS5hdHRyKHtkOiJNMywzSC0zVi0zSDNaTTAsMEwiKyhoLVcpKyIsIisocC1YKSx0cmFuc2Zvcm06cyhXLFgpfSkuc3R5bGUoInN0cm9rZS13aWR0aCIsVis2KyJweCIpLmNhbGwoYy5zdHJva2UsInJnYmEoMCwwLDAsMCkiKS5jYWxsKGMuZmlsbCwicmdiYSgwLDAsMCwwKSIpO2QuaW5pdCh7ZWxlbWVudDpRLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe3ZhciB0PXUuZ2V0VHJhbnNsYXRlKFIpO0o9dC54LEs9dC55LHYmJnYuYXV0b3JhbmdlJiZNKHYuX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSx4JiZ4LmF1dG9yYW5nZSYmTSh4Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCl9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPXcoSixLKSxpPW5bMF0rdCxhPW5bMV0rcjtSLmNhbGwodS5zZXRUcmFuc2xhdGUsaSxhKSxTKCJ4Iix5KHYsdCwieCIsVCxlKSksUygieSIseSh4LHIsInkiLFQsZSkpLGUuYXhyZWY9PT1lLnhyZWYmJlMoImF4Iix5KHYsdCwiYXgiLFQsZSkpLGUuYXlyZWY9PT1lLnlyZWYmJlMoImF5Iix5KHgsciwiYXkiLFQsZSkpLEcuYXR0cigidHJhbnNmb3JtIixzKHQscikpLE8uYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitQKyIsIitpKyIsIithKyIpIn0pfSxkb25lRm46ZnVuY3Rpb24oKXtpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxFKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fTtpZihlLnNob3dhcnJvdyYmQXQoMCwwKSx6KWQuaW5pdCh7ZWxlbWVudDpSLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe2t0PU8uYXR0cigidHJhbnNmb3JtIil9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPSJwb2ludGVyIjtpZihlLnNob3dhcnJvdyllLmF4cmVmPT09ZS54cmVmP1MoImF4Iix5KHYsdCwiYXgiLFQsZSkpOlMoImF4IixlLmF4K3QpLGUuYXlyZWY9PT1lLnlyZWY/UygiYXkiLHkoeCxyLCJheSIsVC53LGUpKTpTKCJheSIsZS5heStyKSxBdCh0LHIpO2Vsc2V7aWYoYSlyZXR1cm47dmFyIGksbztpZih2KWk9eSh2LHQsIngiLFQsZSk7ZWxzZXt2YXIgbD1lLl94c2l6ZS9ULncsYz1lLngrKGUuX3hzaGlmdC1lLnhzaGlmdCkvVC53LWwvMjtpPWQuYWxpZ24oYyt0L1QudyxsLDAsMSxlLnhhbmNob3IpfWlmKHgpbz15KHgsciwieSIsVCxlKTtlbHNle3ZhciB1PWUuX3lzaXplL1QuaCxmPWUueS0oZS5feXNoaWZ0K2UueXNoaWZ0KS9ULmgtdS8yO289ZC5hbGlnbihmLXIvVC5oLHUsMCwxLGUueWFuY2hvcil9UygieCIsaSksUygieSIsbyksdiYmeHx8KG49ZC5nZXRDdXJzb3Iodj8uNTppLHg/LjU6byxlLnhhbmNob3IsZS55YW5jaG9yKSl9Ty5hdHRyKHt0cmFuc2Zvcm06cyh0LHIpK2t0fSkscChSLG4pfSxjbGlja0ZuOmZ1bmN0aW9uKHIsbil7ZS5jYXB0dXJlZXZlbnRzJiZ0LmVtaXQoInBsb3RseV9jbGlja2Fubm90YXRpb24iLFkobikpfSxkb25lRm46ZnVuY3Rpb24oKXtwKFIpLGkuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LEUoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmpzLW5vdGVzLWJveC1wYW5lbCIpO2UmJmUucmVkcmF3KGUuc2VsZWN0ZWRPYmopfX0pfX19ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24iKS5yZW1vdmUoKTtmb3IodmFyIHI9MDtyPGUuYW5ub3RhdGlvbnMubGVuZ3RoO3IrKyllLmFubm90YXRpb25zW3JdLnZpc2libGUmJnYodCxyKTtyZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxkcmF3T25lOnYsZHJhd1Jhdzp4fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3NldGN1cnNvciI6NTI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi8uLi9wbG90cy9wbG90cyI6NjE5LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9jb2xvciI6MzY2LCIuLi9kcmFnZWxlbWVudCI6Mzg1LCIuLi9kcmF3aW5nIjozODgsIi4uL2Z4Ijo0MDYsIi4vZHJhd19hcnJvd19oZWFkIjozNTYsIkBwbG90bHkvZDMiOjU4fV0sMzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuL2Fycm93X3BhdGhzIiksbz10KCIuLi8uLi9saWIiKSxzPW8uc3RyU2NhbGUsbD1vLnN0clJvdGF0ZSxjPW8uc3RyVHJhbnNsYXRlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8sdSxmLGgscD10Lm5vZGUoKSxkPWFbci5hcnJvd2hlYWR8fDBdLG09YVtyLnN0YXJ0YXJyb3doZWFkfHwwXSxnPShyLmFycm93d2lkdGh8fDEpKihyLmFycm93c2l6ZXx8MSksdj0oci5hcnJvd3dpZHRofHwxKSooci5zdGFydGFycm93c2l6ZXx8MSkseT1lLmluZGV4T2YoInN0YXJ0Iik+PTAseD1lLmluZGV4T2YoImVuZCIpPj0wLGI9ZC5iYWNrb2ZmKmcrci5zdGFuZG9mZixfPW0uYmFja29mZip2K3Iuc3RhcnRzdGFuZG9mZjtpZigibGluZSI9PT1wLm5vZGVOYW1lKXtvPXt4Oit0LmF0dHIoIngxIikseTordC5hdHRyKCJ5MSIpfSx1PXt4Oit0LmF0dHIoIngyIikseTordC5hdHRyKCJ5MiIpfTt2YXIgdz1vLngtdS54LFQ9by55LXUueTtpZihoPShmPU1hdGguYXRhbjIoVCx3KSkrTWF0aC5QSSxiJiZfJiZiK18+TWF0aC5zcXJ0KHcqdytUKlQpKXJldHVybiB2b2lkIHooKTtpZihiKXtpZihiKmI+dyp3K1QqVClyZXR1cm4gdm9pZCB6KCk7dmFyIGs9YipNYXRoLmNvcyhmKSxBPWIqTWF0aC5zaW4oZik7dS54Kz1rLHUueSs9QSx0LmF0dHIoe3gyOnUueCx5Mjp1Lnl9KX1pZihfKXtpZihfKl8+dyp3K1QqVClyZXR1cm4gdm9pZCB6KCk7dmFyIE09XypNYXRoLmNvcyhmKSxTPV8qTWF0aC5zaW4oZik7by54LT1NLG8ueS09Uyx0LmF0dHIoe3gxOm8ueCx5MTpvLnl9KX19ZWxzZSBpZigicGF0aCI9PT1wLm5vZGVOYW1lKXt2YXIgRT1wLmdldFRvdGFsTGVuZ3RoKCksTD0iIjtpZihFPGIrXylyZXR1cm4gdm9pZCB6KCk7dmFyIEM9cC5nZXRQb2ludEF0TGVuZ3RoKDApLFA9cC5nZXRQb2ludEF0TGVuZ3RoKC4xKTtmPU1hdGguYXRhbjIoQy55LVAueSxDLngtUC54KSxvPXAuZ2V0UG9pbnRBdExlbmd0aChNYXRoLm1pbihfLEUpKSxMPSIwcHgsIitfKyJweCwiO3ZhciBJPXAuZ2V0UG9pbnRBdExlbmd0aChFKSxPPXAuZ2V0UG9pbnRBdExlbmd0aChFLS4xKTtoPU1hdGguYXRhbjIoSS55LU8ueSxJLngtTy54KSx1PXAuZ2V0UG9pbnRBdExlbmd0aChNYXRoLm1heCgwLEUtYikpLEwrPUUtKEw/XytiOmIpKyJweCwiK0UrInB4Iix0LnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IixMKX1mdW5jdGlvbiB6KCl7dC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjBweCwxMDBweCIpfWZ1bmN0aW9uIEQoZSxhLG8sdSl7ZS5wYXRoJiYoZS5ub1JvdGF0ZSYmKG89MCksbi5zZWxlY3QocC5wYXJlbnROb2RlKS5hcHBlbmQoInBhdGgiKS5hdHRyKHtjbGFzczp0LmF0dHIoImNsYXNzIiksZDplLnBhdGgsdHJhbnNmb3JtOmMoYS54LGEueSkrbCgxODAqby9NYXRoLlBJKStzKHUpfSkuc3R5bGUoe2ZpbGw6aS5yZ2Ioci5hcnJvd2NvbG9yKSwic3Ryb2tlLXdpZHRoIjowfSkpfXkmJkQobSxvLGYsdikseCYmRChkLHUsaCxnKX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL2NvbG9yIjozNjYsIi4vYXJyb3dfcGF0aHMiOjM0OCwiQHBsb3RseS9kMyI6NTh9XSwzNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3IiksaT10KCIuL2NsaWNrIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImFubm90YXRpb25zIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJhbm5vdGF0aW9ucyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lLGRyYXdSYXc6bi5kcmF3UmF3LGhhc0NsaWNrVG9TaG93OmkuaGFzQ2xpY2tUb1Nob3csb25DbGljazppLm9uQ2xpY2ssY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjU2NywiLi9hdHRyaWJ1dGVzIjozNDksIi4vY2FsY19hdXRvcmFuZ2UiOjM1MCwiLi9jbGljayI6MzUxLCIuL2NvbnZlcnRfY29vcmRzIjozNTMsIi4vZGVmYXVsdHMiOjM1NCwiLi9kcmF3IjozNTV9XSwzNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1pKGEoImFubm90YXRpb24iLHt2aXNpYmxlOm4udmlzaWJsZSx4Ont2YWxUeXBlOiJhbnkifSx5Ont2YWxUeXBlOiJhbnkifSx6Ont2YWxUeXBlOiJhbnkifSxheDp7dmFsVHlwZToibnVtYmVyIn0sYXk6e3ZhbFR5cGU6Im51bWJlciJ9LHhhbmNob3I6bi54YW5jaG9yLHhzaGlmdDpuLnhzaGlmdCx5YW5jaG9yOm4ueWFuY2hvcix5c2hpZnQ6bi55c2hpZnQsdGV4dDpuLnRleHQsdGV4dGFuZ2xlOm4udGV4dGFuZ2xlLGZvbnQ6bi5mb250LHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LG9wYWNpdHk6bi5vcGFjaXR5LGFsaWduOm4uYWxpZ24sdmFsaWduOm4udmFsaWduLGJnY29sb3I6bi5iZ2NvbG9yLGJvcmRlcmNvbG9yOm4uYm9yZGVyY29sb3IsYm9yZGVycGFkOm4uYm9yZGVycGFkLGJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgsc2hvd2Fycm93Om4uc2hvd2Fycm93LGFycm93Y29sb3I6bi5hcnJvd2NvbG9yLGFycm93aGVhZDpuLmFycm93aGVhZCxzdGFydGFycm93aGVhZDpuLnN0YXJ0YXJyb3doZWFkLGFycm93c2lkZTpuLmFycm93c2lkZSxhcnJvd3NpemU6bi5hcnJvd3NpemUsc3RhcnRhcnJvd3NpemU6bi5zdGFydGFycm93c2l6ZSxhcnJvd3dpZHRoOm4uYXJyb3d3aWR0aCxzdGFuZG9mZjpuLnN0YW5kb2ZmLHN0YXJ0c3RhbmRvZmY6bi5zdGFydHN0YW5kb2ZmLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcmxhYmVsOm4uaG92ZXJsYWJlbCxjYXB0dXJlZXZlbnRzOm4uY2FwdHVyZWV2ZW50c30pLCJjYWxjIiwiZnJvbS1yb290Iil9LHsiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTM2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjM0OX1dLDM1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWUuZnVsbFNjZW5lTGF5b3V0LmRvbWFpbixhPWUuZnVsbExheW91dC5fc2l6ZSxvPXtwZGF0YTpudWxsLHR5cGU6ImxpbmVhciIsYXV0b3JhbmdlOiExLHJhbmdlOlstMS8wLDEvMF19O3QuX3hhPXt9LG4uZXh0ZW5kRmxhdCh0Ll94YSxvKSxpLnNldENvbnZlcnQodC5feGEpLHQuX3hhLl9vZmZzZXQ9YS5sK3IueFswXSphLncsdC5feGEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDErdC5fcGRhdGFbMF0vdC5fcGRhdGFbM10pKmEudyooci54WzFdLXIueFswXSl9LHQuX3lhPXt9LG4uZXh0ZW5kRmxhdCh0Ll95YSxvKSxpLnNldENvbnZlcnQodC5feWEpLHQuX3lhLl9vZmZzZXQ9YS50KygxLXIueVsxXSkqYS5oLHQuX3lhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxLXQuX3BkYXRhWzFdL3QuX3BkYXRhWzNdKSphLmgqKHIueVsxXS1yLnlbMF0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKylhKGVbcl0sdCk7dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK3QuaWQpLnJlbW92ZSgpfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NH1dLDM2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscixhKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9ZnVuY3Rpb24gYyh0KXt2YXIgbj10KyJheGlzIixhPXtfZnVsbExheW91dDp7fX07cmV0dXJuIGEuX2Z1bGxMYXlvdXRbbl09cltuXSxpLmNvZXJjZVBvc2l0aW9uKGUsYSxsLHQsdCwuNSl9bCgidmlzaWJsZSIpJiYobyh0LGUsYS5mdWxsTGF5b3V0LGwpLGMoIngiKSxjKCJ5IiksYygieiIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5IiwieiJdKSxlLnhyZWY9IngiLGUueXJlZj0ieSIsZS56cmVmPSJ6IixsKCJ4YW5jaG9yIiksbCgieWFuY2hvciIpLGwoInhzaGlmdCIpLGwoInlzaGlmdCIpLGUuc2hvd2Fycm93JiYoZS5heHJlZj0icGl4ZWwiLGUuYXlyZWY9InBpeGVsIixsKCJheCIsLTEwKSxsKCJheSIsLTMwKSxuLm5vbmVPckFsbCh0LGUsWyJheCIsImF5Il0pKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXthKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsLGZ1bGxMYXlvdXQ6ci5mdWxsTGF5b3V0fSl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIjozNTIsIi4vYXR0cmlidXRlcyI6MzU4fV0sMzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2RyYXciKS5kcmF3UmF3LGk9dCgiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0IiksYT1bIngiLCJ5IiwieiJdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj10LmRhdGFTY2FsZSxvPWUuYW5ub3RhdGlvbnMscz0wO3M8by5sZW5ndGg7cysrKXtmb3IodmFyIGw9b1tzXSxjPSExLHU9MDt1PDM7dSsrKXt2YXIgZj1hW3VdLGg9bFtmXSxwPWVbZisiYXhpcyJdLnIyZnJhY3Rpb24oaCk7aWYocDwwfHxwPjEpe2M9ITA7YnJlYWt9fWM/dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi0iK3QuaWQrJ1tkYXRhLWluZGV4PSInK3MrJyJdJykucmVtb3ZlKCk6KGwuX3BkYXRhPWkodC5nbHBsb3QuY2FtZXJhUGFyYW1zLFtlLnhheGlzLnIybChsLngpKnJbMF0sZS55YXhpcy5yMmwobC55KSpyWzFdLGUuemF4aXMucjJsKGwueikqclsyXV0pLG4odC5ncmFwaERpdixsLHMsdC5pZCxsLl94YSxsLl95YSkpfX19LHsiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0Ijo2MDcsIi4uL2Fubm90YXRpb25zL2RyYXciOjM1NX1dLDM2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImFubm90YXRpb25zM2QiLHNjaGVtYTp7c3VicGxvdHM6e3NjZW5lOnthbm5vdGF0aW9uczp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1uLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZDtpZighcilyZXR1cm47Zm9yKHZhciBhPXIuYXR0clJlZ2V4LG89T2JqZWN0LmtleXModCkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2EudGVzdChsKSYmKHRbbF0uYW5ub3RhdGlvbnN8fFtdKS5sZW5ndGgmJihpLnB1c2hVbmlxdWUoZS5fYmFzZVBsb3RNb2R1bGVzLHIpLGkucHVzaFVuaXF1ZShlLl9zdWJwbG90cy5nbDNkLGwpKX19LGNvbnZlcnQ6dCgiLi9jb252ZXJ0IiksZHJhdzp0KCIuL2RyYXciKX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vYXR0cmlidXRlcyI6MzU4LCIuL2NvbnZlcnQiOjM1OSwiLi9kZWZhdWx0cyI6MzYwLCIuL2RyYXciOjM2MX1dLDM2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXciKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmEiKX0seyJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSI6MzMyLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIjozMzMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGQiOjMzNCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiI6MzM1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IjozMzYsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljIjozMzcsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iOjMzOCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIjozMzksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpIjozNDAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiOjM0MSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iOjM0Miwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhbiI6MzQzLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSI6MzQ0LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIjozNDUsIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iOjM0Niwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1cyI6MzQ3fV0sMzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2FsZW5kYXJzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxvPWEuRVBPQ0hKRCxzPWEuT05FREFZLGw9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczppLnNvcnRPYmplY3RLZXlzKG4uY2FsZW5kYXJzKSxlZGl0VHlwZToiY2FsYyIsZGZsdDoiZ3JlZ29yaWFuIn0sYz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT17fTtyZXR1cm4gYVtyXT1sLGkuY29lcmNlKHQsZSxhLHIsbil9LHU9e2Q6ezA6ImRkIiwiLSI6ImQifSxlOnswOiJkIiwiLSI6ImQifSxhOnswOiJEIiwiLSI6IkQifSxBOnswOiJERCIsIi0iOiJERCJ9LGo6ezA6Im9vIiwiLSI6Im8ifSxXOnswOiJ3dyIsIi0iOiJ3In0sbTp7MDoibW0iLCItIjoibSJ9LGI6ezA6Ik0iLCItIjoiTSJ9LEI6ezA6Ik1NIiwiLSI6Ik1NIn0seTp7MDoieXkiLCItIjoieXkifSxZOnswOiJ5eXl5IiwiLSI6Inl5eXkifSxVOiIjIyIsdzoiIyMiLGM6ezA6IkQgTSBkICVYIHl5eXkiLCItIjoiRCBNIGQgJVggeXl5eSJ9LHg6ezA6Im1tL2RkL3l5eXkiLCItIjoibW0vZGQveXl5eSJ9fTt2YXIgZj17fTtmdW5jdGlvbiBoKHQpe3ZhciBlPWZbdF07cmV0dXJuIGV8fChlPWZbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBkKHQpe3JldHVybiJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIHdpdGggYCIrdCsiYCBkYXRlIGRhdGEuIn12YXIgbT17eGNhbGVuZGFyOnAoZCgieCIpKX0sZz1pLmV4dGVuZEZsYXQoe30sbSx7eWNhbGVuZGFyOnAoZCgieSIpKX0pLHY9aS5leHRlbmRGbGF0KHt9LGcse3pjYWxlbmRhcjpwKGQoInoiKSl9KSx5PXAoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6ZyxiYXI6Zyxib3g6ZyxoZWF0bWFwOmcsY29udG91cjpnLGhpc3RvZ3JhbTpnLGhpc3RvZ3JhbTJkOmcsaGlzdG9ncmFtMmRjb250b3VyOmcsc2NhdHRlcjNkOnYsc3VyZmFjZTp2LG1lc2gzZDp2LHNjYXR0ZXJnbDpnLG9obGM6bSxjYW5kbGVzdGljazptfSxsYXlvdXQ6e2NhbGVuZGFyOnAoWyJTZXRzIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGludGVycHJldGluZyBhbmQiLCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuIl0uam9pbigiICIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0semF4aXM6e2NhbGVuZGFyOnl9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eX19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6cChbIldBUk5JTkc6IEFsbCB0cmFuc2Zvcm1zIGFyZSBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBmcm9tIHRoZSBBUEkgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLiIsIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB2YWx1ZWAsIGlmIGl0IGlzIGEgZGF0ZS4iXS5qb2luKCIgIikpLHRhcmdldGNhbGVuZGFyOnAoWyJXQVJOSU5HOiBBbGwgdHJhbnNmb3JtcyBhcmUgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgZnJvbSB0aGUgQVBJIGluIG5leHQgbWFqb3IgdmVyc2lvbi4iLCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW4iLCJhcnJheSBvZiBkYXRlcy4gSWYgYHRhcmdldGAgaXMgYSBzdHJpbmcgKGVnICp4Kikgd2UgdXNlIHRoZSIsImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLCIsImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC4iXS5qb2luKCIgIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxDQU5PTklDQUxfU1VOREFZOntjaGluZXNlOiIyMDAwLTAxLTAyIixjb3B0aWM6IjIwMDAtMDEtMDMiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMyIsZXRoaW9waWFuOiIyMDAwLTAxLTA1IixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDIiLGp1bGlhbjoiMjAwMC0wMS0wMyIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDUiLG5lcGFsaToiMjAwMC0wMS0wNSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDQiLHRoYWk6IjIwMDAtMDEtMDQiLHVtbWFscXVyYToiMTQwMC0wMS0wNiJ9LENBTk9OSUNBTF9USUNLOntjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LERGTFRSQU5HRTp7Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSxnZXRDYWw6aCx3b3JsZENhbEZtdDpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYSxsLGMsZj1NYXRoLmZsb29yKChlKy4wNSkvcykrbyxwPWgocikuZnJvbUpEKGYpLGQ9MDstMSE9PShkPXQuaW5kZXhPZigiJSIsZCkpOykiMCI9PT0obj10LmNoYXJBdChkKzEpKXx8Ii0iPT09bnx8Il8iPT09bj8oYT0zLGk9dC5jaGFyQXQoZCsyKSwiXyI9PT1uJiYobj0iLSIpKTooaT1uLG49IjAiLGE9MiksKGw9dVtpXSk/KGM9IiMjIj09PWw/IiMjIjpwLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGQpK2MrdC5zdWJzdHIoZCthKSxkKz1jLmxlbmd0aCk6ZCs9YTtyZXR1cm4gdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4vY2FsZW5kYXJzIjozNjN9XSwzNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSwzNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYi9hcnJheSIpLmlzVHlwZWRBcnJheSxvPWUuZXhwb3J0cz17fSxzPXQoIi4vYXR0cmlidXRlcyIpO28uZGVmYXVsdHM9cy5kZWZhdWx0czt2YXIgbD1vLmRlZmF1bHRMaW5lPXMuZGVmYXVsdExpbmU7by5saWdodExpbmU9cy5saWdodExpbmU7dmFyIGM9by5iYWNrZ3JvdW5kPXMuYmFja2dyb3VuZDtmdW5jdGlvbiB1KHQpe2lmKGkodCl8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LnRyaW0oKTtpZigicmdiIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XHMqXCgoW14oKV0qKVwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pLGE9ImEiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMV0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/InJnYmEoIitzKyIsICIrblszXSsiKSI6InJnYigiK3MrIikifW8udGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LG8ucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBvLnRpbnlSR0Iobih0KSl9LG8ub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sby5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LG8uY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBuKHQpLnRvUmdiU3RyaW5nKCk7dmFyIGk9bihlfHxjKS50b1JnYigpLGE9MT09PWkuYT9pOntyOjI1NSooMS1pLmEpK2kucippLmEsZzoyNTUqKDEtaS5hKStpLmcqaS5hLGI6MjU1KigxLWkuYSkraS5iKmkuYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBuKG8pLnRvUmdiU3RyaW5nKCl9LG8uY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4odCk7cmV0dXJuIDEhPT1pLmdldEFscGhhKCkmJihpPW4oby5jb21iaW5lKHQsYykpKSwoaS5pc0RhcmsoKT9lP2kubGlnaHRlbihlKTpjOnI/aS5kYXJrZW4ocik6bCkudG9TdHJpbmcoKX0sby5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe3N0cm9rZTpvLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOm8udGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsbixpLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylpZihpPXRbbj1zW2VdXSwiY29sb3IiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09dShpW3JdKTtlbHNlIHRbbl09dShpKTtlbHNlIGlmKCJjb2xvcnNjYWxlIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPXUoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIGw9aVswXTtpZighQXJyYXkuaXNBcnJheShsKSYmbCYmIm9iamVjdCI9PXR5cGVvZiBsKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspby5jbGVhbihpW3JdKX1lbHNlIGkmJiJvYmplY3QiPT10eXBlb2YgaSYmIWEoaSkmJm8uY2xlYW4oaSl9fX0seyIuLi8uLi9saWIvYXJyYXkiOjQ4NSwiLi9hdHRyaWJ1dGVzIjozNjUsImZhc3QtaXNudW1lcmljIjoxOTAsdGlueWNvbG9yMjozMTJ9XSwzNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz1vKHtvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaCIsInYiXSxkZmx0OiJ2In0sdGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXX0seHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl19LHlwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0sb3V0bGluZWNvbG9yOm4ubGluZWNvbG9yLG91dGxpbmV3aWR0aDpuLmxpbmV3aWR0aCxib3JkZXJjb2xvcjpuLmxpbmVjb2xvcixib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIn0sdGlja21vZGU6bi50aWNrbW9kZSxudGlja3M6bi5udGlja3MsdGljazA6bi50aWNrMCxkdGljazpuLmR0aWNrLHRpY2t2YWxzOm4udGlja3ZhbHMsdGlja3RleHQ6bi50aWNrdGV4dCx0aWNrczphKHt9LG4udGlja3Mse2RmbHQ6IiJ9KSx0aWNrbGFiZWxvdmVyZmxvdzphKHt9LG4udGlja2xhYmVsb3ZlcmZsb3cse30pLHRpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBsZWZ0IiwiaW5zaWRlIGxlZnQiLCJvdXRzaWRlIHJpZ2h0IiwiaW5zaWRlIHJpZ2h0Iiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl0sZGZsdDoib3V0c2lkZSJ9LHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDppKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6bi5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6aSh7fSksc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXX19LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIn0sdGl0bGVmb250Omkoe30pLHRpdGxlc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX19LCJjb2xvcmJhcnMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjksIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1fV0sMzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y246e2NvbG9yYmFyOiJjb2xvcmJhciIsY2JiZzoiY2JiZyIsY2JmaWxsOiJjYmZpbGwiLGNiZmlsbHM6ImNiZmlsbHMiLGNibGluZToiY2JsaW5lIixjYmxpbmVzOiJjYmxpbmVzIixjYmF4aXM6ImNiYXhpcyIsY2J0aXRsZXVuc2hpZnQ6ImNidGl0bGV1bnNoaWZ0IixjYnRpdGxlOiJjYnRpdGxlIixjYm91dGxpbmU6ImNib3V0bGluZSIsY3Jpc3A6ImNyaXNwIixqc1BsYWNlaG9sZGVyOiJqcy1wbGFjZWhvbGRlciJ9fX0se31dLDM2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHU9aS5uZXdDb250YWluZXIoZSwiY29sb3JiYXIiKSxmPXQuY29sb3JiYXJ8fHt9O2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gbi5jb2VyY2UoZix1LGMsdCxlKX12YXIgcD1yLm1hcmdpbnx8e3Q6MCxiOjAsbDowLHI6MH0sZD1yLndpZHRoLXAubC1wLnIsbT1yLmhlaWdodC1wLnQtcC5iLGc9InYiPT09aCgib3JpZW50YXRpb24iKSx2PWgoInRoaWNrbmVzc21vZGUiKTtoKCJ0aGlja25lc3MiLCJmcmFjdGlvbiI9PT12PzMwLyhnP2Q6bSk6MzApO3ZhciB5PWgoImxlbm1vZGUiKTtoKCJsZW4iLCJmcmFjdGlvbiI9PT15PzE6Zz9tOmQpLGgoIngiLGc/MS4wMjouNSksaCgieGFuY2hvciIsZz8ibGVmdCI6ImNlbnRlciIpLGgoInhwYWQiKSxoKCJ5IixnPy41OjEuMDIpLGgoInlhbmNob3IiLGc/Im1pZGRsZSI6ImJvdHRvbSIpLGgoInlwYWQiKSxuLm5vbmVPckFsbChmLHUsWyJ4IiwieSJdKSxoKCJvdXRsaW5lY29sb3IiKSxoKCJvdXRsaW5ld2lkdGgiKSxoKCJib3JkZXJjb2xvciIpLGgoImJvcmRlcndpZHRoIiksaCgiYmdjb2xvciIpO3ZhciB4PW4uY29lcmNlKGYsdSx7dGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6Im91dHNpZGUiLHZhbHVlczpnP1sib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCJdfX0sInRpY2tsYWJlbHBvc2l0aW9uIik7aCgidGlja2xhYmVsb3ZlcmZsb3ciLC0xIT09eC5pbmRleE9mKCJpbnNpZGUiKT8iaGlkZSBwYXN0IGRvbWFpbiI6ImhpZGUgcGFzdCBkaXYiKSxhKGYsdSxoLCJsaW5lYXIiKTt2YXIgYj1yLmZvbnQsXz17b3V0ZXJUaWNrczohMSxmb250OmJ9Oy0xIT09eC5pbmRleE9mKCJpbnNpZGUiKSYmKF8uYmdDb2xvcj0iYmxhY2siKSxsKGYsdSxoLCJsaW5lYXIiLF8pLHMoZix1LGgsImxpbmVhciIsXyksbyhmLHUsaCwibGluZWFyIixfKSxoKCJ0aXRsZS50ZXh0IixyLl9kZmx0VGl0bGUuY29sb3JiYXIpO3ZhciB3PXUudGlja2ZvbnQsVD1uLmV4dGVuZEZsYXQoe30sdyx7Y29sb3I6Yi5jb2xvcixzaXplOm4uYmlnRm9udCh3LnNpemUpfSk7bi5jb2VyY2VGb250KGgsInRpdGxlLmZvbnQiLFQpLGgoInRpdGxlLnNpZGUiLGc/InRvcCI6InJpZ2h0Iil9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIjo1NzMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo1NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjU3OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjU4MCwiLi9hdHRyaWJ1dGVzIjozNjd9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL2xpYiIpLHU9Yy5zdHJUcmFuc2xhdGUsZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxoPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxwPXQoIi4uL2RyYXdpbmciKSxkPXQoIi4uL2NvbG9yIiksbT10KCIuLi90aXRsZXMiKSxnPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHY9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZmxpcFNjYWxlLHk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyIpLGI9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksXz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdz1fLkxJTkVfU1BBQ0lORyxUPV8uRlJPTV9UTCxrPV8uRlJPTV9CUixBPXQoIi4vY29uc3RhbnRzIikuY247ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitBLmNvbG9yYmFyKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dC5fZnVsbExheW91dCxvPXQuY2FsY2RhdGEscz1bXTtmdW5jdGlvbiBsKHQpe3JldHVybiBmKHQse19maWxsY29sb3I6bnVsbCxfbGluZTp7Y29sb3I6bnVsbCx3aWR0aDpudWxsLGRhc2g6bnVsbH0sX2xldmVsczp7c3RhcnQ6bnVsbCxlbmQ6bnVsbCxzaXplOm51bGx9LF9maWxsbGV2ZWxzOm51bGwsX2ZpbGxncmFkaWVudDpudWxsLF96cmFuZ2U6bnVsbH0pfWZ1bmN0aW9uIGMoKXsiZnVuY3Rpb24iPT10eXBlb2YgaS5jYWxjP2kuY2FsYyh0LG4sZSk6KGUuX2ZpbGxncmFkaWVudD1yLnJldmVyc2VzY2FsZT92KHIuY29sb3JzY2FsZSk6ci5jb2xvcnNjYWxlLGUuX3pyYW5nZT1bcltpLm1pbl0scltpLm1heF1dKX1mb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGg9b1t1XSxwPShuPWhbMF0udHJhY2UpLl9tb2R1bGUuY29sb3JiYXI7aWYoITA9PT1uLnZpc2libGUmJnApZm9yKHZhciBkPUFycmF5LmlzQXJyYXkocCksbT1kP3A6W3BdLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9KGk9bVtnXSkuY29udGFpbmVyOyhyPXk/blt5XTpuKSYmci5zaG93c2NhbGUmJigoZT1sKHIuY29sb3JiYXIpKS5faWQ9ImNiIituLnVpZCsoZCYmeT8iLSIreToiIiksZS5fdHJhY2VJbmRleD1uLmluZGV4LGUuX3Byb3BQcmVmaXg9KHk/eSsiLiI6IiIpKyJjb2xvcmJhci4iLGUuX21ldGE9bi5fbWV0YSxjKCkscy5wdXNoKGUpKX19Zm9yKHZhciB4IGluIGEuX2NvbG9yQXhlcylpZigocj1hW3hdKS5zaG93c2NhbGUpe3ZhciBiPWEuX2NvbG9yQXhlc1t4XTsoZT1sKHIuY29sb3JiYXIpKS5faWQ9ImNiIit4LGUuX3Byb3BQcmVmaXg9eCsiLmNvbG9yYmFyLiIsZS5fbWV0YT1hLl9tZXRhLGk9e21pbjoiY21pbiIsbWF4OiJjbWF4In0sImhlYXRtYXAiIT09YlswXSYmKG49YlsxXSxpLmNhbGM9bi5fbW9kdWxlLmNvbG9yYmFyLmNhbGMpLGMoKSxzLnB1c2goZSl9cmV0dXJuIHN9KHQpLChmdW5jdGlvbih0KXtyZXR1cm4gdC5faWR9KSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpLmNsYXNzZWQoQS5jb2xvcmJhciwhMCksZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtjLmVuc3VyZVNpbmdsZShyLCJyZWN0IixBLmNiYmcpLGMuZW5zdXJlU2luZ2xlKHIsImciLEEuY2JmaWxscyksYy5lbnN1cmVTaW5nbGUociwiZyIsQS5jYmxpbmVzKSxjLmVuc3VyZVNpbmdsZShyLCJnIixBLmNiYXhpcywoZnVuY3Rpb24odCl7dC5jbGFzc2VkKEEuY3Jpc3AsITApfSkpLGMuZW5zdXJlU2luZ2xlKHIsImciLEEuY2J0aXRsZXVuc2hpZnQsKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJnIikuY2xhc3NlZChBLmNidGl0bGUsITApfSkpLGMuZW5zdXJlU2luZ2xlKHIsInJlY3QiLEEuY2JvdXRsaW5lKTt2YXIgdj1mdW5jdGlvbih0LGUscil7dmFyIG89InYiPT09ZS5vcmllbnRhdGlvbixsPWUubGVuLGg9ZS5sZW5tb2RlLHY9ZS50aGlja25lc3MsXz1lLnRoaWNrbmVzc21vZGUsTT1lLm91dGxpbmV3aWR0aCxTPWUuYm9yZGVyd2lkdGgsRT1lLmJnY29sb3IsTD1lLnhhbmNob3IsQz1lLnlhbmNob3IsUD1lLnhwYWQsST1lLnlwYWQsTz1lLngsej1vP2UueToxLWUueSxEPXIuX2Z1bGxMYXlvdXQsUj1ELl9zaXplLEY9ZS5fZmlsbGNvbG9yLEI9ZS5fbGluZSxOPWUudGl0bGUsaj1OLnNpZGUsVT1lLl96cmFuZ2V8fG4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgRj9GOkIuY29sb3IpLmRvbWFpbigpKSxWPSJmdW5jdGlvbiI9PXR5cGVvZiBCLmNvbG9yP0IuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gQi5jb2xvcn0sSD0iZnVuY3Rpb24iPT10eXBlb2YgRj9GOmZ1bmN0aW9uKCl7cmV0dXJuIEZ9LHE9ZS5fbGV2ZWxzLEc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLl9sZXZlbHMsbz1bXSxzPVtdLGw9YS5lbmQrYS5zaXplLzEwMCxjPWEuc2l6ZSx1PTEuMDAxKnJbMF0tLjAwMSpyWzFdLGY9MS4wMDEqclsxXS0uMDAxKnJbMF07Zm9yKGk9MDtpPDFlNSYmKG49YS5zdGFydCtpKmMsIShjPjA/bj49bDpuPD1sKSk7aSsrKW4+dSYmbjxmJiZvLnB1c2gobik7aWYoZS5fZmlsbGdyYWRpZW50KXM9WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuX2ZpbGxjb2xvcil7dmFyIGg9ZS5fZmlsbGxldmVscztpZihoKWZvcihsPWguZW5kK2guc2l6ZS8xMDAsYz1oLnNpemUsaT0wO2k8MWU1JiYobj1oLnN0YXJ0K2kqYywhKGM+MD9uPj1sOm48PWwpKTtpKyspbj5yWzBdJiZuPHJbMV0mJnMucHVzaChuKTtlbHNlKHM9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LWEuc2l6ZS8yfSkpKS5wdXNoKHNbcy5sZW5ndGgtMV0rYS5zaXplKX1lbHNlIGUuX2ZpbGxjb2xvciYmInN0cmluZyI9PXR5cGVvZiBlLl9maWxsY29sb3ImJihzPVswXSk7YS5zaXplPDAmJihvLnJldmVyc2UoKSxzLnJldmVyc2UoKSk7cmV0dXJue2xpbmU6byxmaWxsOnN9fSgwLGUsVSksWT1HLmZpbGwsVz1HLmxpbmUsWD1NYXRoLnJvdW5kKHYqKCJmcmFjdGlvbiI9PT1fP28/Ui53OlIuaDoxKSksWj1YLyhvP1IudzpSLmgpLEo9TWF0aC5yb3VuZChsKigiZnJhY3Rpb24iPT09aD9vP1IuaDpSLnc6MSkpLEs9Si8obz9SLmg6Ui53KSxRPU1hdGgucm91bmQobz9PKlIudytQOnoqUi5oK0kpLCQ9e2NlbnRlcjouNSxyaWdodDoxfVtMXXx8MCx0dD17dG9wOjEsbWlkZGxlOi41fVtDXXx8MCxldD1vP08tJCpaOnotdHQqWixydD1vP3otdHQqSzpPLSQqSyxudD1NYXRoLnJvdW5kKG8/Ui5oKigxLXJ0KTpSLncqcnQpO2UuX2xlbkZyYWM9SyxlLl90aGlja0ZyYWM9WixlLl91RnJhYz1ldCxlLl92RnJhYz1ydDt2YXIgaXQ9ZS5fYXhpcz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPSJ2Ij09PWUub3JpZW50YXRpb24sYT17dHlwZToibGluZWFyIixyYW5nZTpyLHRpY2ttb2RlOmUudGlja21vZGUsbnRpY2tzOmUubnRpY2tzLHRpY2swOmUudGljazAsZHRpY2s6ZS5kdGljayx0aWNrdmFsczplLnRpY2t2YWxzLHRpY2t0ZXh0OmUudGlja3RleHQsdGlja3M6ZS50aWNrcyx0aWNrbGVuOmUudGlja2xlbix0aWNrd2lkdGg6ZS50aWNrd2lkdGgsdGlja2NvbG9yOmUudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmUuc2hvd3RpY2tsYWJlbHMsdGlja2xhYmVscG9zaXRpb246ZS50aWNrbGFiZWxwb3NpdGlvbix0aWNrbGFiZWxvdmVyZmxvdzplLnRpY2tsYWJlbG92ZXJmbG93LHRpY2tmb250OmUudGlja2ZvbnQsdGlja2FuZ2xlOmUudGlja2FuZ2xlLHRpY2tmb3JtYXQ6ZS50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0OmUuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6ZS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczplLnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDplLnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDplLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6ZS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OmUuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDplLnRpY2tzdWZmaXgsdGl0bGU6ZS50aXRsZSxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHNpZGU6aT8icmlnaHQiOiJib3R0b20iLHBvc2l0aW9uOjF9LG89aT8ieSI6IngiLHM9e3R5cGU6ImxpbmVhciIsX2lkOm8rZS5faWR9LGw9e2xldHRlcjpvLGZvbnQ6bi5mb250LG5vSG92ZXI6ITAsbm9UaWNrc29uOiEwLG5vVGlja2xhYmVsbW9kZTohMCxjYWxlbmRhcjpuLmNhbGVuZGFyfTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGMuY29lcmNlKGEscyxiLHQsZSl9cmV0dXJuIHkoYSxzLHUsbCxuKSx4KGEscyx1LGwpLHN9KHIsZSxVKTtpdC5wb3NpdGlvbj1aKyhvP08rUC9SLnc6eitJL1IuaCk7dmFyIGF0PS0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKGopO28mJmF0JiYoaXQudGl0bGUuc2lkZT1qLGl0LnRpdGxleD1PK1AvUi53LGl0LnRpdGxleT1ydCsoInRvcCI9PT1OLnNpZGU/Sy1JL1IuaDpJL1IuaCkpO298fGF0fHwoaXQudGl0bGUuc2lkZT1qLGl0LnRpdGxleT16K0kvUi5oLGl0LnRpdGxleD1ydCtQL1Iudyk7aWYoQi5jb2xvciYmImF1dG8iPT09ZS50aWNrbW9kZSl7aXQudGlja21vZGU9ImxpbmVhciIsaXQudGljazA9cS5zdGFydDt2YXIgb3Q9cS5zaXplLHN0PWMuY29uc3RyYWluKEovNTAsNCwxNSkrMSxsdD0oVVsxXS1VWzBdKS8oKGUubnRpY2tzfHxzdCkqb3QpO2lmKGx0PjEpe3ZhciBjdD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGx0KS9NYXRoLkxOMTApKTtvdCo9Y3QqYy5yb3VuZFVwKGx0L2N0LFsyLDUsMTBdKSwoTWF0aC5hYnMocS5zdGFydCkvcS5zaXplKzFlLTYpJTE8MmUtNiYmKGl0LnRpY2swPTApfWl0LmR0aWNrPW90fWl0LmRvbWFpbj1vP1tydCtJL1IuaCxydCtLLUkvUi5oXTpbcnQrUC9SLncscnQrSy1QL1Iud10saXQuc2V0U2NhbGUoKSx0LmF0dHIoInRyYW5zZm9ybSIsdShNYXRoLnJvdW5kKFIubCksTWF0aC5yb3VuZChSLnQpKSk7dmFyIHV0LGZ0PXQuc2VsZWN0KCIuIitBLmNidGl0bGV1bnNoaWZ0KS5hdHRyKCJ0cmFuc2Zvcm0iLHUoLU1hdGgucm91bmQoUi5sKSwtTWF0aC5yb3VuZChSLnQpKSksaHQ9aXQudGlja2xhYmVscG9zaXRpb24scHQ9aXQudGl0bGUuZm9udC5zaXplLGR0PXQuc2VsZWN0KCIuIitBLmNiYXhpcyksbXQ9MCxndD0wO2Z1bmN0aW9uIHZ0KG4saSl7dmFyIGE9e3Byb3BDb250YWluZXI6aXQscHJvcE5hbWU6ZS5fcHJvcFByZWZpeCsidGl0bGUiLHRyYWNlSW5kZXg6ZS5fdHJhY2VJbmRleCxfbWV0YTplLl9tZXRhLHBsYWNlaG9sZGVyOkQuX2RmbHRUaXRsZS5jb2xvcmJhcixjb250YWluZXJHcm91cDp0LnNlbGVjdCgiLiIrQS5jYnRpdGxlKX0sbz0iaCI9PT1uLmNoYXJBdCgwKT9uLnN1YnN0cigxKToiaCIrbjt0LnNlbGVjdEFsbCgiLiIrbysiLC4iK28rIi1tYXRoLWdyb3VwIikucmVtb3ZlKCksbS5kcmF3KHIsbixmKGEsaXx8e30pKX1yZXR1cm4gYy5zeW5jT3JBc3luYyhbYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIHQsZTsobyYmYXR8fCFvJiYhYXQpJiYoInRvcCI9PT1qJiYodD1QK1IubCtSLncqTyxlPUkrUi50K1IuaCooMS1ydC1LKSszKy43NSpwdCksImJvdHRvbSI9PT1qJiYodD1QK1IubCtSLncqTyxlPUkrUi50K1IuaCooMS1ydCktMy0uMjUqcHQpLCJyaWdodCI9PT1qJiYoZT1JK1IudCtSLmgqeiszKy43NSpwdCx0PVArUi5sK1IudypydCksdnQoaXQuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6dCx5OmUsInRleHQtYW5jaG9yIjpvPyJzdGFydCI6Im1pZGRsZSJ9fSkpfSxmdW5jdGlvbigpe2lmKCFvJiYhYXR8fG8mJmF0KXt2YXIgYSxsPXQuc2VsZWN0KCIuIitBLmNidGl0bGUpLGY9bC5zZWxlY3QoInRleHQiKSxoPVstTS8yLE0vMl0sZD1sLnNlbGVjdCgiLmgiK2l0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxtPTE1LjY7aWYoZi5ub2RlKCkmJihtPXBhcnNlSW50KGYubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSp3KSxkPyhhPXAuYkJveChkKSxndD1hLndpZHRoLChtdD1hLmhlaWdodCk+bSYmKGhbMV0tPShtdC1tKS8yKSk6Zi5ub2RlKCkmJiFmLmNsYXNzZWQoQS5qc1BsYWNlaG9sZGVyKSYmKGE9cC5iQm94KGYubm9kZSgpKSxndD1hLndpZHRoLG10PWEuaGVpZ2h0KSxvKXtpZihtdCl7aWYobXQrPTUsInRvcCI9PT1qKWl0LmRvbWFpblsxXS09bXQvUi5oLGhbMV0qPS0xO2Vsc2V7aXQuZG9tYWluWzBdKz1tdC9SLmg7dmFyIHY9Zy5saW5lQ291bnQoZik7aFsxXSs9KDEtdikqbX1sLmF0dHIoInRyYW5zZm9ybSIsdShoWzBdLGhbMV0pKSxpdC5zZXRTY2FsZSgpfX1lbHNlIGd0JiYoInJpZ2h0Ij09PWomJihpdC5kb21haW5bMF0rPShndCtwdC8yKS9SLncpLGwuYXR0cigidHJhbnNmb3JtIix1KGhbMF0saFsxXSkpLGl0LnNldFNjYWxlKCkpfXQuc2VsZWN0QWxsKCIuIitBLmNiZmlsbHMrIiwuIitBLmNibGluZXMpLmF0dHIoInRyYW5zZm9ybSIsbz91KDAsTWF0aC5yb3VuZChSLmgqKDEtaXQuZG9tYWluWzFdKSkpOnUoTWF0aC5yb3VuZChSLncqaXQuZG9tYWluWzBdKSwwKSksZHQuYXR0cigidHJhbnNmb3JtIixvP3UoMCxNYXRoLnJvdW5kKC1SLnQpKTp1KE1hdGgucm91bmQoLVIubCksMCkpO3ZhciB5PXQuc2VsZWN0KCIuIitBLmNiZmlsbHMpLnNlbGVjdEFsbCgicmVjdC4iK0EuY2JmaWxsKS5hdHRyKCJzdHlsZSIsIiIpLmRhdGEoWSk7eS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5jYmZpbGwsITApLnN0eWxlKCJzdHJva2UiLCJub25lIikseS5leGl0KCkucmVtb3ZlKCk7dmFyIHg9VS5tYXAoaXQuYzJwKS5tYXAoTWF0aC5yb3VuZCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpO3kuZWFjaCgoZnVuY3Rpb24odCxhKXt2YXIgcz1bMD09PWE/VVswXTooWVthXStZW2EtMV0pLzIsYT09PVkubGVuZ3RoLTE/VVsxXTooWVthXStZW2ErMV0pLzJdLm1hcChpdC5jMnApLm1hcChNYXRoLnJvdW5kKTtvJiYoc1sxXT1jLmNvbnN0cmFpbihzWzFdKyhzWzFdPnNbMF0pPzE6LTEseFswXSx4WzFdKSk7dmFyIGw9bi5zZWxlY3QodGhpcykuYXR0cihvPyJ4IjoieSIsUSkuYXR0cihvPyJ5IjoieCIsbi5taW4ocykpLmF0dHIobz8id2lkdGgiOiJoZWlnaHQiLE1hdGgubWF4KFgsMikpLmF0dHIobz8iaGVpZ2h0Ijoid2lkdGgiLE1hdGgubWF4KG4ubWF4KHMpLW4ubWluKHMpLDIpKTtpZihlLl9maWxsZ3JhZGllbnQpcC5ncmFkaWVudChsLHIsZS5faWQsbz8idmVydGljYWwiOiJob3Jpem9udGFscmV2ZXJzZWQiLGUuX2ZpbGxncmFkaWVudCwiZmlsbCIpO2Vsc2V7dmFyIHU9SCh0KS5yZXBsYWNlKCJlLSIsIiIpO2wuYXR0cigiZmlsbCIsaSh1KS50b0hleFN0cmluZygpKX19KSk7dmFyIGI9dC5zZWxlY3QoIi4iK0EuY2JsaW5lcykuc2VsZWN0QWxsKCJwYXRoLiIrQS5jYmxpbmUpLmRhdGEoQi5jb2xvciYmQi53aWR0aD9XOltdKTtiLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChBLmNibGluZSwhMCksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1RLHI9TWF0aC5yb3VuZChpdC5jMnAodCkpK0Iud2lkdGgvMiUxO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIisobz9lKyIsIityOnIrIiwiK2UpKyhvPyJoIjoidiIpK1gpLmNhbGwocC5saW5lR3JvdXBTdHlsZSxCLndpZHRoLFYodCksQi5kYXNoKX0pKSxkdC5zZWxlY3RBbGwoImcuIitpdC5faWQrInRpY2sscGF0aCIpLnJlbW92ZSgpO3ZhciBfPVErWCsoTXx8MCkvMi0oIm91dHNpZGUiPT09ZS50aWNrcz8xOjApLFQ9cy5jYWxjVGlja3MoaXQpLGs9cy5nZXRUaWNrU2lnbnMoaXQpWzJdO3JldHVybiBzLmRyYXdUaWNrcyhyLGl0LHt2YWxzOiJpbnNpZGUiPT09aXQudGlja3M/cy5jbGlwRW5kcyhpdCxUKTpULGxheWVyOmR0LHBhdGg6cy5tYWtlVGlja1BhdGgoaXQsXyxrKSx0cmFuc0ZuOnMubWFrZVRyYW5zVGlja0ZuKGl0KX0pLHMuZHJhd0xhYmVscyhyLGl0LHt2YWxzOlQsbGF5ZXI6ZHQsdHJhbnNGbjpzLm1ha2VUcmFuc1RpY2tMYWJlbEZuKGl0KSxsYWJlbEZuczpzLm1ha2VMYWJlbEZucyhpdCxfKX0pfSxmdW5jdGlvbigpe2lmKG8mJiFhdHx8IW8mJmF0KXt2YXIgdCxpLGE9aXQucG9zaXRpb258fDAscz1pdC5fb2Zmc2V0K2l0Ll9sZW5ndGgvMjtpZigicmlnaHQiPT09ailpPXMsdD1SLmwrUi53KmErMTArcHQqKGl0LnNob3d0aWNrbGFiZWxzPzE6LjUpO2Vsc2UgaWYodD1zLCJib3R0b20iPT09aiYmKGk9Ui50K1IuaCphKzEwKygtMT09PWh0LmluZGV4T2YoImluc2lkZSIpP2l0LnRpY2tmb250LnNpemU6MCkrKCJpbnRzaWRlIiE9PWl0LnRpY2tzJiZlLnRpY2tsZW58fDApKSwidG9wIj09PWope3ZhciBsPU4udGV4dC5zcGxpdCgiPGJyPiIpLmxlbmd0aDtpPVIudCtSLmgqYSsxMC1YLXcqcHQqbH12dCgobz8iaCI6InYiKStpdC5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdChyKS5zZWxlY3RBbGwoImcuIitpdC5faWQrInRpY2siKSxzaWRlOmosb2Zmc2V0VG9wOm8/MDpSLnQsb2Zmc2V0TGVmdDpvP1IubDowLG1heFNoaWZ0Om8/RC53aWR0aDpELmhlaWdodH0sYXR0cmlidXRlczp7eDp0LHk6aSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSx0cmFuc2Zvcm06e3JvdGF0ZTpvPy05MDowLG9mZnNldDowfX0pfX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG4scz1YK00vMjstMT09PWh0LmluZGV4T2YoImluc2lkZSIpJiYobj1wLmJCb3goZHQubm9kZSgpKSxzKz1vP24ud2lkdGg6bi5oZWlnaHQpLHV0PWZ0LnNlbGVjdCgidGV4dCIpO3ZhciBjPTAsZj1vJiYidG9wIj09PWosbT0hbyYmInJpZ2h0Ij09PWosZz0wO2lmKHV0Lm5vZGUoKSYmIXV0LmNsYXNzZWQoQS5qc1BsYWNlaG9sZGVyKSl7dmFyIHkseD1mdC5zZWxlY3QoIi5oIitpdC5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7eCYmKG8mJmF0fHwhbyYmIWF0KT8oYz0obj1wLmJCb3goeCkpLndpZHRoLHk9bi5oZWlnaHQpOihjPShuPXAuYkJveChmdC5ub2RlKCkpKS5yaWdodC1SLmwtKG8/UTpudCkseT1uLmJvdHRvbS1SLnQtKG8/bnQ6USksb3x8InRvcCIhPT1qfHwocys9bi5oZWlnaHQsZz1uLmhlaWdodCkpLG0mJih1dC5hdHRyKCJ0cmFuc2Zvcm0iLHUoYy8yK3B0LzIsMCkpLGMqPTIpLHM9TWF0aC5tYXgocyxvP2M6eSl9dmFyIGI9Mioobz9QOkkpK3MrUytNLzIsdz0wOyFvJiZOLnRleHQmJiJib3R0b20iPT09QyYmejw9MCYmKGIrPXc9Yi8yLGcrPXcpLEQuX2hDb2xvcmJhck1vdmVUaXRsZT13LEQuX2hDb2xvcmJhck1vdmVDQlRpdGxlPWc7dmFyIEY9UytNO3Quc2VsZWN0KCIuIitBLmNiYmcpLmF0dHIoIngiLChvP1E6bnQpLUYvMi0obz9QOjApKS5hdHRyKCJ5Iiwobz9udDpRKS0obz9KOkkrZy13KSkuYXR0cihvPyJ3aWR0aCI6ImhlaWdodCIsTWF0aC5tYXgoYi13LDIpKS5hdHRyKG8/ImhlaWdodCI6IndpZHRoIixNYXRoLm1heChKK0YsMikpLmNhbGwoZC5maWxsLEUpLmNhbGwoZC5zdHJva2UsZS5ib3JkZXJjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsUyk7dmFyIEI9bT9NYXRoLm1heChjLTEwLDApOjA7aWYodC5zZWxlY3RBbGwoIi4iK0EuY2JvdXRsaW5lKS5hdHRyKCJ4Iiwobz9ROm50K1ApK0IpLmF0dHIoInkiLChvP250K0ktSjpRKSsoZj9tdDowKSkuYXR0cihvPyJ3aWR0aCI6ImhlaWdodCIsTWF0aC5tYXgoWCwyKSkuYXR0cihvPyJoZWlnaHQiOiJ3aWR0aCIsTWF0aC5tYXgoSi0obz8yKkkrbXQ6MipQK0IpLDIpKS5jYWxsKGQuc3Ryb2tlLGUub3V0bGluZWNvbG9yKS5zdHlsZSh7ZmlsbDoibm9uZSIsInN0cm9rZS13aWR0aCI6TX0pLHQuYXR0cigidHJhbnNmb3JtIix1KFIubC0obz8kKmI6MCksUi50LShvPzA6KDEtdHQpKmItZykpKSwhbyYmKFN8fGkoRSkuZ2V0QWxwaGEoKSYmIWkuZXF1YWxzKEQucGFwZXJfYmdjb2xvcixFKSkpe3ZhciBVPWR0LnNlbGVjdEFsbCgidGV4dCIpLFY9VVswXS5sZW5ndGgsSD10LnNlbGVjdCgiLiIrQS5jYmJnKS5ub2RlKCkscT1wLmJCb3goSCksRz1wLmdldFRyYW5zbGF0ZSh0KTtVLmVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIHI9Vi0xO2lmKDA9PT1lfHxlPT09cil7dmFyIG4saT1wLmJCb3godGhpcyksYT1wLmdldFRyYW5zbGF0ZSh0aGlzKTtpZihlPT09cil7dmFyIG89aS5yaWdodCthLng7KG49cS5yaWdodCtHLngrbnQtUy0yK08tbyk+MCYmKG49MCl9ZWxzZSBpZigwPT09ZSl7dmFyIHM9aS5sZWZ0K2EueDsobj1xLmxlZnQrRy54K250K1MrMi1zKTwwJiYobj0wKX1uJiYoVjwzP3RoaXMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsMCkgIit0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikpOnRoaXMuc2V0QXR0cmlidXRlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikpfX0pKX12YXIgWT17fSxXPVRbTF0sWj1rW0xdLEs9VFtDXSxldD1rW0NdLHJ0PWItWDtvPygicGl4ZWxzIj09PWg/KFkueT16LFkudD1KKkssWS5iPUoqZXQpOihZLnQ9WS5iPTAsWS55dD16K2wqSyxZLnliPXotbCpldCksInBpeGVscyI9PT1fPyhZLng9TyxZLmw9YipXLFkucj1iKlopOihZLmw9cnQqVyxZLnI9cnQqWixZLnhsPU8tdipXLFkueHI9Tyt2KlopKTooInBpeGVscyI9PT1oPyhZLng9TyxZLmw9SipXLFkucj1KKlopOihZLmw9WS5yPTAsWS54bD1PK2wqVyxZLnhyPU8tbCpaKSwicGl4ZWxzIj09PV8/KFkueT0xLXosWS50PWIqSyxZLmI9YipldCk6KFkudD1ydCpLLFkuYj1ydCpldCxZLnl0PXotdipLLFkueWI9eit2KmV0KSksYS5hdXRvTWFyZ2luKHIsZS5faWQsWSl9XSxyKX0ocixlLHQpO3YmJnYudGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaCh2KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEscz0idiI9PT1lLm9yaWVudGF0aW9uLGM9ci5fZnVsbExheW91dC5fc2l6ZTtsLmluaXQoe2VsZW1lbnQ6dC5ub2RlKCksZ2Q6cixwcmVwRm46ZnVuY3Rpb24oKXtuPXQuYXR0cigidHJhbnNmb3JtIiksaCh0KX0sbW92ZUZuOmZ1bmN0aW9uKHIsbyl7dC5hdHRyKCJ0cmFuc2Zvcm0iLG4rdShyLG8pKSxpPWwuYWxpZ24oKHM/ZS5fdUZyYWM6ZS5fdkZyYWMpK3IvYy53LHM/ZS5fdGhpY2tGcmFjOmUuX2xlbkZyYWMsMCwxLGUueGFuY2hvciksYT1sLmFsaWduKChzP2UuX3ZGcmFjOjEtZS5fdUZyYWMpLW8vYy5oLHM/ZS5fbGVuRnJhYzplLl90aGlja0ZyYWMsMCwxLGUueWFuY2hvcik7dmFyIGY9bC5nZXRDdXJzb3IoaSxhLGUueGFuY2hvcixlLnlhbmNob3IpO2godCxmKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aWYoaCh0KSx2b2lkIDAhPT1pJiZ2b2lkIDAhPT1hKXt2YXIgbj17fTtuW2UuX3Byb3BQcmVmaXgrIngiXT1pLG5bZS5fcHJvcFByZWZpeCsieSJdPWEsdm9pZCAwIT09ZS5fdHJhY2VJbmRleD9vLmNhbGwoIl9ndWlSZXN0eWxlIixyLG4sZS5fdHJhY2VJbmRleCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHIsbil9fX0pfShyLGUsdCl9KSksZS5leGl0KCkuZWFjaCgoZnVuY3Rpb24oZSl7YS5hdXRvTWFyZ2luKHQsZS5faWQpfSkpLnJlbW92ZSgpLGUub3JkZXIoKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ3MSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vbGliL3NldGN1cnNvciI6NTI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjU1NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyI6NTcyLCIuLi8uLi9wbG90cy9wbG90cyI6NjE5LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9jb2xvciI6MzY2LCIuLi9jb2xvcnNjYWxlL2hlbHBlcnMiOjM3NywiLi4vZHJhZ2VsZW1lbnQiOjM4NSwiLi4vZHJhd2luZyI6Mzg4LCIuLi90aXRsZXMiOjQ2NCwiLi9jb25zdGFudHMiOjM2OCwiQHBsb3RseS9kMyI6NTgsdGlueWNvbG9yMjozMTJ9XSwzNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5jb2xvcmJhcil9fSx7Ii4uLy4uL2xpYiI6NTAzfV0sMzcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJjb2xvcmJhciIsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKS5kcmF3LGhhc0NvbG9yYmFyOnQoIi4vaGFzX2NvbG9yYmFyIil9fSx7Ii4vYXR0cmlidXRlcyI6MzY3LCIuL2RlZmF1bHRzIjozNjksIi4vZHJhdyI6MzcwLCIuL2hhc19jb2xvcmJhciI6MzcxfV0sMzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXIsYT10KCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyIpLG89dCgiLi9zY2FsZXMuanMiKS5zY2FsZXM7YShvKTtmdW5jdGlvbiBzKHQpe3JldHVybiJgIit0KyJgIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0PXR8fCIiO3ZhciByLGE9KGU9ZXx8e30pLmNMZXR0ZXJ8fCJjIixsPSgib25seUlmTnVtZXJpY2FsImluIGU/ZS5vbmx5SWZOdW1lcmljYWw6Qm9vbGVhbih0KSwibm9TY2FsZSJpbiBlP2Uubm9TY2FsZToibWFya2VyLmxpbmUiPT09dCksYz0ic2hvd1NjYWxlRGZsdCJpbiBlP2Uuc2hvd1NjYWxlRGZsdDoieiI9PT1hLHU9InN0cmluZyI9PXR5cGVvZiBlLmNvbG9yc2NhbGVEZmx0P29bZS5jb2xvcnNjYWxlRGZsdF06bnVsbCxmPWUuZWRpdFR5cGVPdmVycmlkZXx8IiIsaD10P3QrIi4iOiIiOyJjb2xvckF0dHIiaW4gZT8ocj1lLmNvbG9yQXR0cixlLmNvbG9yQXR0cik6cyhoKyhyPXt6OiJ6IixjOiJjb2xvciJ9W2FdKSk7dmFyIHA9YSsiYXV0byIsZD1hKyJtaW4iLG09YSsibWF4IixnPWErIm1pZCIsdj0ocyhoK3ApLHMoaCtkKSxzKGgrbSkse30pO3ZbZF09dlttXT12b2lkIDA7dmFyIHk9e307eVtwXT0hMTt2YXIgeD17fTtyZXR1cm4iY29sb3IiPT09ciYmKHguY29sb3I9e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOmZ8fCJzdHlsZSJ9LGUuYW5pbSYmKHguY29sb3IuYW5pbT0hMCkpLHhbcF09e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp2fSx4W2RdPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpmfHwicGxvdCIsaW1wbGllZEVkaXRzOnl9LHhbbV09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmZ8fCJwbG90IixpbXBsaWVkRWRpdHM6eX0seFtnXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp2fSx4LmNvbG9yc2NhbGU9e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGVkaXRUeXBlOiJjYWxjIixkZmx0OnUsaW1wbGllZEVkaXRzOnthdXRvY29sb3JzY2FsZTohMX19LHguYXV0b2NvbG9yc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEhPT1lLmF1dG9Db2xvckRmbHQsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Y29sb3JzY2FsZTp2b2lkIDB9fSx4LnJldmVyc2VzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGx8fCh4LnNob3dzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpjLGVkaXRUeXBlOiJjYWxjIn0seC5jb2xvcmJhcj1uKSxlLm5vQ29sb3JBeGlzfHwoeC5jb2xvcmF4aXM9e3ZhbFR5cGU6InN1YnBsb3RpZCIscmVnZXg6aSgiY29sb3JheGlzIiksZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0pLHh9fSx7Ii4uLy4uL2xpYi9yZWdleCI6NTIwLCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6NTI2LCIuLi9jb2xvcmJhci9hdHRyaWJ1dGVzIjozNjcsIi4vc2NhbGVzLmpzIjozODF9XSwzNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9oZWxwZXJzIikuZXh0cmFjdE9wdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzPXQuX2Z1bGxMYXlvdXQsbD1yLnZhbHMsYz1yLmNvbnRhaW5lclN0cix1PWM/aS5uZXN0ZWRQcm9wZXJ0eShlLGMpLmdldCgpOmUsZj1hKHUpLGg9ITEhPT1mLmF1dG8scD1mLm1pbixkPWYubWF4LG09Zi5taWQsZz1mdW5jdGlvbigpe3JldHVybiBpLmFnZ051bXMoTWF0aC5taW4sbnVsbCxsKX0sdj1mdW5jdGlvbigpe3JldHVybiBpLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxsKX07KHZvaWQgMD09PXA/cD1nKCk6aCYmKHA9dS5fY29sb3JBeCYmbihwKT9NYXRoLm1pbihwLGcoKSk6ZygpKSx2b2lkIDA9PT1kP2Q9digpOmgmJihkPXUuX2NvbG9yQXgmJm4oZCk/TWF0aC5tYXgoZCx2KCkpOnYoKSksaCYmdm9pZCAwIT09bSYmKGQtbT5tLXA/cD1tLShkLW0pOmQtbTxtLXAmJihkPW0rKG0tcCkpKSxwPT09ZCYmKHAtPS41LGQrPS41KSxmLl9zeW5jKCJtaW4iLHApLGYuX3N5bmMoIm1heCIsZCksZi5hdXRvY29sb3JzY2FsZSkmJihvPXAqZDwwP3MuY29sb3JzY2FsZS5kaXZlcmdpbmc6cD49MD9zLmNvbG9yc2NhbGUuc2VxdWVudGlhbDpzLmNvbG9yc2NhbGUuc2VxdWVudGlhbG1pbnVzLGYuX3N5bmMoImNvbG9yc2NhbGUiLG8pKX19LHsiLi4vLi4vbGliIjo1MDMsIi4vaGVscGVycyI6Mzc3LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sMzc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4vaGVscGVycyIpLmV4dHJhY3RPcHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgcj10WyJfIitlXTt2b2lkIDAhPT1yJiYodFtlXT1yKX1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5jb250YWluZXI/bi5uZXN0ZWRQcm9wZXJ0eSh0LGkuY29udGFpbmVyKS5nZXQoKTp0O2lmKG8paWYoby5jb2xvcmF4aXMpby5fY29sb3JBeD1lW28uY29sb3JheGlzXTtlbHNle3ZhciBzPWEobyksbD1zLmF1dG87KGx8fHZvaWQgMD09PXMubWluKSYmcihvLGkubWluKSwobHx8dm9pZCAwPT09cy5tYXgpJiZyKG8saS5tYXgpLHMuYXV0b2NvbG9yc2NhbGUmJnIobywiY29sb3JzY2FsZSIpfX1mb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXSxjPWwuX21vZHVsZS5jb2xvcmJhcjtpZihjKWlmKEFycmF5LmlzQXJyYXkoYykpZm9yKHZhciB1PTA7dTxjLmxlbmd0aDt1KyspbyhsLGNbdV0pO2Vsc2UgbyhsLGMpO2kobCwibWFya2VyLmxpbmUiKSYmbyhsLHtjb250YWluZXI6Im1hcmtlci5saW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9KX1mb3IodmFyIGYgaW4gZS5fY29sb3JBeGVzKW8oZVtmXSx7bWluOiJjbWluIixtYXg6ImNtYXgifSl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2hlbHBlcnMiOjM3N31dLDM3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXIiKSxvPXQoIi4uL2NvbG9yYmFyL2RlZmF1bHRzIikscz10KCIuL3NjYWxlcyIpLmlzVmFsaWQsbD10KCIuLi8uLi9yZWdpc3RyeSIpLnRyYWNlSXM7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gZT9pLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCl8fHt9OnR9ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLHUsZixoKXt2YXIgcD1oLnByZWZpeCxkPWguY0xldHRlcixtPSJfbW9kdWxlImluIHIsZz1jKGUscCksdj1jKHIscCkseT1jKHIuX3RlbXBsYXRlfHx7fSxwKXx8e30seD1mdW5jdGlvbigpe3JldHVybiBkZWxldGUgZS5jb2xvcmF4aXMsZGVsZXRlIHIuY29sb3JheGlzLHQoZSxyLHUsZixoKX07aWYobSl7dmFyIGI9dS5fY29sb3JBeGVzfHx7fSxfPWYocCsiY29sb3JheGlzIik7aWYoXyl7dmFyIHc9bChyLCJjb250b3VyIikmJmkubmVzdGVkUHJvcGVydHkociwiY29udG91cnMuY29sb3JpbmciKS5nZXQoKXx8ImhlYXRtYXAiLFQ9YltfXTtyZXR1cm4gdm9pZChUPyhUWzJdLnB1c2goeCksVFswXSE9PXcmJihUWzBdPSExLGkud2FybihbIklnbm9yaW5nIGNvbG9yYXhpczoiLF8sInNldHRpbmciLCJhcyBpdCBpcyBsaW5rZWQgdG8gaW5jb21wYXRpYmxlIGNvbG9yc2NhbGVzLiJdLmpvaW4oIiAiKSkpKTpiW19dPVt3LHIsW3hdXSl9fXZhciBrPWdbZCsibWluIl0sQT1nW2QrIm1heCJdLE09bihrKSYmbihBKSYmazxBO2YocCtkKyJhdXRvIiwhTSk/ZihwK2QrIm1pZCIpOihmKHArZCsibWluIiksZihwK2QrIm1heCIpKTt2YXIgUyxFLEw9Zy5jb2xvcnNjYWxlLEM9eS5jb2xvcnNjYWxlOyh2b2lkIDAhPT1MJiYoUz0hcyhMKSksdm9pZCAwIT09QyYmKFM9IXMoQykpLGYocCsiYXV0b2NvbG9yc2NhbGUiLFMpLGYocCsiY29sb3JzY2FsZSIpLGYocCsicmV2ZXJzZXNjYWxlIiksIm1hcmtlci5saW5lLiIhPT1wKSYmKHAmJm0mJihFPWEoZykpLGYocCsic2hvd3NjYWxlIixFKSYmKHAmJnkmJih2Ll90ZW1wbGF0ZT15KSxvKGcsdix1KSkpfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vY29sb3JiYXIvZGVmYXVsdHMiOjM2OSwiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIjozNzEsIi4vc2NhbGVzIjozODEsImZhc3QtaXNudW1lcmljIjoxOTB9XSwzNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4vc2NhbGVzIikuaXNWYWxpZDt2YXIgYz1bInNob3dzY2FsZSIsImF1dG9jb2xvcnNjYWxlIiwiY29sb3JzY2FsZSIsInJldmVyc2VzY2FsZSIsImNvbG9yYmFyIl0sdT1bIm1pbiIsIm1heCIsIm1pZCIsImF1dG8iXTtmdW5jdGlvbiBmKHQpe3ZhciBlLHIsbixpPXQuX2NvbG9yQXgsYT1pfHx0LG89e307Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKylvW249Y1tyXV09YVtuXTtpZihpKWZvcihlPSJjIixyPTA7cjx1Lmxlbmd0aDtyKyspb1tuPXVbcl1dPWFbImMiK25dO2Vsc2V7dmFyIHM7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykoKHM9ImMiKyhuPXVbcl0pKWluIGF8fChzPSJ6IituKWluIGEpJiYob1tuXT1hW3NdKTtlPXMuY2hhckF0KDApfXJldHVybiBvLl9zeW5jPWZ1bmN0aW9uKHQscil7dmFyIG49LTEhPT11LmluZGV4T2YodCk/ZSt0OnQ7YVtuXT1hWyJfIituXT1yfSxvfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPWYodCkscj1lLm1pbixuPWUubWF4LGk9ZS5yZXZlcnNlc2NhbGU/cChlLmNvbG9yc2NhbGUpOmUuY29sb3JzY2FsZSxhPWkubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGw9MDtsPGE7bCsrKXt2YXIgYz1pW2xdO29bbF09citjWzBdKihuLXIpLHNbbF09Y1sxXX1yZXR1cm57ZG9tYWluOm8scmFuZ2U6c319ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1lLTEsaT0wO24+PTA7bi0tLGkrKyl7dmFyIGE9dFtuXTtyW2ldPVsxLWFbMF0sYVsxXV19cmV0dXJuIHJ9ZnVuY3Rpb24gZCh0LGUpe2U9ZXx8e307Zm9yKHZhciByPXQuZG9tYWluLG89dC5yYW5nZSxsPW8ubGVuZ3RoLGM9bmV3IEFycmF5KGwpLHU9MDt1PGw7dSsrKXt2YXIgZj1pKG9bdV0pLnRvUmdiKCk7Y1t1XT1bZi5yLGYuZyxmLmIsZi5hXX12YXIgaCxwPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxkPWUubm9OdW1lcmljQ2hlY2ssZz1lLnJldHVybkFycmF5O3JldHVybihoPWQmJmc/cDpkP2Z1bmN0aW9uKHQpe3JldHVybiBtKHAodCkpfTpnP2Z1bmN0aW9uKHQpe3JldHVybiBhKHQpP3AodCk6aSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9tKHAodCkpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX0pLmRvbWFpbj1wLmRvbWFpbixoLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGh9ZnVuY3Rpb24gbSh0KXt2YXIgZT17cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0WzNdfTtyZXR1cm4gaShlKS50b1JnYlN0cmluZygpfWUuZXhwb3J0cz17aGFzQ29sb3JzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZT9vLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fHt9OnQsaT1uW3J8fCJjb2xvciJdLHM9ITE7aWYoby5pc0FycmF5T3JUeXBlZEFycmF5KGkpKWZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKWlmKGEoaVtjXSkpe3M9ITA7YnJlYWt9cmV0dXJuIG8uaXNQbGFpbk9iamVjdChuKSYmKHN8fCEwPT09bi5zaG93c2NhbGV8fGEobi5jbWluKSYmYShuLmNtYXgpfHxsKG4uY29sb3JzY2FsZSl8fG8uaXNQbGFpbk9iamVjdChuLmNvbG9yYmFyKSl9LGV4dHJhY3RPcHRzOmYsZXh0cmFjdFNjYWxlOmgsZmxpcFNjYWxlOnAsbWFrZUNvbG9yU2NhbGVGdW5jOmQsbWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQoaCh0KSxlKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9jb2xvciI6MzY2LCIuL3NjYWxlcyI6MzgxLCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjE5MCx0aW55Y29sb3IyOjMxMn1dLDM3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjYWxlcyIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNvbG9yc2NhbGUiLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHNjYWxlczpuLnNjYWxlcyxkZWZhdWx0U2NhbGU6bi5kZWZhdWx0U2NhbGUsZ2V0U2NhbGU6bi5nZXQsaXNWYWxpZFNjYWxlOm4uaXNWYWxpZCxoYXNDb2xvcnNjYWxlOmkuaGFzQ29sb3JzY2FsZSxleHRyYWN0T3B0czppLmV4dHJhY3RPcHRzLGV4dHJhY3RTY2FsZTppLmV4dHJhY3RTY2FsZSxmbGlwU2NhbGU6aS5mbGlwU2NhbGUsbWFrZUNvbG9yU2NhbGVGdW5jOmkubWFrZUNvbG9yU2NhbGVGdW5jLG1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZTppLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZX19LHsiLi9hdHRyaWJ1dGVzIjozNzMsIi4vY2FsYyI6Mzc0LCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjozNzUsIi4vZGVmYXVsdHMiOjM3NiwiLi9oZWxwZXJzIjozNzcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjM3OSwiLi9sYXlvdXRfZGVmYXVsdHMiOjM4MCwiLi9zY2FsZXMiOjM4MX1dLDM3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9zY2FsZXMiKS5zY2FsZXM7ZS5leHBvcnRzPXtlZGl0VHlwZToiY2FsYyIsY29sb3JzY2FsZTp7ZWRpdFR5cGU6ImNhbGMiLHNlcXVlbnRpYWw6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6YS5SZWRzLGVkaXRUeXBlOiJjYWxjIn0sc2VxdWVudGlhbG1pbnVzOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmEuQmx1ZXMsZWRpdFR5cGU6ImNhbGMifSxkaXZlcmdpbmc6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6YS5SZEJ1LGVkaXRUeXBlOiJjYWxjIn19LGNvbG9yYXhpczpuKHtfaXNTdWJwbG90T2JqOiEwLGVkaXRUeXBlOiJjYWxjIn0saSgiIix7Y29sb3JBdHRyOiJjb3JyZXNwb25kaW5nIHRyYWNlIGNvbG9yIGFycmF5KHMpIixub0NvbG9yQXhpczohMCxzaG93U2NhbGVEZmx0OiEwfSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4vYXR0cmlidXRlcyI6MzczLCIuL3NjYWxlcyI6MzgxfV0sMzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1yKCJjb2xvcnNjYWxlLnNlcXVlbnRpYWwiKSxyKCJjb2xvcnNjYWxlLnNlcXVlbnRpYWxtaW51cyIpLHIoImNvbG9yc2NhbGUuZGl2ZXJnaW5nIik7dmFyIHMsbCxjPWUuX2NvbG9yQXhlcztmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCxhLmNvbG9yYXhpcyx0LGUpfWZvcih2YXIgZiBpbiBjKXt2YXIgaD1jW2ZdO2lmKGhbMF0pcz10W2ZdfHx7fSwobD1pLm5ld0NvbnRhaW5lcihlLGYsImNvbG9yYXhpcyIpKS5fbmFtZT1mLG8ocyxsLGUsdSx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSk7ZWxzZXtmb3IodmFyIHA9MDtwPGhbMl0ubGVuZ3RoO3ArKyloWzJdW3BdKCk7ZGVsZXRlIGUuX2NvbG9yQXhlc1tmXX19fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuL2RlZmF1bHRzIjozNzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjM3OX1dLDM4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIiksaT17R3JleXM6W1swLCJyZ2IoMCwwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sWWxHbkJ1OltbMCwicmdiKDgsMjksODgpIl0sWy4xMjUsInJnYigzNyw1MiwxNDgpIl0sWy4yNSwicmdiKDM0LDk0LDE2OCkiXSxbLjM3NSwicmdiKDI5LDE0NSwxOTIpIl0sWy41LCJyZ2IoNjUsMTgyLDE5NikiXSxbLjYyNSwicmdiKDEyNywyMDUsMTg3KSJdLFsuNzUsInJnYigxOTksMjMzLDE4MCkiXSxbLjg3NSwicmdiKDIzNywyNDgsMjE3KSJdLFsxLCJyZ2IoMjU1LDI1NSwyMTcpIl1dLEdyZWVuczpbWzAsInJnYigwLDY4LDI3KSJdLFsuMTI1LCJyZ2IoMCwxMDksNDQpIl0sWy4yNSwicmdiKDM1LDEzOSw2OSkiXSxbLjM3NSwicmdiKDY1LDE3MSw5MykiXSxbLjUsInJnYigxMTYsMTk2LDExOCkiXSxbLjYyNSwicmdiKDE2MSwyMTcsMTU1KSJdLFsuNzUsInJnYigxOTksMjMzLDE5MikiXSxbLjg3NSwicmdiKDIyOSwyNDUsMjI0KSJdLFsxLCJyZ2IoMjQ3LDI1MiwyNDUpIl1dLFlsT3JSZDpbWzAsInJnYigxMjgsMCwzOCkiXSxbLjEyNSwicmdiKDE4OSwwLDM4KSJdLFsuMjUsInJnYigyMjcsMjYsMjgpIl0sWy4zNzUsInJnYigyNTIsNzgsNDIpIl0sWy41LCJyZ2IoMjUzLDE0MSw2MCkiXSxbLjYyNSwicmdiKDI1NCwxNzgsNzYpIl0sWy43NSwicmdiKDI1NCwyMTcsMTE4KSJdLFsuODc1LCJyZ2IoMjU1LDIzNywxNjApIl0sWzEsInJnYigyNTUsMjU1LDIwNCkiXV0sQmx1ZXJlZDpbWzAsInJnYigwLDAsMjU1KSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmRCdTpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoMTA2LDEzNywyNDcpIl0sWy41LCJyZ2IoMTkwLDE5MCwxOTApIl0sWy42LCJyZ2IoMjIwLDE3MCwxMzIpIl0sWy43LCJyZ2IoMjMwLDE0NSw5MCkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sUmVkczpbWzAsInJnYigyMjAsMjIwLDIyMCkiXSxbLjIsInJnYigyNDUsMTk1LDE1NykiXSxbLjQsInJnYigyNDUsMTYwLDEwNSkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sQmx1ZXM6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDQwLDYwLDE5MCkiXSxbLjUsInJnYig3MCwxMDAsMjQ1KSJdLFsuNiwicmdiKDkwLDEyMCwyNDUpIl0sWy43LCJyZ2IoMTA2LDEzNywyNDcpIl0sWzEsInJnYigyMjAsMjIwLDIyMCkiXV0sUGljbmljOltbMCwicmdiKDAsMCwyNTUpIl0sWy4xLCJyZ2IoNTEsMTUzLDI1NSkiXSxbLjIsInJnYigxMDIsMjA0LDI1NSkiXSxbLjMsInJnYigxNTMsMjA0LDI1NSkiXSxbLjQsInJnYigyMDQsMjA0LDI1NSkiXSxbLjUsInJnYigyNTUsMjU1LDI1NSkiXSxbLjYsInJnYigyNTUsMjA0LDI1NSkiXSxbLjcsInJnYigyNTUsMTUzLDI1NSkiXSxbLjgsInJnYigyNTUsMTAyLDIwNCkiXSxbLjksInJnYigyNTUsMTAyLDEwMikiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJhaW5ib3c6W1swLCJyZ2IoMTUwLDAsOTApIl0sWy4xMjUsInJnYigwLDAsMjAwKSJdLFsuMjUsInJnYigwLDI1LDI1NSkiXSxbLjM3NSwicmdiKDAsMTUyLDI1NSkiXSxbLjUsInJnYig0NCwyNTUsMTUwKSJdLFsuNjI1LCJyZ2IoMTUxLDI1NSwwKSJdLFsuNzUsInJnYigyNTUsMjM0LDApIl0sWy44NzUsInJnYigyNTUsMTExLDApIl0sWzEsInJnYigyNTUsMCwwKSJdXSxQb3J0bGFuZDpbWzAsInJnYigxMiw1MSwxMzEpIl0sWy4yNSwicmdiKDEwLDEzNiwxODYpIl0sWy41LCJyZ2IoMjQyLDIxMSw1NikiXSxbLjc1LCJyZ2IoMjQyLDE0Myw1NikiXSxbMSwicmdiKDIxNywzMCwzMCkiXV0sSmV0OltbMCwicmdiKDAsMCwxMzEpIl0sWy4xMjUsInJnYigwLDYwLDE3MCkiXSxbLjM3NSwicmdiKDUsMjU1LDI1NSkiXSxbLjYyNSwicmdiKDI1NSwyNTUsMCkiXSxbLjg3NSwicmdiKDI1MCwwLDApIl0sWzEsInJnYigxMjgsMCwwKSJdXSxIb3Q6W1swLCJyZ2IoMCwwLDApIl0sWy4zLCJyZ2IoMjMwLDAsMCkiXSxbLjYsInJnYigyNTUsMjEwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sQmxhY2tib2R5OltbMCwicmdiKDAsMCwwKSJdLFsuMiwicmdiKDIzMCwwLDApIl0sWy40LCJyZ2IoMjMwLDIxMCwwKSJdLFsuNywicmdiKDI1NSwyNTUsMjU1KSJdLFsxLCJyZ2IoMTYwLDIwMCwyNTUpIl1dLEVhcnRoOltbMCwicmdiKDAsMCwxMzApIl0sWy4xLCJyZ2IoMCwxODAsMTgwKSJdLFsuMiwicmdiKDQwLDIxMCw0MCkiXSxbLjQsInJnYigyMzAsMjMwLDUwKSJdLFsuNiwicmdiKDEyMCw3MCwyMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxFbGVjdHJpYzpbWzAsInJnYigwLDAsMCkiXSxbLjE1LCJyZ2IoMzAsMCwxMDApIl0sWy40LCJyZ2IoMTIwLDAsMTAwKSJdLFsuNiwicmdiKDE2MCw5MCwwKSJdLFsuOCwicmdiKDIzMCwyMDAsMCkiXSxbMSwicmdiKDI1NSwyNTAsMjIwKSJdXSxWaXJpZGlzOltbMCwiIzQ0MDE1NCJdLFsuMDYyNzQ1MDk4MDM5MjE1NjksIiM0ODE4NmEiXSxbLjEyNTQ5MDE5NjA3ODQzMTM3LCIjNDcyZDdiIl0sWy4xODgyMzUyOTQxMTc2NDcwNiwiIzQyNDA4NiJdLFsuMjUwOTgwMzkyMTU2ODYyNzQsIiMzYjUyOGIiXSxbLjMxMzcyNTQ5MDE5NjA3ODQsIiMzMzYzOGQiXSxbLjM3NjQ3MDU4ODIzNTI5NDEsIiMyYzcyOGUiXSxbLjQzOTIxNTY4NjI3NDUwOTgsIiMyNjgyOGUiXSxbLjUwMTk2MDc4NDMxMzcyNTUsIiMyMTkxOGMiXSxbLjU2NDcwNTg4MjM1Mjk0MTIsIiMxZmEwODgiXSxbLjYyNzQ1MDk4MDM5MjE1NjksIiMyOGFlODAiXSxbLjY5MDE5NjA3ODQzMTM3MjUsIiMzZmJjNzMiXSxbLjc1Mjk0MTE3NjQ3MDU4ODIsIiM1ZWM5NjIiXSxbLjgxNTY4NjI3NDUwOTgwMzksIiM4NGQ0NGIiXSxbLjg3ODQzMTM3MjU0OTAxOTYsIiNhZGRjMzAiXSxbLjk0MTE3NjQ3MDU4ODIzNTMsIiNkOGUyMTkiXSxbMSwiI2ZkZTcyNSJdXSxDaXZpZGlzOltbMCwicmdiKDAsMzIsNzYpIl0sWy4wNTg4MjQsInJnYigwLDQyLDEwMikiXSxbLjExNzY0NywicmdiKDAsNTIsMTEwKSJdLFsuMTc2NDcxLCJyZ2IoMzksNjMsMTA4KSJdLFsuMjM1Mjk0LCJyZ2IoNjAsNzQsMTA3KSJdLFsuMjk0MTE4LCJyZ2IoNzYsODUsMTA3KSJdLFsuMzUyOTQxLCJyZ2IoOTEsOTUsMTA5KSJdLFsuNDExNzY1LCJyZ2IoMTA0LDEwNiwxMTIpIl0sWy40NzA1ODgsInJnYigxMTcsMTE3LDExNykiXSxbLjUyOTQxMiwicmdiKDEzMSwxMjksMTIwKSJdLFsuNTg4MjM1LCJyZ2IoMTQ2LDE0MCwxMjApIl0sWy42NDcwNTksInJnYigxNjEsMTUyLDExOCkiXSxbLjcwNTg4MiwicmdiKDE3NiwxNjUsMTE0KSJdLFsuNzY0NzA2LCJyZ2IoMTkyLDE3NywxMDkpIl0sWy44MjM1MjksInJnYigyMDksMTkxLDEwMikiXSxbLjg4MjM1MywicmdiKDIyNSwyMDQsOTIpIl0sWy45NDExNzYsInJnYigyNDMsMjE5LDc5KSJdLFsxLCJyZ2IoMjU1LDIzMyw2OSkiXV19LGE9aS5SZEJ1O2Z1bmN0aW9uIG8odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9ZS5leHBvcnRzPXtzY2FsZXM6aSxkZWZhdWx0U2NhbGU6YSxnZXQ6ZnVuY3Rpb24odCxlKXtpZihlfHwoZT1hKSwhdClyZXR1cm4gZTtmdW5jdGlvbiByKCl7dHJ5e3Q9aVt0XXx8SlNPTi5wYXJzZSh0KX1jYXRjaChyKXt0PWV9fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHIoKSwic3RyaW5nIj09dHlwZW9mIHQmJnIoKSksbyh0KT90OmV9LGlzVmFsaWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWlbdF18fG8odCl9fX0se3Rpbnljb2xvcjI6MzEyfV0sMzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm4ibGVmdCI9PT1pfHwiYm90dG9tIj09PWk/YToiY2VudGVyIj09PWl8fCJtaWRkbGUiPT09aT9zOiJyaWdodCI9PT1pfHwidG9wIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sMzgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1sic3ctcmVzaXplIiwicy1yZXNpemUiLCJzZS1yZXNpemUiXSxbInctcmVzaXplIiwibW92ZSIsImUtcmVzaXplIl0sWyJudy1yZXNpemUiLCJuLXJlc2l6ZSIsIm5lLXJlc2l6ZSJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9ImxlZnQiPT09cj8wOiJjZW50ZXIiPT09cj8xOiJyaWdodCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT0iYm90dG9tIj09PWE/MDoibWlkZGxlIj09PWE/MToidG9wIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0seyIuLi8uLi9saWIiOjUwM31dLDM4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNlbGVjdE1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImxhc3NvIj09PXR8fCJzZWxlY3QiPT09dH0sci5kcmF3TW9kZT1mdW5jdGlvbih0KXtyZXR1cm4iZHJhd2Nsb3NlZHBhdGgiPT09dHx8ImRyYXdvcGVucGF0aCI9PT10fHwiZHJhd2xpbmUiPT09dHx8ImRyYXdyZWN0Ij09PXR8fCJkcmF3Y2lyY2xlIj09PXR9LHIub3Blbk1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImRyYXdsaW5lIj09PXR8fCJkcmF3b3BlbnBhdGgiPT09dH0sci5yZWN0TW9kZT1mdW5jdGlvbih0KXtyZXR1cm4ic2VsZWN0Ij09PXR8fCJkcmF3bGluZSI9PT10fHwiZHJhd3JlY3QiPT09dHx8ImRyYXdjaXJjbGUiPT09dH0sci5mcmVlTW9kZT1mdW5jdGlvbih0KXtyZXR1cm4ibGFzc28iPT09dHx8ImRyYXdjbG9zZWRwYXRoIj09PXR8fCJkcmF3b3BlbnBhdGgiPT09dH0sci5zZWxlY3RpbmdPckRyYXdpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZnJlZU1vZGUodCl8fHIucmVjdE1vZGUodCl9fSx7fV0sMzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGk9dCgiaGFzLWhvdmVyIiksYT10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPXQoIi4uLy4uL2xpYiIpLnJlbW92ZUVsZW1lbnQscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbD1lLmV4cG9ydHM9e307bC5hbGlnbj10KCIuL2FsaWduIiksbC5nZXRDdXJzb3I9dCgiLi9jdXJzb3IiKTt2YXIgYz10KCIuL3VuaG92ZXIiKTtmdW5jdGlvbiB1KCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj0iZml4ZWQiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fWZ1bmN0aW9uIGYodCl7cmV0dXJuIG4odC5jaGFuZ2VkVG91Y2hlcz90LmNoYW5nZWRUb3VjaGVzWzBdOnQsZG9jdW1lbnQuYm9keSl9bC51bmhvdmVyPWMud3JhcHBlZCxsLnVuaG92ZXJSYXc9Yy5yYXcsbC5pbml0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixjLGgscCxkLG0sZz10LmdkLHY9MSx5PWcuX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSx4PXQuZWxlbWVudDtnLl9tb3VzZURvd25UaW1lfHwoZy5fbW91c2VEb3duVGltZT0wKSx4LnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIseC5vbm1vdXNlZG93bj1fLGE/KHguX29udG91Y2hzdGFydCYmeC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix4Ll9vbnRvdWNoc3RhcnQpLHguX29udG91Y2hzdGFydD1fLHguYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsXyx7cGFzc2l2ZTohMX0pKTp4Lm9udG91Y2hzdGFydD1fO3ZhciBiPXQuY2xhbXBGbnx8ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmFicyh0KTxyJiYodD0wKSxNYXRoLmFicyhlKTxyJiYoZT0wKSxbdCxlXX07ZnVuY3Rpb24gXyhhKXtnLl9kcmFnZ2VkPSExLGcuX2RyYWdnaW5nPSEwO3ZhciBvPWYoYSk7ZT1vWzBdLHI9b1sxXSxkPWEudGFyZ2V0LHA9YSxtPTI9PT1hLmJ1dHRvbnN8fGEuY3RybEtleSx2b2lkIDA9PT1hLmNsaWVudFgmJnZvaWQgMD09PWEuY2xpZW50WSYmKGEuY2xpZW50WD1lLGEuY2xpZW50WT1yKSwobj0obmV3IERhdGUpLmdldFRpbWUoKSktZy5fbW91c2VEb3duVGltZTx5P3YrPTE6KHY9MSxnLl9tb3VzZURvd25UaW1lPW4pLHQucHJlcEZuJiZ0LnByZXBGbihhLGUsciksaSYmIW0/KGg9dSgpKS5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yOml8fChoPWRvY3VtZW50LGM9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KS5jdXJzb3IpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixUKSwhMSE9PXQuZHJhZ21vZGUmJihhLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcse3Bhc3NpdmU6ITF9KSl9ZnVuY3Rpb24gdyhuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIGk9ZihuKSxhPXQubWluRHJhZ3x8cy5NSU5EUkFHLG89YihpWzBdLWUsaVsxXS1yLGEpLGM9b1swXSx1PW9bMV07KGN8fHUpJiYoZy5fZHJhZ2dlZD0hMCxsLnVuaG92ZXIoZyxuKSksZy5fZHJhZ2dlZCYmdC5tb3ZlRm4mJiFtJiYoZy5fZHJhZ2RhdGE9e2VsZW1lbnQ6eCxkeDpjLGR5OnV9LHQubW92ZUZuKGMsdSkpfWZ1bmN0aW9uIFQoZSl7aWYoZGVsZXRlIGcuX2RyYWdkYXRhLCExIT09dC5kcmFnbW9kZSYmKGUucHJldmVudERlZmF1bHQoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdykpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixUKSxpP28oaCk6YyYmKGguZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj1jLGM9bnVsbCksZy5fZHJhZ2dpbmcpe2lmKGcuX2RyYWdnaW5nPSExLChuZXcgRGF0ZSkuZ2V0VGltZSgpLWcuX21vdXNlRG93blRpbWU+eSYmKHY9TWF0aC5tYXgodi0xLDEpKSxnLl9kcmFnZ2VkKXQuZG9uZUZuJiZ0LmRvbmVGbigpO2Vsc2UgaWYodC5jbGlja0ZuJiZ0LmNsaWNrRm4odixwKSwhbSl7dmFyIHI7dHJ5e3I9bmV3IE1vdXNlRXZlbnQoImNsaWNrIixlKX1jYXRjaCh0KXt2YXIgbj1mKGUpOyhyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpKS5pbml0TW91c2VFdmVudCgiY2xpY2siLGUuYnViYmxlcyxlLmNhbmNlbGFibGUsZS52aWV3LGUuZGV0YWlsLGUuc2NyZWVuWCxlLnNjcmVlblksblswXSxuWzFdLGUuY3RybEtleSxlLmFsdEtleSxlLnNoaWZ0S2V5LGUubWV0YUtleSxlLmJ1dHRvbixlLnJlbGF0ZWRUYXJnZXQpfWQuZGlzcGF0Y2hFdmVudChyKX1nLl9kcmFnZ2luZz0hMSxnLl9kcmFnZ2VkPSExfWVsc2UgZy5fZHJhZ2dlZD0hMX19LGwuY292ZXJTbGlwPXV9LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjU2MSwiLi9hbGlnbiI6MzgyLCIuL2N1cnNvciI6MzgzLCIuL3VuaG92ZXIiOjM4NiwiaGFzLWhvdmVyIjoyMjgsImhhcy1wYXNzaXZlLWV2ZW50cyI6MjI5LCJtb3VzZS1ldmVudC1vZmZzZXQiOjI0Mn1dLDM4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXZlbnRzIiksaT10KCIuLi8uLi9saWIvdGhyb3R0bGUiKSxhPXQoIi4uLy4uL2xpYi9kb20iKS5nZXRHcmFwaERpdixvPXQoIi4uL2Z4L2NvbnN0YW50cyIpLHM9ZS5leHBvcnRzPXt9O3Mud3JhcHBlZD1mdW5jdGlvbih0LGUscil7KHQ9YSh0KSkuX2Z1bGxMYXlvdXQmJmkuY2xlYXIodC5fZnVsbExheW91dC5fdWlkK28uSE9WRVJJRCkscy5yYXcodCxlLHIpfSxzLnJhdz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT10Ll9ob3ZlcmRhdGE7ZXx8KGU9e30pLGUudGFyZ2V0JiYhdC5fZHJhZ2dlZCYmITE9PT1uLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImNpcmNsZSIpLnJlbW92ZSgpLHQuX2hvdmVyZGF0YT12b2lkIDAsZS50YXJnZXQmJmkmJnQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDplLHBvaW50czppfSkpfX0seyIuLi8uLi9saWIvZG9tIjo0OTEsIi4uLy4uL2xpYi9ldmVudHMiOjQ5MiwiLi4vLi4vbGliL3Rocm90dGxlIjo1MzAsIi4uL2Z4L2NvbnN0YW50cyI6NDAwfV0sMzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIixlZGl0VHlwZToic3R5bGUifSxyLnBhdHRlcm49e3NoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCIvIiwiXFwiLCJ4IiwiLSIsInwiLCIrIiwiLiJdLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxmaWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVwbGFjZSIsIm92ZXJsYXkiXSxkZmx0OiJyZXBsYWNlIixlZGl0VHlwZToic3R5bGUifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxmZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxmZ29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIixtaW46MCxtYXg6MX0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzb2xpZGl0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoImZhc3QtaXNudW1lcmljIikscz10KCJ0aW55Y29sb3IyIiksbD10KCIuLi8uLi9yZWdpc3RyeSIpLGM9dCgiLi4vY29sb3IiKSx1PXQoIi4uL2NvbG9yc2NhbGUiKSxmPWkuc3RyVHJhbnNsYXRlLGg9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxtPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxnPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksdj10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSx5PXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSx4PWUuZXhwb3J0cz17fTt4LmZvbnQ9ZnVuY3Rpb24odCxlLHIsbil7aS5pc1BsYWluT2JqZWN0KGUpJiYobj1lLmNvbG9yLHI9ZS5zaXplLGU9ZS5mYW1pbHkpLGUmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlKSxyKzEmJnQuc3R5bGUoImZvbnQtc2l6ZSIscisicHgiKSxuJiZ0LmNhbGwoYy5maWxsLG4pfSx4LnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIngiLGUpLmF0dHIoInkiLHIpfSx4LnNldFNpemU9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigid2lkdGgiLGUpLmF0dHIoImhlaWdodCIscil9LHguc2V0UmVjdD1mdW5jdGlvbih0LGUscixuLGkpe3QuY2FsbCh4LnNldFBvc2l0aW9uLGUscikuY2FsbCh4LnNldFNpemUsbixpKX0seC50cmFuc2xhdGVQb2ludD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLmMycCh0LngpLGE9bi5jMnAodC55KTtyZXR1cm4hIShvKGkpJiZvKGEpJiZlLm5vZGUoKSkmJigidGV4dCI9PT1lLm5vZGUoKS5ub2RlTmFtZT9lLmF0dHIoIngiLGkpLmF0dHIoInkiLGEpOmUuYXR0cigidHJhbnNmb3JtIixmKGksYSkpLCEwKX0seC50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyk7eC50cmFuc2xhdGVQb2ludCh0LGksZSxyKX0pKX0seC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2UuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UodCxpKSYmbi5pc1B0V2l0aGluUmFuZ2UodCxhKT9udWxsOiJub25lIil9LHguaGlkZU91dHNpZGVSYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSl7dmFyIHI9ZS54YXhpcyxpPWUueWF4aXM7dC5lYWNoKChmdW5jdGlvbihlKXt2YXIgYT1lWzBdLnRyYWNlLG89YS54Y2FsZW5kYXIscz1hLnljYWxlbmRhcixjPWwudHJhY2VJcyhhLCJiYXItbGlrZSIpPyIuYmFydGV4dCI6Ii5wb2ludCwudGV4dHBvaW50Ijt0LnNlbGVjdEFsbChjKS5lYWNoKChmdW5jdGlvbih0KXt4LmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LG4uc2VsZWN0KHRoaXMpLHIsaSxvLHMpfSkpfSkpfX0seC5jcmlzcFJvdW5kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmbyhlKT90Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/ZTplPDE/MTpNYXRoLnJvdW5kKGUpOnJ8fDB9LHguc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89cnx8YS53aWR0aHx8MCxzPWl8fGEuZGFzaHx8IiI7Yy5zdHJva2UoZSxufHxhLmNvbG9yKSx4LmRhc2hMaW5lKGUscyxvKX0seC5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUscixpKXt0LnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1lfHxhLndpZHRofHwwLHM9aXx8YS5kYXNofHwiIjtuLnNlbGVjdCh0aGlzKS5jYWxsKGMuc3Ryb2tlLHJ8fGEuY29sb3IpLmNhbGwoeC5kYXNoTGluZSxzLG8pfSkpfSx4LmRhc2hMaW5lPWZ1bmN0aW9uKHQsZSxyKXtyPStyfHwwLGU9eC5kYXNoU3R5bGUoZSxyKSx0LnN0eWxlKHsic3Ryb2tlLWRhc2hhcnJheSI6ZSwic3Ryb2tlLXdpZHRoIjpyKyJweCJ9KX0seC5kYXNoU3R5bGU9ZnVuY3Rpb24odCxlKXtlPStlfHwxO3ZhciByPU1hdGgubWF4KGUsMyk7cmV0dXJuInNvbGlkIj09PXQ/dD0iIjoiZG90Ij09PXQ/dD1yKyJweCwiK3IrInB4IjoiZGFzaCI9PT10P3Q9MypyKyJweCwiKzMqcisicHgiOiJsb25nZGFzaCI9PT10P3Q9NSpyKyJweCwiKzUqcisicHgiOiJkYXNoZG90Ij09PXQ/dD0zKnIrInB4LCIrcisicHgsIityKyJweCwiK3IrInB4IjoibG9uZ2Rhc2hkb3QiPT09dCYmKHQ9NSpyKyJweCwiKzIqcisicHgsIityKyJweCwiKzIqcisicHgiKSx0fSx4LnNpbmdsZUZpbGxTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT0oKChuLnNlbGVjdCh0Lm5vZGUoKSkuZGF0YSgpWzBdfHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmZpbGxjb2xvcjtlJiZ0LmNhbGwoYy5maWxsLGUpfSx4LmZpbGxHcm91cFN0eWxlPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dFswXS50cmFjZSYmZS5jYWxsKGMuZmlsbCx0WzBdLnRyYWNlLmZpbGxjb2xvcil9KSl9O3ZhciBiPXQoIi4vc3ltYm9sX2RlZnMiKTt4LnN5bWJvbE5hbWVzPVtdLHguc3ltYm9sRnVuY3M9W10seC5zeW1ib2xOZWVkTGluZXM9e30seC5zeW1ib2xOb0RvdD17fSx4LnN5bWJvbE5vRmlsbD17fSx4LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMoYikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9Ylt0XSxyPWUubjt4LnN5bWJvbExpc3QucHVzaChyLFN0cmluZyhyKSx0LHIrMTAwLFN0cmluZyhyKzEwMCksdCsiLW9wZW4iKSx4LnN5bWJvbE5hbWVzW3JdPXQseC5zeW1ib2xGdW5jc1tyXT1lLmYsZS5uZWVkTGluZSYmKHguc3ltYm9sTmVlZExpbmVzW3JdPSEwKSxlLm5vRG90P3guc3ltYm9sTm9Eb3Rbcl09ITA6eC5zeW1ib2xMaXN0LnB1c2gocisyMDAsU3RyaW5nKHIrMjAwKSx0KyItZG90IixyKzMwMCxTdHJpbmcociszMDApLHQrIi1vcGVuLWRvdCIpLGUubm9GaWxsJiYoeC5zeW1ib2xOb0ZpbGxbcl09ITApfSkpO3ZhciBfPXguc3ltYm9sTmFtZXMubGVuZ3RoO2Z1bmN0aW9uIHcodCxlKXt2YXIgcj10JTEwMDtyZXR1cm4geC5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwPyJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiOiIiKX14LnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZihvKHQpKXQ9K3Q7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKCItb3BlbiIpPjAmJihlPTEwMCx0PXQucmVwbGFjZSgiLW9wZW4iLCIiKSksdC5pbmRleE9mKCItZG90Iik+MCYmKGUrPTIwMCx0PXQucmVwbGFjZSgiLWRvdCIsIiIpKSwodD14LnN5bWJvbE5hbWVzLmluZGV4T2YodCkpPj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj1ffHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgVD17eDE6MSx4MjowLHkxOjAseTI6MH0saz17eDE6MCx4MjowLHkxOjEseTI6MH0sQT1hKCJ+ZiIpLE09e3JhZGlhbDp7bm9kZToicmFkaWFsR3JhZGllbnQifSxyYWRpYWxyZXZlcnNlZDp7bm9kZToicmFkaWFsR3JhZGllbnQiLHJldmVyc2VkOiEwfSxob3Jpem9udGFsOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6VH0saG9yaXpvbnRhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6VCxyZXZlcnNlZDohMH0sdmVydGljYWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczprfSx2ZXJ0aWNhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6ayxyZXZlcnNlZDohMH19O3guZ3JhZGllbnQ9ZnVuY3Rpb24odCxlLHIsYSxvLGwpe2Zvcih2YXIgdT1vLmxlbmd0aCxmPU1bYV0saD1uZXcgQXJyYXkodSkscD0wO3A8dTtwKyspZi5yZXZlcnNlZD9oW3UtMS1wXT1bQSgxMDAqKDEtb1twXVswXSkpLG9bcF1bMV1dOmhbcF09W0EoMTAwKm9bcF1bMF0pLG9bcF1bMV1dO3ZhciBkPWUuX2Z1bGxMYXlvdXQsbT0iZyIrZC5fdWlkKyItIityLGc9ZC5fZGVmcy5zZWxlY3QoIi5ncmFkaWVudHMiKS5zZWxlY3RBbGwoIiMiK20pLmRhdGEoW2EraC5qb2luKCI7IildLGkuaWRlbnRpdHkpO2cuZXhpdCgpLnJlbW92ZSgpLGcuZW50ZXIoKS5hcHBlbmQoZi5ub2RlKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2YuYXR0cnMmJnQuYXR0cihmLmF0dHJzKSx0LmF0dHIoImlkIixtKTt2YXIgZT10LnNlbGVjdEFsbCgic3RvcCIpLmRhdGEoaCk7ZS5leGl0KCkucmVtb3ZlKCksZS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9cyh0WzFdKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtvZmZzZXQ6dFswXSsiJSIsInN0b3AtY29sb3IiOmMudGlueVJHQihlKSwic3RvcC1vcGFjaXR5IjplLmdldEFscGhhKCl9KX0pKX0pKSx0LnN0eWxlKGwsRChtLGUpKS5zdHlsZShsKyItb3BhY2l0eSIsbnVsbCk7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuIi4iK3QuYXR0cigiY2xhc3MiKS5yZXBsYWNlKC9ccy9nLCIuIil9LHk9dihuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKSkrIj4iK3YodCk7ZC5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzW3ldPTF9LHgucGF0dGVybj1mdW5jdGlvbih0LGUscixhLG8scyxsLHUsZixoLHAsZCl7dmFyIG09ImxlZ2VuZCI9PT1lO3UmJigib3ZlcmxheSI9PT1mPyhoPXUscD1jLmNvbnRyYXN0KGgpKTooaD12b2lkIDAscD11KSk7dmFyIGcsdix5LHgsYixfLHcsVCxrLEEsTSxTPXIuX2Z1bGxMYXlvdXQsRT0icCIrUy5fdWlkKyItIithLEw9e307c3dpdGNoKG8pe2Nhc2UiLyI6Zz1zKk1hdGguc3FydCgyKSx2PXMqTWF0aC5zcXJ0KDIpLF89InBhdGgiLEw9e2Q6eT0iTS0iK2cvNCsiLCIrdi80KyJsIitnLzIrIiwtIit2LzIrIk0wLCIrdisiTCIrZysiLDBNIitnLzQqMysiLCIrdi80KjUrImwiK2cvMisiLC0iK3YvMixvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6KHg9bCpzKSsicHgifTticmVhaztjYXNlIlxcIjpnPXMqTWF0aC5zcXJ0KDIpLHY9cypNYXRoLnNxcnQoMiksXz0icGF0aCIsTD17ZDp5PSJNIitnLzQqMysiLC0iK3YvNCsibCIrZy8yKyIsIit2LzIrIk0wLDBMIitnKyIsIit2KyJNLSIrZy80KyIsIit2LzQqMysibCIrZy8yKyIsIit2LzIsb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOih4PWwqcykrInB4In07YnJlYWs7Y2FzZSJ4IjpnPXMqTWF0aC5zcXJ0KDIpLHY9cypNYXRoLnNxcnQoMikseT0iTS0iK2cvNCsiLCIrdi80KyJsIitnLzIrIiwtIit2LzIrIk0wLCIrdisiTCIrZysiLDBNIitnLzQqMysiLCIrdi80KjUrImwiK2cvMisiLC0iK3YvMisiTSIrZy80KjMrIiwtIit2LzQrImwiK2cvMisiLCIrdi8yKyJNMCwwTCIrZysiLCIrdisiTS0iK2cvNCsiLCIrdi80KjMrImwiK2cvMisiLCIrdi8yLHg9cy1zKk1hdGguc3FydCgxLWwpLF89InBhdGgiLEw9e2Q6eSxvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6eCsicHgifTticmVhaztjYXNlInwiOl89InBhdGgiLF89InBhdGgiLEw9e2Q6eT0iTSIrKGc9cykvMisiLDBMIitnLzIrIiwiKyh2PXMpLG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjooeD1sKnMpKyJweCJ9O2JyZWFrO2Nhc2UiLSI6Xz0icGF0aCIsXz0icGF0aCIsTD17ZDp5PSJNMCwiKyh2PXMpLzIrIkwiKyhnPXMpKyIsIit2LzIsb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOih4PWwqcykrInB4In07YnJlYWs7Y2FzZSIrIjpfPSJwYXRoIix5PSJNIisoZz1zKS8yKyIsMEwiK2cvMisiLCIrKHY9cykrIk0wLCIrdi8yKyJMIitnKyIsIit2LzIseD1zLXMqTWF0aC5zcXJ0KDEtbCksXz0icGF0aCIsTD17ZDp5LG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjp4KyJweCJ9O2JyZWFrO2Nhc2UiLiI6Zz1zLHY9cyxsPE1hdGguUEkvND9iPU1hdGguc3FydChsKnMqcy9NYXRoLlBJKToodz1sLFQ9TWF0aC5QSS80LGs9MSxBPXMvMixNPXMvTWF0aC5zcXJ0KDIpLGI9QSsoTS1BKSoody1UKS8oay1UKSksXz0iY2lyY2xlIixMPXtjeDpnLzIsY3k6di8yLHI6YixvcGFjaXR5OmQsZmlsbDpwfX12YXIgQz1bb3x8Im5vU2giLGh8fCJub0JnIixwfHwibm9GZyIscyxsXS5qb2luKCI7IiksUD1TLl9kZWZzLnNlbGVjdCgiLnBhdHRlcm5zIikuc2VsZWN0QWxsKCIjIitFKS5kYXRhKFtDXSxpLmlkZW50aXR5KTtQLmV4aXQoKS5yZW1vdmUoKSxQLmVudGVyKCkuYXBwZW5kKCJwYXR0ZXJuIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtpZih0LmF0dHIoe2lkOkUsd2lkdGg6ZysicHgiLGhlaWdodDp2KyJweCIscGF0dGVyblVuaXRzOiJ1c2VyU3BhY2VPblVzZSIscGF0dGVyblRyYW5zZm9ybTptPyJzY2FsZSgwLjgpIjoiIn0pLGgpe3ZhciBlPXQuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShbMF0pO2UuZXhpdCgpLnJlbW92ZSgpLGUuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKHt3aWR0aDpnKyJweCIsaGVpZ2h0OnYrInB4IixmaWxsOmh9KX12YXIgcj10LnNlbGVjdEFsbChfKS5kYXRhKFswXSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZChfKS5hdHRyKEwpfSkpLHQuc3R5bGUoImZpbGwiLEQoRSxyKSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsbnVsbCksdC5jbGFzc2VkKCJwYXR0ZXJuX2ZpbGxlZCIsITApO3ZhciBJPSIuIituLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5hdHRyKCJjbGFzcyIpLnJlcGxhY2UoL1xzL2csIi4iKSsiPi5wYXR0ZXJuX2ZpbGxlZCI7Uy5fcGF0dGVyblVybFF1ZXJ5UGFydHNbSV09MX0seC5pbml0R3JhZGllbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aS5lbnN1cmVTaW5nbGUoZS5fZGVmcywiZyIsImdyYWRpZW50cyIpLnNlbGVjdEFsbCgibGluZWFyR3JhZGllbnQscmFkaWFsR3JhZGllbnQiKS5yZW1vdmUoKSxlLl9ncmFkaWVudFVybFF1ZXJ5UGFydHM9e319LHguaW5pdFBhdHRlcm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aS5lbnN1cmVTaW5nbGUoZS5fZGVmcywiZyIsInBhdHRlcm5zIikuc2VsZWN0QWxsKCJwYXR0ZXJuIikucmVtb3ZlKCksZS5fcGF0dGVyblVybFF1ZXJ5UGFydHM9e319LHguZ2V0UGF0dGVybkF0dHI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0JiZpLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnI6dH0seC5wb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk9eC5tYWtlUG9pbnRTdHlsZUZucyhlKTt0LmVhY2goKGZ1bmN0aW9uKHQpe3guc2luZ2xlUG9pbnRTdHlsZSh0LG4uc2VsZWN0KHRoaXMpLGUsaSxyKX0pKX19LHguc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXIubWFya2VyLHM9by5saW5lO2lmKGUuc3R5bGUoIm9wYWNpdHkiLG4uc2VsZWN0ZWRPcGFjaXR5Rm4/bi5zZWxlY3RlZE9wYWNpdHlGbih0KTp2b2lkIDA9PT10Lm1vP28ub3BhY2l0eTp0Lm1vKSxuLm1zMm1yYyl7dmFyIGw7bD0idmFyaW91cyI9PT10Lm1zfHwidmFyaW91cyI9PT1vLnNpemU/MzpuLm1zMm1yYyh0Lm1zKSx0Lm1yYz1sLG4uc2VsZWN0ZWRTaXplRm4mJihsPXQubXJjPW4uc2VsZWN0ZWRTaXplRm4odCkpO3ZhciB1PXguc3ltYm9sTnVtYmVyKHQubXh8fG8uc3ltYm9sKXx8MDt0Lm9tPXUlMjAwPj0xMDAsZS5hdHRyKCJkIix3KHUsbCkpfXZhciBmLGgscCxkPSExO2lmKHQuc28pcD1zLm91dGxpZXJ3aWR0aCxoPXMub3V0bGllcmNvbG9yLGY9by5vdXRsaWVyY29sb3I7ZWxzZXt2YXIgbT0oc3x8e30pLndpZHRoO3A9KHQubWx3KzF8fG0rMXx8KHQudHJhY2U/KHQudHJhY2UubWFya2VyLmxpbmV8fHt9KS53aWR0aDowKSsxKS0xfHwwLGg9Im1sYyJpbiB0P3QubWxjYz1uLmxpbmVTY2FsZSh0Lm1sYyk6aS5pc0FycmF5T3JUeXBlZEFycmF5KHMuY29sb3IpP2MuZGVmYXVsdExpbmU6cy5jb2xvcixpLmlzQXJyYXlPclR5cGVkQXJyYXkoby5jb2xvcikmJihmPWMuZGVmYXVsdExpbmUsZD0hMCksZj0ibWMiaW4gdD90Lm1jYz1uLm1hcmtlclNjYWxlKHQubWMpOm8uY29sb3J8fCJyZ2JhKDAsMCwwLDApIixuLnNlbGVjdGVkQ29sb3JGbiYmKGY9bi5zZWxlY3RlZENvbG9yRm4odCkpfWlmKHQub20pZS5jYWxsKGMuc3Ryb2tlLGYpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoocHx8MSkrInB4IixmaWxsOiJub25lIn0pO2Vsc2V7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwodC5pc0JsYW5rPzA6cCkrInB4Iik7dmFyIGc9by5ncmFkaWVudCx2PXQubWd0O3Y/ZD0hMDp2PWcmJmcudHlwZSxpLmlzQXJyYXlPclR5cGVkQXJyYXkodikmJih2PXZbMF0sTVt2XXx8KHY9MCkpO3ZhciB5PW8ucGF0dGVybixiPXkmJnguZ2V0UGF0dGVybkF0dHIoeS5zaGFwZSx0LmksIiIpO2lmKHYmJiJub25lIiE9PXYpe3ZhciBfPXQubWdjO18/ZD0hMDpfPWcuY29sb3I7dmFyIFQ9ci51aWQ7ZCYmKFQrPSItIit0LmkpLHguZ3JhZGllbnQoZSxhLFQsdixbWzAsX10sWzEsZl1dLCJmaWxsIil9ZWxzZSBpZihiKXt2YXIgaz14LmdldFBhdHRlcm5BdHRyKHkuYmdjb2xvcix0LmksbnVsbCksQT14LmdldFBhdHRlcm5BdHRyKHkuZmdjb2xvcix0LmksbnVsbCksUz15LmZnb3BhY2l0eSxFPXguZ2V0UGF0dGVybkF0dHIoeS5zaXplLHQuaSw4KSxMPXguZ2V0UGF0dGVybkF0dHIoeS5zb2xpZGl0eSx0LmksLjMpLEM9dC5tY2N8fGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LnNoYXBlKXx8aS5pc0FycmF5T3JUeXBlZEFycmF5KHkuYmdjb2xvcil8fGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LnNpemUpfHxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zb2xpZGl0eSksUD1yLnVpZDtDJiYoUCs9Ii0iK3QuaSkseC5wYXR0ZXJuKGUsInBvaW50IixhLFAsYixFLEwsdC5tY2MseS5maWxsbW9kZSxrLEEsUyl9ZWxzZSBjLmZpbGwoZSxmKTtwJiZjLnN0cm9rZShlLGgpfX0seC5tYWtlUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFya2VyO3JldHVybiBlLm1hcmtlclNjYWxlPXgudHJ5Q29sb3JzY2FsZShyLCIiKSxlLmxpbmVTY2FsZT14LnRyeUNvbG9yc2NhbGUociwibGluZSIpLGwudHJhY2VJcyh0LCJzeW1ib2xzIikmJihlLm1zMm1yYz1nLmlzQnViYmxlKHQpP3YodCk6ZnVuY3Rpb24oKXtyZXR1cm4oci5zaXplfHw2KS8yfSksdC5zZWxlY3RlZHBvaW50cyYmaS5leHRlbmRGbGF0KGUseC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHQpKSxlfSx4Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30sYT10Lm1hcmtlcnx8e30sbz1yLm1hcmtlcnx8e30scz1uLm1hcmtlcnx8e30sYz1hLm9wYWNpdHksdT1vLm9wYWNpdHksZj1zLm9wYWNpdHksaD12b2lkIDAhPT11LHA9dm9pZCAwIT09ZjsoaS5pc0FycmF5T3JUeXBlZEFycmF5KGMpfHxofHxwKSYmKGUuc2VsZWN0ZWRPcGFjaXR5Rm49ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwPT09dC5tbz9hLm9wYWNpdHk6dC5tbztyZXR1cm4gdC5zZWxlY3RlZD9oP3U6ZTpwP2Y6bSplfSk7dmFyIGQ9YS5jb2xvcixnPW8uY29sb3Isdj1zLmNvbG9yOyhnfHx2KSYmKGUuc2VsZWN0ZWRDb2xvckZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWNjfHxkO3JldHVybiB0LnNlbGVjdGVkP2d8fGU6dnx8ZX0pO3ZhciB5PWEuc2l6ZSx4PW8uc2l6ZSxiPXMuc2l6ZSxfPXZvaWQgMCE9PXgsdz12b2lkIDAhPT1iO3JldHVybiBsLnRyYWNlSXModCwic3ltYm9scyIpJiYoX3x8dykmJihlLnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubXJjfHx5LzI7cmV0dXJuIHQuc2VsZWN0ZWQ/Xz94LzI6ZTp3P2IvMjplfSksZX0seC5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10LnRleHRmb250fHx7fSxhPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30scz1pLmNvbG9yLGw9YS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIGUuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10LnRjfHxzO3JldHVybiB0LnNlbGVjdGVkP2x8fGU6dXx8KGw/ZTpjLmFkZE9wYWNpdHkoZSxtKSl9LGV9LHguc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXgubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhlKSxpPWUubWFya2VyfHx7fSxhPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmEucHVzaCgoZnVuY3Rpb24odCxlKXt0LnN0eWxlKCJvcGFjaXR5IixyLnNlbGVjdGVkT3BhY2l0eUZuKGUpKX0pKSxyLnNlbGVjdGVkQ29sb3JGbiYmYS5wdXNoKChmdW5jdGlvbih0LGUpe2MuZmlsbCh0LHIuc2VsZWN0ZWRDb2xvckZuKGUpKX0pKSxyLnNlbGVjdGVkU2l6ZUZuJiZhLnB1c2goKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5teHx8aS5zeW1ib2x8fDAsYT1yLnNlbGVjdGVkU2l6ZUZuKGUpO3QuYXR0cigiZCIsdyh4LnN5bWJvbE51bWJlcihuKSxhKSksZS5tcmMyPWF9KSksYS5sZW5ndGgmJnQuZWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4uc2VsZWN0KHRoaXMpLHI9MDtyPGEubGVuZ3RoO3IrKylhW3JdKGUsdCl9KSl9fSx4LnRyeUNvbG9yc2NhbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2kubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKTp0O2lmKHIpe3ZhciBuPXIuY29sb3I7aWYoKHIuY29sb3JzY2FsZXx8ci5fY29sb3JBeCkmJmkuaXNBcnJheU9yVHlwZWRBcnJheShuKSlyZXR1cm4gdS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uocil9cmV0dXJuIGkuaWRlbnRpdHl9O3ZhciBTPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIEUodCxlLHIsaSxhKXt2YXIgbz1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKSxzPS0xIT09ZS5pbmRleE9mKCJ0b3AiKT8idG9wIjotMSE9PWUuaW5kZXhPZigiYm90dG9tIik/ImJvdHRvbSI6Im1pZGRsZSIsbD0tMSE9PWUuaW5kZXhPZigibGVmdCIpPyJlbmQiOi0xIT09ZS5pbmRleE9mKCJyaWdodCIpPyJzdGFydCI6Im1pZGRsZSIsYz1pP2kvLjgrMTowLHU9KGgubGluZUNvdW50KHQpLTEpKmQrMSxwPVNbbF0qYyxtPS43NSpyK1Nbc10qYysoU1tzXS0xKSp1KnIvMjt0LmF0dHIoInRleHQtYW5jaG9yIixsKSxhfHxvLmF0dHIoInRyYW5zZm9ybSIsZihwLG0pKX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9dC50c3x8ZS50ZXh0Zm9udC5zaXplO3JldHVybiBvKHIpJiZyPjA/cjowfXgudGV4dFBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQuc2l6ZSgpKXt2YXIgYTtpZihlLnNlbGVjdGVkcG9pbnRzKXt2YXIgbz14Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyhlKTthPW8uc2VsZWN0ZWRUZXh0Q29sb3JGbn12YXIgcz1lLnRleHR0ZW1wbGF0ZSxsPXIuX2Z1bGxMYXlvdXQ7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgbz1uLnNlbGVjdCh0aGlzKSxjPXM/aS5leHRyYWN0T3B0aW9uKHQsZSwidHh0IiwidGV4dHRlbXBsYXRlIik6aS5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7aWYoY3x8MD09PWMpe2lmKHMpe3ZhciB1PWUuX21vZHVsZS5mb3JtYXRMYWJlbHMsZj11P3UodCxlLGwpOnt9LHA9e307eShwLGUsdC5pKTt2YXIgZD1lLl9tZXRhfHx7fTtjPWkudGV4dHRlbXBsYXRlU3RyaW5nKGMsZixsLl9kM2xvY2FsZSxwLHQsZCl9dmFyIG09dC50cHx8ZS50ZXh0cG9zaXRpb24sZz1MKHQsZSksdj1hP2EodCk6dC50Y3x8ZS50ZXh0Zm9udC5jb2xvcjtvLmNhbGwoeC5mb250LHQudGZ8fGUudGV4dGZvbnQuZmFtaWx5LGcsdikudGV4dChjKS5jYWxsKGguY29udmVydFRvVHNwYW5zLHIpLmNhbGwoRSxtLGcsdC5tcmMpfWVsc2Ugby5yZW1vdmUoKX0pKX19LHguc2VsZWN0ZWRUZXh0U3R5bGU9ZnVuY3Rpb24odCxlKXtpZih0LnNpemUoKSYmZS5zZWxlY3RlZHBvaW50cyl7dmFyIHI9eC5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXIuc2VsZWN0ZWRUZXh0Q29sb3JGbih0KSxvPXQudHB8fGUudGV4dHBvc2l0aW9uLHM9TCh0LGUpO2MuZmlsbChpLGEpO3ZhciB1PWwudHJhY2VJcyhlLCJiYXItbGlrZSIpO0UoaSxvLHMsdC5tcmMyfHx0Lm1yYyx1KX0pKX19O2Z1bmN0aW9uIEModCxlLHIsaSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9clswXS1lWzBdLGw9clsxXS1lWzFdLGM9TWF0aC5wb3coYSphK28qbywuMjUpLHU9TWF0aC5wb3cocypzK2wqbCwuMjUpLGY9KHUqdSphLWMqYypzKSppLGg9KHUqdSpvLWMqYypsKSppLHA9Myp1KihjK3UpLGQ9MypjKihjK3UpO3JldHVybltbbi5yb3VuZChlWzBdKyhwJiZmL3ApLDIpLG4ucm91bmQoZVsxXSsocCYmaC9wKSwyKV0sW24ucm91bmQoZVswXS0oZCYmZi9kKSwyKSxuLnJvdW5kKGVbMV0tKGQmJmgvZCksMildXX14LnNtb290aG9wZW49ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKTt2YXIgcixuPSJNIit0WzBdLGk9W107Zm9yKHI9MTtyPHQubGVuZ3RoLTE7cisrKWkucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKG4rPSJRIitpWzBdWzBdKyIgIit0WzFdLHI9MjtyPHQubGVuZ3RoLTE7cisrKW4rPSJDIitpW3ItMl1bMV0rIiAiK2lbci0xXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IlEiK2lbdC5sZW5ndGgtM11bMV0rIiAiK3RbdC5sZW5ndGgtMV19LHguc21vb3RoY2xvc2VkPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIikrIloiO3ZhciByLG49Ik0iK3RbMF0saT10Lmxlbmd0aC0xLGE9W0ModFtpXSx0WzBdLHRbMV0sZSldO2ZvcihyPTE7cjxpO3IrKylhLnB1c2goQyh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihhLnB1c2goQyh0W2ktMV0sdFtpXSx0WzBdLGUpKSxyPTE7cjw9aTtyKyspbis9IkMiK2Fbci0xXVsxXSsiICIrYVtyXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IkMiK2FbaV1bMV0rIiAiK2FbMF1bMF0rIiAiK3RbMF0rIloifTt2YXIgUD17aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9LHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSxodmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZCgodFswXStlWzBdKS8yLDIpKyJWIituLnJvdW5kKGVbMV0sMikrIkgiK24ucm91bmQoZVswXSwyKX0sdmh2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoKHRbMV0rZVsxXSkvMiwyKSsiSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9fSxJPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkwiK24ucm91bmQoZVswXSwyKSsiLCIrbi5yb3VuZChlWzFdLDIpfTt4LnN0ZXBzPWZ1bmN0aW9uKHQpe3ZhciBlPVBbdF18fEk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0iTSIrbi5yb3VuZCh0WzBdWzBdLDIpKyIsIituLnJvdW5kKHRbMF1bMV0sMiksaT0xO2k8dC5sZW5ndGg7aSsrKXIrPWUodFtpLTFdLHRbaV0pO3JldHVybiByfX0seC5tYWtlVGVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9aS5lbnN1cmVTaW5nbGVCeUlkKG4uc2VsZWN0KCJib2R5IiksInN2ZyIsImpzLXBsb3RseS10ZXN0ZXIiLChmdW5jdGlvbih0KXt0LmF0dHIocC5zdmdBdHRycykuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDAwcHgiLHRvcDoiLTEwMDAwcHgiLHdpZHRoOiI5MDAwcHgiLGhlaWdodDoiOTAwMHB4Iiwiei1pbmRleCI6IjEifSl9KSksZT1pLmVuc3VyZVNpbmdsZSh0LCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KX0pKTt4LnRlc3Rlcj10LHgudGVzdHJlZj1lfSx4LnNhdmVkQkJveGVzPXt9O3ZhciBPPTA7ZnVuY3Rpb24geih0KXt2YXIgZT10LmdldEF0dHJpYnV0ZSgiZGF0YS11bmZvcm1hdHRlZCIpO2lmKG51bGwhPT1lKXJldHVybiBlK3QuZ2V0QXR0cmlidXRlKCJkYXRhLW1hdGgiKSt0LmdldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiKSt0LmdldEF0dHJpYnV0ZSgic3R5bGUiKX1mdW5jdGlvbiBEKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9ZS5fY29udGV4dCxuPXIuX2V4cG9ydGVkUGxvdD8iIjpyLl9iYXNlVXJsfHwiIjtyZXR1cm4gbj8idXJsKCciK24rIiMiK3QrIicpIjoidXJsKCMiK3QrIikifXguYkJveD1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzO2lmKHJ8fChyPXoodCkpLHIpe2lmKGE9eC5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGEpfWVsc2UgaWYoMT09PXQuY2hpbGROb2Rlcy5sZW5ndGgpe3ZhciBsPXQuY2hpbGROb2Rlc1swXTtpZihyPXoobCkpe3ZhciBjPStsLmdldEF0dHJpYnV0ZSgieCIpfHwwLHU9K2wuZ2V0QXR0cmlidXRlKCJ5Iil8fDAsZj1sLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7aWYoIWYpe3ZhciBwPXguYkJveChsLCExLHIpO3JldHVybiBjJiYocC5sZWZ0Kz1jLHAucmlnaHQrPWMpLHUmJihwLnRvcCs9dSxwLmJvdHRvbSs9dSkscH1pZihyKz0ifiIrYysifiIrdSsifiIrZixhPXguc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxhKX19ZT9vPXQ6KHM9eC50ZXN0ZXIubm9kZSgpLG89dC5jbG9uZU5vZGUoITApLHMuYXBwZW5kQ2hpbGQobykpLG4uc2VsZWN0KG8pLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuY2FsbChoLnBvc2l0aW9uVGV4dCwwLDApO3ZhciBkPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT14LnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fHMucmVtb3ZlQ2hpbGQobyk7dmFyIGc9e2hlaWdodDpkLmhlaWdodCx3aWR0aDpkLndpZHRoLGxlZnQ6ZC5sZWZ0LW0ubGVmdCx0b3A6ZC50b3AtbS50b3AscmlnaHQ6ZC5yaWdodC1tLmxlZnQsYm90dG9tOmQuYm90dG9tLW0udG9wfTtyZXR1cm4gTz49MWU0JiYoeC5zYXZlZEJCb3hlcz17fSxPPTApLHImJih4LnNhdmVkQkJveGVzW3JdPWcpLE8rKyxpLmV4dGVuZEZsYXQoe30sZyl9LHguc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJjbGlwLXBhdGgiLEQoZSxyKSl9LHguZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJ0cmFuc2xhdGVcKCgtP1xkKlwuP1xkKilbXi1cZF0qKC0/XGQqXC4/XGQqKVteXGRdLiovLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkpLnNwbGl0KCIgIik7cmV0dXJue3g6K2VbMF18fDAseTorZVsxXXx8MH19LHguc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxhPWEucmVwbGFjZSgvKFxidHJhbnNsYXRlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz1mKGUscikpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9LHguZ2V0U2NhbGU9ZnVuY3Rpb24odCl7dmFyIGU9KHRbdC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIl0oInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZSgvLipcYnNjYWxlXCgoXGQqXC4/XGQqKVteXGRdKihcZCpcLj9cZCopW15cZF0uKi8sKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KSkuc3BsaXQoIiAiKTtyZXR1cm57eDorZVswXXx8MSx5OitlWzFdfHwxfX0seC5zZXRTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixpPXQuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsYT10W25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIGU9ZXx8MSxyPXJ8fDEsYT1hLnJlcGxhY2UoLyhcYnNjYWxlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz0ic2NhbGUoIitlKyIsIityKyIpIikudHJpbSgpLHRbaV0oInRyYW5zZm9ybSIsYSksYX07dmFyIFI9L1xzKnNjLiovO3guc2V0UG9pbnRHcm91cFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXtpZihlPWV8fDEscj1yfHwxLHQpe3ZhciBuPTE9PT1lJiYxPT09cj8iIjoic2NhbGUoIitlKyIsIityKyIpIjt0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoUiwiIik7dD0odCs9bikudHJpbSgpLHRoaXMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpfSkpfX07dmFyIEY9L3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvO3guc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKHQsZSxyKXt0JiZ0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQsaT1uLnNlbGVjdCh0aGlzKSxhPWkuc2VsZWN0KCJ0ZXh0Iik7aWYoYS5ub2RlKCkpe3ZhciBvPXBhcnNlRmxvYXQoYS5hdHRyKCJ4Iil8fDApLHM9cGFyc2VGbG9hdChhLmF0dHIoInkiKXx8MCksbD0oaS5hdHRyKCJ0cmFuc2Zvcm0iKXx8IiIpLm1hdGNoKEYpO3Q9MT09PWUmJjE9PT1yP1tdOltmKG8scyksInNjYWxlKCIrZSsiLCIrcisiKSIsZigtbywtcyldLGwmJnQucHVzaChsKSxpLmF0dHIoInRyYW5zZm9ybSIsdC5qb2luKCIiKSl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjQwMiwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzgsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjo5NDMsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjo5NTEsIi4uL2NvbG9yIjozNjYsIi4uL2NvbG9yc2NhbGUiOjM3OCwiLi9zeW1ib2xfZGVmcyI6Mzg5LCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjE5MCx0aW55Y29sb3IyOjMxMn1dLDM4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIik7ZS5leHBvcnRzPXtjaXJjbGU6e246MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifX0sc3F1YXJlOntuOjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9fSxkaWFtb25kOntuOjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWiJ9fSxjcm9zczp7bjozLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNCp0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSCIrZSsiViIrcisiSC0iK2UrIlYiK2UrIkgtIityKyJWLSIrZSsiSC0iK2UrIlYtIityKyJIIitlKyJWLSIrZSsiSCIrcisiWiJ9fSx4OntuOjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC44KnQvTWF0aC5zcXJ0KDIpLDIpLHI9ImwiK2UrIiwiK2UsaT0ibCIrZSsiLC0iK2UsYT0ibC0iK2UrIiwtIitlLG89ImwtIitlKyIsIitlO3JldHVybiJNMCwiK2UrcitpK2EraSthK28rYStvK3IrbytyKyJaIn19LCJ0cmlhbmdsZS11cCI6e246NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwiK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwtIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWRvd24iOntuOjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsLSIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLCIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1sZWZ0Ijp7bjo3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwtIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtcmlnaHQiOntuOjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwiK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1uZSI6e246OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrZSsiViIrcisiWiJ9fSwidHJpYW5nbGUtc2UiOntuOjEwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrZSsiLC0iK3IrIlYiK2UrIkgtIityKyJaIn19LCJ0cmlhbmdsZS1zdyI6e246MTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJILSIrZSsiVi0iK3IrIloifX0sInRyaWFuZ2xlLW53Ijp7bjoxMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIitlKyIsIityKyJWLSIrZSsiSCIrcisiWiJ9fSxwZW50YWdvbjp7bjoxMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjk1MSp0LDIpLHI9bi5yb3VuZCguNTg4KnQsMiksaT1uLnJvdW5kKC10LDIpLGE9bi5yb3VuZCgtLjMwOSp0LDIpO3JldHVybiJNIitlKyIsIithKyJMIityKyIsIituLnJvdW5kKC44MDkqdCwyKSsiSC0iK3IrIkwtIitlKyIsIithKyJMMCwiK2krIloifX0saGV4YWdvbjp7bjoxNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNIitpKyIsLSIrcisiViIrcisiTDAsIitlKyJMLSIraSsiLCIrcisiVi0iK3IrIkwwLC0iK2UrIloifX0saGV4YWdvbjI6e246MTUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTS0iK3IrIiwiK2krIkgiK3IrIkwiK2UrIiwwTCIrcisiLC0iK2krIkgtIityKyJMLSIrZSsiLDBaIn19LG9jdGFnb246e246MTYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45MjQqdCwyKSxyPW4ucm91bmQoLjM4Myp0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK3IrIkwiK2UrIiwtIityKyJWIityKyJMIityKyIsIitlKyJILSIrcisiTC0iK2UrIiwiK3IrIlYtIityKyJaIn19LHN0YXI6e246MTcsZjpmdW5jdGlvbih0KXt2YXIgZT0xLjQqdCxyPW4ucm91bmQoLjIyNSplLDIpLGk9bi5yb3VuZCguOTUxKmUsMiksYT1uLnJvdW5kKC4zNjMqZSwyKSxvPW4ucm91bmQoLjU4OCplLDIpLHM9bi5yb3VuZCgtZSwyKSxsPW4ucm91bmQoLS4zMDkqZSwyKSxjPW4ucm91bmQoLjExOCplLDIpLHU9bi5yb3VuZCguODA5KmUsMik7cmV0dXJuIk0iK3IrIiwiK2wrIkgiK2krIkwiK2ErIiwiK2MrIkwiK28rIiwiK3UrIkwwLCIrbi5yb3VuZCguMzgyKmUsMikrIkwtIitvKyIsIit1KyJMLSIrYSsiLCIrYysiTC0iK2krIiwiK2wrIkgtIityKyJMMCwiK3MrIloifX0saGV4YWdyYW06e246MTgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42Nip0LDIpLHI9bi5yb3VuZCguMzgqdCwyKSxpPW4ucm91bmQoLjc2KnQsMik7cmV0dXJuIk0tIitpKyIsMGwtIityKyIsLSIrZSsiaCIraSsibCIrcisiLC0iK2UrImwiK3IrIiwiK2UrImgiK2krImwtIityKyIsIitlKyJsIityKyIsIitlKyJoLSIraSsibC0iK3IrIiwiK2UrImwtIityKyIsLSIrZSsiaC0iK2krIloifX0sInN0YXItdHJpYW5nbGUtdXAiOntuOjE5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPSJBICIrYSsiLCIrYSsiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsIityK28rZSsiLCIrcitvKyIwLC0iK2krbysiLSIrZSsiLCIrcisiWiJ9fSwic3Rhci10cmlhbmdsZS1kb3duIjp7bjoyMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNIitlKyIsLSIrcitvKyItIitlKyIsLSIrcitvKyIwLCIraStvK2UrIiwtIityKyJaIn19LCJzdGFyLXNxdWFyZSI6e246MjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMSp0LDIpLHI9bi5yb3VuZCgyKnQsMiksaT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLC0iK2UraSsiLSIrZSsiLCIrZStpK2UrIiwiK2UraStlKyIsLSIrZStpKyItIitlKyIsLSIrZSsiWiJ9fSwic3Rhci1kaWFtb25kIjp7bjoyMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKDEuOSp0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwwIitpKyIwLCIrZStpK2UrIiwwIitpKyIwLC0iK2UraSsiLSIrZSsiLDBaIn19LCJkaWFtb25kLXRhbGwiOntuOjIzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNyp0LDIpLHI9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0sImRpYW1vbmQtd2lkZSI6e246MjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCguNyp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSxob3VyZ2xhc3M6e246MjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJMIitlKyIsLSIrZSsiSC0iK2UrIloifSxub0RvdDohMH0sYm93dGllOntuOjI2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJWLSIrZSsiTC0iK2UrIiwiK2UrIlYtIitlKyJaIn0sbm9Eb3Q6ITB9LCJjaXJjbGUtY3Jvc3MiOntuOjI3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY2lyY2xlLXgiOntuOjI4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0L01hdGguc3FydCgyKSwyKTtyZXR1cm4iTSIrcisiLCIrcisiTC0iK3IrIiwtIityKyJNIityKyIsLSIrcisiTC0iK3IrIiwiK3IrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUtY3Jvc3MiOntuOjI5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS14Ijp7bjozMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlKyJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC1jcm9zcyI6e246MzEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0wLC0iK2UrIlYiK2UrIk0tIitlKyIsMEgiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC14Ijp7bjozMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMikscj1uLnJvdW5kKC42NSp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0tIityKyIsLSIrcisiTCIrcisiLCIrcisiTS0iK3IrIiwiK3IrIkwiK3IrIiwtIityfSxuZWVkTGluZTohMCxub0RvdDohMH0sImNyb3NzLXRoaW4iOntuOjMzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieC10aGluIjp7bjozNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlKyJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sYXN0ZXJpc2s6e246MzUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCguODUqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrcisiLCIrcisiTC0iK3IrIiwtIityKyJNIityKyIsLSIrcisiTC0iK3IrIiwiK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0saGFzaDp7bjozNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodC8yLDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIityKyJWLSIrcisibS0iK3IrIiwwViIrcisiTSIrcisiLCIrZSsiSC0iK3IrIm0wLC0iK3IrIkgiK3J9LG5lZWRMaW5lOiEwLG5vRmlsbDohMH0sInktdXAiOntuOjM3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitlKyIsIitpKyJMMCwwTSIrZSsiLCIraSsiTDAsME0wLC0iK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LWRvd24iOntuOjM4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitlKyIsLSIraSsiTDAsME0iK2UrIiwtIitpKyJMMCwwTTAsIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1sZWZ0Ijp7bjozOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNIitpKyIsIitlKyJMMCwwTSIraSsiLC0iK2UrIkwwLDBNLSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1yaWdodCI6e246NDAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2krIiwiK2UrIkwwLDBNLSIraSsiLC0iK2UrIkwwLDBNIityKyIsMEwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLWV3Ijp7bjo0MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0iK2UrIiwwSC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnMiOntuOjQyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1uZSI6e246NDMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1udyI6e246NDQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwiYXJyb3ctdXAiOntuOjQ1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTC0iK2UrIiwiK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1kb3duIjp7bjo0NixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwtIitlKyIsLSIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxub0RvdDohMH0sImFycm93LWxlZnQiOntuOjQ3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMIitlKyIsLSIrcisiViIrcisiWiJ9LG5vRG90OiEwfSwiYXJyb3ctcmlnaHQiOntuOjQ4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMLSIrZSsiLC0iK3IrIlYiK3IrIloifSxub0RvdDohMH0sImFycm93LWJhci11cCI6e246NDksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0tIitlKyIsMEgiK2UrIk0wLDBMLSIrZSsiLCIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImFycm93LWJhci1kb3duIjp7bjo1MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTS0iK2UrIiwwSCIrZSsiTTAsMEwtIitlKyIsLSIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImFycm93LWJhci1sZWZ0Ijp7bjo1MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwtIityKyJWIityKyJNMCwwTCIrZSsiLC0iK3IrIlYiK3IrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImFycm93LWJhci1yaWdodCI6e246NTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsLSIrcisiViIrcisiTTAsMEwtIitlKyIsLSIrcisiViIrcisiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfX19LHsiQHBsb3RseS9kMyI6NTh9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcmNlbnQiLCJjb25zdGFudCIsInNxcnQiLCJkYXRhIl0sZWRpdFR5cGU6ImNhbGMifSxzeW1tZXRyaWM6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXltaW51czp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVtaW51czp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sdHJhY2VyZWY6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSx0cmFjZXJlZm1pbnVzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sY29weV95c3R5bGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sY29weV96c3R5bGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToic3R5bGUifX19fSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi9jb21wdXRlX2Vycm9yIik7ZnVuY3Rpb24gbCh0LGUscixpKXt2YXIgbD1lWyJlcnJvcl8iK2ldfHx7fSxjPVtdO2lmKGwudmlzaWJsZSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKSl7Zm9yKHZhciB1PXMobCksZj0wO2Y8dC5sZW5ndGg7ZisrKXt2YXIgaD10W2ZdLHA9aC5pO2lmKHZvaWQgMD09PXApcD1mO2Vsc2UgaWYobnVsbD09PXApY29udGludWU7dmFyIGQ9aFtpXTtpZihuKHIuYzJsKGQpKSl7dmFyIG09dShkLHApO2lmKG4obVswXSkmJm4obVsxXSkpe3ZhciBnPWhbaSsicyJdPWQtbVswXSx2PWhbaSsiaCJdPWQrbVsxXTtjLnB1c2goZyx2KX19fXZhciB5PXIuX2lkLHg9ZS5fZXh0cmVtZXNbeV0sYj1hLmZpbmRFeHRyZW1lcyhyLGMsby5leHRlbmRGbGF0KHt0b3plcm86eC5vcHRzLnRvemVyb30se3BhZGRlZDohMH0pKTt4Lm1pbj14Lm1pbi5jb25jYXQoYi5taW4pLHgubWF4PXgubWF4LmNvbmNhdChiLm1heCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jYWxjZGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0sbz1uWzBdLnRyYWNlO2lmKCEwPT09by52aXNpYmxlJiZpLnRyYWNlSXMobywiZXJyb3JCYXJzT0siKSl7dmFyIHM9YS5nZXRGcm9tSWQodCxvLnhheGlzKSxjPWEuZ2V0RnJvbUlkKHQsby55YXhpcyk7bChuLG8scywieCIpLGwobixvLGMsInkiKX19fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9jb21wdXRlX2Vycm9yIjozOTIsImZhc3QtaXNudW1lcmljIjoxOTB9XSwzOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiJwZXJjZW50Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQqZS8xMDApfToiY29uc3RhbnQiPT09dD9mdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyhlKX06InNxcnQiPT09dD9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGguYWJzKHQpKX06dm9pZCAwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnR5cGUscj10LnN5bW1ldHJpYztpZigiZGF0YSI9PT1lKXt2YXIgaT10LmFycmF5fHxbXTtpZihyKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdO3JldHVybltyLHJdfTt2YXIgYT10LmFycmF5bWludXN8fFtdO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdLG49K2FbZV07cmV0dXJuIGlzTmFOKHIpJiZpc05hTihuKT9bTmFOLE5hTl06W258fDAscnx8MF19fXZhciBvPW4oZSx0LnZhbHVlKSxzPW4oZSx0LnZhbHVlbWludXMpO3JldHVybiByfHx2b2lkIDA9PT10LnZhbHVlbWludXM/ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtyZXR1cm5bZSxlXX06ZnVuY3Rpb24odCl7cmV0dXJuW3ModCksbyh0KV19fX0se31dLDM5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPSJlcnJvcl8iK2wuYXhpcyx1PW8ubmV3Q29udGFpbmVyKGUsYyksZj10W2NdfHx7fTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGEuY29lcmNlKGYsdSxzLHQsZSl9aWYoITEhPT1oKCJ2aXNpYmxlIix2b2lkIDAhPT1mLmFycmF5fHx2b2lkIDAhPT1mLnZhbHVlfHwic3FydCI9PT1mLnR5cGUpKXt2YXIgcD1oKCJ0eXBlIiwiYXJyYXkiaW4gZj8iZGF0YSI6InBlcmNlbnQiKSxkPSEwOyJzcXJ0IiE9PXAmJihkPWgoInN5bW1ldHJpYyIsISgoImRhdGEiPT09cD8iYXJyYXltaW51cyI6InZhbHVlbWludXMiKWluIGYpKSksImRhdGEiPT09cD8oaCgiYXJyYXkiKSxoKCJ0cmFjZXJlZiIpLGR8fChoKCJhcnJheW1pbnVzIiksaCgidHJhY2VyZWZtaW51cyIpKSk6InBlcmNlbnQiIT09cCYmImNvbnN0YW50IiE9PXB8fChoKCJ2YWx1ZSIpLGR8fGgoInZhbHVlbWludXMiKSk7dmFyIG09ImNvcHlfIitsLmluaGVyaXQrInN0eWxlIjtpZihsLmluaGVyaXQpKGVbImVycm9yXyIrbC5pbmhlcml0XXx8e30pLnZpc2libGUmJmgobSwhKGYuY29sb3J8fG4oZi50aGlja25lc3MpfHxuKGYud2lkdGgpKSk7bC5pbmhlcml0JiZ1W21dfHwoaCgiY29sb3IiLHIpLGgoInRoaWNrbmVzcyIpLGgoIndpZHRoIixpLnRyYWNlSXMoZSwiZ2wzZCIpPzA6NCkpfX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9hdHRyaWJ1dGVzIjozOTAsImZhc3QtaXNudW1lcmljIjoxOTB9XSwzOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIG8uZXJyb3JfeC5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV95c3R5bGU7dmFyIHM9e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3o6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgcy5lcnJvcl94LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3kuY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfenN0eWxlLGUuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJlcnJvcmJhcnMiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOm8sYmFyOm8saGlzdG9ncmFtOm8sc2NhdHRlcjNkOmkocywiY2FsYyIsIm5lc3RlZCIpLHNjYXR0ZXJnbDppKG8sImNhbGMiLCJuZXN0ZWQiKX19LHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLG1ha2VDb21wdXRlRXJyb3I6dCgiLi9jb21wdXRlX2Vycm9yIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJJbmZvOmZ1bmN0aW9uKHQsZSxyKXsoZS5lcnJvcl95fHx7fSkudmlzaWJsZSYmKHIueWVycj10LnloLXQueSxlLmVycm9yX3kuc3ltbWV0cmljfHwoci55ZXJybmVnPXQueS10LnlzKSk7KGUuZXJyb3JfeHx8e30pLnZpc2libGUmJihyLnhlcnI9dC54aC10LngsZS5lcnJvcl94LnN5bW1ldHJpY3x8KHIueGVycm5lZz10LngtdC54cykpfX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi9hdHRyaWJ1dGVzIjozOTAsIi4vY2FsYyI6MzkxLCIuL2NvbXB1dGVfZXJyb3IiOjM5MiwiLi9kZWZhdWx0cyI6MzkzLCIuL3Bsb3QiOjM5NSwiLi9zdHlsZSI6Mzk2fV0sMzk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi9kcmF3aW5nIiksbz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD1yLnhheGlzLGM9ci55YXhpcyx1PXMmJnMuZHVyYXRpb24+MDtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBmLGg9ZVswXS50cmFjZSxwPWguZXJyb3JfeHx8e30sZD1oLmVycm9yX3l8fHt9O2guaWRzJiYoZj1mdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO3ZhciBtPW8uaGFzTWFya2VycyhoKSYmaC5tYXJrZXIubWF4ZGlzcGxheWVkPjA7ZC52aXNpYmxlfHxwLnZpc2libGV8fChlPVtdKTt2YXIgZz1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZXJyb3JiYXIiKS5kYXRhKGUsZik7aWYoZy5leGl0KCkucmVtb3ZlKCksZS5sZW5ndGgpe3AudmlzaWJsZXx8Zy5zZWxlY3RBbGwoInBhdGgueGVycm9yIikucmVtb3ZlKCksZC52aXNpYmxlfHxnLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5yZW1vdmUoKSxnLnN0eWxlKCJvcGFjaXR5IiwxKTt2YXIgdj1nLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZXJyb3JiYXIiLCEwKTt1JiZ2LnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDEpLGEuc2V0Q2xpcFVybChnLHIubGF5ZXJDbGlwSWQsdCksZy5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17eDplLmMycCh0LngpLHk6ci5jMnAodC55KX07dm9pZCAwIT09dC55aCYmKG4ueWg9ci5jMnAodC55aCksbi55cz1yLmMycCh0LnlzKSxpKG4ueXMpfHwobi5ub1lTPSEwLG4ueXM9ci5jMnAodC55cywhMCkpKTt2b2lkIDAhPT10LnhoJiYobi54aD1lLmMycCh0LnhoKSxuLnhzPWUuYzJwKHQueHMpLGkobi54cyl8fChuLm5vWFM9ITAsbi54cz1lLmMycCh0LnhzLCEwKSkpO3JldHVybiBufSh0LGwsYyk7aWYoIW18fHQudmlzKXt2YXIgYSxvPWUuc2VsZWN0KCJwYXRoLnllcnJvciIpO2lmKGQudmlzaWJsZSYmaShyLngpJiZpKHIueWgpJiZpKHIueXMpKXt2YXIgZj1kLndpZHRoO2E9Ik0iKyhyLngtZikrIiwiK3IueWgrImgiKzIqZisibS0iK2YrIiwwViIrci55cyxyLm5vWVN8fChhKz0ibS0iK2YrIiwwaCIrMipmKSwhby5zaXplKCk/bz1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieWVycm9yIiwhMCk6dSYmKG89by50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLG8uYXR0cigiZCIsYSl9ZWxzZSBvLnJlbW92ZSgpO3ZhciBoPWUuc2VsZWN0KCJwYXRoLnhlcnJvciIpO2lmKHAudmlzaWJsZSYmaShyLnkpJiZpKHIueGgpJiZpKHIueHMpKXt2YXIgZz0ocC5jb3B5X3lzdHlsZT9kOnApLndpZHRoO2E9Ik0iK3IueGgrIiwiKyhyLnktZykrInYiKzIqZysibTAsLSIrZysiSCIrci54cyxyLm5vWFN8fChhKz0ibTAsLSIrZysidiIrMipnKSwhaC5zaXplKCk/aD1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2xhc3NlZCgieGVycm9yIiwhMCk6dSYmKGg9aC50cmFuc2l0aW9uKCkuZHVyYXRpb24ocy5kdXJhdGlvbikuZWFzZShzLmVhc2luZykpLGguYXR0cigiZCIsYSl9ZWxzZSBoLnJlbW92ZSgpfX0pKX19KSl9fSx7Ii4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjo5NTEsIi4uL2RyYXdpbmciOjM4OCwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxOTB9XSwzOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGEudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KSl9fSx7Ii4uL2NvbG9yIjozNjYsIkBwbG90bHkvZDMiOjU4fV0sMzk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLmhvdmVybGFiZWwsYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6YSh7fSxpLmJnY29sb3Ise2FycmF5T2s6ITB9KSxib3JkZXJjb2xvcjphKHt9LGkuYm9yZGVyY29sb3Ise2FycmF5T2s6ITB9KSxmb250Om4oe2FycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSksYWxpZ246YSh7fSxpLmFsaWduLHthcnJheU9rOiEwfSksbmFtZWxlbmd0aDphKHt9LGkubmFtZWxlbmd0aCx7YXJyYXlPazohMH0pLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjQwN31dLDM5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gYSh0LGUscixpKXtpPWl8fG4uaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09aSh0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOmV9LHtfbW9kdWxlOnQuX21vZHVsZX0scil9fWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLGM9bFswXS50cmFjZTtpZighaS50cmFjZUlzKGMsInBpZS1saWtlIikpe3ZhciB1PWkudHJhY2VJcyhjLCIyZE1hcCIpP2E6bi5maWxsQXJyYXk7dShjLmhvdmVyaW5mbyxsLCJoaSIsbyhjKSksYy5ob3ZlcnRlbXBsYXRlJiZ1KGMuaG92ZXJ0ZW1wbGF0ZSxsLCJodCIpLGMuaG92ZXJsYWJlbCYmKHUoYy5ob3ZlcmxhYmVsLmJnY29sb3IsbCwiaGJnIiksdShjLmhvdmVybGFiZWwuYm9yZGVyY29sb3IsbCwiaGJjIiksdShjLmhvdmVybGFiZWwuZm9udC5zaXplLGwsImh0cyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuY29sb3IsbCwiaHRjIiksdShjLmhvdmVybGFiZWwuZm9udC5mYW1pbHksbCwiaHRmIiksdShjLmhvdmVybGFiZWwubmFtZWxlbmd0aCxsLCJobmwiKSx1KGMuaG92ZXJsYWJlbC5hbGlnbixsLCJodGEiKSl9fX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3JlZ2lzdHJ5Ijo2Mzh9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vaG92ZXIiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsIm9uQ2xpY2siKSh0LHQuX2hvdmVyZGF0YSk7ZnVuY3Rpb24gbygpe3QuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOnQuX2hvdmVyZGF0YSxldmVudDplfSl9dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKGEmJmEudGhlbj9hLnRoZW4obyk6bygpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHsiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9ob3ZlciI6NDAzfV0sNDAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17WUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6IkFyaWFsLCBzYW5zLXNlcmlmIixIT1ZFUk1JTlRJTUU6NTAsSE9WRVJJRDoiLWhvdmVyIn19LHt9XSw0MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz1uLmV4dGVuZEZsYXQoe30sby5ob3ZlcmxhYmVsKTtlLmhvdmVydGVtcGxhdGUmJihzLm5hbWVsZW5ndGg9LTEpLGEodCxlLChmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSkscyl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2F0dHJpYnV0ZXMiOjM5NywiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo0MDR9XSw0MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZigic3Bsb20iPT09dC50eXBlKXtmb3IodmFyIG49dC54YXhlc3x8W10saT10LnlheGVzfHxbXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoLTEhPT1lLmluZGV4T2YoblthXStpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4tMSE9PWUuaW5kZXhPZihyLmdldFN1YnBsb3QodCkpfSxyLmZsYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT1lO3JldHVybiByfSxyLnAyYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXRbbl0ucDJjKGUpO3JldHVybiByfSxyLmdldERpc3RhbmNlRnVuY3Rpb249ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuImNsb3Nlc3QiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKToieCI9PT10LmNoYXJBdCgwKT9lOm59LHIuZ2V0Q2xvc2VzdD1mdW5jdGlvbih0LGUscil7aWYoITEhPT1yLmluZGV4KXIuaW5kZXg+PTAmJnIuaW5kZXg8dC5sZW5ndGg/ci5kaXN0YW5jZT0wOnIuaW5kZXg9ITE7ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9ZSh0W25dKTtpPD1yLmRpc3RhbmNlJiYoci5pbmRleD1uLHIuZGlzdGFuY2U9aSl9cmV0dXJuIHJ9LHIuaW5ib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KmU8MHx8MD09PXQ/cjoxLzB9LHIucXVhZHJhdHVyZT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10KHIpLGk9ZShyKTtyZXR1cm4gTWF0aC5zcXJ0KG4qbitpKmkpfX0sci5tYWtlRXZlbnREYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0iaW5kZXgiaW4gdD90LmluZGV4OnQucG9pbnROdW1iZXIsYT17ZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGN1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6aX07aWYoZS5faW5kZXhUb1BvaW50cyl7dmFyIG89ZS5faW5kZXhUb1BvaW50c1tpXTsxPT09by5sZW5ndGg/YS5wb2ludEluZGV4PW9bMF06YS5wb2ludEluZGljZXM9b31lbHNlIGEucG9pbnRJbmRleD1pO3JldHVybiBlLl9tb2R1bGUuZXZlbnREYXRhP2E9ZS5fbW9kdWxlLmV2ZW50RGF0YShhLHQsZSxuLGkpOigieFZhbCJpbiB0P2EueD10LnhWYWw6IngiaW4gdCYmKGEueD10LngpLCJ5VmFsImluIHQ/YS55PXQueVZhbDoieSJpbiB0JiYoYS55PXQueSksdC54YSYmKGEueGF4aXM9dC54YSksdC55YSYmKGEueWF4aXM9dC55YSksdm9pZCAwIT09dC56TGFiZWxWYWwmJihhLno9dC56TGFiZWxWYWwpKSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShhLGUsaSksYX0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7dmFyIHU9byhuLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCkscik7dm9pZCAwIT09dSYmKHRbY109dSl9fX0sci5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7Zm9yKHZhciB1PW4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxmPW5ldyBBcnJheShyLmxlbmd0aCksaD0wO2g8ci5sZW5ndGg7aCsrKWZbaF09byh1LHJbaF0pO3RbY109Zn19fTt2YXIgaT17aWRzOiJpZCIsbG9jYXRpb25zOiJsb2NhdGlvbiIsbGFiZWxzOiJsYWJlbCIsdmFsdWVzOiJ2YWx1ZSIsIm1hcmtlci5jb2xvcnMiOiJjb2xvciIscGFyZW50czoicGFyZW50In07ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaVt0XXx8dH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0W2VbMF1dKT90W2VbMF1dW2VbMV1dOnZvaWQgMDp0W2VdfXZhciBzPXt4OiEwLHk6ITB9LGw9eyJ4IHVuaWZpZWQiOiEwLCJ5IHVuaWZpZWQiOiEwfTtyLmlzVW5pZmllZEhvdmVyPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmISFsW3RdfSxyLmlzWFlob3Zlcj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiEhc1t0XX19LHsiLi4vLi4vbGliIjo1MDN9XSw0MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD1vLnN0clJvdGF0ZSxjPXQoIi4uLy4uL2xpYi9ldmVudHMiKSx1PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGY9dCgiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciIpLGg9dCgiLi4vZHJhd2luZyIpLHA9dCgiLi4vY29sb3IiKSxkPXQoIi4uL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vLi4vcmVnaXN0cnkiKSx2PXQoIi4vaGVscGVycyIpLHk9dCgiLi9jb25zdGFudHMiKSx4PXQoIi4uL2xlZ2VuZC9kZWZhdWx0cyIpLGI9dCgiLi4vbGVnZW5kL2RyYXciKSxfPXkuWUFOR0xFLHc9TWF0aC5QSSpfLzE4MCxUPTEvTWF0aC5zaW4odyksaz1NYXRoLmNvcyh3KSxBPU1hdGguc2luKHcpLE09eS5IT1ZFUkFSUk9XU0laRSxTPXkuSE9WRVJURVhUUEFELEU9e2JveDohMCxvaGxjOiEwLHZpb2xpbjohMCxjYW5kbGVzdGljazohMH0sTD17c2NhdHRlcjohMCxzY2F0dGVyZ2w6ITAsc3Bsb206ITB9O2Z1bmN0aW9uIEModCl7cmV0dXJuW3QudHJhY2UuaW5kZXgsdC5pbmRleCx0LngwLHQueTAsdC5uYW1lLHQuYXR0cix0LnhhP3QueGEuX2lkOiIiLHQueWE/dC55YS5faWQ6IiJdLmpvaW4oIiwiKX1yLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGEpe3Q9by5nZXRHcmFwaERpdih0KTt2YXIgcz1lLnRhcmdldDtvLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCt5LkhPVkVSSUQseS5IT1ZFUk1JTlRJTUUsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLGEscyl7cnx8KHI9Inh5Iik7dmFyIGw9QXJyYXkuaXNBcnJheShyKT9yOltyXSx1PXQuX2Z1bGxMYXlvdXQsaD11Ll9wbG90c3x8W10sbT1oW3JdLHk9dS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihtKXt2YXIgeD1tLm92ZXJsYXlzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSk7bD1sLmNvbmNhdCh4KX1mb3IodmFyIGI9bC5sZW5ndGgsXz1uZXcgQXJyYXkoYiksdz1uZXcgQXJyYXkoYiksaz0hMSxBPTA7QTxiO0ErKyl7dmFyIE09bFtBXTtpZihoW01dKWs9ITAsX1tBXT1oW01dLnhheGlzLHdbQV09aFtNXS55YXhpcztlbHNle2lmKCF1W01dfHwhdVtNXS5fc3VicGxvdClyZXR1cm4gdm9pZCBvLndhcm4oIlVucmVjb2duaXplZCBzdWJwbG90OiAiK00pO3ZhciBTPXVbTV0uX3N1YnBsb3Q7X1tBXT1TLnhheGlzLHdbQV09Uy55YXhpc319dmFyIFA9ZS5ob3Zlcm1vZGV8fHUuaG92ZXJtb2RlO1AmJiFrJiYoUD0iY2xvc2VzdCIpO2lmKC0xPT09WyJ4IiwieSIsImNsb3Nlc3QiLCJ4IHVuaWZpZWQiLCJ5IHVuaWZpZWQiXS5pbmRleE9mKFApfHwhdC5jYWxjZGF0YXx8dC5xdWVyeVNlbGVjdG9yKCIuem9vbWJveCIpfHx0Ll9kcmFnZ2luZylyZXR1cm4gZC51bmhvdmVyUmF3KHQsZSk7dmFyIE89dS5ob3ZlcmRpc3RhbmNlOy0xPT09TyYmKE89MS8wKTt2YXIgQj11LnNwaWtlZGlzdGFuY2U7LTE9PT1CJiYoQj0xLzApO3ZhciBWLEgscSxHLFksVyxYLFosSixLLFEsJCx0dCxldD1bXSxydD1bXSxudD17aExpbmVQb2ludDpudWxsLHZMaW5lUG9pbnQ6bnVsbH0saXQ9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoUD0iYXJyYXkiLHE9MDtxPGUubGVuZ3RoO3ErKykoWT10LmNhbGNkYXRhW2VbcV0uY3VydmVOdW1iZXJ8fDBdKSYmKFc9WVswXS50cmFjZSwic2tpcCIhPT1ZWzBdLnRyYWNlLmhvdmVyaW5mbyYmKHJ0LnB1c2goWSksImgiPT09Vy5vcmllbnRhdGlvbiYmKGl0PSEwKSkpO2Vsc2V7Zm9yKEc9MDtHPHQuY2FsY2RhdGEubGVuZ3RoO0crKylZPXQuY2FsY2RhdGFbR10sInNraXAiIT09KFc9WVswXS50cmFjZSkuaG92ZXJpbmZvJiZ2LmlzVHJhY2VJblN1YnBsb3RzKFcsbCkmJihydC5wdXNoKFkpLCJoIj09PVcub3JpZW50YXRpb24mJihpdD0hMCkpO3ZhciBhdCxvdDtpZighcylhdD0ieHB4ImluIGU/ZS54cHg6X1swXS5fbGVuZ3RoLzIsb3Q9InlweCJpbiBlP2UueXB4OndbMF0uX2xlbmd0aC8yO2Vsc2V7aWYoITE9PT1jLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSkpcmV0dXJuO3ZhciBzdD1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2F0PWUuY2xpZW50WC1zdC5sZWZ0LG90PWUuY2xpZW50WS1zdC50b3AsdS5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIGx0PW8uYXBwbHkzRFRyYW5zZm9ybSh1Ll9pbnZUcmFuc2Zvcm0pKGF0LG90KTtpZihhdD1sdFswXSxvdD1sdFsxXSxhdDwwfHxhdD5fWzBdLl9sZW5ndGh8fG90PDB8fG90PndbMF0uX2xlbmd0aClyZXR1cm4gZC51bmhvdmVyUmF3KHQsZSl9aWYoZS5wb2ludGVyWD1hdCtfWzBdLl9vZmZzZXQsZS5wb2ludGVyWT1vdCt3WzBdLl9vZmZzZXQsVj0ieHZhbCJpbiBlP3YuZmxhdChsLGUueHZhbCk6di5wMmMoXyxhdCksSD0ieXZhbCJpbiBlP3YuZmxhdChsLGUueXZhbCk6di5wMmModyxvdCksIWkoVlswXSl8fCFpKEhbMF0pKXJldHVybiBvLndhcm4oIkZ4LmhvdmVyIGZhaWxlZCIsZSx0KSxkLnVuaG92ZXJSYXcodCxlKX12YXIgY3Q9MS8wO2Z1bmN0aW9uIHV0KHQscil7Zm9yKEc9MDtHPHJ0Lmxlbmd0aDtHKyspaWYoKFk9cnRbR10pJiZZWzBdJiZZWzBdLnRyYWNlJiYhMD09PShXPVlbMF0udHJhY2UpLnZpc2libGUmJjAhPT1XLl9sZW5ndGgmJi0xPT09WyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihXLl9tb2R1bGUubmFtZSkpe2lmKCJzcGxvbSI9PT1XLnR5cGU/WD1sW1o9MF06KFg9di5nZXRTdWJwbG90KFcpLFo9bC5pbmRleE9mKFgpKSxKPVAsdi5pc1VuaWZpZWRIb3ZlcihKKSYmKEo9Si5jaGFyQXQoMCkpLCQ9e2NkOlksdHJhY2U6Vyx4YTpfW1pdLHlhOndbWl0sbWF4SG92ZXJEaXN0YW5jZTpPLG1heFNwaWtlRGlzdGFuY2U6QixpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbihjdCxPKSxzcGlrZURpc3RhbmNlOjEvMCx4U3Bpa2U6dm9pZCAwLHlTcGlrZTp2b2lkIDAsY29sb3I6cC5kZWZhdWx0TGluZSxuYW1lOlcubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LHVbWF0mJigkLnN1YnBsb3Q9dVtYXS5fc3VicGxvdCksdS5fc3Bsb21TY2VuZXMmJnUuX3NwbG9tU2NlbmVzW1cudWlkXSYmKCQuc2NlbmU9dS5fc3Bsb21TY2VuZXNbVy51aWRdKSx0dD1ldC5sZW5ndGgsImFycmF5Ij09PUope3ZhciBuPWVbR107InBvaW50TnVtYmVyImluIG4/KCQuaW5kZXg9bi5wb2ludE51bWJlcixKPSJjbG9zZXN0Iik6KEo9IiIsInh2YWwiaW4gbiYmKEs9bi54dmFsLEo9IngiKSwieXZhbCJpbiBuJiYoUT1uLnl2YWwsSj1KPyJjbG9zZXN0IjoieSIpKX1lbHNlIHZvaWQgMCE9PXQmJnZvaWQgMCE9PXI/KEs9dCxRPXIpOihLPVZbWl0sUT1IW1pdKTtpZigwIT09TylpZihXLl9tb2R1bGUmJlcuX21vZHVsZS5ob3ZlclBvaW50cyl7dmFyIGE9Vy5fbW9kdWxlLmhvdmVyUG9pbnRzKCQsSyxRLEose2Zpbml0ZVJhbmdlOiEwLGhvdmVyTGF5ZXI6dS5faG92ZXJsYXllcn0pO2lmKGEpZm9yKHZhciBzLGM9MDtjPGEubGVuZ3RoO2MrKylzPWFbY10saShzLngwKSYmaShzLnkwKSYmZXQucHVzaChEKHMsUCkpfWVsc2Ugby5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlIGluIGhvdmVyOiIsVyk7aWYoImNsb3Nlc3QiPT09UCYmZXQubGVuZ3RoPnR0JiYoZXQuc3BsaWNlKDAsdHQpLGN0PWV0WzBdLmRpc3RhbmNlKSx5JiYwIT09QiYmMD09PWV0Lmxlbmd0aCl7JC5kaXN0YW5jZT1CLCQuaW5kZXg9ITE7dmFyIGY9Vy5fbW9kdWxlLmhvdmVyUG9pbnRzKCQsSyxRLCJjbG9zZXN0Iix7aG92ZXJMYXllcjp1Ll9ob3ZlcmxheWVyfSk7aWYoZiYmKGY9Zi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwaWtlRGlzdGFuY2U8PUJ9KSkpLGYmJmYubGVuZ3RoKXt2YXIgaCxkPWYuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzJiYiaG92ZXJlZCBkYXRhIiE9PXQueGEuc3Bpa2VzbmFwfSkpO2lmKGQubGVuZ3RoKXt2YXIgbT1kWzBdO2kobS54MCkmJmkobS55MCkmJihoPWh0KG0pLCghbnQudkxpbmVQb2ludHx8bnQudkxpbmVQb2ludC5zcGlrZURpc3RhbmNlPmguc3Bpa2VEaXN0YW5jZSkmJihudC52TGluZVBvaW50PWgpKX12YXIgZz1mLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT10LnlhLnNwaWtlc25hcH0pKTtpZihnLmxlbmd0aCl7dmFyIHg9Z1swXTtpKHgueDApJiZpKHgueTApJiYoaD1odCh4KSwoIW50LmhMaW5lUG9pbnR8fG50LmhMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5oLnNwaWtlRGlzdGFuY2UpJiYobnQuaExpbmVQb2ludD1oKSl9fX19fWZ1bmN0aW9uIGZ0KHQsZSxyKXtmb3IodmFyIG4saT1udWxsLGE9MS8wLG89MDtvPHQubGVuZ3RoO28rKyluPXRbb10uc3Bpa2VEaXN0YW5jZSxyJiYwPT09byYmKG49LTEvMCksbjw9YSYmbjw9ZSYmKGk9dFtvXSxhPW4pO3JldHVybiBpfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0P3t4YTp0LnhhLHlhOnQueWEseDp2b2lkIDAhPT10LnhTcGlrZT90LnhTcGlrZToodC54MCt0LngxKS8yLHk6dm9pZCAwIT09dC55U3Bpa2U/dC55U3Bpa2U6KHQueTArdC55MSkvMixkaXN0YW5jZTp0LmRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5zcGlrZURpc3RhbmNlLGN1cnZlTnVtYmVyOnQudHJhY2UuaW5kZXgsY29sb3I6dC5jb2xvcixwb2ludE51bWJlcjp0LmluZGV4fTpudWxsfXV0KCk7dmFyIHB0PXtmdWxsTGF5b3V0OnUsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsZXZlbnQ6ZX0sZHQ9dC5fc3Bpa2Vwb2ludHMsbXQ9e3ZMaW5lUG9pbnQ6bnQudkxpbmVQb2ludCxoTGluZVBvaW50Om50LmhMaW5lUG9pbnR9O3QuX3NwaWtlcG9pbnRzPW10O3ZhciBndD1mdW5jdGlvbigpe2V0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pKSxldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmNoYXJBdCgwKSxuPVtdLGk9W10sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107Zy50cmFjZUlzKHMudHJhY2UsImJhci1saWtlIil8fGcudHJhY2VJcyhzLnRyYWNlLCJib3gtdmlvbGluIik/YS5wdXNoKHMpOnMudHJhY2VbcisicGVyaW9kIl0/aS5wdXNoKHMpOm4ucHVzaChzKX1yZXR1cm4gbi5jb25jYXQoaSkuY29uY2F0KGEpfShldCxQKX07Z3QoKTt2YXIgdnQ9UC5jaGFyQXQoMCkseXQ9KCJ4Ij09PXZ0fHwieSI9PT12dCkmJmV0WzBdJiZMW2V0WzBdLnRyYWNlLnR5cGVdO2lmKHkmJjAhPT1CJiYwIT09ZXQubGVuZ3RoKXt2YXIgeHQ9ZnQoZXQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSkpLEIseXQpO250LmhMaW5lUG9pbnQ9aHQoeHQpO3ZhciBidD1mdChldC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSksQix5dCk7bnQudkxpbmVQb2ludD1odChidCl9aWYoMD09PWV0Lmxlbmd0aCl7dmFyIF90PWQudW5ob3ZlclJhdyh0LGUpO3JldHVybiF5fHxudWxsPT09bnQuaExpbmVQb2ludCYmbnVsbD09PW50LnZMaW5lUG9pbnR8fEYoZHQpJiZSKHQsbnQscHQpLF90fXkmJkYoZHQpJiZSKHQsbnQscHQpO2lmKHYuaXNYWWhvdmVyKEopJiYwIT09ZXRbMF0ubGVuZ3RoJiYic3Bsb20iIT09ZXRbMF0udHJhY2UudHlwZSl7dmFyIHd0PWV0WzBdLFR0PShldD1FW3d0LnRyYWNlLnR5cGVdP2V0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhY2UuaW5kZXg9PT13dC50cmFjZS5pbmRleH0pKTpbd3RdKS5sZW5ndGgsa3Q9TigieCIsd3QsdSksQXQ9TigieSIsd3QsdSk7dXQoa3QsQXQpO3ZhciBNdCxTdD1bXSxFdD17fSxMdD0wLEN0PWZ1bmN0aW9uKHQpe3ZhciBlPUVbdC50cmFjZS50eXBlXT9DKHQpOnQudHJhY2UuaW5kZXg7aWYoRXRbZV0pe3ZhciByPUV0W2VdLTEsbj1TdFtyXTtyPjAmJk1hdGguYWJzKHQuZGlzdGFuY2UpPE1hdGguYWJzKG4uZGlzdGFuY2UpJiYoU3Rbcl09dCl9ZWxzZSBMdCsrLEV0W2VdPUx0LFN0LnB1c2godCl9O2ZvcihNdD0wO010PFR0O010KyspQ3QoZXRbTXRdKTtmb3IoTXQ9ZXQubGVuZ3RoLTE7TXQ+VHQtMTtNdC0tKUN0KGV0W010XSk7ZXQ9U3QsZ3QoKX12YXIgUHQ9dC5faG92ZXJkYXRhLEl0PVtdLE90PWoodCksenQ9VSh0KTtmb3IocT0wO3E8ZXQubGVuZ3RoO3ErKyl7dmFyIER0PWV0W3FdLFJ0PXYubWFrZUV2ZW50RGF0YShEdCxEdC50cmFjZSxEdC5jZCk7aWYoITEhPT1EdC5ob3ZlcnRlbXBsYXRlKXt2YXIgRnQ9ITE7RHQuY2RbRHQuaW5kZXhdJiZEdC5jZFtEdC5pbmRleF0uaHQmJihGdD1EdC5jZFtEdC5pbmRleF0uaHQpLER0LmhvdmVydGVtcGxhdGU9RnR8fER0LnRyYWNlLmhvdmVydGVtcGxhdGV8fCExfWlmKER0LnhhJiZEdC55YSl7dmFyIEJ0PUR0LngwK0R0LnhhLl9vZmZzZXQsTnQ9RHQueDErRHQueGEuX29mZnNldCxqdD1EdC55MCtEdC55YS5fb2Zmc2V0LFV0PUR0LnkxK0R0LnlhLl9vZmZzZXQsVnQ9TWF0aC5taW4oQnQsTnQpLEh0PU1hdGgubWF4KEJ0LE50KSxxdD1NYXRoLm1pbihqdCxVdCksR3Q9TWF0aC5tYXgoanQsVXQpO1J0LmJib3g9e3gwOlZ0K3p0LHgxOkh0K3p0LHkwOnF0K090LHkxOkd0K090fX1EdC5ldmVudERhdGE9W1J0XSxJdC5wdXNoKFJ0KX10Ll9ob3ZlcmRhdGE9SXQ7dmFyIFl0PSJ5Ij09PVAmJihydC5sZW5ndGg+MXx8ZXQubGVuZ3RoPjEpfHwiY2xvc2VzdCI9PT1QJiZpdCYmZXQubGVuZ3RoPjEsV3Q9cC5jb21iaW5lKHUucGxvdF9iZ2NvbG9yfHxwLmJhY2tncm91bmQsdS5wYXBlcl9iZ2NvbG9yKSxYdD1JKGV0LHtnZDp0LGhvdmVybW9kZTpQLHJvdGF0ZUxhYmVsczpZdCxiZ0NvbG9yOld0LGNvbnRhaW5lcjp1Ll9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOnUuX3BhcGVyLm5vZGUoKSxjb21tb25MYWJlbE9wdHM6dS5ob3ZlcmxhYmVsLGhvdmVyZGlzdGFuY2U6dS5ob3ZlcmRpc3RhbmNlfSk7di5pc1VuaWZpZWRIb3ZlcihQKXx8KCFmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdT0wLGY9MSxoPXQuc2l6ZSgpLHA9bmV3IEFycmF5KGgpLGQ9MDtmdW5jdGlvbiBtKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO2lmKGk9ZS5wbWluLWUucG9zLWUuZHArZS5zaXplLGE9ci5wb3Mrci5kcCtyLnNpemUtZS5wbWF4LGk+LjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHArPWk7bj0hMX1pZighKGE8LjAxKSl7aWYoaTwtLjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7bj0hMX1pZihuKXt2YXIgYz0wO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmYysrO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zPmUucG1heC0xJiYobC5kZWw9ITAsYy0tKTtmb3Iobz0wO288dC5sZW5ndGgmJiEoYzw9MCk7bysrKWlmKChsPXRbb10pLnBvczxlLnBtaW4rMSlmb3IobC5kZWw9ITAsYy0tLGE9MipsLnNpemUscz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiYobC5kZWw9ITAsYy0tKX19fXQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dFtlXSxpPSJ4Ij09PW4uX2lkLmNoYXJBdCgwKSxhPW4ucmFuZ2U7MD09PWQmJmEmJmFbMF0+YVsxXSE9PWkmJihmPS0xKSxwW2QrK109W3tkYXR1bTp0LHRyYWNlSW5kZXg6dC50cmFjZS5pbmRleCxkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KihpP1Q6MSkvMixwbWluOjAscG1heDppP3Iud2lkdGg6ci5oZWlnaHR9XX0pKSxwLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfHxmKihlWzBdLnRyYWNlSW5kZXgtdFswXS50cmFjZUluZGV4KX0pKTtmb3IoOyFuJiZ1PD1oOyl7Zm9yKHUrKyxuPSEwLG89MDtvPHAubGVuZ3RoLTE7KXt2YXIgZz1wW29dLHY9cFtvKzFdLHk9Z1tnLmxlbmd0aC0xXSx4PXZbMF07aWYoKGk9eS5wb3MreS5kcCt5LnNpemUteC5wb3MteC5kcCt4LnNpemUpPi4wMSYmeS5wbWluPT09eC5wbWluJiZ5LnBtYXg9PT14LnBtYXgpe2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pdltzXS5kcCs9aTtmb3IoZy5wdXNoLmFwcGx5KGcsdikscC5zcGxpY2UobysxLDEpLGM9MCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pYys9Z1tzXS5kcDtmb3IoYT1jL2cubGVuZ3RoLHM9Zy5sZW5ndGgtMTtzPj0wO3MtLSlnW3NdLmRwLT1hO249ITF9ZWxzZSBvKyt9cC5mb3JFYWNoKG0pfWZvcihvPXAubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBiPXBbb107Zm9yKHM9Yi5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIF89YltzXSx3PV8uZGF0dW07dy5vZmZzZXQ9Xy5kcCx3LmRlbD1fLmRlbH19fShYdCxZdD8ieGEiOiJ5YSIsdSkseihYdCxZdCx1Ll9pbnZTY2FsZVgsdS5faW52U2NhbGVZKSk7aWYocyYmcy50YWdOYW1lKXt2YXIgWnQ9Zy5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiaGFzQ2xpY2tUb1Nob3ciKSh0LEl0KTtmKG4uc2VsZWN0KHMpLFp0PyJwb2ludGVyIjoiIil9aWYoIXN8fGF8fCFmdW5jdGlvbih0LGUscil7aWYoIXJ8fHIubGVuZ3RoIT09dC5faG92ZXJkYXRhLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49ci5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9cltuXSxhPXQuX2hvdmVyZGF0YVtuXTtpZihpLmN1cnZlTnVtYmVyIT09YS5jdXJ2ZU51bWJlcnx8U3RyaW5nKGkucG9pbnROdW1iZXIpIT09U3RyaW5nKGEucG9pbnROdW1iZXIpfHxTdHJpbmcoaS5wb2ludE51bWJlcnMpIT09U3RyaW5nKGEucG9pbnROdW1iZXJzKSlyZXR1cm4hMH1yZXR1cm4hMX0odCwwLFB0KSlyZXR1cm47UHQmJnQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDplLHBvaW50czpQdH0pO3QuZW1pdCgicGxvdGx5X2hvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6dC5faG92ZXJkYXRhLHhheGVzOl8seWF4ZXM6dyx4dmFsczpWLHl2YWxzOkh9KX0odCxlLHIsYSxzKX0pKX0sci5sb25lSG92ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtBcnJheS5pc0FycmF5KHQpfHwocj0hMSx0PVt0XSk7dmFyIGk9ZS5nZCxhPWooaSksbz1VKGkpLHM9SSh0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIHI9dC5feDB8fHQueDB8fHQueHx8MCxuPXQuX3gxfHx0LngxfHx0Lnh8fDAscz10Ll95MHx8dC55MHx8dC55fHwwLGw9dC5feTF8fHQueTF8fHQueXx8MCxjPXQuZXZlbnREYXRhO2lmKGMpe3ZhciB1PU1hdGgubWluKHIsbiksZj1NYXRoLm1heChyLG4pLGg9TWF0aC5taW4ocyxsKSxkPU1hdGgubWF4KHMsbCksbT10LnRyYWNlO2lmKGcudHJhY2VJcyhtLCJnbDNkIikpe3ZhciB2PWkuX2Z1bGxMYXlvdXRbbS5zY2VuZV0uX3NjZW5lLmNvbnRhaW5lcix5PXYub2Zmc2V0TGVmdCx4PXYub2Zmc2V0VG9wO3UrPXksZis9eSxoKz14LGQrPXh9Yy5iYm94PXt4MDp1K28seDE6ZitvLHkwOmgrYSx5MTpkK2F9LGUuaW5PdXRfYmJveCYmZS5pbk91dF9iYm94LnB1c2goYy5iYm94KX1lbHNlIGM9ITE7cmV0dXJue2NvbG9yOnQuY29sb3J8fHAuZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsbmFtZUxlbmd0aDp0Lm5hbWVMZW5ndGgsdGV4dEFsaWduOnQudGV4dEFsaWduLHRyYWNlOnQudHJhY2V8fHtpbmRleDowLGhvdmVyaW5mbzoiIn0seGE6e19vZmZzZXQ6MH0seWE6e19vZmZzZXQ6MH0saW5kZXg6MCxob3ZlcnRlbXBsYXRlOnQuaG92ZXJ0ZW1wbGF0ZXx8ITEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LmhvdmVydGVtcGxhdGVMYWJlbHN8fCExLGV2ZW50RGF0YTpjfX0pKSx7Z2Q6aSxob3Zlcm1vZGU6ImNsb3Nlc3QiLHJvdGF0ZUxhYmVsczohMSxiZ0NvbG9yOmUuYmdDb2xvcnx8cC5iYWNrZ3JvdW5kLGNvbnRhaW5lcjpuLnNlbGVjdChlLmNvbnRhaW5lciksb3V0ZXJDb250YWluZXI6ZS5vdXRlckNvbnRhaW5lcnx8ZS5jb250YWluZXJ9KSxsPTAsYz0wO3JldHVybiBzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pKS5lYWNoKChmdW5jdGlvbih0LHIpe3ZhciBuPXQueTAtdC5ieS8yO3Qub2Zmc2V0PW4tNTxsP2wtbis1OjAsbD1uK3QuYnkrdC5vZmZzZXQscj09PWUuYW5jaG9ySW5kZXgmJihjPXQub2Zmc2V0KX0pKS5lYWNoKChmdW5jdGlvbih0KXt0Lm9mZnNldC09Y30pKSx6KHMsITEsaS5fZnVsbExheW91dC5faW52U2NhbGVYLGkuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSkscj9zOnMubm9kZSgpfTt2YXIgUD0vPGV4dHJhPihbXHNcU10qKTxcL2V4dHJhPi87ZnVuY3Rpb24gSSh0LGUpe3ZhciByPWUuZ2QsaT1yLl9mdWxsTGF5b3V0LGE9ZS5ob3Zlcm1vZGUsYz1lLnJvdGF0ZUxhYmVscyxmPWUuYmdDb2xvcixkPWUuY29udGFpbmVyLG09ZS5vdXRlckNvbnRhaW5lcix3PWUuY29tbW9uTGFiZWxPcHRzfHx7fTtpZigwPT09dC5sZW5ndGgpcmV0dXJuW1tdXTt2YXIgVD1lLmZvbnRGYW1pbHl8fHkuSE9WRVJGT05ULGs9ZS5mb250U2l6ZXx8eS5IT1ZFUkZPTlRTSVpFLEE9dFswXSxFPUEueGEsTD1BLnlhLFA9YS5jaGFyQXQoMCksST1BW1ArIkxhYmVsIl0sej1WKHIsbSksRD16LnRvcCxSPXoud2lkdGgsRj16LmhlaWdodCxCPXZvaWQgMCE9PUkmJkEuZGlzdGFuY2U8PWUuaG92ZXJkaXN0YW5jZSYmKCJ4Ij09PWF8fCJ5Ij09PWEpO2lmKEIpe3ZhciBOLGosVT0hMDtmb3IoTj0wO048dC5sZW5ndGg7TisrKWlmKFUmJnZvaWQgMD09PXRbTl0uekxhYmVsJiYoVT0hMSksaj10W05dLmhvdmVyaW5mb3x8dFtOXS50cmFjZS5ob3ZlcmluZm8pe3ZhciBIPUFycmF5LmlzQXJyYXkoaik/ajpqLnNwbGl0KCIrIik7aWYoLTE9PT1ILmluZGV4T2YoImFsbCIpJiYtMT09PUguaW5kZXhPZihhKSl7Qj0hMTticmVha319VSYmKEI9ITEpfXZhciBxPWQuc2VsZWN0QWxsKCJnLmF4aXN0ZXh0IikuZGF0YShCP1swXTpbXSk7aWYocS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCkscS5leGl0KCkucmVtb3ZlKCkscS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9by5lbnN1cmVTaW5nbGUodCwicGF0aCIsIiIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJzdHJva2Utd2lkdGgiOiIxcHgifSl9KSksbD1vLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxjPXcuYmdjb2xvcnx8cC5kZWZhdWx0TGluZSxmPXcuYm9yZGVyY29sb3J8fHAuY29udHJhc3QoYyksZD1wLmNvbnRyYXN0KGMpLG09e2ZhbWlseTp3LmZvbnQuZmFtaWx5fHxULHNpemU6dy5mb250LnNpemV8fGssY29sb3I6dy5mb250LmNvbG9yfHxkfTtlLnN0eWxlKHtmaWxsOmMsc3Ryb2tlOmZ9KSxsLnRleHQoSSkuY2FsbChoLmZvbnQsbSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsciksdC5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgZyx2LHk9VihyLGwubm9kZSgpKTtpZigieCI9PT1hKXt2YXIgeD0idG9wIj09PUUuc2lkZT8iLSI6IiI7bC5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwodS5wb3NpdGlvblRleHQsMCwidG9wIj09PUUuc2lkZT9ELXkuYm90dG9tLU0tUzpELXkudG9wK00rUyksZz1FLl9vZmZzZXQrKEEueDArQS54MSkvMix2PUwuX29mZnNldCsoInRvcCI9PT1FLnNpZGU/MDpMLl9sZW5ndGgpO3ZhciBiPXkud2lkdGgvMitTO2c8Yj8oZz1iLGUuYXR0cigiZCIsIk0tIisoYi1NKSsiLDBMLSIrKGItMipNKSsiLCIreCtNKyJIIisoUyt5LndpZHRoLzIpKyJ2Iit4KygyKlMreS5oZWlnaHQpKyJILSIrYisiViIreCtNKyJaIikpOmc+aS53aWR0aC1iPyhnPWkud2lkdGgtYixlLmF0dHIoImQiLCJNIisoYi1NKSsiLDBMIitiKyIsIit4K00rInYiK3grKDIqUyt5LmhlaWdodCkrIkgtIitiKyJWIit4K00rIkgiKyhiLTIqTSkrIloiKSk6ZS5hdHRyKCJkIiwiTTAsMEwiK00rIiwiK3grTSsiSCIrKFMreS53aWR0aC8yKSsidiIreCsoMipTK3kuaGVpZ2h0KSsiSC0iKyhTK3kud2lkdGgvMikrIlYiK3grTSsiSC0iK00rIloiKX1lbHNle3ZhciBfLEMsUDsicmlnaHQiPT09TC5zaWRlPyhfPSJzdGFydCIsQz0xLFA9IiIsZz1FLl9vZmZzZXQrRS5fbGVuZ3RoKTooXz0iZW5kIixDPS0xLFA9Ii0iLGc9RS5fb2Zmc2V0KSx2PUwuX29mZnNldCsoQS55MCtBLnkxKS8yLGwuYXR0cigidGV4dC1hbmNob3IiLF8pLGUuYXR0cigiZCIsIk0wLDBMIitQK00rIiwiK00rIlYiKyhTK3kuaGVpZ2h0LzIpKyJoIitQKygyKlMreS53aWR0aCkrIlYtIisoUyt5LmhlaWdodC8yKSsiSCIrUCtNKyJWLSIrTSsiWiIpO3ZhciBPLHo9eS5oZWlnaHQvMixSPUQteS50b3AteixGPSJjbGlwIitpLl91aWQrImNvbW1vbmxhYmVsIitMLl9pZDtpZihnPHkud2lkdGgrMipTK00pe089Ik0tIisoTStTKSsiLSIreisiaC0iKyh5LndpZHRoLVMpKyJWIit6KyJoIisoeS53aWR0aC1TKSsiWiI7dmFyIEI9eS53aWR0aC1nK1M7dS5wb3NpdGlvblRleHQobCxCLFIpLCJlbmQiPT09XyYmbC5zZWxlY3RBbGwoInRzcGFuIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPWgudGVzdGVyLmFwcGVuZCgidGV4dCIpLnRleHQodC50ZXh0KCkpLmNhbGwoaC5mb250LG0pLGk9VihyLGUubm9kZSgpKTtNYXRoLnJvdW5kKGkud2lkdGgpPE1hdGgucm91bmQoeS53aWR0aCkmJnQuYXR0cigieCIsQi1pLndpZHRoKSxlLnJlbW92ZSgpfSkpfWVsc2UgdS5wb3NpdGlvblRleHQobCxDKihTK00pLFIpLE89bnVsbDt2YXIgTj1pLl90b3BjbGlwcy5zZWxlY3RBbGwoIiMiK0YpLmRhdGEoTz9bMF06W10pO04uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLEYpLmFwcGVuZCgicGF0aCIpLE4uZXhpdCgpLnJlbW92ZSgpLE4uc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsTyksaC5zZXRDbGlwVXJsKGwsTz9GOm51bGwscil9dC5hdHRyKCJ0cmFuc2Zvcm0iLHMoZyx2KSl9KSksdi5pc1VuaWZpZWRIb3ZlcihhKSl7ZC5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikucmVtb3ZlKCk7dmFyIEc9dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIiE9PXQuaG92ZXJpbmZvfSkpO2lmKDA9PT1HLmxlbmd0aClyZXR1cm47dmFyIFk9aS5ob3ZlcmxhYmVsLFc9WS5mb250LFg9e3Nob3dsZWdlbmQ6ITAsbGVnZW5kOnt0aXRsZTp7dGV4dDpJLGZvbnQ6V30sZm9udDpXLGJnY29sb3I6WS5iZ2NvbG9yLGJvcmRlcmNvbG9yOlkuYm9yZGVyY29sb3IsYm9yZGVyd2lkdGg6MSx0cmFjZWdyb3VwZ2FwOjcsdHJhY2VvcmRlcjppLmxlZ2VuZD9pLmxlZ2VuZC50cmFjZW9yZGVyOnZvaWQgMCxvcmllbnRhdGlvbjoidiJ9fSxaPXtmb250Old9O3goWCxaLHIuX2Z1bGxEYXRhKTt2YXIgSj1aLmxlZ2VuZDtKLmVudHJpZXM9W107Zm9yKHZhciBLPTA7SzxHLmxlbmd0aDtLKyspe3ZhciBRPUdbS107aWYoIm5vbmUiIT09US5ob3ZlcmluZm8pe3ZhciAkPU8oUSwhMCxhLGksSSksdHQ9JFswXSxldD0kWzFdO1EubmFtZT1ldCxRLnRleHQ9IiIhPT1ldD9ldCsiIDogIit0dDp0dDt2YXIgcnQ9US5jZFtRLmluZGV4XTtydCYmKHJ0Lm1jJiYoUS5tYz1ydC5tYykscnQubWNjJiYoUS5tYz1ydC5tY2MpLHJ0Lm1sYyYmKFEubWxjPXJ0Lm1sYykscnQubWxjYyYmKFEubWxjPXJ0Lm1sY2MpLHJ0Lm1sdyYmKFEubWx3PXJ0Lm1sdykscnQubXJjJiYoUS5tcmM9cnQubXJjKSxydC5kaXImJihRLmRpcj1ydC5kaXIpKSxRLl9kaXN0aW5jdD0hMCxKLmVudHJpZXMucHVzaChbUV0pfX1KLmVudHJpZXMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS50cmFjZS5pbmRleC1lWzBdLnRyYWNlLmluZGV4fSkpLEoubGF5ZXI9ZCxKLl9pbkhvdmVyPSEwLEouX2dyb3VwVGl0bGVGb250PVkuZ3JvdXB0aXRsZWZvbnQsYihyLEopO3ZhciBudCxpdCxhdCxvdCxzdD1kLnNlbGVjdCgiZy5sZWdlbmQiKSxsdD1WKHIsc3Qubm9kZSgpKSxjdD1sdC53aWR0aCsyKlMsdXQ9bHQuaGVpZ2h0KzIqUyxmdD1HWzBdLGh0PShmdC54MCtmdC54MSkvMixwdD0oZnQueTArZnQueTEpLzIsZHQ9IShnLnRyYWNlSXMoZnQudHJhY2UsImJhci1saWtlIil8fGcudHJhY2VJcyhmdC50cmFjZSwiYm94LXZpb2xpbiIpKTsieSI9PT1QP2R0PyhpdD1wdC1TLG50PXB0K1MpOihpdD1NYXRoLm1pbi5hcHBseShudWxsLEcubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4odC55MCx0LnkxKX0pKSksbnQ9TWF0aC5tYXguYXBwbHkobnVsbCxHLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHQueTAsdC55MSl9KSkpKTppdD1udD1vLm1lYW4oRy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LnkwK3QueTEpLzJ9KSkpLXV0LzIsIngiPT09UD9kdD8oYXQ9aHQrUyxvdD1odC1TKTooYXQ9TWF0aC5tYXguYXBwbHkobnVsbCxHLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHQueDAsdC54MSl9KSkpLG90PU1hdGgubWluLmFwcGx5KG51bGwsRy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbih0LngwLHQueDEpfSkpKSk6YXQ9b3Q9by5tZWFuKEcubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC54MCt0LngxKS8yfSkpKS1jdC8yO3ZhciBtdCxndCx2dD1FLl9vZmZzZXQseXQ9TC5fb2Zmc2V0O3JldHVybiBvdCs9dnQtY3QsaXQrPXl0LXV0LG10PShhdCs9dnQpK2N0PFImJmF0Pj0wP2F0Om90K2N0PFImJm90Pj0wP290OnZ0K2N0PFI/dnQ6YXQtaHQ8aHQtb3QrY3Q/Ui1jdDowLG10Kz1TLGd0PShudCs9eXQpK3V0PEYmJm50Pj0wP250Oml0K3V0PEYmJml0Pj0wP2l0Onl0K3V0PEY/eXQ6bnQtcHQ8cHQtaXQrdXQ/Ri11dDowLGd0Kz1TLHN0LmF0dHIoInRyYW5zZm9ybSIscyhtdC0xLGd0LTEpKSxzdH12YXIgeHQ9ZC5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikuZGF0YSh0LChmdW5jdGlvbih0KXtyZXR1cm4gQyh0KX0pKTtyZXR1cm4geHQuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcnRleHQiLCEwKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2FsbChwLmZpbGwscC5hZGRPcGFjaXR5KGYsLjgpKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm5hbWUiLCEwKSx0LmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIxcHgiKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm51bXMiLCEwKS5jYWxsKGguZm9udCxULGspfSkpLHh0LmV4aXQoKS5yZW1vdmUoKSx4dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKSxvPXQuY29sb3I7QXJyYXkuaXNBcnJheShvKSYmKG89b1t0LmV2ZW50RGF0YVswXS5wb2ludE51bWJlcl0pO3ZhciBkPXQuYmdjb2xvcnx8byxtPXAuY29tYmluZShwLm9wYWNpdHkoZCk/ZDpwLmRlZmF1bHRMaW5lLGYpLGc9cC5jb21iaW5lKHAub3BhY2l0eShvKT9vOnAuZGVmYXVsdExpbmUsZiksdj10LmJvcmRlckNvbG9yfHxwLmNvbnRyYXN0KG0pLHk9Tyh0LEIsYSxpLEksZSkseD15WzBdLGI9eVsxXSx3PWUuc2VsZWN0KCJ0ZXh0Lm51bXMiKS5jYWxsKGguZm9udCx0LmZvbnRGYW1pbHl8fFQsdC5mb250U2l6ZXx8ayx0LmZvbnRDb2xvcnx8dikudGV4dCh4KS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsMCkuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyxyKSxBPWUuc2VsZWN0KCJ0ZXh0Lm5hbWUiKSxFPTAsTD0wO2lmKGImJmIhPT14KXtBLmNhbGwoaC5mb250LHQuZm9udEZhbWlseXx8VCx0LmZvbnRTaXplfHxrLGcpLnRleHQoYikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMscik7dmFyIEM9VihyLEEubm9kZSgpKTtFPUMud2lkdGgrMipTLEw9Qy5oZWlnaHQrMipTfWVsc2UgQS5yZW1vdmUoKSxlLnNlbGVjdCgicmVjdCIpLnJlbW92ZSgpO2Uuc2VsZWN0KCJwYXRoIikuc3R5bGUoe2ZpbGw6bSxzdHJva2U6dn0pO3ZhciBQPXQueGEuX29mZnNldCsodC54MCt0LngxKS8yLHo9dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIsTj1NYXRoLmFicyh0LngxLXQueDApLGo9TWF0aC5hYnModC55MS10LnkwKSxVPVYocix3Lm5vZGUoKSksSD1VLndpZHRoL2kuX2ludlNjYWxlWCxxPVUuaGVpZ2h0L2kuX2ludlNjYWxlWTt0LnR5MD0oRC1VLnRvcCkvaS5faW52U2NhbGVZLHQuYng9SCsyKlMsdC5ieT1NYXRoLm1heChxKzIqUyxMKSx0LmFuY2hvcj0ic3RhcnQiLHQudHh3aWR0aD1ILHQudHgyd2lkdGg9RSx0Lm9mZnNldD0wO3ZhciBHLFksVz0oSCtNK1MrRSkqaS5faW52U2NhbGVYO2lmKGMpdC5wb3M9UCxHPXorai8yK1c8PUYsWT16LWovMi1XPj0wLCJ0b3AiIT09dC5pZGVhbEFsaWduJiZHfHwhWT9HPyh6Kz1qLzIsdC5hbmNob3I9InN0YXJ0Iik6dC5hbmNob3I9Im1pZGRsZSI6KHotPWovMix0LmFuY2hvcj0iZW5kIik7ZWxzZSBpZih0LnBvcz16LEc9UCtOLzIrVzw9UixZPVAtTi8yLVc+PTAsImxlZnQiIT09dC5pZGVhbEFsaWduJiZHfHwhWSlpZihHKVArPU4vMix0LmFuY2hvcj0ic3RhcnQiO2Vsc2V7dC5hbmNob3I9Im1pZGRsZSI7dmFyIFg9Vy8yLFo9UCtYLVIsSj1QLVg7Wj4wJiYoUC09WiksSjwwJiYoUCs9LUopfWVsc2UgUC09Ti8yLHQuYW5jaG9yPSJlbmQiO3cuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSxFJiZBLmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksZS5hdHRyKCJ0cmFuc2Zvcm0iLHMoUCx6KSsoYz9sKF8pOiIiKSl9KSkseHR9ZnVuY3Rpb24gTyh0LGUscixuLGksYSl7dmFyIHM9IiIsbD0iIjt2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lJiYodC50cmFjZS5fbWV0YSYmKHQubmFtZT1vLnRlbXBsYXRlU3RyaW5nKHQubmFtZSx0LnRyYWNlLl9tZXRhKSkscz1CKHQubmFtZSx0Lm5hbWVMZW5ndGgpKTt2YXIgYz1yLmNoYXJBdCgwKSx1PSJ4Ij09PWM/InkiOiJ4Ijt2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihsKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYobCs9Ink6ICIrdC55TGFiZWwrIjxicj4iKSwiY2hvcm9wbGV0aCIhPT10LnRyYWNlLnR5cGUmJiJjaG9yb3BsZXRobWFwYm94IiE9PXQudHJhY2UudHlwZSYmKGwrPShsPyJ6OiAiOiIiKSt0LnpMYWJlbCkpOmUmJnRbYysiTGFiZWwiXT09PWk/bD10W3UrIkxhYmVsIl18fCIiOnZvaWQgMD09PXQueExhYmVsP3ZvaWQgMCE9PXQueUxhYmVsJiYic2NhdHRlcmNhcnBldCIhPT10LnRyYWNlLnR5cGUmJihsPXQueUxhYmVsKTpsPXZvaWQgMD09PXQueUxhYmVsP3QueExhYmVsOiIoIit0LnhMYWJlbCsiLCAiK3QueUxhYmVsKyIpIiwhdC50ZXh0JiYwIT09dC50ZXh0fHxBcnJheS5pc0FycmF5KHQudGV4dCl8fChsKz0obD8iPGJyPiI6IiIpK3QudGV4dCksdm9pZCAwIT09dC5leHRyYVRleHQmJihsKz0obD8iPGJyPiI6IiIpK3QuZXh0cmFUZXh0KSxhJiYiIj09PWwmJiF0LmhvdmVydGVtcGxhdGUmJigiIj09PXMmJmEucmVtb3ZlKCksbD1zKTt2YXIgZj10LmhvdmVydGVtcGxhdGV8fCExO2lmKGYpe3ZhciBoPXQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8dDt0W2MrIkxhYmVsIl0hPT1pJiYoaFtjKyJvdGhlciJdPWhbYysiVmFsIl0saFtjKyJvdGhlckxhYmVsIl09aFtjKyJMYWJlbCJdKSxsPShsPW8uaG92ZXJ0ZW1wbGF0ZVN0cmluZyhmLGgsbi5fZDNsb2NhbGUsdC5ldmVudERhdGFbMF18fHt9LHQudHJhY2UuX21ldGEpKS5yZXBsYWNlKFAsKGZ1bmN0aW9uKGUscil7cmV0dXJuIHM9QihyLHQubmFtZUxlbmd0aCksIiJ9KSl9cmV0dXJuW2wsc119ZnVuY3Rpb24geih0LGUscixpKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdCpyfSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0Kml9O3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodC5kZWwpcmV0dXJuIHIucmVtb3ZlKCk7dmFyIGk9ci5zZWxlY3QoInRleHQubnVtcyIpLHM9dC5hbmNob3IsbD0iZW5kIj09PXM/LTE6MSxjPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MH1bc10sZj1jKihNK1MpLHA9ZitjKih0LnR4d2lkdGgrUyksZD0wLG09dC5vZmZzZXQsZz0ibWlkZGxlIj09PXM7ZyYmKGYtPXQudHgyd2lkdGgvMixwKz10LnR4d2lkdGgvMitTKSxlJiYobSo9LUEsZD10Lm9mZnNldCprKSxyLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLGc/Ik0tIithKHQuYngvMit0LnR4MndpZHRoLzIpKyIsIitvKG0tdC5ieS8yKSsiaCIrYSh0LmJ4KSsidiIrbyh0LmJ5KSsiaC0iK2EodC5ieCkrIloiOiJNMCwwTCIrYShsKk0rZCkrIiwiK28oTSttKSsidiIrbyh0LmJ5LzItTSkrImgiK2EobCp0LmJ4KSsidi0iK28odC5ieSkrIkgiK2EobCpNK2QpKyJWIitvKG0tTSkrIloiKTt2YXIgdj1kK2YseT1tK3QudHkwLXQuYnkvMitTLHg9dC50ZXh0QWxpZ258fCJhdXRvIjsiYXV0byIhPT14JiYoImxlZnQiPT09eCYmInN0YXJ0IiE9PXM/KGkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLHY9Zz8tdC5ieC8yLXQudHgyd2lkdGgvMitTOi10LmJ4LVMpOiJyaWdodCI9PT14JiYiZW5kIiE9PXMmJihpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIiksdj1nP3QuYngvMi10LnR4MndpZHRoLzItUzp0LmJ4K1MpKSxpLmNhbGwodS5wb3NpdGlvblRleHQsYSh2KSxvKHkpKSx0LnR4MndpZHRoJiYoci5zZWxlY3QoInRleHQubmFtZSIpLmNhbGwodS5wb3NpdGlvblRleHQsYShwK2MqUytkKSxvKG0rdC50eTAtdC5ieS8yK1MpKSxyLnNlbGVjdCgicmVjdCIpLmNhbGwoaC5zZXRSZWN0LGEocCsoYy0xKSp0LnR4MndpZHRoLzIrZCksbyhtLXQuYnkvMi0xKSxhKHQudHgyd2lkdGgpLG8odC5ieSsyKSkpfSkpfWZ1bmN0aW9uIEQodCxlKXt2YXIgcj10LmluZGV4LG49dC50cmFjZXx8e30sYT10LmNkWzBdLHM9dC5jZFtyXXx8e307ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdHx8aSh0KSYmMD09PXR9dmFyIGM9QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbih0LGUpe3ZhciBpPW8uY2FzdE9wdGlvbihhLHIsdCk7cmV0dXJuIGwoaSk/aTpvLmV4dHJhY3RPcHRpb24oe30sbiwiIixlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRyYWN0T3B0aW9uKHMsbix0LGUpfTtmdW5jdGlvbiB1KGUscixuKXt2YXIgaT1jKHIsbik7bChpKSYmKHRbZV09aSl9aWYodSgiaG92ZXJpbmZvIiwiaGkiLCJob3ZlcmluZm8iKSx1KCJiZ2NvbG9yIiwiaGJnIiwiaG92ZXJsYWJlbC5iZ2NvbG9yIiksdSgiYm9yZGVyQ29sb3IiLCJoYmMiLCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIiksdSgiZm9udEZhbWlseSIsImh0ZiIsImhvdmVybGFiZWwuZm9udC5mYW1pbHkiKSx1KCJmb250U2l6ZSIsImh0cyIsImhvdmVybGFiZWwuZm9udC5zaXplIiksdSgiZm9udENvbG9yIiwiaHRjIiwiaG92ZXJsYWJlbC5mb250LmNvbG9yIiksdSgibmFtZUxlbmd0aCIsImhubCIsImhvdmVybGFiZWwubmFtZWxlbmd0aCIpLHUoInRleHRBbGlnbiIsImh0YSIsImhvdmVybGFiZWwuYWxpZ24iKSx0LnBvc3JlZj0ieSI9PT1lfHwiY2xvc2VzdCI9PT1lJiYiaCI9PT1uLm9yaWVudGF0aW9uP3QueGEuX29mZnNldCsodC54MCt0LngxKS8yOnQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLHQueDA9by5jb25zdHJhaW4odC54MCwwLHQueGEuX2xlbmd0aCksdC54MT1vLmNvbnN0cmFpbih0LngxLDAsdC54YS5fbGVuZ3RoKSx0LnkwPW8uY29uc3RyYWluKHQueTAsMCx0LnlhLl9sZW5ndGgpLHQueTE9by5jb25zdHJhaW4odC55MSwwLHQueWEuX2xlbmd0aCksdm9pZCAwIT09dC54TGFiZWxWYWwmJih0LnhMYWJlbD0ieExhYmVsImluIHQ/dC54TGFiZWw6bS5ob3ZlckxhYmVsVGV4dCh0LnhhLHQueExhYmVsVmFsLG4ueGhvdmVyZm9ybWF0KSx0LnhWYWw9dC54YS5jMmQodC54TGFiZWxWYWwpKSx2b2lkIDAhPT10LnlMYWJlbFZhbCYmKHQueUxhYmVsPSJ5TGFiZWwiaW4gdD90LnlMYWJlbDptLmhvdmVyTGFiZWxUZXh0KHQueWEsdC55TGFiZWxWYWwsbi55aG92ZXJmb3JtYXQpLHQueVZhbD10LnlhLmMyZCh0LnlMYWJlbFZhbCkpLHZvaWQgMCE9PXQuekxhYmVsVmFsJiZ2b2lkIDA9PT10LnpMYWJlbCYmKHQuekxhYmVsPVN0cmluZyh0LnpMYWJlbFZhbCkpLCEoaXNOYU4odC54ZXJyKXx8ImxvZyI9PT10LnhhLnR5cGUmJnQueGVycjw9MCkpe3ZhciBmPW0udGlja1RleHQodC54YSx0LnhhLmMybCh0LnhlcnIpLCJob3ZlciIpLnRleHQ7dm9pZCAwIT09dC54ZXJybmVnP3QueExhYmVsKz0iICsiK2YrIiAvIC0iK20udGlja1RleHQodC54YSx0LnhhLmMybCh0LnhlcnJuZWcpLCJob3ZlciIpLnRleHQ6dC54TGFiZWwrPSIgXHhiMSAiK2YsIngiPT09ZSYmKHQuZGlzdGFuY2UrPTEpfWlmKCEoaXNOYU4odC55ZXJyKXx8ImxvZyI9PT10LnlhLnR5cGUmJnQueWVycjw9MCkpe3ZhciBoPW0udGlja1RleHQodC55YSx0LnlhLmMybCh0LnllcnIpLCJob3ZlciIpLnRleHQ7dm9pZCAwIT09dC55ZXJybmVnP3QueUxhYmVsKz0iICsiK2grIiAvIC0iK20udGlja1RleHQodC55YSx0LnlhLmMybCh0LnllcnJuZWcpLCJob3ZlciIpLnRleHQ6dC55TGFiZWwrPSIgXHhiMSAiK2gsInkiPT09ZSYmKHQuZGlzdGFuY2UrPTEpfXZhciBwPXQuaG92ZXJpbmZvfHx0LnRyYWNlLmhvdmVyaW5mbztyZXR1cm4gcCYmImFsbCIhPT1wJiYoLTE9PT0ocD1BcnJheS5pc0FycmF5KHApP3A6cC5zcGxpdCgiKyIpKS5pbmRleE9mKCJ4IikmJih0LnhMYWJlbD12b2lkIDApLC0xPT09cC5pbmRleE9mKCJ5IikmJih0LnlMYWJlbD12b2lkIDApLC0xPT09cC5pbmRleE9mKCJ6IikmJih0LnpMYWJlbD12b2lkIDApLC0xPT09cC5pbmRleE9mKCJ0ZXh0IikmJih0LnRleHQ9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigibmFtZSIpJiYodC5uYW1lPXZvaWQgMCkpLHR9ZnVuY3Rpb24gUih0LGUscil7dmFyIG4saSxvPXIuY29udGFpbmVyLHM9ci5mdWxsTGF5b3V0LGw9cy5fc2l6ZSxjPXIuZXZlbnQsdT0hIWUuaExpbmVQb2ludCxmPSEhZS52TGluZVBvaW50O2lmKG8uc2VsZWN0QWxsKCIuc3Bpa2VsaW5lIikucmVtb3ZlKCksZnx8dSl7dmFyIGQ9cC5jb21iaW5lKHMucGxvdF9iZ2NvbG9yLHMucGFwZXJfYmdjb2xvcik7aWYodSl7dmFyIGcsdix5PWUuaExpbmVQb2ludDtuPXkmJnkueGEsImN1cnNvciI9PT0oaT15JiZ5LnlhKS5zcGlrZXNuYXA/KGc9Yy5wb2ludGVyWCx2PWMucG9pbnRlclkpOihnPW4uX29mZnNldCt5Lngsdj1pLl9vZmZzZXQreS55KTt2YXIgeCxiLF89YS5yZWFkYWJpbGl0eSh5LmNvbG9yLGQpPDEuNT9wLmNvbnRyYXN0KGQpOnkuY29sb3Isdz1pLnNwaWtlbW9kZSxUPWkuc3Bpa2V0aGlja25lc3Msaz1pLnNwaWtlY29sb3J8fF8sQT1tLmdldFB4UG9zaXRpb24odCxpKTtpZigtMSE9PXcuaW5kZXhPZigidG9heGlzIil8fC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpJiYoeD1BLGI9ZyksLTEhPT13LmluZGV4T2YoImFjcm9zcyIpKXt2YXIgTT1pLl9jb3VudGVyRG9tYWluTWluLFM9aS5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1pLmFuY2hvciYmKE09TWF0aC5taW4oTSxpLnBvc2l0aW9uKSxTPU1hdGgubWF4KFMsaS5wb3NpdGlvbikpLHg9bC5sK00qbC53LGI9bC5sK1MqbC53fW8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOnYseTI6diwic3Ryb2tlLXdpZHRoIjpULHN0cm9rZTprLCJzdHJva2UtZGFzaGFycmF5IjpoLmRhc2hTdHlsZShpLnNwaWtlZGFzaCxUKX0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksby5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTp4LHgyOmIseTE6dix5Mjp2LCJzdHJva2Utd2lkdGgiOlQrMixzdHJva2U6ZH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCl9LTEhPT13LmluZGV4T2YoIm1hcmtlciIpJiZvLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7Y3g6QSsoInJpZ2h0IiE9PWkuc2lkZT9UOi1UKSxjeTp2LHI6VCxmaWxsOmt9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX1pZihmKXt2YXIgRSxMLEM9ZS52TGluZVBvaW50O249QyYmQy54YSxpPUMmJkMueWEsImN1cnNvciI9PT1uLnNwaWtlc25hcD8oRT1jLnBvaW50ZXJYLEw9Yy5wb2ludGVyWSk6KEU9bi5fb2Zmc2V0K0MueCxMPWkuX29mZnNldCtDLnkpO3ZhciBQLEksTz1hLnJlYWRhYmlsaXR5KEMuY29sb3IsZCk8MS41P3AuY29udHJhc3QoZCk6Qy5jb2xvcix6PW4uc3Bpa2Vtb2RlLEQ9bi5zcGlrZXRoaWNrbmVzcyxSPW4uc3Bpa2Vjb2xvcnx8TyxGPW0uZ2V0UHhQb3NpdGlvbih0LG4pO2lmKC0xIT09ei5pbmRleE9mKCJ0b2F4aXMiKXx8LTEhPT16LmluZGV4T2YoImFjcm9zcyIpKXtpZigtMSE9PXouaW5kZXhPZigidG9heGlzIikmJihQPUYsST1MKSwtMSE9PXouaW5kZXhPZigiYWNyb3NzIikpe3ZhciBCPW4uX2NvdW50ZXJEb21haW5NaW4sTj1uLl9jb3VudGVyRG9tYWluTWF4OyJmcmVlIj09PW4uYW5jaG9yJiYoQj1NYXRoLm1pbihCLG4ucG9zaXRpb24pLE49TWF0aC5tYXgoTixuLnBvc2l0aW9uKSksUD1sLnQrKDEtTikqbC5oLEk9bC50KygxLUIpKmwuaH1vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOkUseDI6RSx5MTpQLHkyOkksInN0cm9rZS13aWR0aCI6RCxzdHJva2U6Uiwic3Ryb2tlLWRhc2hhcnJheSI6aC5kYXNoU3R5bGUobi5zcGlrZWRhc2gsRCl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6RSx4MjpFLHkxOlAseTI6SSwic3Ryb2tlLXdpZHRoIjpEKzIsc3Ryb2tlOmR9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09ei5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4OkUsY3k6Ri0oInRvcCIhPT1uLnNpZGU/RDotRCkscjpELGZpbGw6Un0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfX19ZnVuY3Rpb24gRih0LGUpe3JldHVybiFlfHwoZS52TGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMudkxpbmVQb2ludHx8ZS5oTGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMuaExpbmVQb2ludCl9ZnVuY3Rpb24gQih0LGUpe3JldHVybiB1LnBsYWluVGV4dCh0fHwiIix7bGVuOmUsYWxsb3dlZFRhZ3M6WyJiciIsInN1YiIsInN1cCIsImIiLCJpIiwiZW0iXX0pfWZ1bmN0aW9uIE4odCxlLHIpe3ZhciBuPWVbdCsiYSJdLGk9ZVt0KyJWYWwiXSxhPWUuY2RbMF07aWYoImNhdGVnb3J5Ij09PW4udHlwZSlpPW4uX2NhdGVnb3JpZXNNYXBbaV07ZWxzZSBpZigiZGF0ZSI9PT1uLnR5cGUpe3ZhciBvPWUudHJhY2VbdCsicGVyaW9kYWxpZ25tZW50Il07aWYobyl7dmFyIHM9ZS5jZFtlLmluZGV4XSxsPXNbdCsiU3RhcnQiXTt2b2lkIDA9PT1sJiYobD1zW3RdKTt2YXIgYz1zW3QrIkVuZCJdO3ZvaWQgMD09PWMmJihjPXNbdF0pO3ZhciB1PWMtbDsiZW5kIj09PW8/aSs9dToibWlkZGxlIj09PW8mJihpKz11LzIpfWk9bi5kMmMoaSl9cmV0dXJuIGEmJmEudCYmYS50LnBvc0xldHRlcj09PW4uX2lkJiYoImdyb3VwIiE9PXIuYm94bW9kZSYmImdyb3VwIiE9PXIudmlvbGlubW9kZXx8KGkrPWEudC5kUG9zKSksaX1mdW5jdGlvbiBqKHQpe3JldHVybiB0Lm9mZnNldFRvcCt0LmNsaWVudFRvcH1mdW5jdGlvbiBVKHQpe3JldHVybiB0Lm9mZnNldExlZnQrdC5jbGllbnRMZWZ0fWZ1bmN0aW9uIFYodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPW4ueCxhPW4ueSxzPWkrbi53aWR0aCxsPWErbi5oZWlnaHQsYz1vLmFwcGx5M0RUcmFuc2Zvcm0oci5faW52VHJhbnNmb3JtKShpLGEpLHU9by5hcHBseTNEVHJhbnNmb3JtKHIuX2ludlRyYW5zZm9ybSkocyxsKSxmPWNbMF0saD1jWzFdLHA9dVswXSxkPXVbMV07cmV0dXJue3g6Zix5Omgsd2lkdGg6cC1mLGhlaWdodDpkLWgsdG9wOk1hdGgubWluKGgsZCksbGVmdDpNYXRoLm1pbihmLHApLHJpZ2h0Ok1hdGgubWF4KGYscCksYm90dG9tOk1hdGgubWF4KGgsZCl9fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2V2ZW50cyI6NDkyLCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yIjo1MTQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9jb2xvciI6MzY2LCIuLi9kcmFnZWxlbWVudCI6Mzg1LCIuLi9kcmF3aW5nIjozODgsIi4uL2xlZ2VuZC9kZWZhdWx0cyI6NDE4LCIuLi9sZWdlbmQvZHJhdyI6NDE5LCIuL2NvbnN0YW50cyI6NDAwLCIuL2hlbHBlcnMiOjQwMiwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxOTAsdGlueWNvbG9yMjozMTJ9XSw0MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe289b3x8e307dmFyIHM9ZS5sZWdlbmQ7ZnVuY3Rpb24gbCh0KXtvLmZvbnRbdF18fChvLmZvbnRbdF09cz9lLmxlZ2VuZC5mb250W3RdOmUuZm9udFt0XSl9ZSYmYShlLmhvdmVybW9kZSkmJihvLmZvbnR8fChvLmZvbnQ9e30pLGwoInNpemUiKSxsKCJmYW1pbHkiKSxsKCJjb2xvciIpLHM/KG8uYmdjb2xvcnx8KG8uYmdjb2xvcj1pLmNvbWJpbmUoZS5sZWdlbmQuYmdjb2xvcixlLnBhcGVyX2JnY29sb3IpKSxvLmJvcmRlcmNvbG9yfHwoby5ib3JkZXJjb2xvcj1lLmxlZ2VuZC5ib3JkZXJjb2xvcikpOm8uYmdjb2xvcnx8KG8uYmdjb2xvcj1lLnBhcGVyX2JnY29sb3IpKSxyKCJob3ZlcmxhYmVsLmJnY29sb3IiLG8uYmdjb2xvcikscigiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsby5ib3JkZXJjb2xvcikscigiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIixvLm5hbWVsZW5ndGgpLG4uY29lcmNlRm9udChyLCJob3ZlcmxhYmVsLmZvbnQiLG8uZm9udCkscigiaG92ZXJsYWJlbC5hbGlnbiIsby5hbGlnbil9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9jb2xvciI6MzY2LCIuL2hlbHBlcnMiOjQwMn1dLDQwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIHZvaWQgMCE9PWVbcl0/ZVtyXTpuLmNvZXJjZSh0LGUsaSxyLGEpfXJldHVybiByKCJjbGlja21vZGUiKSxyKCJob3Zlcm1vZGUiKX19LHsiLi4vLi4vbGliIjo1MDMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjQwN31dLDQwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2RyYWdlbGVtZW50Iiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vaG92ZXIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZngiLGNvbnN0YW50czp0KCIuL2NvbnN0YW50cyIpLHNjaGVtYTp7bGF5b3V0OnN9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczpzLHN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzOnQoIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksZ2V0RGlzdGFuY2VGdW5jdGlvbjpvLmdldERpc3RhbmNlRnVuY3Rpb24sZ2V0Q2xvc2VzdDpvLmdldENsb3Nlc3QsaW5ib3g6by5pbmJveCxxdWFkcmF0dXJlOm8ucXVhZHJhdHVyZSxhcHBlbmRBcnJheVBvaW50VmFsdWU6by5hcHBlbmRBcnJheVBvaW50VmFsdWUsY2FzdEhvdmVyT3B0aW9uOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQsZSwiaG92ZXJsYWJlbC4iK3IpfSxjYXN0SG92ZXJpbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQsciwiaG92ZXJpbmZvIiwoZnVuY3Rpb24ocil7cmV0dXJuIGkuY29lcmNlSG92ZXJpbmZvKHtob3ZlcmluZm86cn0se19tb2R1bGU6dC5fbW9kdWxlfSxlKX0pKX0saG92ZXI6bC5ob3Zlcix1bmhvdmVyOmEudW5ob3Zlcixsb25lSG92ZXI6bC5sb25lSG92ZXIsbG9uZVVuaG92ZXI6ZnVuY3Rpb24odCl7dmFyIGU9aS5pc0QzU2VsZWN0aW9uKHQpP3Q6bi5zZWxlY3QodCk7ZS5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikucmVtb3ZlKCksZS5zZWxlY3RBbGwoIi5zcGlrZWxpbmUiKS5yZW1vdmUoKX0sY2xpY2s6dCgiLi9jbGljayIpfX0seyIuLi8uLi9saWIiOjUwMywiLi4vZHJhZ2VsZW1lbnQiOjM4NSwiLi9hdHRyaWJ1dGVzIjozOTcsIi4vY2FsYyI6Mzk4LCIuL2NsaWNrIjozOTksIi4vY29uc3RhbnRzIjo0MDAsIi4vZGVmYXVsdHMiOjQwMSwiLi9oZWxwZXJzIjo0MDIsIi4vaG92ZXIiOjQwMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NDA3LCIuL2xheW91dF9kZWZhdWx0cyI6NDA4LCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiOjQwOSwiQHBsb3RseS9kMyI6NTh9XSw0MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9aSh7ZWRpdFR5cGU6Im5vbmUifSk7YS5mYW1pbHkuZGZsdD1uLkhPVkVSRk9OVCxhLnNpemUuZGZsdD1uLkhPVkVSRk9OVFNJWkUsZS5leHBvcnRzPXtjbGlja21vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImV2ZW50Iiwic2VsZWN0Il0sZGZsdDoiZXZlbnQiLGVkaXRUeXBlOiJwbG90IixleHRyYXM6WyJub25lIl19LGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ6b29tIiwicGFuIiwic2VsZWN0IiwibGFzc28iLCJkcmF3Y2xvc2VkcGF0aCIsImRyYXdvcGVucGF0aCIsImRyYXdsaW5lIiwiZHJhd3JlY3QiLCJkcmF3Y2lyY2xlIiwib3JiaXQiLCJ0dXJudGFibGUiLCExXSxkZmx0OiJ6b29tIixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJjbG9zZXN0IiwhMSwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0sZGZsdDoiY2xvc2VzdCIsZWRpdFR5cGU6Im1vZGViYXIifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0Oi0xLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGZvbnQ6YSxncm91cHRpdGxlZm9udDppKHtlZGl0VHlwZToibm9uZSJ9KSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwiYXV0byJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJub25lIn0sbmFtZWxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MTUsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9LHNlbGVjdGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaCIsInYiLCJkIiwiYW55Il0sZGZsdDoiYW55IixlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4NSwiLi9jb25zdGFudHMiOjQwMH1dLDQwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4vaG92ZXJtb2RlX2RlZmF1bHRzIiksbz10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YSh0LGUpJiYocigiaG92ZXJkaXN0YW5jZSIpLHIoInNwaWtlZGlzdGFuY2UiKSksInNlbGVjdCI9PT1yKCJkcmFnbW9kZSIpJiZyKCJzZWxlY3RkaXJlY3Rpb24iKTt2YXIgcz1lLl9oYXMoIm1hcGJveCIpLGw9ZS5faGFzKCJnZW8iKSxjPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7Inpvb20iPT09ZS5kcmFnbW9kZSYmKChzfHxsKSYmMT09PWN8fHMmJmwmJjI9PT1jKSYmKGUuZHJhZ21vZGU9InBhbiIpLG8odCxlLHIpLG4uY29lcmNlRm9udChyLCJob3ZlcmxhYmVsLmdyb3VwdGl0bGVmb250IixlLmhvdmVybGFiZWwuZm9udCl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjQwNCwiLi9ob3Zlcm1vZGVfZGVmYXVsdHMiOjQwNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NDA3fV0sNDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUsKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9KSl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjQwNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NDA3fV0sNDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxsPXtyb3dzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHJvd29yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgdG8gYm90dG9tIiwiYm90dG9tIHRvIHRvcCJdLGRmbHQ6InRvcCB0byBib3R0b20iLGVkaXRUeXBlOiJwbG90In0sY29sdW1uczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxzdWJwbG90czp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxkaW1lbnNpb25zOjIsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbaSgieHkiKS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seGF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby54LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx5YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLnkudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHBhdHRlcm46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGVwZW5kZW50IiwiY291cGxlZCJdLGRmbHQ6ImNvdXBsZWQiLGVkaXRUeXBlOiJwbG90In0seGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSxkb21haW46YSh7bmFtZToiZ3JpZCIsZWRpdFR5cGU6InBsb3QiLG5vR3JpZENlbGw6ITB9LHt9KSx4c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90dG9tIiwiYm90dG9tIHBsb3QiLCJ0b3AgcGxvdCIsInRvcCJdLGRmbHQ6ImJvdHRvbSBwbG90IixlZGl0VHlwZToicGxvdCJ9LHlzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwibGVmdCBwbG90IiwicmlnaHQgcGxvdCIsInJpZ2h0Il0sZGZsdDoibGVmdCBwbG90IixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In07ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ZVtyKyJheGVzIl0saT1PYmplY3Qua2V5cygodC5fc3Bsb21BeGVzfHx7fSlbcl18fHt9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOmkubGVuZ3RoP2k6dm9pZCAwfWZ1bmN0aW9uIHUodCxlLHIsbixpLGEpe3ZhciBvPWUodCsiZ2FwIixyKSxzPWUoImRvbWFpbi4iK3QpO2UodCsic2lkZSIsbik7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPXNbMF0sdT0oc1sxXS1jKS8oaS1vKSxmPXUqKDEtbyksaD0wO2g8aTtoKyspe3ZhciBwPWMrdSpoO2xbYT9pLTEtaDpoXT1bcCxwK2ZdfXJldHVybiBsfWZ1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYSxvPW5ldyBBcnJheShyKTtmdW5jdGlvbiBzKHQscil7LTEhPT1lLmluZGV4T2YocikmJnZvaWQgMD09PW5bcl0/KG9bdF09cixuW3JdPXQpOm9bdF09IiJ9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoYT0wO2E8cjthKyspcyhhLHRbYV0pO2Vsc2UgZm9yKHMoMCxpKSxhPTE7YTxyO2ErKylzKGEsaSsoYSsxKSk7cmV0dXJuIG99ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImdyaWQiLHNjaGVtYTp7bGF5b3V0OntncmlkOmx9fSxsYXlvdXRBdHRyaWJ1dGVzOmwsc2l6ZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ncmlkfHx7fSxpPWMoZSxyLCJ4IiksYT1jKGUsciwieSIpO2lmKHQuZ3JpZHx8aXx8YSl7dmFyIG8sZixoPUFycmF5LmlzQXJyYXkoci5zdWJwbG90cykmJkFycmF5LmlzQXJyYXkoci5zdWJwbG90c1swXSkscD1BcnJheS5pc0FycmF5KGkpLGQ9QXJyYXkuaXNBcnJheShhKSxtPXAmJmkhPT1yLnhheGVzJiZkJiZhIT09ci55YXhlcztoPyhvPXIuc3VicGxvdHMubGVuZ3RoLGY9ci5zdWJwbG90c1swXS5sZW5ndGgpOihkJiYobz1hLmxlbmd0aCkscCYmKGY9aS5sZW5ndGgpKTt2YXIgZz1zLm5ld0NvbnRhaW5lcihlLCJncmlkIiksdj1rKCJyb3dzIixvKSx5PWsoImNvbHVtbnMiLGYpO2lmKHYqeT4xKXtpZighaCYmIXAmJiFkKSJpbmRlcGVuZGVudCI9PT1rKCJwYXR0ZXJuIikmJihoPSEwKTtnLl9oYXNTdWJwbG90R3JpZD1oO3ZhciB4LGIsXz0idG9wIHRvIGJvdHRvbSI9PT1rKCJyb3dvcmRlciIpLHc9aD8uMjouMSxUPWg/LjM6LjE7bSYmZS5fc3Bsb21HcmlkRGZsdCYmKHg9ZS5fc3Bsb21HcmlkRGZsdC54c2lkZSxiPWUuX3NwbG9tR3JpZERmbHQueXNpZGUpLGcuX2RvbWFpbnM9e3g6dSgieCIsayx3LHgseSkseTp1KCJ5IixrLFQsYix2LF8pfX1lbHNlIGRlbGV0ZSBlLmdyaWR9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBuLmNvZXJjZShyLGcsbCx0LGUpfX0sY29udGVudERlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5ncmlkO2lmKHImJnIuX2RvbWFpbnMpe3ZhciBuLGksYSxvLHMsbCx1LGg9dC5ncmlkfHx7fSxwPWUuX3N1YnBsb3RzLGQ9ci5faGFzU3VicGxvdEdyaWQsbT1yLnJvd3MsZz1yLmNvbHVtbnMsdj0iaW5kZXBlbmRlbnQiPT09ci5wYXR0ZXJuLHk9ci5fYXhpc01hcD17fTtpZihkKXt2YXIgeD1oLnN1YnBsb3RzfHxbXTtsPXIuc3VicGxvdHM9bmV3IEFycmF5KG0pO3ZhciBiPTE7Zm9yKG49MDtuPG07bisrKXt2YXIgXz1sW25dPW5ldyBBcnJheShnKSx3PXhbbl18fFtdO2ZvcihpPTA7aTxnO2krKylpZih2PyhzPTE9PT1iPyJ4eSI6IngiK2IrInkiK2IsYisrKTpzPXdbaV0sX1tpXT0iIiwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2Yocykpe2lmKHU9cy5pbmRleE9mKCJ5IiksYT1zLnNsaWNlKDAsdSksbz1zLnNsaWNlKHUpLHZvaWQgMCE9PXlbYV0mJnlbYV0hPT1pfHx2b2lkIDAhPT15W29dJiZ5W29dIT09biljb250aW51ZTtfW2ldPXMseVthXT1pLHlbb109bn19fWVsc2V7dmFyIFQ9YyhlLGgsIngiKSxrPWMoZSxoLCJ5Iik7ci54YXhlcz1mKFQscC54YXhpcyxnLHksIngiKSxyLnlheGVzPWYoayxwLnlheGlzLG0seSwieSIpfXZhciBBPXIuX2FuY2hvcnM9e30sTT0idG9wIHRvIGJvdHRvbSI9PT1yLnJvd29yZGVyO2Zvcih2YXIgUyBpbiB5KXt2YXIgRSxMLEMsUD1TLmNoYXJBdCgwKSxJPXJbUCsic2lkZSJdO2lmKEkubGVuZ3RoPDgpQVtTXT0iZnJlZSI7ZWxzZSBpZigieCI9PT1QKXtpZigidCI9PT1JLmNoYXJBdCgwKT09PU0/KEU9MCxMPTEsQz1tKTooRT1tLTEsTD0tMSxDPS0xKSxkKXt2YXIgTz15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW25dW09dKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSgwLHUpPT09Uykpe0FbU109cy5zbGljZSh1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYobz1yLnlheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihTK28pKXtBW1NdPW87YnJlYWt9fWVsc2UgaWYoImwiPT09SS5jaGFyQXQoMCk/KEU9MCxMPTEsQz1nKTooRT1nLTEsTD0tMSxDPS0xKSxkKXt2YXIgej15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW3pdW25dKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSh1KT09PVMpKXtBW1NdPXMuc2xpY2UoMCx1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYoYT1yLnhheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihhK1MpKXtBW1NdPWE7YnJlYWt9fX19fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3JlZ2V4Ijo1MjAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NTYxLCIuLi8uLi9wbG90cy9kb21haW4iOjU4NH1dLDQxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dCgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTtlLmV4cG9ydHM9aSgiaW1hZ2UiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIixlZGl0VHlwZToiYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjQ3MiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo1NjF9XSw0MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsZj1lLl9pZC5jaGFyQXQoMCksaD0wO2g8dS5sZW5ndGg7aCsrKWlmKGM9ImltYWdlc1siK2grIl0uIiwobD11W2hdKVtmKyJyZWYiXT09PWUuX2lkKXt2YXIgcD1sW2ZdLGQ9bFsic2l6ZSIrZl0sbT1udWxsLGc9bnVsbDtpZihvKXttPWkocCxlLnJhbmdlKTt2YXIgdj1kL01hdGgucG93KDEwLG0pLzI7Zz0yKk1hdGgubG9nKHYrTWF0aC5zcXJ0KDErdip2KSkvTWF0aC5MTjEwfWVsc2UgZz0obT1NYXRoLnBvdygxMCxwKSkqKE1hdGgucG93KDEwLGQvMiktTWF0aC5wb3coMTAsLWQvMikpO24obSk/bihnKXx8KGc9bnVsbCk6KG09bnVsbCxnPW51bGwpLGEoYytmLG0pLGEoYysic2l6ZSIrZixnKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjUzMSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDQxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgcz1hKCJzb3VyY2UiKTtpZighYSgidmlzaWJsZSIsISFzKSlyZXR1cm4gZTthKCJsYXllciIpLGEoInhhbmNob3IiKSxhKCJ5YW5jaG9yIiksYSgic2l6ZXgiKSxhKCJzaXpleSIpLGEoInNpemluZyIpLGEoIm9wYWNpdHkiKTtmb3IodmFyIGw9e19mdWxsTGF5b3V0OnJ9LGM9WyJ4IiwieSJdLHU9MDt1PDI7dSsrKXt2YXIgZj1jW3VdLGg9aS5jb2VyY2VSZWYodCxlLGwsZiwicGFwZXIiLHZvaWQgMCk7aWYoInBhcGVyIiE9PWgpaS5nZXRGcm9tSWQobCxoKS5faW1nSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpLmNvZXJjZVBvc2l0aW9uKGUsbCxhLGgsZiwwKX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiaW1hZ2VzIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4vYXR0cmlidXRlcyI6NDExfV0sNDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2RyYXdpbmciKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbD10Ll9mdWxsTGF5b3V0LGM9W10sdT17fSxmPVtdO2ZvcihyPTA7cjxsLmltYWdlcy5sZW5ndGg7cisrKXt2YXIgaD1sLmltYWdlc1tyXTtpZihoLnZpc2libGUpaWYoImJlbG93Ij09PWgubGF5ZXImJiJwYXBlciIhPT1oLnhyZWYmJiJwYXBlciIhPT1oLnlyZWYpe2U9by5yZWYyaWQoaC54cmVmKStvLnJlZjJpZChoLnlyZWYpO3ZhciBwPWwuX3Bsb3RzW2VdO2lmKCFwKXtmLnB1c2goaCk7Y29udGludWV9cC5tYWlucGxvdCYmKGU9cC5tYWlucGxvdC5pZCksdVtlXXx8KHVbZV09W10pLHVbZV0ucHVzaChoKX1lbHNlImFib3ZlIj09PWgubGF5ZXI/Yy5wdXNoKGgpOmYucHVzaChoKX12YXIgZD17bGVmdDp7c2l6aW5nOiJ4TWluIixvZmZzZXQ6MH0sY2VudGVyOntzaXppbmc6InhNaWQiLG9mZnNldDotLjV9LHJpZ2h0OntzaXppbmc6InhNYXgiLG9mZnNldDotMX19LG09e3RvcDp7c2l6aW5nOiJZTWluIixvZmZzZXQ6MH0sbWlkZGxlOntzaXppbmc6IllNaWQiLG9mZnNldDotLjV9LGJvdHRvbTp7c2l6aW5nOiJZTWF4IixvZmZzZXQ6LTF9fTtmdW5jdGlvbiBnKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHRoaXMuX2ltZ1NyYyE9PWUuc291cmNlKWlmKHIuYXR0cigieG1sbnMiLHMuc3ZnKSxlLnNvdXJjZSYmImRhdGE6Ij09PWUuc291cmNlLnNsaWNlKDAsNSkpci5hdHRyKCJ4bGluazpocmVmIixlLnNvdXJjZSksdGhpcy5faW1nU3JjPWUuc291cmNlO2Vsc2V7dmFyIGk9bmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49bmV3IEltYWdlO2Z1bmN0aW9uIGkoKXtyLnJlbW92ZSgpLHQoKX10aGlzLmltZz1uLG4uc2V0QXR0cmlidXRlKCJjcm9zc09yaWdpbiIsImFub255bW91cyIpLG4ub25lcnJvcj1pLG4ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS53aWR0aD10aGlzLndpZHRoLGUuaGVpZ2h0PXRoaXMuaGVpZ2h0LGUuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodGhpcywwLDApO3ZhciBuPWUudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtyLmF0dHIoInhsaW5rOmhyZWYiLG4pLHQoKX0sci5vbigiZXJyb3IiLGkpLG4uc3JjPWUuc291cmNlLHRoaXMuX2ltZ1NyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gdihlKXt2YXIgcixvLHM9bi5zZWxlY3QodGhpcyksYz1hLmdldEZyb21JZCh0LGUueHJlZiksdT1hLmdldEZyb21JZCh0LGUueXJlZiksZj0iZG9tYWluIj09PWEuZ2V0UmVmVHlwZShlLnhyZWYpLGg9ImRvbWFpbiI9PT1hLmdldFJlZlR5cGUoZS55cmVmKSxwPWwuX3NpemU7cj12b2lkIDAhPT1jPyJzdHJpbmciPT10eXBlb2YgZS54cmVmJiZmP2MuX2xlbmd0aCplLnNpemV4Ok1hdGguYWJzKGMubDJwKGUuc2l6ZXgpLWMubDJwKDApKTplLnNpemV4KnAudyxvPXZvaWQgMCE9PXU/InN0cmluZyI9PXR5cGVvZiBlLnlyZWYmJmg/dS5fbGVuZ3RoKmUuc2l6ZXk6TWF0aC5hYnModS5sMnAoZS5zaXpleSktdS5sMnAoMCkpOmUuc2l6ZXkqcC5oO3ZhciBnLHYseT1yKmRbZS54YW5jaG9yXS5vZmZzZXQseD1vKm1bZS55YW5jaG9yXS5vZmZzZXQsYj1kW2UueGFuY2hvcl0uc2l6aW5nK21bZS55YW5jaG9yXS5zaXppbmc7c3dpdGNoKGc9dm9pZCAwIT09Yz8ic3RyaW5nIj09dHlwZW9mIGUueHJlZiYmZj9jLl9sZW5ndGgqZS54K2MuX29mZnNldDpjLnIycChlLngpK2MuX29mZnNldDplLngqcC53K3AubCxnKz15LHY9dm9pZCAwIT09dT8ic3RyaW5nIj09dHlwZW9mIGUueXJlZiYmaD91Ll9sZW5ndGgqKDEtZS55KSt1Ll9vZmZzZXQ6dS5yMnAoZS55KSt1Ll9vZmZzZXQ6cC5oLWUueSpwLmgrcC50LHYrPXgsZS5zaXppbmcpe2Nhc2UiZmlsbCI6Yis9IiBzbGljZSI7YnJlYWs7Y2FzZSJzdHJldGNoIjpiPSJub25lIn1zLmF0dHIoe3g6Zyx5OnYsd2lkdGg6cixoZWlnaHQ6byxwcmVzZXJ2ZUFzcGVjdFJhdGlvOmIsb3BhY2l0eTplLm9wYWNpdHl9KTt2YXIgXz0oYyYmImRvbWFpbiIhPT1hLmdldFJlZlR5cGUoZS54cmVmKT9jLl9pZDoiIikrKHUmJiJkb21haW4iIT09YS5nZXRSZWZUeXBlKGUueXJlZik/dS5faWQ6IiIpO2kuc2V0Q2xpcFVybChzLF8/ImNsaXAiK2wuX3VpZCtfOm51bGwsdCl9dmFyIHk9bC5faW1hZ2VMb3dlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGYpLHg9bC5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGMpO3kuZW50ZXIoKS5hcHBlbmQoImltYWdlIikseC5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx5LmV4aXQoKS5yZW1vdmUoKSx4LmV4aXQoKS5yZW1vdmUoKSx5LmVhY2goKGZ1bmN0aW9uKHQpe2cuYmluZCh0aGlzKSh0KSx2LmJpbmQodGhpcykodCl9KSkseC5lYWNoKChmdW5jdGlvbih0KXtnLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpO3ZhciBiPU9iamVjdC5rZXlzKGwuX3Bsb3RzKTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtlPWJbcl07dmFyIF89bC5fcGxvdHNbZV07aWYoXy5pbWFnZWxheWVyKXt2YXIgdz1fLmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEodVtlXXx8W10pO3cuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksdy5leGl0KCkucmVtb3ZlKCksdy5lYWNoKChmdW5jdGlvbih0KXtnLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpfX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTU4LCIuLi9kcmF3aW5nIjozODgsIkBwbG90bHkvZDMiOjU4fV0sNDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjU2NywiLi9hdHRyaWJ1dGVzIjo0MTEsIi4vY29udmVydF9jb29yZHMiOjQxMiwiLi9kZWZhdWx0cyI6NDEzLCIuL2RyYXciOjQxNH1dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLGdyb3VwdGl0bGVmb250Om4oe2VkaXRUeXBlOiJsZWdlbmQifSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoidiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRyYWNlb3JkZXI6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInJldmVyc2VkIiwiZ3JvdXBlZCJdLGV4dHJhczpbIm5vcm1hbCJdLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZWdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1zaXppbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY29uc3RhbnQiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW13aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MzAsZGZsdDozMCxlZGl0VHlwZToibGVnZW5kIn0saXRlbWNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGUiLCJ0b2dnbGVvdGhlcnMiLCExXSxkZmx0OiJ0b2dnbGUiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtZG91YmxlY2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvZ2dsZSIsInRvZ2dsZW90aGVycyIsITFdLGRmbHQ6InRvZ2dsZW90aGVycyIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGdyb3VwY2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvZ2dsZWl0ZW0iLCJ0b2dnbGVncm91cCJdLGRmbHQ6InRvZ2dsZWdyb3VwIixlZGl0VHlwZToibGVnZW5kIn0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6ImxlZ2VuZCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToibGVnZW5kIn0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6ImxlZ2VuZCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToibGVnZW5kIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHZhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToibGVnZW5kIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImxlZnQiLCJ0b3AgbGVmdCJdLGVkaXRUeXBlOiJsZWdlbmQifSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjozNjV9XSw0MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo2LHNjcm9sbEJhck1pbkhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjoiIzgwOEJBNCIsc2Nyb2xsQmFyTWFyZ2luOjQsc2Nyb2xsQmFyRW50ZXJBdHRyczp7cng6MjAscnk6Myx3aWR0aDowLGhlaWdodDowfSx0aXRsZVBhZDoyLGl0ZW1HYXA6NX19LHt9XSw0MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLGM9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxmPXQubGVnZW5kfHx7fSxoPWEubmV3Q29udGFpbmVyKGUsImxlZ2VuZCIpO2Z1bmN0aW9uIHAodCxlKXtyZXR1cm4gaS5jb2VyY2UoZixoLHMsdCxlKX1mb3IodmFyIGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj11Ll9pbnB1dCxuPXU7cmV0dXJuIGkuY29lcmNlKHIsbixvLHQsZSl9LG09ZS5mb250fHx7fSxnPWkuY29lcmNlRm9udChwLCJncm91cHRpdGxlZm9udCIsaS5leHRlbmRGbGF0KHt9LG0se3NpemU6TWF0aC5yb3VuZCgxLjEqbS5zaXplKX0pKSx2PTAseT0hMSx4PSJub3JtYWwiLGI9MDtiPHIubGVuZ3RoO2IrKykodT1yW2JdKS52aXNpYmxlJiYoKHUuc2hvd2xlZ2VuZHx8dS5fZGZsdFNob3dMZWdlbmQmJiEodS5fbW9kdWxlJiZ1Ll9tb2R1bGUuYXR0cmlidXRlcyYmdS5fbW9kdWxlLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZCYmITE9PT11Ll9tb2R1bGUuYXR0cmlidXRlcy5zaG93bGVnZW5kLmRmbHQpKSYmKHYrKyx1LnNob3dsZWdlbmQmJih5PSEwLChuLnRyYWNlSXModSwicGllLWxpa2UiKXx8ITA9PT11Ll9pbnB1dC5zaG93bGVnZW5kKSYmdisrKSxpLmNvZXJjZUZvbnQoZCwibGVnZW5kZ3JvdXB0aXRsZS5mb250IixnKSksKG4udHJhY2VJcyh1LCJiYXIiKSYmInN0YWNrIj09PWUuYmFybW9kZXx8LTEhPT1bInRvbmV4dHgiLCJ0b25leHR5Il0uaW5kZXhPZih1LmZpbGwpKSYmKHg9Yy5pc0dyb3VwZWQoe3RyYWNlb3JkZXI6eH0pPyJncm91cGVkK3JldmVyc2VkIjoicmV2ZXJzZWQiKSx2b2lkIDAhPT11LmxlZ2VuZGdyb3VwJiYiIiE9PXUubGVnZW5kZ3JvdXAmJih4PWMuaXNSZXZlcnNlZCh7dHJhY2VvcmRlcjp4fSk/InJldmVyc2VkK2dyb3VwZWQiOiJncm91cGVkIikpO3ZhciBfPWkuY29lcmNlKHQsZSxsLCJzaG93bGVnZW5kIix5JiZ2PjEpO2lmKCExPT09XyYmKGUubGVnZW5kPXZvaWQgMCksKCExIT09X3x8Zi51aXJldmlzaW9uKSYmKHAoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksITEhPT1fKSl7cCgiYmdjb2xvciIsZS5wYXBlcl9iZ2NvbG9yKSxwKCJib3JkZXJjb2xvciIpLHAoImJvcmRlcndpZHRoIik7dmFyIHcsVCxrLEE9aS5jb2VyY2VGb250KHAsImZvbnQiLGUuZm9udCksTT0iaCI9PT1wKCJvcmllbnRhdGlvbiIpO2lmKE0/KHc9MCxuLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKSh0LnhheGlzKT8oVD0xLjEsaz0iYm90dG9tIik6KFQ9LS4xLGs9InRvcCIpKToodz0xLjAyLFQ9MSxrPSJhdXRvIikscCgidHJhY2VvcmRlciIseCksYy5pc0dyb3VwZWQoZS5sZWdlbmQpJiZwKCJ0cmFjZWdyb3VwZ2FwIikscCgiaXRlbXNpemluZyIpLHAoIml0ZW13aWR0aCIpLHAoIml0ZW1jbGljayIpLHAoIml0ZW1kb3VibGVjbGljayIpLHAoImdyb3VwY2xpY2siKSxwKCJ4Iix3KSxwKCJ4YW5jaG9yIikscCgieSIsVCkscCgieWFuY2hvciIsaykscCgidmFsaWduIiksaS5ub25lT3JBbGwoZixoLFsieCIsInkiXSkscCgidGl0bGUudGV4dCIpKXtwKCJ0aXRsZS5zaWRlIixNPyJsZWZ0IjoidG9wIik7dmFyIFM9aS5leHRlbmRGbGF0KHt9LEEse3NpemU6aS5iaWdGb250KEEuc2l6ZSl9KTtpLmNvZXJjZUZvbnQocCwidGl0bGUuZm9udCIsUyl9fX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6NjEwLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuL2F0dHJpYnV0ZXMiOjQxNiwiLi9oZWxwZXJzIjo0MjJ9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxsPXQoIi4uL2RyYWdlbGVtZW50IiksYz10KCIuLi9kcmF3aW5nIiksdT10KCIuLi9jb2xvciIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuL2hhbmRsZV9jbGljayIpLHA9dCgiLi9jb25zdGFudHMiKSxkPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxtPWQuTElORV9TUEFDSU5HLGc9ZC5GUk9NX1RMLHY9ZC5GUk9NX0JSLHk9dCgiLi9nZXRfbGVnZW5kX2RhdGEiKSx4PXQoIi4vc3R5bGUiKSxiPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIF8odCxlLHIsbixpKXt2YXIgYT1yLmRhdGEoKVswXVswXS50cmFjZSxsPXtldmVudDppLG5vZGU6ci5ub2RlKCksY3VydmVOdW1iZXI6YS5pbmRleCxleHBhbmRlZEluZGV4OmEuX2V4cGFuZGVkSW5kZXgsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0LGZyYW1lczp0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGNvbmZpZzp0Ll9jb250ZXh0LGZ1bGxEYXRhOnQuX2Z1bGxEYXRhLGZ1bGxMYXlvdXQ6dC5fZnVsbExheW91dH07aWYoYS5fZ3JvdXAmJihsLmdyb3VwPWEuX2dyb3VwKSxvLnRyYWNlSXMoYSwicGllLWxpa2UiKSYmKGwubGFiZWw9ci5kYXR1bSgpWzBdLmxhYmVsKSwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2xlZ2VuZGNsaWNrIixsKSlpZigxPT09billLl9jbGlja1RpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0JiZoKHIsdCxuKX0pLHQuX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSk7ZWxzZSBpZigyPT09bil7ZS5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5fY2xpY2tUaW1lb3V0KSx0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTAsITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRkb3VibGVjbGljayIsbCkmJmgocix0LG4pfX1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbixhLHM9dC5kYXRhKClbMF1bMF0sbD1zLnRyYWNlLHU9by50cmFjZUlzKGwsInBpZS1saWtlIiksaD0hci5faW5Ib3ZlciYmZS5fY29udGV4dC5lZGl0cy5sZWdlbmRUZXh0JiYhdSxkPXIuX21heE5hbWVMZW5ndGg7cy5ncm91cFRpdGxlPyhuPXMuZ3JvdXBUaXRsZS50ZXh0LGE9cy5ncm91cFRpdGxlLmZvbnQpOihhPXIuZm9udCxyLmVudHJpZXM/bj1zLnRleHQ6KG49dT9zLmxhYmVsOmwubmFtZSxsLl9tZXRhJiYobj1pLnRlbXBsYXRlU3RyaW5nKG4sbC5fbWV0YSkpKSk7dmFyIG09aS5lbnN1cmVTaW5nbGUodCwidGV4dCIsImxlZ2VuZHRleHQiKTttLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jYWxsKGMuZm9udCxhKS50ZXh0KGg/VChuLGQpOm4pO3ZhciBnPXIuaXRlbXdpZHRoKzIqcC5pdGVtR2FwO2YucG9zaXRpb25UZXh0KG0sZywwKSxoP20uY2FsbChmLm1ha2VFZGl0YWJsZSx7Z2Q6ZSx0ZXh0Om59KS5jYWxsKEEsdCxlLHIpLm9uKCJlZGl0IiwoZnVuY3Rpb24obil7dGhpcy50ZXh0KFQobixkKSkuY2FsbChBLHQsZSxyKTt2YXIgYT1zLnRyYWNlLl9mdWxsSW5wdXR8fHt9LGM9e307aWYoby5oYXNUcmFuc2Zvcm0oYSwiZ3JvdXBieSIpKXt2YXIgdT1vLmdldFRyYW5zZm9ybUluZGljZXMoYSwiZ3JvdXBieSIpLGY9dVt1Lmxlbmd0aC0xXSxoPWkua2V5ZWRDb250YWluZXIoYSwidHJhbnNmb3Jtc1siK2YrIl0uc3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpO2guc2V0KHMudHJhY2UuX2dyb3VwLG4pLGM9aC5jb25zdHJ1Y3RVcGRhdGUoKX1lbHNlIGMubmFtZT1uO3JldHVybiBvLmNhbGwoIl9ndWlSZXN0eWxlIixlLGMsbC5pbmRleCl9KSk6QShtLHQsZSxyKX1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9TWF0aC5tYXgoNCxlKTtpZih0JiZ0LnRyaW0oKS5sZW5ndGg+PXIvMilyZXR1cm4gdDtmb3IodmFyIG49ci0odD10fHwiIikubGVuZ3RoO24+MDtuLS0pdCs9IiAiO3JldHVybiB0fWZ1bmN0aW9uIGsodCxlKXt2YXIgcixhPWUuX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSxvPTEscz1pLmVuc3VyZVNpbmdsZSh0LCJyZWN0IiwibGVnZW5kdG9nZ2xlIiwoZnVuY3Rpb24odCl7ZS5fY29udGV4dC5zdGF0aWNQbG90fHx0LnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSx0LmNhbGwodS5maWxsLCJyZ2JhKDAsMCwwLDApIil9KSk7ZS5fY29udGV4dC5zdGF0aWNQbG90fHwocy5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24oKXsocj0obmV3IERhdGUpLmdldFRpbWUoKSktZS5fbGVnZW5kTW91c2VEb3duVGltZTxhP28rPTE6KG89MSxlLl9sZWdlbmRNb3VzZURvd25UaW1lPXIpfSkpLHMub24oIm1vdXNldXAiLChmdW5jdGlvbigpe2lmKCFlLl9kcmFnZ2VkJiYhZS5fZWRpdGluZyl7dmFyIHI9ZS5fZnVsbExheW91dC5sZWdlbmQ7KG5ldyBEYXRlKS5nZXRUaW1lKCktZS5fbGVnZW5kTW91c2VEb3duVGltZT5hJiYobz1NYXRoLm1heChvLTEsMSkpLF8oZSxyLHQsbyxuLmV2ZW50KX19KSkpfWZ1bmN0aW9uIEEodCxlLHIsbixpKXtuLl9pbkhvdmVyJiZ0LmF0dHIoImRhdGEtbm90ZXgiLCEwKSxmLmNvbnZlcnRUb1RzcGFucyh0LHIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuZGF0YSgpWzBdWzBdO2lmKCFyLl9pbkhvdmVyJiZpJiYhaS50cmFjZS5zaG93bGVnZW5kKXJldHVybiB2b2lkIHQucmVtb3ZlKCk7dmFyIGE9dC5zZWxlY3QoImdbY2xhc3MqPW1hdGgtZ3JvdXBdIiksbz1hLm5vZGUoKTtyfHwocj1lLl9mdWxsTGF5b3V0LmxlZ2VuZCk7dmFyIHMsbD1yLmJvcmRlcndpZHRoO3M9MT09PW4/ci50aXRsZS5mb250OmkuZ3JvdXBUaXRsZT9pLmdyb3VwVGl0bGUuZm9udDpyLmZvbnQ7dmFyIHUsaCxkPXMuc2l6ZSptO2lmKG8pe3ZhciBnPWMuYkJveChvKTt1PWcuaGVpZ2h0LGg9Zy53aWR0aCwxPT09bj9jLnNldFRyYW5zbGF0ZShhLGwsbCsuNzUqdSk6Yy5zZXRUcmFuc2xhdGUoYSwwLC4yNSp1KX1lbHNle3ZhciB2PXQuc2VsZWN0KDE9PT1uPyIubGVnZW5kdGl0bGV0ZXh0IjoiLmxlZ2VuZHRleHQiKSx5PWYubGluZUNvdW50KHYpLHg9di5ub2RlKCk7aWYodT1kKnksaD14P2MuYkJveCh4KS53aWR0aDowLDE9PT1uKSJsZWZ0Ij09PXIudGl0bGUuc2lkZSYmKGgrPTIqcC5pdGVtR2FwKSxmLnBvc2l0aW9uVGV4dCh2LGwrcC50aXRsZVBhZCxsK2QpO2Vsc2V7dmFyIGI9MipwLml0ZW1HYXArci5pdGVtd2lkdGg7aS5ncm91cFRpdGxlJiYoYj1wLml0ZW1HYXAsaC09ci5pdGVtd2lkdGgpLGYucG9zaXRpb25UZXh0KHYsYiwtZCooKHktMSkvMi0uMykpfX0xPT09bj8oci5fdGl0bGVXaWR0aD1oLHIuX3RpdGxlSGVpZ2h0PXUpOihpLmxpbmVIZWlnaHQ9ZCxpLmhlaWdodD1NYXRoLm1heCh1LDE2KSszLGkud2lkdGg9aCl9KGUscixuLGkpfSkpfWZ1bmN0aW9uIE0odCl7cmV0dXJuIGkuaXNSaWdodEFuY2hvcih0KT8icmlnaHQiOmkuaXNDZW50ZXJBbmNob3IodCk/ImNlbnRlciI6ImxlZnQifWZ1bmN0aW9uIFModCl7cmV0dXJuIGkuaXNCb3R0b21BbmNob3IodCk/ImJvdHRvbSI6aS5pc01pZGRsZUFuY2hvcih0KT8ibWlkZGxlIjoidG9wIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9dC5fZnVsbExheW91dC5sZWdlbmR8fHt9KSxmdW5jdGlvbih0LGUpe3ZhciByLHMsZj10Ll9mdWxsTGF5b3V0LGg9ImxlZ2VuZCIrZi5fdWlkLGQ9ZS5faW5Ib3ZlcjtkPyhyPWUubGF5ZXIsaCs9Ii1ob3ZlciIpOnI9Zi5faW5mb2xheWVyO2lmKCFyKXJldHVybjt0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKTtpZihkKXtpZighZS5lbnRyaWVzKXJldHVybjtzPXkoZS5lbnRyaWVzLGUpfWVsc2V7aWYoIXQuY2FsY2RhdGEpcmV0dXJuO3M9Zi5zaG93bGVnZW5kJiZ5KHQuY2FsY2RhdGEsZSl9dmFyIG09Zi5oaWRkZW5sYWJlbHN8fFtdO2lmKCEoZHx8Zi5zaG93bGVnZW5kJiZzLmxlbmd0aCkpcmV0dXJuIHIuc2VsZWN0QWxsKCIubGVnZW5kIikucmVtb3ZlKCksZi5fdG9wZGVmcy5zZWxlY3QoIiMiK2gpLnJlbW92ZSgpLGEuYXV0b01hcmdpbih0LCJsZWdlbmQiKTt2YXIgVD1pLmVuc3VyZVNpbmdsZShyLCJnIiwibGVnZW5kIiwoZnVuY3Rpb24odCl7ZHx8dC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLEU9aS5lbnN1cmVTaW5nbGVCeUlkKGYuX3RvcGRlZnMsImNsaXBQYXRoIixoLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicmVjdCIpfSkpLEw9aS5lbnN1cmVTaW5nbGUoVCwicmVjdCIsImJnIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSk7TC5jYWxsKHUuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwodS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKTt2YXIgQz1pLmVuc3VyZVNpbmdsZShULCJnIiwic2Nyb2xsYm94IiksUD1lLnRpdGxlO2lmKGUuX3RpdGxlV2lkdGg9MCxlLl90aXRsZUhlaWdodD0wLFAudGV4dCl7dmFyIEk9aS5lbnN1cmVTaW5nbGUoQywidGV4dCIsImxlZ2VuZHRpdGxldGV4dCIpO0kuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYy5mb250LFAuZm9udCkudGV4dChQLnRleHQpLEEoSSxDLHQsZSwxKX1lbHNlIEMuc2VsZWN0QWxsKCIubGVnZW5kdGl0bGV0ZXh0IikucmVtb3ZlKCk7dmFyIE89aS5lbnN1cmVTaW5nbGUoVCwicmVjdCIsInNjcm9sbGJhciIsKGZ1bmN0aW9uKHQpe3QuYXR0cihwLnNjcm9sbEJhckVudGVyQXR0cnMpLmNhbGwodS5maWxsLHAuc2Nyb2xsQmFyQ29sb3IpfSkpLHo9Qy5zZWxlY3RBbGwoImcuZ3JvdXBzIikuZGF0YShzKTt6LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncm91cHMiKSx6LmV4aXQoKS5yZW1vdmUoKTt2YXIgRD16LnNlbGVjdEFsbCgiZy50cmFjZXMiKS5kYXRhKGkuaWRlbnRpdHkpO0QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlcyIpLEQuZXhpdCgpLnJlbW92ZSgpLEQuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlO3JldHVybiBvLnRyYWNlSXMoZSwicGllLWxpa2UiKT8tMSE9PW0uaW5kZXhPZih0WzBdLmxhYmVsKT8uNToxOiJsZWdlbmRvbmx5Ij09PWUudmlzaWJsZT8uNToxfSkpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuY2FsbCh3LHQsZSl9KSkuY2FsbCh4LHQsZSkuZWFjaCgoZnVuY3Rpb24oKXtkfHxuLnNlbGVjdCh0aGlzKS5jYWxsKGssdCl9KSksaS5zeW5jT3JBc3luYyhbYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQ7aXx8KGk9YS5sZWdlbmQpO3ZhciBvPWEuX3NpemUscz1iLmlzVmVydGljYWwoaSksbD1iLmlzR3JvdXBlZChpKSx1PWkuYm9yZGVyd2lkdGgsZj0yKnUsaD1wLml0ZW1HYXAsZD1pLml0ZW13aWR0aCsyKmgsbT0yKih1K2gpLGc9UyhpKSx2PWkueTwwfHwwPT09aS55JiYidG9wIj09PWcseT1pLnk+MXx8MT09PWkueSYmImJvdHRvbSI9PT1nLHg9aS50cmFjZWdyb3VwZ2FwO2kuX21heEhlaWdodD1NYXRoLm1heCh2fHx5P2EuaGVpZ2h0LzI6by5oLDMwKTt2YXIgXz0wO2kuX3dpZHRoPTAsaS5faGVpZ2h0PTA7dmFyIHc9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPTAsbj10LnRpdGxlLnNpZGU7biYmKC0xIT09bi5pbmRleE9mKCJsZWZ0IikmJihlPXQuX3RpdGxlV2lkdGgpLC0xIT09bi5pbmRleE9mKCJ0b3AiKSYmKHI9dC5fdGl0bGVIZWlnaHQpKTtyZXR1cm5bZSxyXX0oaSk7aWYocylyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uaGVpZ2h0O2Muc2V0VHJhbnNsYXRlKHRoaXMsdSt3WzBdLHUrd1sxXStpLl9oZWlnaHQrZS8yK2gpLGkuX2hlaWdodCs9ZSxpLl93aWR0aD1NYXRoLm1heChpLl93aWR0aCx0WzBdLndpZHRoKX0pKSxfPWQraS5fd2lkdGgsaS5fd2lkdGgrPWgrZCtmLGkuX2hlaWdodCs9bSxsJiYoZS5lYWNoKChmdW5jdGlvbih0LGUpe2Muc2V0VHJhbnNsYXRlKHRoaXMsMCxlKmkudHJhY2Vncm91cGdhcCl9KSksaS5faGVpZ2h0Kz0oaS5fbGdyb3Vwc0xlbmd0aC0xKSppLnRyYWNlZ3JvdXBnYXApO2Vsc2V7dmFyIFQ9TShpKSxrPWkueDwwfHwwPT09aS54JiYicmlnaHQiPT09VCxBPWkueD4xfHwxPT09aS54JiYibGVmdCI9PT1ULEU9eXx8dixMPWEud2lkdGgvMjtpLl9tYXhXaWR0aD1NYXRoLm1heChrP0UmJiJsZWZ0Ij09PVQ/by5sK28udzpMOkE/RSYmInJpZ2h0Ij09PVQ/by5yK28udzpMOm8udywyKmQpO3ZhciBDPTAsUD0wO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS53aWR0aCtkO0M9TWF0aC5tYXgoQyxlKSxQKz1lfSkpLF89bnVsbDt2YXIgST0wO2lmKGwpe3ZhciBPPTAsej0wLEQ9MDtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0ud2lkdGgsaT1yWzBdLmhlaWdodDtjLnNldFRyYW5zbGF0ZSh0aGlzLHdbMF0sd1sxXSt1K2graS8yK2UpLGUrPWksdD1NYXRoLm1heCh0LGQrbil9KSksTz1NYXRoLm1heChPLGUpO3ZhciByPXQraDt6PjAmJnIrdSt6PmkuX21heFdpZHRoJiYoST1NYXRoLm1heChJLHopLHo9MCxEKz1PK3gsTz1lKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHosRCkseis9cn0pKSxpLl93aWR0aD1NYXRoLm1heChJLHopK3UsaS5faGVpZ2h0PUQrTyttfWVsc2V7dmFyIFI9ci5zaXplKCksRj1QK2YrKFItMSkqaDxpLl9tYXhXaWR0aCxCPTAsTj0wLGo9MCxVPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLmhlaWdodCxyPWQrdFswXS53aWR0aCxuPShGP3I6QykraDtuK3UrTi1oPj1pLl9tYXhXaWR0aCYmKEk9TWF0aC5tYXgoSSxVKSxOPTAsais9QixpLl9oZWlnaHQrPUIsQj0wKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHdbMF0rdStOLHdbMV0rdStqK2UvMitoKSxVPU4rcitoLE4rPW4sQj1NYXRoLm1heChCLGUpfSkpLEY/KGkuX3dpZHRoPU4rZixpLl9oZWlnaHQ9QittKTooaS5fd2lkdGg9TWF0aC5tYXgoSSxVKStmLGkuX2hlaWdodCs9QittKX19aS5fd2lkdGg9TWF0aC5jZWlsKE1hdGgubWF4KGkuX3dpZHRoK3dbMF0saS5fdGl0bGVXaWR0aCsyKih1K3AudGl0bGVQYWQpKSksaS5faGVpZ2h0PU1hdGguY2VpbChNYXRoLm1heChpLl9oZWlnaHQrd1sxXSxpLl90aXRsZUhlaWdodCsyKih1K3AuaXRlbUdhcCkpKSxpLl9lZmZIZWlnaHQ9TWF0aC5taW4oaS5faGVpZ2h0LGkuX21heEhlaWdodCk7dmFyIFY9dC5fY29udGV4dC5lZGl0cyxIPVYubGVnZW5kVGV4dHx8Vi5sZWdlbmRQb3NpdGlvbjtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZHRvZ2dsZSIpLHI9dFswXS5oZWlnaHQsaT1IP2Q6X3x8ZCt0WzBdLndpZHRoO3N8fChpKz1oLzIpLGMuc2V0UmVjdChlLDAsLXIvMixpLHIpfSkpfSh0LHosRCxlKX0sZnVuY3Rpb24oKXt2YXIgcyx1LG0seSx4PWYuX3NpemUsYj1lLmJvcmRlcndpZHRoO2lmKCFkKXtpZihmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPU0oZSksbj1TKGUpO3JldHVybiBhLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTplLnksbDplLl93aWR0aCpnW3JdLHI6ZS5fd2lkdGgqdltyXSxiOmUuX2VmZkhlaWdodCp2W25dLHQ6ZS5fZWZmSGVpZ2h0Kmdbbl19KX0odCkpcmV0dXJuO3ZhciB3PXgubCt4LncqZS54LWdbTShlKV0qZS5fd2lkdGgsaz14LnQreC5oKigxLWUueSktZ1tTKGUpXSplLl9lZmZIZWlnaHQ7aWYoZi5tYXJnaW4uYXV0b2V4cGFuZCl7dmFyIEE9dyxQPWs7dz1pLmNvbnN0cmFpbih3LDAsZi53aWR0aC1lLl93aWR0aCksaz1pLmNvbnN0cmFpbihrLDAsZi5oZWlnaHQtZS5fZWZmSGVpZ2h0KSx3IT09QSYmaS5sb2coIkNvbnN0cmFpbiBsZWdlbmQueCB0byBtYWtlIGxlZ2VuZCBmaXQgaW5zaWRlIGdyYXBoIiksayE9PVAmJmkubG9nKCJDb25zdHJhaW4gbGVnZW5kLnkgdG8gbWFrZSBsZWdlbmQgZml0IGluc2lkZSBncmFwaCIpfWMuc2V0VHJhbnNsYXRlKFQsdyxrKX1pZihPLm9uKCIuZHJhZyIsbnVsbCksVC5vbigid2hlZWwiLG51bGwpLGR8fGUuX2hlaWdodDw9ZS5fbWF4SGVpZ2h0fHx0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBJPWUuX2VmZkhlaWdodDtkJiYoST1lLl9oZWlnaHQpLEwuYXR0cih7d2lkdGg6ZS5fd2lkdGgtYixoZWlnaHQ6SS1iLHg6Yi8yLHk6Yi8yfSksYy5zZXRUcmFuc2xhdGUoQywwLDApLEUuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6ZS5fd2lkdGgtMipiLGhlaWdodDpJLTIqYix4OmIseTpifSksYy5zZXRDbGlwVXJsKEMsaCx0KSxjLnNldFJlY3QoTywwLDAsMCwwKSxkZWxldGUgZS5fc2Nyb2xsWX1lbHNle3ZhciB6LEQsUixGPU1hdGgubWF4KHAuc2Nyb2xsQmFyTWluSGVpZ2h0LGUuX2VmZkhlaWdodCplLl9lZmZIZWlnaHQvZS5faGVpZ2h0KSxCPWUuX2VmZkhlaWdodC1GLTIqcC5zY3JvbGxCYXJNYXJnaW4sTj1lLl9oZWlnaHQtZS5fZWZmSGVpZ2h0LGo9Qi9OLFU9TWF0aC5taW4oZS5fc2Nyb2xsWXx8MCxOKTtMLmF0dHIoe3dpZHRoOmUuX3dpZHRoLTIqYitwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDplLl9lZmZIZWlnaHQtYix4OmIvMix5OmIvMn0pLEUuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6ZS5fd2lkdGgtMipiK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OmUuX2VmZkhlaWdodC0yKmIseDpiLHk6YitVfSksYy5zZXRDbGlwVXJsKEMsaCx0KSxxKFUsRixqKSxULm9uKCJ3aGVlbCIsKGZ1bmN0aW9uKCl7cShVPWkuY29uc3RyYWluKGUuX3Njcm9sbFkrbi5ldmVudC5kZWx0YVkvQipOLDAsTiksRixqKSwwIT09VSYmVSE9PU4mJm4uZXZlbnQucHJldmVudERlZmF1bHQoKX0pKTt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50O3o9InRvdWNoc3RhcnQiPT09dC50eXBlP3QuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTp0LmNsaWVudFksUj1VfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50OzI9PT10LmJ1dHRvbnN8fHQuY3RybEtleXx8KEQ9InRvdWNobW92ZSI9PT10LnR5cGU/dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZOnQuY2xpZW50WSxxKFU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPShyLWUpL2ordDtyZXR1cm4gaS5jb25zdHJhaW4obiwwLE4pfShSLHosRCksRixqKSl9KSk7Ty5jYWxsKFYpO3ZhciBIPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7InRvdWNoc3RhcnQiPT09dC50eXBlJiYoej10LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFksUj1VKX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsidG91Y2htb3ZlIj09PXQudHlwZSYmKEQ9dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZLHEoVT1mdW5jdGlvbih0LGUscil7dmFyIG49KGUtcikvait0O3JldHVybiBpLmNvbnN0cmFpbihuLDAsTil9KFIseixEKSxGLGopKX0pKTtDLmNhbGwoSCl9ZnVuY3Rpb24gcShyLG4saSl7ZS5fc2Nyb2xsWT10Ll9mdWxsTGF5b3V0LmxlZ2VuZC5fc2Nyb2xsWT1yLGMuc2V0VHJhbnNsYXRlKEMsMCwtciksYy5zZXRSZWN0KE8sZS5fd2lkdGgscC5zY3JvbGxCYXJNYXJnaW4rcippLHAuc2Nyb2xsQmFyV2lkdGgsbiksRS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ5IixiK3IpfXQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb24mJihULmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbC5pbml0KHtlbGVtZW50OlQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoVCk7bT10LngseT10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPW0rdCxpPXkrcjtjLnNldFRyYW5zbGF0ZShULG4saSkscz1sLmFsaWduKG4sMCx4LmwseC5sK3gudyxlLnhhbmNob3IpLHU9bC5hbGlnbihpLDAseC50K3guaCx4LnQsZS55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09cyYmdm9pZCAwIT09dSYmby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQseyJsZWdlbmQueCI6cywibGVnZW5kLnkiOnV9KX0sY2xpY2tGbjpmdW5jdGlvbihlLG4pe3ZhciBpPXIuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmZpbHRlcigoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmNsaWVudFg+PXQubGVmdCYmbi5jbGllbnRYPD10LnJpZ2h0JiZuLmNsaWVudFk+PXQudG9wJiZuLmNsaWVudFk8PXQuYm90dG9tfSkpO2kuc2l6ZSgpPjAmJl8odCxULGksZSxuKX19KSl9XSx0KX0odCxlKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2V2ZW50cyI6NDkyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdHMvcGxvdHMiOjYxOSwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vY29sb3IiOjM2NiwiLi4vZHJhZ2VsZW1lbnQiOjM4NSwiLi4vZHJhd2luZyI6Mzg4LCIuL2NvbnN0YW50cyI6NDE3LCIuL2dldF9sZWdlbmRfZGF0YSI6NDIwLCIuL2hhbmRsZV9jbGljayI6NDIxLCIuL2hlbHBlcnMiOjQyMiwiLi9zdHlsZSI6NDI0LCJAcGxvdGx5L2QzIjo1OH1dLDQyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPWUuX2luSG92ZXIscz1pLmlzR3JvdXBlZChlKSxsPWkuaXNSZXZlcnNlZChlKSxjPXt9LHU9W10sZj0hMSxoPXt9LHA9MCxkPTA7ZnVuY3Rpb24gbSh0LHIpe2lmKCIiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT11LmluZGV4T2YodCk/KHUucHVzaCh0KSxmPSEwLGNbdF09W3JdKTpjW3RdLnB1c2gocik7ZWxzZXt2YXIgbj0ifn5pIitwO3UucHVzaChuKSxjW25dPVtyXSxwKyt9fWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBnPXRbcl0sdj1nWzBdLHk9di50cmFjZSx4PXkubGVnZW5kZ3JvdXA7aWYob3x8eS52aXNpYmxlJiZ5LnNob3dsZWdlbmQpaWYobi50cmFjZUlzKHksInBpZS1saWtlIikpZm9yKGhbeF18fChoW3hdPXt9KSxhPTA7YTxnLmxlbmd0aDthKyspe3ZhciBiPWdbYV0ubGFiZWw7aFt4XVtiXXx8KG0oeCx7bGFiZWw6Yixjb2xvcjpnW2FdLmNvbG9yLGk6Z1thXS5pLHRyYWNlOnkscHRzOmdbYV0ucHRzfSksaFt4XVtiXT0hMCxkPU1hdGgubWF4KGQsKGJ8fCIiKS5sZW5ndGgpKX1lbHNlIG0oeCx2KSxkPU1hdGgubWF4KGQsKHkubmFtZXx8IiIpLmxlbmd0aCl9aWYoIXUubGVuZ3RoKXJldHVybltdO3ZhciBfPSFmfHwhcyx3PVtdO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe3ZhciBUPWNbdVtyXV07Xz93LnB1c2goVFswXSk6dy5wdXNoKFQpfWZvcihfJiYodz1bd10pLHI9MDtyPHcubGVuZ3RoO3IrKyl7dmFyIGs9MS8wO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspe3ZhciBBPXdbcl1bYV0udHJhY2UubGVnZW5kcmFuaztrPkEmJihrPUEpfXdbcl1bMF0uX2dyb3VwTWluUmFuaz1rLHdbcl1bMF0uX3ByZUdyb3VwU29ydD1yfXZhciBNPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHJhY2UubGVnZW5kcmFuay1lLnRyYWNlLmxlZ2VuZHJhbmt8fHQuX3ByZVNvcnQtZS5fcHJlU29ydH07Zm9yKHcuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0WzBdLl9wcmVHcm91cFNvcnQ9ZX0pKSx3LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0uX2dyb3VwTWluUmFuay1lWzBdLl9ncm91cE1pblJhbmt8fHRbMF0uX3ByZUdyb3VwU29ydC1lWzBdLl9wcmVHcm91cFNvcnR9KSkscj0wO3I8dy5sZW5ndGg7cisrKXt3W3JdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5fcHJlU29ydD1lfSkpLHdbcl0uc29ydChNKTt2YXIgUz13W3JdWzBdLnRyYWNlLEU9bnVsbDtmb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXt2YXIgTD13W3JdW2FdLnRyYWNlLmxlZ2VuZGdyb3VwdGl0bGU7aWYoTCYmTC50ZXh0KXtFPUwsbyYmKEwuZm9udD1lLl9ncm91cFRpdGxlRm9udCk7YnJlYWt9fWlmKGwmJndbcl0ucmV2ZXJzZSgpLEUpe3ZhciBDPSExO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspaWYobi50cmFjZUlzKHdbcl1bYV0udHJhY2UsInBpZS1saWtlIikpe0M9ITA7YnJlYWt9d1tyXS51bnNoaWZ0KHtpOi0xLGdyb3VwVGl0bGU6RSxub0NsaWNrOkMsdHJhY2U6e3Nob3dsZWdlbmQ6Uy5zaG93bGVnZW5kLGxlZ2VuZGdyb3VwOlMubGVnZW5kZ3JvdXAsdmlzaWJsZToidG9nZ2xlaXRlbSI9PT1lLmdyb3VwY2xpY2t8fFMudmlzaWJsZX19KX1mb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXdbcl1bYV09W3dbcl1bYV1dfXJldHVybiBlLl9sZ3JvdXBzTGVuZ3RoPXcubGVuZ3RoLGUuX21heE5hbWVMZW5ndGg9ZCx3fX0seyIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuL2hlbHBlcnMiOjQyMn1dLDQyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcyxsPW8ubGVnZW5kLml0ZW1jbGljayxjPW8ubGVnZW5kLml0ZW1kb3VibGVjbGljayx1PW8ubGVnZW5kLmdyb3VwY2xpY2s7aWYoMT09PXImJiJ0b2dnbGUiPT09bCYmInRvZ2dsZW90aGVycyI9PT1jJiZhJiZlLmRhdGEmJmUuX2NvbnRleHQuc2hvd1RpcHM/KG4ubm90aWZpZXIobi5fKGUsIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2UiKSwibG9uZyIpLGE9ITEpOmE9ITEsMT09PXI/cz1sOjI9PT1yJiYocz1jKSxzKXt2YXIgZj0idG9nZ2xlZ3JvdXAiPT09dSxoPW8uaGlkZGVubGFiZWxzP28uaGlkZGVubGFiZWxzLnNsaWNlKCk6W10scD10LmRhdGEoKVswXVswXTtpZighcC5ncm91cFRpdGxlfHwhcC5ub0NsaWNrKXt2YXIgZCxtLGcsdix5LHg9ZS5fZnVsbERhdGEsYj1wLnRyYWNlLF89Yi5sZWdlbmRncm91cCx3PXt9LFQ9W10saz1bXSxBPVtdO2lmKGkudHJhY2VJcyhiLCJwaWUtbGlrZSIpKXt2YXIgTT1wLmxhYmVsLFM9aC5pbmRleE9mKE0pOyJ0b2dnbGUiPT09cz8tMT09PVM/aC5wdXNoKE0pOmguc3BsaWNlKFMsMSk6InRvZ2dsZW90aGVycyI9PT1zJiYoaD1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goKGZ1bmN0aW9uKHQpe00hPT10LmxhYmVsJiZoLnB1c2godC5sYWJlbCl9KSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWgubGVuZ3RoJiYtMT09PVMmJihoPVtdKSksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsaCl9ZWxzZXt2YXIgRSxMPV8mJl8ubGVuZ3RoLEM9W107aWYoTClmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKShFPXhbZF0pLnZpc2libGUmJkUubGVnZW5kZ3JvdXA9PT1fJiZDLnB1c2goZCk7aWYoInRvZ2dsZSI9PT1zKXt2YXIgUDtzd2l0Y2goYi52aXNpYmxlKXtjYXNlITA6UD0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOlA9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpQPSEwfWlmKEwpaWYoZilmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKSExIT09eFtkXS52aXNpYmxlJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyYmaih4W2RdLFApO2Vsc2UgaihiLFApO2Vsc2UgaihiLFApfWVsc2UgaWYoInRvZ2dsZW90aGVycyI9PT1zKXt2YXIgSSxPLHosRCxSPSEwO2ZvcihkPTA7ZDx4Lmxlbmd0aDtkKyspaWYoST14W2RdPT09Yix6PSEwIT09eFtkXS5zaG93bGVnZW5kLCEoSXx8enx8KE89TCYmeFtkXS5sZWdlbmRncm91cD09PV8pfHwhMCE9PXhbZF0udmlzaWJsZXx8aS50cmFjZUlzKHhbZF0sIm5vdExlZ2VuZElzb2xhdGFibGUiKSkpe1I9ITE7YnJlYWt9Zm9yKGQ9MDtkPHgubGVuZ3RoO2QrKylpZighMSE9PXhbZF0udmlzaWJsZSYmIWkudHJhY2VJcyh4W2RdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKGIudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpqKHhbZF0sITApO2JyZWFrO2Nhc2UhMDpEPSEhUnx8ImxlZ2VuZG9ubHkiLEk9eFtkXT09PWIsej0hMCE9PXhbZF0uc2hvd2xlZ2VuZCYmIXhbZF0ubGVnZW5kZ3JvdXAsTz1JfHxMJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyxqKHhbZF0sISghTyYmIXopfHxEKX19Zm9yKGQ9MDtkPGsubGVuZ3RoO2QrKylpZihnPWtbZF0pe3ZhciBGPWcuY29uc3RydWN0VXBkYXRlKCksQj1PYmplY3Qua2V5cyhGKTtmb3IobT0wO208Qi5sZW5ndGg7bSsrKXY9QlttXSwod1t2XT13W3ZdfHxbXSlbQVtkXV09Rlt2XX1mb3IoeT1PYmplY3Qua2V5cyh3KSxkPTA7ZDx5Lmxlbmd0aDtkKyspZm9yKHY9eVtkXSxtPTA7bTxULmxlbmd0aDttKyspd1t2XS5oYXNPd25Qcm9wZXJ0eShtKXx8KHdbdl1bbV09dm9pZCAwKTtpLmNhbGwoIl9ndWlSZXN0eWxlIixlLHcsVCl9fX19ZnVuY3Rpb24gTih0LGUscil7dmFyIG49VC5pbmRleE9mKHQpLGk9d1tlXTtyZXR1cm4gaXx8KGk9d1tlXT1bXSksLTE9PT1ULmluZGV4T2YodCkmJihULnB1c2godCksbj1ULmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBqKHQsZSl7aWYoIXAuZ3JvdXBUaXRsZXx8Zil7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGE9a1tyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07YT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSxrW3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLEFbci5pbmRleF09TihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTtOKHIuaW5kZXgsInZpc2libGUiLGMpfX19fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOH1dLDQyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJncm91cGVkIil9LHIuaXNWZXJ0aWNhbD1mdW5jdGlvbih0KXtyZXR1cm4iaCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigicmV2ZXJzZWQiKX19LHt9XSw0MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImxlZ2VuZCIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxzdHlsZTp0KCIuL3N0eWxlIil9fSx7Ii4vYXR0cmlidXRlcyI6NDE2LCIuL2RlZmF1bHRzIjo0MTgsIi4vZHJhdyI6NDE5LCIuL3N0eWxlIjo0MjR9XSw0MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5zdHJUcmFuc2xhdGUscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKSxoPXQoIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyIpLmNhc3RPcHRpb24scD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4oZT8icmFkaWFsIjoiaG9yaXpvbnRhbCIpKyh0PyIiOiJyZXZlcnNlZCIpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dFswXS50cmFjZSxyPWUuY29udG91cnMsbj11Lmhhc0xpbmVzKGUpLGk9dS5oYXNNYXJrZXJzKGUpLGE9ZS52aXNpYmxlJiZlLmZpbGwmJiJub25lIiE9PWUuZmlsbCxvPSExLHM9ITE7aWYocil7dmFyIGw9ci5jb2xvcmluZzsibGluZXMiPT09bD9vPSEwOm49Im5vbmUiPT09bHx8ImhlYXRtYXAiPT09bHx8ci5zaG93bGluZXMsImNvbnN0cmFpbnQiPT09ci50eXBlP2E9Ij0iIT09ci5fb3BlcmF0aW9uOiJmaWxsIiE9PWwmJiJoZWF0bWFwIiE9PWx8fChzPSEwKX1yZXR1cm57c2hvd01hcmtlcjppLHNob3dMaW5lOm4sc2hvd0ZpbGw6YSxzaG93R3JhZGllbnRMaW5lOm8sc2hvd0dyYWRpZW50RmlsbDpzLGFueUxpbmU6bnx8byxhbnlGaWxsOmF8fHN9fWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybiB0JiZhLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ZTp0PnI/cjp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHY9ZS5fZnVsbExheW91dDtyfHwocj12LmxlZ2VuZCk7dmFyIHk9ImNvbnN0YW50Ij09PXIuaXRlbXNpemluZyx4PXIuaXRlbXdpZHRoLGI9KHgrMipwLml0ZW1HYXApLzIsXz1vKGIsMCksdz1mdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZih0KzEpaT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2k9ZS53aWR0aH1yZXR1cm4geT9uOk1hdGgubWluKGkscil9O2Z1bmN0aW9uIFQodCxhLG8pe3ZhciB1PXRbMF0udHJhY2UsZj11Lm1hcmtlcnx8e30saD1mLmxpbmV8fHt9LHA9bz91LnZpc2libGUmJnUudHlwZT09PW86aS50cmFjZUlzKHUsImJhciIpLGQ9bi5zZWxlY3QoYSkuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQiK28pLmRhdGEocD9bdF06W10pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQiK28sITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIixfKSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxvPXcoYS5tbHcsZi5saW5lLDUsMik7aS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpO3ZhciBwPWEubWNjO2lmKCFyLl9pbkhvdmVyJiYibWMiaW4gYSl7dmFyIGQ9YyhmKSxtPWQubWlkO3ZvaWQgMD09PW0mJihtPShkLm1heCtkLm1pbikvMikscD1zLnRyeUNvbG9yc2NhbGUoZiwiIikobSl9dmFyIHY9cHx8YS5tY3x8Zi5jb2xvcix5PWYucGF0dGVybix4PXkmJnMuZ2V0UGF0dGVybkF0dHIoeS5zaGFwZSwwLCIiKTtpZih4KXt2YXIgYj1zLmdldFBhdHRlcm5BdHRyKHkuYmdjb2xvciwwLG51bGwpLF89cy5nZXRQYXR0ZXJuQXR0cih5LmZnY29sb3IsMCxudWxsKSxUPXkuZmdvcGFjaXR5LGs9Zyh5LnNpemUsOCwxMCksQT1nKHkuc29saWRpdHksLjUsMSksTT0ibGVnZW5kLSIrdS51aWQ7aS5jYWxsKHMucGF0dGVybiwibGVnZW5kIixlLE0seCxrLEEscCx5LmZpbGxtb2RlLGIsXyxUKX1lbHNlIGkuY2FsbChsLmZpbGwsdik7byYmbC5zdHJva2UoaSxhLm1sY3x8aC5jb2xvcil9KSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG89dFswXSxzPW8udHJhY2UsbD1yP3MudmlzaWJsZSYmcy50eXBlPT09cjppLnRyYWNlSXMocyxyKSxjPW4uc2VsZWN0KGUpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIityKS5kYXRhKGw/W3RdOltdKTtpZihjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIityLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksYy5leGl0KCkucmVtb3ZlKCksYy5zaXplKCkpe3ZhciB1PShzLm1hcmtlcnx8e30pLmxpbmUscD13KGgodS53aWR0aCxvLnB0cyksdSw1LDIpLGQ9YS5taW5FeHRlbmQocyx7bWFya2VyOntsaW5lOnt3aWR0aDpwfX19KTtkLm1hcmtlci5saW5lLmNvbG9yPXUuY29sb3I7dmFyIG09YS5taW5FeHRlbmQobyx7dHJhY2U6ZH0pO2YoYyxtLGQpfX10LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9YS5lbnN1cmVTaW5nbGUoZSwiZyIsImxheWVycyIpO2kuc3R5bGUoIm9wYWNpdHkiLHRbMF0udHJhY2Uub3BhY2l0eSk7dmFyIHM9ci52YWxpZ24sbD10WzBdLmxpbmVIZWlnaHQsYz10WzBdLmhlaWdodDtpZigibWlkZGxlIiE9PXMmJmwmJmMpe3ZhciB1PXt0b3A6MSxib3R0b206LTF9W3NdKiguNSoobC1jKzMpKTtpLmF0dHIoInRyYW5zZm9ybSIsbygwLHUpKX1lbHNlIGkuYXR0cigidHJhbnNmb3JtIixudWxsKTtpLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLGkuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgZj1pLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksZi5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaT10WzBdLnRyYWNlLG89W107aWYoaS52aXNpYmxlKXN3aXRjaChpLnR5cGUpe2Nhc2UiaGlzdG9ncmFtMmQiOmNhc2UiaGVhdG1hcCI6bz1bWyJNLTE1LC0yVjRIMTVWLTJaIl1dLHI9ITA7YnJlYWs7Y2FzZSJjaG9yb3BsZXRoIjpjYXNlImNob3JvcGxldGhtYXBib3giOm89W1siTS02LC02VjZINlYtNloiXV0scj0hMDticmVhaztjYXNlImRlbnNpdHltYXBib3giOm89W1siTS02LDAgYTYsNiAwIDEsMCAxMiwwIGEgNiw2IDAgMSwwIC0xMiwwIl1dLHI9InJhZGlhbCI7YnJlYWs7Y2FzZSJjb25lIjpvPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBWNkw2LDRaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBMNiwtNFoiXSxbIk0tNiwtMiBBMiwyIDAgMCwwIC02LDIgTDYsMFoiXV0scj0hMTticmVhaztjYXNlInN0cmVhbXR1YmUiOm89W1siTS02LDIgQTIsMiAwIDAsMCAtNiw2IEg2IEEyLDIgMCAwLDEgNiwyIFoiXSxbIk0tNiwtNiBBMiwyIDAgMCwwIC02LC0yIEg2IEEyLDIgMCAwLDEgNiwtNiBaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEg2IEEyLDIgMCAwLDEgNiwtMiBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdXJmYWNlIjpvPVtbIk0tNiwtNiBBMiwzIDAgMCwwIC02LDAgSDYgQTIsMyAwIDAsMSA2LC02IFoiXSxbIk0tNiwxIEEyLDMgMCAwLDEgLTYsNiBINiBBMiwzIDAgMCwwIDYsMCBaIl1dLHI9ITA7YnJlYWs7Y2FzZSJtZXNoM2QiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02SDZMMCw2WiJdXSxyPSExO2JyZWFrO2Nhc2Uidm9sdW1lIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMDticmVhaztjYXNlImlzb3N1cmZhY2UiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02IEExMiwyNCAwIDAsMCA2LC02IEwwLDZaIl1dLHI9ITF9dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQzZGFuZGZyaWVuZHMiKS5kYXRhKG8pO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQzZGFuZGZyaWVuZHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0LG8pe3ZhciB1LGY9bi5zZWxlY3QodGhpcyksaD1jKGkpLHA9aC5jb2xvcnNjYWxlLG09aC5yZXZlcnNlc2NhbGU7aWYocCl7aWYoIXIpe3ZhciBnPXAubGVuZ3RoO3U9MD09PW8/cFttP2ctMTowXVsxXToxPT09bz9wW20/MDpnLTFdWzFdOnBbTWF0aC5mbG9vcigoZy0xKS8yKV1bMV19fWVsc2V7dmFyIHY9aS52ZXJ0ZXhjb2xvcnx8aS5mYWNlY29sb3J8fGkuY29sb3I7dT1hLmlzQXJyYXlPclR5cGVkQXJyYXkodik/dltvXXx8dlswXTp2fWYuYXR0cigiZCIsdFswXSksdT9mLmNhbGwobC5maWxsLHUpOmYuY2FsbCgoZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciBuPSJsZWdlbmRmaWxsLSIraS51aWQ7cy5ncmFkaWVudCh0LGUsbixkKG0sInJhZGlhbCI9PT1yKSxwLCJmaWxsIil9fSkpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj0id2F0ZXJmYWxsIj09PWUudHlwZTtpZih0WzBdLl9kaXN0aW5jdCYmcil7dmFyIGk9dFswXS50cmFjZVt0WzBdLmRpcl0ubWFya2VyO3JldHVybiB0WzBdLm1jPWkuY29sb3IsdFswXS5tbHc9aS5saW5lLndpZHRoLHRbMF0ubWxjPWkubGluZS5jb2xvcixUKHQsdGhpcywid2F0ZXJmYWxsIil9dmFyIGE9W107ZS52aXNpYmxlJiZyJiYoYT10WzBdLmhhc1RvdGFscz9bWyJpbmNyZWFzaW5nIiwiTS02LC02VjZIMFoiXSxbInRvdGFscyIsIk02LDZIMEwtNiwtNkgtMFoiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SDBaIl1dOltbImluY3JlYXNpbmciLCJNLTYsLTZWNkg2WiJdLFsiZGVjcmVhc2luZyIsIk02LDZWLTZILTZaIl1dKTt2YXIgbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZHdhdGVyZmFsbCIpLmRhdGEoYSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZHdhdGVyZmFsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVt0WzBdXS5tYXJrZXIsYT13KHZvaWQgMCxpLmxpbmUsNSwyKTtyLmF0dHIoImQiLHRbMV0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChsLmZpbGwsaS5jb2xvciksYSYmci5jYWxsKGwuc3Ryb2tlLGkubGluZS5jb2xvcil9KSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7VCh0LHRoaXMsImZ1bm5lbCIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe1QodCx0aGlzKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10WzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRib3giKS5kYXRhKHIudmlzaWJsZSYmaS50cmFjZUlzKHIsImJveC12aW9saW4iKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRib3giLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJhbGwiIT09ci5ib3hwb2ludHMmJiJhbGwiIT09ci5wb2ludHN8fDAhPT1sLm9wYWNpdHkoci5maWxsY29sb3IpfHwwIT09bC5vcGFjaXR5KChyLmxpbmV8fHt9KS5jb2xvcikpe3ZhciBpPXcodm9pZCAwLHIubGluZSw1LDIpO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsaSsicHgiKS5jYWxsKGwuZmlsbCxyLmZpbGxjb2xvciksaSYmbC5zdHJva2UodCxyLmxpbmUuY29sb3IpfWVsc2V7dmFyIGM9YS5taW5FeHRlbmQocix7bWFya2VyOntzaXplOnk/MTI6YS5jb25zdHJhaW4oci5tYXJrZXIuc2l6ZSwyLDE2KSxzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9fSk7by5jYWxsKHMucG9pbnRTdHlsZSxjLGUpfX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXtrKHQsdGhpcywiZnVubmVsYXJlYSIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2sodCx0aGlzLCJwaWUiKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcixpLG89bSh0KSxsPW8uc2hvd0ZpbGwsZj1vLnNob3dMaW5lLGg9by5zaG93R3JhZGllbnRMaW5lLHA9by5zaG93R3JhZGllbnRGaWxsLGc9by5hbnlGaWxsLHY9by5hbnlMaW5lLHk9dFswXSxiPXkudHJhY2UsXz1jKGIpLFQ9Xy5jb2xvcnNjYWxlLGs9Xy5yZXZlcnNlc2NhbGUsQT11Lmhhc01hcmtlcnMoYil8fCFnPyJNNSwwIjp2PyJNNSwtMiI6Ik01LC0zIixNPW4uc2VsZWN0KHRoaXMpLFM9TS5zZWxlY3QoIi5sZWdlbmRmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShsfHxwP1t0XTpbXSk7aWYoUy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWZpbGwiLCEwKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImQiLEErImgiK3grInY2aC0iK3grInoiKS5jYWxsKGw/cy5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9ImxlZ2VuZGZpbGwtIitiLnVpZDtzLmdyYWRpZW50KHQsZSxyLGQoayksVCwiZmlsbCIpfX0pLGZ8fGgpe3ZhciBFPXcodm9pZCAwLGIubGluZSwxMCw1KTtpPWEubWluRXh0ZW5kKGIse2xpbmU6e3dpZHRoOkV9fSkscj1bYS5taW5FeHRlbmQoeSx7dHJhY2U6aX0pXX12YXIgTD1NLnNlbGVjdCgiLmxlZ2VuZGxpbmVzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmfHxoP1tyXTpbXSk7TC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKSxMLmV4aXQoKS5yZW1vdmUoKSxMLmF0dHIoImQiLEErKGg/ImwiK3grIiwwLjAwMDEiOiJoIit4KSkuY2FsbChmP3MubGluZUdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPSJsZWdlbmRsaW5lLSIrYi51aWQ7cy5saW5lR3JvdXBTdHlsZSh0KSxzLmdyYWRpZW50KHQsZSxyLGQoayksVCwic3Ryb2tlIil9fSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaSxvPW0odCksbD1vLmFueUZpbGwsYz1vLmFueUxpbmUsZj1vLnNob3dMaW5lLGg9by5zaG93TWFya2VyLHA9dFswXSxkPXAudHJhY2UsZz0haCYmIWMmJiFsJiZ1Lmhhc1RleHQoZCk7ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1hLm5lc3RlZFByb3BlcnR5KGQsdCkuZ2V0KCksbz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkmJmU/ZShpKTppO2lmKHkmJm8mJnZvaWQgMCE9PW4mJihvPW4pLHIpe2lmKG88clswXSlyZXR1cm4gclswXTtpZihvPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIG99ZnVuY3Rpb24geCh0KXtyZXR1cm4gcC5fZGlzdGluY3QmJnAuaW5kZXgmJnRbcC5pbmRleF0/dFtwLmluZGV4XTp0WzBdfWlmKGh8fGd8fGYpe3ZhciBiPXt9LHc9e307aWYoaCl7Yi5tYz12KCJtYXJrZXIuY29sb3IiLHgpLGIubXg9digibWFya2VyLnN5bWJvbCIseCksYi5tbz12KCJtYXJrZXIub3BhY2l0eSIsYS5tZWFuLFsuMiwxXSksYi5tbGM9digibWFya2VyLmxpbmUuY29sb3IiLHgpLGIubWx3PXYoIm1hcmtlci5saW5lLndpZHRoIixhLm1lYW4sWzAsNV0sMiksdy5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6ImRpYW1ldGVyIn07dmFyIFQ9digibWFya2VyLnNpemUiLGEubWVhbixbMiwxNl0sMTIpO2IubXM9VCx3Lm1hcmtlci5zaXplPVR9ZiYmKHcubGluZT17d2lkdGg6digibGluZS53aWR0aCIseCxbMCwxMF0sNSl9KSxnJiYoYi50eD0iQWEiLGIudHA9digidGV4dHBvc2l0aW9uIix4KSxiLnRzPTEwLGIudGM9digidGV4dGZvbnQuY29sb3IiLHgpLGIudGY9digidGV4dGZvbnQuZmFtaWx5Iix4KSkscj1bYS5taW5FeHRlbmQocCxiKV0sKGk9YS5taW5FeHRlbmQoZCx3KSkuc2VsZWN0ZWRwb2ludHM9bnVsbCxpLnRleHR0ZW1wbGF0ZT1udWxsfXZhciBrPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSxBPWsuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKGg/cjpbXSk7QS5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLEEuZXhpdCgpLnJlbW92ZSgpLEEuY2FsbChzLnBvaW50U3R5bGUsaSxlKSxoJiYoclswXS5tcmM9Myk7dmFyIE09ay5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShnP3I6W10pO00uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLE0uZXhpdCgpLnJlbW92ZSgpLE0uc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChzLnRleHRQb2ludFN0eWxlLGksZSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kY2FuZGxlIikuZGF0YShlLnZpc2libGUmJiJjYW5kbGVzdGljayI9PT1lLnR5cGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRjYW5kbGUiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSC04TS04LDZWLTZIOFoiOiJNMTUsMEg4TTgsLTZWNkgtOFoifSkpLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz13KHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4IikuY2FsbChsLmZpbGwsYS5maWxsY29sb3IpLG8mJmwuc3Ryb2tlKGksYS5saW5lLmNvbG9yKX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRvaGxjIikuZGF0YShlLnZpc2libGUmJiJvaGxjIj09PWUudHlwZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZG9obGMiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSDBNLTgsLTZWMCI6Ik0xNSwwSDBNOCw2VjAifSkpLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz13KHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwocy5kYXNoTGluZSxhLmxpbmUuZGFzaCxvKSxvJiZsLnN0cm9rZShpLGEubGluZS5jb2xvcil9KSl9KSl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiOjkwNSwiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiOjkxMSwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi4vY29sb3IiOjM2NiwiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjozNzcsIi4uL2RyYXdpbmciOjM4OCwiLi9jb25zdGFudHMiOjQxNywiQHBsb3RseS9kMyI6NTh9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e2VkaXRUeXBlOiJtb2RlYmFyIixvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToibW9kZWJhciJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGFkZDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6IiIsZWRpdFR5cGU6Im1vZGViYXIifSxyZW1vdmU6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0OiIiLGVkaXRUeXBlOiJtb2RlYmFyIn19fSx7Ii4vY29uc3RhbnRzIjo0Mjd9XSw0MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2ZvbnRzL3Bsb3RpY29uIikscz10KCIuLi9zaGFwZXMvZHJhdyIpLmVyYXNlQWN0aXZlU2hhcGUsbD10KCIuLi8uLi9saWIiKSxjPWwuXyx1PWUuZXhwb3J0cz17fTtmdW5jdGlvbiBmKHQsZSl7dmFyIHIsaSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxmPWEubGlzdCh0LG51bGwsITApLGg9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsbT0oMStkKS8yLGc9KDEtZCkvMjtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKWlmKCEocj1mW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciB2PXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09dlswXSx1W3ArIi5yYW5nZVsxXSJdPXZbMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1ofHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoaD0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVttKnlbMF0rZyp5WzFdLG0qeVsxXStnKnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX19ZWxzZSJob3Zlcm1vZGUiIT09c3x8IngiIT09bCYmInkiIT09bHx8KGw9Yy5faXNIb3Jpej8ieSI6IngiLG8uc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsbCkpLHVbc109bDtjLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWgsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cy5nbDNkfHxbXSxzPXt9LGw9aS5zcGxpdCgiLiIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rIi4iK2xbMV1dPWE7dmFyIHU9InBhbiI9PT1hP2E6Inpvb20iO3MuZHJhZ21vZGU9dSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxzKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9InJlc2V0TGFzdFNhdmUiPT09cixhPSJyZXNldERlZmF1bHQiPT09cixvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nbDNkfHxbXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHUsZj1zW2NdLGg9ZisiLmNhbWVyYSIscD1mKyIuYXNwZWN0cmF0aW8iLGQ9ZisiLmFzcGVjdG1vZGUiLG09b1tmXS5fc2NlbmU7aT8obFtoKyIudXAiXT1tLnZpZXdJbml0aWFsLnVwLGxbaCsiLmV5ZSJdPW0udmlld0luaXRpYWwuZXllLGxbaCsiLmNlbnRlciJdPW0udmlld0luaXRpYWwuY2VudGVyLHU9ITApOmEmJihsW2grIi51cCJdPW51bGwsbFtoKyIuZXllIl09bnVsbCxsW2grIi5jZW50ZXIiXT1udWxsLHU9ITApLHUmJihsW3ArIi54Il09bS52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby54LGxbcCsiLnkiXT1tLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnksbFtwKyIueiJdPW0udmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueixsW2RdPW0udmlld0luaXRpYWwuYXNwZWN0bW9kZSl9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbCl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxuPXIuX3ByZXZpb3VzVmFsLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2R8fFtdLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPXt9LGw9e307aWYobilsPW4sci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9aVt1XSxoPXUrIi5ob3Zlcm1vZGUiO3NbaF09Zi5ob3Zlcm1vZGUsbFtoXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLG09dSsiLiIrZCsiLnNob3dzcGlrZXMiO2xbbV09ITEsc1ttXT1mW2RdLnNob3dzcGlrZXN9fXIuX3ByZXZpb3VzVmFsPXN9cmV0dXJuIGx9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvfHxbXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1vW2NdO2lmKCJ6b29tIj09PWkpe3ZhciBmPXUucHJvamVjdGlvbi5zY2FsZSxoPSJpbiI9PT1hPzIqZjouNSpmO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGMrIi5wcm9qZWN0aW9uLnNjYWxlIixoKX19InJlc2V0Ij09PWkmJngodCwiZ2VvIil9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcygiY2FydGVzaWFuIik/ZS5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Iil9ZnVuY3Rpb24gdih0KXt2YXIgZT1nKHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJob3Zlcm1vZGUiLGUpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5tYXBib3h8fFtdLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aVtsXS56b29tLHU9ImluIj09PXI/MS4wNSpjOmMvMS4wNTtvW2wrIi56b29tIl09dX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxvKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9zdWJwbG90c1tlXXx8W10sYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPWlbb10sbD1yW3NdLl9zdWJwbG90LnZpZXdJbml0aWFsLGM9T2JqZWN0LmtleXMobCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2FbcysiLiIrZl09bFtmXX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxhKX11LnRvSW1hZ2U9e25hbWU6InRvSW1hZ2UiLHRpdGxlOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zfHx7fSkuZm9ybWF0fHwicG5nIjtyZXR1cm4gYyh0LCJwbmciPT09ZT8iRG93bmxvYWQgcGxvdCBhcyBhIHBuZyI6IkRvd25sb2FkIHBsb3QiKX0saWNvbjpvLmNhbWVyYSxjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zLHI9e2Zvcm1hdDplLmZvcm1hdHx8InBuZyJ9O2wubm90aWZpZXIoYyh0LCJUYWtpbmcgc25hcHNob3QgLSB0aGlzIG1heSB0YWtlIGEgZmV3IHNlY29uZHMiKSwibG9uZyIpLCJzdmciIT09ci5mb3JtYXQmJmwuaXNJRSgpJiYobC5ub3RpZmllcihjKHQsIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy4iKSwibG9uZyIpLHIuZm9ybWF0PSJzdmciKSxbImZpbGVuYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJzY2FsZSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2wubm90aWZpZXIoYyh0LCJTbmFwc2hvdCBzdWNjZWVkZWQiKSsiIC0gIitlLCJsb25nIil9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7bC5ub3RpZmllcihjKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pKX19LHUuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOiJzZW5kRGF0YVRvQ2xvdWQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5kaXNrLGNsaWNrOmZ1bmN0aW9uKHQpe2kuc2VuZERhdGFUb0Nsb3VkKHQpfX0sdS5lZGl0SW5DaGFydFN0dWRpbz17bmFtZToiZWRpdEluQ2hhcnRTdHVkaW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5wZW5jaWwsY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSx1Lnpvb20yZD17bmFtZToiem9vbTJkIixfY2F0OiJ6b29tIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmZ9LHUucGFuMmQ9e25hbWU6InBhbjJkIixfY2F0OiJwYW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlBhbiIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJwYW4iLGljb246by5wYW4sY2xpY2s6Zn0sdS5zZWxlY3QyZD17bmFtZToic2VsZWN0MmQiLF9jYXQ6InNlbGVjdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiQm94IFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJzZWxlY3QiLGljb246by5zZWxlY3Rib3gsY2xpY2s6Zn0sdS5sYXNzbzJkPXtuYW1lOiJsYXNzbzJkIixfY2F0OiJsYXNzbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiTGFzc28gU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Imxhc3NvIixpY29uOm8ubGFzc28sY2xpY2s6Zn0sdS5kcmF3Y2xvc2VkcGF0aD17bmFtZToiZHJhd2Nsb3NlZHBhdGgiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgY2xvc2VkIGZyZWVmb3JtIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdjbG9zZWRwYXRoIixpY29uOm8uZHJhd2Nsb3NlZHBhdGgsY2xpY2s6Zn0sdS5kcmF3b3BlbnBhdGg9e25hbWU6ImRyYXdvcGVucGF0aCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBvcGVuIGZyZWVmb3JtIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdvcGVucGF0aCIsaWNvbjpvLmRyYXdvcGVucGF0aCxjbGljazpmfSx1LmRyYXdsaW5lPXtuYW1lOiJkcmF3bGluZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBsaW5lIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdsaW5lIixpY29uOm8uZHJhd2xpbmUsY2xpY2s6Zn0sdS5kcmF3cmVjdD17bmFtZToiZHJhd3JlY3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgcmVjdGFuZ2xlIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdyZWN0IixpY29uOm8uZHJhd3JlY3QsY2xpY2s6Zn0sdS5kcmF3Y2lyY2xlPXtuYW1lOiJkcmF3Y2lyY2xlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IGNpcmNsZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3Y2lyY2xlIixpY29uOm8uZHJhd2NpcmNsZSxjbGljazpmfSx1LmVyYXNlc2hhcGU9e25hbWU6ImVyYXNlc2hhcGUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVyYXNlIGFjdGl2ZSBzaGFwZSIpfSxpY29uOm8uZXJhc2VzaGFwZSxjbGljazpzfSx1Lnpvb21JbjJkPXtuYW1lOiJ6b29tSW4yZCIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6Zn0sdS56b29tT3V0MmQ9e25hbWU6Inpvb21PdXQyZCIsX2NhdDoiem9vbW91dCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOmZ9LHUuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIixfY2F0OiJhdXRvc2NhbGUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkF1dG9zY2FsZSIpfSxhdHRyOiJ6b29tIix2YWw6ImF1dG8iLGljb246by5hdXRvc2NhbGUsY2xpY2s6Zn0sdS5yZXNldFNjYWxlMmQ9e25hbWU6InJlc2V0U2NhbGUyZCIsX2NhdDoicmVzZXRzY2FsZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgYXhlcyIpfSxhdHRyOiJ6b29tIix2YWw6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmfSx1LmhvdmVyQ2xvc2VzdENhcnRlc2lhbj17bmFtZToiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6Zn0sdS5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIsX2NhdDoiaG92ZXJDb21wYXJlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJDb21wYXJlIGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjpvLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6Zn0sdS56b29tM2Q9e25hbWU6Inpvb20zZCIsX2NhdDoiem9vbSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOm8uem9vbWJveCxjbGljazpofSx1LnBhbjNkPXtuYW1lOiJwYW4zZCIsX2NhdDoicGFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJQYW4iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmh9LHUub3JiaXRSb3RhdGlvbj17bmFtZToib3JiaXRSb3RhdGlvbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiT3JiaXRhbCByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJvcmJpdCIsaWNvbjpvWyIzZF9yb3RhdGUiXSxjbGljazpofSx1LnRhYmxlUm90YXRpb249e25hbWU6InRhYmxlUm90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlR1cm50YWJsZSByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ0dXJudGFibGUiLGljb246b1siei1heGlzIl0sY2xpY2s6aH0sdS5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZToicmVzZXRDYW1lcmFEZWZhdWx0M2QiLF9jYXQ6InJlc2V0Q2FtZXJhRGVmYXVsdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgY2FtZXJhIHRvIGRlZmF1bHQiKX0sYXR0cjoicmVzZXREZWZhdWx0IixpY29uOm8uaG9tZSxjbGljazpwfSx1LnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZToicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIixfY2F0OiJyZXNldENhbWVyYUxhc3RTYXZlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCBjYW1lcmEgdG8gbGFzdCBzYXZlIil9LGF0dHI6InJlc2V0TGFzdFNhdmUiLGljb246by5tb3ZpZSxjbGljazpwfSx1LmhvdmVyQ2xvc2VzdDNkPXtuYW1lOiJob3ZlckNsb3Nlc3QzZCIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZCh0LGUpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sdS56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6bX0sdS56b29tT3V0R2VvPXtuYW1lOiJ6b29tT3V0R2VvIixfY2F0OiJ6b29tb3V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6bX0sdS5yZXNldEdlbz17bmFtZToicmVzZXRHZW8iLF9jYXQ6InJlc2V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCIpfSxhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjpvLmF1dG9zY2FsZSxjbGljazptfSx1LmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOiJob3ZlckNsb3Nlc3RHbDJkIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6ImhvdmVyQ2xvc2VzdFBpZSIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSx1LnJlc2V0Vmlld1NhbmtleT17bmFtZToicmVzZXRTYW5rZXlHcm91cCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgdmlldyIpfSxpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXtmb3IodmFyIGU9eyJub2RlLmdyb3VwcyI6W10sIm5vZGUueCI6W10sIm5vZGUueSI6W119LHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspe3ZhciBpPXQuX2Z1bGxEYXRhW3JdLl92aWV3SW5pdGlhbDtlWyJub2RlLmdyb3VwcyJdLnB1c2goaS5ub2RlLmdyb3Vwcy5zbGljZSgpKSxlWyJub2RlLngiXS5wdXNoKGkubm9kZS54LnNsaWNlKCkpLGVbIm5vZGUueSJdLnB1c2goaS5ub2RlLnkuc2xpY2UoKSl9bi5jYWxsKCJyZXN0eWxlIix0LGUpfX0sdS50b2dnbGVIb3Zlcj17bmFtZToidG9nZ2xlSG92ZXIiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1kKHQsZSk7ci5ob3Zlcm1vZGU9Zyh0KSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxyKX19LHUucmVzZXRWaWV3cz17bmFtZToicmVzZXRWaWV3cyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgdmlld3MiKX0saWNvbjpvLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQ7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInpvb20iKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLCJyZXNldCIpLGYodCxlKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwicmVzZXRMYXN0U2F2ZSIpLHAodCxlKSx4KHQsImdlbyIpLHgodCwibWFwYm94Iil9fSx1LnRvZ2dsZVNwaWtlbGluZXM9e25hbWU6InRvZ2dsZVNwaWtlbGluZXMiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBTcGlrZSBMaW5lcyIpfSxpY29uOm8uc3Bpa2VsaW5lLGF0dHI6Il9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkIix2YWw6Im9uIixjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPSJvbiI9PT1yPyJvZmYiOiJvbiIsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPSJvbiI9PT10Ll9mdWxsTGF5b3V0Ll9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkLHI9YS5saXN0KHQsbnVsbCwhMCksbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07bltvLl9uYW1lKyIuc2hvd3NwaWtlcyJdPSEhZXx8by5fc2hvd1NwaWtlSW5pdGlhbH1yZXR1cm4gbn0odCkpfX0sdS5yZXNldFZpZXdNYXBib3g9e25hbWU6InJlc2V0Vmlld01hcGJveCIsX2NhdDoicmVzZXRWaWV3Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGF0dHI6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXt4KHQsIm1hcGJveCIpfX0sdS56b29tSW5NYXBib3g9e25hbWU6Inpvb21Jbk1hcGJveCIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6eX0sdS56b29tT3V0TWFwYm94PXtuYW1lOiJ6b29tT3V0TWFwYm94IixfY2F0OiJ6b29tb3V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6eX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjQ4MiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTU4LCIuLi8uLi9wbG90cy9wbG90cyI6NjE5LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9zaGFwZXMvZHJhdyI6NDUwfV0sNDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYnV0dG9ucyIpLGk9T2JqZWN0LmtleXMobiksYT1bImRyYXdsaW5lIiwiZHJhd29wZW5wYXRoIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3Y2lyY2xlIiwiZHJhd3JlY3QiLCJlcmFzZXNoYXBlIl0sbz1bInYxaG92ZXJtb2RlIiwiaG92ZXJjbG9zZXN0IiwiaG92ZXJjb21wYXJlIiwidG9nZ2xlaG92ZXIiLCJ0b2dnbGVzcGlrZWxpbmVzIl0uY29uY2F0KGEpLHM9W107aS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7aWYoLTE9PT1vLmluZGV4T2YodC5fY2F0fHx0Lm5hbWUpKXt2YXIgZT10Lm5hbWUscj0odC5fY2F0fHx0Lm5hbWUpLnRvTG93ZXJDYXNlKCk7LTE9PT1zLmluZGV4T2YoZSkmJnMucHVzaChlKSwtMT09PXMuaW5kZXhPZihyKSYmcy5wdXNoKHIpfX0oblt0XSl9KSkscy5zb3J0KCksZS5leHBvcnRzPXtEUkFXX01PREVTOmEsYmFja0J1dHRvbnM6byxmb3JlQnV0dG9uczpzfX0seyIuL2J1dHRvbnMiOjQyNn1dLDQyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1vZGViYXJ8fHt9LHM9YS5uZXdDb250YWluZXIoZSwibW9kZWJhciIpO2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gbi5jb2VyY2UocixzLG8sdCxlKX1sKCJvcmllbnRhdGlvbiIpLGwoImJnY29sb3IiLGkuYWRkT3BhY2l0eShlLnBhcGVyX2JnY29sb3IsLjUpKTt2YXIgYz1pLmNvbnRyYXN0KGkucmdiKGUubW9kZWJhci5iZ2NvbG9yKSk7bCgiY29sb3IiLGkuYWRkT3BhY2l0eShjLC4zKSksbCgiYWN0aXZlY29sb3IiLGkuYWRkT3BhY2l0eShjLC43KSksbCgidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxsKCJhZGQiKSxsKCJyZW1vdmUiKX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vY29sb3IiOjM2NiwiLi9hdHRyaWJ1dGVzIjo0MjV9XSw0Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6Im1vZGViYXIiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLG1hbmFnZTp0KCIuL21hbmFnZSIpfX0seyIuL2F0dHJpYnV0ZXMiOjQyNSwiLi9kZWZhdWx0cyI6NDI4LCIuL21hbmFnZSI6NDMwfV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGk9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9meC9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXIscz10KCIuL21vZGViYXIiKSxsPXQoIi4vYnV0dG9ucyIpLGM9dCgiLi9jb25zdGFudHMiKS5EUkFXX01PREVTO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fY29udGV4dCx1PWUuX21vZGVCYXI7aWYoci5kaXNwbGF5TW9kZUJhcnx8ci53YXRlcm1hcmspe2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9SZW1vdmUqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9BZGQpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvQWRkKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7dmFyIGYsaD1yLm1vZGVCYXJCdXR0b25zO2Y9QXJyYXkuaXNBcnJheShoKSYmaC5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZm9yKHZhciByPXRbZV0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJzdHJpbmciPT10eXBlb2YgaSl7aWYodm9pZCAwPT09bFtpXSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsImludmFsaWQgYnV0dG9uIG5hbWUiXS5qb2luKCIgIikpO3RbZV1bbl09bFtpXX19cmV0dXJuIHR9KGgpOiFyLmRpc3BsYXlNb2RlQmFyJiZyLndhdGVybWFyaz9bXTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEscz10Ll9jb250ZXh0O2Z1bmN0aW9uIHUodCxlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH1lbHNle3ZhciByPWUubmFtZSxuPWUuX2NhdHx8ZS5uYW1lO2lmKHI9PT10fHxuPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybiEwfXJldHVybiExfXZhciBmPWUubW9kZWJhci5hZGQ7InN0cmluZyI9PXR5cGVvZiBmJiYoZj1bZl0pO3ZhciBoPWUubW9kZWJhci5yZW1vdmU7InN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pO3ZhciBwPXMubW9kZUJhckJ1dHRvbnNUb0FkZC5jb25jYXQoZi5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLmxlbmd0aDtlKyspaWYodSh0LHMubW9kZUJhckJ1dHRvbnNUb1JlbW92ZVtlXSkpcmV0dXJuITE7cmV0dXJuITB9KSkpLGQ9cy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLmNvbmNhdChoLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxzLm1vZGVCYXJCdXR0b25zVG9BZGQubGVuZ3RoO2UrKylpZih1KHQscy5tb2RlQmFyQnV0dG9uc1RvQWRkW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH0pKSksbT1lLl9oYXMoImNhcnRlc2lhbiIpLGc9ZS5faGFzKCJnbDNkIiksdj1lLl9oYXMoImdlbyIpLHk9ZS5faGFzKCJwaWUiKSx4PWUuX2hhcygiZnVubmVsYXJlYSIpLGI9ZS5faGFzKCJnbDJkIiksXz1lLl9oYXMoInRlcm5hcnkiKSx3PWUuX2hhcygibWFwYm94IiksVD1lLl9oYXMoInBvbGFyIiksaz1lLl9oYXMoInNtaXRoIiksQT1lLl9oYXMoInNhbmtleSIpLE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KGUpLFM9byhlLmhvdmVybW9kZSksRT1bXTtmdW5jdGlvbiBMKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXtmb3IodmFyIG49dFtyXSxpPWxbbl0sYT1pLm5hbWUudG9Mb3dlckNhc2UoKSxvPShpLl9jYXR8fGkubmFtZSkudG9Mb3dlckNhc2UoKSxzPSExLGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIHU9ZFtjXS50b0xvd2VyQ2FzZSgpO2lmKHU9PT1hfHx1PT09byl7cz0hMDticmVha319c3x8ZS5wdXNoKGxbbl0pfUUucHVzaChlKX19dmFyIEM9WyJ0b0ltYWdlIl07cy5zaG93RWRpdEluQ2hhcnRTdHVkaW8/Qy5wdXNoKCJlZGl0SW5DaGFydFN0dWRpbyIpOnMuc2hvd1NlbmRUb0Nsb3VkJiZDLnB1c2goInNlbmREYXRhVG9DbG91ZCIpO0woQyk7dmFyIFA9W10sST1bXSxPPVtdLHo9W107KG18fGJ8fHl8fHh8fF8pK3YrZyt3K1Qraz4xPyhJPVsidG9nZ2xlSG92ZXIiXSxPPVsicmVzZXRWaWV3cyJdKTp2PyhQPVsiem9vbUluR2VvIiwiem9vbU91dEdlbyJdLEk9WyJob3ZlckNsb3Nlc3RHZW8iXSxPPVsicmVzZXRHZW8iXSk6Zz8oST1bImhvdmVyQ2xvc2VzdDNkIl0sTz1bInJlc2V0Q2FtZXJhRGVmYXVsdDNkIiwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIl0pOnc/KFA9WyJ6b29tSW5NYXBib3giLCJ6b29tT3V0TWFwYm94Il0sST1bInRvZ2dsZUhvdmVyIl0sTz1bInJlc2V0Vmlld01hcGJveCJdKTpiP0k9WyJob3ZlckNsb3Nlc3RHbDJkIl06eT9JPVsiaG92ZXJDbG9zZXN0UGllIl06QT8oST1bImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdLE89WyJyZXNldFZpZXdTYW5rZXkiXSk6ST1bInRvZ2dsZUhvdmVyIl07bSYmKEk9WyJ0b2dnbGVTcGlrZWxpbmVzIiwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiwiaG92ZXJDb21wYXJlQ2FydGVzaWFuIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighYS50cmFjZUlzKHRbZV0sIm5vSG92ZXIiKSlyZXR1cm4hMTtyZXR1cm4hMH0ocil8fFMpJiYoST1bXSk7IW0mJiFifHxNfHwoUD1bInpvb21JbjJkIiwiem9vbU91dDJkIiwiYXV0b1NjYWxlMmQiXSwicmVzZXRWaWV3cyIhPT1PWzBdJiYoTz1bInJlc2V0U2NhbGUyZCJdKSk7Zz96PVsiem9vbTNkIiwicGFuM2QiLCJvcmJpdFJvdGF0aW9uIiwidGFibGVSb3RhdGlvbiJdOihtfHxiKSYmIU18fF8/ej1bInpvb20yZCIsInBhbjJkIl06d3x8dj96PVsicGFuMmQiXTpUJiYoej1bInpvb20yZCJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoYS50cmFjZUlzKG4sInNjYXR0ZXItbGlrZSIpPyhpLmhhc01hcmtlcnMobil8fGkuaGFzVGV4dChuKSkmJihlPSEwKTphLnRyYWNlSXMobiwiYm94LXZpb2xpbiIpJiYiYWxsIiE9PW4uYm94cG9pbnRzJiYiYWxsIiE9PW4ucG9pbnRzfHwoZT0hMCkpfXJldHVybiBlfSkocikmJnoucHVzaCgic2VsZWN0MmQiLCJsYXNzbzJkIik7dmFyIEQ9W10sUj1mdW5jdGlvbih0KXstMT09PUQuaW5kZXhPZih0KSYmLTEhPT1JLmluZGV4T2YodCkmJkQucHVzaCh0KX07aWYoQXJyYXkuaXNBcnJheShwKSl7Zm9yKHZhciBGPVtdLEI9MDtCPHAubGVuZ3RoO0IrKyl7dmFyIE49cFtCXTsic3RyaW5nIj09dHlwZW9mIE4/KE49Ti50b0xvd2VyQ2FzZSgpLC0xIT09Yy5pbmRleE9mKE4pPyhlLl9oYXMoIm1hcGJveCIpfHxlLl9oYXMoImNhcnRlc2lhbiIpKSYmei5wdXNoKE4pOiJ0b2dnbGVzcGlrZWxpbmVzIj09PU4/UigidG9nZ2xlU3Bpa2VsaW5lcyIpOiJ0b2dnbGVob3ZlciI9PT1OP1IoInRvZ2dsZUhvdmVyIik6ImhvdmVyY29tcGFyZSI9PT1OP1IoImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIpOiJob3ZlcmNsb3Nlc3QiPT09Tj8oUigiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiksUigiaG92ZXJDbG9zZXN0R2VvIiksUigiaG92ZXJDbG9zZXN0M2QiKSxSKCJob3ZlckNsb3Nlc3RHbDJkIiksUigiaG92ZXJDbG9zZXN0UGllIikpOiJ2MWhvdmVybW9kZSI9PT1OJiYoUigidG9nZ2xlSG92ZXIiKSxSKCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iKSxSKCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iKSxSKCJob3ZlckNsb3Nlc3RHZW8iKSxSKCJob3ZlckNsb3Nlc3QzZCIpLFIoImhvdmVyQ2xvc2VzdEdsMmQiKSxSKCJob3ZlckNsb3Nlc3RQaWUiKSkpOkYucHVzaChOKX1wPUZ9cmV0dXJuIEwoeiksTChQLmNvbmNhdChPKSksTChEKSxmdW5jdGlvbih0LGUpe2lmKGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5wdXNoKGVbcl0pO2Vsc2UgdC5wdXNoKGUpO3JldHVybiB0fShFLHApfSh0KSx1P3UudXBkYXRlKHQsZik6ZS5fbW9kZUJhcj1zKHQsZil9ZWxzZSB1JiYodS5kZXN0cm95KCksZGVsZXRlIGUuX21vZGVCYXIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjU1OCwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi4vZngvaGVscGVycyI6NDAyLCIuL2J1dHRvbnMiOjQyNiwiLi9jb25zdGFudHMiOjQyNywiLi9tb2RlYmFyIjo0MzF9XSw0MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vZm9udHMvcGxvdGljb24iKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGk9Im1vZGViYXItIituLl91aWQ7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLGkpLHRoaXMuX3VpZD1pLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiLCJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiB2ZXJ0aWNhbCIsZT1lLnJldmVyc2UoKSk7dmFyIG89bi5tb2RlYmFyLHM9ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/Ii5qcy1wbG90bHktcGxvdCAucGxvdGx5OmhvdmVyICI6IiI7YS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKGkpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLHMrIiMiK2krIiAubW9kZWJhci1ncm91cCIsImJhY2tncm91bmQtY29sb3I6ICIrby5iZ2NvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0biAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bjpob3ZlciAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bi5hY3RpdmUgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvcik7dmFyIGw9IXRoaXMuaGFzQnV0dG9ucyhlKSxjPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ28sdT10aGlzLmxvY2FsZSE9PXIubG9jYWxlO2lmKHRoaXMubG9jYWxlPXIubG9jYWxlLChsfHxjfHx1KSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLndhdGVybWFya3x8ci5kaXNwbGF5bG9nbykpe3ZhciBmPXRoaXMuZ2V0TG9nbygpO3Iud2F0ZXJtYXJrJiYoZi5jbGFzc05hbWU9Zi5jbGFzc05hbWUrIiB3YXRlcm1hcmsiKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShmLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZiksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWUuY3JlYXRlR3JvdXAoKTt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ25hbWUnIGluIGJ1dHRvbiBjb25maWciKTtpZigtMSE9PWUuYnV0dG9uc05hbWVzLmluZGV4T2YobikpdGhyb3cgbmV3IEVycm9yKCJidXR0b24gbmFtZSAnIituKyInIGlzIHRha2VuIik7ZS5idXR0b25zTmFtZXMucHVzaChuKTt2YXIgaT1lLmNyZWF0ZUJ1dHRvbih0KTtlLmJ1dHRvbkVsZW1lbnRzLnB1c2goaSksci5hcHBlbmRDaGlsZChpKX0pKSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KSl9LGMuY3JlYXRlR3JvdXA9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5jbGFzc05hbWU9Im1vZGViYXItZ3JvdXAiLHR9LGMuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoInJlbCIsInRvb2x0aXAiKSxyLmNsYXNzTmFtZT0ibW9kZWJhci1idG4iO3ZhciBpPXQudGl0bGU7dm9pZCAwPT09aT9pPXQubmFtZToiZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLChpfHwwPT09aSkmJnIuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixpKSx2b2lkIDAhPT10LmF0dHImJnIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLHQuYXR0cik7dmFyIGE9dC52YWw7aWYodm9pZCAwIT09YSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKHRoaXMuZ3JhcGhJbmZvKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixhKSksImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2xpY2spdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICdjbGljaycgZnVuY3Rpb24gaW4gYnV0dG9uIGNvbmZpZyIpO3IuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbihyKXt0LmNsaWNrKGUuZ3JhcGhJbmZvLHIpLGUudXBkYXRlQWN0aXZlQnV0dG9uKHIuY3VycmVudFRhcmdldCl9KSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgcz10Lmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sYy5jcmVhdGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlLHI9aSh0LmhlaWdodCk/TnVtYmVyKHQuaGVpZ2h0KTp0LmFzY2VudC10LmRlc2NlbnQsbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInN2ZyIpKS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFswLDAsdC53aWR0aCxyXS5qb2luKCIgIikpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsImljb24iKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2Euc2V0QXR0cmlidXRlKCJkIix0LnBhdGgpLHQudHJhbnNmb3JtP2Euc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQudHJhbnNmb3JtKTp2b2lkIDAhPT10LmFzY2VudCYmYS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIm1hdHJpeCgxIDAgMCAtMSAwICIrdC5hc2NlbnQrIikiKSxlLmFwcGVuZENoaWxkKGEpfXQuc3ZnJiYoZT1zLnBhcnNlRnJvbVN0cmluZyh0LnN2ZywiYXBwbGljYXRpb24veG1sIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZW0iKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIikscz0idHJ1ZSI9PT10LmdldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiKSxsPW4uc2VsZWN0KHQpO2lmKHMpbz09PXImJmwuY2xhc3NlZCgiYWN0aXZlIiwhbC5jbGFzc2VkKCJhY3RpdmUiKSk7ZWxzZXt2YXIgYz1udWxsPT09bz9vOmEubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTtsLmNsYXNzZWQoImFjdGl2ZSIsYz09PWkpfX0pKX0sYy5oYXNCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYnV0dG9ucztpZighZSlyZXR1cm4hMTtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7bisrKWlmKHRbcl1bbl0ubmFtZSE9PWVbcl1bbl0ubmFtZSlyZXR1cm4hMX1yZXR1cm4hMH0sYy5nZXRMb2dvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jcmVhdGVHcm91cCgpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBlLmhyZWY9Imh0dHBzOi8vcGxvdGx5LmNvbS8iLGUudGFyZ2V0PSJfYmxhbmsiLGUuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixhLl8odGhpcy5ncmFwaEluZm8sIlByb2R1Y2VkIHdpdGggUGxvdGx5IikpLGUuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biBwbG90bHlqc2ljb24gbW9kZWJhci1idG4tLWxvZ28iLGUuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKG8ubmV3cGxvdGx5bG9nbykpLHQuYXBwZW5kQ2hpbGQoZSksdH0sYy5yZW1vdmVBbGxCdXR0b25zPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZDspdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTt0aGlzLmhhc0xvZ289ITF9LGMuZGVzdHJveT1mdW5jdGlvbigpe2EucmVtb3ZlRWxlbWVudCh0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubW9kZWJhciIpKSxhLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUodGhpcy5fdWlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPW5ldyBsKHtncmFwaEluZm86dCxjb250YWluZXI6ci5fbW9kZWJhcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZuLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnQiLCEwKS50ZXh0KCJQUklWQVRFIiksaX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjQ4MiwiLi4vLi4vbGliIjo1MDMsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGE9KDAsdCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5KSgiYnV0dG9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHN0ZXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm1vbnRoIiwieWVhciIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJhbGwiXSxkZmx0OiJtb250aCIsZWRpdFR5cGU6InBsb3QifSxzdGVwbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmFja3dhcmQiLCJ0b2RhdGUiXSxkZmx0OiJiYWNrd2FyZCIsZWRpdFR5cGU6InBsb3QifSxjb3VudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxidXR0b25zOmEseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6InBsb3QifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHtlZGl0VHlwZToicGxvdCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToicGxvdCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4NSwiLi4vY29sb3IvYXR0cmlidXRlcyI6MzY1fV0sNDMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIGE9aS5jYWxlbmRhcjtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLmJ1dHRvbnMscixpKX1pZihvKCJ2aXNpYmxlIikpe3ZhciBsPW8oInN0ZXAiKTsiYWxsIiE9PWwmJighYXx8ImdyZWdvcmlhbiI9PT1hfHwibW9udGgiIT09bCYmInllYXIiIT09bD9vKCJzdGVwbW9kZSIpOmUuc3RlcG1vZGU9ImJhY2t3YXJkIixvKCJjb3VudCIpKSxvKCJsYWJlbCIpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSxmKXt2YXIgaD10LnJhbmdlc2VsZWN0b3J8fHt9LHA9YS5uZXdDb250YWluZXIoZSwicmFuZ2VzZWxlY3RvciIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gbi5jb2VyY2UoaCxwLHMsdCxlKX1pZihkKCJ2aXNpYmxlIixvKGgscCx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmMsY2FsZW5kYXI6Zn0pLmxlbmd0aD4wKSl7dmFyIG09ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl0uYW5jaG9yPT09dC5faWR9KSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrbC55UGFkXX0oZSxyLHUpO2QoIngiLG1bMF0pLGQoInkiLG1bMV0pLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLGQoInhhbmNob3IiKSxkKCJ5YW5jaG9yIiksbi5jb2VyY2VGb250KGQsImZvbnQiLHIuZm9udCk7dmFyIGc9ZCgiYmdjb2xvciIpO2QoImFjdGl2ZWNvbG9yIixpLmNvbnRyYXN0KGcsbC5saWdodEFtb3VudCxsLmRhcmtBbW91bnQpKSxkKCJib3JkZXJjb2xvciIpLGQoImJvcmRlcndpZHRoIil9fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0OSwiLi4vY29sb3IiOjM2NiwiLi9hdHRyaWJ1dGVzIjo0MzIsIi4vY29uc3RhbnRzIjo0MzN9XSw0MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9jb2xvciIpLHM9dCgiLi4vZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz1sLnN0clRyYW5zbGF0ZSx1PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksaD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikscD1oLkxJTkVfU1BBQ0lORyxkPWguRlJPTV9UTCxtPWguRlJPTV9CUixnPXQoIi4vY29uc3RhbnRzIiksdj10KCIuL2dldF91cGRhdGVfb2JqZWN0Iik7ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49bC5lbnN1cmVTaW5nbGUodCwicmVjdCIsInNlbGVjdG9yLXJlY3QiLChmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKTtuLmF0dHIoe3J4Omcucngscnk6Zy5yeX0pLG4uY2FsbChvLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKG8uZmlsbCxmdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0FjdGl2ZXx8ZS5faXNIb3ZlcmVkP3QuYWN0aXZlY29sb3I6dC5iZ2NvbG9yfShlLHIpKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIGIodCxlLHIsbil7bC5lbnN1cmVTaW5nbGUodCwidGV4dCIsInNlbGVjdG9yLXRleHQiLChmdW5jdGlvbih0KXt0LmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIil9KSkuY2FsbChzLmZvbnQsZS5mb250KS50ZXh0KGZ1bmN0aW9uKHQsZSl7aWYodC5sYWJlbClyZXR1cm4gZT9sLnRlbXBsYXRlU3RyaW5nKHQubGFiZWwsZSk6dC5sYWJlbDtyZXR1cm4iYWxsIj09PXQuc3RlcD8iYWxsIjp0LmNvdW50K3Quc3RlcC5jaGFyQXQoMCl9KHIsbi5fZnVsbExheW91dC5fbWV0YSkpLmNhbGwoKGZ1bmN0aW9uKHQpe3UuY29udmVydFRvVHNwYW5zKHQsbil9KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5yYW5nZXNlbGVjdG9yIikuZGF0YShmdW5jdGlvbih0KXtmb3IodmFyIGU9Zi5saXN0KHQsIngiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9KHQpLHkpO2UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJyYW5nZXNlbGVjdG9yIiwhMCksZS5leGl0KCkucmVtb3ZlKCksZS5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIiwicG9pbnRlci1ldmVudHMiOiJhbGwifSksZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWUsZj1vLnJhbmdlc2VsZWN0b3IsaD1yLnNlbGVjdEFsbCgiZy5idXR0b24iKS5kYXRhKGwuZmlsdGVyVmlzaWJsZShmLmJ1dHRvbnMpKTtoLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnV0dG9uIiwhMCksaC5leGl0KCkucmVtb3ZlKCksaC5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXYobyxlKTtlLl9pc0FjdGl2ZT1mdW5jdGlvbih0LGUscil7aWYoImFsbCI9PT1lLnN0ZXApcmV0dXJuITA9PT10LmF1dG9yYW5nZTt2YXIgbj1PYmplY3Qua2V5cyhyKTtyZXR1cm4gdC5yYW5nZVswXT09PXJbblswXV0mJnQucmFuZ2VbMV09PT1yW25bMV1dfShvLGUsYSksci5jYWxsKHgsZixlKSxyLmNhbGwoYixmLGUsdCksci5vbigiY2xpY2siLChmdW5jdGlvbigpe3QuX2RyYWdnZWR8fGkuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGEpfSkpLHIub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSEwLHIuY2FsbCh4LGYsZSl9KSksci5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMSxyLmNhbGwoeCxmLGUpfSkpfSkpLGZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIGY9MCxoPTAsdj1yLmJvcmRlcndpZHRoO2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5zZWxlY3Rvci10ZXh0IiksZT1yLmZvbnQuc2l6ZSpwLGk9TWF0aC5tYXgoZSp1LmxpbmVDb3VudCh0KSwxNikrMztoPU1hdGgubWF4KGgsaSl9KSksZS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoIi5zZWxlY3Rvci1yZWN0IiksaT10LnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxhPWkubm9kZSgpJiZzLmJCb3goaS5ub2RlKCkpLndpZHRoLG89ci5mb250LnNpemUqcCxsPXUubGluZUNvdW50KGkpLGQ9TWF0aC5tYXgoYSsxMCxnLm1pbkJ1dHRvbldpZHRoKTt0LmF0dHIoInRyYW5zZm9ybSIsYyh2K2YsdikpLGUuYXR0cih7eDowLHk6MCx3aWR0aDpkLGhlaWdodDpofSksdS5wb3NpdGlvblRleHQoaSxkLzIsaC8yLShsLTEpKm8vMiszKSxmKz1kKzV9KSk7dmFyIHk9dC5fZnVsbExheW91dC5fc2l6ZSx4PXkubCt5Lncqci54LGI9eS50K3kuaCooMS1yLnkpLF89ImxlZnQiO2wuaXNSaWdodEFuY2hvcihyKSYmKHgtPWYsXz0icmlnaHQiKTtsLmlzQ2VudGVyQW5jaG9yKHIpJiYoeC09Zi8yLF89ImNlbnRlciIpO3ZhciB3PSJ0b3AiO2wuaXNCb3R0b21BbmNob3IocikmJihiLT1oLHc9ImJvdHRvbSIpO2wuaXNNaWRkbGVBbmNob3IocikmJihiLT1oLzIsdz0ibWlkZGxlIik7Zj1NYXRoLmNlaWwoZiksaD1NYXRoLmNlaWwoaCkseD1NYXRoLnJvdW5kKHgpLGI9TWF0aC5yb3VuZChiKSxhLmF1dG9NYXJnaW4odCxpKyItcmFuZ2Utc2VsZWN0b3IiLHt4OnIueCx5OnIueSxsOmYqZFtfXSxyOmYqbVtfXSxiOmgqbVt3XSx0OmgqZFt3XX0pLG8uYXR0cigidHJhbnNmb3JtIixjKHgsYikpfSh0LGgsZixvLl9uYW1lLHIpfSkpfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NzEsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTgsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTksIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL2NvbG9yIjozNjYsIi4uL2RyYXdpbmciOjM4OCwiLi9jb25zdGFudHMiOjQzMywiLi9nZXRfdXBkYXRlX29iamVjdCI6NDM2LCJAcGxvdGx5L2QzIjo1OH1dLDQzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMy10aW1lIiksaT10KCIuLi8uLi9saWIiKS50aXRsZUNhc2U7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fbmFtZSxhPXt9O2lmKCJhbGwiPT09ZS5zdGVwKWFbcisiLmF1dG9yYW5nZSJdPSEwO2Vsc2V7dmFyIG89ZnVuY3Rpb24odCxlKXt2YXIgcixhPXQucmFuZ2Usbz1uZXcgRGF0ZSh0LnIybChhWzFdKSkscz1lLnN0ZXAsbD1uWyJ1dGMiK2kocyldLGM9ZS5jb3VudDtzd2l0Y2goZS5zdGVwbW9kZSl7Y2FzZSJiYWNrd2FyZCI6cj10LmwycigrbC5vZmZzZXQobywtYykpO2JyZWFrO2Nhc2UidG9kYXRlIjp2YXIgdT1sLm9mZnNldChvLC1jKTtyPXQubDJyKCtsLmNlaWwodSkpfXZhciBmPWFbMV07cmV0dXJuW3IsZl19KHQsZSk7YVtyKyIucmFuZ2VbMF0iXT1vWzBdLGFbcisiLnJhbmdlWzFdIl09b1sxXX1yZXR1cm4gYX19LHsiLi4vLi4vbGliIjo1MDMsImQzLXRpbWUiOjEyMn1dLDQzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzZWxlY3RvciIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2VsZWN0b3I6dCgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKX19LHsiLi9hdHRyaWJ1dGVzIjo0MzIsIi4vZGVmYXVsdHMiOjQzNCwiLi9kcmF3Ijo0MzV9XSw0Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0sYXV0b3JhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJyYW5nZVswXSI6dm9pZCAwLCJyYW5nZVsxXSI6dm9pZCAwfX0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b3JhbmdlOiExfX0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjE1LG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn19LHsiLi4vY29sb3IvYXR0cmlidXRlcyI6MzY1fV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLmxpc3QsaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZ2V0QXV0b1JhbmdlLGE9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odCwieCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXSxzPW9bYS5uYW1lXTtzJiZzLnZpc2libGUmJnMuYXV0b3JhbmdlJiYocy5faW5wdXQuYXV0b3JhbmdlPSEwLHMuX2lucHV0LnJhbmdlPXMucmFuZ2U9aSh0LG8pKX19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjU1MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTgsIi4vY29uc3RhbnRzIjo0NDB9XSw0NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtuYW1lOiJyYW5nZXNsaWRlciIsY29udGFpbmVyQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1jb250YWluZXIiLGJnQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1iZyIscmFuZ2VQbG90Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1yYW5nZXBsb3QiLG1hc2tNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWluIixtYXNrTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1heCIsc2xpZGVCb3hDbGFzc05hbWU6InJhbmdlc2xpZGVyLXNsaWRlYm94IixncmFiYmVyTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYmVyLW1pbiIsZ3JhYkFyZWFNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJhcmVhLW1pbiIsaGFuZGxlTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1oYW5kbGUtbWluIixncmFiYmVyTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYmVyLW1heCIsZ3JhYkFyZWFNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJhcmVhLW1heCIsaGFuZGxlTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1oYW5kbGUtbWF4IixtYXNrTWluT3BwQXhpc0NsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4tb3BwLWF4aXMiLG1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1heC1vcHAtYXhpcyIsbWFza0NvbG9yOiJyZ2JhKDAsMCwwLDAuNCkiLG1hc2tPcHBBeGlzQ29sb3I6InJnYmEoMCwwLDAsMC4yKSIsc2xpZGVCb3hGaWxsOiJ0cmFuc3BhcmVudCIsc2xpZGVCb3hDdXJzb3I6ImV3LXJlc2l6ZSIsZ3JhYkFyZWFGaWxsOiJ0cmFuc3BhcmVudCIsZ3JhYkFyZWFDdXJzb3I6ImNvbC1yZXNpemUiLGdyYWJBcmVhV2lkdGg6MTAsaGFuZGxlV2lkdGg6NCxoYW5kbGVSYWRpdXM6MSxoYW5kbGVTdHJva2VXaWR0aDoxLGV4dHJhUGFkOjE1fX0se31dLDQ0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuL29wcGF4aXNfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dFtyXSxjPWVbcl07aWYobC5yYW5nZXNsaWRlcnx8ZS5fcmVxdWVzdFJhbmdlc2xpZGVyW2MuX2lkXSl7bi5pc1BsYWluT2JqZWN0KGwucmFuZ2VzbGlkZXIpfHwobC5yYW5nZXNsaWRlcj17fSk7dmFyIHUsZixoPWwucmFuZ2VzbGlkZXIscD1pLm5ld0NvbnRhaW5lcihjLCJyYW5nZXNsaWRlciIpO2lmKF8oInZpc2libGUiKSl7XygiYmdjb2xvciIsZS5wbG90X2JnY29sb3IpLF8oImJvcmRlcmNvbG9yIiksXygiYm9yZGVyd2lkdGgiKSxfKCJ0aGlja25lc3MiKSxfKCJhdXRvcmFuZ2UiLCFjLmlzVmFsaWRSYW5nZShoLnJhbmdlKSksXygicmFuZ2UiKTt2YXIgZD1lLl9zdWJwbG90cztpZihkKWZvcih2YXIgbT1kLmNhcnRlc2lhbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cigwLHQuaW5kZXhPZigieSIpKT09PWEubmFtZTJpZChyKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cih0LmluZGV4T2YoInkiKSx0Lmxlbmd0aCl9KSksZz1uLnNpbXBsZU1hcChtLGEuaWQybmFtZSksdj0wO3Y8Zy5sZW5ndGg7disrKXt2YXIgeT1nW3ZdO3U9aFt5XXx8e30sZj1pLm5ld0NvbnRhaW5lcihwLHksInlheGlzIik7dmFyIHgsYj1lW3ldO3UucmFuZ2UmJmIuaXNWYWxpZFJhbmdlKHUucmFuZ2UpJiYoeD0iZml4ZWQiKSwibWF0Y2giIT09dygicmFuZ2Vtb2RlIix4KSYmdygicmFuZ2UiLGIucmFuZ2Uuc2xpY2UoKSl9cC5faW5wdXQ9aH19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZShoLHAsbyx0LGUpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxmLHMsdCxlKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTU4LCIuL2F0dHJpYnV0ZXMiOjQzOCwiLi9vcHBheGlzX2F0dHJpYnV0ZXMiOjQ0NX1dLDQ0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD10KCIuLi9kcmF3aW5nIiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vdGl0bGVzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHA9dCgiLi4vZHJhZ2VsZW1lbnQiKSxkPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxtPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixtLmJnQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSksYT1uLmJvcmRlcndpZHRoJTI9PTA/bi5ib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLTEsYz0tbi5fb2Zmc2V0U2hpZnQsdT1sLmNyaXNwUm91bmQoZSxuLmJvcmRlcndpZHRoKTtpLmF0dHIoe3dpZHRoOm4uX3dpZHRoK2EsaGVpZ2h0Om4uX2hlaWdodCthLHRyYW5zZm9ybTpzKGMsYyksZmlsbDpuLmJnY29sb3Isc3Ryb2tlOm4uYm9yZGVyY29sb3IsInN0cm9rZS13aWR0aCI6dX0pfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9ZS5fZnVsbExheW91dDtvLmVuc3VyZVNpbmdsZUJ5SWQoaS5fdG9wZGVmcywiY2xpcFBhdGgiLG4uX2NsaXBJZCwoZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKS5hdHRyKHt4OjAseTowfSl9KSkuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodH0pfWZ1bmN0aW9uIHkodCxlLHIsaSl7dmFyIHMsYz1lLmNhbGNkYXRhLHU9dC5zZWxlY3RBbGwoImcuIittLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShyLl9zdWJwbG90c1dpdGgsby5pZGVudGl0eSk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIG0ucmFuZ2VQbG90Q2xhc3NOYW1lKyIgIit0fSkpLmNhbGwobC5zZXRDbGlwVXJsLGkuX2NsaXBJZCxlKSx1Lm9yZGVyKCksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0LG8pe3ZhciBsPW4uc2VsZWN0KHRoaXMpLHU9MD09PW8scD1oLmdldEZyb21JZChlLHQsInkiKSxkPXAuX25hbWUsbT1pW2RdLGc9e2RhdGE6W10sbGF5b3V0Ont4YXhpczp7dHlwZTpyLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOmkucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpyLmNhbGVuZGFyfSx3aWR0aDppLl93aWR0aCxoZWlnaHQ6aS5faGVpZ2h0LG1hcmdpbjp7dDowLGI6MCxsOjAscjowfX0sX2NvbnRleHQ6ZS5fY29udGV4dH07ci5yYW5nZWJyZWFrcyYmKGcubGF5b3V0LnhheGlzLnJhbmdlYnJlYWtzPXIucmFuZ2VicmVha3MpLGcubGF5b3V0W2RdPXt0eXBlOnAudHlwZSxkb21haW46WzAsMV0scmFuZ2U6Im1hdGNoIiE9PW0ucmFuZ2Vtb2RlP20ucmFuZ2Uuc2xpY2UoKTpwLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6cC5jYWxlbmRhcn0scC5yYW5nZWJyZWFrcyYmKGcubGF5b3V0W2RdLnJhbmdlYnJlYWtzPXAucmFuZ2VicmVha3MpLGEuc3VwcGx5RGVmYXVsdHMoZyk7dmFyIHY9Zy5fZnVsbExheW91dC54YXhpcyx5PWcuX2Z1bGxMYXlvdXRbZF07di5jbGVhckNhbGMoKSx2LnNldFNjYWxlKCkseS5jbGVhckNhbGMoKSx5LnNldFNjYWxlKCk7dmFyIHg9e2lkOnQscGxvdGdyb3VwOmwseGF4aXM6dix5YXhpczp5LGlzUmFuZ2VQbG90OiEwfTt1P3M9eDooeC5tYWlucGxvdD0ieHkiLHgubWFpbnBsb3RpbmZvPXMpLGYucmFuZ2VQbG90KGUseCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn0oYyx0KSl9KSl9ZnVuY3Rpb24geCh0LGUscixuLGkpeyhvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixtLm1hc2tNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChjLmZpbGwsbS5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0ubWFza01heENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoYy5maWxsLG0ubWFza0NvbG9yKSwibWF0Y2giIT09aS5yYW5nZW1vZGUpJiYoby5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigid2lkdGgiLG4uX3dpZHRoKS5jYWxsKGMuZmlsbCxtLm1hc2tPcHBBeGlzQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0ubWFza01heE9wcEF4aXNDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoIndpZHRoIixuLl93aWR0aCkuc3R5bGUoImJvcmRlci10b3AiLG0ubWFza09wcEJvcmRlcikuY2FsbChjLmZpbGwsbS5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24gYih0LGUscixuKXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0uc2xpZGVCb3hDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLGN1cnNvcjptLnNsaWRlQm94Q3Vyc29yLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoe2hlaWdodDpuLl9oZWlnaHQsZmlsbDptLnNsaWRlQm94RmlsbH0pfWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGk9by5lbnN1cmVTaW5nbGUodCwiZyIsbS5ncmFiYmVyTWluQ2xhc3NOYW1lKSxhPW8uZW5zdXJlU2luZ2xlKHQsImciLG0uZ3JhYmJlck1heENsYXNzTmFtZSkscz17eDowLHdpZHRoOm0uaGFuZGxlV2lkdGgscng6bS5oYW5kbGVSYWRpdXMsZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6bS5oYW5kbGVTdHJva2VXaWR0aCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9LGw9e3k6TWF0aC5yb3VuZChuLl9oZWlnaHQvNCksaGVpZ2h0Ok1hdGgucm91bmQobi5faGVpZ2h0LzIpfTtvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixtLmhhbmRsZU1pbkNsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkpLmF0dHIobCksby5lbnN1cmVTaW5nbGUoYSwicmVjdCIsbS5oYW5kbGVNYXhDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pKS5hdHRyKGwpO3ZhciB1PXt3aWR0aDptLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOm0uZ3JhYkFyZWFGaWxsLGN1cnNvcjplLl9jb250ZXh0LnN0YXRpY1Bsb3Q/dm9pZCAwOm0uZ3JhYkFyZWFDdXJzb3J9O28uZW5zdXJlU2luZ2xlKGksInJlY3QiLG0uZ3JhYkFyZWFNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCksby5lbnN1cmVTaW5nbGUoYSwicmVjdCIsbS5ncmFiQXJlYU1heENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9yYW5nZVNsaWRlckRhdGEsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbD1yW2FdW20ubmFtZV07bC5fY2xpcElkPWwuX2lkKyItIitlLl91aWR9dmFyIGM9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK20uY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9uYW1lfSkpO2MuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPXRbbS5uYW1lXTtlLl90b3BkZWZzLnNlbGVjdCgiIyIrci5fY2xpcElkKS5yZW1vdmUoKX0pKS5yZW1vdmUoKSwwIT09ci5sZW5ndGgmJihjLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChtLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxjLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGw9clttLm5hbWVdLGM9ZVtoLmlkMm5hbWUoci5hbmNob3IpXSxmPWxbaC5pZDJuYW1lKHIuYW5jaG9yKV07aWYobC5yYW5nZSl7dmFyIHcsVD1vLnNpbXBsZU1hcChsLnJhbmdlLHIucjJsKSxrPW8uc2ltcGxlTWFwKHIucmFuZ2Usci5yMmwpO3c9a1swXTxrWzFdP1tNYXRoLm1pbihUWzBdLGtbMF0pLE1hdGgubWF4KFRbMV0sa1sxXSldOltNYXRoLm1heChUWzBdLGtbMF0pLE1hdGgubWluKFRbMV0sa1sxXSldLGwucmFuZ2U9bC5faW5wdXQucmFuZ2U9by5zaW1wbGVNYXAodyxyLmwycil9ci5jbGVhblJhbmdlKCJyYW5nZXNsaWRlci5yYW5nZSIpO3ZhciBBPWUuX3NpemUsTT1yLmRvbWFpbjtsLl93aWR0aD1BLncqKE1bMV0tTVswXSk7dmFyIFM9TWF0aC5yb3VuZChBLmwrQS53Kk1bMF0pLEU9TWF0aC5yb3VuZChBLnQrQS5oKigxLXIuX2NvdW50ZXJEb21haW5NaW4pKygiYm90dG9tIj09PXIuc2lkZT9yLl9kZXB0aDowKStsLl9vZmZzZXRTaGlmdCttLmV4dHJhUGFkKTthLmF0dHIoInRyYW5zZm9ybSIscyhTLEUpKSxsLl9ybD1vLnNpbXBsZU1hcChsLnJhbmdlLHIucjJsKTt2YXIgTD1sLl9ybFswXSxDPWwuX3JsWzFdLFA9Qy1MO2lmKGwucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L2wuX3dpZHRoKlArTH0sbC5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQtTCkvUCpsLl93aWR0aH0sci5yYW5nZWJyZWFrcyl7dmFyIEk9ci5sb2NhdGVCcmVha3MoTCxDKTtpZihJLmxlbmd0aCl7dmFyIE8seixEPTA7Zm9yKE89MDtPPEkubGVuZ3RoO08rKylEKz0oej1JW09dKS5tYXgtei5taW47dmFyIFI9bC5fd2lkdGgvKEMtTC1EKSxGPVstUipMXTtmb3IoTz0wO088SS5sZW5ndGg7TysrKXo9SVtPXSxGLnB1c2goRltGLmxlbmd0aC0xXS1SKih6Lm1heC16Lm1pbikpO2ZvcihsLmQycD1mdW5jdGlvbih0KXtmb3IodmFyIGU9RlswXSxyPTA7cjxJLmxlbmd0aDtyKyspe3ZhciBuPUlbcl07aWYodD49bi5tYXgpZT1GW3IrMV07ZWxzZSBpZih0PG4ubWluKWJyZWFrfXJldHVybiBlK1IqdH0sTz0wO088SS5sZW5ndGg7TysrKSh6PUlbT10pLnBtaW49bC5kMnAoei5taW4pLHoucG1heD1sLmQycCh6Lm1heCk7bC5wMmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUZbMF0scj0wO3I8SS5sZW5ndGg7cisrKXt2YXIgbj1JW3JdO2lmKHQ+PW4ucG1heCllPUZbcisxXTtlbHNlIGlmKHQ8bi5wbWluKWJyZWFrfXJldHVybih0LWUpL1J9fX1pZigibWF0Y2giIT09Zi5yYW5nZW1vZGUpe3ZhciBCPWMucjJsKGYucmFuZ2VbMF0pLE49Yy5yMmwoZi5yYW5nZVsxXSktQjtsLmQycE9wcEF4aXM9ZnVuY3Rpb24odCl7cmV0dXJuKHQtQikvTipsLl9oZWlnaHR9fWEuY2FsbChnLHQscixsKS5jYWxsKHYsdCxyLGwpLmNhbGwoeSx0LHIsbCkuY2FsbCh4LHQscixsLGYpLmNhbGwoYix0LHIsbCkuY2FsbChfLHQscixsKSxmdW5jdGlvbih0LGUscixhKXtpZihlLl9jb250ZXh0LnN0YXRpY1Bsb3QpcmV0dXJuO3ZhciBzPXQuc2VsZWN0KCJyZWN0LiIrbS5zbGlkZUJveENsYXNzTmFtZSkubm9kZSgpLGw9dC5zZWxlY3QoInJlY3QuIittLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5ub2RlKCksYz10LnNlbGVjdCgicmVjdC4iK20uZ3JhYkFyZWFNYXhDbGFzc05hbWUpLm5vZGUoKTtmdW5jdGlvbiB1KCl7dmFyIHU9bi5ldmVudCxmPXUudGFyZ2V0LGg9dS5jbGllbnRYfHx1LnRvdWNoZXNbMF0uY2xpZW50WCxtPWgtdC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxnPWEuZDJwKHIuX3JsWzBdKSx2PWEuZDJwKHIuX3JsWzFdKSx5PXAuY292ZXJTbGlwKCk7ZnVuY3Rpb24geCh0KXt2YXIgdSxwLHgsYj0rKHQuY2xpZW50WHx8dC50b3VjaGVzWzBdLmNsaWVudFgpLWg7c3dpdGNoKGYpe2Nhc2Ugczp4PSJldy1yZXNpemUiLHU9ZytiLHA9ditiO2JyZWFrO2Nhc2UgbDp4PSJjb2wtcmVzaXplIix1PWcrYixwPXY7YnJlYWs7Y2FzZSBjOng9ImNvbC1yZXNpemUiLHU9ZyxwPXYrYjticmVhaztkZWZhdWx0Ong9ImV3LXJlc2l6ZSIsdT1tLHA9bStifWlmKHA8dSl7dmFyIF89cDtwPXUsdT1ffWEuX3BpeGVsTWluPXUsYS5fcGl4ZWxNYXg9cCxkKG4uc2VsZWN0KHkpLHgpLGZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubDJyKG8uY29uc3RyYWluKHQsbi5fcmxbMF0sbi5fcmxbMV0pKX12YXIgcz1hKG4ucDJkKG4uX3BpeGVsTWluKSksbD1hKG4ucDJkKG4uX3BpeGVsTWF4KSk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtpLmNhbGwoIl9ndWlSZWxheW91dCIsZSxyLl9uYW1lKyIucmFuZ2UiLFtzLGxdKX0pKX0oMCxlLHIsYSl9ZnVuY3Rpb24gYigpe3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix4KSx5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGIpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix4KSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixiKSxvLnJlbW92ZUVsZW1lbnQoeSl9dGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGIpLHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGIpfXQub24oIm1vdXNlZG93biIsdSksdC5vbigidG91Y2hzdGFydCIsdSl9KGEsdCxyLGwpLGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbD1tLmhhbmRsZVdpZHRoLzI7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwwLG4uX3dpZHRoKX1mdW5jdGlvbiB1KHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5faGVpZ2h0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LC1sLG4uX3dpZHRoK2wpfXZhciBoPWMobi5kMnAoci5fcmxbMF0pKSxwPWMobi5kMnAoci5fcmxbMV0pKTtpZih0LnNlbGVjdCgicmVjdC4iK20uc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoIndpZHRoIixwLWgpLHQuc2VsZWN0KCJyZWN0LiIrbS5tYXNrTWluQ2xhc3NOYW1lKS5hdHRyKCJ3aWR0aCIsaCksdC5zZWxlY3QoInJlY3QuIittLm1hc2tNYXhDbGFzc05hbWUpLmF0dHIoIngiLHApLmF0dHIoIndpZHRoIixuLl93aWR0aC1wKSwibWF0Y2giIT09YS5yYW5nZW1vZGUpe3ZhciBkPW4uX2hlaWdodC11KG4uZDJwT3BwQXhpcyhpLl9ybFsxXSkpLGc9bi5faGVpZ2h0LXUobi5kMnBPcHBBeGlzKGkuX3JsWzBdKSk7dC5zZWxlY3QoInJlY3QuIittLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJoZWlnaHQiLGQpLmF0dHIoIndpZHRoIixwLWgpLHQuc2VsZWN0KCJyZWN0LiIrbS5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigieSIsZykuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQtZykuYXR0cigid2lkdGgiLHAtaCksdC5zZWxlY3QoInJlY3QuIittLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKCJ5IixkKS5hdHRyKCJoZWlnaHQiLGctZCl9dmFyIHY9TWF0aC5yb3VuZChmKGgtbCkpLS41LHk9TWF0aC5yb3VuZChmKHAtbCkpKy41O3Quc2VsZWN0KCJnLiIrbS5ncmFiYmVyTWluQ2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLHModiwuNSkpLHQuc2VsZWN0KCJnLiIrbS5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLHMoeSwuNSkpfShhLDAscixsLGMsZiksImJvdHRvbSI9PT1yLnNpZGUmJnUuZHJhdyh0LHIuX2lkKyJ0aXRsZSIse3Byb3BDb250YWluZXI6cixwcm9wTmFtZTpyLl9uYW1lKyIudGl0bGUiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS54LGF0dHJpYnV0ZXM6e3g6ci5fb2Zmc2V0K3IuX2xlbmd0aC8yLHk6RStsLl9oZWlnaHQrbC5fb2Zmc2V0U2hpZnQrMTArMS41KnIudGl0bGUuZm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KSkpfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3NldGN1cnNvciI6NTI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTgsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTksIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL2NvbG9yIjozNjYsIi4uL2RyYWdlbGVtZW50IjozODUsIi4uL2RyYXdpbmciOjM4OCwiLi4vdGl0bGVzIjo0NjQsIi4vY29uc3RhbnRzIjo0NDAsIkBwbG90bHkvZDMiOjU4fV0sNDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGk9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxzPWEubmFtZTtmdW5jdGlvbiBsKHQpe3ZhciBlPXQmJnRbc107cmV0dXJuIGUmJmUudmlzaWJsZX1yLmlzVmlzaWJsZT1sLHIubWFrZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9bi5saXN0KHtfZnVsbExheW91dDp0fSwieCIsITApLHI9dC5tYXJnaW4saT1bXTtpZighdC5faGFzKCJnbDJkIikpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aWYobChvKSl7aS5wdXNoKG8pO3ZhciBjPW9bc107Yy5faWQ9cytvLl9pZCxjLl9oZWlnaHQ9KHQuaGVpZ2h0LXIuYi1yLnQpKmMudGhpY2tuZXNzLGMuX29mZnNldFNoaWZ0PU1hdGguZmxvb3IoYy5ib3JkZXJ3aWR0aC8yKX19dC5fcmFuZ2VTbGlkZXJEYXRhPWl9LHIuYXV0b01hcmdpbk9wdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZVtzXSxsPWUuX2lkLmNoYXJBdCgwKSxjPTAsdT0wOyJib3R0b20iPT09ZS5zaWRlJiYoYz1lLl9kZXB0aCxlLnRpdGxlLnRleHQhPT1yLl9kZmx0VGl0bGVbbF0mJih1PTEuNSplLnRpdGxlLmZvbnQuc2l6ZSsxMCtuLl9vZmZzZXRTaGlmdCx1Kz0oZS50aXRsZS50ZXh0Lm1hdGNoKGkuQlJfVEFHX0FMTCl8fFtdKS5sZW5ndGgqZS50aXRsZS5mb250LnNpemUqbykpO3JldHVybnt4OjAseTplLl9jb3VudGVyRG9tYWluTWluLGw6MCxyOjAsdDowLGI6bi5faGVpZ2h0K2MrTWF0aC5tYXgoci5tYXJnaW4uYix1KSxwYWQ6YS5leHRyYVBhZCsyKm4uX29mZnNldFNoaWZ0fX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTgsIi4vY29uc3RhbnRzIjo0NDB9XSw0NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIiksbz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzbGlkZXIiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNsaWRlcjpuLmV4dGVuZEZsYXQoe30saSx7eWF4aXM6YX0pfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6dCgiLi9kcmF3IiksaXNWaXNpYmxlOm8uaXNWaXNpYmxlLG1ha2VEYXRhOm8ubWFrZURhdGEsYXV0b01hcmdpbk9wdHM6by5hdXRvTWFyZ2luT3B0c319LHsiLi4vLi4vbGliIjo1MDMsIi4vYXR0cmlidXRlcyI6NDM4LCIuL2NhbGNfYXV0b3JhbmdlIjo0MzksIi4vZGVmYXVsdHMiOjQ0MSwiLi9kcmF3Ijo0NDIsIi4vaGVscGVycyI6NDQzLCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NDQ1fV0sNDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzU3VicGxvdE9iajohMCxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJmaXhlZCIsIm1hdGNoIl0sZGZsdDoibWF0Y2giLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifX0se31dLDQ0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTt0KCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO2UuZXhwb3J0cz1zKCJzaGFwZSIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY2xlIiwicmVjdCIsInBhdGgiLCJsaW5lIl0sZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHhzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seDE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjpvKHt9LG4ueXJlZix7fSkseXNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJwaXhlbCJdLGRmbHQ6InNjYWxlZCIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5MTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxwYXRoOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsaW5lOntjb2xvcjpvKHt9LGkuY29sb3Ise2VkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6byh7fSxpLndpZHRoLHtlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSksZGFzaDpvKHt9LGEse2VkaXRUeXBlOiJhcnJheWRyYXcifSksZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGZpbGxydWxlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJldmVub2RkIiwibm9uemVybyJdLGRmbHQ6ImV2ZW5vZGQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIjo0NzIsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjYsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjM0OSwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjozODd9XSw0NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueHNpemVtb2RlLHQueDAsdC54MSx0LnBhdGgsITEpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueXNpemVtb2RlLHQueTAsdC55MSx0LnBhdGgsITApfWZ1bmN0aW9uIGModCxlLHIsaSxzLGwpe3ZhciBjPXQvMix1PWw7aWYoInBpeGVsIj09PWUpe3ZhciBmPXM/by5leHRyYWN0UGF0aENvb3JkcyhzLGw/YS5wYXJhbUlzWTphLnBhcmFtSXNYKTpbcixpXSxoPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGYpLHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsZiksZD1wPDA/TWF0aC5hYnMocCkrYzpjLG09aD4wP2grYzpjO3JldHVybntwcGFkOmMscHBhZHBsdXM6dT9kOm0scHBhZG1pbnVzOnU/bTpkfX1yZXR1cm57cHBhZDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIHM9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP3QucjJjOnQuZDJjO2lmKHZvaWQgMCE9PWUpcmV0dXJuW3MoZSkscyhyKV07aWYobil7dmFyIGwsYyx1LGYsaD0xLzAscD0tMS8wLGQ9bi5tYXRjaChhLnNlZ21lbnRSRSk7Zm9yKCJkYXRlIj09PXQudHlwZSYmKHM9by5kZWNvZGVEYXRlKHMpKSxsPTA7bDxkLmxlbmd0aDtsKyspdm9pZCAwIT09KGM9aVtkW2xdLmNoYXJBdCgwKV0uZHJhd24pJiYoISh1PWRbbF0uc3Vic3RyKDEpLm1hdGNoKGEucGFyYW1SRSkpfHx1Lmxlbmd0aDxjfHwoKGY9cyh1W2NdKSk8aCYmKGg9ZiksZj5wJiYocD1mKSkpO3JldHVybiBwPj1oP1toLHBdOnZvaWQgMH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBjLGYsaD1yW29dO2guX2V4dHJlbWVzPXt9O3ZhciBwPWkuZ2V0UmVmVHlwZShoLnhyZWYpLGQ9aS5nZXRSZWZUeXBlKGgueXJlZik7aWYoInBhcGVyIiE9PWgueHJlZiYmImRvbWFpbiIhPT1wKXt2YXIgbT0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDAsZz0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDE7KGY9dShjPWkuZ2V0RnJvbUlkKHQsaC54cmVmKSxtLGcsaC5wYXRoLGEucGFyYW1Jc1gpKSYmKGguX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGYscyhoKSkpfWlmKCJwYXBlciIhPT1oLnlyZWYmJiJkb21haW4iIT09ZCl7dmFyIHY9InBpeGVsIj09PWgueXNpemVtb2RlP2gueWFuY2hvcjpoLnkwLHk9InBpeGVsIj09PWgueXNpemVtb2RlP2gueWFuY2hvcjpoLnkxOyhmPXUoYz1pLmdldEZyb21JZCh0LGgueXJlZiksdix5LGgucGF0aCxhLnBhcmFtSXNZKSkmJihoLl9leHRyZW1lc1tjLl9pZF09aS5maW5kRXh0cmVtZXMoYyxmLGwoaCkpKX19fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi9jb25zdGFudHMiOjQ0OCwiLi9oZWxwZXJzIjo0NTd9XSw0NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzZWdtZW50UkU6L1tNTEhWUUNUU1pdW15NTEhWUUNUU1pdKi9nLHBhcmFtUkU6L1teXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDQ0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWlmKGEoInZpc2libGUiKSl7dmFyIGw9YSgicGF0aCIpLGM9YSgidHlwZSIsbD8icGF0aCI6InJlY3QiKTsicGF0aCIhPT1lLnR5cGUmJmRlbGV0ZSBlLnBhdGgsYSgiZWRpdGFibGUiKSxhKCJsYXllciIpLGEoIm9wYWNpdHkiKSxhKCJmaWxsY29sb3IiKSxhKCJmaWxscnVsZSIpLGEoImxpbmUud2lkdGgiKSYmKGEoImxpbmUuY29sb3IiKSxhKCJsaW5lLmRhc2giKSk7Zm9yKHZhciB1PWEoInhzaXplbW9kZSIpLGY9YSgieXNpemVtb2RlIiksaD1bIngiLCJ5Il0scD0wO3A8MjtwKyspe3ZhciBkLG0sZyx2PWhbcF0seT12KyJhbmNob3IiLHg9IngiPT09dj91OmYsYj17X2Z1bGxMYXlvdXQ6cn0sXz1pLmNvZXJjZVJlZih0LGUsYix2LHZvaWQgMCwicGFwZXIiKTtpZigicmFuZ2UiPT09aS5nZXRSZWZUeXBlKF8pPygoZD1pLmdldEZyb21JZChiLF8pKS5fc2hhcGVJbmRpY2VzLnB1c2goZS5faW5kZXgpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihkKSxtPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZCkpOm09Zz1uLmlkZW50aXR5LCJwYXRoIiE9PWMpe3ZhciB3PXYrIjAiLFQ9disiMSIsaz10W3ddLEE9dFtUXTt0W3ddPW0odFt3XSwhMCksdFtUXT1tKHRbVF0sITApLCJwaXhlbCI9PT14PyhhKHcsMCksYShULDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSxiLGEsXyx3LC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLGIsYSxfLFQsLjc1KSksZVt3XT1nKGVbd10pLGVbVF09ZyhlW1RdKSx0W3ddPWssdFtUXT1BfWlmKCJwaXhlbCI9PT14KXt2YXIgTT10W3ldO3RbeV09bSh0W3ldLCEwKSxpLmNvZXJjZVBvc2l0aW9uKGUsYixhLF8seSwuMjUpLGVbeV09ZyhlW3ldKSx0W3ldPU19fSJwYXRoIj09PWM/YSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4vYXR0cmlidXRlcyI6NDQ2LCIuL2hlbHBlcnMiOjQ1N31dLDQ1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9kcmF3X25ld3NoYXBlL2hlbHBlcnMiKS5yZWFkUGF0aHMscz10KCIuL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJPdXRsaW5lQ29udHJvbGxlcnMsYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vZHJhd2luZyIpLGY9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGg9dCgiLi4vZHJhZ2VsZW1lbnQiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4vY29uc3RhbnRzIiksbT10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBnKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7Zm9yKHZhciByIGluIGUuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9zaGFwZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fcGxvdHMpe3ZhciBuPWUuX3Bsb3RzW3JdLnNoYXBlbGF5ZXI7biYmbi5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKX1mb3IodmFyIGk9MDtpPGUuc2hhcGVzLmxlbmd0aDtpKyspZS5zaGFwZXNbaV0udmlzaWJsZSYmeCh0LGkpfWZ1bmN0aW9uIHYodCl7cmV0dXJuISF0Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nfWZ1bmN0aW9uIHkodCl7cmV0dXJuIXQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbn1mdW5jdGlvbiB4KHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD0iJytlKyciXScpLnJlbW92ZSgpO3ZhciByPW0ubWFrZU9wdGlvbnNBbmRQbG90aW5mbyh0LGUpLGw9ci5vcHRpb25zLHg9ci5wbG90aW5mbztpZihsLl9pbnB1dCYmITEhPT1sLnZpc2libGUpaWYoImJlbG93IiE9PWwubGF5ZXIpayh0Ll9mdWxsTGF5b3V0Ll9zaGFwZVVwcGVyTGF5ZXIpO2Vsc2UgaWYoInBhcGVyIj09PWwueHJlZnx8InBhcGVyIj09PWwueXJlZilrKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcik7ZWxzZXtpZih4Ll9oYWRQbG90aW5mbylrKCh4Lm1haW5wbG90aW5mb3x8eCkuc2hhcGVsYXllcik7ZWxzZSBrKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9ZnVuY3Rpb24gayhyKXt2YXIgaz1fKHQsbCksQT17ImRhdGEtaW5kZXgiOmUsImZpbGwtcnVsZSI6bC5maWxscnVsZSxkOmt9LE09bC5vcGFjaXR5LFM9bC5maWxsY29sb3IsRT1sLmxpbmUud2lkdGg/bC5saW5lLmNvbG9yOiJyZ2JhKDAsMCwwLDApIixMPWwubGluZS53aWR0aCxDPWwubGluZS5kYXNoO0x8fCEwIT09bC5lZGl0YWJsZXx8KEw9NSxDPSJzb2xpZCIpO3ZhciBQPSJaIiE9PWtbay5sZW5ndGgtMV0sST15KHQpJiZsLmVkaXRhYmxlJiZ0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4PT09ZTtJJiYoUz1QPyJyZ2JhKDAsMCwwLDApIjp0Ll9mdWxsTGF5b3V0LmFjdGl2ZXNoYXBlLmZpbGxjb2xvcixNPXQuX2Z1bGxMYXlvdXQuYWN0aXZlc2hhcGUub3BhY2l0eSk7dmFyIE8sej1yLmFwcGVuZCgicGF0aCIpLmF0dHIoQSkuc3R5bGUoIm9wYWNpdHkiLE0pLmNhbGwoYy5zdHJva2UsRSkuY2FsbChjLmZpbGwsUykuY2FsbCh1LmRhc2hMaW5lLEMsTCk7aWYoYih6LHQsbCksKEl8fHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbikmJihPPWYodC5sYXlvdXQsInNoYXBlcyIsbCkpLEkpe3ouc3R5bGUoe2N1cnNvcjoibW92ZSJ9KTt2YXIgRD17ZWxlbWVudDp6Lm5vZGUoKSxwbG90aW5mbzp4LGdkOnQsZWRpdEhlbHBlcnM6Tyxpc0FjdGl2ZVNoYXBlOiEwfSxSPW8oayx0KTtzKFIseixEKX1lbHNlIHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbj9mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsZixnLHkseCxULGssQSxNLFMsRSxMLEMsUCxJLE8sej0icGl4ZWwiPT09ci54c2l6ZW1vZGUsRD0icGl4ZWwiPT09ci55c2l6ZW1vZGUsUj0ibGluZSI9PT1yLnR5cGUsRj0icGF0aCI9PT1yLnR5cGUsQj1sLm1vZGlmeUl0ZW0sTj1hLmdldEZyb21JZCh0LHIueHJlZiksaj1hLmdldFJlZlR5cGUoci54cmVmKSxVPWEuZ2V0RnJvbUlkKHQsci55cmVmKSxWPWEuZ2V0UmVmVHlwZShyLnlyZWYpLEg9bS5nZXREYXRhVG9QaXhlbCh0LE4sITEsaikscT1tLmdldERhdGFUb1BpeGVsKHQsVSwhMCxWKSxHPW0uZ2V0UGl4ZWxUb0RhdGEodCxOLCExLGopLFk9bS5nZXRQaXhlbFRvRGF0YSh0LFUsITAsViksVz1SP2Z1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoci5saW5lLndpZHRoLDEwKSxuPXMuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1pbmRleCIsbyk7bi5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixlLmF0dHIoImQiKSkuc3R5bGUoe2N1cnNvcjoibW92ZSIsInN0cm9rZS13aWR0aCI6dCwic3Ryb2tlLW9wYWNpdHkiOiIwIn0pO3ZhciBpPXsiZmlsbC1vcGFjaXR5IjoiMCJ9LGE9TWF0aC5tYXgodC8yLDEwKTtyZXR1cm4gbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoeyJkYXRhLWxpbmUtcG9pbnQiOiJzdGFydC1wb2ludCIsY3g6ej9IKHIueGFuY2hvcikrci54MDpIKHIueDApLGN5OkQ/cShyLnlhbmNob3IpLXIueTA6cShyLnkwKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50IjoiZW5kLXBvaW50IixjeDp6P0goci54YW5jaG9yKStyLngxOkgoci54MSksY3k6RD9xKHIueWFuY2hvciktci55MTpxKHIueTEpLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCksbn0oKTplLFg9e2VsZW1lbnQ6Vy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24obil7aWYodih0KSlyZXR1cm47eiYmKHg9SChyLnhhbmNob3IpKTtEJiYoVD1xKHIueWFuY2hvcikpOyJwYXRoIj09PXIudHlwZT9JPXIucGF0aDooYz16P3IueDA6SChyLngwKSxmPUQ/ci55MDpxKHIueTApLGc9ej9yLngxOkgoci54MSkseT1EP3IueTE6cShyLnkxKSk7YzxnPyhNPWMsQz0ieDAiLFM9ZyxQPSJ4MSIpOihNPWcsQz0ieDEiLFM9YyxQPSJ4MCIpOyFEJiZmPHl8fEQmJmY+eT8oaz1mLEU9InkwIixBPXksTD0ieTEiKTooaz15LEU9InkxIixBPWYsTD0ieTAiKTtaKG4pLFEocyxyKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS54cmVmLGk9ZS55cmVmLG89YS5nZXRGcm9tSWQocixuKSxzPWEuZ2V0RnJvbUlkKHIsaSksbD0iIjsicGFwZXIiPT09bnx8by5hdXRvcmFuZ2V8fChsKz1uKTsicGFwZXIiPT09aXx8cy5hdXRvcmFuZ2V8fChsKz1pKTt1LnNldENsaXBVcmwodCxsPyJjbGlwIityLl9mdWxsTGF5b3V0Ll91aWQrbDpudWxsLHIpfShlLHIsdCksWC5tb3ZlRm49Im1vdmUiPT09Tz9KOkssWC5hbHRLZXk9bi5hbHRLZXl9LGRvbmVGbjpmdW5jdGlvbigpe2lmKHYodCkpcmV0dXJuO3AoZSksJChzKSxiKGUsdCxyKSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxsLmdldFVwZGF0ZU9iaigpKX0sY2xpY2tGbjpmdW5jdGlvbigpe2lmKHYodCkpcmV0dXJuOyQocyl9fTtmdW5jdGlvbiBaKHIpe2lmKHYodCkpTz1udWxsO2Vsc2UgaWYoUilPPSJwYXRoIj09PXIudGFyZ2V0LnRhZ05hbWU/Im1vdmUiOiJzdGFydC1wb2ludCI9PT1yLnRhcmdldC5hdHRyaWJ1dGVzWyJkYXRhLWxpbmUtcG9pbnQiXS52YWx1ZT8icmVzaXplLW92ZXItc3RhcnQtcG9pbnQiOiJyZXNpemUtb3Zlci1lbmQtcG9pbnQiO2Vsc2V7dmFyIG49WC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi5yaWdodC1uLmxlZnQsYT1uLmJvdHRvbS1uLnRvcCxvPXIuY2xpZW50WC1uLmxlZnQscz1yLmNsaWVudFktbi50b3AsbD0hRiYmaT4xMCYmYT4xMCYmIXIuc2hpZnRLZXk/aC5nZXRDdXJzb3Ioby9pLDEtcy9hKToibW92ZSI7cChlLGwpLE89bC5zcGxpdCgiLSIpWzBdfX1mdW5jdGlvbiBKKG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLGw9YTt6P0IoInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKEgodCkrbil9LE4mJiJkYXRlIj09PU4udHlwZSYmKG89bS5lbmNvZGVEYXRlKG8pKSksRD9CKCJ5YW5jaG9yIixyLnlhbmNob3I9WShUK2kpKToobD1mdW5jdGlvbih0KXtyZXR1cm4gWShxKHQpK2kpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihsPW0uZW5jb2RlRGF0ZShsKSkpLEIoInBhdGgiLHIucGF0aD13KEksbyxsKSl9ZWxzZSB6P0IoInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihCKCJ4MCIsci54MD1HKGMrbikpLEIoIngxIixyLngxPUcoZytuKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KEIoInkwIixyLnkwPVkoZitpKSksQigieTEiLHIueTE9WSh5K2kpKSk7ZS5hdHRyKCJkIixfKHQscikpLFEocyxyKX1mdW5jdGlvbiBLKG4saSl7aWYoRil7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxsPWE7ej9CKCJ4YW5jaG9yIixyLnhhbmNob3I9Ryh4K24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhIKHQpK24pfSxOJiYiZGF0ZSI9PT1OLnR5cGUmJihvPW0uZW5jb2RlRGF0ZShvKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KGw9ZnVuY3Rpb24odCl7cmV0dXJuIFkocSh0KStpKX0sVSYmImRhdGUiPT09VS50eXBlJiYobD1tLmVuY29kZURhdGUobCkpKSxCKCJwYXRoIixyLnBhdGg9dyhJLG8sbCkpfWVsc2UgaWYoUil7aWYoInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50Ij09PU8pe3ZhciB1PWMrbixoPUQ/Zi1pOmYraTtCKCJ4MCIsci54MD16P3U6Ryh1KSksQigieTAiLHIueTA9RD9oOlkoaCkpfWVsc2UgaWYoInJlc2l6ZS1vdmVyLWVuZC1wb2ludCI9PT1PKXt2YXIgcD1nK24sZD1EP3ktaTp5K2k7QigieDEiLHIueDE9ej9wOkcocCkpLEIoInkxIixyLnkxPUQ/ZDpZKGQpKX19ZWxzZXt2YXIgdj1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PU8uaW5kZXhPZih0KX0sYj12KCJuIiksaj12KCJzIiksVj12KCJ3IiksVz12KCJlIiksWD1iP2sraTprLFo9aj9BK2k6QSxKPVY/TStuOk0sSz1XP1MrbjpTO0QmJihiJiYoWD1rLWkpLGomJihaPUEtaSkpLCghRCYmWi1YPjEwfHxEJiZYLVo+MTApJiYoQihFLHJbRV09RD9YOlkoWCkpLEIoTCxyW0xdPUQ/WjpZKFopKSksSy1KPjEwJiYoQihDLHJbQ109ej9KOkcoSikpLEIoUCxyW1BdPXo/SzpHKEspKSl9ZS5hdHRyKCJkIixfKHQscikpLFEocyxyKX1mdW5jdGlvbiBRKHQsZSl7KHp8fEQpJiZmdW5jdGlvbigpe3ZhciByPSJwYXRoIiE9PWUudHlwZSxuPXQuc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7ZmlsbDoiI2ZmZiIsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLHN0cm9rZToiIzAwMCIsInN0cm9rZS13aWR0aCI6MX0pLmNsYXNzZWQoInZpc3VhbC1jdWUiLCEwKTt2YXIgYT1IKHo/ZS54YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS54MCxlLngxXTptLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxkLnBhcmFtSXNYKSkpLG89cShEP2UueWFuY2hvcjppLm1pZFJhbmdlKHI/W2UueTAsZS55MV06bS5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsZC5wYXJhbUlzWSkpKTtpZihhPW0ucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKGEsMSksbz1tLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhvLDEpLHomJkQpe3ZhciBzPSJNIisoYS0xLTEpKyIsIisoby0xLTEpKyJoLTh2Mmg4IHY4aDJ2LTggaDh2LTJoLTggdi04aC0yIFoiO24uYXR0cigiZCIscyl9ZWxzZSBpZih6KXt2YXIgbD0iTSIrKGEtMS0xKSsiLCIrKG8tOS0xKSsidjE4IGgyIHYtMTggWiI7bi5hdHRyKCJkIixsKX1lbHNle3ZhciBjPSJNIisoYS05LTEpKyIsIisoby0xLTEpKyJoMTggdjIgaC0xOCBaIjtuLmF0dHIoImQiLGMpfX0oKX1mdW5jdGlvbiAkKHQpe3Quc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLnJlbW92ZSgpfWguaW5pdChYKSxXLm5vZGUoKS5vbm1vdXNlbW92ZT1afSh0LHosbCxlLHIsTyk6ITA9PT1sLmVkaXRhYmxlJiZ6LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsUHx8Yy5vcGFjaXR5KFMpKk08PS41PyJzdHJva2UiOiJhbGwiKTt6Lm5vZGUoKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIXkodCkpcmV0dXJuO3ZhciByPStlLm5vZGUoKS5nZXRBdHRyaWJ1dGUoImRhdGEtaW5kZXgiKTtpZihyPj0wKXtpZihyPT09dC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleClyZXR1cm4gdm9pZCBUKHQpO3QuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg9cix0Ll9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGU9VCxnKHQpfX0odCx6KX0pKX19ZnVuY3Rpb24gYih0LGUscil7dmFyIG49KHIueHJlZityLnlyZWYpLnJlcGxhY2UoL3BhcGVyL2csIiIpLnJlcGxhY2UoL1t4eXpdWzEtOV0qICpkb21haW4vZywiIik7dS5zZXRDbGlwVXJsKHQsbj8iY2xpcCIrZS5fZnVsbExheW91dC5fdWlkK246bnVsbCxlKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsZixoPWUudHlwZSxwPWEuZ2V0UmVmVHlwZShlLnhyZWYpLGc9YS5nZXRSZWZUeXBlKGUueXJlZiksdj1hLmdldEZyb21JZCh0LGUueHJlZikseT1hLmdldEZyb21JZCh0LGUueXJlZikseD10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKHY/ImRvbWFpbiI9PT1wP249ZnVuY3Rpb24odCl7cmV0dXJuIHYuX29mZnNldCt2Ll9sZW5ndGgqdH06KHI9bS5zaGFwZVBvc2l0aW9uVG9SYW5nZSh2KSxuPWZ1bmN0aW9uKHQpe3JldHVybiB2Ll9vZmZzZXQrdi5yMnAocih0LCEwKSl9KTpuPWZ1bmN0aW9uKHQpe3JldHVybiB4LmwreC53KnR9LHk/ImRvbWFpbiI9PT1nP3M9ZnVuY3Rpb24odCl7cmV0dXJuIHkuX29mZnNldCt5Ll9sZW5ndGgqKDEtdCl9OihvPW0uc2hhcGVQb3NpdGlvblRvUmFuZ2UoeSkscz1mdW5jdGlvbih0KXtyZXR1cm4geS5fb2Zmc2V0K3kucjJwKG8odCwhMCkpfSk6cz1mdW5jdGlvbih0KXtyZXR1cm4geC50K3guaCooMS10KX0sInBhdGgiPT09aClyZXR1cm4gdiYmImRhdGUiPT09di50eXBlJiYobj1tLmRlY29kZURhdGUobikpLHkmJiJkYXRlIj09PXkudHlwZSYmKHM9bS5kZWNvZGVEYXRlKHMpKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5wYXRoLGE9dC54c2l6ZW1vZGUsbz10LnlzaXplbW9kZSxzPXQueGFuY2hvcixsPXQueWFuY2hvcjtyZXR1cm4gbi5yZXBsYWNlKGQuc2VnbWVudFJFLChmdW5jdGlvbih0KXt2YXIgbj0wLGM9dC5jaGFyQXQoMCksdT1kLnBhcmFtSXNYW2NdLGY9ZC5wYXJhbUlzWVtjXSxoPWQubnVtUGFyYW1zW2NdLHA9dC5zdWJzdHIoMSkucmVwbGFjZShkLnBhcmFtUkUsKGZ1bmN0aW9uKHQpe3JldHVybiB1W25dP3Q9InBpeGVsIj09PWE/ZShzKStOdW1iZXIodCk6ZSh0KTpmW25dJiYodD0icGl4ZWwiPT09bz9yKGwpLU51bWJlcih0KTpyKHQpKSwrK24+aCYmKHQ9IlgiKSx0fSkpO3JldHVybiBuPmgmJihwPXAucmVwbGFjZSgvW1xzLF0qWC4qLywiIiksaS5sb2coIklnbm9yaW5nIGV4dHJhIHBhcmFtcyBpbiBzZWdtZW50ICIrdCkpLGMrcH0pKX0oZSxuLHMpO2lmKCJwaXhlbCI9PT1lLnhzaXplbW9kZSl7dmFyIGI9bihlLnhhbmNob3IpO2w9YitlLngwLGM9YitlLngxfWVsc2UgbD1uKGUueDApLGM9bihlLngxKTtpZigicGl4ZWwiPT09ZS55c2l6ZW1vZGUpe3ZhciBfPXMoZS55YW5jaG9yKTt1PV8tZS55MCxmPV8tZS55MX1lbHNlIHU9cyhlLnkwKSxmPXMoZS55MSk7aWYoImxpbmUiPT09aClyZXR1cm4iTSIrbCsiLCIrdSsiTCIrYysiLCIrZjtpZigicmVjdCI9PT1oKXJldHVybiJNIitsKyIsIit1KyJIIitjKyJWIitmKyJIIitsKyJaIjt2YXIgdz0obCtjKS8yLFQ9KHUrZikvMixrPU1hdGguYWJzKHctbCksQT1NYXRoLmFicyhULXUpLE09IkEiK2srIiwiK0EsUz13K2srIiwiK1Q7cmV0dXJuIk0iK1MrTSsiIDAgMSwxICIrKHcrIiwiKyhULUEpKStNKyIgMCAwLDEgIitTKyJaIn1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGQuc2VnbWVudFJFLChmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT1kLnBhcmFtSXNYW2ldLG89ZC5wYXJhbUlzWVtpXSxzPWQubnVtUGFyYW1zW2ldO3JldHVybiBpK3Quc3Vic3RyKDEpLnJlcGxhY2UoZC5wYXJhbVJFLChmdW5jdGlvbih0KXtyZXR1cm4gbj49c3x8KGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyksdH0pKX0pKX1mdW5jdGlvbiBUKHQpe3kodCkmJih0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiYobCh0KSxkZWxldGUgdC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxnKHQpKSl9ZS5leHBvcnRzPXtkcmF3OmcsZHJhd09uZTp4LGVyYXNlQWN0aXZlU2hhcGU6ZnVuY3Rpb24odCl7aWYoIXkodCkpcmV0dXJuO2wodCk7dmFyIGU9dC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxyPSh0LmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoZTxyLmxlbmd0aCl7Zm9yKHZhciBpPVtdLGE9MDthPHIubGVuZ3RoO2ErKylhIT09ZSYmaS5wdXNoKHJbYV0pO2RlbGV0ZSB0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4LG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHtzaGFwZXM6aX0pfX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MjQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo1NjUsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL2NvbG9yIjozNjYsIi4uL2RyYWdlbGVtZW50IjozODUsIi4uL2RyYXdpbmciOjM4OCwiLi9jb25zdGFudHMiOjQ0OCwiLi9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiOjQ1NCwiLi9kcmF3X25ld3NoYXBlL2hlbHBlcnMiOjQ1NSwiLi9oZWxwZXJzIjo0NTd9XSw0NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxpPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bmV3c2hhcGU6e2xpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjQsZWRpdFR5cGU6Im5vbmUifSxkYXNoOmkoe30sbix7ZGZsdDoic29saWQiLGVkaXRUeXBlOiJub25lIn0pLGVkaXRUeXBlOiJub25lIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6Im5vbmUifSxmaWxscnVsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZXZlbm9kZCIsIm5vbnplcm8iXSxkZmx0OiJldmVub2RkIixlZGl0VHlwZToibm9uZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJub25lIn0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6Im5vbmUifSxkcmF3ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcnRobyIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsImRpYWdvbmFsIl0sZGZsdDoiZGlhZ29uYWwiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifSxhY3RpdmVzaGFwZTp7ZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiKDI1NSwwLDI1NSkiLGVkaXRUeXBlOiJub25lIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9kcmF3aW5nL2F0dHJpYnV0ZXMiOjM4N31dLDQ1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NJUkNMRV9TSURFUzozMixpMDAwOjAsaTA5MDo4LGkxODA6MTYsaTI3MDoyNCxjb3M0NTpNYXRoLmNvcyhNYXRoLlBJLzQpLHNpbjQ1Ok1hdGguc2luKE1hdGguUEkvNCksU1FSVDI6TWF0aC5zcXJ0KDIpfX0se31dLDQ1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYocigibmV3c2hhcGUuZHJhd2RpcmVjdGlvbiIpLHIoIm5ld3NoYXBlLmxheWVyIikscigibmV3c2hhcGUuZmlsbGNvbG9yIikscigibmV3c2hhcGUuZmlsbHJ1bGUiKSxyKCJuZXdzaGFwZS5vcGFjaXR5IikscigibmV3c2hhcGUubGluZS53aWR0aCIpKXt2YXIgaT0odHx8e30pLnBsb3RfYmdjb2xvcnx8IiNGRkYiO3IoIm5ld3NoYXBlLmxpbmUuY29sb3IiLG4uY29udHJhc3QoaSkpLHIoIm5ld3NoYXBlLmxpbmUuZGFzaCIpfXIoImFjdGl2ZXNoYXBlLmZpbGxjb2xvciIpLHIoImFjdGl2ZXNoYXBlLm9wYWNpdHkiKX19LHsiLi4vLi4vY29sb3IiOjM2Nn1dLDQ1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9kcmFnZWxlbWVudCIpLGk9dCgiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyIpLmRyYXdNb2RlLGE9dCgiLi4vLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4vY29uc3RhbnRzIikscz1vLmkwMDAsbD1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj10KCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhck91dGxpbmVDb250cm9sbGVycyxoPXQoIi4vaGVscGVycyIpLHA9aC5wb2ludHNTaGFwZVJlY3RhbmdsZSxkPWgucG9pbnRzU2hhcGVFbGxpcHNlLG09aC53cml0ZVBhdGhzLGc9dCgiLi9uZXdzaGFwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsbyxoKXtofHwoaD0wKTt2YXIgdj1vLmdkO2Z1bmN0aW9uIHkoKXt0KGUscixvLGgrKyksZChlWzBdKSYmeCh7cmVkcmF3aW5nOiEwfSl9ZnVuY3Rpb24geCh0KXtvLmlzQWN0aXZlU2hhcGU9ITE7dmFyIGU9ZyhyLG8pO09iamVjdC5rZXlzKGUpLmxlbmd0aCYmYS5jYWxsKCh0fHx7fSkucmVkcmF3aW5nPyJyZWxheW91dCI6Il9ndWlSZWxheW91dCIsdixlKX12YXIgYixfLHcsVCxrLEE9by5pc0FjdGl2ZVNoYXBlLE09di5fZnVsbExheW91dC5fem9vbWxheWVyLFM9by5kcmFnbW9kZTsoaShTKT92Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nPSEwOnYuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJmYodiksci5hdHRyKCJkIixtKGUpKSxBJiYhaCkmJihrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07dFtyXT1bXTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dFtyXVtpXT1bXTtmb3IodmFyIGE9MDthPG5baV0ubGVuZ3RoO2ErKyl0W3JdW2ldW2FdPW5baV1bYV19fXJldHVybiB0fShbXSxlKSxmdW5jdGlvbih0KXtiPVtdO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdLGE9IXAoaSkmJmQoaSk7YltyXT1bXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylpZigiWiIhPT1pW29dWzBdJiYoIWF8fG89PT1zfHxvPT09bHx8bz09PWN8fG89PT11KSl7dmFyIGY9aVtvXVsxXSxoPWlbb11bMl0sbT10LmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKS5hdHRyKCJkYXRhLWkiLHIpLmF0dHIoImRhdGEtaiIsbykuYXR0cigiY3giLGYpLmF0dHIoImN5IixoKS5hdHRyKCJyIiw0KS5zdHlsZSh7Im1peC1ibGVuZC1tb2RlIjoibHVtaW5vc2l0eSIsZmlsbDoiYmxhY2siLHN0cm9rZToid2hpdGUiLCJzdHJva2Utd2lkdGgiOjF9KTtiW3JdW29dPXtlbGVtZW50Om0ubm9kZSgpLGdkOnYscHJlcEZuOkUsZG9uZUZuOkMsY2xpY2tGbjpQfSxuLmluaXQoYltyXVtvXSl9fX0oTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm91dGxpbmUtY29udHJvbGxlcnMiKSksZnVuY3Rpb24oKXtpZihfPVtdLCFlLmxlbmd0aClyZXR1cm47X1swXT17ZWxlbWVudDpyWzBdWzBdLGdkOnYscHJlcEZuOk8sZG9uZUZuOnp9LG4uaW5pdChfWzBdKX0oKSk7ZnVuY3Rpb24gRSh0KXt3PSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSxUPSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWoiKSxiW3ddW1RdLm1vdmVGbj1MfWZ1bmN0aW9uIEwodCxyKXtpZihlLmxlbmd0aCl7dmFyIG49a1t3XVtUXVsxXSxpPWtbd11bVF1bMl0sYT1lW3ddLG89YS5sZW5ndGg7aWYocChhKSl7Zm9yKHZhciBzPTA7czxvO3MrKylpZihzIT09VCl7dmFyIGw9YVtzXTtsWzFdPT09YVtUXVsxXSYmKGxbMV09bit0KSxsWzJdPT09YVtUXVsyXSYmKGxbMl09aStyKX1pZihhW1RdWzFdPW4rdCxhW1RdWzJdPWkrciwhcChhKSlmb3IodmFyIGM9MDtjPG87YysrKWZvcih2YXIgdT0wO3U8YVtjXS5sZW5ndGg7dSsrKWFbY11bdV09a1t3XVtjXVt1XX1lbHNlIGFbVF1bMV09bit0LGFbVF1bMl09aStyO3koKX19ZnVuY3Rpb24gQygpe3goKX1mdW5jdGlvbiBQKHQscil7aWYoMj09PXQpe3c9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpLFQ9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaiIpO3ZhciBuPWVbd107cChuKXx8ZChuKXx8ZnVuY3Rpb24oKXtpZihlLmxlbmd0aCYmZVt3XSYmZVt3XS5sZW5ndGgpe2Zvcih2YXIgdD1bXSxyPTA7cjxlW3ddLmxlbmd0aDtyKyspciE9PVQmJnQucHVzaChlW3ddW3JdKTt0Lmxlbmd0aD4xJiYoMiE9PXQubGVuZ3RofHwiWiIhPT10WzFdWzBdKSYmKDA9PT1UJiYodFswXVswXT0iTSIpLGVbd109dCx5KCkseCgpKX19KCl9fWZ1bmN0aW9uIEkodCxyKXshZnVuY3Rpb24odCxyKXtpZihlLmxlbmd0aClmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKylmb3IodmFyIGE9MDthKzI8ZVtuXVtpXS5sZW5ndGg7YSs9MillW25dW2ldW2ErMV09a1tuXVtpXVthKzFdK3QsZVtuXVtpXVthKzJdPWtbbl1baV1bYSsyXStyfSh0LHIpLHkoKX1mdW5jdGlvbiBPKHQpeyh3PSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSl8fCh3PTApLF9bd10ubW92ZUZuPUl9ZnVuY3Rpb24geigpe3goKX19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6NTY1LCIuLi8uLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi8uLi9kcmFnZWxlbWVudCI6Mzg1LCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIjozODQsIi4vY29uc3RhbnRzIjo0NTIsIi4vaGVscGVycyI6NDU1LCIuL25ld3NoYXBlcyI6NDU2fV0sNDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCIuL2NvbnN0YW50cyIpLGE9aS5DSVJDTEVfU0lERVMsbz1pLlNRUlQyLHM9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiKSxsPXMucDJyLGM9cy5yMnAsdT1bMCwzLDQsNSw2LDEsMl0sZj1bMCwzLDQsMSwyXTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQtZSk8PTFlLTZ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWVbMV0tdFsxXSxuPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfXIud3JpdGVQYXRocz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZighZSlyZXR1cm4iTTAsMFoiO2Zvcih2YXIgcj0iIixuPTA7bjxlO24rKylmb3IodmFyIGk9dFtuXS5sZW5ndGgsYT0wO2E8aTthKyspe3ZhciBvPXRbbl1bYV1bMF07aWYoIloiPT09bylyKz0iWiI7ZWxzZSBmb3IodmFyIHM9dFtuXVthXS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWw7IlEiPT09b3x8IlMiPT09bz9jPWZbbF06IkMiPT09byYmKGM9dVtsXSkscis9dFtuXVthXVtjXSxsPjAmJmw8cy0xJiYocis9IiwiKX19cmV0dXJuIHJ9LHIucmVhZFBhdGhzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvLHMsdSxmPW4odCksaD1bXSxwPS0xLGQ9MCxtPTAsZz1mdW5jdGlvbigpe3M9ZCx1PW19O2coKTtmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIHkseCxiLF8sdz1bXSxUPWZbdl1bMF0saz1UO3N3aXRjaChUKXtjYXNlIk0iOnArKyxoW3BdPVtdLGQ9K2Zbdl1bMV0sbT0rZlt2XVsyXSx3LnB1c2goW2ssZCxtXSksZygpO2JyZWFrO2Nhc2UiUSI6Y2FzZSJTIjp5PStmW3ZdWzFdLGI9K2Zbdl1bMl0sZD0rZlt2XVszXSxtPStmW3ZdWzRdLHcucHVzaChbayxkLG0seSxiXSk7YnJlYWs7Y2FzZSJDIjp5PStmW3ZdWzFdLGI9K2Zbdl1bMl0seD0rZlt2XVszXSxfPStmW3ZdWzRdLGQ9K2Zbdl1bNV0sbT0rZlt2XVs2XSx3LnB1c2goW2ssZCxtLHksYix4LF9dKTticmVhaztjYXNlIlQiOmNhc2UiTCI6ZD0rZlt2XVsxXSxtPStmW3ZdWzJdLHcucHVzaChbayxkLG1dKTticmVhaztjYXNlIkgiOms9IkwiLGQ9K2Zbdl1bMV0sdy5wdXNoKFtrLGQsbV0pO2JyZWFrO2Nhc2UiViI6az0iTCIsbT0rZlt2XVsxXSx3LnB1c2goW2ssZCxtXSk7YnJlYWs7Y2FzZSJBIjprPSJMIjt2YXIgQT0rZlt2XVsxXSxNPStmW3ZdWzJdOytmW3ZdWzRdfHwoQT0tQSxNPS1NKTt2YXIgUz1kLUEsRT1tO2ZvcihvPTE7bzw9YS8yO28rKyl7dmFyIEw9MipNYXRoLlBJKm8vYTt3LnB1c2goW2ssUytBKk1hdGguY29zKEwpLEUrTSpNYXRoLnNpbihMKV0pfWJyZWFrO2Nhc2UiWiI6ZD09PXMmJm09PT11fHwoZD1zLG09dSx3LnB1c2goW2ssZCxtXSkpfWZvcih2YXIgQz0ocnx8e30pLmRvbWFpbixQPWUuX2Z1bGxMYXlvdXQuX3NpemUsST1yJiYicGl4ZWwiPT09ci54c2l6ZW1vZGUsTz1yJiYicGl4ZWwiPT09ci55c2l6ZW1vZGUsej0hMT09PWksRD0wO0Q8dy5sZW5ndGg7RCsrKXtmb3Iobz0wO28rMjw3O28rPTIpe3ZhciBSPXdbRF1bbysxXSxGPXdbRF1bbysyXTt2b2lkIDAhPT1SJiZ2b2lkIDAhPT1GJiYoZD1SLG09RixyJiYoci54YXhpcyYmci54YXhpcy5wMnI/KHomJihSLT1yLnhheGlzLl9vZmZzZXQpLFI9ST9jKHIueGF4aXMsci54YW5jaG9yKStSOmwoci54YXhpcyxSKSk6KHomJihSLT1QLmwpLEM/Uj1DLnhbMF0rUi9QLnc6Ui89UC53KSxyLnlheGlzJiZyLnlheGlzLnAycj8oeiYmKEYtPXIueWF4aXMuX29mZnNldCksRj1PP2Moci55YXhpcyxyLnlhbmNob3IpLUY6bChyLnlheGlzLEYpKTooeiYmKEYtPVAudCksRj1DP0MueVsxXS1GL1AuaDoxLUYvUC5oKSksd1tEXVtvKzFdPVIsd1tEXVtvKzJdPUYpfWhbcF0ucHVzaCh3W0RdLnNsaWNlKCkpfX1yZXR1cm4gaH0sci5wb2ludHNTaGFwZVJlY3RhbmdsZT1mdW5jdGlvbih0KXtpZig1IT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTE7ZTwzO2UrKyl7aWYoIWgodFswXVtlXS10WzFdW2VdLHRbM11bZV0tdFsyXVtlXSkpcmV0dXJuITE7aWYoIWgodFswXVtlXS10WzNdW2VdLHRbMV1bZV0tdFsyXVtlXSkpcmV0dXJuITF9cmV0dXJuISghaCh0WzBdWzFdLHRbMV1bMV0pJiYhaCh0WzBdWzFdLHRbM11bMV0pKSYmISEocCh0WzBdLHRbMV0pKnAodFswXSx0WzNdKSl9LHIucG9pbnRzU2hhcGVFbGxpcHNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUhPT1hKzEpcmV0dXJuITE7ZT1hO2Zvcih2YXIgcj0wO3I8ZTtyKyspe3ZhciBuPSgyKmUtciklZSxpPShlLzIrbiklZSxvPShlLzIrciklZTtpZighaChwKHRbcl0sdFtvXSkscCh0W25dLHRbaV0pKSlyZXR1cm4hMX1yZXR1cm4hMH0sci5oYW5kbGVFbGxpcHNlPWZ1bmN0aW9uKHQsZSxuKXtpZighdClyZXR1cm5bZSxuXTt2YXIgaT1yLmVsbGlwc2VPdmVyKHt4MDplWzBdLHkwOmVbMV0seDE6blswXSx5MTpuWzFdfSkscz0oaS54MStpLngwKS8yLGw9KGkueTEraS55MCkvMixjPShpLngxLWkueDApLzIsdT0oaS55MS1pLnkwKS8yO2N8fChjPXUvPW8pLHV8fCh1PWMvPW8pO2Zvcih2YXIgZj1bXSxoPTA7aDxhO2grKyl7dmFyIHA9MipoKk1hdGguUEkvYTtmLnB1c2goW3MrYypNYXRoLmNvcyhwKSxsK3UqTWF0aC5zaW4ocCldKX1yZXR1cm4gZn0sci5lbGxpcHNlT3Zlcj1mdW5jdGlvbih0KXt2YXIgZT10LngwLHI9dC55MCxuPXQueDEsaT10LnkxLGE9bi1lLHM9aS1yLGw9KChlLT1hKStuKS8yLGM9KChyLT1zKStpKS8yO3JldHVybnt4MDpsLShhKj1vKSx5MDpjLShzKj1vKSx4MTpsK2EseTE6YytzfX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiOjU2NiwiLi9jb25zdGFudHMiOjQ1MiwicGFyc2Utc3ZnLXBhdGgiOjI1MH1dLDQ1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIiksaT1uLmRyYXdNb2RlLGE9bi5vcGVuTW9kZSxvPXQoIi4vY29uc3RhbnRzIikscz1vLmkwMDAsbD1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj1vLmNvczQ1LGg9by5zaW40NSxwPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIiksZD1wLnAycixtPXAucjJwLGc9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3Qsdj10KCIuL2hlbHBlcnMiKSx5PXYucmVhZFBhdGhzLHg9di53cml0ZVBhdGhzLGI9di5lbGxpcHNlT3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCl7dmFyIHI9dFswXVswXTtpZihyKXt2YXIgbj1yLmdldEF0dHJpYnV0ZSgiZCIpLG89ZS5nZCxwPW8uX2Z1bGxMYXlvdXQubmV3c2hhcGUsdj1lLnBsb3RpbmZvLF89di54YXhpcyx3PXYueWF4aXMsVD0hIXYuZG9tYWlufHwhdi54YXhpcyxrPSEhdi5kb21haW58fCF2LnlheGlzLEE9ZS5pc0FjdGl2ZVNoYXBlLE09ZS5kcmFnbW9kZSxTPShvLmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoIWkoTSkmJnZvaWQgMCE9PUEpe3ZhciBFPW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg7aWYoRTxTLmxlbmd0aClzd2l0Y2goby5fZnVsbExheW91dC5zaGFwZXNbRV0udHlwZSl7Y2FzZSJyZWN0IjpNPSJkcmF3cmVjdCI7YnJlYWs7Y2FzZSJjaXJjbGUiOk09ImRyYXdjaXJjbGUiO2JyZWFrO2Nhc2UibGluZSI6TT0iZHJhd2xpbmUiO2JyZWFrO2Nhc2UicGF0aCI6dmFyIEw9U1tFXS5wYXRofHwiIjtNPSJaIj09PUxbTC5sZW5ndGgtMV0/ImRyYXdjbG9zZWRwYXRoIjoiZHJhd29wZW5wYXRoIn19dmFyIEMsUD1hKE0pLEk9eShuLG8sdixBKSxPPXtlZGl0YWJsZTohMCx4cmVmOlQ/InBhcGVyIjpfLl9pZCx5cmVmOms/InBhcGVyIjp3Ll9pZCxsYXllcjpwLmxheWVyLG9wYWNpdHk6cC5vcGFjaXR5LGxpbmU6e2NvbG9yOnAubGluZS5jb2xvcix3aWR0aDpwLmxpbmUud2lkdGgsZGFzaDpwLmxpbmUuZGFzaH19O2lmKFB8fChPLmZpbGxjb2xvcj1wLmZpbGxjb2xvcixPLmZpbGxydWxlPXAuZmlsbHJ1bGUpLDE9PT1JLmxlbmd0aCYmKEM9SVswXSksQyYmImRyYXdyZWN0Ij09PU0pTy50eXBlPSJyZWN0IixPLngwPUNbMF1bMV0sTy55MD1DWzBdWzJdLE8ueDE9Q1syXVsxXSxPLnkxPUNbMl1bMl07ZWxzZSBpZihDJiYiZHJhd2xpbmUiPT09TSlPLnR5cGU9ImxpbmUiLE8ueDA9Q1swXVsxXSxPLnkwPUNbMF1bMl0sTy54MT1DWzFdWzFdLE8ueTE9Q1sxXVsyXTtlbHNlIGlmKEMmJiJkcmF3Y2lyY2xlIj09PU0pe08udHlwZT0iY2lyY2xlIjt2YXIgej1DW3NdWzFdLEQ9Q1tsXVsxXSxSPUNbY11bMV0sRj1DW3VdWzFdLEI9Q1tzXVsyXSxOPUNbbF1bMl0saj1DW2NdWzJdLFU9Q1t1XVsyXSxWPXYueGF4aXMmJigiZGF0ZSI9PT12LnhheGlzLnR5cGV8fCJsb2ciPT09di54YXhpcy50eXBlKSxIPXYueWF4aXMmJigiZGF0ZSI9PT12LnlheGlzLnR5cGV8fCJsb2ciPT09di55YXhpcy50eXBlKTtWJiYoej1tKHYueGF4aXMseiksRD1tKHYueGF4aXMsRCksUj1tKHYueGF4aXMsUiksRj1tKHYueGF4aXMsRikpLEgmJihCPW0odi55YXhpcyxCKSxOPW0odi55YXhpcyxOKSxqPW0odi55YXhpcyxqKSxVPW0odi55YXhpcyxVKSk7dmFyIHE9KEQrRikvMixHPShCK2opLzIsWT1iKHt4MDpxLHkwOkcseDE6cSsoRi1EK1IteikvMipmLHkxOkcrKFUtTitqLUIpLzIqaH0pO1YmJihZLngwPWQodi54YXhpcyxZLngwKSxZLngxPWQodi54YXhpcyxZLngxKSksSCYmKFkueTA9ZCh2LnlheGlzLFkueTApLFkueTE9ZCh2LnlheGlzLFkueTEpKSxPLngwPVkueDAsTy55MD1ZLnkwLE8ueDE9WS54MSxPLnkxPVkueTF9ZWxzZSBPLnR5cGU9InBhdGgiLF8mJncmJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0iZGF0ZSI9PT1lLnR5cGUsaT0iZGF0ZSI9PT1yLnR5cGU7aWYoIW4mJiFpKXJldHVybiB0O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288dFthXS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3MrMjx0W2FdW29dLmxlbmd0aDtzKz0yKW4mJih0W2FdW29dW3MrMV09dFthXVtvXVtzKzFdLnJlcGxhY2UoIiAiLCJfIikpLGkmJih0W2FdW29dW3MrMl09dFthXVtvXVtzKzJdLnJlcGxhY2UoIiAiLCJfIikpfShJLF8sdyksTy5wYXRoPXgoSSksQz1udWxsO2cobyk7Zm9yKHZhciBXPWUuZWRpdEhlbHBlcnMsWD0oV3x8e30pLm1vZGlmeUl0ZW0sWj1bXSxKPTA7SjxTLmxlbmd0aDtKKyspe3ZhciBLPW8uX2Z1bGxMYXlvdXQuc2hhcGVzW0pdO2lmKFpbSl09Sy5faW5wdXQsdm9pZCAwIT09QSYmSj09PW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpe3ZhciBRPU87c3dpdGNoKEsudHlwZSl7Y2FzZSJsaW5lIjpjYXNlInJlY3QiOmNhc2UiY2lyY2xlIjpYKCJ4MCIsUS54MCksWCgieDEiLFEueDEpLFgoInkwIixRLnkwKSxYKCJ5MSIsUS55MSk7YnJlYWs7Y2FzZSJwYXRoIjpYKCJwYXRoIixRLnBhdGgpfX19cmV0dXJuIHZvaWQgMD09PUE/KFoucHVzaChPKSxaKTpXP1cuZ2V0VXBkYXRlT2JqKCk6e319fX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo1NjUsIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjo1NjYsIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiOjM4NCwiLi9jb25zdGFudHMiOjQ1MiwiLi9oZWxwZXJzIjo0NTV9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYiIpO3IucmFuZ2VUb1NoYXBlUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5yMmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLnNoYXBlUG9zaXRpb25Ub1JhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QuZDJyOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5kZWNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlJiYoZT1lLnJlcGxhY2UoIl8iLCIgIikpLHQoZSl9fSxyLmVuY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLnJlcGxhY2UoIiAiLCJfIil9fSxyLmV4dHJhY3RQYXRoQ29vcmRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIHQubWF0Y2gobi5zZWdtZW50UkUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPWVbdC5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWEpe3ZhciBvPXQuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGF8fHIucHVzaChpLmNsZWFuTnVtYmVyKG9bYV0pKX19KSkscn0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxvPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSlpZigiZG9tYWluIj09PWkpYT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fbGVuZ3RoKihuPzEtdDp0KStlLl9vZmZzZXR9O2Vsc2V7dmFyIHM9ci5zaGFwZVBvc2l0aW9uVG9SYW5nZShlKTthPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9vZmZzZXQrZS5yMnAocyh0LCEwKSl9LCJkYXRlIj09PWUudHlwZSYmKGE9ci5kZWNvZGVEYXRlKGEpKX1lbHNlIGE9bj9mdW5jdGlvbih0KXtyZXR1cm4gby50K28uaCooMS10KX06ZnVuY3Rpb24odCl7cmV0dXJuIG8ubCtvLncqdH07cmV0dXJuIGF9LHIuZ2V0UGl4ZWxUb0RhdGE9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpaWYoImRvbWFpbiI9PT1pKWE9ZnVuY3Rpb24odCl7dmFyIHI9KHQtZS5fb2Zmc2V0KS9lLl9sZW5ndGg7cmV0dXJuIG4/MS1yOnJ9O2Vsc2V7dmFyIHM9ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTthPWZ1bmN0aW9uKHQpe3JldHVybiBzKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgYT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LW8udCkvby5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1vLmwpL28ud307cmV0dXJuIGF9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09PU1hdGgucm91bmQoZSUyKSxuPU1hdGgucm91bmQodCk7cmV0dXJuIHI/bisuNTpufSxyLm1ha2VPcHRpb25zQW5kUGxvdGluZm89ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LnNoYXBlc1tlXXx8e30sbj10Ll9mdWxsTGF5b3V0Ll9wbG90c1tyLnhyZWYrci55cmVmXTtyZXR1cm4hIW4/bi5faGFkUGxvdGluZm89ITA6KG49e30sci54cmVmJiYicGFwZXIiIT09ci54cmVmJiYobi54YXhpcz10Ll9mdWxsTGF5b3V0W3IueHJlZisiYXhpcyJdKSxyLnlyZWYmJiJwYXBlciIhPT1yLnlyZWYmJihuLnlheGlzPXQuX2Z1bGxMYXlvdXRbci55cmVmKyJheGlzIl0pKSxuLnhzaXplbW9kZT1yLnhzaXplbW9kZSxuLnlzaXplbW9kZT1yLnlzaXplbW9kZSxuLnhhbmNob3I9ci54YW5jaG9yLG4ueWFuY2hvcj1yLnlhbmNob3Ise29wdGlvbnM6cixwbG90aW5mbzpufX19LHsiLi4vLi4vbGliIjo1MDMsIi4vY29uc3RhbnRzIjo0NDh9XSw0NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3Iik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InNoYXBlcyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHM6dCgiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgic2hhcGVzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmV9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjU2NywiLi9hdHRyaWJ1dGVzIjo0NDYsIi4vY2FsY19hdXRvcmFuZ2UiOjQ0NywiLi9kZWZhdWx0cyI6NDQ5LCIuL2RyYXciOjQ1MCwiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIjo0NTN9XSw0NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXBBbGwsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9dCgiLi9jb25zdGFudHMiKSx1PWwoInN0ZXAiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmcifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoInNsaWRlciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGFjdGl2ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmEoaSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OiJjdWJpYy1pbi1vdXQifX0sY3VycmVudHZhbHVlOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIn0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Om4oe30pfSxmb250Om4oe30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTM2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo1NDgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6NjE4LCIuL2NvbnN0YW50cyI6NDYwfV0sNDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNDYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuc3RlcHM7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWZvcih2YXIgcz1pKHQsZSx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSksbD0wLHU9MDt1PHMubGVuZ3RoO3UrKylzW3VdLnZpc2libGUmJmwrKztpZihsPDI/ZS52aXNpYmxlPSExOm8oInZpc2libGUiKSl7ZS5fc3RlcENvdW50PWw7dmFyIGY9ZS5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShzKTsoc1tvKCJhY3RpdmUiKV18fHt9KS52aXNpYmxlfHwoZS5hY3RpdmU9ZlswXS5faW5kZXgpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJsZW4iKSxvKCJsZW5tb2RlIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJjdXJyZW50dmFsdWUudmlzaWJsZSIpJiYobygiY3VycmVudHZhbHVlLnhhbmNob3IiKSxvKCJjdXJyZW50dmFsdWUucHJlZml4IiksbygiY3VycmVudHZhbHVlLnN1ZmZpeCIpLG8oImN1cnJlbnR2YWx1ZS5vZmZzZXQiKSxuLmNvZXJjZUZvbnQobywiY3VycmVudHZhbHVlLmZvbnQiLGUuZm9udCkpLG8oInRyYW5zaXRpb24uZHVyYXRpb24iKSxvKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG8oImJnY29sb3IiKSxvKCJhY3RpdmViZ2NvbG9yIiksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpLG8oInRpY2tsZW4iKSxvKCJ0aWNrd2lkdGgiKSxvKCJ0aWNrY29sb3IiKSxvKCJtaW5vcnRpY2tsZW4iKX19ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pZigic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpP3IoInZpc2libGUiKTplLnZpc2libGU9ITEpe3IoIm1ldGhvZCIpLHIoImFyZ3MiKTt2YXIgaT1yKCJsYWJlbCIsInN0ZXAtIitlLl9pbmRleCk7cigidmFsdWUiLGkpLHIoImV4ZWN1dGUiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDksIi4vYXR0cmlidXRlcyI6NDU5LCIuL2NvbnN0YW50cyI6NDYwfV0sNDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi9jb2xvciIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD1zLnN0clRyYW5zbGF0ZSxjPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHU9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGY9dCgiLi9jb25zdGFudHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWguTElORV9TUEFDSU5HLGQ9aC5GUk9NX1RMLG09aC5GUk9NX0JSO2Z1bmN0aW9uIGcodCl7cmV0dXJuIGYuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiB5KHQsZSl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIGE9MCxsPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1fKG4uc2VsZWN0KHRoaXMpLHtzdGVwOnR9LGUpLm5vZGUoKTtpZihyKXt2YXIgaT1vLmJCb3gocik7bD1NYXRoLm1heChsLGkuaGVpZ2h0KSxhPU1hdGgubWF4KGEsaS53aWR0aCl9fSkpLHIucmVtb3ZlKCk7dmFyIHU9ZS5fZGltcz17fTt1LmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KGYucmFpbFdpZHRoLGYuZ3JpcEhlaWdodCk7dmFyIGg9dC5fZnVsbExheW91dC5fc2l6ZTt1Lmx4PWgubCtoLncqZS54LHUubHk9aC50K2guaCooMS1lLnkpLCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/dS5vdXRlckxlbmd0aD1NYXRoLnJvdW5kKGgudyplLmxlbik6dS5vdXRlckxlbmd0aD1lLmxlbix1LmlucHV0QXJlYVN0YXJ0PTAsdS5pbnB1dEFyZWFMZW5ndGg9TWF0aC5yb3VuZCh1Lm91dGVyTGVuZ3RoLWUucGFkLmwtZS5wYWQucik7dmFyIHA9KHUuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQpLyhlLl9zdGVwQ291bnQtMSksdj1hK2YubGFiZWxQYWRkaW5nO2lmKHUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwodi9wKSksdS5sYWJlbEhlaWdodD1sLHUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCx1LmN1cnJlbnRWYWx1ZUhlaWdodD0wLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIHk9by50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj14KHksZSx0LmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0saT1jLmxpbmVDb3VudChyKTt1LmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSx1LmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heCh1LmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4TGluZXMsaSl9KSksdS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD11LmN1cnJlbnRWYWx1ZUhlaWdodCtlLmN1cnJlbnR2YWx1ZS5vZmZzZXQseS5yZW1vdmUoKX11LmhlaWdodD11LmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K2YudGlja09mZnNldCtlLnRpY2tsZW4rZi5sYWJlbE9mZnNldCt1LmxhYmVsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYjt2YXIgYj0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYodS5seC09dS5vdXRlckxlbmd0aCxiPSJyaWdodCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJih1Lmx4LT11Lm91dGVyTGVuZ3RoLzIsYj0iY2VudGVyIik7dmFyIHc9InRvcCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHUubHktPXUuaGVpZ2h0LHc9ImJvdHRvbSIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJih1Lmx5LT11LmhlaWdodC8yLHc9Im1pZGRsZSIpLHUub3V0ZXJMZW5ndGg9TWF0aC5jZWlsKHUub3V0ZXJMZW5ndGgpLHUuaGVpZ2h0PU1hdGguY2VpbCh1LmhlaWdodCksdS5seD1NYXRoLnJvdW5kKHUubHgpLHUubHk9TWF0aC5yb3VuZCh1Lmx5KTt2YXIgVD17eTplLnksYjp1LmhlaWdodCptW3ddLHQ6dS5oZWlnaHQqZFt3XX07ImZyYWN0aW9uIj09PWUubGVubW9kZT8oVC5sPTAsVC54bD1lLngtZS5sZW4qZFtiXSxULnI9MCxULnhyPWUueCtlLmxlbiptW2JdKTooVC54PWUueCxULmw9dS5vdXRlckxlbmd0aCpkW2JdLFQucj11Lm91dGVyTGVuZ3RoKm1bYl0pLGkuYXV0b01hcmdpbih0LGcoZSksVCl9ZnVuY3Rpb24geCh0LGUscil7aWYoZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4saSxhPWUuX2RpbXM7c3dpdGNoKGUuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2UicmlnaHQiOm49YS5pbnB1dEFyZWFMZW5ndGgtZi5jdXJyZW50VmFsdWVJbnNldC1hLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGk9ImxlZnQiO2JyZWFrO2Nhc2UiY2VudGVyIjpuPS41KmEuaW5wdXRBcmVhTGVuZ3RoLGk9Im1pZGRsZSI7YnJlYWs7ZGVmYXVsdDpuPWYuY3VycmVudFZhbHVlSW5zZXQsaT0ibGVmdCJ9dmFyIGw9cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5sYWJlbENsYXNzLChmdW5jdGlvbih0KXt0LmF0dHIoeyJ0ZXh0LWFuY2hvciI6aSwiZGF0YS1ub3RleCI6MX0pfSkpLHU9ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpdSs9cjtlbHNle3ZhciBoPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsLGQ9ZS5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7ZCYmKGg9cy50ZW1wbGF0ZVN0cmluZyhoLGQpKSx1Kz1ofWUuY3VycmVudHZhbHVlLnN1ZmZpeCYmKHUrPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksbC5jYWxsKG8uZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KHUpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsZS5fZ2QpO3ZhciBtPWMubGluZUNvdW50KGwpLGc9KGEuY3VycmVudFZhbHVlTWF4TGluZXMrMS1tKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqcDtyZXR1cm4gYy5wb3NpdGlvblRleHQobCxuLGcpLGx9fWZ1bmN0aW9uIGIodCxlLHIpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuZ3JpcFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLmF0dHIoe3dpZHRoOmYuZ3JpcFdpZHRoLGhlaWdodDpmLmdyaXBIZWlnaHQscng6Zi5ncmlwUmFkaXVzLHJ5OmYuZ3JpcFJhZGl1c30pLmNhbGwoYS5zdHJva2Usci5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsci5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGYubGFiZWxDbGFzcywoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSl9KSksaT1lLnN0ZXAubGFiZWwsYT1yLl9nZC5fZnVsbExheW91dC5fbWV0YTtyZXR1cm4gYSYmKGk9cy50ZW1wbGF0ZVN0cmluZyhpLGEpKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChpKS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1zLmVuc3VyZVNpbmdsZSh0LCJnIixmLmxhYmVsc0NsYXNzKSxpPWUuX2RpbXMsYT1yLnNlbGVjdEFsbCgiZy4iK2YubGFiZWxHcm91cENsYXNzKS5kYXRhKGkubGFiZWxTdGVwcyk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5sYWJlbEdyb3VwQ2xhc3MsITApLGEuZXhpdCgpLnJlbW92ZSgpLGEuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKF8sdCxlKSxvLnNldFRyYW5zbGF0ZShyLEUoZSx0LmZyYWN0aW9uKSxmLnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKnArZi5sYWJlbE9mZnNldCtpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBUKHQsZSxyLG4saSl7dmFyIGE9TWF0aC5yb3VuZChuKihyLl9zdGVwQ291bnQtMSkpLG89ci5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleDtvIT09ci5hY3RpdmUmJmsodCxlLHIsbywhMCxpKX1mdW5jdGlvbiBrKHQsZSxyLG4sYSxvKXt2YXIgcz1yLmFjdGl2ZTtyLmFjdGl2ZT1uLHUodC5sYXlvdXQsZi5uYW1lLHIpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG4pO3ZhciBsPXIuc3RlcHNbci5hY3RpdmVdO2UuY2FsbChTLHIsbyksZS5jYWxsKHgsciksdC5lbWl0KCJwbG90bHlfc2xpZGVyY2hhbmdlIix7c2xpZGVyOnIsc3RlcDpyLnN0ZXBzW3IuYWN0aXZlXSxpbnRlcmFjdGlvbjphLHByZXZpb3VzQWN0aXZlOnN9KSxsJiZsLm1ldGhvZCYmYSYmKGUuX25leHRNZXRob2Q/KGUuX25leHRNZXRob2Quc3RlcD1sLGUuX25leHRNZXRob2QuZG9DYWxsYmFjaz1hLGUuX25leHRNZXRob2QuZG9UcmFuc2l0aW9uPW8pOihlLl9uZXh0TWV0aG9kPXtzdGVwOmwsZG9DYWxsYmFjazphLGRvVHJhbnNpdGlvbjpvfSxlLl9uZXh0TWV0aG9kUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZpLmV4ZWN1dGVBUElDb21tYW5kKHQsci5tZXRob2Qsci5hcmdzKSxlLl9uZXh0TWV0aG9kPW51bGwsZS5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSkpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX1mdW5jdGlvbiBsKCl7dmFyIHQ9cygpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdCgiLiIrZi5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9TCh0LG4ubW91c2UoaSlbMF0pO2Z1bmN0aW9uIHUoKXt2YXIgdD1zKCksYT1MKHQsbi5tb3VzZShpKVswXSk7VChlLHIsdCxhLCExKX1mdW5jdGlvbiBoKCl7dmFyIHQ9cygpO3QuX2RyYWdnaW5nPSExLGwuY2FsbChhLmZpbGwsdC5iZ2NvbG9yKSxvLm9uKCJtb3VzZXVwIixudWxsKSxvLm9uKCJtb3VzZW1vdmUiLG51bGwpLG8ub24oInRvdWNoZW5kIixudWxsKSxvLm9uKCJ0b3VjaG1vdmUiLG51bGwpLGUuZW1pdCgicGxvdGx5X3NsaWRlcmVuZCIse3NsaWRlcjp0LHN0ZXA6dC5zdGVwc1t0LmFjdGl2ZV19KX1UKGUscix0LGMsITApLHQuX2RyYWdnaW5nPSEwLG8ub24oIm1vdXNlbW92ZSIsdSksby5vbigidG91Y2htb3ZlIix1KSxvLm9uKCJtb3VzZXVwIixoKSxvLm9uKCJ0b3VjaGVuZCIsaCl9dC5vbigibW91c2Vkb3duIixsKSx0Lm9uKCJ0b3VjaHN0YXJ0IixsKX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIitmLnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoZi50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKChmdW5jdGlvbih0LHIpe3ZhciBzPXIlaS5sYWJlbFN0cmlkZT09MCxsPW4uc2VsZWN0KHRoaXMpO2wuYXR0cih7aGVpZ2h0OnM/ZS50aWNrbGVuOmUubWlub3J0aWNrbGVufSkuY2FsbChhLmZpbGwsZS50aWNrY29sb3IpLG8uc2V0VHJhbnNsYXRlKGwsRShlLHIvKGUuX3N0ZXBDb3VudC0xKSktLjUqZS50aWNrd2lkdGgsKHM/Zi50aWNrT2Zmc2V0OmYubWlub3JUaWNrT2Zmc2V0KStpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBTKHQsZSxyKXtmb3IodmFyIG49dC5zZWxlY3QoInJlY3QuIitmLmdyaXBSZWN0Q2xhc3MpLGk9MCxhPTA7YTxlLl9zdGVwQ291bnQ7YSsrKWlmKGUuX3Zpc2libGVTdGVwc1thXS5faW5kZXg9PT1lLmFjdGl2ZSl7aT1hO2JyZWFrfXZhciBvPUUoZSxpLyhlLl9zdGVwQ291bnQtMSkpO2lmKCFlLl9pbnZva2luZ0NvbW1hbmQpe3ZhciBzPW47ciYmZS50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihzPXMudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZShlLnRyYW5zaXRpb24uZWFzaW5nKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLGwoby0uNSpmLmdyaXBXaWR0aCxlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KSl9fWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K2Yuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKmYuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtZi5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixmLnJhaWxUb3VjaFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO2kuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsZi50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuYXR0cigib3BhY2l0eSIsMCksby5zZXRUcmFuc2xhdGUoaSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIFAodCxlKXt2YXIgcj1lLl9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMipmLnJhaWxJbnNldCxpPXMuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYucmFpbFJlY3RDbGFzcyk7aS5hdHRyKHt3aWR0aDpuLGhlaWdodDpmLnJhaWxXaWR0aCxyeDpmLnJhaWxSYWRpdXMscnk6Zi5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpLG8uc2V0VHJhbnNsYXRlKGksZi5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtZi5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFtmLm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmKGEuX2dkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn0oZSx0KSxhPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitmLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gcyhlKXtlLl9jb21tYW5kT2JzZXJ2ZXImJihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbW1hbmRPYnNlcnZlciksaS5hdXRvTWFyZ2luKHQsZyhlKSl9aWYoYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxhLmV4aXQoKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1hLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmRhdGEocix2KTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKHMpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdO3kodCx1KX1sLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbih0KXt2YXIgZT10Ll9kaW1zO2UubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9dC5fc3RlcENvdW50LG49MDtuPHI7bis9ZS5sYWJlbFN0cmlkZSllLmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOnQuX3Zpc2libGVTdGVwc1tuXX0pfShlKSxpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5fdmlzaWJsZVN0ZXBzLChmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8ayh0LHIsbixlLmluZGV4LCExLCEwKSl9KSksZnVuY3Rpb24odCxlLHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTtlLmNhbGwoeCxyKS5jYWxsKFAscikuY2FsbCh3LHIpLmNhbGwoTSxyKS5jYWxsKEMsdCxyKS5jYWxsKGIsdCxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKGUsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksZS5jYWxsKFMsciwhMSksZS5jYWxsKHgscil9KHQsbi5zZWxlY3QodGhpcyksZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NzEsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9wbG90cyI6NjE5LCIuLi9jb2xvciI6MzY2LCIuLi9kcmF3aW5nIjozODgsIi4vY29uc3RhbnRzIjo0NjAsIkBwbG90bHkvZDMiOjU4fV0sNDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NDU5LCIuL2NvbnN0YW50cyI6NDYwLCIuL2RlZmF1bHRzIjo0NjEsIi4vZHJhdyI6NDYyfV0sNDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi9kcmF3aW5nIiksdT10KCIuLi9jb2xvciIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikscD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuT1BQT1NJVEVfU0lERSxkPS8gW1hZXVswLTldKiAvO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0LGUscil7dmFyIG0sZz1yLnByb3BDb250YWluZXIsdj1yLnByb3BOYW1lLHk9ci5wbGFjZWhvbGRlcix4PXIudHJhY2VJbmRleCxiPXIuYXZvaWR8fHt9LF89ci5hdHRyaWJ1dGVzLHc9ci50cmFuc2Zvcm0sVD1yLmNvbnRhaW5lckdyb3VwLGs9dC5fZnVsbExheW91dCxBPTEsTT0hMSxTPWcudGl0bGUsRT0oUyYmUy50ZXh0P1MudGV4dDoiIikudHJpbSgpLEw9UyYmUy5mb250P1MuZm9udDp7fSxDPUwuZmFtaWx5LFA9TC5zaXplLEk9TC5jb2xvcjsidGl0bGUudGV4dCI9PT12P209InRpdGxlVGV4dCI6LTEhPT12LmluZGV4T2YoImF4aXMiKT9tPSJheGlzVGl0bGVUZXh0Ijp2LmluZGV4T2YoITApJiYobT0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgTz10Ll9jb250ZXh0LmVkaXRzW21dOyIiPT09RT9BPTA6RS5yZXBsYWNlKGQsIiAlICIpPT09eS5yZXBsYWNlKGQsIiAlICIpJiYoQT0uMixNPSEwLE98fChFPSIiKSksci5fbWV0YT9FPXMudGVtcGxhdGVTdHJpbmcoRSxyLl9tZXRhKTprLl9tZXRhJiYoRT1zLnRlbXBsYXRlU3RyaW5nKEUsay5fbWV0YSkpO3ZhciB6LEQ9RXx8TztUfHwoVD1zLmVuc3VyZVNpbmdsZShrLl9pbmZvbGF5ZXIsImciLCJnLSIrZSksej1rLl9oQ29sb3JiYXJNb3ZlVGl0bGUpO3ZhciBSPVQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShEP1swXTpbXSk7aWYoUi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLFIudGV4dChFKS5hdHRyKCJjbGFzcyIsZSksUi5leGl0KCkucmVtb3ZlKCksIUQpcmV0dXJuIFQ7ZnVuY3Rpb24gRih0KXtzLnN5bmNPckFzeW5jKFtCLE5dLHQpfWZ1bmN0aW9uIEIoZSl7dmFyIHI7cmV0dXJuIXcmJnomJih3PXt9KSx3PyhyPSIiLHcucm90YXRlJiYocis9InJvdGF0ZSgiK1t3LnJvdGF0ZSxfLngsXy55XSsiKSIpLCh3Lm9mZnNldHx8eikmJihyKz1sKDAsKHcub2Zmc2V0fHwwKS0oenx8MCkpKSk6cj1udWxsLGUuYXR0cigidHJhbnNmb3JtIixyKSxlLnN0eWxlKHsiZm9udC1mYW1pbHkiOkMsImZvbnQtc2l6ZSI6bi5yb3VuZChQLDIpKyJweCIsZmlsbDp1LnJnYihJKSxvcGFjaXR5OkEqdS5vcGFjaXR5KEkpLCJmb250LXdlaWdodCI6YS5mb250V2VpZ2h0fSkuYXR0cihfKS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBOKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKGImJmIuc2VsZWN0aW9uJiZiLnNpZGUmJkUpe2UuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj1wW2Iuc2lkZV0sYT0ibGVmdCI9PT1iLnNpZGV8fCJ0b3AiPT09Yi5zaWRlPy0xOjEsbz1pKGIucGFkKT9iLnBhZDoyLHU9Yy5iQm94KGUubm9kZSgpKSxmPXtsZWZ0OjAsdG9wOjAscmlnaHQ6ay53aWR0aCxib3R0b206ay5oZWlnaHR9LGg9Yi5tYXhTaGlmdHx8YSooZltiLnNpZGVdLXVbYi5zaWRlXSksZD0wO2lmKGg8MClkPWg7ZWxzZXt2YXIgbT1iLm9mZnNldExlZnR8fDAsZz1iLm9mZnNldFRvcHx8MDt1LmxlZnQtPW0sdS5yaWdodC09bSx1LnRvcC09Zyx1LmJvdHRvbS09ZyxiLnNlbGVjdGlvbi5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWMuYkJveCh0aGlzKTtzLmJCb3hJbnRlcnNlY3QodSx0LG8pJiYoZD1NYXRoLm1heChkLGEqKHRbYi5zaWRlXS11W3JdKStvKSl9KSksZD1NYXRoLm1pbihoLGQpfWlmKGQ+MHx8aDwwKXt2YXIgdj17bGVmdDpbLWQsMF0scmlnaHQ6W2QsMF0sdG9wOlswLC1kXSxib3R0b206WzAsZF19W2Iuc2lkZV07ZS5hdHRyKCJ0cmFuc2Zvcm0iLGwodlswXSx2WzFdKSl9fX1yZXR1cm4gUi5jYWxsKEYpLE8mJihFP1Iub24oIi5vcGFjaXR5IixudWxsKTooQT0wLE09ITAsUi50ZXh0KHkpLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguU0hPV19QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDEpfSkpLm9uKCJtb3VzZW91dC5vcGFjaXR5IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5ISURFX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMCl9KSkpLFIuY2FsbChmLm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IiwoZnVuY3Rpb24oZSl7dm9pZCAwIT09eD9vLmNhbGwoIl9ndWlSZXN0eWxlIix0LHYsZSx4KTpvLmNhbGwoIl9ndWlSZWxheW91dCIsdCx2LGUpfSkpLm9uKCJjYW5jZWwiLChmdW5jdGlvbigpe3RoaXMudGV4dCh0aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSkuY2FsbChGKX0pKS5vbigiaW5wdXQiLChmdW5jdGlvbih0KXt0aGlzLnRleHQodHx8IiAiKS5jYWxsKGYucG9zaXRpb25UZXh0LF8ueCxfLnkpfSkpKSxSLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixNKSxUfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdHMvcGxvdHMiOjYxOSwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vY29sb3IiOjM2NiwiLi4vZHJhd2luZyI6Mzg4LCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDQ2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPWwoImJ1dHRvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sYXJnczI6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJ1cGRhdGVtZW51Iix7X2FycmF5QXR0clJlZ2V4cHM6Wy9edXBkYXRlbWVudXNcWygwfFsxLTldWzAtOV0rKVxdXC5idXR0b25zL10sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRyb3Bkb3duIiwiYnV0dG9ucyJdLGRmbHQ6ImRyb3Bkb3duIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iXSxkZmx0OiJkb3duIn0sYWN0aXZlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDowfSxzaG93YWN0aXZlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxidXR0b25zOmMseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDotLjA1fSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoicmlnaHQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjF9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSxwYWQ6YShzKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHt9KSxmb250Om4oe30pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuYm9yZGVyTGluZX0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4NSwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjYxOCwiLi4vY29sb3IvYXR0cmlidXRlcyI6MzY1fV0sNDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToidXBkYXRlbWVudXMiLGNvbnRhaW5lckNsYXNzTmFtZToidXBkYXRlbWVudS1jb250YWluZXIiLGhlYWRlckdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1ncm91cCIsaGVhZGVyQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlciIsaGVhZGVyQXJyb3dDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyLWFycm93Iixkcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbi1ncm91cCIsZHJvcGRvd25CdXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uIixidXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtYnV0dG9uIixpdGVtUmVjdENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXJlY3QiLGl0ZW1UZXh0Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWl0ZW0tdGV4dCIsbWVudUluZGV4QXR0ck5hbWU6InVwZGF0ZW1lbnUtYWN0aXZlLWluZGV4IixhdXRvTWFyZ2luSWRSb290OiJ1cGRhdGVtZW51LSIsYmxhbmtIZWFkZXJPcHRzOntsYWJlbDoiICAifSxtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6MjQsYXJyb3dQYWRYOjE2LHJ4OjIscnk6Mix0ZXh0T2Zmc2V0WDoxMix0ZXh0T2Zmc2V0WTozLGFycm93T2Zmc2V0WDo0LGdhcEJ1dHRvbkhlYWRlcjo1LGdhcEJ1dHRvbjoyLGFjdGl2ZUNvbG9yOiIjRjRGQUZGIixob3ZlckNvbG9yOiIjRjRGQUZGIixhcnJvd1N5bWJvbDp7bGVmdDoiXHUyNWM0IixyaWdodDoiXHUyNWJhIix1cDoiXHUyNWIyIixkb3duOiJcdTI1YmMifX19LHt9XSw0Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKS5uYW1lLHM9YS5idXR0b25zO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1vKCJ2aXNpYmxlIixpKHQsZSx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KS5sZW5ndGg+MCkmJihvKCJhY3RpdmUiKSxvKCJkaXJlY3Rpb24iKSxvKCJ0eXBlIiksbygic2hvd2FjdGl2ZSIpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJwYWQudCIpLG8oInBhZC5yIiksbygicGFkLmIiKSxvKCJwYWQubCIpLG4uY29lcmNlRm9udChvLCJmb250IixyLmZvbnQpLG8oImJnY29sb3IiLHIucGFwZXJfYmdjb2xvciksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpKX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXIoInZpc2libGUiLCJza2lwIj09PXQubWV0aG9kfHxBcnJheS5pc0FycmF5KHQuYXJncykpJiYocigibWV0aG9kIikscigiYXJncyIpLHIoImFyZ3MyIikscigibGFiZWwiKSxyKCJleGVjdXRlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ5LCIuL2F0dHJpYnV0ZXMiOjQ2NSwiLi9jb25zdGFudHMiOjQ2Nn1dLDQ2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLGY9dCgiLi9jb25zdGFudHMiKSxoPXQoIi4vc2Nyb2xsYm94Iik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gZCh0LGUpe3JldHVybit0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSk9PT1lLl9pbmRleH1mdW5jdGlvbiBtKHQsZSxyLG4saSxhLG8scyl7ZS5hY3RpdmU9byxjKHQubGF5b3V0LGYubmFtZSxlKS5hcHBseVVwZGF0ZSgiYWN0aXZlIixvKSwiYnV0dG9ucyI9PT1lLnR5cGU/dih0LG4sbnVsbCxudWxsLGUpOiJkcm9wZG93biI9PT1lLnR5cGUmJihpLmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSwiLTEiKSxnKHQsbixpLGEsZSksc3x8dih0LG4saSxhLGUpKX1mdW5jdGlvbiBnKHQsZSxyLG4saSl7dmFyIGE9cy5lbnN1cmVTaW5nbGUoZSwiZyIsZi5oZWFkZXJDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSksbD1pLl9kaW1zLGM9aS5hY3RpdmUsdT1pLmJ1dHRvbnNbY118fGYuYmxhbmtIZWFkZXJPcHRzLGg9e3k6aS5wYWQudCx5UGFkOjAseDppLnBhZC5sLHhQYWQ6MCxpbmRleDowfSxwPXt3aWR0aDpsLmhlYWRlcldpZHRoLGhlaWdodDpsLmhlYWRlckhlaWdodH07YS5jYWxsKHksaSx1LHQpLmNhbGwoTSxpLGgscCkscy5lbnN1cmVTaW5nbGUoZSwidGV4dCIsZi5oZWFkZXJBcnJvd0NsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmNhbGwoby5mb250LGkuZm9udCkudGV4dChmLmFycm93U3ltYm9sW2kuZGlyZWN0aW9uXSl9KSkuYXR0cih7eDpsLmhlYWRlcldpZHRoLWYuYXJyb3dPZmZzZXRYK2kucGFkLmwseTpsLmhlYWRlckhlaWdodC8yK2YudGV4dE9mZnNldFkraS5wYWQudH0pLGEub24oImNsaWNrIiwoZnVuY3Rpb24oKXtyLmNhbGwoUyxTdHJpbmcoZChyLGkpPy0xOmkuX2luZGV4KSksdih0LGUscixuLGkpfSkpLGEub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7YS5jYWxsKHcpfSkpLGEub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXthLmNhbGwoVCxpKX0pKSxvLnNldFRyYW5zbGF0ZShlLGwubHgsbC5seSl9ZnVuY3Rpb24gdih0LGUscixhLG8pe3J8fChyPWUpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7dmFyIGw9ZnVuY3Rpb24odCl7cmV0dXJuLTE9PSt0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSl9KHIpJiYiYnV0dG9ucyIhPT1vLnR5cGU/W106by5idXR0b25zLGM9ImRyb3Bkb3duIj09PW8udHlwZT9mLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOmYuYnV0dG9uQ2xhc3NOYW1lLHU9ci5zZWxlY3RBbGwoImcuIitjKS5kYXRhKHMuZmlsdGVyVmlzaWJsZShsKSksaD11LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChjLCEwKSxwPXUuZXhpdCgpOyJkcm9wZG93biI9PT1vLnR5cGU/KGguYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKSxwLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciBkPTAsZz0wLHY9by5fZGltcyx4PS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKG8uZGlyZWN0aW9uKTsiZHJvcGRvd24iPT09by50eXBlJiYoeD9nPXYuaGVhZGVySGVpZ2h0K2YuZ2FwQnV0dG9uSGVhZGVyOmQ9di5oZWFkZXJXaWR0aCtmLmdhcEJ1dHRvbkhlYWRlciksImRyb3Bkb3duIj09PW8udHlwZSYmInVwIj09PW8uZGlyZWN0aW9uJiYoZz0tZi5nYXBCdXR0b25IZWFkZXIrZi5nYXBCdXR0b24tdi5vcGVuSGVpZ2h0KSwiZHJvcGRvd24iPT09by50eXBlJiYibGVmdCI9PT1vLmRpcmVjdGlvbiYmKGQ9LWYuZ2FwQnV0dG9uSGVhZGVyK2YuZ2FwQnV0dG9uLXYub3BlbldpZHRoKTt2YXIgYj17eDp2Lmx4K2Qrby5wYWQubCx5OnYubHkrZytvLnBhZC50LHlQYWQ6Zi5nYXBCdXR0b24seFBhZDpmLmdhcEJ1dHRvbixpbmRleDowfSxrPXtsOmIueCtvLmJvcmRlcndpZHRoLHQ6Yi55K28uYm9yZGVyd2lkdGh9O3UuZWFjaCgoZnVuY3Rpb24ocyxsKXt2YXIgYz1uLnNlbGVjdCh0aGlzKTtjLmNhbGwoeSxvLHMsdCkuY2FsbChNLG8sYiksYy5vbigiY2xpY2siLChmdW5jdGlvbigpe24uZXZlbnQuZGVmYXVsdFByZXZlbnRlZHx8KHMuZXhlY3V0ZSYmKHMuYXJnczImJm8uYWN0aXZlPT09bD8obSh0LG8sMCxlLHIsYSwtMSksaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJnczIpKToobSh0LG8sMCxlLHIsYSxsKSxpLmV4ZWN1dGVBUElDb21tYW5kKHQscy5tZXRob2Qscy5hcmdzKSkpLHQuZW1pdCgicGxvdGx5X2J1dHRvbmNsaWNrZWQiLHttZW51Om8sYnV0dG9uOnMsYWN0aXZlOm8uYWN0aXZlfSkpfSkpLGMub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7Yy5jYWxsKHcpfSkpLGMub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtjLmNhbGwoVCxvKSx1LmNhbGwoXyxvKX0pKX0pKSx1LmNhbGwoXyxvKSx4PyhrLnc9TWF0aC5tYXgodi5vcGVuV2lkdGgsdi5oZWFkZXJXaWR0aCksay5oPWIueS1rLnQpOihrLnc9Yi54LWsubCxrLmg9TWF0aC5tYXgodi5vcGVuSGVpZ2h0LHYuaGVhZGVySGVpZ2h0KSksay5kaXJlY3Rpb249by5kaXJlY3Rpb24sYSYmKHUuc2l6ZSgpP2Z1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsYz1pLmRpcmVjdGlvbix1PSJ1cCI9PT1jfHwiZG93biI9PT1jLGg9aS5fZGltcyxwPWkuYWN0aXZlO2lmKHUpZm9yKHM9MCxsPTA7bDxwO2wrKylzKz1oLmhlaWdodHNbbF0rZi5nYXBCdXR0b247ZWxzZSBmb3Iobz0wLGw9MDtsPHA7bCsrKW8rPWgud2lkdGhzW2xdK2YuZ2FwQnV0dG9uO24uZW5hYmxlKGEsbyxzKSxuLmhiYXImJm4uaGJhci5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpO24udmJhciYmbi52YmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIil9KDAsMCwwLGEsbyxrKTpmdW5jdGlvbih0KXt2YXIgZT0hIXQuaGJhcixyPSEhdC52YmFyO2UmJnQuaGJhci50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe2U9ITEscnx8dC5kaXNhYmxlKCl9KSk7ciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7cj0hMSxlfHx0LmRpc2FibGUoKX0pKX0oYSkpfWZ1bmN0aW9uIHkodCxlLHIsbil7dC5jYWxsKHgsZSkuY2FsbChiLGUscixuKX1mdW5jdGlvbiB4KHQsZSl7cy5lbnN1cmVTaW5nbGUodCwicmVjdCIsZi5pdGVtUmVjdENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHtyeDpmLnJ4LHJ5OmYucnksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuY2FsbChhLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGEuZmlsbCxlLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IixmLml0ZW1UZXh0Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoeyJ0ZXh0LWFuY2hvciI6InN0YXJ0IiwiZGF0YS1ub3RleCI6MX0pfSkpLGE9ci5sYWJlbCxjPW4uX2Z1bGxMYXlvdXQuX21ldGE7YyYmKGE9cy50ZW1wbGF0ZVN0cmluZyhhLGMpKSxpLmNhbGwoby5mb250LGUuZm9udCkudGV4dChhKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLG4pfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1lLmFjdGl2ZTt0LmVhY2goKGZ1bmN0aW9uKHQsaSl7dmFyIG89bi5zZWxlY3QodGhpcyk7aT09PXImJmUuc2hvd2FjdGl2ZSYmby5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxmLmFjdGl2ZUNvbG9yKX0pKX1mdW5jdGlvbiB3KHQpe3Quc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZi5ob3ZlckNvbG9yKX1mdW5jdGlvbiBUKHQsZSl7dC5zZWxlY3QoInJlY3QuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGEuZmlsbCxlLmJnY29sb3IpfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1lLl9kaW1zPXt3aWR0aDE6MCxoZWlnaHQxOjAsaGVpZ2h0czpbXSx3aWR0aHM6W10sdG90YWxXaWR0aDowLHRvdGFsSGVpZ2h0OjAsb3BlbldpZHRoOjAsb3BlbkhlaWdodDowLGx4OjAsbHk6MH0sYT1vLnRlc3Rlci5zZWxlY3RBbGwoImcuIitmLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5kYXRhKHMuZmlsdGVyVmlzaWJsZShlLmJ1dHRvbnMpKTthLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lLCEwKTt2YXIgYz0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihlLmRpcmVjdGlvbik7YS5lYWNoKChmdW5jdGlvbihpLGEpe3ZhciBzPW4uc2VsZWN0KHRoaXMpO3MuY2FsbCh5LGUsaSx0KTt2YXIgaD1zLnNlbGVjdCgiLiIrZi5pdGVtVGV4dENsYXNzTmFtZSkscD1oLm5vZGUoKSYmby5iQm94KGgubm9kZSgpKS53aWR0aCxkPU1hdGgubWF4KHArZi50ZXh0UGFkWCxmLm1pbldpZHRoKSxtPWUuZm9udC5zaXplKnUsZz1sLmxpbmVDb3VudChoKSx2PU1hdGgubWF4KG0qZyxmLm1pbkhlaWdodCkrZi50ZXh0T2Zmc2V0WTt2PU1hdGguY2VpbCh2KSxkPU1hdGguY2VpbChkKSxyLndpZHRoc1thXT1kLHIuaGVpZ2h0c1thXT12LHIuaGVpZ2h0MT1NYXRoLm1heChyLmhlaWdodDEsdiksci53aWR0aDE9TWF0aC5tYXgoci53aWR0aDEsZCksYz8oci50b3RhbFdpZHRoPU1hdGgubWF4KHIudG90YWxXaWR0aCxkKSxyLm9wZW5XaWR0aD1yLnRvdGFsV2lkdGgsci50b3RhbEhlaWdodCs9ditmLmdhcEJ1dHRvbixyLm9wZW5IZWlnaHQrPXYrZi5nYXBCdXR0b24pOihyLnRvdGFsV2lkdGgrPWQrZi5nYXBCdXR0b24sci5vcGVuV2lkdGgrPWQrZi5nYXBCdXR0b24sci50b3RhbEhlaWdodD1NYXRoLm1heChyLnRvdGFsSGVpZ2h0LHYpLHIub3BlbkhlaWdodD1yLnRvdGFsSGVpZ2h0KX0pKSxjP3IudG90YWxIZWlnaHQtPWYuZ2FwQnV0dG9uOnIudG90YWxXaWR0aC09Zi5nYXBCdXR0b24sci5oZWFkZXJXaWR0aD1yLndpZHRoMStmLmFycm93UGFkWCxyLmhlYWRlckhlaWdodD1yLmhlaWdodDEsImRyb3Bkb3duIj09PWUudHlwZSYmKGM/KHIud2lkdGgxKz1mLmFycm93UGFkWCxyLnRvdGFsSGVpZ2h0PXIuaGVpZ2h0MSk6ci50b3RhbFdpZHRoPXIud2lkdGgxLHIudG90YWxXaWR0aCs9Zi5hcnJvd1BhZFgpLGEucmVtb3ZlKCk7dmFyIGg9ci50b3RhbFdpZHRoK2UucGFkLmwrZS5wYWQucixwPXIudG90YWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iLGQ9dC5fZnVsbExheW91dC5fc2l6ZTtyLmx4PWQubCtkLncqZS54LHIubHk9ZC50K2QuaCooMS1lLnkpO3ZhciBtPSJsZWZ0IjtzLmlzUmlnaHRBbmNob3IoZSkmJihyLmx4LT1oLG09InJpZ2h0Iikscy5pc0NlbnRlckFuY2hvcihlKSYmKHIubHgtPWgvMixtPSJjZW50ZXIiKTt2YXIgZz0idG9wIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoci5seS09cCxnPSJib3R0b20iKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoci5seS09cC8yLGc9Im1pZGRsZSIpLHIudG90YWxXaWR0aD1NYXRoLmNlaWwoci50b3RhbFdpZHRoKSxyLnRvdGFsSGVpZ2h0PU1hdGguY2VpbChyLnRvdGFsSGVpZ2h0KSxyLmx4PU1hdGgucm91bmQoci5seCksci5seT1NYXRoLnJvdW5kKHIubHkpLGkuYXV0b01hcmdpbih0LEEoZSkse3g6ZS54LHk6ZS55LGw6aCooe3JpZ2h0OjEsY2VudGVyOi41fVttXXx8MCkscjpoKih7bGVmdDoxLGNlbnRlcjouNX1bbV18fDApLGI6cCooe3RvcDoxLG1pZGRsZTouNX1bZ118fDApLHQ6cCooe2JvdHRvbToxLG1pZGRsZTouNX1bZ118fDApfSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gZi5hdXRvTWFyZ2luSWRSb290K3QuX2luZGV4fWZ1bmN0aW9uIE0odCxlLHIsbil7bj1ufHx7fTt2YXIgaT10LnNlbGVjdCgiLiIrZi5pdGVtUmVjdENsYXNzTmFtZSksYT10LnNlbGVjdCgiLiIrZi5pdGVtVGV4dENsYXNzTmFtZSkscz1lLmJvcmRlcndpZHRoLGM9ci5pbmRleCxoPWUuX2RpbXM7by5zZXRUcmFuc2xhdGUodCxzK3IueCxzK3IueSk7dmFyIHA9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pLGQ9bi5oZWlnaHR8fChwP2guaGVpZ2h0c1tjXTpoLmhlaWdodDEpO2kuYXR0cih7eDowLHk6MCx3aWR0aDpuLndpZHRofHwocD9oLndpZHRoMTpoLndpZHRoc1tjXSksaGVpZ2h0OmR9KTt2YXIgbT1lLmZvbnQuc2l6ZSp1LGc9KGwubGluZUNvdW50KGEpLTEpKm0vMjtsLnBvc2l0aW9uVGV4dChhLGYudGV4dE9mZnNldFgsZC8yLWcrZi50ZXh0T2Zmc2V0WSkscD9yLnkrPWguaGVpZ2h0c1tjXStyLnlQYWQ6ci54Kz1oLndpZHRoc1tjXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIFModCxlKXt0LmF0dHIoZi5tZW51SW5kZXhBdHRyTmFtZSxlfHwiLTEiKS5zZWxlY3RBbGwoImcuIitmLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5yZW1vdmUoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXMuZmlsdGVyVmlzaWJsZShlW2YubmFtZV0pO2Z1bmN0aW9uIGEoZSl7aS5hdXRvTWFyZ2luKHQsQShlKSl9dmFyIG89ZS5fbWVudWxheWVyLnNlbGVjdEFsbCgiZy4iK2YuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihvLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxvLmV4aXQoKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2YuaGVhZGVyR3JvdXBDbGFzc05hbWUpLmVhY2goYSl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1vLnNlbGVjdEFsbCgiZy4iK2YuaGVhZGVyR3JvdXBDbGFzc05hbWUpLmRhdGEocixwKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmhlYWRlckdyb3VwQ2xhc3NOYW1lLCEwKTtmb3IodmFyIGM9cy5lbnN1cmVTaW5nbGUobywiZyIsZi5kcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIHk9clt1XTtrKHQseSl9dmFyIHg9InVwZGF0ZW1lbnVzIitlLl91aWQsYj1uZXcgaCh0LGMseCk7bC5lbnRlcigpLnNpemUoKSYmKGMubm9kZSgpLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYy5ub2RlKCkpLGMuY2FsbChTKSksbC5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7Yy5jYWxsKFMpLGEodCl9KSkucmVtb3ZlKCksbC5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPSJkcm9wZG93biI9PT1lLnR5cGU/YzpudWxsO2kubWFuYWdlQ29tbWFuZE9ic2VydmVyKHQsZSxlLmJ1dHRvbnMsKGZ1bmN0aW9uKG4pe20odCxlLGUuYnV0dG9uc1tuLmluZGV4XSxyLGEsYixuLmluZGV4LCEwKX0pKSwiZHJvcGRvd24iPT09ZS50eXBlPyhnKHQscixjLGIsZSksZChjLGUpJiZ2KHQscixjLGIsZSkpOnYodCxyLG51bGwsbnVsbCxlKX0pKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ3MSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTksIi4uL2NvbG9yIjozNjYsIi4uL2RyYXdpbmciOjM4OCwiLi9jb25zdGFudHMiOjQ2NiwiLi9zY3JvbGxib3giOjQ3MCwiQHBsb3RseS9kMyI6NTh9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNDYzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9hdHRyaWJ1dGVzIjo0NjUsIi4vY29uc3RhbnRzIjo0NjYsIi4vZGVmYXVsdHMiOjQ2NywiLi9kcmF3Ijo0NjgsZHVwOjQ2M31dLDQ3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9czt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5nZD10LHRoaXMuY29udGFpbmVyPWUsdGhpcy5pZD1yLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLnRyYW5zbGF0ZVg9bnVsbCx0aGlzLnRyYW5zbGF0ZVk9bnVsbCx0aGlzLmhiYXI9bnVsbCx0aGlzLnZiYXI9bnVsbCx0aGlzLmJnPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxib3gtYmciKS5kYXRhKFswXSksdGhpcy5iZy5leGl0KCkub24oIi5kcmFnIixudWxsKS5vbigid2hlZWwiLG51bGwpLnJlbW92ZSgpLHRoaXMuYmcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxib3gtYmciLCEwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKHtvcGFjaXR5OjAseDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9cy5iYXJXaWR0aD0yLHMuYmFyTGVuZ3RoPTIwLHMuYmFyUmFkaXVzPTIscy5iYXJQYWQ9MSxzLmJhckNvbG9yPSIjODA4QkE0IixzLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXRoaXMuZ2QuX2Z1bGxMYXlvdXQsbD1vLndpZHRoLGM9by5oZWlnaHQ7dGhpcy5wb3NpdGlvbj10O3ZhciB1LGYsaCxwLGQ9dGhpcy5wb3NpdGlvbi5sLG09dGhpcy5wb3NpdGlvbi53LGc9dGhpcy5wb3NpdGlvbi50LHY9dGhpcy5wb3NpdGlvbi5oLHk9dGhpcy5wb3NpdGlvbi5kaXJlY3Rpb24seD0iZG93biI9PT15LGI9ImxlZnQiPT09eSxfPSJ1cCI9PT15LHc9bSxUPXY7eHx8Ynx8InJpZ2h0Ij09PXl8fF98fCh0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbj0iZG93biIseD0hMCkseHx8Xz8oZj0odT1kKSt3LHg/KGg9ZyxUPShwPU1hdGgubWluKGgrVCxjKSktaCk6VD0ocD1nK1QpLShoPU1hdGgubWF4KHAtVCwwKSkpOihwPShoPWcpK1QsYj93PShmPWQrdyktKHU9TWF0aC5tYXgoZi13LDApKToodT1kLHc9KGY9TWF0aC5taW4odSt3LGwpKS11KSksdGhpcy5fYm94PXtsOnUsdDpoLHc6dyxoOlR9O3ZhciBrPW0+dyxBPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTT1zLmJhcldpZHRoKzIqcy5iYXJQYWQsUz1kLEU9Zyt2O0UrTT5jJiYoRT1jLU0pO3ZhciBMPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoaz9bMF06W10pO0wuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksTC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChpLmZpbGwscy5iYXJDb2xvciksaz8odGhpcy5oYmFyPUwuYXR0cih7cng6cy5iYXJSYWRpdXMscnk6cy5iYXJSYWRpdXMseDpTLHk6RSx3aWR0aDpBLGhlaWdodDpNfSksdGhpcy5faGJhclhNaW49UytBLzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD13LUEpOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIEM9dj5ULFA9cy5iYXJXaWR0aCsyKnMuYmFyUGFkLEk9cy5iYXJMZW5ndGgrMipzLmJhclBhZCxPPWQrbSx6PWc7TytQPmwmJihPPWwtUCk7dmFyIEQ9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoQz9bMF06W10pO0QuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksRC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLEM/KHRoaXMudmJhcj1ELmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6Tyx5Onosd2lkdGg6UCxoZWlnaHQ6SX0pLHRoaXMuX3ZiYXJZTWluPXorSS8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9VC1JKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBSPXRoaXMuaWQsRj11LS41LEI9Qz9mK1ArLjU6ZisuNSxOPWgtLjUsaj1rP3ArTSsuNTpwKy41LFU9by5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK1IpLmRhdGEoa3x8Qz9bMF06W10pO2lmKFUuZXhpdCgpLnJlbW92ZSgpLFUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLFIpLmFwcGVuZCgicmVjdCIpLGt8fEM/KHRoaXMuX2NsaXBSZWN0PVUuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKEYpLHk6TWF0aC5mbG9vcihOKSx3aWR0aDpNYXRoLmNlaWwoQiktTWF0aC5mbG9vcihGKSxoZWlnaHQ6TWF0aC5jZWlsKGopLU1hdGguZmxvb3IoTil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0Q2xpcFVybCxSLHRoaXMuZ2QpLHRoaXMuYmcuYXR0cih7eDpkLHk6Zyx3aWR0aDptLGhlaWdodDp2fSkpOih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSxrfHxDKXt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCl9KSkub24oImRyYWciLHRoaXMuX29uQm94RHJhZy5iaW5kKHRoaXMpKTt0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCJ3aGVlbCIsdGhpcy5fb25Cb3hXaGVlbC5iaW5kKHRoaXMpKS5vbigiLmRyYWciLG51bGwpLmNhbGwoVik7dmFyIEg9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KSkub24oImRyYWciLHRoaXMuX29uQmFyRHJhZy5iaW5kKHRoaXMpKTtrJiZ0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKEgpLEMmJnRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLmNhbGwoSCl9dGhpcy5zZXRUcmFuc2xhdGUoZSxyKX0scy5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpeyh0aGlzLmhiYXJ8fHRoaXMudmJhcikmJih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChhLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSx0aGlzLmhiYXImJih0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLmhiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpLHRoaXMudmJhciYmKHRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLHRoaXMudmJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9LHMucHJvdG90eXBlLl9vbkJveERyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodC09bi5ldmVudC5keCksdGhpcy52YmFyJiYoZS09bi5ldmVudC5keSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQm94V2hlZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodCs9bi5ldmVudC5kZWx0YVkpLHRoaXMudmJhciYmKGUrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25CYXJEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO2lmKHRoaXMuaGJhcil7dmFyIHI9dCt0aGlzLl9oYmFyWE1pbixpPXIrdGhpcy5faGJhclRyYW5zbGF0ZU1heDt0PShvLmNvbnN0cmFpbihuLmV2ZW50LngscixpKS1yKS8oaS1yKSoodGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53KX1pZih0aGlzLnZiYXIpe3ZhciBhPWUrdGhpcy5fdmJhcllNaW4scz1hK3RoaXMuX3ZiYXJUcmFuc2xhdGVNYXg7ZT0oby5jb25zdHJhaW4obi5ldmVudC55LGEscyktYSkvKHMtYSkqKHRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaCl9dGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53LG49dGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oO2lmKHQ9by5jb25zdHJhaW4odHx8MCwwLHIpLGU9by5jb25zdHJhaW4oZXx8MCwwLG4pLHRoaXMudHJhbnNsYXRlWD10LHRoaXMudHJhbnNsYXRlWT1lLHRoaXMuY29udGFpbmVyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdGhpcy5fYm94LmwtdGhpcy5wb3NpdGlvbi5sLXQsdGhpcy5fYm94LnQtdGhpcy5wb3NpdGlvbi50LWUpLHRoaXMuX2NsaXBSZWN0JiZ0aGlzLl9jbGlwUmVjdC5hdHRyKHt4Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi5sK3QtLjUpLHk6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLnQrZS0uNSl9KSx0aGlzLmhiYXIpe3ZhciBpPXQvcjt0aGlzLmhiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0K2kqdGhpcy5faGJhclRyYW5zbGF0ZU1heCxlKX1pZih0aGlzLnZiYXIpe3ZhciBzPWUvbjt0aGlzLnZiYXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0LGUrcyp0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9jb2xvciI6MzY2LCIuLi9kcmF3aW5nIjozODgsIkBwbG90bHkvZDMiOjU4fV0sNDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17RlJPTV9CTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sRlJPTV9UTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbToxLG1pZGRsZTouNSx0b3A6MH0sRlJPTV9CUjp7bGVmdDoxLGNlbnRlcjouNSxyaWdodDowLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sTElORV9TUEFDSU5HOjEuMyxDQVBfU0hJRlQ6LjcsTUlEX1NISUZUOi4zNSxPUFBPU0lURV9TSURFOntsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiYm90dG9tIixib3R0b206InRvcCJ9fX0se31dLDQ3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F4aXNSZWZEZXNjcmlwdGlvbjpmdW5jdGlvbih0LGUscil7cmV0dXJuWyJJZiBzZXQgdG8gYSIsdCwiYXhpcyBpZCAoZS5nLiAqIit0KyIqIG9yIiwiKiIrdCsiMiopLCB0aGUgYCIrdCsiYCBwb3NpdGlvbiByZWZlcnMgdG8gYSIsdCwiY29vcmRpbmF0ZS4gSWYgc2V0IHRvICpwYXBlciosIHRoZSBgIit0KyJgIiwicG9zaXRpb24gcmVmZXJzIHRvIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSIsZSwib2YgdGhlIHBsb3R0aW5nIiwiYXJlYSBpbiBub3JtYWxpemVkIGNvb3JkaW5hdGVzIHdoZXJlICowKiAoKjEqKSBjb3JyZXNwb25kcyB0byB0aGUiLGUsIigiK3IrIikuIElmIHNldCB0byBhIix0LCJheGlzIElEIGZvbGxvd2VkIGJ5IiwiKmRvbWFpbiogKHNlcGFyYXRlZCBieSBhIHNwYWNlKSwgdGhlIHBvc2l0aW9uIGJlaGF2ZXMgbGlrZSBmb3IiLCIqcGFwZXIqLCBidXQgcmVmZXJzIHRvIHRoZSBkaXN0YW5jZSBpbiBmcmFjdGlvbnMgb2YgdGhlIGRvbWFpbiIsImxlbmd0aCBmcm9tIHRoZSIsZSwib2YgdGhlIGRvbWFpbiBvZiB0aGF0IGF4aXM6IGUuZy4sIiwiKiIrdCsiMiBkb21haW4qIHJlZmVycyB0byB0aGUgZG9tYWluIG9mIHRoZSBzZWNvbmQiLHQsIiBheGlzIGFuZCBhIix0LCJwb3NpdGlvbiBvZiAwLjUgcmVmZXJzIHRvIHRoZSIsInBvaW50IGJldHdlZW4gdGhlIixlLCJhbmQgdGhlIixyLCJvZiB0aGUgZG9tYWluIG9mIHRoZSIsInNlY29uZCIsdCwiYXhpcy4iXS5qb2luKCIgIil9fX0se31dLDQ3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0lOQ1JFQVNJTkc6e0NPTE9SOiIjM0Q5OTcwIixTWU1CT0w6Ilx1MjViMiJ9LERFQ1JFQVNJTkc6e0NPTE9SOiIjRkY0MTM2IixTWU1CT0w6Ilx1MjViYyJ9fX0se31dLDQ3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0ZPUk1BVF9MSU5LOiJodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtZm9ybWF0L3RyZWUvdjEuNC41I2QzLWZvcm1hdCIsREFURV9GT1JNQVRfTElOSzoiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXRpbWUtZm9ybWF0L3RyZWUvdjIuMi4zI2xvY2FsZV9mb3JtYXQifX0se31dLDQ3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NPTVBBUklTT05fT1BTOlsiPSIsIiE9IiwiPCIsIj49IiwiPiIsIjw9Il0sQ09NUEFSSVNPTl9PUFMyOlsiPSIsIjwiLCI+PSIsIj4iLCI8PSJdLElOVEVSVkFMX09QUzpbIltdIiwiKCkiLCJbKSIsIihdIiwiXVsiLCIpKCIsIl0oIiwiKVsiXSxTRVRfT1BTOlsie30iLCJ9eyJdLENPTlNUUkFJTlRfUkVEVUNUSU9OOnsiPSI6Ij0iLCI8IjoiPCIsIjw9IjoiPCIsIj4iOiI+IiwiPj0iOiI+IiwiW10iOiJbXSIsIigpIjoiW10iLCJbKSI6IltdIiwiKF0iOiJbXSIsIl1bIjoiXVsiLCIpKCI6Il1bIiwiXSgiOiJdWyIsIilbIjoiXVsifX19LHt9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzb2xpZDpbW10sMF0sZG90OltbLjUsMV0sMjAwXSxkYXNoOltbLjUsMV0sNTBdLGxvbmdkYXNoOltbLjUsMV0sMTBdLGRhc2hkb3Q6W1suNSwuNjI1LC44NzUsMV0sNTBdLGxvbmdkYXNoZG90OltbLjUsLjcsLjgsMV0sMTBdfX0se31dLDQ3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NpcmNsZToiXHUyNWNmIiwiY2lyY2xlLW9wZW4iOiJcdTI1Y2IiLHNxdWFyZToiXHUyNWEwIiwic3F1YXJlLW9wZW4iOiJcdTI1YTEiLGRpYW1vbmQ6Ilx1MjVjNiIsImRpYW1vbmQtb3BlbiI6Ilx1MjVjNyIsY3Jvc3M6IisiLHg6Ilx1Mjc0YyJ9fSx7fV0sNDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17U0hPV19QTEFDRUhPTERFUjoxMDAsSElERV9QTEFDRUhPTERFUjoxZTMsREVTRUxFQ1RESU06LjJ9fSx7fV0sNDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17QkFETlVNOnZvaWQgMCxGUF9TQUZFOjFlLTQqTnVtYmVyLk1BWF9WQUxVRSxPTkVNQVhZRUFSOjMxNjIyNGU1LE9ORUFWR1lFQVI6MzE1NTc2ZTUsT05FTUlOWUVBUjozMTUzNmU2LE9ORU1BWFFVQVJURVI6Nzk0ODhlNSxPTkVBVkdRVUFSVEVSOjc4ODk0ZTUsT05FTUlOUVVBUlRFUjo3Njg5NmU1LE9ORU1BWE1PTlRIOjI2Nzg0ZTUsT05FQVZHTU9OVEg6MjYyOThlNSxPTkVNSU5NT05USDoyNDE5MmU1LE9ORVdFRUs6NjA0OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDouOTk5OTk5LExPR19DTElQOjEwLE1JTlVTX1NJR046Ilx1MjIxMiJ9fSx7fV0sNDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IueG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixyLnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIueGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHIuc3ZnQXR0cnM9e3htbG5zOnIuc3ZnLCJ4bWxuczp4bGluayI6ci54bGlua319LHt9XSw0ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPXQoIi4vdmVyc2lvbiIpLnZlcnNpb24sdCgibmF0aXZlLXByb21pc2Utb25seSIpLHQoIi4uL2J1aWxkL3Bsb3Rjc3MiKTtmb3IodmFyIG49dCgiLi9yZWdpc3RyeSIpLGk9ci5yZWdpc3Rlcj1uLnJlZ2lzdGVyLGE9dCgiLi9wbG90X2FwaSIpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdOyJfIiE9PWwuY2hhckF0KDApJiYocltsXT1hW2xdKSxpKHttb2R1bGVUeXBlOiJhcGlNZXRob2QiLG5hbWU6bCxmbjphW2xdfSl9aSh0KCIuL3RyYWNlcy9zY2F0dGVyIikpLGkoW3QoIi4vY29tcG9uZW50cy9sZWdlbmQiKSx0KCIuL2NvbXBvbmVudHMvZngiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCIpLHQoIi4vY29tcG9uZW50cy9zaGFwZXMiKSx0KCIuL2NvbXBvbmVudHMvaW1hZ2VzIiksdCgiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIiksdCgiLi9jb21wb25lbnRzL3NsaWRlcnMiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciIpLHQoIi4vY29tcG9uZW50cy9ncmlkIiksdCgiLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLHQoIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksdCgiLi9jb21wb25lbnRzL2NvbG9yYmFyIiksdCgiLi9jb21wb25lbnRzL21vZGViYXIiKV0pLGkoW3QoIi4vbG9jYWxlLWVuIiksdCgiLi9sb2NhbGUtZW4tdXMiKV0pLHdpbmRvdy5QbG90bHlMb2NhbGVzJiZBcnJheS5pc0FycmF5KHdpbmRvdy5QbG90bHlMb2NhbGVzKSYmKGkod2luZG93LlBsb3RseUxvY2FsZXMpLGRlbGV0ZSB3aW5kb3cuUGxvdGx5TG9jYWxlcyksci5JY29ucz10KCIuL2ZvbnRzL3Bsb3RpY29uIik7dmFyIGM9dCgiLi9jb21wb25lbnRzL2Z4IiksdT10KCIuL3Bsb3RzL3Bsb3RzIik7ci5QbG90cz17cmVzaXplOnUucmVzaXplLGdyYXBoSnNvbjp1LmdyYXBoSnNvbixzZW5kRGF0YVRvQ2xvdWQ6dS5zZW5kRGF0YVRvQ2xvdWR9LHIuRng9e2hvdmVyOmMuaG92ZXIsdW5ob3ZlcjpjLnVuaG92ZXIsbG9uZUhvdmVyOmMubG9uZUhvdmVyLGxvbmVVbmhvdmVyOmMubG9uZVVuaG92ZXJ9LHIuU25hcHNob3Q9dCgiLi9zbmFwc2hvdCIpLHIuUGxvdFNjaGVtYT10KCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIil9LHsiLi4vYnVpbGQvcGxvdGNzcyI6MSwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIjozNTcsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIjozNjIsIi4vY29tcG9uZW50cy9jb2xvcmJhciI6MzcyLCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6Mzc4LCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIjozOTQsIi4vY29tcG9uZW50cy9meCI6NDA2LCIuL2NvbXBvbmVudHMvZ3JpZCI6NDEwLCIuL2NvbXBvbmVudHMvaW1hZ2VzIjo0MTUsIi4vY29tcG9uZW50cy9sZWdlbmQiOjQyMywiLi9jb21wb25lbnRzL21vZGViYXIiOjQyOSwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiOjQzNywiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIjo0NDQsIi4vY29tcG9uZW50cy9zaGFwZXMiOjQ1OCwiLi9jb21wb25lbnRzL3NsaWRlcnMiOjQ2MywiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIjo0NjksIi4vZm9udHMvcGxvdGljb24iOjQ4MiwiLi9sb2NhbGUtZW4iOjUzNCwiLi9sb2NhbGUtZW4tdXMiOjUzMywiLi9wbG90X2FwaSI6NTM4LCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo1NDIsIi4vcGxvdHMvcGxvdHMiOjYxOSwiLi9yZWdpc3RyeSI6NjM4LCIuL3NuYXBzaG90Ijo2NDMsIi4vdHJhY2VzL3NjYXR0ZXIiOjkzOCwiLi92ZXJzaW9uIjoxMTE5LCJuYXRpdmUtcHJvbWlzZS1vbmx5IjoyNDV9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwYW46e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sYXV0b3NjYWxlOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOiJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBsb3RseWxvZ286e3dpZHRoOjE1NDIsaGVpZ2h0OjFlMyxwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sInotYXhpcyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTM4IDQxM2wtMTg4LTEyNWMwIDM3LTE3IDcxLTQ0IDk0IDY0IDM4IDEwNyAxMDcgMTA3IDE4NyAwIDEyMS05OCAyMTktMjE5IDIxOS0xMjEgMC0yMTktOTgtMjE5LTIxOSAwLTYxIDI1LTExNyA2Ni0xNTZoLTExNWMzMCAzMyA0OSA3NiA0OSAxMjUgMCAxMDMtODQgMTg3LTE4NyAxODdzLTE4OC04NC0xODgtMTg3YzAtNTcgMjYtMTA3IDY1LTE0MS0zOC0yMi02NS02Mi02NS0xMDl2LTI1MGMwLTcwIDU2LTEyNiAxMjUtMTI2aDUwMGM2OSAwIDEyNSA1NiAxMjUgMTI2bDE4OC0xMjZjMzQgMCA2MiAyOCA2MiA2M3YzNzVjMCAzNS0yOCA2My02MiA2M3ogbS03NTAgMGMtNjkgMC0xMjUgNTYtMTI1IDEyNXM1NiAxMjUgMTI1IDEyNSAxMjUtNTYgMTI1LTEyNS01Ni0xMjUtMTI1LTEyNXogbTQwNi0xYy04NyAwLTE1NyA3MC0xNTcgMTU3IDAgODYgNzAgMTU2IDE1NyAxNTZzMTU2LTcwIDE1Ni0xNTYtNzAtMTU3LTE1Ni0xNTd6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd29wZW5wYXRoOnt3aWR0aDo3MCxoZWlnaHQ6NzAscGF0aDoiTTMzLjIxLDg1LjY1YTcuMzEsNy4zMSwwLDAsMS0yLjU5LS40OGMtOC4xNi0zLjExLTkuMjctMTkuOC05Ljg4LTQxLjMtLjEtMy41OC0uMTktNi42OC0uMzUtOS0uMTUtMi4xLS42Ny0zLjQ4LTEuNDMtMy43OS0yLjEzLS44OC03LjkxLDIuMzItMTIsNS44NkwzLDMyLjM4YzEuODctMS42NCwxMS41NS05LjY2LDE4LjI3LTYuOSwyLjEzLjg3LDQuNzUsMy4xNCw1LjE3LDksLjE3LDIuNDMuMjYsNS41OS4zNiw5LjI1YTIyNC4xNywyMjQuMTcsMCwwLDAsMS41LDIzLjRjMS41NCwxMC43Niw0LDEyLjIyLDQuNDgsMTIuNC44NC4zMiwyLjc5LS40Niw1Ljc2LTMuNTlMNDMsODAuMDdDNDEuNTMsODEuNTcsMzcuNjgsODUuNjQsMzMuMjEsODUuNjVaTTc0LjgxLDY5YTExLjM0LDExLjM0LDAsMCwwLDYuMDktNi43Mkw4Ny4yNiw0NC41LDc0LjcyLDMyLDU2LjksMzguMzVjLTIuMzcuODYtNS41NywzLjQyLTYuNjEsNkwzOC42NSw3Mi4xNGw4LjQyLDguNDNaTTU1LDQ2LjI3YTcuOTEsNy45MSwwLDAsMSwzLjY0LTMuMTdsMTQuOC01LjMsOCw4TDc2LjExLDYwLjZsLS4wNi4xOWE2LjM3LDYuMzcsMCwwLDEtMywzLjQzTDQ4LjI1LDc0LjU5LDQ0LjYyLDcxWm0xNi41Nyw3LjgyQTYuOSw2LjksMCwxLDAsNjQuNjQsNjEsNi45MSw2LjkxLDAsMCwwLDcxLjU0LDU0LjA5Wm0tNC4wNSwwYTIuODUsMi44NSwwLDEsMS0yLjg1LTIuODVBMi44NiwyLjg2LDAsMCwxLDY3LjQ5LDU0LjA5Wm0tNC4xMyw1LjIyTDYwLjUsNTYuNDUsNDQuMjYsNzIuN2wyLjg2LDIuODZaTTk3LjgzLDM1LjY3LDg0LjE0LDIybC04LjU3LDguNTdMODkuMjYsNDQuMjRabS0xMy42OS04LDgsOC0yLjg1LDIuODUtOC04WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdjbG9zZWRwYXRoOnt3aWR0aDo5MCxoZWlnaHQ6OTAscGF0aDoiTTg4LjQxLDIxLjEyYTI2LjU2LDI2LjU2LDAsMCwwLTM2LjE4LDBsLTIuMDcsMi0yLjA3LTJhMjYuNTcsMjYuNTcsMCwwLDAtMzYuMTgsMCwyMy43NCwyMy43NCwwLDAsMCwwLDM0LjhMNDgsOTAuMTJhMy4yMiwzLjIyLDAsMCwwLDQuNDIsMGwzNi0zNC4yMWEyMy43MywyMy43MywwLDAsMCwwLTM0Ljc5Wk04NCw1MS4yNCw1MC4xNiw4My4zNSwxNi4zNSw1MS4yNWExNy4yOCwxNy4yOCwwLDAsMSwwLTI1LjQ3LDIwLDIwLDAsMCwxLDI3LjMsMGw0LjI5LDQuMDdhMy4yMywzLjIzLDAsMCwwLDQuNDQsMGw0LjI5LTQuMDdhMjAsMjAsMCwwLDEsMjcuMywwLDE3LjI3LDE3LjI3LDAsMCwxLDAsMjUuNDZaTTY2Ljc2LDQ3LjY4aC0zM3Y2LjkxaDMzWk01My4zNSwzNUg0Ni40NFY2OGg2LjkxWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtNSAtNSkifSxsYXNzbzp7d2lkdGg6MTAzMSxoZWlnaHQ6MWUzLHBhdGg6Im0xMDE4IDUzOGMtMzYgMjA3LTI5MCAzMzYtNTY4IDI4Ni0yNzctNDgtNDczLTI1Ni00MzYtNDYzIDEwLTU3IDM2LTEwOCA3Ni0xNTEtMTMtNjYgMTEtMTM3IDY4LTE4MyAzNC0yOCA3NS00MSAxMTQtNDJsLTU1LTcwIDAgMGMtMi0xLTMtMi00LTMtMTAtMTQtOC0zNCA1LTQ1IDE0LTExIDM0LTggNDUgNCAxIDEgMiAzIDIgNWwwIDAgMTEzIDE0MGMxNiAxMSAzMSAyNCA0NSA0MCA0IDMgNiA3IDggMTEgNDgtMyAxMDAgMCAxNTEgOSAyNzggNDggNDczIDI1NSA0MzYgNDYyeiBtLTYyNC0zNzljLTgwIDE0LTE0OSA0OC0xOTcgOTYgNDIgNDIgMTA5IDQ3IDE1NiA5IDMzLTI2IDQ3LTY2IDQxLTEwNXogbS0xODctNzRjLTE5IDE2LTMzIDM3LTM5IDYwIDUwLTMyIDEwOS01NSAxNzQtNjgtNDItMjUtOTUtMjQtMTM1IDh6IG0zNjAgNzVjLTM0LTctNjktOS0xMDItOCA4IDYyLTE2IDEyOC02OCAxNzAtNzMgNTktMTc1IDU0LTI0NC01LTkgMjAtMTYgNDAtMjAgNjEtMjggMTU5IDEyMSAzMTcgMzMzIDM1NHM0MDctNjAgNDM0LTIxN2MyOC0xNTktMTIxLTMxOC0zMzMtMzU1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sc2VsZWN0Ym94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMCA4NTBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODVsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd2xpbmU6e3dpZHRoOjcwLGhlaWdodDo3MCxwYXRoOiJNNjAuNjQsNjIuM2ExMS4yOSwxMS4yOSwwLDAsMCw2LjA5LTYuNzJsNi4zNS0xNy43Mkw2MC41NCwyNS4zMWwtMTcuODIsNi40Yy0yLjM2Ljg2LTUuNTcsMy40MS02LjYsNkwyNC40OCw2NS41bDguNDIsOC40MlpNNDAuNzksMzkuNjNhNy44OSw3Ljg5LDAsMCwxLDMuNjUtMy4xN2wxNC43OS01LjMxLDgsOEw2MS45NCw1NGwtLjA2LjE5YTYuNDQsNi40NCwwLDAsMS0zLDMuNDNMMzQuMDcsNjhsLTMuNjItMy42M1ptMTYuNTcsNy44MWE2LjksNi45LDAsMSwwLTYuODksNi45QTYuOSw2LjksMCwwLDAsNTcuMzYsNDcuNDRabS00LDBhMi44NiwyLjg2LDAsMSwxLTIuODUtMi44NUEyLjg2LDIuODYsMCwwLDEsNTMuMzIsNDcuNDRabS00LjEzLDUuMjJMNDYuMzMsNDkuOCwzMC4wOCw2Ni4wNWwyLjg2LDIuODZaTTgzLjY1LDI5LDcwLDE1LjM0LDYxLjQsMjMuOSw3NS4wOSwzNy41OVpNNzAsMjEuMDZsOCw4LTIuODQsMi44NS04LThaTTg3LDgwLjQ5SDEwLjY3Vjg3SDg3WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdyZWN0Ont3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTc4LDIyVjc5SDIxVjIySDc4bTktOUgxMlY4OEg4N1YxM1pNNjgsNDYuMjJIMzFWNTRINjhaTTUzLDMySDQ1LjIyVjY5SDUzWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LGRyYXdjaXJjbGU6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNNTAsODQuNzJDMjYuODQsODQuNzIsOCw2OS4yOCw4LDUwLjNTMjYuODQsMTUuODcsNTAsMTUuODcsOTIsMzEuMzEsOTIsNTAuMyw3My4xNiw4NC43Miw1MCw4NC43MlptMC02MC41OWMtMTguNiwwLTMzLjc0LDExLjc0LTMzLjc0LDI2LjE3UzMxLjQsNzYuNDYsNTAsNzYuNDYsODMuNzQsNjQuNzIsODMuNzQsNTAuMyw2OC42LDI0LjEzLDUwLDI0LjEzWm0xNy4xNSwyMmgtMzR2Ny4xMWgzNFptLTEzLjgtMTNINDYuMjR2MzRoNy4xMVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxlcmFzZXNoYXBlOnt3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTgyLjc3LDc4SDMxLjg1TDYsNDkuNTcsMzEuODUsMjEuMTRIODIuNzdhOC43Miw4LjcyLDAsMCwxLDguNjUsOC43N1Y2OS4yNEE4LjcyLDguNzIsMCwwLDEsODIuNzcsNzhaTTM1LjQ2LDY5Ljg0SDgyLjc3YS41Ny41NywwLDAsMCwuNDktLjZWMjkuOTFhLjU3LjU3LDAsMCwwLS40OS0uNjFIMzUuNDZMMTcsNDkuNTdabTMyLjY4LTM0LjctMjQsMjQsNSw1LDI0LTI0Wm0tMTksLjUzLTUsNSwyNCwyNCw1LTVaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sc3Bpa2VsaW5lOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJNNTEyIDQwOWMwLTU3LTQ2LTEwNC0xMDMtMTA0LTU3IDAtMTA0IDQ3LTEwNCAxMDQgMCA1NyA0NyAxMDMgMTA0IDEwMyA1NyAwIDEwMy00NiAxMDMtMTAzeiBtLTMyNy0zOWw5MiAwIDAgOTItOTIgMHogbS0xODUgMGw5MiAwIDAgOTItOTIgMHogbTM3MC0xODZsOTIgMCAwIDkzLTkyIDB6IG0wLTE4NGw5MiAwIDAgOTItOTIgMHoiLHRyYW5zZm9ybToibWF0cml4KDEuNSAwIDAgLTEuNSAwIDg1MCkifSxwZW5jaWw6e3dpZHRoOjE3OTIsaGVpZ2h0OjE3OTIscGF0aDoiTTQ5MSAxNTM2bDkxLTkxLTIzNS0yMzUtOTEgOTF2MTA3aDEyOHYxMjhoMTA3em01MjMtOTI4cTAtMjItMjItMjItMTAgMC0xNyA3bC01NDIgNTQycS03IDctNyAxNyAwIDIyIDIyIDIyIDEwIDAgMTctN2w1NDItNTQycTctNyA3LTE3em0tNTQtMTkybDQxNiA0MTYtODMyIDgzMmgtNDE2di00MTZ6bTY4MyA5NnEwIDUzLTM3IDkwbC0xNjYgMTY2LTQxNi00MTYgMTY2LTE2NXEzNi0zOCA5MC0zOCA1MyAwIDkxIDM4bDIzNSAyMzRxMzcgMzkgMzcgOTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIDAgMSkifSxuZXdwbG90bHlsb2dvOntuYW1lOiJuZXdwbG90bHlsb2dvIixzdmc6IjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTMyIDEzMic+PGRlZnM+PHN0eWxlPi5jbHMtMSB7ZmlsbDogIzNmNGY3NTt9IC5jbHMtMiB7ZmlsbDogIzgwY2ZiZTt9IC5jbHMtMyB7ZmlsbDogI2ZmZjt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPnBsb3RseS1sb2dvbWFyazwvdGl0bGU+PGcgaWQ9J3N5bWJvbCc+PHJlY3QgY2xhc3M9J2Nscy0xJyB3aWR0aD0nMTMyJyBoZWlnaHQ9JzEzMicgcng9JzYnIHJ5PSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzU0JyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PScxMDInIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNTQnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSc1NCcgcj0nNicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTMwLDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDMwLDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTc4LDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDc4LDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTU0LDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDU0LDQ4WicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTEwMiw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCwxMDIsNDhaJy8+PC9nPjwvc3ZnPiJ9fX0se31dLDQ4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4ibGVmdCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PD0xLzN9LHIuaXNDZW50ZXJBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImNlbnRlciI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PjEvMyYmdC54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJyaWdodCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInRvcCI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55Pj0yLzN9LHIuaXNNaWRkbGVBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIm1pZGRsZSI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55PjEvMyYmdC55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iYm90dG9tIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk8PTEvM319LHt9XSw0ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tb2QiKSxpPW4ubW9kLGE9bi5tb2RIYWxmLG89TWF0aC5QSSxzPTIqbztmdW5jdGlvbiBsKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXRbMF0pPnMtMWUtMTR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBhKGUtdCxzKX1mdW5jdGlvbiB1KHQsZSl7aWYobChlKSlyZXR1cm4hMDt2YXIgcixuO2VbMF08ZVsxXT8ocj1lWzBdLG49ZVsxXSk6KHI9ZVsxXSxuPWVbMF0pLChyPWkocixzKSk+KG49aShuLHMpKSYmKG4rPXMpO3ZhciBhPWkodCxzKSxvPWErcztyZXR1cm4gYT49ciYmYTw9bnx8bz49ciYmbzw9bn1mdW5jdGlvbiBmKHQsZSxyLG4saSxhLGMpe2k9aXx8MCxhPWF8fDA7dmFyIHUsZixoLHAsZCxtPWwoW3Isbl0pO2Z1bmN0aW9uIGcodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKStpLGEtdCpNYXRoLnNpbihlKV19bT8odT0wLGY9byxoPXMpOnI8bj8odT1yLGg9bik6KHU9bixoPXIpLHQ8ZT8ocD10LGQ9ZSk6KHA9ZSxkPXQpO3ZhciB2LHk9TWF0aC5hYnMoaC11KTw9bz8wOjE7ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIkEiK1t0LHRdKyIgIitbMCx5LHJdKyIgIitnKHQsZSl9cmV0dXJuIG0/dj1udWxsPT09cD8iTSIrZyhkLHUpK3goZCxmLDApK3goZCxoLDApKyJaIjoiTSIrZyhwLHUpK3gocCxmLDApK3gocCxoLDApKyJaTSIrZyhkLHUpK3goZCxmLDEpK3goZCxoLDEpKyJaIjpudWxsPT09cD8odj0iTSIrZyhkLHUpK3goZCxoLDApLGMmJih2Kz0iTDAsMFoiKSk6dj0iTSIrZyhwLHUpKyJMIitnKGQsdSkreChkLGgsMCkrIkwiK2cocCxoKSt4KHAsdSwxKSsiWiIsdn1lLmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoYyh0LGUpKX0saXNGdWxsQ2lyY2xlOmwsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF1KGUsbikmJihyWzBdPHJbMV0/KGk9clswXSxhPXJbMV0pOihpPXJbMV0sYT1yWzBdKSx0Pj1pJiZ0PD1hKTt2YXIgaSxhfSxwYXRoQXJjOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGYobnVsbCx0LGUscixuLGksMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZihudWxsLHQsZSxyLG4saSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBmKHQsZSxyLG4saSxhLDEpfX19LHsiLi9tb2QiOjUxMH1dLDQ4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1BcnJheS5pc0FycmF5LGk9QXJyYXlCdWZmZXIsYT1EYXRhVmlldztmdW5jdGlvbiBvKHQpe3JldHVybiBpLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0KXx8byh0KX1mdW5jdGlvbiBsKHQsZSxyKXtpZihzKHQpKXtpZihzKHRbMF0pKXtmb3IodmFyIG49cixpPTA7aTx0Lmxlbmd0aDtpKyspbj1lKG4sdFtpXS5sZW5ndGgpO3JldHVybiBufXJldHVybiB0Lmxlbmd0aH1yZXR1cm4gMH1yLmlzVHlwZWRBcnJheT1vLHIuaXNBcnJheU9yVHlwZWRBcnJheT1zLHIuaXNBcnJheTFEPWZ1bmN0aW9uKHQpe3JldHVybiFzKHRbMF0pfSxyLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCl8fCh0PVtdKSx0Lmxlbmd0aD1lLHR9LHIuY29uY2F0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGksYSxvLHMsbCxjPVtdLHU9ITAsZj0wO2ZvcihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKykobz0oaT1hcmd1bWVudHNbcl0pLmxlbmd0aCkmJihlP2MucHVzaChpKTooZT1pLGE9byksbihpKT90PSExOih1PSExLGY/dCE9PWkuY29uc3RydWN0b3ImJih0PSExKTp0PWkuY29uc3RydWN0b3IpLGYrPW8pO2lmKCFmKXJldHVybltdO2lmKCFjLmxlbmd0aClyZXR1cm4gZTtpZih1KXJldHVybiBlLmNvbmNhdC5hcHBseShlLGMpO2lmKHQpe2Zvcigocz1uZXcgdChmKSkuc2V0KGUpLHI9MDtyPGMubGVuZ3RoO3IrKylpPWNbcl0scy5zZXQoaSxhKSxhKz1pLmxlbmd0aDtyZXR1cm4gc31mb3Iocz1uZXcgQXJyYXkoZiksbD0wO2w8ZS5sZW5ndGg7bCsrKXNbbF09ZVtsXTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXtmb3IoaT1jW3JdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2ErbF09aVtsXTthKz1sfXJldHVybiBzfSxyLm1heFJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWF4LDApfSxyLm1pblJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWluLDEvMCl9fSx7fV0sNDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9L15bJyIlLCQjXHMnXSt8WywgXXxbJyIlLCQjXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsIiIpKSxuKHQpP051bWJlcih0KTppfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksImZhc3QtaXNudW1lcmljIjoxOTB9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fZ2xjYW52YXMmJmUuX2dsY2FudmFzLnNpemUoKSYmZS5fZ2xjYW52YXMuZWFjaCgoZnVuY3Rpb24odCl7dC5yZWdsJiZ0LnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KSl9fSx7fV0sNDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciksZGVsZXRlIHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpfX0se31dLDQ4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyIpLHM9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGM9dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSx1PXQoIi4vcmVnZXgiKS5jb3VudGVyLGY9dCgiLi9tb2QiKS5tb2RIYWxmLGg9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gcCh0LGUpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmaCh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9ci52YWxPYmplY3RNZXRhPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aCh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1TdHJpbmcocltuXSk7aWYoIi8iPT09aS5jaGFyQXQoMCkmJiIvIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGkuc3Vic3RyKDEsaS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPSJudW1iZXIiPT10eXBlb2YgdDshMCE9PW4uc3RyaWN0JiZpP2Uuc2V0KFN0cmluZyh0KSk6ZS5zZXQocil9ZWxzZSBuLm5vQmxhbmsmJiF0P2Uuc2V0KHIpOmUuc2V0KHQpfX0sY29sb3I6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtpKHQpLmlzVmFsaWQoKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9ybGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoJiZ0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5pc1ZhbGlkKCl9KSk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ZS5zZXQoby5nZXQodCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyJhdXRvIj09PXQ/ZS5zZXQoImF1dG8iKTpuKHQpP2Uuc2V0KGYoK3QsMzYwKSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fHUocik7InN0cmluZyI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHwic3RyaW5nIj09dHlwZW9mIHQmJiEhdShyKS50ZXN0KHQpfX0sZmxhZ2xpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KCIrIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oIisiKSk6ZS5zZXQocil9ZWxzZSBlLnNldCh0KTtlbHNlIGUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2Z1bmN0aW9uIGEodCxlLG4pe3ZhciBpLGE9e3NldDpmdW5jdGlvbih0KXtpPXR9fTtyZXR1cm4gdm9pZCAwPT09biYmKG49ZS5kZmx0KSxyLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbih0LGEsbixlKSxpfXZhciBvPTI9PT1pLmRpbWVuc2lvbnN8fCIxLTIiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGYsaCxwPWkuaXRlbXMsZD1bXSxtPUFycmF5LmlzQXJyYXkocCksZz1tJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLHY9byYmbSYmIWcseT1tJiYhdj9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxmPXY/cC5sZW5ndGg6bT9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxmO2wrKyl1PXY/cFtsXTptP3Bbc11bbF06cCx2b2lkIDAhPT0oaD1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWgpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShoPWEodFtzXSxtP3Bbc106cCxuW3NdKSkmJihkW3NdPWgpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighcCh0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFwKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89YyhuLGkpLmdldCgpLHM9Yyh0LGkpLGw9YyhlLGkpLHU9cy5nZXQoKSxmPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJmYmJih1PWMoZixpKS5nZXQoKSxmPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZoKHUpKXJldHVybiBsLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxsLGEsbyk7dmFyIG09bC5nZXQoKTtyZXR1cm4gZiYmbT09PWEmJiFwKHUsbykmJihkKHU9YyhmLGkpLmdldCgpLGwsYSxvKSxtPWwuZ2V0KCkpLG19LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWModCxpKSxzPXIuY29lcmNlKHQsZSxuLGksYSksbD1vLmdldCgpO3JldHVybiBudWxsIT1sJiZzfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZSsiLmZhbWlseSIsci5mYW1pbHkpLG4uc2l6ZT10KGUrIi5zaXplIixyLnNpemUpLG4uY29sb3I9dChlKyIuY29sb3IiLHIuY29sb3IpLG59LHIuY29lcmNlUGF0dGVybj1mdW5jdGlvbih0LGUscixuKXtpZih0KGUrIi5zaGFwZSIpKXt0KGUrIi5zb2xpZGl0eSIpLHQoZSsiLnNpemUiKTt2YXIgaT0ib3ZlcmxheSI9PT10KGUrIi5maWxsbW9kZSIpO2lmKCFuKXt2YXIgYT10KGUrIi5iZ2NvbG9yIixpP3I6dm9pZCAwKTt0KGUrIi5mZ2NvbG9yIixpP3MuY29udHJhc3QoYSk6cil9dChlKyIuZmdvcGFjaXR5IixpPy41OjEpfX0sci5jb2VyY2VIb3ZlcmluZm89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89ZS5fbW9kdWxlLmF0dHJpYnV0ZXMscz1vLmhvdmVyaW5mbz9vOmEsbD1zLmhvdmVyaW5mbztpZigxPT09bi5fZGF0YUxlbmd0aCl7dmFyIGM9ImFsbCI9PT1sLmRmbHQ/bC5mbGFncy5zbGljZSgpOmwuZGZsdC5zcGxpdCgiKyIpO2Muc3BsaWNlKGMuaW5kZXhPZigibmFtZSIpLDEpLGk9Yy5qb2luKCIrIil9cmV0dXJuIHIuY29lcmNlKHQsZSxzLCJob3ZlcmluZm8iLGkpfSxyLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9ZnVuY3Rpb24odCxlKXtpZih0Lm1hcmtlcil7dmFyIHIsbixpPXQubWFya2VyLm9wYWNpdHk7aWYodm9pZCAwIT09aSloKGkpfHx0LnNlbGVjdGVkfHx0LnVuc2VsZWN0ZWR8fChyPWksbj1sKmkpLGUoInNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixyKSxlKCJ1bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixuKX19LHIudmFsaWRhdGU9cH0seyIuLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiOjM4MSwiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NDc4LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4vYXJyYXkiOjQ4NSwiLi9tb2QiOjUxMCwiLi9uZXN0ZWRfcHJvcGVydHkiOjUxMSwiLi9yZWdleCI6NTIwLCJmYXN0LWlzbnVtZXJpYyI6MTkwLHRpbnljb2xvcjI6MzEyfV0sNDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCJkMy10aW1lLWZvcm1hdCIpLnRpbWVGb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi9sb2dnZXJzIiksbD10KCIuL21vZCIpLm1vZCxjPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSx1PWMuQkFETlVNLGY9Yy5PTkVEQVksaD1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLG09Yy5FUE9DSEpELGc9dCgiLi4vcmVnaXN0cnkiKSx2PXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LHk9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkKSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSx4PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSxiPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtmdW5jdGlvbiBfKHQpe3JldHVybiB0JiZnLmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgdCYmImdyZWdvcmlhbiIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF8odCk/ZT9nLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1NVTkRBWSIpW3RdOmcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfVElDSyIpW3RdOmU/IjIwMDAtMDEtMDIiOiIyMDAwLTAxLTAxIn0odCwhIWUpO2lmKGU8MilyZXR1cm4gbjt2YXIgaT1yLmRhdGVUaW1lMm1zKG4sdCk7cmV0dXJuIGkrPWYqKGUtMSksci5tczJEYXRlVGltZShpLDAsdCl9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP2cuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVt0XTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLHY9dC5jaGFyQXQoMCk7IWN8fCJHIiE9PXYmJiJnIiE9PXZ8fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciB3PWMmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNyksVD10Lm1hdGNoKHc/eDp5KTtpZighVClyZXR1cm4gdTt2YXIgaz1UWzFdLEE9VFszXXx8IjEiLE09TnVtYmVyKFRbNV18fDEpLFM9TnVtYmVyKFRbN118fDApLEU9TnVtYmVyKFRbOV18fDApLEw9TnVtYmVyKFRbMTFdfHwwKTtpZihjKXtpZigyPT09ay5sZW5ndGgpcmV0dXJuIHU7dmFyIEM7az1OdW1iZXIoayk7dHJ5e3ZhciBQPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZih3KXt2YXIgST0iaSI9PT1BLmNoYXJBdChBLmxlbmd0aC0xKTtBPXBhcnNlSW50KEEsMTApLEM9UC5uZXdEYXRlKGssUC50b01vbnRoSW5kZXgoayxBLEkpLE0pfWVsc2UgQz1QLm5ld0RhdGUoayxOdW1iZXIoQSksTSl9Y2F0Y2godCl7cmV0dXJuIHV9cmV0dXJuIEM/KEMudG9KRCgpLW0pKmYrUypoK0UqcCtMKmQ6dX1rPTI9PT1rLmxlbmd0aD8oTnVtYmVyKGspKzJlMy1iKSUxMDArYjpOdW1iZXIoayksQS09MTt2YXIgTz1uZXcgRGF0ZShEYXRlLlVUQygyZTMsQSxNLFMsRSkpO3JldHVybiBPLnNldFVUQ0Z1bGxZZWFyKGspLE8uZ2V0VVRDTW9udGgoKSE9PUF8fE8uZ2V0VVRDRGF0ZSgpIT09TT91Ok8uZ2V0VGltZSgpK0wqZH0sbj1yLk1JTl9NUz1yLmRhdGVUaW1lMm1zKCItOTk5OSIpLGk9ci5NQVhfTVM9ci5kYXRlVGltZTJtcygiOTk5OS0xMi0zMSAyMzo1OTo1OS45OTk5Iiksci5pc0RhdGVUaW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGF0ZVRpbWUybXModCxlKSE9PXV9O3ZhciBUPTkwKmYsaz0zKmgsQT01KnA7ZnVuY3Rpb24gTSh0LGUscixuLGkpe2lmKChlfHxyfHxufHxpKSYmKHQrPSIgIit3KGUsMikrIjoiK3cociwyKSwobnx8aSkmJih0Kz0iOiIrdyhuLDIpLGkpKSl7Zm9yKHZhciBhPTQ7aSUxMD09MDspYS09MSxpLz0xMDt0Kz0iLiIrdyhpLGEpfXJldHVybiB0fXIubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8ISh0Pj1uJiZ0PD1pKSlyZXR1cm4gdTtlfHwoZT0wKTt2YXIgYSxvLHMsYyx5LHgsYj1NYXRoLmZsb29yKDEwKmwodCsuMDUsMSkpLHc9TWF0aC5yb3VuZCh0LWIvMTApO2lmKF8ocikpe3ZhciBTPU1hdGguZmxvb3Iody9mKSttLEU9TWF0aC5mbG9vcihsKHQsZikpO3RyeXthPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoUykuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKHQpe2E9digiRyVZLSVtLSVkIikobmV3IERhdGUodykpfWlmKCItIj09PWEuY2hhckF0KDApKWZvcig7YS5sZW5ndGg8MTE7KWE9Ii0wIithLnN1YnN0cigxKTtlbHNlIGZvcig7YS5sZW5ndGg8MTA7KWE9IjAiK2E7bz1lPFQ/TWF0aC5mbG9vcihFL2gpOjAscz1lPFQ/TWF0aC5mbG9vcihFJWgvcCk6MCxjPWU8az9NYXRoLmZsb29yKEUlcC9kKTowLHk9ZTxBP0UlZCoxMCtiOjB9ZWxzZSB4PW5ldyBEYXRlKHcpLGE9digiJVktJW0tJWQiKSh4KSxvPWU8VD94LmdldFVUQ0hvdXJzKCk6MCxzPWU8VD94LmdldFVUQ01pbnV0ZXMoKTowLGM9ZTxrP3guZ2V0VVRDU2Vjb25kcygpOjAseT1lPEE/MTAqeC5nZXRVVENNaWxsaXNlY29uZHMoKStiOjA7cmV0dXJuIE0oYSxvLHMsYyx5KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49bitmJiZ0PD1pLWYpKXJldHVybiB1O3ZhciBlPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBNKGEoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrZSl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZih0PT09dSlyZXR1cm4gZTtpZihyLmlzSlNEYXRlKHQpfHwibnVtYmVyIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpKXtpZihfKG4pKXJldHVybiBzLmVycm9yKCJKUyBEYXRlcyBhbmQgbWlsbGlzZWNvbmRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB3b3JsZCBjYWxlbmRhcnMiLHQpLGU7aWYoISh0PXIubXMyRGF0ZVRpbWVMb2NhbCgrdCkpJiZ2b2lkIDAhPT1lKXJldHVybiBlfWVsc2UgaWYoIXIuaXNEYXRlVGltZSh0LG4pKXJldHVybiBzLmVycm9yKCJ1bnJlY29nbml6ZWQgZGF0ZSIsdCksZTtyZXR1cm4gdH07dmFyIFM9LyVcZD9mL2csRT0vJWgvZyxMPXsxOiIxIiwyOiIxIiwzOiIyIiw0OiIyIn07ZnVuY3Rpb24gQyh0LGUscixuKXt0PXQucmVwbGFjZShTLChmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pKTt2YXIgaT1uZXcgRGF0ZShNYXRoLmZsb29yKGUrLjA1KSk7aWYodD10LnJlcGxhY2UoRSwoZnVuY3Rpb24oKXtyZXR1cm4gTFtyKCIlcSIpKGkpXX0pKSxfKG4pKXRyeXt0PWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIodCkoaSl9dmFyIFA9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKCJ5Ij09PXIpZT1hLnllYXI7ZWxzZSBpZigibSI9PT1yKWU9YS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxmKSxuPXcoTWF0aC5mbG9vcihyL2gpLDIpKyI6Iit3KGwoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxQW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitpfXJldHVybiBufSh0LHIpKyJcbiIrQyhhLmRheU1vbnRoWWVhcix0LG4saSk7ZT1hLmRheU1vbnRoKyJcbiIrYS55ZWFyfXJldHVybiBDKGUsdCxuLGkpfTt2YXIgST0zKmY7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbih0LGUscil7cj1fKHIpJiZyO3ZhciBuPWwodCxmKTtpZih0PU1hdGgucm91bmQodC1uKSxyKXRyeXt2YXIgaT1NYXRoLnJvdW5kKHQvZikrbSxhPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSwibSIpOmEuYWRkKG8sZS8xMiwieSIpLChvLnRvSkQoKS1tKSpmK259Y2F0Y2goZSl7cy5lcnJvcigiaW52YWxpZCBtcyAiK3QrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKHQrSSk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK2UpK24tSX0sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MCxhPTAscz0wLGw9MCxjPV8oZSkmJmcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVmKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9mK20pKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgaD10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvaCxleGFjdE1vbnRoczphL2gsZXhhY3REYXlzOnMvaH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vcmVnaXN0cnkiOjYzOCwiLi9sb2dnZXJzIjo1MDcsIi4vbW9kIjo1MTAsImQzLXRpbWUtZm9ybWF0IjoxMjAsImZhc3QtaXNudW1lcmljIjoxOTB9XSw0OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi9sb2dnZXJzIiksYT10KCIuL21hdHJpeCIpLG89dCgiZ2wtbWF0NCIpO2Z1bmN0aW9uIHModCl7dmFyIGU9dCYmdC5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49InBsb3RseS5qcy1zdHlsZS0iK3QsYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTthfHwoKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJpZCIsbiksYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYSkpO3ZhciBvPWEuc2hlZXQ7by5pbnNlcnRSdWxlP28uaW5zZXJ0UnVsZShlKyJ7IityKyJ9IiwwKTpvLmFkZFJ1bGU/by5hZGRSdWxlKGUsciwwKTppLndhcm4oImFkZFN0eWxlUnVsZSBmYWlsZWQiKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkscj1lLmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIm5vbmUiPT09cj9udWxsOnIucmVwbGFjZSgibWF0cml4IiwiIikucmVwbGFjZSgiM2QiLCIiKS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSl9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9W107Zih0KTspZS5wdXNoKHQpLHQ9dC5wYXJlbnROb2RlO3JldHVybiBlfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0IGluc3RhbmNlb2YgRWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KX1lLmV4cG9ydHM9e2dldEdyYXBoRGl2OmZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PShlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSl0aHJvdyBuZXcgRXJyb3IoIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJyIrdCsiJyBleGlzdHMgb24gdGhlIHBhZ2UuIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHR9LGlzUGxvdERpdjpmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIpfSxyZW1vdmVFbGVtZW50OnMsYWRkU3R5bGVSdWxlOmZ1bmN0aW9uKHQsZSl7bCgiZ2xvYmFsIix0LGUpfSxhZGRSZWxhdGVkU3R5bGVSdWxlOmwsZGVsZXRlUmVsYXRlZFN0eWxlUnVsZTpmdW5jdGlvbih0KXt2YXIgZT0icGxvdGx5LmpzLXN0eWxlLSIrdCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ImJnMocil9LGdldEZ1bGxUcmFuc2Zvcm1NYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9dSh0KSxyPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1jKHQpO2lmKGUpe3ZhciBuPWEuY29udmVydENzc01hdHJpeChlKTtyPW8ubXVsdGlwbHkocixyLG4pfX0pKSxyfSxnZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4OmMsZ2V0RWxlbWVudEFuZEFuY2VzdG9yczp1LGVxdWFsRG9tUmVjdHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQudG9wPT09ZS50b3AmJnQubGVmdD09PWUubGVmdCYmdC5yaWdodD09PWUucmlnaHQmJnQuYm90dG9tPT09ZS5ib3R0b219fX0seyIuL2xvZ2dlcnMiOjUwNywiLi9tYXRyaXgiOjUwOSwiQHBsb3RseS9kMyI6NTgsImdsLW1hdDQiOjIxMH1dLDQ5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG8scz1hLl9ldmVudHNbZV07aWYoIXMpcmV0dXJuIG47ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5saXN0ZW5lcj8oYS5yZW1vdmVMaXN0ZW5lcihlLHQubGlzdGVuZXIpLHQuZmlyZWQ/dm9pZCAwOih0LmZpcmVkPSEwLHQubGlzdGVuZXIuYXBwbHkoYSxbcl0pKSk6dC5hcHBseShhLFtyXSl9Zm9yKHM9QXJyYXkuaXNBcnJheShzKT9zOltzXSxvPTA7bzxzLmxlbmd0aC0xO28rKylsKHNbb10pO3JldHVybiBpPWwoc1tvXSksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjg0fV0sNDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGEodCxlLHIsbyl7dmFyIHMsbCxjLHUsZixoLHA9dFswXSxkPXQubGVuZ3RoO2lmKDI9PT1kJiZpKHApJiZpKHRbMV0pJiYwPT09cC5sZW5ndGgpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYoZVtyXT1uKX1yZXR1cm4hMH0odFsxXSxwKSlyZXR1cm4gcDtwLnNwbGljZSgwLHAubGVuZ3RoKX1mb3IodmFyIG09MTttPGQ7bSsrKWZvcihsIGluIHM9dFttXSljPXBbbF0sdT1zW2xdLG8mJmkodSk/cFtsXT11OmUmJnUmJihuKHUpfHwoZj1pKHUpKSk/KGY/KGY9ITEsaD1jJiZpKGMpP2M6W10pOmg9YyYmbihjKT9jOnt9LHBbbF09YShbaCx1XSxlLHIsbykpOih2b2lkIDAhPT11fHxyKSYmKHBbbF09dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITApfX0seyIuL2lzX3BsYWluX29iamVjdC5qcyI6NTA0fV0sNDk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj1bXSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldOzEhPT1lW2FdJiYoZVthXT0xLHJbbisrXT1hKX1yZXR1cm4gcn19LHt9XSw0OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4hMD09PXQudmlzaWJsZX1mdW5jdGlvbiBpKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPShlPXQsQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheShlWzBdKSYmZVswXVswXSYmZVswXVswXS50cmFjZT9pOm4pLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO3IocykmJmEucHVzaChzKX1yZXR1cm4gYX19LHt9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiY291bnRyeS1yZWdleCIpLGE9dCgiQHR1cmYvYXJlYSIpLG89dCgiQHR1cmYvY2VudHJvaWQiKSxzPXQoIkB0dXJmL2Jib3giKSxsPXQoIi4vaWRlbnRpdHkiKSxjPXQoIi4vbG9nZ2VycyIpLHU9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxmPXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksaD10KCIuL3BvbHlnb24iKSxwPU9iamVjdC5rZXlzKGkpLGQ9eyJJU08tMyI6bCwiVVNBLXN0YXRlcyI6bCwiY291bnRyeSBuYW1lcyI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxwLmxlbmd0aDtlKyspe3ZhciByPXBbZV07aWYobmV3IFJlZ0V4cChpW3JdKS50ZXN0KHQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKXJldHVybiByfXJldHVybiBjLmxvZygiVW5yZWNvZ25pemVkIGNvdW50cnkgbmFtZTogIit0KyIuIiksITF9fTtmdW5jdGlvbiBtKHQpe3ZhciBlPXQuZ2VvanNvbixyPXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fHt9LG49InN0cmluZyI9PXR5cGVvZiBlP3JbZV06ZTtyZXR1cm4gdShuKT9uOihjLmVycm9yKCJPb3BzIC4uLiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIGZldGNoaW5nICIrZSksITEpfWUuZXhwb3J0cz17bG9jYXRpb25Ub0ZlYXR1cmU6ZnVuY3Rpb24odCxlLHIpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIG4saSxhLG89ZFt0XShlKTtpZihvKXtpZigiVVNBLXN0YXRlcyI9PT10KWZvcihuPVtdLGE9MDthPHIubGVuZ3RoO2ErKykoaT1yW2FdKS5wcm9wZXJ0aWVzJiZpLnByb3BlcnRpZXMuZ3UmJiJVU0EiPT09aS5wcm9wZXJ0aWVzLmd1JiZuLnB1c2goaSk7ZWxzZSBuPXI7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylpZigoaT1uW2FdKS5pZD09PW8pcmV0dXJuIGk7Yy5sb2coWyJMb2NhdGlvbiB3aXRoIGlkIixvLCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdG9wb2pzb24gZmVhdHVyZSBhdCB0aGlzIHJlc29sdXRpb24uIl0uam9pbigiICIpKX1yZXR1cm4hMX0sZmVhdHVyZTJwb2x5Z29uczpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXQuZ2VvbWV0cnksbz1hLmNvb3JkaW5hdGVzLHM9dC5pZCxsPVtdO2Z1bmN0aW9uIGModCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKylpZih0W2VdWzBdPjAmJnRbZSsxXVswXTwwKXJldHVybiBlO3JldHVybiBudWxsfXN3aXRjaChlPSJSVVMiPT09c3x8IkZKSSI9PT1zP2Z1bmN0aW9uKHQpe3ZhciBlO2lmKG51bGw9PT1jKHQpKWU9dDtlbHNlIGZvcihlPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKWVbaV09W3RbaV1bMF08MD90W2ldWzBdKzM2MDp0W2ldWzBdLHRbaV1bMV1dO2wucHVzaChoLnRlc3RlcihlKSl9OiJBVEEiPT09cz9mdW5jdGlvbih0KXt2YXIgZT1jKHQpO2lmKG51bGw9PT1lKXJldHVybiBsLnB1c2goaC50ZXN0ZXIodCkpO3ZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCsxKSxuPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpPmU/cltuKytdPVt0W2ldWzBdKzM2MCx0W2ldWzFdXTppPT09ZT8ocltuKytdPXRbaV0scltuKytdPVt0W2ldWzBdLC05MF0pOnJbbisrXT10W2ldO3ZhciBhPWgudGVzdGVyKHIpO2EucHRzLnBvcCgpLGwucHVzaChhKX06ZnVuY3Rpb24odCl7bC5wdXNoKGgudGVzdGVyKHQpKX0sYS50eXBlKXtjYXNlIk11bHRpUG9seWdvbiI6Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylmb3Iobj0wO248b1tyXS5sZW5ndGg7bisrKWUob1tyXVtuXSk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpmb3Iocj0wO3I8by5sZW5ndGg7cisrKWUob1tyXSl9cmV0dXJuIGx9LGdldFRyYWNlR2VvanNvbjptLGV4dHJhY3RUcmFjZUZlYXR1cmU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW0oZSk7aWYoIXIpcmV0dXJuITE7dmFyIG4saT17fSxzPVtdO2ZvcihuPTA7bjxlLl9sZW5ndGg7bisrKXt2YXIgbD10W25dOyhsLmxvY3x8MD09PWwubG9jKSYmKGlbbC5sb2NdPWwpfWZ1bmN0aW9uIHUodCl7dmFyIHI9Zih0LGUuZmVhdHVyZWlka2V5fHwiaWQiKS5nZXQoKSxuPWlbcl07aWYobil7dmFyIGw9dC5nZW9tZXRyeTtpZigiUG9seWdvbiI9PT1sLnR5cGV8fCJNdWx0aVBvbHlnb24iPT09bC50eXBlKXt2YXIgdT17dHlwZToiRmVhdHVyZSIsaWQ6cixnZW9tZXRyeTpsLHByb3BlcnRpZXM6e319O3UucHJvcGVydGllcy5jdD1mdW5jdGlvbih0KXt2YXIgZSxyPXQuZ2VvbWV0cnk7aWYoIk11bHRpUG9seWdvbiI9PT1yLnR5cGUpZm9yKHZhciBuPXIuY29vcmRpbmF0ZXMsaT0wLHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOm5bc119LGM9YS5kZWZhdWx0KGwpO2M+aSYmKGk9YyxlPWwpfWVsc2UgZT1yO3JldHVybiBvLmRlZmF1bHQoZSkuZ2VvbWV0cnkuY29vcmRpbmF0ZXN9KHUpLG4uZkluPXQsbi5mT3V0PXUscy5wdXNoKHUpfWVsc2UgYy5sb2coWyJMb2NhdGlvbiIsbi5sb2MsImRvZXMgbm90IGhhdmUgYSB2YWxpZCBHZW9KU09OIGdlb21ldHJ5LiIsIlRyYWNlcyB3aXRoIGxvY2F0aW9ubW9kZSAqZ2VvanNvbi1pZCogb25seSBzdXBwb3J0IiwiKlBvbHlnb24qIGFuZCAqTXVsdGlQb2x5Z29uKiBnZW9tZXRyaWVzLiJdLmpvaW4oIiAiKSl9ZGVsZXRlIGlbcl19c3dpdGNoKHIudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6dmFyIGg9ci5mZWF0dXJlcztmb3Iobj0wO248aC5sZW5ndGg7bisrKXUoaFtuXSk7YnJlYWs7Y2FzZSJGZWF0dXJlIjp1KHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGMud2FybihbIkludmFsaWQgR2VvSlNPTiB0eXBlIiwoci50eXBlfHwibm9uZSIpKyIuIiwiVHJhY2VzIHdpdGggbG9jYXRpb25tb2RlICpnZW9qc29uLWlkKiBvbmx5IHN1cHBvcnQiLCIqRmVhdHVyZUNvbGxlY3Rpb24qIGFuZCAqRmVhdHVyZSogdHlwZXMuIl0uam9pbigiICIpKSwhMX1mb3IodmFyIHAgaW4gaSljLmxvZyhbIkxvY2F0aW9uICoiK3ArIioiLCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgZmVhdHVyZSB3aXRoIGlkLWtleSIsIioiK2UuZmVhdHVyZWlka2V5KyIqLiJdLmpvaW4oIiAiKSk7cmV0dXJuIHN9LGZldGNoVHJhY2VHZW9EYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fHt9LHI9W107ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsaSl7bi5qc29uKHQsKGZ1bmN0aW9uKG4sYSl7aWYobil7ZGVsZXRlIGVbdF07dmFyIG89NDA0PT09bi5zdGF0dXM/J0dlb0pTT04gYXQgVVJMICInK3QrJyIgZG9lcyBub3QgZXhpc3QuJzoiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyBmcm9tICIrdDtyZXR1cm4gaShuZXcgRXJyb3IobykpfXJldHVybiBlW3RdPWEscihhKX0pKX0pKX1mdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXt2YXIgaT0wLGE9c2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7cmV0dXJuIGVbdF0mJiJwZW5kaW5nIiE9PWVbdF0/KGNsZWFySW50ZXJ2YWwoYSkscihlW3RdKSk6aT4xMDA/KGNsZWFySW50ZXJ2YWwoYSksbigiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyBmcm9tICIrdCkpOnZvaWQgaSsrfSksNTApfSkpfWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLnRyYWNlLmdlb2pzb247InN0cmluZyI9PXR5cGVvZiBzJiYoZVtzXT8icGVuZGluZyI9PT1lW3NdJiZyLnB1c2goYShzKSk6KGVbc109InBlbmRpbmciLHIucHVzaChpKHMpKSkpfXJldHVybiByfSxjb21wdXRlQmJveDpmdW5jdGlvbih0KXtyZXR1cm4gcy5kZWZhdWx0KHQpfX19LHsiLi9pZGVudGl0eSI6NTAxLCIuL2lzX3BsYWluX29iamVjdCI6NTA0LCIuL2xvZ2dlcnMiOjUwNywiLi9uZXN0ZWRfcHJvcGVydHkiOjUxMSwiLi9wb2x5Z29uIjo1MTUsIkBwbG90bHkvZDMiOjU4LCJAdHVyZi9hcmVhIjo2MSwiQHR1cmYvYmJveCI6NjQsIkB0dXJmL2NlbnRyb2lkIjo2NywiY291bnRyeS1yZWdleCI6OTR9XSw0OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLmNhbGNUcmFjZVRvTGluZUNvb3Jkcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXS50cmFjZS5jb25uZWN0Z2FwcyxyPVtdLGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLmxvbmxhdDtvWzBdIT09bj9pLnB1c2gobyk6IWUmJmkubGVuZ3RoPjAmJihyLnB1c2goaSksaT1bXSl9cmV0dXJuIGkubGVuZ3RoPjAmJnIucHVzaChpKSxyfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnRbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSxyLm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dH07Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7cisrKWVbcl09W3Rbcl1dO3JldHVybnt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOmV9fSxyLm1ha2VCbGFuaz1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6W119fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0Nzl9XSw0OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiLi9tb2QiKS5tb2Q7ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvLHMpe3ZhciBsPXItdCxjPWktdCx1PW8taSxmPW4tZSxoPWEtZSxwPXMtYSxkPWwqcC11KmY7aWYoMD09PWQpcmV0dXJuIG51bGw7dmFyIG09KGMqcC11KmgpL2QsZz0oYypmLWwqaCkvZDtyZXR1cm4gZzwwfHxnPjF8fG08MHx8bT4xP251bGw6e3g6dCtsKm0seTplK2YqbX19ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPW4qdCtpKmU7aWYoYTwwKXJldHVybiBuKm4raSppO2lmKGE+cil7dmFyIG89bi10LHM9aS1lO3JldHVybiBvKm8rcypzfXZhciBsPW4qZS1pKnQ7cmV0dXJuIGwqbC9yfXIuc2VnbWVudHNJbnRlcnNlY3Q9cyxyLnNlZ21lbnREaXN0YW5jZT1mdW5jdGlvbih0LGUscixuLGksYSxvLGMpe2lmKHModCxlLHIsbixpLGEsbyxjKSlyZXR1cm4gMDt2YXIgdT1yLXQsZj1uLWUsaD1vLWkscD1jLWEsZD11KnUrZipmLG09aCpoK3AqcCxnPU1hdGgubWluKGwodSxmLGQsaS10LGEtZSksbCh1LGYsZCxvLXQsYy1lKSxsKGgscCxtLHQtaSxlLWEpLGwoaCxwLG0sci1pLG4tYSkpO3JldHVybiBNYXRoLnNxcnQoZyl9LHIuZ2V0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLHMpe2lmKHQ9PT1pJiZzPT09YXx8KG49e30saT10LGE9cyksbltyXSlyZXR1cm4gbltyXTt2YXIgbD10LmdldFBvaW50QXRMZW5ndGgobyhyLXMvMixlKSksYz10LmdldFBvaW50QXRMZW5ndGgobyhyK3MvMixlKSksdT1NYXRoLmF0YW4oKGMueS1sLnkpLyhjLngtbC54KSksZj10LmdldFBvaW50QXRMZW5ndGgobyhyLGUpKSxoPXt4Oig0KmYueCtsLngrYy54KS82LHk6KDQqZi55K2wueStjLnkpLzYsdGhldGE6dX07cmV0dXJuIG5bcl09aCxofSxyLmNsZWFyTG9jYXRpb25DYWNoZT1mdW5jdGlvbigpe2k9bnVsbH0sci5nZXRWaXNpYmxlU2VnbWVudD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUubGVmdCxvPWUucmlnaHQscz1lLnRvcCxsPWUuYm90dG9tLGM9MCx1PXQuZ2V0VG90YWxMZW5ndGgoKSxmPXU7ZnVuY3Rpb24gaChlKXt2YXIgcj10LmdldFBvaW50QXRMZW5ndGgoZSk7MD09PWU/bj1yOmU9PT11JiYoaT1yKTt2YXIgYz1yLng8YT9hLXIueDpyLng+bz9yLngtbzowLGY9ci55PHM/cy1yLnk6ci55Pmw/ci55LWw6MDtyZXR1cm4gTWF0aC5zcXJ0KGMqYytmKmYpfWZvcih2YXIgcD1oKGMpO3A7KXtpZigoYys9cCtyKT5mKXJldHVybjtwPWgoYyl9Zm9yKHA9aChmKTtwOyl7aWYoYz4oZi09cCtyKSlyZXR1cm47cD1oKGYpfXJldHVybnttaW46YyxtYXg6ZixsZW46Zi1jLHRvdGFsOnUsaXNDbG9zZWQ6MD09PWMmJmY9PT11JiZNYXRoLmFicyhuLngtaS54KTwuMSYmTWF0aC5hYnMobi55LWkueSk8LjF9fSxyLmZpbmRQb2ludE9uUGF0aD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGksYSxvLHM9KG49bnx8e30pLnBhdGhMZW5ndGh8fHQuZ2V0VG90YWxMZW5ndGgoKSxsPW4udG9sZXJhbmNlfHwuMDAxLGM9bi5pdGVyYXRpb25MaW1pdHx8MzAsdT10LmdldFBvaW50QXRMZW5ndGgoMClbcl0+dC5nZXRQb2ludEF0TGVuZ3RoKHMpW3JdPy0xOjEsZj0wLGg9MCxwPXM7ZjxjOyl7aWYoaT0oaCtwKS8yLG89KGE9dC5nZXRQb2ludEF0TGVuZ3RoKGkpKVtyXS1lLE1hdGguYWJzKG8pPGwpcmV0dXJuIGE7dSpvPjA/cD1pOmg9aSxmKyt9cmV0dXJuIGF9fSx7Ii4vbW9kIjo1MTB9XSw0OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoImNvbG9yLW5vcm1hbGl6ZSIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5kZWZhdWx0TGluZSxsPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5LGM9YShzKTtmdW5jdGlvbiB1KHQsZSl7dmFyIHI9dDtyZXR1cm4gclszXSo9ZSxyfWZ1bmN0aW9uIGYodCl7aWYobih0KSlyZXR1cm4gYzt2YXIgZT1hKHQpO3JldHVybiBlLmxlbmd0aD9lOmN9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbih0KT90OjF9ZS5leHBvcnRzPXtmb3JtYXRDb2xvcjpmdW5jdGlvbih0LGUscil7dmFyIG4saSxzLHAsZCxtPXQuY29sb3IsZz1sKG0pLHY9bChlKSx5PW8uZXh0cmFjdE9wdHModCkseD1bXTtpZihuPXZvaWQgMCE9PXkuY29sb3JzY2FsZT9vLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZSh0KTpmLGk9Zz9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdP2M6YShuKHRbZV0pKX06ZixzPXY/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT8xOmgodFtlXSl9OmgsZ3x8dilmb3IodmFyIGI9MDtiPHI7YisrKXA9aShtLGIpLGQ9cyhlLGIpLHhbYl09dShwLGQpO2Vsc2UgeD11KGEobSksZSk7cmV0dXJuIHh9LHBhcnNlQ29sb3JTY2FsZTpmdW5jdGlvbih0KXt2YXIgZT1vLmV4dHJhY3RPcHRzKHQpLHI9ZS5jb2xvcnNjYWxlO3JldHVybiBlLnJldmVyc2VzY2FsZSYmKHI9by5mbGlwU2NhbGUoZS5jb2xvcnNjYWxlKSksci5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1pKHRbMV0pLnRvUmdiKCk7cmV0dXJue2luZGV4OmUscmdiOltyLnIsci5nLHIuYixyLmFdfX0pKX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi9hcnJheSI6NDg1LCJjb2xvci1ub3JtYWxpemUiOjg5LCJmYXN0LWlzbnVtZXJpYyI6MTkwLHRpbnljb2xvcjI6MzEyfV0sNTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6NTAxfV0sNTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw1MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHQ7dmFyIHI9MS9NYXRoLmFicyhlKSxuPXI+MT8ocip0K3IqZSkvcjp0K2UsaT1TdHJpbmcobikubGVuZ3RoO2lmKGk+MTYpe3ZhciBhPVN0cmluZyhlKS5sZW5ndGg7aWYoaT49U3RyaW5nKHQpLmxlbmd0aCthKXt2YXIgbz1wYXJzZUZsb2F0KG4pLnRvUHJlY2lzaW9uKDEyKTstMT09PW8uaW5kZXhPZigiZSsiKSYmKG49K28pfX1yZXR1cm4gbn19LHt9XSw1MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQsYT10KCJkMy1mb3JtYXQiKS5mb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGw9cy5GUF9TQUZFLGM9LWwsdT1zLkJBRE5VTSxmPWUuZXhwb3J0cz17fTtmLmFkanVzdEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8L15cZFsuXVxkZi8udGVzdCh0KXx8L1suXVxkJS8udGVzdCh0KT90OiIwLmYiPT09dD8ifmYiOi9eXGQlLy50ZXN0KHQpPyJ+JSI6L15cZHMvLnRlc3QodCk/In5zIjohL15bfiwuMCRdLy50ZXN0KHQpJiYvWyZmcHNdLy50ZXN0KHQpPyJ+Iit0OnR9O3ZhciBoPXt9O2Yud2FybkJhZEZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcodCk7aFtlXXx8KGhbZV09MSxmLndhcm4oJ2VuY291bnRlcmVkIGJhZCBmb3JtYXQ6ICInK2UrJyInKSl9LGYubm9Gb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX0sZi5udW1iZXJGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9YShmLmFkanVzdEZvcm1hdCh0KSl9Y2F0Y2goZSl7cmV0dXJuIGYud2FybkJhZEZvcm1hdCh0KSxmLm5vRm9ybWF0fXJldHVybiBlfSxmLm5lc3RlZFByb3BlcnR5PXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksZi5rZXllZENvbnRhaW5lcj10KCIuL2tleWVkX2NvbnRhaW5lciIpLGYucmVsYXRpdmVBdHRyPXQoIi4vcmVsYXRpdmVfYXR0ciIpLGYuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGYudG9Mb2dSYW5nZT10KCIuL3RvX2xvZ19yYW5nZSIpLGYucmVsaW5rUHJpdmF0ZUtleXM9dCgiLi9yZWxpbmtfcHJpdmF0ZSIpO3ZhciBwPXQoIi4vYXJyYXkiKTtmLmlzVHlwZWRBcnJheT1wLmlzVHlwZWRBcnJheSxmLmlzQXJyYXlPclR5cGVkQXJyYXk9cC5pc0FycmF5T3JUeXBlZEFycmF5LGYuaXNBcnJheTFEPXAuaXNBcnJheTFELGYuZW5zdXJlQXJyYXk9cC5lbnN1cmVBcnJheSxmLmNvbmNhdD1wLmNvbmNhdCxmLm1heFJvd0xlbmd0aD1wLm1heFJvd0xlbmd0aCxmLm1pblJvd0xlbmd0aD1wLm1pblJvd0xlbmd0aDt2YXIgZD10KCIuL21vZCIpO2YubW9kPWQubW9kLGYubW9kSGFsZj1kLm1vZEhhbGY7dmFyIG09dCgiLi9jb2VyY2UiKTtmLnZhbE9iamVjdE1ldGE9bS52YWxPYmplY3RNZXRhLGYuY29lcmNlPW0uY29lcmNlLGYuY29lcmNlMj1tLmNvZXJjZTIsZi5jb2VyY2VGb250PW0uY29lcmNlRm9udCxmLmNvZXJjZVBhdHRlcm49bS5jb2VyY2VQYXR0ZXJuLGYuY29lcmNlSG92ZXJpbmZvPW0uY29lcmNlSG92ZXJpbmZvLGYuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1tLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksZi52YWxpZGF0ZT1tLnZhbGlkYXRlO3ZhciBnPXQoIi4vZGF0ZXMiKTtmLmRhdGVUaW1lMm1zPWcuZGF0ZVRpbWUybXMsZi5pc0RhdGVUaW1lPWcuaXNEYXRlVGltZSxmLm1zMkRhdGVUaW1lPWcubXMyRGF0ZVRpbWUsZi5tczJEYXRlVGltZUxvY2FsPWcubXMyRGF0ZVRpbWVMb2NhbCxmLmNsZWFuRGF0ZT1nLmNsZWFuRGF0ZSxmLmlzSlNEYXRlPWcuaXNKU0RhdGUsZi5mb3JtYXREYXRlPWcuZm9ybWF0RGF0ZSxmLmluY3JlbWVudE1vbnRoPWcuaW5jcmVtZW50TW9udGgsZi5kYXRlVGljazA9Zy5kYXRlVGljazAsZi5kZmx0UmFuZ2U9Zy5kZmx0UmFuZ2UsZi5maW5kRXhhY3REYXRlcz1nLmZpbmRFeGFjdERhdGVzLGYuTUlOX01TPWcuTUlOX01TLGYuTUFYX01TPWcuTUFYX01TO3ZhciB2PXQoIi4vc2VhcmNoIik7Zi5maW5kQmluPXYuZmluZEJpbixmLnNvcnRlckFzYz12LnNvcnRlckFzYyxmLnNvcnRlckRlcz12LnNvcnRlckRlcyxmLmRpc3RpbmN0VmFscz12LmRpc3RpbmN0VmFscyxmLnJvdW5kVXA9di5yb3VuZFVwLGYuc29ydD12LnNvcnQsZi5maW5kSW5kZXhPZk1pbj12LmZpbmRJbmRleE9mTWluLGYuc29ydE9iamVjdEtleXM9dCgiLi9zb3J0X29iamVjdF9rZXlzIik7dmFyIHk9dCgiLi9zdGF0cyIpO2YuYWdnTnVtcz15LmFnZ051bXMsZi5sZW49eS5sZW4sZi5tZWFuPXkubWVhbixmLm1lZGlhbj15Lm1lZGlhbixmLm1pZFJhbmdlPXkubWlkUmFuZ2UsZi52YXJpYW5jZT15LnZhcmlhbmNlLGYuc3RkZXY9eS5zdGRldixmLmludGVycD15LmludGVycDt2YXIgeD10KCIuL21hdHJpeCIpO2YuaW5pdDJkQXJyYXk9eC5pbml0MmRBcnJheSxmLnRyYW5zcG9zZVJhZ2dlZD14LnRyYW5zcG9zZVJhZ2dlZCxmLmRvdD14LmRvdCxmLnRyYW5zbGF0aW9uTWF0cml4PXgudHJhbnNsYXRpb25NYXRyaXgsZi5yb3RhdGlvbk1hdHJpeD14LnJvdGF0aW9uTWF0cml4LGYucm90YXRpb25YWU1hdHJpeD14LnJvdGF0aW9uWFlNYXRyaXgsZi5hcHBseTNEVHJhbnNmb3JtPXguYXBwbHkzRFRyYW5zZm9ybSxmLmFwcGx5MkRUcmFuc2Zvcm09eC5hcHBseTJEVHJhbnNmb3JtLGYuYXBwbHkyRFRyYW5zZm9ybTI9eC5hcHBseTJEVHJhbnNmb3JtMixmLmNvbnZlcnRDc3NNYXRyaXg9eC5jb252ZXJ0Q3NzTWF0cml4LGYuaW52ZXJzZVRyYW5zZm9ybU1hdHJpeD14LmludmVyc2VUcmFuc2Zvcm1NYXRyaXg7dmFyIGI9dCgiLi9hbmdsZXMiKTtmLmRlZzJyYWQ9Yi5kZWcycmFkLGYucmFkMmRlZz1iLnJhZDJkZWcsZi5hbmdsZURlbHRhPWIuYW5nbGVEZWx0YSxmLmFuZ2xlRGlzdD1iLmFuZ2xlRGlzdCxmLmlzRnVsbENpcmNsZT1iLmlzRnVsbENpcmNsZSxmLmlzQW5nbGVJbnNpZGVTZWN0b3I9Yi5pc0FuZ2xlSW5zaWRlU2VjdG9yLGYuaXNQdEluc2lkZVNlY3Rvcj1iLmlzUHRJbnNpZGVTZWN0b3IsZi5wYXRoQXJjPWIucGF0aEFyYyxmLnBhdGhTZWN0b3I9Yi5wYXRoU2VjdG9yLGYucGF0aEFubnVsdXM9Yi5wYXRoQW5udWx1czt2YXIgXz10KCIuL2FuY2hvcl91dGlscyIpO2YuaXNMZWZ0QW5jaG9yPV8uaXNMZWZ0QW5jaG9yLGYuaXNDZW50ZXJBbmNob3I9Xy5pc0NlbnRlckFuY2hvcixmLmlzUmlnaHRBbmNob3I9Xy5pc1JpZ2h0QW5jaG9yLGYuaXNUb3BBbmNob3I9Xy5pc1RvcEFuY2hvcixmLmlzTWlkZGxlQW5jaG9yPV8uaXNNaWRkbGVBbmNob3IsZi5pc0JvdHRvbUFuY2hvcj1fLmlzQm90dG9tQW5jaG9yO3ZhciB3PXQoIi4vZ2VvbWV0cnkyZCIpO2Yuc2VnbWVudHNJbnRlcnNlY3Q9dy5zZWdtZW50c0ludGVyc2VjdCxmLnNlZ21lbnREaXN0YW5jZT13LnNlZ21lbnREaXN0YW5jZSxmLmdldFRleHRMb2NhdGlvbj13LmdldFRleHRMb2NhdGlvbixmLmNsZWFyTG9jYXRpb25DYWNoZT13LmNsZWFyTG9jYXRpb25DYWNoZSxmLmdldFZpc2libGVTZWdtZW50PXcuZ2V0VmlzaWJsZVNlZ21lbnQsZi5maW5kUG9pbnRPblBhdGg9dy5maW5kUG9pbnRPblBhdGg7dmFyIFQ9dCgiLi9leHRlbmQiKTtmLmV4dGVuZEZsYXQ9VC5leHRlbmRGbGF0LGYuZXh0ZW5kRGVlcD1ULmV4dGVuZERlZXAsZi5leHRlbmREZWVwQWxsPVQuZXh0ZW5kRGVlcEFsbCxmLmV4dGVuZERlZXBOb0FycmF5cz1ULmV4dGVuZERlZXBOb0FycmF5czt2YXIgaz10KCIuL2xvZ2dlcnMiKTtmLmxvZz1rLmxvZyxmLndhcm49ay53YXJuLGYuZXJyb3I9ay5lcnJvcjt2YXIgQT10KCIuL3JlZ2V4Iik7Zi5jb3VudGVyUmVnZXg9QS5jb3VudGVyO3ZhciBNPXQoIi4vdGhyb3R0bGUiKTtmLnRocm90dGxlPU0udGhyb3R0bGUsZi50aHJvdHRsZURvbmU9TS5kb25lLGYuY2xlYXJUaHJvdHRsZT1NLmNsZWFyO3ZhciBTPXQoIi4vZG9tIik7ZnVuY3Rpb24gRSh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1mLmdldEdyYXBoRGl2PVMuZ2V0R3JhcGhEaXYsZi5pc1Bsb3REaXY9Uy5pc1Bsb3REaXYsZi5yZW1vdmVFbGVtZW50PVMucmVtb3ZlRWxlbWVudCxmLmFkZFN0eWxlUnVsZT1TLmFkZFN0eWxlUnVsZSxmLmFkZFJlbGF0ZWRTdHlsZVJ1bGU9Uy5hZGRSZWxhdGVkU3R5bGVSdWxlLGYuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZT1TLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUsZi5nZXRGdWxsVHJhbnNmb3JtTWF0cml4PVMuZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeCxmLmdldEVsZW1lbnRUcmFuc2Zvcm1NYXRyaXg9Uy5nZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4LGYuZ2V0RWxlbWVudEFuZEFuY2VzdG9ycz1TLmdldEVsZW1lbnRBbmRBbmNlc3RvcnMsZi5lcXVhbERvbVJlY3RzPVMuZXF1YWxEb21SZWN0cyxmLmNsZWFyUmVzcG9uc2l2ZT10KCIuL2NsZWFyX3Jlc3BvbnNpdmUiKSxmLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj10KCIuL3ByZXNlcnZlX2RyYXdpbmdfYnVmZmVyIiksZi5tYWtlVHJhY2VHcm91cHM9dCgiLi9tYWtlX3RyYWNlX2dyb3VwcyIpLGYuXz10KCIuL2xvY2FsaXplIiksZi5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksZi5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksZi5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxmLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGYuaW5jcmVtZW50PXQoIi4vaW5jcmVtZW50IiksZi5jbGVhbk51bWJlcj10KCIuL2NsZWFuX251bWJlciIpLGYuZW5zdXJlTnVtYmVyPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpPyh0PU51bWJlcih0KSk+bHx8dDxjP3U6dDp1fSxmLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYobyh0KSYmdD49MCYmdCUxPT0wKX0sZi5ub29wPXQoIi4vbm9vcCIpLGYuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGYucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGYuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSxsPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQobCl9fSxmLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxmLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxmLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGYuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sZi5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspb1tzXT1lKHRbc10scixuLGkpO3JldHVybiBvfSxmLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbixpKXtpZihufHwobj0xNiksdm9pZCAwPT09ciYmKHI9MjQpLHI8PTApcmV0dXJuIjAiO3ZhciBhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxsPSIiO2ZvcihhPTI7cz09PTEvMDthKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2EpKS9NYXRoLmxvZyhuKSphO3ZhciBjPXMtTWF0aC5mbG9vcihzKTtmb3IoYT0wO2E8TWF0aC5mbG9vcihzKTthKyspbD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrbDtjJiYobz1NYXRoLnBvdyhuLGMpLGw9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK2wpO3ZhciB1PXBhcnNlSW50KGwsbik7cmV0dXJuIGUmJmVbbF18fHUhPT0xLzAmJnU+PU1hdGgucG93KDIscik/aT4xMD8oZi53YXJuKCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzIiksbCk6dChlLHIsbiwoaXx8MCkrMSk6bH0sZi5PcHRpb25Db250cm9sPWZ1bmN0aW9uKHQsZSl7dHx8KHQ9e30pLGV8fChlPSJvcHQiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bZV09dCxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByWyJfIitlXT10LHJ9LGYuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKShpPXIrbisxLWUpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sZi5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSgpe3JldHVybiBmLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IoO3QubGVuZ3RoOylpZigobj0oMCx0LnNwbGljZSgwLDEpWzBdKShlKSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGkpO3JldHVybiByJiZyKGUpfSxmLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxmLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxmLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIG47aWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgYT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksbz0wO288YTtvKyspe3ZhciBzPXRbb107ZVtvXVtyXT1pP24ocyk6c319LGYubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGYubWVyZ2VBcnJheSh0LGUsciwoZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGlzRmluaXRlKGUpJiZlPjA/ZTowfSkpfSxmLmZpbGxBcnJheT1mdW5jdGlvbih0LGUscixuKXtpZihuPW58fGYuaWRlbnRpdHksZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sZi5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8Zi5pZGVudGl0eTt2YXIgaT1mLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIGYuaXNBcnJheU9yVHlwZWRBcnJheShpKT9BcnJheS5pc0FycmF5KGUpJiZmLmlzQXJyYXlPclR5cGVkQXJyYXkoaVtlWzBdXSk/bihpW2VbMF1dW2VbMV1dKTpuKGlbZV0pOml9LGYuZXh0cmFjdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtpZihyIGluIHQpcmV0dXJuIHRbcl07dmFyIGk9Zi5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCgpO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3ZvaWQgMDppfSxmLnRhZ1NlbGVjdGVkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5zZWxlY3RlZHBvaW50cyxvPWUuX2luZGV4VG9Qb2ludHM7byYmKG49RShvKSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aWYoZi5pc0luZGV4KGwpfHxmLmlzQXJyYXlPclR5cGVkQXJyYXkobCkmJmYuaXNJbmRleChsWzBdKSYmZi5pc0luZGV4KGxbMV0pKXt2YXIgYz1uP25bbF06bCx1PXI/cltjXTpjO3ZvaWQgMCE9PShpPXUpJiZpPHQubGVuZ3RoJiYodFt1XS5zZWxlY3RlZD0xKX19fSxmLnNlbEluZGljZXMyc2VsUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0ZWRwb2ludHMscj10Ll9pbmRleFRvUG9pbnRzO2lmKHIpe2Zvcih2YXIgbj1FKHIpLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGYuaXNJbmRleChvKSl7dmFyIHM9bltvXTtmLmlzSW5kZXgocykmJmkucHVzaChzKX19cmV0dXJuIGl9cmV0dXJuIGV9LGYuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZigic3RyaW5nIj09dHlwZW9mIHImJnIpe3ZhciBuPWYubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxmLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9OyJvYmplY3QiIT10eXBlb2YgZSYmKGU9e30pO3ZhciBuLGksYSxvPU9iamVjdC5rZXlzKHQpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspYT10W2k9b1tuXV0sIl8iIT09aS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhJiYoIm1vZHVsZSI9PT1pP3JbaV09YTpBcnJheS5pc0FycmF5KGEpP3JbaV09ImNvbG9yc2NhbGUiPT09aT9hLnNsaWNlKCk6YS5zbGljZSgwLDMpOmYuaXNUeXBlZEFycmF5KGEpP3JbaV09YS5zdWJhcnJheSgwLDMpOnJbaV09YSYmIm9iamVjdCI9PXR5cGVvZiBhP2YubWluRXh0ZW5kKHRbaV0sZVtpXSk6YSk7Zm9yKG89T2JqZWN0LmtleXMoZSksbj0wO248by5sZW5ndGg7bisrKSJvYmplY3QiPT10eXBlb2YoYT1lW2k9b1tuXV0pJiZpIGluIHImJiJvYmplY3QiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGYudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxmLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGYuaXNJRT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT13aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2J9O3ZhciBMPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvO2YuaXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gTC50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIEM9L2lQYWR8aVBob25lfGlQb2QvO2YuaXNJT1M9ZnVuY3Rpb24oKXtyZXR1cm4gQy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIFA9L0ZpcmVmb3hcLyhcZCspXC5cZCsvO2YuZ2V0RmlyZWZveFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgdD1QLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO2lmKHQmJjI9PT10Lmxlbmd0aCl7dmFyIGU9cGFyc2VJbnQodFsxXSk7aWYoIWlzTmFOKGUpKXJldHVybiBlfXJldHVybiBudWxsfSxmLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuLnNlbGVjdGlvbn0sZi5lbnN1cmVTaW5nbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoZSsocj8iLiIrcjoiIikpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpO3JldHVybiByJiZhLmNsYXNzZWQociwhMCksbiYmYS5jYWxsKG4pLGF9LGYuZW5zdXJlU2luZ2xlQnlJZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyIjIityKTtpZihpLnNpemUoKSlyZXR1cm4gaTt2YXIgYT10LmFwcGVuZChlKS5hdHRyKCJpZCIscik7cmV0dXJuIG4mJmEuY2FsbChuKSxhfSxmLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdCgiLiIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxbKFswLTldKylcXS8pO2w/KG89bFsxXSxzPWxbMl0scj1yW29dPVtdLGE9PT1uLmxlbmd0aC0xP3Jbc109ZTpyW3NdPXt9LHI9cltzXSk6KGE9PT1uLmxlbmd0aC0xP3Jbb109ZTpyW29dPXt9LHI9cltvXSl9cmV0dXJuIGl9O3ZhciBJPS9eKFteXFtcLl0rKVwuKC4rKT8vLE89L14oW15cLl0rKVxbKFswLTldKylcXShcLik/KC4rKT8vO2YuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSlmb3IociBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJigoZT1yLm1hdGNoKEkpKT8oaT10W3JdLG49ZVsxXSxkZWxldGUgdFtyXSx0W25dPWYuZXh0ZW5kRGVlcE5vQXJyYXlzKHRbbl18fHt9LGYub2JqZWN0RnJvbVBhdGgocixmLmV4cGFuZE9iamVjdFBhdGhzKGkpKVtuXSkpOihlPXIubWF0Y2goTykpPyhpPXRbcl0sbj1lWzFdLGE9cGFyc2VJbnQoZVsyXSksZGVsZXRlIHRbcl0sdFtuXT10W25dfHxbXSwiLiI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGYuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sZi5vYmplY3RGcm9tUGF0aChzLGYuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1mLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWYuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxmLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nISIpOyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxkKykoXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KCIuIikscz1vWzBdLGw9by5sZW5ndGg+MT9pK29bMV06IiI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLCIkMSIrYSsiJDIiKTtyZXR1cm4gcytsfSxmLlRFTVBMQVRFX1NUUklOR19SRUdFWD0vJXsoW15ccyV7fTpdKikoWzp8XHxdW159XSopP30vZzt2YXIgej0vXlx3KiQvO2YudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKGYuVEVNUExBVEVfU1RSSU5HX1JFR0VYLChmdW5jdGlvbih0LG4pe3ZhciBpO3JldHVybiB6LnRlc3Qobik/aT1lW25dOihyW25dPXJbbl18fGYubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQsaT1yW25dKCkpLGYuaXNWYWxpZFRleHRWYWx1ZShpKT9pOiIifSkpfTt2YXIgRD17bWF4OjEwLGNvdW50OjAsbmFtZToiaG92ZXJ0ZW1wbGF0ZSJ9O2YuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBCLmFwcGx5KEQsYXJndW1lbnRzKX07dmFyIFI9e21heDoxMCxjb3VudDowLG5hbWU6InRleHR0ZW1wbGF0ZSJ9O2YudGV4dHRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEIuYXBwbHkoUixhcmd1bWVudHMpfTt2YXIgRj0vXls6fFx8XS87ZnVuY3Rpb24gQih0LGUscil7dmFyIG49dGhpcyxhPWFyZ3VtZW50cztlfHwoZT17fSk7dmFyIG89e307cmV0dXJuIHQucmVwbGFjZShmLlRFTVBMQVRFX1NUUklOR19SRUdFWCwoZnVuY3Rpb24odCxzLGwpe3ZhciBjLHUsaCxwPSJfeG90aGVyIj09PXN8fCJfeW90aGVyIj09PXMsZD0iX3hvdGhlcl8iPT09c3x8Il95b3RoZXJfIj09PXMsbT0ieG90aGVyXyI9PT1zfHwieW90aGVyXyI9PT1zLGc9InhvdGhlciI9PT1zfHwieW90aGVyIj09PXN8fHB8fG18fGQsdj1zO2lmKChwfHxkKSYmKHY9di5zdWJzdHJpbmcoMSkpLChtfHxkKSYmKHY9di5zdWJzdHJpbmcoMCx2Lmxlbmd0aC0xKSksZyl7aWYodm9pZCAwPT09KGM9ZVt2XSkpcmV0dXJuIiJ9ZWxzZSBmb3IoaD0zO2g8YS5sZW5ndGg7aCsrKWlmKHU9YVtoXSl7aWYodS5oYXNPd25Qcm9wZXJ0eSh2KSl7Yz11W3ZdO2JyZWFrfWlmKHoudGVzdCh2KXx8KGM9Zi5uZXN0ZWRQcm9wZXJ0eSh1LHYpLmdldCgpLChjPW9bdl18fGYubmVzdGVkUHJvcGVydHkodSx2KS5nZXQoKSkmJihvW3ZdPWMpKSx2b2lkIDAhPT1jKWJyZWFrfWlmKHZvaWQgMD09PWMmJm4pcmV0dXJuIG4uY291bnQ8bi5tYXgmJihmLndhcm4oIlZhcmlhYmxlICciK3YrIicgaW4gIituLm5hbWUrIiBjb3VsZCBub3QgYmUgZm91bmQhIiksYz10KSxuLmNvdW50PT09bi5tYXgmJmYud2FybigiVG9vIG1hbnkgIituLm5hbWUrIiB3YXJuaW5ncyAtIGFkZGl0aW9uYWwgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIiksbi5jb3VudCsrLHQ7aWYobCl7dmFyIHk7aWYoIjoiPT09bFswXSYmKGM9KHk9cj9yLm51bWJlckZvcm1hdDpmLm51bWJlckZvcm1hdCkobC5yZXBsYWNlKEYsIiIpKShjKSksInwiPT09bFswXSl7eT1yP3IudGltZUZvcm1hdDppO3ZhciB4PWYuZGF0ZVRpbWUybXMoYyk7Yz1mLmZvcm1hdERhdGUoeCxsLnJlcGxhY2UoRiwiIiksITEseSl9fWVsc2V7dmFyIGI9disiTGFiZWwiO2UuaGFzT3duUHJvcGVydHkoYikmJihjPWVbYl0pfXJldHVybiBnJiYoYz0iKCIrYysiKSIsKHB8fGQpJiYoYz0iICIrYyksKG18fGQpJiYoYys9IiAiKSksY30pKX1mLnN1YnBsb3RTb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSsxLG49MCxpPTAsYT0wO2E8cjthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKXx8MCxzPWUuY2hhckNvZGVBdChhKXx8MCxsPW8+PTQ4JiZvPD01NyxjPXM+PTQ4JiZzPD01NztpZihsJiYobj0xMCpuK28tNDgpLGMmJihpPTEwKmkrcy00OCksIWx8fCFjKXtpZihuIT09aSlyZXR1cm4gbi1pO2lmKG8hPT1zKXJldHVybiBvLXN9fXJldHVybiBpLW59O3ZhciBOPTJlOTtmLnNlZWRQc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXtOPTJlOX0sZi5wc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXt2YXIgdD1OO3JldHVybiBOPSg2OTA2OSpOKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMoTi10KTw0Mjk0OTY3Mjk/Zi5wc2V1ZG9SYW5kb20oKTpOLzQyOTQ5NjcyOTZ9LGYuZmlsbFRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCl7ci5wdXNoKHQpfTpmdW5jdGlvbih0KXtyLnRleHQ9dH0saT1mLmV4dHJhY3RPcHRpb24odCxlLCJodHgiLCJob3ZlcnRleHQiKTtpZihmLmlzVmFsaWRUZXh0VmFsdWUoaSkpcmV0dXJuIG4oaSk7dmFyIGE9Zi5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGYuaXNWYWxpZFRleHRWYWx1ZShhKT9uKGEpOnZvaWQgMH0sZi5pc1ZhbGlkVGV4dFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dH0sZi5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7ZT1lfHwwO2Zvcih2YXIgcj0oTWF0aC5yb3VuZCgxMDAqdCpNYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coLjEsZSkpLnRvRml4ZWQoZSkrIiUiLG49MDtuPGU7bisrKS0xIT09ci5pbmRleE9mKCIuIikmJihyPShyPXIucmVwbGFjZSgiMCUiLCIlIikpLnJlcGxhY2UoIi4lIiwiJSIpKTtyZXR1cm4gcn0sZi5pc0hpZGRlbj1mdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfSxmLnN0clRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0fHxlPyJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIjoiIn0sZi5zdHJSb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/InJvdGF0ZSgiK3QrIikiOiIifSxmLnN0clNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dD8ic2NhbGUoIit0KyIpIjoiIn0sZi5nZXRUZXh0VHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9DZW50ZXIscj10LnRleHRYLG49dC50ZXh0WSxpPXQudGFyZ2V0WCxhPXQudGFyZ2V0WSxvPXQuYW5jaG9yWHx8MCxzPXQuYW5jaG9yWXx8MCxsPXQucm90YXRlLGM9dC5zY2FsZTtyZXR1cm4gYz9jPjEmJihjPTEpOmM9MCxmLnN0clRyYW5zbGF0ZShpLWMqKHIrbyksYS1jKihuK3MpKStmLnN0clNjYWxlKGMpKyhsPyJyb3RhdGUoIitsKyhlPyIiOiIgIityKyIgIituKSsiKSI6IiIpfSxmLmVuc3VyZVVuaWZvcm1Gb250U2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWYuZXh0ZW5kRmxhdCh7fSxlKTtyZXR1cm4gci5zaXplPU1hdGgubWF4KGUuc2l6ZSx0Ll9mdWxsTGF5b3V0LnVuaWZvcm10ZXh0Lm1pbnNpemV8fDApLHJ9LGYuam9pbjI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjE/dC5zbGljZSgwLC0xKS5qb2luKGUpK3IrdFtuLTFdOnQuam9pbihlKX0sZi5iaWdGb250PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDEuMip0KX07dmFyIGo9Zi5nZXRGaXJlZm94VmVyc2lvbigpLFU9bnVsbCE9PWomJmo8ODY7Zi5nZXRQb3NpdGlvbkZyb21EM0V2ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFU/W24uZXZlbnQubGF5ZXJYLG4uZXZlbnQubGF5ZXJZXTpbbi5ldmVudC5vZmZzZXRYLG4uZXZlbnQub2Zmc2V0WV19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi9hbmNob3JfdXRpbHMiOjQ4MywiLi9hbmdsZXMiOjQ4NCwiLi9hcnJheSI6NDg1LCIuL2NsZWFuX251bWJlciI6NDg2LCIuL2NsZWFyX3Jlc3BvbnNpdmUiOjQ4OCwiLi9jb2VyY2UiOjQ4OSwiLi9kYXRlcyI6NDkwLCIuL2RvbSI6NDkxLCIuL2V4dGVuZCI6NDkzLCIuL2ZpbHRlcl91bmlxdWUiOjQ5NCwiLi9maWx0ZXJfdmlzaWJsZSI6NDk1LCIuL2dlb21ldHJ5MmQiOjQ5OCwiLi9pZGVudGl0eSI6NTAxLCIuL2luY3JlbWVudCI6NTAyLCIuL2lzX3BsYWluX29iamVjdCI6NTA0LCIuL2tleWVkX2NvbnRhaW5lciI6NTA1LCIuL2xvY2FsaXplIjo1MDYsIi4vbG9nZ2VycyI6NTA3LCIuL21ha2VfdHJhY2VfZ3JvdXBzIjo1MDgsIi4vbWF0cml4Ijo1MDksIi4vbW9kIjo1MTAsIi4vbmVzdGVkX3Byb3BlcnR5Ijo1MTEsIi4vbm9vcCI6NTEyLCIuL25vdGlmaWVyIjo1MTMsIi4vcHJlc2VydmVfZHJhd2luZ19idWZmZXIiOjUxNywiLi9wdXNoX3VuaXF1ZSI6NTE4LCIuL3JlZ2V4Ijo1MjAsIi4vcmVsYXRpdmVfYXR0ciI6NTIxLCIuL3JlbGlua19wcml2YXRlIjo1MjIsIi4vc2VhcmNoIjo1MjMsIi4vc29ydF9vYmplY3Rfa2V5cyI6NTI2LCIuL3N0YXRzIjo1MjcsIi4vdGhyb3R0bGUiOjUzMCwiLi90b19sb2dfcmFuZ2UiOjUzMSwiQHBsb3RseS9kMyI6NTgsImQzLWZvcm1hdCI6MTEyLCJkMy10aW1lLWZvcm1hdCI6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KS5oYXNPd25Qcm9wZXJ0eSgiaGFzT3duUHJvcGVydHkiKX19LHt9XSw1MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbDtyPXJ8fCJuYW1lIixhPWF8fCJ2YWx1ZSI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8IiI7dmFyIHU9e307aWYocylmb3Iobz0wO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV09bzt2YXIgZj1pLnRlc3QoYSksaD17c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09PWU/NDowO2lmKCFzKXtpZighbHx8ND09PWkpcmV0dXJuO3M9W10sbC5zZXQocyl9dmFyIG89dVt0XTtpZih2b2lkIDA9PT1vKXtpZig0PT09aSlyZXR1cm47aXw9MyxvPXMubGVuZ3RoLHVbdF09b31lbHNlIGUhPT0oZj9zW29dW2FdOm4oc1tvXSxhKS5nZXQoKSkmJihpfD0yKTt2YXIgcD1zW29dPXNbb118fHt9O3JldHVybiBwW3JdPXQsZj9wW2FdPWU6bihwLGEpLnNldChlKSxudWxsIT09ZSYmKGkmPS01KSxjW29dPWNbb118aSxofSxnZXQ6ZnVuY3Rpb24odCl7aWYocyl7dmFyIGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIDA6Zj9zW2VdW2FdOm4oc1tlXSxhKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbih0LGUpe3ZhciBuPXVbdF07cmV0dXJuIHZvaWQgMD09PW58fChjW25dPTF8Y1tuXSx1W2VdPW4sZGVsZXRlIHVbdF0sc1tuXVtyXT1lKSxofSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiBoO3ZhciBpPXNbZV07aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjIpcmV0dXJuIGNbZV09MnxjW2VdLGguc2V0KHQsbnVsbCk7aWYoZil7Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz1lO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV0tLTtzLnNwbGljZShlLDEpLGRlbGV0ZSB1W3RdfWVsc2UgbihpLGEpLnNldChudWxsKSxjW2VdPTZ8Y1tlXTtyZXR1cm4gaH0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksbz17fSxsPU9iamVjdC5rZXlzKGMpLHU9MDt1PGwubGVuZ3RoO3UrKylpPWxbdV0sdD1lKyJbIitpKyJdIixzW2ldPygxJmNbaV0mJihvW3QrIi4iK3JdPXNbaV1bcl0pLDImY1tpXSYmKG9bdCsiLiIrYV09Zj80JmNbaV0/bnVsbDpzW2ldW2FdOjQmY1tpXT9udWxsOm4oc1tpXSxhKS5nZXQoKSkpOm9bdF09bnVsbDtyZXR1cm4gb319O3JldHVybiBofX0seyIuL25lc3RlZF9wcm9wZXJ0eSI6NTExfV0sNTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2NvbnRleHQubG9jYWxlLGk9MDtpPDI7aSsrKXtmb3IodmFyIGE9dC5fY29udGV4dC5sb2NhbGVzLG89MDtvPDI7bysrKXt2YXIgcz0oYVtyXXx8e30pLmRpY3Rpb25hcnk7aWYocyl7dmFyIGw9c1tlXTtpZihsKXJldHVybiBsfWE9bi5sb2NhbGVSZWdpc3RyeX12YXIgYz1yLnNwbGl0KCItIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiBlfX0seyIuLi9yZWdpc3RyeSI6NjM4fV0sNTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxpPXQoIi4vbm90aWZpZXIiKSxhPWUuZXhwb3J0cz17fTthLmxvZz1mdW5jdGlvbigpe3ZhciB0O2lmKG4ubG9nZ2luZz4xKXt2YXIgZT1bIkxPRzoiXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZS5wdXNoKGFyZ3VtZW50c1t0XSk7Y29uc29sZS50cmFjZS5hcHBseShjb25zb2xlLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjEpe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJsb25nIil9fSxhLndhcm49ZnVuY3Rpb24oKXt2YXIgdDtpZihuLmxvZ2dpbmc+MCl7dmFyIGU9WyJXQVJOOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtjb25zb2xlLnRyYWNlLmFwcGx5KGNvbnNvbGUsZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2koci5qb2luKCI8YnI+IiksInN0aWNrIil9fSxhLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ7aWYobi5sb2dnaW5nPjApe3ZhciBlPVsiRVJST1I6Il07Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUucHVzaChhcmd1bWVudHNbdF0pO2NvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxlKX1pZihuLm5vdGlmeU9uTG9nZ2luZz4wKXt2YXIgcj1bXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspci5wdXNoKGFyZ3VtZW50c1t0XSk7aShyLmpvaW4oIjxicj4iKSwic3RpY2siKX19fSx7Ii4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo1NDEsIi4vbm90aWZpZXIiOjUxM31dLDUwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10LnNlbGVjdEFsbCgiZy4iK3IucmVwbGFjZSgvXHMvZywiLiIpKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHIpLGkub3JkZXIoKTt2YXIgYT10LmNsYXNzZWQoInJhbmdlcGxvdCIpPyJub2RlUmFuZ2VQbG90MyI6Im5vZGUzIjtyZXR1cm4gaS5lYWNoKChmdW5jdGlvbih0KXt0WzBdW2FdPW4uc2VsZWN0KHRoaXMpfSkpLGl9fSx7IkBwbG90bHkvZDMiOjU4fV0sNTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1hdDQiKTtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5M0RUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdLGVbMl18fDBdO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sblsyXSwxXSkuc2xpY2UoMCwzKX19LHIuYXBwbHkyRFRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7Mz09PWUubGVuZ3RoJiYoZT1lWzBdKTt2YXIgbj0xPT09YXJndW1lbnRzLmxlbmd0aD9lWzBdOltlWzBdLGVbMV1dO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sMV0pLnNsaWNlKDAsMil9fSxyLmFwcGx5MkRUcmFuc2Zvcm0yPWZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwbHkyRFRyYW5zZm9ybSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodC5zbGljZSgwLDIpKS5jb25jYXQoZSh0LnNsaWNlKDIsNCkpKX19LHIuY29udmVydENzc01hdHJpeD1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT10Lmxlbmd0aDtpZigxNj09PWUpcmV0dXJuIHQ7aWYoNj09PWUpcmV0dXJuW3RbMF0sdFsxXSwwLDAsdFsyXSx0WzNdLDAsMCwwLDAsMSwwLHRbNF0sdFs1XSwwLDFdfXJldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXX0sci5pbnZlcnNlVHJhbnNmb3JtTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBuLmludmVydChlLHQpLFtbZVswXSxlWzFdLGVbMl0sZVszXV0sW2VbNF0sZVs1XSxlWzZdLGVbN11dLFtlWzhdLGVbOV0sZVsxMF0sZVsxMV1dLFtlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XV1dfX0seyJnbC1tYXQ0IjoyMTB9XSw1MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn0sbW9kSGFsZjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0KT5lLzI/dC1NYXRoLnJvdW5kKHQvZSkqZTp0fX19LHt9XSw1MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuLG8scyxsLGM9dDtmb3Iocz0wO3M8ZS5sZW5ndGgtMTtzKyspe2lmKC0xPT09KHI9ZVtzXSkpe2ZvcihuPSEwLG89W10sbD0wO2w8Yy5sZW5ndGg7bCsrKW9bbF09YShjW2xdLGUuc2xpY2UocysxKSkoKSxvW2xdIT09b1swXSYmKG49ITEpO3JldHVybiBuP29bMF06b31pZigibnVtYmVyIj09dHlwZW9mIHImJiFpKGMpKXJldHVybjtpZigib2JqZWN0IiE9dHlwZW9mKGM9Y1tyXSl8fG51bGw9PT1jKXJldHVybn1pZigib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiZudWxsIT09KG89Y1tlW3NdXSkpcmV0dXJuIG99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGM9ZS5zcGxpdCgiLiIpO3M8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pY1tzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Yy5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssYy5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX0odCxlLGMpOntzZXQ6bCh0LGMsZSksZ2V0OmEodCxjKSxhc3RyOmUscGFydHM6YyxvYmo6dH19O3ZhciBvPS8oXnxcLilhcmdzXFsvO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gdm9pZCAwPT09dHx8bnVsbD09PXQmJiFlLm1hdGNoKG8pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYSxvLGw9dCxoPSIiLHA9W1t0LGhdXSxkPXMobixyKTtmb3Iobz0wO288ZS5sZW5ndGgtMTtvKyspe2lmKCJudW1iZXIiPT10eXBlb2YoYT1lW29dKSYmIWkobCkpdGhyb3ciYXJyYXkgaW5kZXggYnV0IGNvbnRhaW5lciBpcyBub3QgYW4gYXJyYXkiO2lmKC0xPT09YSl7aWYoZD0hdShsLGUuc2xpY2UobysxKSxuLHIpKWJyZWFrO3JldHVybn1pZighZihsLGEsZVtvKzFdLGQpKWJyZWFrO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW2FdKXx8bnVsbD09PWwpdGhyb3ciY29udGFpbmVyIGlzIG5vdCBhbiBvYmplY3QiO2g9YyhoLGEpLHAucHVzaChbbCxoXSl9aWYoZCl7aWYobz09PWUubGVuZ3RoLTEmJihkZWxldGUgbFtlW29dXSxBcnJheS5pc0FycmF5KGwpJiYrZVtvXT09bC5sZW5ndGgtMSkpZm9yKDtsLmxlbmd0aCYmdm9pZCAwPT09bFtsLmxlbmd0aC0xXTspbC5wb3AoKX1lbHNlIGxbZVtvXV09bn19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWU7cmV0dXJuIG4oZSk/cj0iWyIrZSsiXSI6dCYmKHI9Ii4iK2UpLHQrcn1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBhLG89aShyKSxjPSEwLHU9cixoPW4ucmVwbGFjZSgiLTEiLDApLHA9IW8mJnMocixoKSxkPWVbMF07Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyloPW4ucmVwbGFjZSgiLTEiLGEpLG8mJihwPXModT1yW2Elci5sZW5ndGhdLGgpKSxwJiYoYz0hMSksZih0LGEsZCxwKSYmbCh0W2FdLGUsbi5yZXBsYWNlKCItMSIsYSkpKHUpO3JldHVybiBjfWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH19LHsiLi9hcnJheSI6NDg1LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOiJsb25nIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTtpLmFwcGVuZCgiYnV0dG9uIikuY2xhc3NlZCgibm90aWZpZXItY2xvc2UiLCEwKS5odG1sKCImdGltZXM7Iikub24oImNsaWNrIiwoZnVuY3Rpb24oKXtpLnRyYW5zaXRpb24oKS5jYWxsKHMpfSkpO2Zvcih2YXIgYT1pLmFwcGVuZCgicCIpLG89dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxsPTA7bDxvLmxlbmd0aDtsKyspbCYmYS5hcHBlbmQoImJyIiksYS5hcHBlbmQoInNwYW4iKS50ZXh0KG9bbF0pOyJzdGljayI9PT1lP2kudHJhbnNpdGlvbigpLmR1cmF0aW9uKDM1MCkuc3R5bGUoIm9wYWNpdHkiLDEpOmkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSkpfWZ1bmN0aW9uIHModCl7dC5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKCJlbmQiLChmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpfX19LHsiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxOTB9XSw1MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zZXRjdXJzb3IiKSxpPSJkYXRhLXNhdmVkY3Vyc29yIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLCIhISIpfW4odCxlKX1lbHNlIHImJih0LmF0dHIoaSxudWxsKSwiISEiPT09cj9uKHQpOm4odCxyKSl9fSx7Ii4vc2V0Y3Vyc29yIjo1MjR9XSw1MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXRyaXgiKS5kb3QsaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxmPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihmWzBdIT09cltlXVswXXx8ZlsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+cykmJighZXx8IWwodCkpfTpmdW5jdGlvbih0LGUpe3ZhciBsPXRbMF0sYz10WzFdO2lmKGw9PT1pfHxsPG58fGw+YXx8Yz09PWl8fGM8b3x8Yz5zKXJldHVybiExO3ZhciB1LGYsaCxwLGQsbT1yLmxlbmd0aCxnPXJbMF1bMF0sdj1yWzBdWzFdLHk9MDtmb3IodT0xO3U8bTt1KyspaWYoZj1nLGg9dixnPXJbdV1bMF0sdj1yW3VdWzFdLCEobDwocD1NYXRoLm1pbihmLGcpKXx8bD5NYXRoLm1heChmLGcpfHxjPk1hdGgubWF4KGgsdikpKWlmKGM8TWF0aC5taW4oaCx2KSlsIT09cCYmeSsrO2Vsc2V7aWYoYz09PShkPWc9PT1mP2M6aCsobC1mKSoodi1oKS8oZy1mKSkpcmV0dXJuIDEhPT11fHwhZTtjPD1kJiZsIT09cCYmeSsrfXJldHVybiB5JTI9PTF9LGlzUmVjdDpjLGRlZ2VuZXJhdGU6dX19LGEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLGM9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLHU9bihjLGMpLGY9TWF0aC5zcXJ0KHUpLGg9Wy1jWzFdL2YsY1swXS9mXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sYykpPDB8fHM+dXx8TWF0aC5hYnMobihvLGgpKT5pKXJldHVybiEwO3JldHVybiExfSxhLmZpbHRlcj1mdW5jdGlvbih0LGUpe3ZhciByPVt0WzBdXSxuPTAsaT0wO2Z1bmN0aW9uIG8obyl7dC5wdXNoKG8pO3ZhciBzPXIubGVuZ3RoLGw9bjtyLnNwbGljZShpKzEpO2Zvcih2YXIgYz1sKzE7Yzx0Lmxlbmd0aDtjKyspKGM9PT10Lmxlbmd0aC0xfHxhLmlzU2VnbWVudEJlbnQodCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZvKHQucG9wKCkpO3JldHVybnthZGRQdDpvLHJhdzp0LGZpbHRlcmVkOnJ9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4vbWF0cml4Ijo1MDl9XSw1MTY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19ub193ZWJnbF9tc2ciKSxpPXQoInJlZ2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goKGZ1bmN0aW9uKG4pe2lmKCFuLnJlZ2wmJighbi5waWNrfHxhLl9oYXMoInBhcmNvb3JkcyIpKSl7dHJ5e24ucmVnbD1pKHtjYW52YXM6dGhpcyxhdHRyaWJ1dGVzOnthbnRpYWxpYXM6IW4ucGljayxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITB9LHBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfHxyLmRldmljZVBpeGVsUmF0aW8sZXh0ZW5zaW9uczplfHxbXX0pfWNhdGNoKHQpe289ITF9bi5yZWdsfHwobz0hMSksbyYmdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwoZnVuY3Rpb24oZSl7dCYmdC5lbWl0JiZ0LmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6ZSxsYXllcjpuLmtleX0pfSksITEpfX0pKSxvfHxuKHtjb250YWluZXI6YS5fZ2xjb250YWluZXIubm9kZSgpfSksb319KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc2hvd19ub193ZWJnbF9tc2ciOjUyNSxyZWdsOjI4M31dLDUxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiaXMtbW9iaWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciIT10eXBlb2YoZT10JiZ0Lmhhc093blByb3BlcnR5KCJ1c2VyQWdlbnQiKT90LnVzZXJBZ2VudDpmdW5jdGlvbigpe3ZhciB0OyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYodD1uYXZpZ2F0b3IudXNlckFnZW50KTt0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKTtyZXR1cm4gdH0oKSkpcmV0dXJuITA7dmFyIHI9aSh7dWE6e2hlYWRlcnM6eyJ1c2VyLWFnZW50IjplfX0sdGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITF9KTtpZighcilmb3IodmFyIGE9ZS5zcGxpdCgiICIpLG89MTtvPGEubGVuZ3RoO28rKyl7aWYoLTEhPT1hW29dLmluZGV4T2YoIlNhZmFyaSIpKWZvcih2YXIgcz1vLTE7cz4tMTtzLS0pe3ZhciBsPWFbc107aWYoIlZlcnNpb24vIj09PWwuc3Vic3RyKDAsOCkpe3ZhciBjPWwuc3Vic3RyKDgpLnNwbGl0KCIuIilbMF07aWYobihjKSYmKGM9K2MpLGM+PTEzKXJldHVybiEwfX19cmV0dXJuIHJ9fSx7ImZhc3QtaXNudW1lcmljIjoxOTAsImlzLW1vYmlsZSI6MjM0fV0sNTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7dmFyIGE9e2FkZDpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChhKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmkucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTthLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXI9ZVthXSxpW2FdPXI9PT10P3I6Im9iamVjdCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBpfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWF9LHsiLi4vbGliIjo1MDMsIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo1NDF9XSw1MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPShlfHwiIikrKHI/IiI6IiQiKSxhPSExPT09bj8iIjoiXiI7cmV0dXJuInh5Ij09PXQ/bmV3IFJlZ0V4cChhKyJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK2kpOm5ldyBSZWdFeHAoYSt0KyIoWzItOV18WzEtOV1bMC05XSspPyIraSl9fSx7fV0sNTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvLGk9L15bXlwuXFtcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGkpKXRocm93IG5ldyBFcnJvcigiYmFkIHJlbGF0aXZlQXR0ciBjYWxsOiIrW3QsZV0pO3Q9IiJ9aWYoIl4iIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiYiWyIhPT1lLmNoYXJBdCgwKT90KyIuIitlOnQrZX19LHt9XSw1MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuL2lzX3BsYWluX29iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7Zm9yKHZhciBhIGluIHIpe3ZhciBvPXJbYV0scz1lW2FdO2lmKHMhPT1vKWlmKCJfIj09PWEuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7aWYoYSBpbiBlKWNvbnRpbnVlO2VbYV09b31lbHNlIGlmKG4obykmJm4ocykmJmkob1swXSkpe2lmKCJjdXN0b21kYXRhIj09PWF8fCJpZHMiPT09YSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZpKG9bY10pJiZpKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBpKG8pJiZpKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbYV0pfX19LHsiLi9hcnJheSI6NDg1LCIuL2lzX3BsYWluX29iamVjdCI6NTA0fV0sNTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xvZ2dlcnMiKSxhPXQoIi4vaWRlbnRpdHkiKSxvPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0PGV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdD49ZX1yLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKG4oZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBhLG8sZj0wLGg9ZS5sZW5ndGgscD0wLGQ9aD4xPyhlW2gtMV0tZVswXSkvKGgtMSk6MTtmb3Iobz1kPj0wP3I/czpsOnI/dTpjLHQrPTFlLTkqZCoocj8tMToxKSooZD49MD8xOi0xKTtmPGgmJnArKzwxMDA7KW8oZVthPU1hdGguZmxvb3IoKGYraCkvMildLHQpP2Y9YSsxOmg9YTtyZXR1cm4gcD45MCYmaS5sb2coIkxvbmcgYmluYXJ5IHNlYXJjaC4uLiIpLGYtMX0sci5zb3J0ZXJBc2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxyLnNvcnRlckRlcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLXR9LHIuZGlzdGluY3RWYWxzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5zbGljZSgpO2ZvcihuLnNvcnQoci5zb3J0ZXJBc2MpLGU9bi5sZW5ndGgtMTtlPi0xJiZuW2VdPT09bztlLS0pO2Zvcih2YXIgaSxhPW5bZV0tblswXXx8MSxzPWEvKGV8fDEpLzFlNCxsPVtdLGM9MDtjPD1lO2MrKyl7dmFyIHU9bltjXSxmPXUtaTt2b2lkIDA9PT1pPyhsLnB1c2godSksaT11KTpmPnMmJihhPU1hdGgubWluKGEsZiksbC5wdXNoKHUpLGk9dSl9cmV0dXJue3ZhbHM6bCxtaW5EaWZmOmF9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuL2lkZW50aXR5Ijo1MDEsIi4vbG9nZ2VycyI6NTA3LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSkpLGUmJnQuY2xhc3NlZCgiY3Vyc29yLSIrZSwhMCl9fSx7fV0sNTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxpPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJih0W2VdPWkpO3QuZGVzdHJveT1mdW5jdGlvbigpe3QuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250YWluZXIpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0ibm8td2ViZ2wiLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUubGVmdD1yLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlWyJiYWNrZ3JvdW5kLWNvbG9yIl09bi5saWdodExpbmUsci5zdHlsZVsiei1pbmRleCJdPTMwO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyZXR1cm4gYS50ZXh0Q29udGVudD0iV2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgLSB2aXNpdCBodHRwczovL2dldC53ZWJnbC5vcmcgZm9yIG1vcmUgaW5mbyIsYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGEuc3R5bGUudG9wPSI1MCUiLGEuc3R5bGUubGVmdD0iNTAlIixhLnN0eWxlLmhlaWdodD0iMzAlIixhLnN0eWxlLndpZHRoPSI1MCUiLGEuc3R5bGUubWFyZ2luPSItMTUlIDAgMCAtMjUlIixyLmFwcGVuZENoaWxkKGEpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLHQuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQ9IiNGRkZGRkYiLHQuY29udGFpbmVyLm9uY2xpY2s9ZnVuY3Rpb24oKXt3aW5kb3cub3BlbigiaHR0cHM6Ly9nZXQud2ViZ2wub3JnIil9LCExfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjozNjZ9XSw1MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5zb3J0KCl9fSx7fV0sNTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHMsbDtpZigoIW98fG8+YS5sZW5ndGgpJiYobz1hLmxlbmd0aCksbihlKXx8KGU9ITEpLGkoYVswXSkpe2ZvcihsPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylsW3NdPXIuYWdnTnVtcyh0LGUsYVtzXSk7YT1sfWZvcihzPTA7czxvO3MrKyluKGUpP24oYVtzXSkmJihlPXQoK2UsK2Fbc10pKTplPWFbc107cmV0dXJuIGV9LHIubGVuPWZ1bmN0aW9uKHQpe3JldHVybiByLmFnZ051bXMoKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9KSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9KSwwLHQpL2V9LHIuc3RkZXY9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZSh0LGUsbikpfSxyLm1lZGlhbj1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCkuc29ydCgpO3JldHVybiByLmludGVycChlLC41KX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9hcnJheSI6NDg1LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjo4OX1dLDUyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9saWIiKSxhPWkuc3RyVHJhbnNsYXRlLG89dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsbD0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxkKXt2YXIgQT10LnRleHQoKSxNPSF0LmF0dHIoImRhdGEtbm90ZXgiKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4JiZBLm1hdGNoKGwpLEw9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoIUwuZW1wdHkoKSl7dmFyIEM9dC5hdHRyKCJjbGFzcyIpP3QuYXR0cigiY2xhc3MiKS5zcGxpdCgiICIpWzBdOiJ0ZXh0IjtyZXR1cm4gQys9Ii1tYXRoIixMLnNlbGVjdEFsbCgic3ZnLiIrQykucmVtb3ZlKCksTC5zZWxlY3RBbGwoImcuIitDKyItZ3JvdXAiKS5yZW1vdmUoKSx0LnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6QSwiZGF0YS1tYXRoIjoiTiJ9KSxNPyhlJiZlLl9wcm9taXNlc3x8W10pLnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Quc3R5bGUoImRpc3BsYXkiLCJub25lIik7dmFyIHI9cGFyc2VJbnQodC5ub2RlKCkuc3R5bGUuZm9udFNpemUsMTApLG89e2ZvbnRTaXplOnJ9OyFmdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGw7TWF0aEpheC5IdWIuUXVldWUoKGZ1bmN0aW9uKCl7cmV0dXJuIG89aS5leHRlbmREZWVwQWxsKHt9LE1hdGhKYXguSHViLmNvbmZpZykscz1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5LHZvaWQgMCE9PU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXkmJihNYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5PTApLE1hdGhKYXguSHViLkNvbmZpZyh7bWVzc2FnZVN0eWxlOiJub25lIix0ZXgyamF4OntpbmxpbmVNYXRoOltbIiQiLCIkIl0sWyJcXCgiLCJcXCkiXV19LGRpc3BsYXlBbGlnbjoibGVmdCJ9KX0pLChmdW5jdGlvbigpe2lmKCJTVkciIT09KGE9TWF0aEpheC5IdWIuY29uZmlnLm1lbnVTZXR0aW5ncy5yZW5kZXJlcikpcmV0dXJuIE1hdGhKYXguSHViLnNldFJlbmRlcmVyKCJTVkciKX0pLChmdW5jdGlvbigpe3ZhciByPSJtYXRoLW91dHB1dC0iK2kucmFuZHN0cih7fSw2NCk7cmV0dXJuIGw9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoe2lkOnJ9KS5zdHlsZSh7dmlzaWJpbGl0eToiaGlkZGVuIixwb3NpdGlvbjoiYWJzb2x1dGUifSkuc3R5bGUoeyJmb250LXNpemUiOmUuZm9udFNpemUrInB4In0pLnRleHQodC5yZXBsYWNlKGMsIlxcbHQgIikucmVwbGFjZSh1LCJcXGd0ICIpKSxNYXRoSmF4Lkh1Yi5UeXBlc2V0KGwubm9kZSgpKX0pLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KCJib2R5Iikuc2VsZWN0KCIjTWF0aEpheF9TVkdfZ2x5cGhzIik7aWYobC5zZWxlY3QoIi5NYXRoSmF4X1NWRyIpLmVtcHR5KCl8fCFsLnNlbGVjdCgic3ZnIikubm9kZSgpKWkubG9nKCJUaGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHRleCBzeW50YXguIix0KSxyKCk7ZWxzZXt2YXIgbz1sLnNlbGVjdCgic3ZnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IobC5zZWxlY3QoIi5NYXRoSmF4X1NWRyIpLGUsbyl9aWYobC5yZW1vdmUoKSwiU1ZHIiE9PWEpcmV0dXJuIE1hdGhKYXguSHViLnNldFJlbmRlcmVyKGEpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXMmJihNYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5PXMpLE1hdGhKYXguSHViLkNvbmZpZyhvKX0pKX0oTVsyXSxvLChmdW5jdGlvbihuLGksbyl7TC5zZWxlY3RBbGwoInN2Zy4iK0MpLnJlbW92ZSgpLEwuc2VsZWN0QWxsKCJnLiIrQysiLWdyb3VwIikucmVtb3ZlKCk7dmFyIHM9biYmbi5zZWxlY3QoInN2ZyIpO2lmKCFzfHwhcy5ub2RlKCkpcmV0dXJuIFAoKSx2b2lkIGUoKTt2YXIgbD1MLmFwcGVuZCgiZyIpLmNsYXNzZWQoQysiLWdyb3VwIiwhMCkuYXR0cih7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsImRhdGEtdW5mb3JtYXR0ZWQiOkEsImRhdGEtbWF0aCI6IlkifSk7bC5ub2RlKCkuYXBwZW5kQ2hpbGQocy5ub2RlKCkpLGkmJmkubm9kZSgpJiZzLm5vZGUoKS5pbnNlcnRCZWZvcmUoaS5ub2RlKCkuY2xvbmVOb2RlKCEwKSxzLm5vZGUoKS5maXJzdENoaWxkKTt2YXIgYz1vLndpZHRoLHU9by5oZWlnaHQ7cy5hdHRyKHtjbGFzczpDLGhlaWdodDp1LHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIG1lZXQifSkuc3R5bGUoe292ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBmPXQubm9kZSgpLnN0eWxlLmZpbGx8fCJibGFjayIsaD1zLnNlbGVjdCgiZyIpO2guYXR0cih7ZmlsbDpmLHN0cm9rZTpmfSk7dmFyIHA9aC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT1wLndpZHRoLGc9cC5oZWlnaHQ7KG0+Y3x8Zz51KSYmKHMuc3R5bGUoIm92ZXJmbG93IiwiaGlkZGVuIiksbT0ocD1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkud2lkdGgsZz1wLmhlaWdodCk7dmFyIHY9K3QuYXR0cigieCIpLHk9K3QuYXR0cigieSIpLHg9LShyfHx0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpLzQ7aWYoInkiPT09Q1swXSlsLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrWy05MCx2LHldKyIpIithKC1tLzIseC1nLzIpfSk7ZWxzZSBpZigibCI9PT1DWzBdKXk9eC1nLzI7ZWxzZSBpZigiYSI9PT1DWzBdJiYwIT09Qy5pbmRleE9mKCJhdGl0bGUiKSl2PTAseT14O2Vsc2V7dmFyIGI9dC5hdHRyKCJ0ZXh0LWFuY2hvciIpO3YtPW0qKCJtaWRkbGUiPT09Yj8uNToiZW5kIj09PWI/MTowKSx5PXkreC1nLzJ9cy5hdHRyKHt4OnYseTp5fSksZCYmZC5jYWxsKHQsbCksZShsKX0pKX0pKSk6UCgpLHR9ZnVuY3Rpb24gUCgpe0wuZW1wdHkoKXx8KEM9dC5hdHRyKCJjbGFzcyIpKyItbWF0aCIsTC5zZWxlY3QoInN2Zy4iK0MpLnJlbW92ZSgpKSx0LnRleHQoIiIpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsInByZSIpLGZ1bmN0aW9uKHQsZSl7ZT1lLnJlcGxhY2UobSwiICIpO3ZhciByLGE9ITEsbD1bXSxjPS0xO2Z1bmN0aW9uIHUoKXtjKys7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnLCJ0c3BhbiIpO24uc2VsZWN0KGUpLmF0dHIoe2NsYXNzOiJsaW5lIixkeTpjKnMrImVtIn0pLHQuYXBwZW5kQ2hpbGQoZSkscj1lO3ZhciBpPWw7aWYobD1be25vZGU6ZX1dLGkubGVuZ3RoPjEpZm9yKHZhciBhPTE7YTxpLmxlbmd0aDthKyspZChpW2FdKX1mdW5jdGlvbiBkKHQpe3ZhciBlLGk9dC50eXBlLGE9e307aWYoImEiPT09aSl7ZT0iYSI7dmFyIHM9dC50YXJnZXQsYz10LmhyZWYsdT10LnBvcHVwO2MmJihhPXsieGxpbms6eGxpbms6c2hvdyI6Il9ibGFuayI9PT1zfHwiXyIhPT1zLmNoYXJBdCgwKT8ibmV3IjoicmVwbGFjZSIsdGFyZ2V0OnMsInhsaW5rOnhsaW5rOmhyZWYiOmN9LHUmJihhLm9uY2xpY2s9J3dpbmRvdy5vcGVuKHRoaXMuaHJlZi5iYXNlVmFsLHRoaXMudGFyZ2V0LmJhc2VWYWwsIicrdSsnIik7cmV0dXJuIGZhbHNlOycpKX1lbHNlIGU9InRzcGFuIjt0LnN0eWxlJiYoYS5zdHlsZT10LnN0eWxlKTt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmcsZSk7aWYoInN1cCI9PT1pfHwic3ViIj09PWkpe0EociwiXHUyMDBiIiksci5hcHBlbmRDaGlsZChmKTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoby5zdmcsInRzcGFuIik7QShkLCJcdTIwMGIiKSxuLnNlbGVjdChkKS5hdHRyKCJkeSIscFtpXSksYS5keT1oW2ldLHIuYXBwZW5kQ2hpbGQoZiksci5hcHBlbmRDaGlsZChkKX1lbHNlIHIuYXBwZW5kQ2hpbGQoZik7bi5zZWxlY3QoZikuYXR0cihhKSxyPXQubm9kZT1mLGwucHVzaCh0KX1mdW5jdGlvbiBBKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gTSh0KXtpZigxIT09bC5sZW5ndGgpe3ZhciBuPWwucG9wKCk7dCE9PW4udHlwZSYmaS5sb2coIlN0YXJ0IHRhZyA8IituLnR5cGUrIj4gZG9lc250IG1hdGNoIGVuZCB0YWcgPCIrdCsiPi4gUHJldGVuZGluZyBpdCBkaWQgbWF0Y2guIixlKSxyPWxbbC5sZW5ndGgtMV0ubm9kZX1lbHNlIGkubG9nKCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC8iK3QrIj4uIixlKX15LnRlc3QoZSk/dSgpOihyPXQsbD1be25vZGU6dH1dKTtmb3IodmFyIEw9ZS5zcGxpdChnKSxDPTA7QzxMLmxlbmd0aDtDKyspe3ZhciBQPUxbQ10sST1QLm1hdGNoKHYpLE89SSYmSVsyXS50b0xvd2VyQ2FzZSgpLHo9ZltPXTtpZigiYnIiPT09Tyl1KCk7ZWxzZSBpZih2b2lkIDA9PT16KUEocixTKFApKTtlbHNlIGlmKElbMV0pTShPKTtlbHNle3ZhciBEPUlbNF0sUj17dHlwZTpPfSxGPVQoRCx4KTtpZihGPyhGPUYucmVwbGFjZShrLCIkMSBmaWxsOiIpLHomJihGKz0iOyIreikpOnomJihGPXopLEYmJihSLnN0eWxlPUYpLCJhIj09PU8pe2E9ITA7dmFyIEI9VChELGIpO2lmKEIpe3ZhciBOPUUoQik7TiYmKFIuaHJlZj1OLFIudGFyZ2V0PVQoRCxfKXx8Il9ibGFuayIsUi5wb3B1cD1UKEQsdykpfX1kKFIpfX1yZXR1cm4gYX0odC5ub2RlKCksQSkmJnQuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksci5wb3NpdGlvblRleHQodCksZCYmZC5jYWxsKHQpfX07dmFyIGM9Lyg8fCZsdDt8JiM2MDspL2csdT0vKD58Jmd0O3wmIzYyOykvZzt2YXIgZj17c3VwOiJmb250LXNpemU6NzAlIixzdWI6ImZvbnQtc2l6ZTo3MCUiLGI6ImZvbnQtd2VpZ2h0OmJvbGQiLGk6ImZvbnQtc3R5bGU6aXRhbGljIixhOiJjdXJzb3I6cG9pbnRlciIsc3BhbjoiIixlbToiZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZCJ9LGg9e3N1YjoiMC4zZW0iLHN1cDoiLTAuNmVtIn0scD17c3ViOiItMC4yMWVtIixzdXA6IjAuNDJlbSJ9LGQ9WyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCIiLHZvaWQgMCwiOiJdLG09ci5ORVdMSU5FUz0vKFxyXG4/fFxuKS9nLGc9Lyg8W148Pl0qPikvLHY9LzwoXC8/KShbXiA+XSopKFxzKyguKikpPz4vaSx5PS88YnIoXHMrLiopPz4vaTtyLkJSX1RBR19BTEw9LzxicihccysuKik/Pi9naTt2YXIgeD0vKF58W1xzIiddKXN0eWxlXHMqPVxzKigiKFteIl0qKTs/InwnKFteJ10qKTs/JykvaSxiPS8oXnxbXHMiJ10paHJlZlxzKj1ccyooIihbXiJdKikifCcoW14nXSopJykvaSxfPS8oXnxbXHMiJ10pdGFyZ2V0XHMqPVxzKigiKFteIlxzXSopInwnKFteJ1xzXSopJykvaSx3PS8oXnxbXHMiJ10pcG9wdXBccyo9XHMqKCIoW1x3PSxdKikifCcoW1x3PSxdKiknKS9pO2Z1bmN0aW9uIFQodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj10Lm1hdGNoKGUpLG49ciYmKHJbM118fHJbNF0pO3JldHVybiBuJiZTKG4pfXZhciBrPS8oXnw7KVxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09KGU9ZXx8e30pLmxlbiYmLTEhPT1lLmxlbj9lLmxlbjoxLzAsbj12b2lkIDAhPT1lLmFsbG93ZWRUYWdzP2UuYWxsb3dlZFRhZ3M6WyJiciJdLGk9Ii4uLiIubGVuZ3RoLGE9dC5zcGxpdChnKSxvPVtdLHM9IiIsbD0wLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9YVtjXSxmPXUubWF0Y2godiksaD1mJiZmWzJdLnRvTG93ZXJDYXNlKCk7aWYoaCktMSE9PW4uaW5kZXhPZihoKSYmKG8ucHVzaCh1KSxzPWgpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYobCtwPHIpby5wdXNoKHUpLGwrPXA7ZWxzZSBpZihsPHIpe3ZhciBkPXItbDtzJiYoImJyIiE9PXN8fGQ8PWl8fHA8PWkpJiZvLnBvcCgpLHI+aT9vLnB1c2godS5zdWJzdHIoMCxkLWkpKyIuLi4iKTpvLnB1c2godS5zdWJzdHIoMCxkKSk7YnJlYWt9cz0iIn19cmV0dXJuIG8uam9pbigiIil9O3ZhciBBPXttdToiXHUwM2JjIixhbXA6IiYiLGx0OiI8IixndDoiPiIsbmJzcDoiXHhhMCIsdGltZXM6Ilx4ZDciLHBsdXNtbjoiXHhiMSIsZGVnOiJceGIwIn0sTT0vJigjXGQrfCN4W1xkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBTKHQpe3JldHVybiB0LnJlcGxhY2UoTSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oIiMiPT09ZS5jaGFyQXQoMCk/ZnVuY3Rpb24odCl7aWYodD4xMTE0MTExKXJldHVybjt2YXIgZT1TdHJpbmcuZnJvbUNvZGVQb2ludDtpZihlKXJldHVybiBlKHQpO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGU7cmV0dXJuIHQ8PTY1NTM1P3IodCk6cig1NTIzMisodD4+MTApLHQlMTAyNCs1NjMyMCl9KCJ4Ij09PWUuY2hhckF0KDEpP3BhcnNlSW50KGUuc3Vic3RyKDIpLDE2KTpwYXJzZUludChlLnN1YnN0cigxKSwxMCkpOkFbZV0pfHx0fSkpfWZ1bmN0aW9uIEUodCl7dmFyIGU9ZW5jb2RlVVJJKGRlY29kZVVSSSh0KSkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5ocmVmPXQsbi5ocmVmPWU7dmFyIGk9ci5wcm90b2NvbCxhPW4ucHJvdG9jb2w7cmV0dXJuLTEhPT1kLmluZGV4T2YoaSkmJi0xIT09ZC5pbmRleE9mKGEpP2U6IiJ9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG4sYSxvLHM9ci5ob3Jpem9udGFsQWxpZ24sbD1yLnZlcnRpY2FsQWxpZ258fCJ0b3AiLGM9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdT1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gYT0iYm90dG9tIj09PWw/ZnVuY3Rpb24oKXtyZXR1cm4gYy5ib3R0b20tbi5oZWlnaHR9OiJtaWRkbGUiPT09bD9mdW5jdGlvbigpe3JldHVybiBjLnRvcCsoYy5oZWlnaHQtbi5oZWlnaHQpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGMudG9wfSxvPSJyaWdodCI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGMucmlnaHQtbi53aWR0aH06ImNlbnRlciI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGMubGVmdCsoYy53aWR0aC1uLndpZHRoKS8yfTpmdW5jdGlvbigpe3JldHVybiBjLmxlZnR9LGZ1bmN0aW9uKCl7bj10aGlzLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgdD1vKCktdS5sZWZ0LGU9YSgpLXUudG9wLHM9ci5nZHx8e307aWYoci5nZCl7cy5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0ocyk7dmFyIGw9aS5hcHBseTNEVHJhbnNmb3JtKHMuX2Z1bGxMYXlvdXQuX2ludlRyYW5zZm9ybSkodCxlKTt0PWxbMF0sZT1sWzFdfXJldHVybiB0aGlzLnN0eWxlKHt0b3A6ZSsicHgiLGxlZnQ6dCsicHgiLCJ6LWluZGV4IjoxZTN9KSx0aGlzfX1yLmNvbnZlcnRFbnRpdGllcz1TLHIuc2FuaXRpemVIVE1MPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKG0sIiAiKTtmb3IodmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpLHI9ZSxpPVtdLGE9dC5zcGxpdChnKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD1zLm1hdGNoKHYpLGM9bCYmbFsyXS50b0xvd2VyQ2FzZSgpO2lmKGMgaW4gZilpZihsWzFdKWkubGVuZ3RoJiYocj1pLnBvcCgpKTtlbHNle3ZhciB1PWxbNF0saD1UKHUseCkscD1oP3tzdHlsZTpofTp7fTtpZigiYSI9PT1jKXt2YXIgZD1UKHUsYik7aWYoZCl7dmFyIHk9RShkKTtpZih5KXtwLmhyZWY9eTt2YXIgdz1UKHUsXyk7dyYmKHAudGFyZ2V0PXcpfX19dmFyIGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjKTtyLmFwcGVuZENoaWxkKGspLG4uc2VsZWN0KGspLmF0dHIocCkscj1rLGkucHVzaChrKX1lbHNlIHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoUyhzKSkpfXJldHVybiBlLmlubmVySFRNTH0sci5saW5lQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuc2l6ZSgpfHwxfSxyLnBvc2l0aW9uVGV4dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtmdW5jdGlvbiBpKGUscil7cmV0dXJuIHZvaWQgMD09PXI/bnVsbD09PShyPXQuYXR0cihlKSkmJih0LmF0dHIoZSwwKSxyPTApOnQuYXR0cihlLHIpLHJ9dmFyIGE9aSgieCIsZSksbz1pKCJ5IixyKTsidGV4dCI9PT10aGlzLm5vZGVOYW1lJiZ0LnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmF0dHIoe3g6YSx5Om99KX0pKX07ci5tYWtlVGV4dFNoYWRvdz1mdW5jdGlvbih0KXt2YXIgZT0iMXB4ICIscj0iMXB4ICIsbj0iMXB4ICI7cmV0dXJuIGUrcituK3QrIiwgLSIrZSsiLSIrcituK3QrIiwgIitlKyItIityK24rdCsiLCAtIitlK3Irbit0fSxyLm1ha2VFZGl0YWJsZT1mdW5jdGlvbih0LGUpe3ZhciByPWUuZ2QsaT1lLmRlbGVnYXRlLGE9bi5kaXNwYXRjaCgiZWRpdCIsImlucHV0IiwiY2FuY2VsIiksbz1pfHx0O2lmKHQuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6aT8ibm9uZSI6ImFsbCJ9KSwxIT09dC5zaXplKCkpdGhyb3cgbmV3IEVycm9yKCJib28iKTtmdW5jdGlvbiBzKCl7IWZ1bmN0aW9uKCl7dmFyIGk9bi5zZWxlY3Qocikuc2VsZWN0KCIuc3ZnLWNvbnRhaW5lciIpLG89aS5hcHBlbmQoImRpdiIpLHM9dC5ub2RlKCkuc3R5bGUsYz1wYXJzZUZsb2F0KHMuZm9udFNpemV8fDEyKSx1PWUudGV4dDt2b2lkIDA9PT11JiYodT10LmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSk7by5jbGFzc2VkKCJwbHVnaW4tZWRpdGFibGUgZWRpdGFibGUiLCEwKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIiwiZm9udC1mYW1pbHkiOnMuZm9udEZhbWlseXx8IkFyaWFsIiwiZm9udC1zaXplIjpjLGNvbG9yOmUuZmlsbHx8cy5maWxsfHwiYmxhY2siLG9wYWNpdHk6MSwiYmFja2dyb3VuZC1jb2xvciI6ZS5iYWNrZ3JvdW5kfHwidHJhbnNwYXJlbnQiLG91dGxpbmU6IiNmZmZmZmYzMyAxcHggc29saWQiLG1hcmdpbjpbLWMvOCsxLDAsMCwtMV0uam9pbigicHggIikrInB4IixwYWRkaW5nOiIwIiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSkuYXR0cih7Y29udGVudGVkaXRhYmxlOiEwfSkudGV4dCh1KS5jYWxsKEwodCxpLGUpKS5vbigiYmx1ciIsKGZ1bmN0aW9uKCl7ci5fZWRpdGluZz0hMSx0LnRleHQodGhpcy50ZXh0Q29udGVudCkuc3R5bGUoe29wYWNpdHk6MX0pO3ZhciBlLGk9bi5zZWxlY3QodGhpcykuYXR0cigiY2xhc3MiKTsoZT1pPyIuIitpLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGUpLnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgbz10aGlzLnRleHRDb250ZW50O24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5yZW1vdmUoKSxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLG51bGwpLGEuZWRpdC5jYWxsKHQsbyl9KSkub24oImZvY3VzIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3IuX2VkaXRpbmc9ITAsbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpZihuLmV2ZW50LnRhcmdldD09PXQpcmV0dXJuITE7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW8ubm9kZSgpJiZvLm5vZGUoKS5ibHVyKCl9KSl9KSkub24oImtleXVwIiwoZnVuY3Rpb24oKXsyNz09PW4uZXZlbnQud2hpY2g/KHIuX2VkaXRpbmc9ITEsdC5zdHlsZSh7b3BhY2l0eToxfSksbi5zZWxlY3QodGhpcykuc3R5bGUoe29wYWNpdHk6MH0pLm9uKCJibHVyIiwoZnVuY3Rpb24oKXtyZXR1cm4hMX0pKS50cmFuc2l0aW9uKCkucmVtb3ZlKCksYS5jYW5jZWwuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpKTooYS5pbnB1dC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCksbi5zZWxlY3QodGhpcykuY2FsbChMKHQsaSxlKSkpfSkpLm9uKCJrZXlkb3duIiwoZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkpLmNhbGwobCl9KCksdC5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIGkscz1vLmF0dHIoImNsYXNzIik7KGk9cz8iLiIrcy5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChpKS5zdHlsZSh7b3BhY2l0eTowfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Lm5vZGUoKSxyPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7ci5zZWxlY3ROb2RlQ29udGVudHMoZSk7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpO24ucmVtb3ZlQWxsUmFuZ2VzKCksbi5hZGRSYW5nZShyKSxlLmZvY3VzKCl9cmV0dXJuIGUuaW1tZWRpYXRlP3MoKTpvLm9uKCJjbGljayIscyksbi5yZWJpbmQodCxhLCJvbiIpfX0seyIuLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NzEsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uL2xpYiI6NTAzLCJAcGxvdGx5L2QzIjo1OH1dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3QmJm51bGwhPT10LnRpbWVyJiYoY2xlYXJUaW1lb3V0KHQudGltZXIpLHQudGltZXI9bnVsbCl9ci50aHJvdHRsZT1mdW5jdGlvbih0LGUscil7dmFyIGE9blt0XSxvPURhdGUubm93KCk7aWYoIWEpe2Zvcih2YXIgcyBpbiBuKW5bc10udHM8by02ZTQmJmRlbGV0ZSBuW3NdO2E9blt0XT17dHM6MCx0aW1lcjpudWxsfX1mdW5jdGlvbiBsKCl7cigpLGEudHM9RGF0ZS5ub3coKSxhLm9uRG9uZSYmKGEub25Eb25lKCksYS5vbkRvbmU9bnVsbCl9aShhKSxvPmEudHMrZT9sKCk6YS50aW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2woKSxhLnRpbWVyPW51bGx9KSxlKX0sci5kb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07cmV0dXJuIGUmJmUudGltZXI/bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3ZhciByPWUub25Eb25lO2Uub25Eb25lPWZ1bmN0aW9uKCl7ciYmcigpLHQoKSxlLm9uRG9uZT1udWxsfX0pKTpQcm9taXNlLnJlc29sdmUoKX0sci5jbGVhcj1mdW5jdGlvbih0KXtpZih0KWkoblt0XSksZGVsZXRlIG5bdF07ZWxzZSBmb3IodmFyIGUgaW4gbilyLmNsZWFyKGUpfX0se31dLDUzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO3ZhciByPU1hdGgubG9nKE1hdGgubWluKGVbMF0sZVsxXSkpL01hdGguTE4xMDtyZXR1cm4gbihyKXx8KHI9TWF0aC5sb2coTWF0aC5tYXgoZVswXSxlWzFdKSkvTWF0aC5MTjEwLTYpLHJ9fSx7ImZhc3QtaXNudW1lcmljIjoxOTB9XSw1MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9LGk9dCgiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyIpLmxvY2F0aW9ubW9kZVRvTGF5ZXIsYT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO24uZ2V0VG9wb2pzb25OYW1lPWZ1bmN0aW9uKHQpe3JldHVyblt0LnNjb3BlLnJlcGxhY2UoLyAvZywiLSIpLCJfIix0LnJlc29sdXRpb24udG9TdHJpbmcoKSwibSJdLmpvaW4oIiIpfSxuLmdldFRvcG9qc29uUGF0aD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2UrIi5qc29uIn0sbi5nZXRUb3BvanNvbkZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aVt0LmxvY2F0aW9ubW9kZV0sbj1lLm9iamVjdHNbcl07cmV0dXJuIGEoZSxuKS5mZWF0dXJlc319LHsiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyI6NTg3LCJ0b3BvanNvbi1jbGllbnQiOjMxNX1dLDUzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImxvY2FsZSIsbmFtZToiZW4tVVMiLGRpY3Rpb25hcnk6eyJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIjoiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF0ZToiJW0vJWQvJVkifX19LHt9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG91cnNjYWxlIHRpdGxlIn0sZm9ybWF0OntkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0scGVyaW9kczpbIkFNIiwiUE0iXSxkYXRlVGltZToiJWEgJWIgJWUgJVggJVkiLGRhdGU6IiVkLyVtLyVZIix0aW1lOiIlSDolTTolUyIsZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0seWVhcjoiJVkiLG1vbnRoOiIlYiAlWSIsZGF5TW9udGg6IiViICUtZCIsZGF5TW9udGhZZWFyOiIlYiAlLWQsICVZIn19fSx7fV0sNTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9bi5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYT1uLmxheW91dEFycmF5UmVnZXhlcyxvPXQuc3BsaXQoIlsiKVswXSxzPTA7czxhLmxlbmd0aDtzKyspaWYoKHI9dC5tYXRjaChhW3NdKSkmJjA9PT1yLmluZGV4KXtlPXJbMF07YnJlYWt9aWYoZXx8KGU9aVtpLmluZGV4T2YobyldKSwhZSlyZXR1cm4hMTt2YXIgbD10LnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIGw/ISEocj1sLm1hdGNoKC9eXFsoMHxbMS05XVswLTldKilcXShcLiguKykpPyQvKSkmJnthcnJheTplLGluZGV4Ok51bWJlcihyWzFdKSxwcm9wZXJ0eTpyWzNdfHwiIn06e2FycmF5OmUsaW5kZXg6IiIscHJvcGVydHk6IiJ9fX0seyIuLi9yZWdpc3RyeSI6NjM4fV0sNTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9bi5leHRlbmRGbGF0LGE9bi5pc1BsYWluT2JqZWN0LG89e3ZhbFR5cGU6ImZsYWdsaXN0IixleHRyYXM6WyJub25lIl0sZmxhZ3M6WyJjYWxjIiwiY2xlYXJBeGlzVHlwZXMiLCJwbG90Iiwic3R5bGUiLCJtYXJrZXJTaXplIiwiY29sb3JiYXJzIl19LHM9e3ZhbFR5cGU6ImZsYWdsaXN0IixleHRyYXM6WyJub25lIl0sZmxhZ3M6WyJjYWxjIiwicGxvdCIsImxlZ2VuZCIsInRpY2tzIiwiYXhyYW5nZSIsImxheW91dHN0eWxlIiwibW9kZWJhciIsImNhbWVyYSIsImFycmF5ZHJhdyIsImNvbG9yYmFycyJdfSxsPW8uZmxhZ3Muc2xpY2UoKS5jb25jYXQoWyJmdWxsUmVwbG90Il0pLGM9cy5mbGFncy5zbGljZSgpLmNvbmNhdCgibGF5b3V0UmVwbG90Iik7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09ITE7cmV0dXJuIGV9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49aSh7fSx0KTtmb3IodmFyIG8gaW4gbil7dmFyIHM9bltvXTthKHMpJiYobltvXT1oKHMsZSxyLG8pKX1yZXR1cm4iZnJvbS1yb290Ij09PXImJihuLmVkaXRUeXBlPWUpLG59ZnVuY3Rpb24gaCh0LGUscixuKXtpZih0LnZhbFR5cGUpe3ZhciBhPWkoe30sdCk7aWYoYS5lZGl0VHlwZT1lLEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2EuaXRlbXM9bmV3IEFycmF5KHQuaXRlbXMubGVuZ3RoKTtmb3IodmFyIG89MDtvPHQuaXRlbXMubGVuZ3RoO28rKylhLml0ZW1zW29dPWgodC5pdGVtc1tvXSxlLCJmcm9tLXJvb3QiKX1yZXR1cm4gYX1yZXR1cm4gZih0LGUsIl8iPT09bi5jaGFyQXQoMCk/Im5lc3RlZCI6ImZyb20tcm9vdCIpfWUuZXhwb3J0cz17dHJhY2VzOm8sbGF5b3V0OnMsdHJhY2VGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGwpfSxsYXlvdXRGbGFnczpmdW5jdGlvbigpe3JldHVybiB1KGMpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmVkaXRUeXBlO2lmKHImJiJub25lIiE9PXIpZm9yKHZhciBuPXIuc3BsaXQoIisiKSxpPTA7aTxuLmxlbmd0aDtpKyspdFtuW2ldXT0hMH0sb3ZlcnJpZGVBbGw6Zn19LHsiLi4vbGliIjo1MDN9XSw1Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxhPXQoIi4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9saWIiKSxzPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSx1PWwuY2xlYW5JZCxmPWwuZ2V0RnJvbVRyYWNlLGg9YS50cmFjZUlzO2Z1bmN0aW9uIHAodCxlKXt2YXIgcj10W2VdLG49ZS5jaGFyQXQoMCk7ciYmInBhcGVyIiE9PXImJih0W2VdPXUocixuLCEwKSl9ZnVuY3Rpb24gZCh0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49dFtlXSxpPXQudGl0bGUmJnQudGl0bGVbcl07biYmIWkmJih0LnRpdGxlfHwodC50aXRsZT17fSksdC50aXRsZVtyXT10W2VdLGRlbGV0ZSB0W2VdKX10JiYoInN0cmluZyIhPXR5cGVvZiB0LnRpdGxlJiYibnVtYmVyIiE9dHlwZW9mIHQudGl0bGV8fCh0LnRpdGxlPXt0ZXh0OnQudGl0bGV9KSxlKCJ0aXRsZWZvbnQiLCJmb250IiksZSgidGl0bGVwb3NpdGlvbiIsInBvc2l0aW9uIiksZSgidGl0bGVzaWRlIiwic2lkZSIpLGUoInRpdGxlb2Zmc2V0Iiwib2Zmc2V0IikpfWZ1bmN0aW9uIG0odCl7aWYoIW8uaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4hMTt2YXIgZT10Lm5hbWU7cmV0dXJuIGRlbGV0ZSB0Lm5hbWUsZGVsZXRlIHQuc2hvd2xlZ2VuZCwoInN0cmluZyI9PXR5cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGUpJiZTdHJpbmcoZSl9ZnVuY3Rpb24gZyh0LGUscixuKXtpZihyJiYhbilyZXR1cm4gdDtpZihuJiYhcilyZXR1cm4gZTtpZighdC50cmltKCkpcmV0dXJuIGU7aWYoIWUudHJpbSgpKXJldHVybiB0O3ZhciBpLGE9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihpPTA7aTxhJiZ0LmNoYXJBdChpKT09PWUuY2hhckF0KGkpO2krKyk7cmV0dXJuIHQuc3Vic3RyKDAsaSkudHJpbSgpfWZ1bmN0aW9uIHYodCl7dmFyIGU9Im1pZGRsZSIscj0iY2VudGVyIjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJigtMSE9PXQuaW5kZXhPZigidG9wIik/ZT0idG9wIjotMSE9PXQuaW5kZXhPZigiYm90dG9tIikmJihlPSJib3R0b20iKSwtMSE9PXQuaW5kZXhPZigibGVmdCIpP3I9ImxlZnQiOi0xIT09dC5pbmRleE9mKCJyaWdodCIpJiYocj0icmlnaHQiKSksZSsiICIrcn1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIGUgaW4gdCYmIm9iamVjdCI9PXR5cGVvZiB0W2VdJiYwPT09T2JqZWN0LmtleXModFtlXSkubGVuZ3RofXIuY2xlYXJQcm9taXNlUXVldWU9ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcykmJnQuX3Byb21pc2VzLmxlbmd0aD4wJiZvLmxvZygiQ2xlYXJpbmcgcHJldmlvdXMgcmVqZWN0ZWQgcHJvbWlzZXMgZnJvbSBxdWV1ZS4iKSx0Ll9wcm9taXNlcz1bXX0sci5jbGVhbkxheW91dD1mdW5jdGlvbih0KXt2YXIgZSxuO3R8fCh0PXt9KSx0LnhheGlzMSYmKHQueGF4aXN8fCh0LnhheGlzPXQueGF4aXMxKSxkZWxldGUgdC54YXhpczEpLHQueWF4aXMxJiYodC55YXhpc3x8KHQueWF4aXM9dC55YXhpczEpLGRlbGV0ZSB0LnlheGlzMSksdC5zY2VuZTEmJih0LnNjZW5lfHwodC5zY2VuZT10LnNjZW5lMSksZGVsZXRlIHQuc2NlbmUxKTt2YXIgYT0ocy5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbnx8e30pLmF0dHJSZWdleCxsPShzLnN1YnBsb3RzUmVnaXN0cnkucG9sYXJ8fHt9KS5hdHRyUmVnZXgsZj0ocy5zdWJwbG90c1JlZ2lzdHJ5LnRlcm5hcnl8fHt9KS5hdHRyUmVnZXgsaD0ocy5zdWJwbG90c1JlZ2lzdHJ5LmdsM2R8fHt9KS5hdHRyUmVnZXgsbT1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8bS5sZW5ndGg7ZSsrKXt2YXIgZz1tW2VdO2lmKGEmJmEudGVzdChnKSl7dmFyIHY9dFtnXTt2LmFuY2hvciYmImZyZWUiIT09di5hbmNob3ImJih2LmFuY2hvcj11KHYuYW5jaG9yKSksdi5vdmVybGF5aW5nJiYodi5vdmVybGF5aW5nPXUodi5vdmVybGF5aW5nKSksdi50eXBlfHwodi5pc2RhdGU/di50eXBlPSJkYXRlIjp2LmlzbG9nP3YudHlwZT0ibG9nIjohMT09PXYuaXNkYXRlJiYhMT09PXYuaXNsb2cmJih2LnR5cGU9ImxpbmVhciIpKSwid2l0aHplcm8iIT09di5hdXRvcmFuZ2UmJiJ0b3plcm8iIT09di5hdXRvcmFuZ2V8fCh2LmF1dG9yYW5nZT0hMCx2LnJhbmdlbW9kZT0idG96ZXJvIiksZGVsZXRlIHYuaXNsb2csZGVsZXRlIHYuaXNkYXRlLGRlbGV0ZSB2LmNhdGVnb3JpZXMseSh2LCJkb21haW4iKSYmZGVsZXRlIHYuZG9tYWluLHZvaWQgMCE9PXYuYXV0b3RpY2smJih2b2lkIDA9PT12LnRpY2ttb2RlJiYodi50aWNrbW9kZT12LmF1dG90aWNrPyJhdXRvIjoibGluZWFyIiksZGVsZXRlIHYuYXV0b3RpY2spLGQodil9ZWxzZSBpZihsJiZsLnRlc3QoZykpe2QodFtnXS5yYWRpYWxheGlzKX1lbHNlIGlmKGYmJmYudGVzdChnKSl7dmFyIHg9dFtnXTtkKHguYWF4aXMpLGQoeC5iYXhpcyksZCh4LmNheGlzKX1lbHNlIGlmKGgmJmgudGVzdChnKSl7dmFyIGI9dFtnXSxfPWIuY2FtZXJhcG9zaXRpb247aWYoQXJyYXkuaXNBcnJheShfKSYmND09PV9bMF0ubGVuZ3RoKXt2YXIgdz1fWzBdLFQ9X1sxXSxrPV9bMl0sQT1pKFtdLHcpLE09W107Zm9yKG49MDtuPDM7KytuKU1bbl09VFtuXStrKkFbMis0Km5dO2IuY2FtZXJhPXtleWU6e3g6TVswXSx5Ok1bMV0sejpNWzJdfSxjZW50ZXI6e3g6VFswXSx5OlRbMV0sejpUWzJdfSx1cDp7eDowLHk6MCx6OjF9fSxkZWxldGUgYi5jYW1lcmFwb3NpdGlvbn1kKGIueGF4aXMpLGQoYi55YXhpcyksZChiLnpheGlzKX19dmFyIFM9QXJyYXkuaXNBcnJheSh0LmFubm90YXRpb25zKT90LmFubm90YXRpb25zLmxlbmd0aDowO2ZvcihlPTA7ZTxTO2UrKyl7dmFyIEU9dC5hbm5vdGF0aW9uc1tlXTtvLmlzUGxhaW5PYmplY3QoRSkmJihFLnJlZiYmKCJwYXBlciI9PT1FLnJlZj8oRS54cmVmPSJwYXBlciIsRS55cmVmPSJwYXBlciIpOiJkYXRhIj09PUUucmVmJiYoRS54cmVmPSJ4IixFLnlyZWY9InkiKSxkZWxldGUgRS5yZWYpLHAoRSwieHJlZiIpLHAoRSwieXJlZiIpKX12YXIgTD1BcnJheS5pc0FycmF5KHQuc2hhcGVzKT90LnNoYXBlcy5sZW5ndGg6MDtmb3IoZT0wO2U8TDtlKyspe3ZhciBDPXQuc2hhcGVzW2VdO28uaXNQbGFpbk9iamVjdChDKSYmKHAoQywieHJlZiIpLHAoQywieXJlZiIpKX12YXIgUD1BcnJheS5pc0FycmF5KHQuaW1hZ2VzKT90LmltYWdlcy5sZW5ndGg6MDtmb3IoZT0wO2U8UDtlKyspe3ZhciBJPXQuaW1hZ2VzW2VdO28uaXNQbGFpbk9iamVjdChJKSYmKHAoSSwieHJlZiIpLHAoSSwieXJlZiIpKX12YXIgTz10LmxlZ2VuZDtyZXR1cm4gTyYmKE8ueD4zPyhPLng9MS4wMixPLnhhbmNob3I9ImxlZnQiKTpPLng8LTImJihPLng9LS4wMixPLnhhbmNob3I9InJpZ2h0IiksTy55PjM/KE8ueT0xLjAyLE8ueWFuY2hvcj0iYm90dG9tIik6Ty55PC0yJiYoTy55PS0uMDIsTy55YW5jaG9yPSJ0b3AiKSksZCh0KSwicm90YXRlIj09PXQuZHJhZ21vZGUmJih0LmRyYWdtb2RlPSJvcmJpdCIpLGMuY2xlYW4odCksdC50ZW1wbGF0ZSYmdC50ZW1wbGF0ZS5sYXlvdXQmJnIuY2xlYW5MYXlvdXQodC50ZW1wbGF0ZS5sYXlvdXQpLHR9LHIuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbixpPXRbZV07aWYoImhpc3RvZ3JhbXkiPT09aS50eXBlJiYieGJpbnMiaW4gaSYmISgieWJpbnMiaW4gaSkmJihpLnliaW5zPWkueGJpbnMsZGVsZXRlIGkueGJpbnMpLGkuZXJyb3JfeSYmIm9wYWNpdHkiaW4gaS5lcnJvcl95KXt2YXIgbD1jLmRlZmF1bHRzLGY9aS5lcnJvcl95LmNvbG9yfHwoaChpLCJiYXIiKT9jLmRlZmF1bHRMaW5lOmxbZSVsLmxlbmd0aF0pO2kuZXJyb3JfeS5jb2xvcj1jLmFkZE9wYWNpdHkoYy5yZ2IoZiksYy5vcGFjaXR5KGYpKmkuZXJyb3JfeS5vcGFjaXR5KSxkZWxldGUgaS5lcnJvcl95Lm9wYWNpdHl9aWYoImJhcmRpciJpbiBpJiYoImgiIT09aS5iYXJkaXJ8fCFoKGksImJhciIpJiYiaGlzdG9ncmFtIiE9PWkudHlwZS5zdWJzdHIoMCw5KXx8KGkub3JpZW50YXRpb249ImgiLHIuc3dhcFhZRGF0YShpKSksZGVsZXRlIGkuYmFyZGlyKSwiaGlzdG9ncmFteSI9PT1pLnR5cGUmJnIuc3dhcFhZRGF0YShpKSwiaGlzdG9ncmFteCIhPT1pLnR5cGUmJiJoaXN0b2dyYW15IiE9PWkudHlwZXx8KGkudHlwZT0iaGlzdG9ncmFtIiksInNjbCJpbiBpJiYhKCJjb2xvcnNjYWxlImluIGkpJiYoaS5jb2xvcnNjYWxlPWkuc2NsLGRlbGV0ZSBpLnNjbCksInJldmVyc2VzY2wiaW4gaSYmISgicmV2ZXJzZXNjYWxlImluIGkpJiYoaS5yZXZlcnNlc2NhbGU9aS5yZXZlcnNlc2NsLGRlbGV0ZSBpLnJldmVyc2VzY2wpLGkueGF4aXMmJihpLnhheGlzPXUoaS54YXhpcywieCIpKSxpLnlheGlzJiYoaS55YXhpcz11KGkueWF4aXMsInkiKSksaChpLCJnbDNkIikmJmkuc2NlbmUmJihpLnNjZW5lPXMuc3VicGxvdHNSZWdpc3RyeS5nbDNkLmNsZWFuSWQoaS5zY2VuZSkpLCFoKGksInBpZS1saWtlIikmJiFoKGksImJhci1saWtlIikpaWYoQXJyYXkuaXNBcnJheShpLnRleHRwb3NpdGlvbikpZm9yKG49MDtuPGkudGV4dHBvc2l0aW9uLmxlbmd0aDtuKyspaS50ZXh0cG9zaXRpb25bbl09dihpLnRleHRwb3NpdGlvbltuXSk7ZWxzZSBpLnRleHRwb3NpdGlvbiYmKGkudGV4dHBvc2l0aW9uPXYoaS50ZXh0cG9zaXRpb24pKTt2YXIgcD1hLmdldE1vZHVsZShpKTtpZihwJiZwLmNvbG9yYmFyKXt2YXIgeD1wLmNvbG9yYmFyLmNvbnRhaW5lcixiPXg/aVt4XTppO2ImJmIuY29sb3JzY2FsZSYmKCJZSUduQnUiPT09Yi5jb2xvcnNjYWxlJiYoYi5jb2xvcnNjYWxlPSJZbEduQnUiKSwiWUlPclJkIj09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxPclJkIikpfWlmKCJzdXJmYWNlIj09PWkudHlwZSYmby5pc1BsYWluT2JqZWN0KGkuY29udG91cnMpKXt2YXIgXz1bIngiLCJ5IiwieiJdO2ZvcihuPTA7bjxfLmxlbmd0aDtuKyspe3ZhciB3PWkuY29udG91cnNbX1tuXV07by5pc1BsYWluT2JqZWN0KHcpJiYody5oaWdobGlnaHRDb2xvciYmKHcuaGlnaGxpZ2h0Y29sb3I9dy5oaWdobGlnaHRDb2xvcixkZWxldGUgdy5oaWdobGlnaHRDb2xvciksdy5oaWdobGlnaHRXaWR0aCYmKHcuaGlnaGxpZ2h0d2lkdGg9dy5oaWdobGlnaHRXaWR0aCxkZWxldGUgdy5oaWdobGlnaHRXaWR0aCkpfX1pZigiY2FuZGxlc3RpY2siPT09aS50eXBlfHwib2hsYyI9PT1pLnR5cGUpe3ZhciBUPSExIT09KGkuaW5jcmVhc2luZ3x8e30pLnNob3dsZWdlbmQsaz0hMSE9PShpLmRlY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLEE9bShpLmluY3JlYXNpbmcpLE09bShpLmRlY3JlYXNpbmcpO2lmKCExIT09QSYmITEhPT1NKXt2YXIgUz1nKEEsTSxULGspO1MmJihpLm5hbWU9Uyl9ZWxzZSFBJiYhTXx8aS5uYW1lfHwoaS5uYW1lPUF8fE0pfWlmKEFycmF5LmlzQXJyYXkoaS50cmFuc2Zvcm1zKSl7dmFyIEU9aS50cmFuc2Zvcm1zO2ZvcihuPTA7bjxFLmxlbmd0aDtuKyspe3ZhciBMPUVbbl07aWYoby5pc1BsYWluT2JqZWN0KEwpKXN3aXRjaChMLnR5cGUpe2Nhc2UiZmlsdGVyIjpMLmZpbHRlcnNyYyYmKEwudGFyZ2V0PUwuZmlsdGVyc3JjLGRlbGV0ZSBMLmZpbHRlcnNyYyksTC5jYWxlbmRhciYmKEwudmFsdWVjYWxlbmRhcnx8KEwudmFsdWVjYWxlbmRhcj1MLmNhbGVuZGFyKSxkZWxldGUgTC5jYWxlbmRhcik7YnJlYWs7Y2FzZSJncm91cGJ5IjppZihMLnN0eWxlcz1MLnN0eWxlc3x8TC5zdHlsZSxMLnN0eWxlcyYmIUFycmF5LmlzQXJyYXkoTC5zdHlsZXMpKXt2YXIgQz1MLnN0eWxlcyxQPU9iamVjdC5rZXlzKEMpO0wuc3R5bGVzPVtdO2Zvcih2YXIgST0wO0k8UC5sZW5ndGg7SSsrKUwuc3R5bGVzLnB1c2goe3RhcmdldDpQW0ldLHZhbHVlOkNbUFtJXV19KX19fX15KGksImxpbmUiKSYmZGVsZXRlIGkubGluZSwibWFya2VyImluIGkmJih5KGkubWFya2VyLCJsaW5lIikmJmRlbGV0ZSBpLm1hcmtlci5saW5lLHkoaSwibWFya2VyIikmJmRlbGV0ZSBpLm1hcmtlciksYy5jbGVhbihpKSxpLmF1dG9iaW54JiYoZGVsZXRlIGkuYXV0b2JpbngsZGVsZXRlIGkueGJpbnMpLGkuYXV0b2JpbnkmJihkZWxldGUgaS5hdXRvYmlueSxkZWxldGUgaS55YmlucyksZChpKSxpLmNvbG9yYmFyJiZkKGkuY29sb3JiYXIpLGkubWFya2VyJiZpLm1hcmtlci5jb2xvcmJhciYmZChpLm1hcmtlci5jb2xvcmJhciksaS5saW5lJiZpLmxpbmUuY29sb3JiYXImJmQoaS5saW5lLmNvbG9yYmFyKSxpLmFheGlzJiZkKGkuYWF4aXMpLGkuYmF4aXMmJmQoaS5iYXhpcyl9fSxyLnN3YXBYWURhdGE9ZnVuY3Rpb24odCl7dmFyIGU7aWYoby5zd2FwQXR0cnModCxbIj8iLCI/MCIsImQ/IiwiP2JpbnMiLCJuYmlucz8iLCJhdXRvYmluPyIsIj9zcmMiLCJlcnJvcl8/Il0pLEFycmF5LmlzQXJyYXkodC56KSYmQXJyYXkuaXNBcnJheSh0LnpbMF0pJiYodC50cmFuc3Bvc2U/ZGVsZXRlIHQudHJhbnNwb3NlOnQudHJhbnNwb3NlPSEwKSx0LmVycm9yX3gmJnQuZXJyb3JfeSl7dmFyIHI9dC5lcnJvcl95LG49ImNvcHlfeXN0eWxlImluIHI/ci5jb3B5X3lzdHlsZTohKHIuY29sb3J8fHIudGhpY2tuZXNzfHxyLndpZHRoKTtvLnN3YXBBdHRycyh0LFsiZXJyb3JfPy5jb3B5X3lzdHlsZSJdKSxuJiZvLnN3YXBBdHRycyh0LFsiZXJyb3JfPy5jb2xvciIsImVycm9yXz8udGhpY2tuZXNzIiwiZXJyb3JfPy53aWR0aCJdKX1pZigic3RyaW5nIj09dHlwZW9mIHQuaG92ZXJpbmZvKXt2YXIgaT10LmhvdmVyaW5mby5zcGxpdCgiKyIpO2ZvcihlPTA7ZTxpLmxlbmd0aDtlKyspIngiPT09aVtlXT9pW2VdPSJ5IjoieSI9PT1pW2VdJiYoaVtlXT0ieCIpO3QuaG92ZXJpbmZvPWkuam9pbigiKyIpfX0sci5jb2VyY2VUcmFjZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZihuKGUpKXJldHVybltlXTtpZighQXJyYXkuaXNBcnJheShlKXx8IWUubGVuZ3RoKXJldHVybiB0LmRhdGEubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspby5pc0luZGV4KGVbaV0sdC5kYXRhLmxlbmd0aCk/ci5wdXNoKGVbaV0pOm8ud2FybigidHJhY2UgaW5kZXggKCIsZVtpXSwiKSBpcyBub3QgYSBudW1iZXIgb3IgaXMgb3V0IG9mIGJvdW5kcyIpO3JldHVybiByfXJldHVybiBlfSxyLm1hbmFnZUFycmF5Q29udGFpbmVycz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5vYmosYT10LnBhcnRzLHM9YS5sZW5ndGgsbD1hW3MtMV0sYz1uKGwpO2lmKGMmJm51bGw9PT1lKXt2YXIgdT1hLnNsaWNlKDAscy0xKS5qb2luKCIuIik7by5uZXN0ZWRQcm9wZXJ0eShpLHUpLmdldCgpLnNwbGljZShsLDEpfWVsc2UgYyYmdm9pZCAwPT09dC5nZXQoKT8odm9pZCAwPT09dC5nZXQoKSYmKHJbdC5hc3RyXT1udWxsKSx0LnNldChlKSk6dC5zZXQoZSl9O3ZhciB4PS8oXC5bXlxbXF1cLl0rfFxbW15cW1xdXC5dK1xdKSQvO2Z1bmN0aW9uIGIodCl7dmFyIGU9dC5zZWFyY2goeCk7aWYoZT4wKXJldHVybiB0LnN1YnN0cigwLGUpfXIuaGFzUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWIoZSk7cjspe2lmKHIgaW4gdClyZXR1cm4hMDtyPWIocil9cmV0dXJuITF9O3ZhciBfPVsieCIsInkiLCJ6Il07ci5jbGVhckF4aXNUeXBlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspZm9yKHZhciBpPXQuX2Z1bGxEYXRhW25dLGE9MDthPDM7YSsrKXt2YXIgcz1mKHQsaSxfW2FdKTtpZihzJiYibG9nIiE9PXMudHlwZSl7dmFyIGw9cy5fbmFtZSxjPXMuX2lkLnN1YnN0cigxKTtpZigic2NlbmUiPT09Yy5zdWJzdHIoMCw1KSl7aWYodm9pZCAwIT09cltjXSljb250aW51ZTtsPWMrIi4iK2x9dmFyIHU9bCsiLnR5cGUiO3ZvaWQgMD09PXJbbF0mJnZvaWQgMD09PXJbdV0mJm8ubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsdSkuc2V0KG51bGwpfX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vbGliIjo1MDMsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTU4LCIuLi9wbG90cy9wbG90cyI6NjE5LCIuLi9yZWdpc3RyeSI6NjM4LCJmYXN0LWlzbnVtZXJpYyI6MTkwLCJnbC1tYXQ0L2Zyb21RdWF0IjoyMDB9XSw1Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wbG90X2FwaSIpO3IuX2RvUGxvdD1uLl9kb1Bsb3Qsci5uZXdQbG90PW4ubmV3UGxvdCxyLnJlc3R5bGU9bi5yZXN0eWxlLHIucmVsYXlvdXQ9bi5yZWxheW91dCxyLnJlZHJhdz1uLnJlZHJhdyxyLnVwZGF0ZT1uLnVwZGF0ZSxyLl9ndWlSZXN0eWxlPW4uX2d1aVJlc3R5bGUsci5fZ3VpUmVsYXlvdXQ9bi5fZ3VpUmVsYXlvdXQsci5fZ3VpVXBkYXRlPW4uX2d1aVVwZGF0ZSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9bi5fc3RvcmVEaXJlY3RHVUlFZGl0LHIucmVhY3Q9bi5yZWFjdCxyLmV4dGVuZFRyYWNlcz1uLmV4dGVuZFRyYWNlcyxyLnByZXBlbmRUcmFjZXM9bi5wcmVwZW5kVHJhY2VzLHIuYWRkVHJhY2VzPW4uYWRkVHJhY2VzLHIuZGVsZXRlVHJhY2VzPW4uZGVsZXRlVHJhY2VzLHIubW92ZVRyYWNlcz1uLm1vdmVUcmFjZXMsci5wdXJnZT1uLnB1cmdlLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5zZXRQbG90Q29uZmlnPW4uc2V0UGxvdENvbmZpZyxyLnRvSW1hZ2U9dCgiLi90b19pbWFnZSIpLHIudmFsaWRhdGU9dCgiLi92YWxpZGF0ZSIpLHIuZG93bmxvYWRJbWFnZT10KCIuLi9zbmFwc2hvdC9kb3dubG9hZCIpO3ZhciBpPXQoIi4vdGVtcGxhdGVfYXBpIik7ci5tYWtlVGVtcGxhdGU9aS5tYWtlVGVtcGxhdGUsci52YWxpZGF0ZVRlbXBsYXRlPWkudmFsaWRhdGVUZW1wbGF0ZX0seyIuLi9zbmFwc2hvdC9kb3dubG9hZCI6NjQwLCIuL3Bsb3RfYXBpIjo1NDAsIi4vdGVtcGxhdGVfYXBpIjo1NDUsIi4vdG9faW1hZ2UiOjU0NiwiLi92YWxpZGF0ZSI6NTQ3fV0sNTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9pc19wbGFpbl9vYmplY3QiKSxpPXQoIi4uL2xpYi9ub29wIiksYT10KCIuLi9saWIvbG9nZ2VycyIpLG89dCgiLi4vbGliL3NlYXJjaCIpLnNvcnRlckFzYyxzPXQoIi4uL3JlZ2lzdHJ5Iik7ci5jb250YWluZXJBcnJheU1hdGNoPXQoIi4vY29udGFpbmVyX2FycmF5X21hdGNoIik7dmFyIGw9ci5pc0FkZFZhbD1mdW5jdGlvbih0KXtyZXR1cm4iYWRkIj09PXR8fG4odCl9LGM9ci5pc1JlbW92ZVZhbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fCJyZW1vdmUiPT09dH07ci5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcz1mdW5jdGlvbih0LGUscixuLHUpe3ZhciBmPWUuYXN0cixoPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGYsInN1cHBseUxheW91dERlZmF1bHRzIikscD1zLmdldENvbXBvbmVudE1ldGhvZChmLCJkcmF3IiksZD1zLmdldENvbXBvbmVudE1ldGhvZChmLCJkcmF3T25lIiksbT1uLnJlcGxvdHx8bi5yZWNhbGN8fGg9PT1pfHxwPT09aSxnPXQubGF5b3V0LHY9dC5fZnVsbExheW91dDtpZihyWyIiXSl7T2JqZWN0LmtleXMocikubGVuZ3RoPjEmJmEud2FybigiRnVsbCBhcnJheSBlZGl0cyBhcmUgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgZWRpdHMiLGYpO3ZhciB5PXJbIiJdWyIiXTtpZihjKHkpKWUuc2V0KG51bGwpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIGEud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgYXJyYXkgZWRpdCB2YWx1ZSIsZix5KSwhMDtlLnNldCh5KX1yZXR1cm4hbSYmKGgoZyx2KSxwKHQpLCEwKX12YXIgeCxiLF8sdyxULGssQSxNLFM9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChvKSxFPWUuZ2V0KCksTD1FfHxbXSxDPXUodixmKS5nZXQoKSxQPVtdLEk9LTEsTz1MLmxlbmd0aDtmb3IoeD0wO3g8Uy5sZW5ndGg7eCsrKWlmKHc9cltfPVNbeF1dLFQ9T2JqZWN0LmtleXModyksaz13WyIiXSxBPWwoayksXzwwfHxfPkwubGVuZ3RoLShBPzA6MSkpYS53YXJuKCJpbmRleCBvdXQgb2YgcmFuZ2UiLGYsXyk7ZWxzZSBpZih2b2lkIDAhPT1rKVQubGVuZ3RoPjEmJmEud2FybigiSW5zZXJ0aW9uICYgcmVtb3ZhbCBhcmUgaW5jb21wYXRpYmxlIHdpdGggZWRpdHMgdG8gdGhlIHNhbWUgaW5kZXguIixmLF8pLGMoayk/UC5wdXNoKF8pOkE/KCJhZGQiPT09ayYmKGs9e30pLEwuc3BsaWNlKF8sMCxrKSxDJiZDLnNwbGljZShfLDAse30pKTphLndhcm4oIlVucmVjb2duaXplZCBmdWxsIG9iamVjdCBlZGl0IHZhbHVlIixmLF8sayksLTE9PT1JJiYoST1fKTtlbHNlIGZvcihiPTA7YjxULmxlbmd0aDtiKyspTT1mKyJbIitfKyJdLiIsdShMW19dLFRbYl0sTSkuc2V0KHdbVFtiXV0pO2Zvcih4PVAubGVuZ3RoLTE7eD49MDt4LS0pTC5zcGxpY2UoUFt4XSwxKSxDJiZDLnNwbGljZShQW3hdLDEpO2lmKEwubGVuZ3RoP0V8fGUuc2V0KEwpOmUuc2V0KG51bGwpLG0pcmV0dXJuITE7aWYoaChnLHYpLGQhPT1pKXt2YXIgejtpZigtMT09PUkpej1TO2Vsc2V7Zm9yKE89TWF0aC5tYXgoTC5sZW5ndGgsTyksej1bXSx4PTA7eDxTLmxlbmd0aCYmISgoXz1TW3hdKT49SSk7eCsrKXoucHVzaChfKTtmb3IoeD1JO3g8Tzt4Kyspei5wdXNoKHgpfWZvcih4PTA7eDx6Lmxlbmd0aDt4KyspZCh0LHpbeF0pfWVsc2UgcCh0KTtyZXR1cm4hMH19LHsiLi4vbGliL2lzX3BsYWluX29iamVjdCI6NTA0LCIuLi9saWIvbG9nZ2VycyI6NTA3LCIuLi9saWIvbm9vcCI6NTEyLCIuLi9saWIvc2VhcmNoIjo1MjMsIi4uL3JlZ2lzdHJ5Ijo2MzgsIi4vY29udGFpbmVyX2FycmF5X21hdGNoIjo1MzV9XSw1NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoImhhcy1ob3ZlciIpLG89dCgiLi4vbGliIikscz1vLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vbGliL2V2ZW50cyIpLGM9dCgiLi4vbGliL3F1ZXVlIiksdT10KCIuLi9yZWdpc3RyeSIpLGY9dCgiLi9wbG90X3NjaGVtYSIpLGg9dCgiLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZD10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxnPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLmluaXRJbnRlcmFjdGlvbnMsdj10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHk9dCgiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LHg9dCgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsYj10KCIuL21hbmFnZV9hcnJheXMiKSxfPXQoIi4vaGVscGVycyIpLHc9dCgiLi9zdWJyb3V0aW5lcyIpLFQ9dCgiLi9lZGl0X3R5cGVzIiksaz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuQVhfTkFNRV9QQVRURVJOLEE9MDtmdW5jdGlvbiBNKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06dC5lbWl0KCJwbG90bHlfYWZ0ZXJwbG90Iil9ZnVuY3Rpb24gUyh0LGUpe3RyeXt0Ll9mdWxsTGF5b3V0Ll9wYXBlci5zdHlsZSgiYmFja2dyb3VuZCIsZSl9Y2F0Y2godCl7by5lcnJvcih0KX19ZnVuY3Rpb24gRSh0LGUpe1ModCxtLmNvbWJpbmUoZSwid2hpdGUiKSl9ZnVuY3Rpb24gTCh0LGUpe2lmKCF0Ll9jb250ZXh0KXt0Ll9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSx4KTt2YXIgcj1uLnNlbGVjdCgiYmFzZSIpO3QuX2NvbnRleHQuX2Jhc2VVcmw9ci5zaXplKCkmJnIuYXR0cigiaHJlZiIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF06IiJ9dmFyIGkscyxsLGM9dC5fY29udGV4dDtpZihlKXtmb3Iocz1PYmplY3Qua2V5cyhlKSxpPTA7aTxzLmxlbmd0aDtpKyspImVkaXRhYmxlIiE9PShsPXNbaV0pJiYiZWRpdHMiIT09bCYmbCBpbiBjJiYoInNldEJhY2tncm91bmQiPT09bCYmIm9wYXF1ZSI9PT1lW2xdP2NbbF09RTpjW2xdPWVbbF0pO2UucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PWUuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LHM9T2JqZWN0LmtleXMoYy5lZGl0cyksaT0wO2k8cy5sZW5ndGg7aSsrKWMuZWRpdHNbc1tpXV09dTtpZihlLmVkaXRzKWZvcihzPU9iamVjdC5rZXlzKGUuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKykobD1zW2ldKWluIGMuZWRpdHMmJihjLmVkaXRzW2xdPWUuZWRpdHNbbF0pO2MuX2V4cG9ydGVkUGxvdD1lLl9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1jLmRpc3BsYXlNb2RlQmFyfHxhfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksInRyYW5zcGFyZW50IiE9PWMuc2V0QmFja2dyb3VuZCYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1TKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT10LmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09dC5jbGllbnRXaWR0aDt2YXIgZj1jLnNjcm9sbFpvb20saD1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09ZiloLmNhcnRlc2lhbj0xLGguZ2wzZD0xLGguZ2VvPTEsaC5tYXBib3g9MTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZil7dmFyIHA9Zi5zcGxpdCgiKyIpO2ZvcihpPTA7aTxwLmxlbmd0aDtpKyspaFtwW2ldXT0xfWVsc2UhMSE9PWYmJihoLmdsM2Q9MSxoLmdlbz0xLGgubWFwYm94PTEpfWZ1bmN0aW9uIEModCxlKXt2YXIgcixuLGk9ZSsxLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykobj10W3JdKTwwP2EucHVzaChpK24pOmEucHVzaChuKTtyZXR1cm4gYX1mdW5jdGlvbiBQKHQsZSxyKXt2YXIgbixpO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2lmKChpPWVbbl0pIT09cGFyc2VJbnQoaSwxMCkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluICIrcisiIG11c3QgYmUgaW50ZWdlcnMiKTtpZihpPj10LmRhdGEubGVuZ3RofHxpPC10LmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLiIpO2lmKGUuaW5kZXhPZihpLG4rMSk+LTF8fGk+PTAmJmUuaW5kZXhPZigtdC5kYXRhLmxlbmd0aCtpKT4tMXx8aTwwJiZlLmluZGV4T2YodC5kYXRhLmxlbmd0aCtpKT4tMSl0aHJvdyBuZXcgRXJyb3IoImVhY2ggaW5kZXggaW4gIityKyIgbXVzdCBiZSB1bmlxdWUuIil9fWZ1bmN0aW9uIEkodCxlLHIpe2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnRJbmRpY2VzIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuIik7aWYoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxQKHQsZSwiY3VycmVudEluZGljZXMiKSx2b2lkIDA9PT1yfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHZvaWQgMCE9PXImJlAodCxyLCJuZXdJbmRpY2VzIiksdm9pZCAwIT09ciYmZS5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnQgYW5kIG5ldyBpbmRpY2VzIG11c3QgYmUgb2YgZXF1YWwgbGVuZ3RoLiIpfWZ1bmN0aW9uIE8odCxlLHIsbixhKXshZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5pc1BsYWluT2JqZWN0KG4pO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc1BsYWluT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcigidXBkYXRlIG11c3QgYmUgYSBrZXk6dmFsdWUgb2JqZWN0Iik7aWYodm9pZCAwPT09cil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzIik7Zm9yKHZhciBhIGluIFAodCxyLCJpbmRpY2VzIiksZSl7aWYoIUFycmF5LmlzQXJyYXkoZVthXSl8fGVbYV0ubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGUgIithKyIgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGggZXF1YWwgdG8gaW5kaWNlcyBhcnJheSBsZW5ndGgiKTtpZihpJiYoIShhIGluIG4pfHwhQXJyYXkuaXNBcnJheShuW2FdKXx8blthXS5sZW5ndGghPT1lW2FdLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJ3aGVuIG1heFBvaW50cyBpcyBzZXQgYXMgYSBrZXk6dmFsdWUgb2JqZWN0IGl0IG11c3QgY29udGFpbiBhIDE6MSBjb3JyaXNwb25kZW5jZSB3aXRoIHRoZSBrZXlzIGFuZCBudW1iZXIgb2YgdHJhY2VzIGluIHRoZSB1cGRhdGUgb2JqZWN0Iil9fSh0LGUscixuKTtmb3IodmFyIGw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbCxjLHUsZixoPW8uaXNQbGFpbk9iamVjdChuKSxwPVtdO2Zvcih2YXIgZCBpbiBBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9QyhyLHQuZGF0YS5sZW5ndGgtMSksZSlmb3IodmFyIG09MDttPHIubGVuZ3RoO20rKyl7aWYoYT10LmRhdGFbclttXV0sbD0oYz1zKGEsZCkpLmdldCgpLHU9ZVtkXVttXSwhby5pc0FycmF5T3JUeXBlZEFycmF5KHUpKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlOiAiK2QrIiBpbmRleDogIittKyIgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogIitkKTtpZihsLmNvbnN0cnVjdG9yIT09dS5jb25zdHJ1Y3Rvcil0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBleHRlbmQgYXJyYXkgd2l0aCBhbiBhcnJheSBvZiBhIGRpZmZlcmVudCB0eXBlOiAiK2QpO2Y9aD9uW2RdW21dOm4saShmKXx8KGY9LTEpLHAucHVzaCh7cHJvcDpjLHRhcmdldDpsLGluc2VydDp1LG1heHA6TWF0aC5mbG9vcihmKX0pfXJldHVybiBwfSh0LGUscixuKSxjPXt9LHU9e30sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgaD1sW2ZdLnByb3AscD1sW2ZdLm1heHAsZD1hKGxbZl0udGFyZ2V0LGxbZl0uaW5zZXJ0LHApO2guc2V0KGRbMF0pLEFycmF5LmlzQXJyYXkoY1toLmFzdHJdKXx8KGNbaC5hc3RyXT1bXSksY1toLmFzdHJdLnB1c2goZFsxXSksQXJyYXkuaXNBcnJheSh1W2guYXN0cl0pfHwodVtoLmFzdHJdPVtdKSx1W2guYXN0cl0ucHVzaChsW2ZdLnRhcmdldC5sZW5ndGgpfXJldHVybnt1cGRhdGU6YyxtYXhQb2ludHM6dX19ZnVuY3Rpb24geih0LGUpe3ZhciByPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoKTtyZXR1cm4gci5zZXQodCksci5zZXQoZSx0Lmxlbmd0aCkscn1mdW5jdGlvbiBEKHQsZSxuLGkpe3Q9by5nZXRHcmFwaERpdih0KSxfLmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBhPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgZSlhW2VdPW47ZWxzZXtpZighby5pc1BsYWluT2JqZWN0KGUpKXJldHVybiBvLndhcm4oIlJlc3R5bGUgZmFpbC4iLGUsbixpKSxQcm9taXNlLnJlamVjdCgpO2E9by5leHRlbmRGbGF0KHt9LGUpLHZvaWQgMD09PWkmJihpPW4pfU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIHM9Xy5jb2VyY2VUcmFjZUluZGljZXModCxpKSxsPU4odCxhLHMpLHU9bC5mbGFnczt1LmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCksdS5jbGVhckF4aXNUeXBlcyYmXy5jbGVhckF4aXNUeXBlcyh0LHMse30pO3ZhciBmPVtdO3UuZnVsbFJlcGxvdD9mLnB1c2goci5fZG9QbG90KTooZi5wdXNoKGgucHJldmlvdXNQcm9taXNlcyksaC5zdXBwbHlEZWZhdWx0cyh0KSx1Lm1hcmtlclNpemUmJihoLmRvQ2FsY2RhdGEodCksSChmKSksdS5zdHlsZSYmZi5wdXNoKHcuZG9UcmFjZVN0eWxlKSx1LmNvbG9yYmFycyYmZi5wdXNoKHcuZG9Db2xvckJhcnMpLGYucHVzaChNKSksZi5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxELFt0LGwudW5kb2l0LGwudHJhY2VzXSxELFt0LGwucmVkb2l0LGwudHJhY2VzXSk7dmFyIHA9by5zeW5jT3JBc3luYyhmLHQpO3JldHVybiBwJiZwLnRoZW58fChwPVByb21pc2UucmVzb2x2ZSgpKSxwLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLGwuZXZlbnREYXRhKSx0fSkpfWZ1bmN0aW9uIFIodCl7cmV0dXJuIHZvaWQgMD09PXQ/bnVsbDp0fWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gZT9mdW5jdGlvbihlLHIsbil7dmFyIGk9cyhlLHIpLGE9aS5zZXQ7cmV0dXJuIGkuc2V0PWZ1bmN0aW9uKGUpe0IoKG58fCIiKStyLGkuZ2V0KCksZSx0KSxhKGUpfSxpfTpzfWZ1bmN0aW9uIEIodCxlLHIsbil7aWYoQXJyYXkuaXNBcnJheShlKXx8QXJyYXkuaXNBcnJheShyKSlmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lOltdLGE9QXJyYXkuaXNBcnJheShyKT9yOltdLHM9TWF0aC5tYXgoaS5sZW5ndGgsYS5sZW5ndGgpLGw9MDtsPHM7bCsrKUIodCsiWyIrbCsiXSIsaVtsXSxhW2xdLG4pO2Vsc2UgaWYoby5pc1BsYWluT2JqZWN0KGUpfHxvLmlzUGxhaW5PYmplY3Qocikpe3ZhciBjPW8uaXNQbGFpbk9iamVjdChlKT9lOnt9LHU9by5pc1BsYWluT2JqZWN0KHIpP3I6e30sZj1vLmV4dGVuZEZsYXQoe30sYyx1KTtmb3IodmFyIGggaW4gZilCKHQrIi4iK2gsY1toXSx1W2hdLG4pfWVsc2Ugdm9pZCAwPT09blt0XSYmKG5bdF09UihlKSl9ZnVuY3Rpb24gTih0LGUscil7dmFyIG4saT10Ll9mdWxsTGF5b3V0LGE9dC5fZnVsbERhdGEsbD10LmRhdGEsYz1pLl9ndWlFZGl0aW5nLGQ9RihpLl9wcmVHVUksYyksbT1vLmV4dGVuZERlZXBBbGwoe30sZSk7aihlKTt2YXIgZyx2PVQudHJhY2VGbGFncygpLHk9e30seD17fTtmdW5jdGlvbiBiKCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbigpe30pKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXAuaWQybmFtZSh0KTstMT09PWcuaW5kZXhPZihlKSYmZy5wdXNoKGUpfWZ1bmN0aW9uIGsodCl7cmV0dXJuIkxBWU9VVCIrdCsiLmF1dG9yYW5nZSJ9ZnVuY3Rpb24gQSh0KXtyZXR1cm4iTEFZT1VUIit0KyIucmFuZ2UifWZ1bmN0aW9uIE0odCl7Zm9yKHZhciBlPXQ7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5faW5wdXQ9PT1sW3RdKXJldHVybiBhW2VdfWZ1bmN0aW9uIFMobixhLG8pe2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKChmdW5jdGlvbih0KXtTKHQsYSxvKX0pKTtlbHNlIGlmKCEobiBpbiBlKSYmIV8uaGFzUGFyZW50KGUsbikpe3ZhciBzO2lmKCJMQVlPVVQiPT09bi5zdWJzdHIoMCw2KSlzPWQodC5sYXlvdXQsbi5yZXBsYWNlKCJMQVlPVVQiLCIiKSk7ZWxzZXt2YXIgdT1yW29dO3M9RihpLl90cmFjZVByZUdVSVtNKHUpLl9mdWxsSW5wdXQudWlkXSxjKShsW3VdLG4pfW4gaW4geHx8KHhbbl09YigpKSx2b2lkIDA9PT14W25dW29dJiYoeFtuXVtvXT1SKHMuZ2V0KCkpKSx2b2lkIDAhPT1hJiZzLnNldChhKX19ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV1bdF19fWZ1bmN0aW9uIEwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuITE9PT1lP2FbcltuXV1bdF06bnVsbH19Zm9yKHZhciBDIGluIGUpe2lmKF8uaGFzUGFyZW50KGUsQykpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrQysiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgUCxJLE8seixELEIsTj1lW0NdO2lmKCJhdXRvYmlueCIhPT1DJiYiYXV0b2JpbnkiIT09Q3x8KEM9Qy5jaGFyQXQoQy5sZW5ndGgtMSkrImJpbnMiLE49QXJyYXkuaXNBcnJheShOKT9OLm1hcChMKEMpKTohMT09PU4/ci5tYXAoRShDKSk6bnVsbCkseVtDXT1OLCJMQVlPVVQiIT09Qy5zdWJzdHIoMCw2KSl7Zm9yKHhbQ109YigpLG49MDtuPHIubGVuZ3RoO24rKyl7aWYoUD1sW3Jbbl1dLEk9TShyW25dKSx6PShPPUYoaS5fdHJhY2VQcmVHVUlbSS5fZnVsbElucHV0LnVpZF0sYykoUCxDKSkuZ2V0KCksdm9pZCAwIT09KEQ9QXJyYXkuaXNBcnJheShOKT9OW24lTi5sZW5ndGhdOk4pKXt2YXIgVT1PLnBhcnRzW08ucGFydHMubGVuZ3RoLTFdLFY9Qy5zdWJzdHIoMCxDLmxlbmd0aC1VLmxlbmd0aC0xKSxIPVY/VisiLiI6IiIscT1WP3MoSSxWKS5nZXQoKTpJO2lmKChCPWYuZ2V0VHJhY2VWYWxPYmplY3QoSSxPLnBhcnRzKSkmJkIuaW1wbGllZEVkaXRzJiZudWxsIT09RClmb3IodmFyIEcgaW4gQi5pbXBsaWVkRWRpdHMpUyhvLnJlbGF0aXZlQXR0cihDLEcpLEIuaW1wbGllZEVkaXRzW0ddLG4pO2Vsc2UgaWYoInRoaWNrbmVzc21vZGUiIT09VSYmImxlbm1vZGUiIT09VXx8ej09PUR8fCJmcmFjdGlvbiIhPT1EJiYicGl4ZWxzIiE9PUR8fCFxKXtpZigidHlwZSI9PT1DJiYoInBpZSI9PT1EIT0oInBpZSI9PT16KXx8ImZ1bm5lbGFyZWEiPT09RCE9KCJmdW5uZWxhcmVhIj09PXopKSl7dmFyIFk9IngiLFc9InkiOyJiYXIiIT09RCYmImJhciIhPT16fHwiaCIhPT1QLm9yaWVudGF0aW9ufHwoWT0ieSIsVz0ieCIpLG8uc3dhcEF0dHJzKFAsWyI/IiwiP3NyYyJdLCJsYWJlbHMiLFkpLG8uc3dhcEF0dHJzKFAsWyJkPyIsIj8wIl0sImxhYmVsIixZKSxvLnN3YXBBdHRycyhQLFsiPyIsIj9zcmMiXSwidmFsdWVzIixXKSwicGllIj09PXp8fCJmdW5uZWxhcmVhIj09PXo/KHMoUCwibWFya2VyLmNvbG9yIikuc2V0KHMoUCwibWFya2VyLmNvbG9ycyIpLmdldCgpKSxpLl9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKSk6dS50cmFjZUlzKFAsImNhcnRlc2lhbiIpJiZzKFAsIm1hcmtlci5jb2xvcnMiKS5zZXQocyhQLCJtYXJrZXIuY29sb3IiKS5nZXQoKSl9fWVsc2V7dmFyIFg9aS5fc2l6ZSxaPXEub3JpZW50LEo9InRvcCI9PT1afHwiYm90dG9tIj09PVo7aWYoInRoaWNrbmVzc21vZGUiPT09VSl7dmFyIEs9Sj9YLmg6WC53O1MoSCsidGhpY2tuZXNzIixxLnRoaWNrbmVzcyooImZyYWN0aW9uIj09PUQ/MS9LOkspLG4pfWVsc2V7dmFyIFE9Sj9YLnc6WC5oO1MoSCsibGVuIixxLmxlbiooImZyYWN0aW9uIj09PUQ/MS9ROlEpLG4pfX14W0NdW25dPVIoeik7aWYoLTEhPT1bInN3YXB4eSIsInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoQykpe2lmKCJvcmllbnRhdGlvbiI9PT1DKXtPLnNldChEKTt2YXIgJD1QLngmJiFQLnk/ImgiOiJ2IjtpZigoTy5nZXQoKXx8JCk9PT1JLm9yaWVudGF0aW9uKWNvbnRpbnVlfWVsc2Uib3JpZW50YXRpb25heGVzIj09PUMmJihQLm9yaWVudGF0aW9uPXt2OiJoIixoOiJ2In1bSS5vcmllbnRhdGlvbl0pO18uc3dhcFhZRGF0YShQKSx2LmNhbGM9di5jbGVhckF4aXNUeXBlcz0hMH1lbHNlLTEhPT1oLmRhdGFBcnJheUNvbnRhaW5lcnMuaW5kZXhPZihPLnBhcnRzWzBdKT8oXy5tYW5hZ2VBcnJheUNvbnRhaW5lcnMoTyxELHgpLHYuY2FsYz0hMCk6KEI/Qi5hcnJheU9rJiYhdS50cmFjZUlzKEksInJlZ2wiKSYmKG8uaXNBcnJheU9yVHlwZWRBcnJheShEKXx8by5pc0FycmF5T3JUeXBlZEFycmF5KHopKT92LmNhbGM9ITA6VC51cGRhdGUodixCKTp2LmNhbGM9ITAsTy5zZXQoRCkpfX1pZigtMSE9PVsic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoQykmJnAuc3dhcCh0LHIpLCJvcmllbnRhdGlvbmF4ZXMiPT09Qyl7dmFyIHR0PXModC5sYXlvdXQsImhvdmVybW9kZSIpLGV0PXR0LmdldCgpOyJ4Ij09PWV0P3R0LnNldCgieSIpOiJ5Ij09PWV0P3R0LnNldCgieCIpOiJ4IHVuaWZpZWQiPT09ZXQ/dHQuc2V0KCJ5IHVuaWZpZWQiKToieSB1bmlmaWVkIj09PWV0JiZ0dC5zZXQoInggdW5pZmllZCIpfWlmKC0xIT09WyJvcmllbnRhdGlvbiIsInR5cGUiXS5pbmRleE9mKEMpKXtmb3IoZz1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBydD1sW3Jbbl1dO3UudHJhY2VJcyhydCwiY2FydGVzaWFuIikmJih3KHJ0LnhheGlzfHwieCIpLHcocnQueWF4aXN8fCJ5IikpfVMoZy5tYXAoayksITAsMCksUyhnLm1hcChBKSxbMCwxXSwwKX19ZWxzZSBPPWQodC5sYXlvdXQsQy5yZXBsYWNlKCJMQVlPVVQiLCIiKSkseFtDXT1bUihPLmdldCgpKV0sTy5zZXQoQXJyYXkuaXNBcnJheShOKT9OWzBdOk4pLHYuY2FsYz0hMH1yZXR1cm4odi5jYWxjfHx2LnBsb3QpJiYodi5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6dix1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW20scl0pfX1mdW5jdGlvbiBqKHQpe3ZhciBlLHIsbixpPW8uY291bnRlclJlZ2V4KCJheGlzIiwiLnRpdGxlIiwhMSwhMSksYT0vY29sb3JiYXJcLnRpdGxlJC8scz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXI9c1tlXSxuPXRbcl0sInRpdGxlIiE9PXImJiFpLnRlc3QocikmJiFhLnRlc3Qocil8fCJzdHJpbmciIT10eXBlb2YgbiYmIm51bWJlciIhPXR5cGVvZiBuP3IuaW5kZXhPZigidGl0bGVmb250Iik+LTEmJi0xPT09ci5pbmRleE9mKCJncm91cHRpdGxlZm9udCIpP2wocixyLnJlcGxhY2UoInRpdGxlZm9udCIsInRpdGxlLmZvbnQiKSk6ci5pbmRleE9mKCJ0aXRsZXBvc2l0aW9uIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVwb3NpdGlvbiIsInRpdGxlLnBvc2l0aW9uIikpOnIuaW5kZXhPZigidGl0bGVzaWRlIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVzaWRlIiwidGl0bGUuc2lkZSIpKTpyLmluZGV4T2YoInRpdGxlb2Zmc2V0Iik+LTEmJmwocixyLnJlcGxhY2UoInRpdGxlb2Zmc2V0IiwidGl0bGUub2Zmc2V0IikpOmwocixyLnJlcGxhY2UoInRpdGxlIiwidGl0bGUudGV4dCIpKTtmdW5jdGlvbiBsKGUscil7dFtyXT10W2VdLGRlbGV0ZSB0W2VdfX1mdW5jdGlvbiBVKHQsZSxyKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgbj17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpbltlXT1yO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZWxheW91dCBmYWlsLiIsZSxyKSxQcm9taXNlLnJlamVjdCgpO249by5leHRlbmRGbGF0KHt9LGUpfU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGk9Vyh0LG4pLGE9aS5mbGFnczthLmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCk7dmFyIHM9W2gucHJldmlvdXNQcm9taXNlc107YS5sYXlvdXRSZXBsb3Q/cy5wdXNoKHcubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihWKHQsYSxpKXx8aC5zdXBwbHlEZWZhdWx0cyh0KSxhLmxlZ2VuZCYmcy5wdXNoKHcuZG9MZWdlbmQpLGEubGF5b3V0c3R5bGUmJnMucHVzaCh3LmxheW91dFN0eWxlcyksYS5heHJhbmdlJiZIKHMsaS5yYW5nZXNBbHRlcmVkKSxhLnRpY2tzJiZzLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGEubW9kZWJhciYmcy5wdXNoKHcuZG9Nb2RlQmFyKSxhLmNhbWVyYSYmcy5wdXNoKHcuZG9DYW1lcmEpLGEuY29sb3JiYXJzJiZzLnB1c2gody5kb0NvbG9yQmFycykscy5wdXNoKE0pKSxzLnB1c2goaC5yZWhvdmVyLGgucmVkcmFnKSxjLmFkZCh0LFUsW3QsaS51bmRvaXRdLFUsW3QsaS5yZWRvaXRdKTt2YXIgbD1vLnN5bmNPckFzeW5jKHMsdCk7cmV0dXJuIGwmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKSxsLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixpLmV2ZW50RGF0YSksdH0pKX1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O2lmKCFlLmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoImF4cmFuZ2UiIT09aSYmZVtpXSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1wLmlkMm5hbWUoYSkscz10LmxheW91dFtvXSxsPW5bb107aWYobC5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2Uscy5yYW5nZSYmKGwucmFuZ2U9cy5yYW5nZS5zbGljZSgpKSxsLmNsZWFuUmFuZ2UoKSxsLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBsLl9tYXRjaEdyb3VwKWlmKGMhPT1hKXt2YXIgdT1uW3AuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsdS5yYW5nZT1sLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9bC5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBIKHQsZSl7dmFyIHI9ZT9mdW5jdGlvbih0KXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgaSBpbiBlKXt2YXIgYT1wLmdldEZyb21JZCh0LGkpO2lmKHIucHVzaChpKSwtMSE9PShhLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJmEuX2FuY2hvckF4aXMmJnIucHVzaChhLl9hbmNob3JBeGlzLl9pZCksYS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gYS5fbWF0Y2hHcm91cCllW29dfHxyLnB1c2gobyk7YS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIHAuZHJhdyh0LHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKHQpe3JldHVybiBwLmRyYXcodCwicmVkcmF3Iil9O3QucHVzaCh5LHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyxyLHcuZHJhd0RhdGEsdy5maW5hbERyYXcpfXZhciBxPS9eW3h5el1heGlzWzAtOV0qXC5yYW5nZShcW1swfDFdXF0pPyQvLEc9L15beHl6XWF4aXNbMC05XSpcLmF1dG9yYW5nZSQvLFk9L15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvO2Z1bmN0aW9uIFcodCxlKXt2YXIgcixuLGksYT10LmxheW91dCxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9ndWlFZGl0aW5nLGg9RihsLl9wcmVHVUksYyksZD1PYmplY3Qua2V5cyhlKSxtPXAubGlzdCh0KSxnPW8uZXh0ZW5kRGVlcEFsbCh7fSxlKSx2PXt9O2ZvcihqKGUpLGQ9T2JqZWN0LmtleXMoZSksbj0wO248ZC5sZW5ndGg7bisrKWlmKDA9PT1kW25dLmluZGV4T2YoImFsbGF4ZXMiKSl7Zm9yKGk9MDtpPG0ubGVuZ3RoO2krKyl7dmFyIHk9bVtpXS5faWQuc3Vic3RyKDEpLHg9LTEhPT15LmluZGV4T2YoInNjZW5lIik/eSsiLiI6IiIsdz1kW25dLnJlcGxhY2UoImFsbGF4ZXMiLHgrbVtpXS5fbmFtZSk7ZVt3XXx8KGVbd109ZVtkW25dXSl9ZGVsZXRlIGVbZFtuXV19dmFyIEE9VC5sYXlvdXRGbGFncygpLE09e30sUz17fTtmdW5jdGlvbiBFKHQscil7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goKGZ1bmN0aW9uKHQpe0UodCxyKX0pKTtlbHNlIGlmKCEodCBpbiBlKSYmIV8uaGFzUGFyZW50KGUsdCkpe3ZhciBuPWgoYSx0KTt0IGluIFN8fChTW3RdPVIobi5nZXQoKSkpLHZvaWQgMCE9PXImJm4uc2V0KHIpfX12YXIgTCxDPXt9O2Z1bmN0aW9uIFAodCl7dmFyIGU9cC5uYW1lMmlkKHQuc3BsaXQoIi4iKVswXSk7cmV0dXJuIENbZV09MSxlfWZvcih2YXIgSSBpbiBlKXtpZihfLmhhc1BhcmVudChlLEkpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK0krIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7Zm9yKHZhciBPPWgoYSxJKSx6PWVbSV0sRD1PLnBhcnRzLmxlbmd0aC0xO0Q+MCYmInN0cmluZyIhPXR5cGVvZiBPLnBhcnRzW0RdOylELS07dmFyIEI9Ty5wYXJ0c1tEXSxOPU8ucGFydHNbRC0xXSsiLiIrQixVPU8ucGFydHMuc2xpY2UoMCxEKS5qb2luKCIuIiksVj1zKHQubGF5b3V0LFUpLmdldCgpLEg9cyhsLFUpLmdldCgpLFc9Ty5nZXQoKTtpZih2b2lkIDAhPT16KXtNW0ldPXosU1tJXT0icmV2ZXJzZSI9PT1CP3o6UihXKTt2YXIgWj1mLmdldExheW91dFZhbE9iamVjdChsLE8ucGFydHMpO2lmKFomJlouaW1wbGllZEVkaXRzJiZudWxsIT09eilmb3IodmFyIEogaW4gWi5pbXBsaWVkRWRpdHMpRShvLnJlbGF0aXZlQXR0cihJLEopLFouaW1wbGllZEVkaXRzW0pdKTtpZigtMSE9PVsid2lkdGgiLCJoZWlnaHQiXS5pbmRleE9mKEkpKWlmKHope0UoImF1dG9zaXplIixudWxsKTt2YXIgSz0iaGVpZ2h0Ij09PUk/IndpZHRoIjoiaGVpZ2h0IjtFKEssbFtLXSl9ZWxzZSBsW0ldPXQuX2luaXRpYWxBdXRvU2l6ZVtJXTtlbHNlIGlmKCJhdXRvc2l6ZSI9PT1JKUUoIndpZHRoIix6P251bGw6bC53aWR0aCksRSgiaGVpZ2h0Iix6P251bGw6bC5oZWlnaHQpO2Vsc2UgaWYoTi5tYXRjaChxKSlQKE4pLHMobCxVKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7ZWxzZSBpZihOLm1hdGNoKEcpKXtQKE4pLHMobCxVKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7dmFyIFE9cyhsLFUpLmdldCgpO1EuX2lucHV0RG9tYWluJiYoUS5faW5wdXQuZG9tYWluPVEuX2lucHV0RG9tYWluLnNsaWNlKCkpfWVsc2UgTi5tYXRjaChZKSYmcyhsLFUrIi5faW5wdXREb21haW4iKS5zZXQobnVsbCk7aWYoInR5cGUiPT09Qil7TD1WO3ZhciAkPSJsaW5lYXIiPT09SC50eXBlJiYibG9nIj09PXosdHQ9ImxvZyI9PT1ILnR5cGUmJiJsaW5lYXIiPT09ejtpZigkfHx0dCl7aWYoTCYmTC5yYW5nZSlpZihILmF1dG9yYW5nZSkkJiYoTC5yYW5nZT1MLnJhbmdlWzFdPkwucmFuZ2VbMF0/WzEsMl06WzIsMV0pO2Vsc2V7dmFyIGV0PUwucmFuZ2VbMF0scnQ9TC5yYW5nZVsxXTskPyhldDw9MCYmcnQ8PTAmJkUoVSsiLmF1dG9yYW5nZSIsITApLGV0PD0wP2V0PXJ0LzFlNjpydDw9MCYmKHJ0PWV0LzFlNiksRShVKyIucmFuZ2VbMF0iLE1hdGgubG9nKGV0KS9NYXRoLkxOMTApLEUoVSsiLnJhbmdlWzFdIixNYXRoLmxvZyhydCkvTWF0aC5MTjEwKSk6KEUoVSsiLnJhbmdlWzBdIixNYXRoLnBvdygxMCxldCkpLEUoVSsiLnJhbmdlWzFdIixNYXRoLnBvdygxMCxydCkpKX1lbHNlIEUoVSsiLmF1dG9yYW5nZSIsITApO0FycmF5LmlzQXJyYXkobC5fc3VicGxvdHMucG9sYXIpJiZsLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJmxbTy5wYXJ0c1swXV0mJiJyYWRpYWxheGlzIj09PU8ucGFydHNbMV0mJmRlbGV0ZSBsW08ucGFydHNbMF1dLl9zdWJwbG90LnZpZXdJbml0aWFsWyJyYWRpYWxheGlzLnJhbmdlIl0sdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQsSCx6LEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxILHosRSl9ZWxzZSBFKFUrIi5hdXRvcmFuZ2UiLCEwKSxFKFUrIi5yYW5nZSIsbnVsbCk7cyhsLFUrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKEIubWF0Y2goaykpe3ZhciBudD1zKGwsSSkuZ2V0KCksaXQ9KHp8fHt9KS50eXBlO2l0JiYiLSIhPT1pdHx8KGl0PSJsaW5lYXIiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikodCxudCxpdCxFKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsbnQsaXQsRSl9dmFyIGF0PWIuY29udGFpbmVyQXJyYXlNYXRjaChJKTtpZihhdCl7cj1hdC5hcnJheSxuPWF0LmluZGV4O3ZhciBvdD1hdC5wcm9wZXJ0eSxzdD1afHx7ZWRpdFR5cGU6ImNhbGMifTsiIiE9PW4mJiIiPT09b3QmJihiLmlzQWRkVmFsKHopP1NbSV09bnVsbDpiLmlzUmVtb3ZlVmFsKHopP1NbSV09KHMoYSxyKS5nZXQoKXx8W10pW25dOm8ud2FybigidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlIixlKSksVC51cGRhdGUoQSxzdCksdltyXXx8KHZbcl09e30pO3ZhciBsdD12W3JdW25dO2x0fHwobHQ9dltyXVtuXT17fSksbHRbb3RdPXosZGVsZXRlIGVbSV19ZWxzZSJyZXZlcnNlIj09PUI/KFYucmFuZ2U/Vi5yYW5nZS5yZXZlcnNlKCk6KEUoVSsiLmF1dG9yYW5nZSIsITApLFYucmFuZ2U9WzEsMF0pLEguYXV0b3JhbmdlP0EuY2FsYz0hMDpBLnBsb3Q9ITApOihsLl9oYXMoInNjYXR0ZXItbGlrZSIpJiZsLl9oYXMoInJlZ2wiKSYmImRyYWdtb2RlIj09PUkmJigibGFzc28iPT09enx8InNlbGVjdCI9PT16KSYmImxhc3NvIiE9PVcmJiJzZWxlY3QiIT09V3x8bC5faGFzKCJnbDJkIik/QS5wbG90PSEwOlo/VC51cGRhdGUoQSxaKTpBLmNhbGM9ITAsTy5zZXQoeikpfX1mb3IociBpbiB2KXtiLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsaChhLHIpLHZbcl0sQSxoKXx8KEEucGxvdD0hMCl9Zm9yKHZhciBjdCBpbiBDKXt2YXIgdXQ9KEw9cC5nZXRGcm9tSWQodCxjdCkpJiZMLl9jb25zdHJhaW50R3JvdXA7aWYodXQpZm9yKHZhciBmdCBpbiBBLmNhbGM9ITAsdXQpQ1tmdF18fChwLmdldEZyb21JZCh0LGZ0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihYKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJihBLnBsb3Q9ITApLChBLnBsb3R8fEEuY2FsYykmJihBLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOkEscmFuZ2VzQWx0ZXJlZDpDLHVuZG9pdDpTLHJlZG9pdDpNLGV2ZW50RGF0YTpnfX1mdW5jdGlvbiBYKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZoLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGUpLGUud2lkdGghPT1yfHxlLmhlaWdodCE9PW59ZnVuY3Rpb24gWih0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KSxvLmlzUGxhaW5PYmplY3QoZSl8fChlPXt9KSxvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxPYmplY3Qua2V5cyhlKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGE9Xy5jb2VyY2VUcmFjZUluZGljZXModCxpKSxzPU4odCxvLmV4dGVuZEZsYXQoe30sZSksYSksbD1zLmZsYWdzLHU9Vyh0LG8uZXh0ZW5kRmxhdCh7fSxuKSksZj11LmZsYWdzOyhsLmNhbGN8fGYuY2FsYykmJih0LmNhbGNkYXRhPXZvaWQgMCksbC5jbGVhckF4aXNUeXBlcyYmXy5jbGVhckF4aXNUeXBlcyh0LGEsbik7dmFyIHA9W107Zi5sYXlvdXRSZXBsb3Q/cC5wdXNoKHcubGF5b3V0UmVwbG90KTpsLmZ1bGxSZXBsb3Q/cC5wdXNoKHIuX2RvUGxvdCk6KHAucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLFYodCxmLHUpfHxoLnN1cHBseURlZmF1bHRzKHQpLGwuc3R5bGUmJnAucHVzaCh3LmRvVHJhY2VTdHlsZSksKGwuY29sb3JiYXJzfHxmLmNvbG9yYmFycykmJnAucHVzaCh3LmRvQ29sb3JCYXJzKSxmLmxlZ2VuZCYmcC5wdXNoKHcuZG9MZWdlbmQpLGYubGF5b3V0c3R5bGUmJnAucHVzaCh3LmxheW91dFN0eWxlcyksZi5heHJhbmdlJiZIKHAsdS5yYW5nZXNBbHRlcmVkKSxmLnRpY2tzJiZwLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGYubW9kZWJhciYmcC5wdXNoKHcuZG9Nb2RlQmFyKSxmLmNhbWVyYSYmcC5wdXNoKHcuZG9DYW1lcmEpLHAucHVzaChNKSkscC5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxaLFt0LHMudW5kb2l0LHUudW5kb2l0LHMudHJhY2VzXSxaLFt0LHMucmVkb2l0LHUucmVkb2l0LHMudHJhY2VzXSk7dmFyIGQ9by5zeW5jT3JBc3luYyhwLHQpO3JldHVybiBkJiZkLnRoZW58fChkPVByb21pc2UucmVzb2x2ZSh0KSksZC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV91cGRhdGUiLHtkYXRhOnMuZXZlbnREYXRhLGxheW91dDp1LmV2ZW50RGF0YX0pLHR9KSl9ZnVuY3Rpb24gSih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX12YXIgSz1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L14oKHh8eSlheGlzXGQqKVwuKChhdXRvKT9yYW5nZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xkKlwuc2hvd3NwaWtlcyQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46L14oc2NlbmVcZCopXC5jYW1lcmEvfSx7cGF0dGVybjovXihnZW9cZCopXC4ocHJvamVjdGlvbnxjZW50ZXJ8Zml0Ym91bmRzKS99LHtwYXR0ZXJuOi9eKHRlcm5hcnlcZCpcLlthYmNdYXhpcylcLihtaW58dGl0bGVcLnRleHQpJC99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5yYWRpYWxheGlzKVwuKChhdXRvKT9yYW5nZXxhbmdsZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovXihwb2xhclxkKlwuYW5ndWxhcmF4aXMpXC5yb3RhdGlvbi99LHtwYXR0ZXJuOi9eKG1hcGJveFxkKilcLihjZW50ZXJ8em9vbXxiZWFyaW5nfHBpdGNoKS99LHtwYXR0ZXJuOi9ebGVnZW5kXC4oeHx5KSQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNoYXBlc3xhbm5vdGF0aW9ucykvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9edGl0bGVcLnRleHQkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV0sUT1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6InNlbGVjdGlvbnJldmlzaW9uIn0se3BhdHRlcm46LyhefHZhbHVlXC4pdmlzaWJsZSQvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFtcZCtcXVwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXC4oeHx5fGdyb3VwcykvfSx7cGF0dGVybjovXmxldmVsJC99LHtwYXR0ZXJuOi8oXnx2YWx1ZVwuKW5hbWUkL30se3BhdHRlcm46L2NvbG9yYmFyXC50aXRsZVwudGV4dCQvfSx7cGF0dGVybjovY29sb3JiYXJcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dO2Z1bmN0aW9uICQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihpKXt2YXIgYT1pWzFdfHwiIjtyZXR1cm57aGVhZDphLHRhaWw6dC5zdWJzdHIoYS5sZW5ndGgrMSksYXR0cjpuLmF0dHJ9fX19ZnVuY3Rpb24gdHQodCxlKXt2YXIgcj1zKGUsdCkuZ2V0KCk7aWYodm9pZCAwIT09cilyZXR1cm4gcjt2YXIgbj10LnNwbGl0KCIuIik7Zm9yKG4ucG9wKCk7bi5sZW5ndGg+MTspaWYobi5wb3AoKSx2b2lkIDAhPT0ocj1zKGUsbi5qb2luKCIuIikrIi51aXJldmlzaW9uIikuZ2V0KCkpKXJldHVybiByO3JldHVybiBlLnVpcmV2aXNpb259ZnVuY3Rpb24gZXQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLl9mdWxsSW5wdXQudWlkPT09dClyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBydCh0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZVtuXS51aWQ9PT10KXJldHVybiBuO3JldHVybiFlW3JdfHxlW3JdLnVpZD8tMTpyfWZ1bmN0aW9uIG50KHQsZSl7dmFyIHI9by5pc1BsYWluT2JqZWN0KHQpLG49QXJyYXkuaXNBcnJheSh0KTtyZXR1cm4gcnx8bj8ociYmby5pc1BsYWluT2JqZWN0KGUpfHxuJiZBcnJheS5pc0FycmF5KGUpKSYmSlNPTi5zdHJpbmdpZnkodCk9PT1KU09OLnN0cmluZ2lmeShlKTp0PT09ZX1mdW5jdGlvbiBpdCh0LGUscixuKXt2YXIgaSxhLGwsYz1uLmdldFZhbE9iamVjdCx1PW4uZmxhZ3MsZj1uLmltbXV0YWJsZSxoPW4uaW5BcnJheSxwPW4uYXJyYXlJbmRleDtmdW5jdGlvbiBkKCl7dmFyIHQ9aS5lZGl0VHlwZTtoJiYtMSE9PXQuaW5kZXhPZigiYXJyYXlkcmF3Iik/by5wdXNoVW5pcXVlKHUuYXJyYXlzW2hdLHApOihULnVwZGF0ZSh1LGkpLCJub25lIiE9PXQmJnUubkNoYW5nZXMrKyxuLnRyYW5zaXRpb24mJmkuYW5pbSYmdS5uQ2hhbmdlc0FuaW0rKywocS50ZXN0KGwpfHxHLnRlc3QobCkpJiYodS5yYW5nZXNBbHRlcmVkW3JbMF1dPTEpLFkudGVzdChsKSYmcyhlLCJfaW5wdXREb21haW4iKS5zZXQobnVsbCksImRhdGFyZXZpc2lvbiI9PT1hJiYodS5uZXdEYXRhUmV2aXNpb249MSkpfWZ1bmN0aW9uIG0odCl7cmV0dXJuImRhdGFfYXJyYXkiPT09dC52YWxUeXBlfHx0LmFycmF5T2t9Zm9yKGEgaW4gdCl7aWYodS5jYWxjJiYhbi50cmFuc2l0aW9uKXJldHVybjt2YXIgZz10W2FdLHY9ZVthXSx5PXIuY29uY2F0KGEpO2lmKGw9eS5qb2luKCIuIiksIl8iIT09YS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBnJiZnIT09dil7aWYoKCJ0aWNrMCI9PT1hfHwiZHRpY2siPT09YSkmJiJnZW8iIT09clswXSl7dmFyIHg9ZS50aWNrbW9kZTtpZigiYXV0byI9PT14fHwiYXJyYXkiPT09eHx8IXgpY29udGludWV9aWYoKCJyYW5nZSIhPT1hfHwhZS5hdXRvcmFuZ2UpJiYoInptaW4iIT09YSYmInptYXgiIT09YXx8ImNvbnRvdXJjYXJwZXQiIT09ZS50eXBlKSYmKGk9Yyh5KSkmJighaS5fY29tcGFyZUFzSlNPTnx8SlNPTi5zdHJpbmdpZnkoZykhPT1KU09OLnN0cmluZ2lmeSh2KSkpe3ZhciBiLF89aS52YWxUeXBlLHc9bShpKSxrPUFycmF5LmlzQXJyYXkoZyksQT1BcnJheS5pc0FycmF5KHYpO2lmKGsmJkEpe3ZhciBNPSJfaW5wdXRfIithLFM9dFtNXSxFPWVbTV07aWYoQXJyYXkuaXNBcnJheShTKSYmUz09PUUpY29udGludWV9aWYodm9pZCAwPT09dil3JiZrP3UuY2FsYz0hMDpkKCk7ZWxzZSBpZihpLl9pc0xpbmtlZFRvQXJyYXkpe3ZhciBMPVtdLEM9ITE7aHx8KHUuYXJyYXlzW2FdPUwpO3ZhciBQPU1hdGgubWluKGcubGVuZ3RoLHYubGVuZ3RoKSxJPU1hdGgubWF4KGcubGVuZ3RoLHYubGVuZ3RoKTtpZihQIT09SSl7aWYoImFycmF5ZHJhdyIhPT1pLmVkaXRUeXBlKXtkKCk7Y29udGludWV9Qz0hMH1mb3IoYj0wO2I8UDtiKyspaXQoZ1tiXSx2W2JdLHkuY29uY2F0KGIpLG8uZXh0ZW5kRmxhdCh7aW5BcnJheTphLGFycmF5SW5kZXg6Yn0sbikpO2lmKEMpZm9yKGI9UDtiPEk7YisrKUwucHVzaChiKX1lbHNlIV8mJm8uaXNQbGFpbk9iamVjdChnKT9pdChnLHYseSxuKTp3P2smJkE/KGYmJih1LmNhbGM9ITApLChmfHxuLm5ld0RhdGFSZXZpc2lvbikmJmQoKSk6ayE9PUE/dS5jYWxjPSEwOmQoKTprJiZBJiZnLmxlbmd0aD09PXYubGVuZ3RoJiZTdHJpbmcoZyk9PT1TdHJpbmcodil8fGQoKX19fWZvcihhIGluIGUpaWYoIShhIGluIHQpJiYiXyIhPT1hLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGVbYV0pe2lmKG0oaT1jKHIuY29uY2F0KGEpKSkmJkFycmF5LmlzQXJyYXkoZVthXSkpcmV0dXJuIHZvaWQodS5jYWxjPSEwKTtkKCl9fWZ1bmN0aW9uIGF0KHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFvLmVxdWFsRG9tUmVjdHMocixlLl9sYXN0QkJveCkpe3ZhciBuPWUuX2ludlRyYW5zZm9ybT1vLmludmVyc2VUcmFuc2Zvcm1NYXRyaXgoby5nZXRGdWxsVHJhbnNmb3JtTWF0cml4KHQpKTtlLl9pbnZTY2FsZVg9TWF0aC5zcXJ0KG5bMF1bMF0qblswXVswXStuWzBdWzFdKm5bMF1bMV0rblswXVsyXSpuWzBdWzJdKSxlLl9pbnZTY2FsZVk9TWF0aC5zcXJ0KG5bMV1bMF0qblsxXVswXStuWzFdWzFdKm5bMV1bMV0rblsxXVsyXSpuWzFdWzJdKSxlLl9sYXN0QkJveD1yfX1yLmFuaW1hdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYW5pbWF0aW5nIGl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90bHkuY29tL2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbj10Ll90cmFuc2l0aW9uRGF0YTtuLl9mcmFtZVF1ZXVlfHwobi5fZnJhbWVRdWV1ZT1bXSk7dmFyIGk9KHI9aC5zdXBwbHlBbmltYXRpb25EZWZhdWx0cyhyKSkudHJhbnNpdGlvbixhPXIuZnJhbWU7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT90Pj1pLmxlbmd0aD9pWzBdOmlbdF06aX1mdW5jdGlvbiBsKHQpe3JldHVybiBBcnJheS5pc0FycmF5KGEpP3Q+PWEubGVuZ3RoP2FbMF06YVt0XTphfWZ1bmN0aW9uIGModCxlKXt2YXIgcj0wO3JldHVybiBmdW5jdGlvbigpe2lmKHQmJisrcj09PWUpcmV0dXJuIHQoKX19cmV0dXJuIHZvaWQgMD09PW4uX2ZyYW1lV2FpdGluZ0NudCYmKG4uX2ZyYW1lV2FpdGluZ0NudD0wKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSx1KXtmdW5jdGlvbiBmKCl7bi5fY3VycmVudEZyYW1lJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgZT1uLl9jdXJyZW50RnJhbWU9bi5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKGUpe3ZhciByPWUubmFtZT9lLm5hbWUudG9TdHJpbmcoKTpudWxsO3QuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG4uX2xhc3RGcmFtZUF0PURhdGUubm93KCksbi5fdGltZVRvTmV4dD1lLmZyYW1lT3B0cy5kdXJhdGlvbixoLnRyYW5zaXRpb24odCxlLmZyYW1lLmRhdGEsZS5mcmFtZS5sYXlvdXQsXy5jb2VyY2VUcmFjZUluZGljZXModCxlLmZyYW1lLnRyYWNlcyksZS5mcmFtZU9wdHMsZS50cmFuc2l0aW9uT3B0cykudGhlbigoZnVuY3Rpb24oKXtlLm9uQ29tcGxldGUmJmUub25Db21wbGV0ZSgpfSkpLHQuZW1pdCgicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIix7bmFtZTpyLGZyYW1lOmUuZnJhbWUsYW5pbWF0aW9uOntmcmFtZTplLmZyYW1lT3B0cyx0cmFuc2l0aW9uOmUudHJhbnNpdGlvbk9wdHN9fSl9ZWxzZSB0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuLl9hbmltYXRpb25SYWYpLG4uX2FuaW1hdGlvblJhZj1udWxsfWZ1bmN0aW9uIHAoKXt0LmVtaXQoInBsb3RseV9hbmltYXRpbmciKSxuLl9sYXN0RnJhbWVBdD0tMS8wLG4uX3RpbWVUb05leHQ9MCxuLl9ydW5uaW5nVHJhbnNpdGlvbnM9MCxuLl9jdXJyZW50RnJhbWU9bnVsbDt2YXIgZT1mdW5jdGlvbigpe24uX2FuaW1hdGlvblJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpLERhdGUubm93KCktbi5fbGFzdEZyYW1lQXQ+bi5fdGltZVRvTmV4dCYmZigpfTtlKCl9dmFyIGQsbSxnPTA7ZnVuY3Rpb24gdih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT9nPj1pLmxlbmd0aD90LnRyYW5zaXRpb25PcHRzPWlbZ106dC50cmFuc2l0aW9uT3B0cz1pWzBdOnQudHJhbnNpdGlvbk9wdHM9aSxnKyssdH12YXIgeT1bXSx4PW51bGw9PWUsYj1BcnJheS5pc0FycmF5KGUpO2lmKCF4JiYhYiYmby5pc1BsYWluT2JqZWN0KGUpKXkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOnYoby5leHRlbmRGbGF0KHt9LGUpKX0pO2Vsc2UgaWYoeHx8LTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGUpKWZvcihkPTA7ZDxuLl9mcmFtZXMubGVuZ3RoO2QrKykobT1uLl9mcmFtZXNbZF0pJiYoeHx8U3RyaW5nKG0uZ3JvdXApPT09U3RyaW5nKGUpKSYmeS5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6U3RyaW5nKG0ubmFtZSksZGF0YTp2KHtuYW1lOm0ubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciB3PWVbZF07LTEhPT1bIm51bWJlciIsInN0cmluZyJdLmluZGV4T2YodHlwZW9mIHcpPyh3PVN0cmluZyh3KSx5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTp3LGRhdGE6dih7bmFtZTp3fSl9KSk6by5pc1BsYWluT2JqZWN0KHcpJiZ5LnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTp2KG8uZXh0ZW5kRmxhdCh7fSx3KSl9KX1mb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKWlmKCJieW5hbWUiPT09KG09eVtkXSkudHlwZSYmIW4uX2ZyYW1lSGFzaFttLmRhdGEubmFtZV0pcmV0dXJuIG8ud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6ICInK20uZGF0YS5uYW1lKyciJyksdm9pZCB1KCk7LTEhPT1bIm5leHQiLCJpbW1lZGlhdGUiXS5pbmRleE9mKHIubW9kZSkmJmZ1bmN0aW9uKCl7aWYoMCE9PW4uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO24uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIGU9bi5fZnJhbWVRdWV1ZS5wb3AoKTtlLm9uSW50ZXJydXB0JiZlLm9uSW50ZXJydXB0KCl9dC5lbWl0KCJwbG90bHlfYW5pbWF0aW9uaW50ZXJydXB0ZWQiLFtdKX19KCksInJldmVyc2UiPT09ci5kaXJlY3Rpb24mJnkucmV2ZXJzZSgpO3ZhciBUPXQuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZTtpZihUJiZyLmZyb21jdXJyZW50KXt2YXIgaz0tMTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKWlmKCJieW5hbWUiPT09KG09eVtkXSkudHlwZSYmbS5uYW1lPT09VCl7az1kO2JyZWFrfWlmKGs+MCYmazx5Lmxlbmd0aC0xKXt2YXIgQT1bXTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKW09eVtkXSwoImJ5bmFtZSIhPT15W2RdLnR5cGV8fGQ+aykmJkEucHVzaChtKTt5PUF9fXkubGVuZ3RoPjA/ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG87bz0iYnluYW1lIj09PWVbaV0udHlwZT9oLmNvbXB1dGVGcmFtZSh0LGVbaV0ubmFtZSk6ZVtpXS5kYXRhO3ZhciBmPWwoaSksZD1zKGkpO2QuZHVyYXRpb249TWF0aC5taW4oZC5kdXJhdGlvbixmLmR1cmF0aW9uKTt2YXIgbT17ZnJhbWU6byxuYW1lOmVbaV0ubmFtZSxmcmFtZU9wdHM6Zix0cmFuc2l0aW9uT3B0czpkfTtpPT09ZS5sZW5ndGgtMSYmKG0ub25Db21wbGV0ZT1jKGEsMiksbS5vbkludGVycnVwdD11KSxuLl9mcmFtZVF1ZXVlLnB1c2gobSl9ImltbWVkaWF0ZSI9PT1yLm1vZGUmJihuLl9sYXN0RnJhbWVBdD0tMS8wKSxuLl9hbmltYXRpb25SYWZ8fHAoKX19KHkpOih0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLGEoKSl9KSl9LHIuYWRkRnJhbWVzPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksbnVsbD09ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYoIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFkZGluZyBmcmFtZXMuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3RseS5jb20vamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuLGksYSxzLGw9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyx1PXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEVycm9yKCJhZGRGcmFtZXMgZmFpbHVyZTogZnJhbWVMaXN0IG11c3QgYmUgYW4gQXJyYXkgb2YgZnJhbWUgZGVmaW5pdGlvbnMiK2UpO3ZhciBmPWwubGVuZ3RoKzIqZS5sZW5ndGgscD1bXSxkPXt9O2ZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYoby5pc1BsYWluT2JqZWN0KGVbbl0pKXt2YXIgbT1lW25dLm5hbWUsZz0odVttXXx8ZFttXXx8e30pLm5hbWUsdj1lW25dLm5hbWUseT11W2ddfHxkW2ddO2cmJnYmJiJudW1iZXIiPT10eXBlb2YgdiYmeSYmQTw1JiYoQSsrLG8ud2FybignYWRkRnJhbWVzOiBvdmVyd3JpdGluZyBmcmFtZSAiJysodVtnXXx8ZFtnXSkubmFtZSsnIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlICJudW1iZXIiIGFsc28gZXF1YXRlcyB0byAiJytnKyciLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksNT09PUEmJm8ud2FybigiYWRkRnJhbWVzOiBUaGlzIEFQSSBjYWxsIGhhcyB5aWVsZGVkIHRvbyBtYW55IG9mIHRoZXNlIHdhcm5pbmdzLiBGb3IgdGhlIHJlc3Qgb2YgdGhpcyBjYWxsLCBmdXJ0aGVyIHdhcm5pbmdzIGFib3V0IG51bWVyaWMgZnJhbWUgbmFtZXMgd2lsbCBiZSBzdXBwcmVzc2VkLiIpKSxkW21dPXtuYW1lOm19LHAucHVzaCh7ZnJhbWU6aC5zdXBwbHlGcmFtZURlZmF1bHRzKGVbbl0pLGluZGV4OnImJnZvaWQgMCE9PXJbbl0mJm51bGwhPT1yW25dP3Jbbl06ZitufSl9cC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmluZGV4PmUuaW5kZXg/LTE6dC5pbmRleDxlLmluZGV4PzE6MH0pKTt2YXIgeD1bXSxiPVtdLF89bC5sZW5ndGg7Zm9yKG49cC5sZW5ndGgtMTtuPj0wO24tLSl7aWYoIm51bWJlciI9PXR5cGVvZihpPXBbbl0uZnJhbWUpLm5hbWUmJm8ud2FybigiV2FybmluZzogYWRkRnJhbWVzIGFjY2VwdHMgZnJhbWVzIHdpdGggbnVtZXJpYyBuYW1lcywgYnV0IHRoZSBudW1iZXJzIGFyZWltcGxpY2l0bHkgY2FzdCB0byBzdHJpbmdzIiksIWkubmFtZSlmb3IoO3VbaS5uYW1lPSJmcmFtZSAiK3QuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyKytdOyk7aWYodVtpLm5hbWVdKXtmb3IoYT0wO2E8bC5sZW5ndGgmJihsW2FdfHx7fSkubmFtZSE9PWkubmFtZTthKyspO3gucHVzaCh7dHlwZToicmVwbGFjZSIsaW5kZXg6YSx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOiJyZXBsYWNlIixpbmRleDphLHZhbHVlOmxbYV19KX1lbHNlIHM9TWF0aC5tYXgoMCxNYXRoLm1pbihwW25dLmluZGV4LF8pKSx4LnB1c2goe3R5cGU6Imluc2VydCIsaW5kZXg6cyx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOiJkZWxldGUiLGluZGV4OnN9KSxfKyt9dmFyIHc9aC5tb2RpZnlGcmFtZXMsVD1oLm1vZGlmeUZyYW1lcyxrPVt0LGJdLE09W3QseF07cmV0dXJuIGMmJmMuYWRkKHQsdyxrLFQsTSksaC5tb2RpZnlGcmFtZXModCx4KX0sci5kZWxldGVGcmFtZXM9ZnVuY3Rpb24odCxlKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3ZhciByLG4saT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGE9W10scz1bXTtpZighZSlmb3IoZT1bXSxyPTA7cjxpLmxlbmd0aDtyKyspZS5wdXNoKHIpO2ZvcigoZT1lLnNsaWNlKCkpLnNvcnQoKSxyPWUubGVuZ3RoLTE7cj49MDtyLS0pbj1lW3JdLGEucHVzaCh7dHlwZToiZGVsZXRlIixpbmRleDpufSkscy51bnNoaWZ0KHt0eXBlOiJpbnNlcnQiLGluZGV4Om4sdmFsdWU6aVtuXX0pO3ZhciBsPWgubW9kaWZ5RnJhbWVzLHU9aC5tb2RpZnlGcmFtZXMsZj1bdCxzXSxwPVt0LGFdO3JldHVybiBjJiZjLmFkZCh0LGwsZix1LHApLGgubW9kaWZ5RnJhbWVzKHQsYSl9LHIuYWRkVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe2U9by5nZXRHcmFwaERpdihlKTt2YXIgYSxzLGw9W10sdT1yLmRlbGV0ZVRyYWNlcyxmPXQsaD1bZSxsXSxwPVtlLG5dO2ZvcihmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LiIpO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJ0cmFjZXMgbXVzdCBiZSBkZWZpbmVkLiIpO2ZvcihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLG49MDtuPGUubGVuZ3RoO24rKylpZigib2JqZWN0IiE9dHlwZW9mKGk9ZVtuXSl8fEFycmF5LmlzQXJyYXkoaSl8fG51bGw9PT1pKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiB0cmFjZXMgYXJyYXkgbXVzdCBiZSBub24tYXJyYXkgb2JqZWN0cyIpO2lmKHZvaWQgMD09PXJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksdm9pZCAwIT09ciYmci5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImlmIGluZGljZXMgaXMgc3BlY2lmaWVkLCB0cmFjZXMubGVuZ3RoIG11c3QgZXF1YWwgaW5kaWNlcy5sZW5ndGgiKX0oZSxuLGkpLEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksbj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8uZXh0ZW5kRmxhdCh7fSx0KX0pKSxfLmNsZWFuRGF0YShuKSxhPTA7YTxuLmxlbmd0aDthKyspZS5kYXRhLnB1c2goblthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goLW4ubGVuZ3RoK2EpO2lmKHZvaWQgMD09PWkpcmV0dXJuIHM9ci5yZWRyYXcoZSksYy5hZGQoZSx1LGgsZixwKSxzO0FycmF5LmlzQXJyYXkoaSl8fChpPVtpXSk7dHJ5e0koZSxsLGkpfWNhdGNoKHQpe3Rocm93IGUuZGF0YS5zcGxpY2UoZS5kYXRhLmxlbmd0aC1uLmxlbmd0aCxuLmxlbmd0aCksdH1yZXR1cm4gYy5zdGFydFNlcXVlbmNlKGUpLGMuYWRkKGUsdSxoLGYscCkscz1yLm1vdmVUcmFjZXMoZSxsLGkpLGMuc3RvcFNlcXVlbmNlKGUpLHN9LHIuZGVsZXRlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuKXtlPW8uZ2V0R3JhcGhEaXYoZSk7dmFyIGksYSxzPVtdLGw9ci5hZGRUcmFjZXMsdT10LGY9W2UscyxuXSxoPVtlLG5dO2lmKHZvaWQgMD09PW4pdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vycy4iKTtmb3IoQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxQKGUsbiwiaW5kaWNlcyIpLChuPUMobixlLmRhdGEubGVuZ3RoLTEpKS5zb3J0KG8uc29ydGVyRGVzKSxpPTA7aTxuLmxlbmd0aDtpKz0xKWE9ZS5kYXRhLnNwbGljZShuW2ldLDEpWzBdLHMucHVzaChhKTt2YXIgcD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSxsLGYsdSxoKSxwfSxyLmV4dGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuLGk7aWYoby5pc1R5cGVkQXJyYXkodCkpaWYocjwwKXt2YXIgYT1uZXcgdC5jb25zdHJ1Y3RvcigwKSxzPXoodCxlKTtyPDA/KG49cyxpPWEpOihuPWEsaT1zKX1lbHNlIGlmKG49bmV3IHQuY29uc3RydWN0b3IociksaT1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aC1yKSxyPT09ZS5sZW5ndGgpbi5zZXQoZSksaS5zZXQodCk7ZWxzZSBpZihyPGUubGVuZ3RoKXt2YXIgbD1lLmxlbmd0aC1yO24uc2V0KGUuc3ViYXJyYXkobCkpLGkuc2V0KHQpLGkuc2V0KGUuc3ViYXJyYXkoMCxsKSx0Lmxlbmd0aCl9ZWxzZXt2YXIgYz1yLWUubGVuZ3RoLHU9dC5sZW5ndGgtYztuLnNldCh0LnN1YmFycmF5KHUpKSxuLnNldChlLGMpLGkuc2V0KHQuc3ViYXJyYXkoMCx1KSl9ZWxzZSBuPXQuY29uY2F0KGUpLGk9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZSgwLG4ubGVuZ3RoLXIpOltdO3JldHVybltuLGldfXZhciBsPU8oZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLHMpLHU9ci5yZWRyYXcoZSksZj1bZSxsLnVwZGF0ZSxpLGwubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLnByZXBlbmRUcmFjZXMsZix0LGFyZ3VtZW50cyksdX0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe3ZhciBhLHM9W10sbD1bXSx1PXQsZj10LGg9W2U9by5nZXRHcmFwaERpdihlKSxpLG5dLHA9W2UsbixpXTtpZihJKGUsbixpKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sdm9pZCAwPT09aSlmb3IoaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspaS5wdXNoKC1uLmxlbmd0aCthKTtmb3IoaT1BcnJheS5pc0FycmF5KGkpP2k6W2ldLG49QyhuLGUuZGF0YS5sZW5ndGgtMSksaT1DKGksZS5kYXRhLmxlbmd0aC0xKSxhPTA7YTxlLmRhdGEubGVuZ3RoO2ErKyktMT09PW4uaW5kZXhPZihhKSYmcy5wdXNoKGUuZGF0YVthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylsLnB1c2goe25ld0luZGV4OmlbYV0sdHJhY2U6ZS5kYXRhW25bYV1dfSk7Zm9yKGwuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uZXdJbmRleC1lLm5ld0luZGV4fSkpLGE9MDthPGwubGVuZ3RoO2ErPTEpcy5zcGxpY2UobFthXS5uZXdJbmRleCwwLGxbYV0udHJhY2UpO2UuZGF0YT1zO3ZhciBkPXIucmVkcmF3KGUpO3JldHVybiBjLmFkZChlLHUsaCxmLHApLGR9LHIucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuLGk7aWYoby5pc1R5cGVkQXJyYXkodCkpaWYocjw9MCl7dmFyIGE9bmV3IHQuY29uc3RydWN0b3IoMCkscz16KGUsdCk7cjwwPyhuPXMsaT1hKToobj1hLGk9cyl9ZWxzZSBpZihuPW5ldyB0LmNvbnN0cnVjdG9yKHIpLGk9bmV3IHQuY29uc3RydWN0b3IodC5sZW5ndGgrZS5sZW5ndGgtcikscj09PWUubGVuZ3RoKW4uc2V0KGUpLGkuc2V0KHQpO2Vsc2UgaWYocjxlLmxlbmd0aCl7dmFyIGw9ZS5sZW5ndGgtcjtuLnNldChlLnN1YmFycmF5KDAsbCkpLGkuc2V0KGUuc3ViYXJyYXkobCkpLGkuc2V0KHQsbCl9ZWxzZXt2YXIgYz1yLWUubGVuZ3RoO24uc2V0KGUpLG4uc2V0KHQuc3ViYXJyYXkoMCxjKSxlLmxlbmd0aCksaS5zZXQodC5zdWJhcnJheShjKSl9ZWxzZSBuPWUuY29uY2F0KHQpLGk9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZShyLG4ubGVuZ3RoKTpbXTtyZXR1cm5bbixpXX12YXIgbD1PKGU9by5nZXRHcmFwaERpdihlKSxuLGksYSxzKSx1PXIucmVkcmF3KGUpLGY9W2UsbC51cGRhdGUsaSxsLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5leHRlbmRUcmFjZXMsZix0LGFyZ3VtZW50cyksdX0sci5uZXdQbG90PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0PW8uZ2V0R3JhcGhEaXYodCksaC5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fFtdLHQuX2Z1bGxMYXlvdXR8fHt9KSxoLnB1cmdlKHQpLHIuX2RvUGxvdCh0LGUsbixpKX0sci5fZG9QbG90PWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzO2lmKHQ9by5nZXRHcmFwaERpdih0KSxsLmluaXQodCksby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgYz1lO2U9Yy5kYXRhLGk9Yy5sYXlvdXQsYT1jLmNvbmZpZyxzPWMuZnJhbWVzfWlmKCExPT09bC50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlcGxvdCIsW2UsaSxhXSkpcmV0dXJuIFByb21pc2UucmVqZWN0KCk7ZXx8aXx8by5pc1Bsb3REaXYodCl8fG8ud2FybigiQ2FsbGluZyBfZG9QbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuIix0KSxMKHQsYSksaXx8KGk9e30pLG4uc2VsZWN0KHQpLmNsYXNzZWQoImpzLXBsb3RseS1wbG90IiwhMCksZC5tYWtlVGVzdGVyKCksQXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcyl8fCh0Ll9wcm9taXNlcz1bXSk7dmFyIGY9MD09PSh0LmRhdGF8fFtdKS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZSk7QXJyYXkuaXNBcnJheShlKSYmKF8uY2xlYW5EYXRhKGUpLGY/dC5kYXRhPWU6dC5kYXRhLnB1c2guYXBwbHkodC5kYXRhLGUpLHQuZW1wdHk9ITEpLHQubGF5b3V0JiYhZnx8KHQubGF5b3V0PV8uY2xlYW5MYXlvdXQoaSkpLGguc3VwcGx5RGVmYXVsdHModCk7dmFyIG09dC5fZnVsbExheW91dCx5PW0uX2hhcygiY2FydGVzaWFuIik7bS5fcmVwbG90dGluZz0hMCwoZnx8bS5fc2hvdWxkQ3JlYXRlQmdMYXllcikmJighZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkscj10Ll9mdWxsTGF5b3V0O2lmKHIuX2NhbGNJbnZlcnNlVHJhbnNmb3JtPWF0LHIuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpLHIuX2NvbnRhaW5lcj1lLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pLHIuX2NvbnRhaW5lci5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIiLCEwKS5jbGFzc2VkKCJwbG90bHkiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmdsLWNvbnRhaW5lciIpLmRhdGEoW3t9XSksci5fZ2xjb250YWluZXIuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImdsLWNvbnRhaW5lciIsITApLHIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikucmVtb3ZlKCksci5fcGFwZXJkaXYuc2VsZWN0KCIubW9kZWJhci1jb250YWluZXIiKS5yZW1vdmUoKSxyLl9wYXBlcj1yLl9wYXBlcmRpdi5pbnNlcnQoInN2ZyIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fdG9wcGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLHIuX21vZGViYXJkaXY9ci5fcGFwZXJkaXYuYXBwZW5kKCJkaXYiKSxkZWxldGUgci5fbW9kZUJhcixyLl9ob3ZlcnBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSwhci5fdWlkKXt2YXIgaT17fTtuLnNlbGVjdEFsbCgiZGVmcyIpLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5pZCYmKGlbdGhpcy5pZC5zcGxpdCgiLSIpWzFdXT0xKX0pKSxyLl91aWQ9by5yYW5kc3RyKGkpfXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuYXR0cih2LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiZGVmcy0iK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl90b3BjbGlwcz1yLl90b3BkZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJiZ2xheWVyIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZHJhZ2xheWVyIiwhMCk7dmFyIGE9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYmVsb3ciLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWEuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2NhcnRlc2lhbmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNhcnRlc2lhbmxheWVyIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2xhcmxheWVyIiwhMCksci5fc21pdGhsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJzbWl0aGxheWVyIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRlcm5hcnlsYXllciIsITApLHIuX2dlb2xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdlb2xheWVyIiwhMCksci5fZnVubmVsYXJlYWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZ1bm5lbGFyZWFsYXllciIsITApLHIuX3BpZWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBpZWxheWVyIiwhMCksci5faWNpY2xlbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaWNpY2xlbGF5ZXIiLCEwKSxyLl90cmVlbWFwbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJlZW1hcGxheWVyIiwhMCksci5fc3VuYnVyc3RsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJzdW5idXJzdGxheWVyIiwhMCksci5faW5kaWNhdG9ybGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW5kaWNhdG9ybGF5ZXIiLCEwKSxyLl9nbGltYWdlcz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnbGltYWdlcyIsITApO3ZhciBzPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWFib3ZlIiwhMCk7ci5faW1hZ2VVcHBlckxheWVyPXMuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlVXBwZXJMYXllcj1zLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9pbmZvbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW5mb2xheWVyIiwhMCksci5fbWVudWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1lbnVsYXllciIsITApLHIuX3pvb21sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ6b29tbGF5ZXIiLCEwKSxyLl9ob3ZlcmxheWVyPXIuX2hvdmVycGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJsYXllciIsITApLHIuX21vZGViYXJkaXYuY2xhc3NlZCgibW9kZWJhci1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJ0b3AiLCIwcHgiKS5zdHlsZSgicmlnaHQiLCIwcHgiKSx0LmVtaXQoInBsb3RseV9mcmFtZXdvcmsiKX0odCksbS5fc2hvdWxkQ3JlYXRlQmdMYXllciYmZGVsZXRlIG0uX3Nob3VsZENyZWF0ZUJnTGF5ZXIpLGQuaW5pdEdyYWRpZW50cyh0KSxkLmluaXRQYXR0ZXJucyh0KSxmJiZwLnNhdmVTaG93U3Bpa2VJbml0aWFsKHQpO3ZhciB4PSF0LmNhbGNkYXRhfHx0LmNhbGNkYXRhLmxlbmd0aCE9PSh0Ll9mdWxsRGF0YXx8W10pLmxlbmd0aDt4JiZoLmRvQ2FsY2RhdGEodCk7Zm9yKHZhciBiPTA7Yjx0LmNhbGNkYXRhLmxlbmd0aDtiKyspdC5jYWxjZGF0YVtiXVswXS50cmFjZT10Ll9mdWxsRGF0YVtiXTt0Ll9jb250ZXh0LnJlc3BvbnNpdmU/dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtvLmlzSGlkZGVuKHQpfHxoLnJlc2l6ZSh0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKHQpO3ZhciBUPW8uZXh0ZW5kRmxhdCh7fSxtLl9zaXplKSxrPTA7ZnVuY3Rpb24gQSgpe2lmKGguY2xlYXJBdXRvTWFyZ2luSWRzKHQpLHcuZHJhd01hcmdpblB1c2hlcnModCkscC5hbGxvd0F1dG9NYXJnaW4odCksbS5faGFzKCJwaWUiKSlmb3IodmFyIGU9dC5fZnVsbERhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdOyJwaWUiPT09bi50eXBlJiZuLmF1dG9tYXJnaW4mJmguYWxsb3dBdXRvTWFyZ2luKHQsInBpZS4iK24udWlkKyIuYXV0b21hcmdpbiIpfXJldHVybiBoLmRvQXV0b01hcmdpbih0KSxoLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gUygpe3QuX3RyYW5zaXRpb25pbmd8fCh3LmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHModCksZiYmcC5zYXZlUmFuZ2VJbml0aWFsKHQpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKSh0KSl9dmFyIEU9W2gucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHMpcmV0dXJuIHIuYWRkRnJhbWVzKHQscyl9LGZ1bmN0aW9uIGUoKXtmb3IodmFyIHI9bS5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayh0KTshbS5fZ2xjYW52YXMmJm0uX2hhcygiZ2wiKSYmKG0uX2dsY2FudmFzPW0uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmRhdGEoW3trZXk6ImNvbnRleHRMYXllciIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OiJmb2N1c0xheWVyIixjb250ZXh0OiExLHBpY2s6ITF9LHtrZXk6InBpY2tMYXllciIsY29udGV4dDohMSxwaWNrOiEwfV0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKSxtLl9nbGNhbnZhcy5lbnRlcigpLmFwcGVuZCgiY2FudmFzIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iZ2wtY2FudmFzIGdsLWNhbnZhcy0iK3Qua2V5LnJlcGxhY2UoIkxheWVyIiwiIil9KSkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG92ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pKTt2YXIgaT10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW87aWYobS5fZ2xjYW52YXMpe20uX2dsY2FudmFzLmF0dHIoIndpZHRoIixtLndpZHRoKmkpLmF0dHIoImhlaWdodCIsbS5oZWlnaHQqaSkuc3R5bGUoIndpZHRoIixtLndpZHRoKyJweCIpLnN0eWxlKCJoZWlnaHQiLG0uaGVpZ2h0KyJweCIpO3ZhciBhPW0uX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGEmJihNYXRoLmZsb29yKG0ud2lkdGgqaSkhPT1hLl9nbC5kcmF3aW5nQnVmZmVyV2lkdGh8fE1hdGguZmxvb3IobS5oZWlnaHQqaSkhPT1hLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0KSl7dmFyIHM9IldlYkdMIGNvbnRleHQgYnVmZmVyIGFuZCBjYW52YXMgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2ggZHVlIHRvIGJyb3dzZXIvV2ViR0wgYnVnLiI7aWYoIWspcmV0dXJuIG8ubG9nKHMrIiBDbGVhcmluZyBncmFwaCBhbmQgcGxvdHRpbmcgYWdhaW4uIiksaC5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGEsbSksaC5zdXBwbHlEZWZhdWx0cyh0KSxtPXQuX2Z1bGxMYXlvdXQsaC5kb0NhbGNkYXRhKHQpLGsrKyxlKCk7by5lcnJvcihzKX19cmV0dXJuImgiPT09bS5tb2RlYmFyLm9yaWVudGF0aW9uP20uX21vZGViYXJkaXYuc3R5bGUoImhlaWdodCIsbnVsbCkuc3R5bGUoIndpZHRoIiwiMTAwJSIpOm0uX21vZGViYXJkaXYuc3R5bGUoIndpZHRoIixudWxsKS5zdHlsZSgiaGVpZ2h0IixtLmhlaWdodCsicHgiKSxoLnByZXZpb3VzUHJvbWlzZXModCl9LEEsZnVuY3Rpb24oKXtpZihoLmRpZE1hcmdpbkNoYW5nZShULG0uX3NpemUpKXJldHVybiBvLnN5bmNPckFzeW5jKFtBLHcubGF5b3V0U3R5bGVzXSx0KX1dO3kmJkUucHVzaCgoZnVuY3Rpb24oKXtpZih4KXJldHVybiBvLnN5bmNPckFzeW5jKFt1LmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiY2FsY0F1dG9yYW5nZSIpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNhbGNBdXRvcmFuZ2UiKSxTXSx0KTtTKCl9KSksRS5wdXNoKHcubGF5b3V0U3R5bGVzKSx5JiZFLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHAuZHJhdyh0LGY/IiI6InJlZHJhdyIpfSksKGZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2UmJlUodCx0Ll9mdWxsTGF5b3V0Ll9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlKS50aGVuKChmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2U9dm9pZCAwfSkpfSkpLEUucHVzaCh3LmRyYXdEYXRhLHcuZmluYWxEcmF3LGcsaC5hZGRMaW5rcyxoLnJlaG92ZXIsaC5yZWRyYWcsaC5kb0F1dG9NYXJnaW4sKGZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2UmJmYmJnAuc2F2ZVJhbmdlSW5pdGlhbCh0LCEwKX0pLGgucHJldmlvdXNQcm9taXNlcyk7dmFyIEM9by5zeW5jT3JBc3luYyhFLHQpO3JldHVybiBDJiZDLnRoZW58fChDPVByb21pc2UucmVzb2x2ZSgpKSxDLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIE0odCksdH0pKX0sci5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT0odD1vLmdldEdyYXBoRGl2KHQpKS5fZnVsbExheW91dHx8e30scj10Ll9mdWxsRGF0YXx8W107cmV0dXJuIGguY2xlYW5QbG90KFtdLHt9LHIsZSksaC5wdXJnZSh0KSxsLnB1cmdlKHQpLGUuX2NvbnRhaW5lciYmZS5fY29udGFpbmVyLnJlbW92ZSgpLGRlbGV0ZSB0Ll9jb250ZXh0LHR9LHIucmVhY3Q9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbDt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgYz10Ll9mdWxsRGF0YSxwPXQuX2Z1bGxMYXlvdXQ7aWYoby5pc1Bsb3REaXYodCkmJmMmJnApe2lmKG8uaXNQbGFpbk9iamVjdChlKSl7dmFyIGQ9ZTtlPWQuZGF0YSxuPWQubGF5b3V0LGk9ZC5jb25maWcsYT1kLmZyYW1lc312YXIgbT0hMTtpZihpKXt2YXIgZz1vLmV4dGVuZERlZXAoe30sdC5fY29udGV4dCk7dC5fY29udGV4dD12b2lkIDAsTCh0LGkpLG09ZnVuY3Rpb24gdChlLHIpe3ZhciBuO2ZvcihuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkpe3ZhciBpPWVbbl0sYT1yW25dO2lmKGkhPT1hKWlmKG8uaXNQbGFpbk9iamVjdChpKSYmby5pc1BsYWluT2JqZWN0KGEpKXtpZih0KGksYSkpcmV0dXJuITB9ZWxzZXtpZighQXJyYXkuaXNBcnJheShpKXx8IUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuITA7aWYoaS5sZW5ndGghPT1hLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKylpZihpW3NdIT09YVtzXSl7aWYoIW8uaXNQbGFpbk9iamVjdChpW3NdKXx8IW8uaXNQbGFpbk9iamVjdChhW3NdKSlyZXR1cm4hMDtpZih0KGlbc10sYVtzXSkpcmV0dXJuITB9fX19KGcsdC5fY29udGV4dCl9dC5kYXRhPWV8fFtdLF8uY2xlYW5EYXRhKHQuZGF0YSksdC5sYXlvdXQ9bnx8e30sXy5jbGVhbkxheW91dCh0LmxheW91dCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxsLGMsdSxmLGgscCxkLG0sZz1uLl9wcmVHVUksdj1bXSx5PXt9LHg9e307Zm9yKGkgaW4gZyl7aWYodT0kKGksSykpe2lmKGQ9dS5oZWFkLG09dS50YWlsLGE9dS5hdHRyfHxkKyIudWlyZXZpc2lvbiIsKGM9KGw9cyhuLGEpLmdldCgpKSYmdHQoYSxlKSkmJmM9PT1sKXtpZihudWxsPT09KGY9Z1tpXSkmJihmPXZvaWQgMCksbnQocD0oaD1zKGUsaSkpLmdldCgpLGYpKXt2b2lkIDA9PT1wJiYiYXV0b3JhbmdlIj09PW0mJnYucHVzaChkKSxoLnNldChSKHMobixpKS5nZXQoKSkpO2NvbnRpbnVlfWlmKCJhdXRvcmFuZ2UiPT09bXx8InJhbmdlWyI9PT1tLnN1YnN0cigwLDYpKXt2YXIgYj1nW2QrIi5yYW5nZVswXSJdLF89Z1tkKyIucmFuZ2VbMV0iXSx3PWdbZCsiLmF1dG9yYW5nZSJdO2lmKHd8fG51bGw9PT13JiZudWxsPT09YiYmbnVsbD09PV8pe2lmKCEoZCBpbiB5KSl7dmFyIFQ9cyhlLGQpLmdldCgpO3lbZF09VCYmKFQuYXV0b3JhbmdlfHwhMSE9PVQuYXV0b3JhbmdlJiYoIVQucmFuZ2V8fDIhPT1ULnJhbmdlLmxlbmd0aCkpfWlmKHlbZF0pe2guc2V0KFIocyhuLGkpLmdldCgpKSk7Y29udGludWV9fX19fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIraSk7ZGVsZXRlIGdbaV0sdSYmInJhbmdlWyI9PT11LnRhaWwuc3Vic3RyKDAsNikmJih4W3UuaGVhZF09MSl9Zm9yKHZhciBrPTA7azx2Lmxlbmd0aDtrKyspe3ZhciBBPXZba107aWYoeFtBXSl7dmFyIE09cyhlLEEpLmdldCgpO00mJmRlbGV0ZSBNLmF1dG9yYW5nZX19dmFyIFM9bi5fdHJhY2VQcmVHVUk7Zm9yKHZhciBFIGluIFMpe3ZhciBMLEM9U1tFXSxQPW51bGw7Zm9yKGkgaW4gQyl7aWYoIVApe3ZhciBJPWV0KEUscik7aWYoSTwwKXtkZWxldGUgU1tFXTticmVha312YXIgTz1ydChFLHQsKEw9cltJXS5fZnVsbElucHV0KS5pbmRleCk7aWYoTzwwKXtkZWxldGUgU1tFXTticmVha31QPXRbT119aWYodT0kKGksUSkpe2lmKHUuYXR0cj9jPShsPXMobix1LmF0dHIpLmdldCgpKSYmdHQodS5hdHRyLGUpOihsPUwudWlyZXZpc2lvbix2b2lkIDA9PT0oYz1QLnVpcmV2aXNpb24pJiYoYz1lLnVpcmV2aXNpb24pKSxjJiZjPT09bCYmKG51bGw9PT0oZj1DW2ldKSYmKGY9dm9pZCAwKSxudChwPShoPXMoUCxpKSkuZ2V0KCksZikpKXtoLnNldChSKHMoTCxpKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybigidW5yZWNvZ25pemVkIEdVSSBlZGl0OiAiK2krIiBpbiB0cmFjZSB1aWQgIitFKTtkZWxldGUgQ1tpXX19fSh0LmRhdGEsdC5sYXlvdXQsYyxwKSxoLnN1cHBseURlZmF1bHRzKHQse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIHY9dC5fZnVsbERhdGEseT10Ll9mdWxsTGF5b3V0LHg9dm9pZCAwPT09eS5kYXRhcmV2aXNpb24sYj15LnRyYW5zaXRpb24saz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPVQubGF5b3V0RmxhZ3MoKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmLmdldExheW91dFZhbE9iamVjdChyLHQpfWEuYXJyYXlzPXt9LGEucmFuZ2VzQWx0ZXJlZD17fSxhLm5DaGFuZ2VzPTAsYS5uQ2hhbmdlc0FuaW09MCxpdChlLHIsW10se2dldFZhbE9iamVjdDpvLGZsYWdzOmEsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLGdkOnR9KSwoYS5wbG90fHxhLmNhbGMpJiYoYS5sYXlvdXRSZXBsb3Q9ITApO2kmJmEubkNoYW5nZXMmJmEubkNoYW5nZXNBbmltJiYoYS5hbmltPWEubkNoYW5nZXM9PT1hLm5DaGFuZ2VzQW5pbT8iYWxsIjoic29tZSIpO3JldHVybiBhfSh0LHAseSx4LGIpLEE9ay5uZXdEYXRhUmV2aXNpb24sUz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89ZS5sZW5ndGg9PT1yLmxlbmd0aDtpZighaSYmIW8pcmV0dXJue2Z1bGxSZXBsb3Q6ITAsY2FsYzohMH07dmFyIHMsbCxjPVQudHJhY2VGbGFncygpO2MuYXJyYXlzPXt9LGMubkNoYW5nZXM9MCxjLm5DaGFuZ2VzQW5pbT0wO3ZhciB1PXtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9Zi5nZXRUcmFjZVZhbE9iamVjdChsLHQpO3JldHVybiFsLl9tb2R1bGUuYW5pbWF0YWJsZSYmZS5hbmltJiYoZS5hbmltPSExKSxlfSxmbGFnczpjLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxuZXdEYXRhUmV2aXNpb246YSxnZDp0fSxwPXt9O2ZvcihzPTA7czxlLmxlbmd0aDtzKyspaWYocltzXSl7aWYobD1yW3NdLl9mdWxsSW5wdXQsaC5oYXNNYWtlc0RhdGFUcmFuc2Zvcm0obCkmJihsPXJbc10pLHBbbC51aWRdKWNvbnRpbnVlO3BbbC51aWRdPTEsaXQoZVtzXS5fZnVsbElucHV0LGwsW10sdSl9KGMuY2FsY3x8Yy5wbG90KSYmKGMuZnVsbFJlcGxvdD0hMCk7aSYmYy5uQ2hhbmdlcyYmYy5uQ2hhbmdlc0FuaW0mJihjLmFuaW09Yy5uQ2hhbmdlcz09PWMubkNoYW5nZXNBbmltJiZvPyJhbGwiOiJzb21lIik7cmV0dXJuIGN9KHQsYyx2LHgsYixBKTtpZihYKHQpJiYoay5sYXlvdXRSZXBsb3Q9ITApLFMuY2FsY3x8ay5jYWxjKXt0LmNhbGNkYXRhPXZvaWQgMDtmb3IodmFyIEU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoeSksQz0wO0M8RS5sZW5ndGg7QysrKXt2YXIgUD1FW0NdLEk9UC5zdWJzdHJpbmcoMCw1KTtpZigieGF4aXMiPT09SXx8InlheGlzIj09PUkpe3ZhciBPPXlbUF0uX2VtcHR5Q2F0ZWdvcmllcztPJiZPKCl9fX1lbHNlIGguc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHQuY2FsY2RhdGEsdik7dmFyIHo9W107aWYoYSYmKHQuX3RyYW5zaXRpb25EYXRhPXt9LGguY3JlYXRlVHJhbnNpdGlvbkRhdGEodCksei5wdXNoKChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyh0LGEpfSkpKSx5LnRyYW5zaXRpb24mJiFtJiYoUy5hbmltfHxrLmFuaW0pKWsudGlja3MmJnoucHVzaCh3LmRvVGlja3NSZWxheW91dCksaC5kb0NhbGNkYXRhKHQpLHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSx6LnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIGgudHJhbnNpdGlvbkZyb21SZWFjdCh0LFMsayxwKX0pKTtlbHNlIGlmKFMuZnVsbFJlcGxvdHx8ay5sYXlvdXRSZXBsb3R8fG0pdC5fZnVsbExheW91dC5fc2tpcERlZmF1bHRzPSEwLHoucHVzaChyLl9kb1Bsb3QpO2Vsc2V7Zm9yKHZhciBEIGluIGsuYXJyYXlzKXt2YXIgRj1rLmFycmF5c1tEXTtpZihGLmxlbmd0aCl7dmFyIEI9dS5nZXRDb21wb25lbnRNZXRob2QoRCwiZHJhd09uZSIpO2lmKEIhPT1vLm5vb3ApZm9yKHZhciBOPTA7TjxGLmxlbmd0aDtOKyspQih0LEZbTl0pO2Vsc2V7dmFyIGo9dS5nZXRDb21wb25lbnRNZXRob2QoRCwiZHJhdyIpO2lmKGo9PT1vLm5vb3ApdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZHJhdyBjb21wb25lbnRzOiAiK0QpO2oodCl9fX16LnB1c2goaC5wcmV2aW91c1Byb21pc2VzKSxTLnN0eWxlJiZ6LnB1c2gody5kb1RyYWNlU3R5bGUpLChTLmNvbG9yYmFyc3x8ay5jb2xvcmJhcnMpJiZ6LnB1c2gody5kb0NvbG9yQmFycyksay5sZWdlbmQmJnoucHVzaCh3LmRvTGVnZW5kKSxrLmxheW91dHN0eWxlJiZ6LnB1c2gody5sYXlvdXRTdHlsZXMpLGsuYXhyYW5nZSYmSCh6KSxrLnRpY2tzJiZ6LnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGsubW9kZWJhciYmei5wdXNoKHcuZG9Nb2RlQmFyKSxrLmNhbWVyYSYmei5wdXNoKHcuZG9DYW1lcmEpLHoucHVzaChNKX16LnB1c2goaC5yZWhvdmVyLGgucmVkcmFnKSwobD1vLnN5bmNPckFzeW5jKHosdCkpJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSl9ZWxzZSBsPXIubmV3UGxvdCh0LGUsbixpKTtyZXR1cm4gbC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWFjdCIse2RhdGE6ZSxsYXlvdXQ6bn0pLHR9KSl9LHIucmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7cmV0dXJuIF8uY2xlYW5EYXRhKHQuZGF0YSksXy5jbGVhbkxheW91dCh0LmxheW91dCksdC5jYWxjZGF0YT12b2lkIDAsci5fZG9QbG90KHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlZHJhdyIpLHR9KSl9LHIucmVsYXlvdXQ9VSxyLnJlc3R5bGU9RCxyLnNldFBsb3RDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZXh0ZW5kRmxhdCh4LHQpfSxyLnVwZGF0ZT1aLHIuX2d1aVJlbGF5b3V0PUooVSksci5fZ3VpUmVzdHlsZT1KKEQpLHIuX2d1aVVwZGF0ZT1KKFopLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpe0IobixzKHQsbikuZ2V0KCkscltuXSxlKX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uL2xpYiI6NTAzLCIuLi9saWIvZXZlbnRzIjo0OTIsIi4uL2xpYi9xdWV1ZSI6NTE5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo1NjEsIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCI6NTY0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0Ijo1NzUsIi4uL3Bsb3RzL3Bsb3RzIjo2MTksIi4uL3JlZ2lzdHJ5Ijo2MzgsIi4vZWRpdF90eXBlcyI6NTM2LCIuL2hlbHBlcnMiOjUzNywiLi9tYW5hZ2VfYXJyYXlzIjo1MzksIi4vcGxvdF9jb25maWciOjU0MSwiLi9wbG90X3NjaGVtYSI6NTQyLCIuL3N1YnJvdXRpbmVzIjo1NDQsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTkwLCJoYXMtaG92ZXIiOjIyOH1dLDU0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17c3RhdGljUGxvdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdGx5U2VydmVyVVJMOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGVkaXRhYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGFpbDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYW5ub3RhdGlvblRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGF4aXNUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGNvbG9yYmFyVGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGVnZW5kVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hhcGVQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sYXV0b3NpemFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHJlc3BvbnNpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGxGcmFtZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWVNYXJnaW5zOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxtYXg6LjV9LHNjcm9sbFpvb206e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImNhcnRlc2lhbiIsImdsM2QiLCJnZW8iLCJtYXBib3giXSxleHRyYXM6WyEwLCExXSxkZmx0OiJnbDNkK2dlbyttYXBib3gifSxkb3VibGVDbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwicmVzZXQiLCJhdXRvc2l6ZSIsInJlc2V0K2F1dG9zaXplIl0sZGZsdDoicmVzZXQrYXV0b3NpemUifSxkb3VibGVDbGlja0RlbGF5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MzAwLG1pbjowfSxzaG93QXhpc0RyYWdIYW5kbGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93QXhpc1JhbmdlRW50cnlCb3hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1RpcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dMaW5rOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaW5rVGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJFZGl0IGNoYXJ0Iixub0JsYW5rOiEwfSxzZW5kRGF0YTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd1NvdXJjZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sZGlzcGxheU1vZGVCYXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvdmVyIiwhMCwhMV0sZGZsdDoiaG92ZXIifSxzaG93U2VuZFRvQ2xvdWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHNob3dFZGl0SW5DaGFydFN0dWRpbzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbW9kZUJhckJ1dHRvbnNUb1JlbW92ZTp7dmFsVHlwZToiYW55IixkZmx0OltdfSxtb2RlQmFyQnV0dG9uc1RvQWRkOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LHRvSW1hZ2VCdXR0b25PcHRpb25zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e319LGRpc3BsYXlsb2dvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx3YXRlcm1hcms6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHBsb3RHbFBpeGVsUmF0aW86e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyLG1pbjoxLG1heDo0fSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6InRyYW5zcGFyZW50In0sdG9wb2pzb25VUkw6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxkZmx0OiJodHRwczovL2Nkbi5wbG90Lmx5LyJ9LG1hcGJveEFjY2Vzc1Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6bnVsbH0sbG9nZ2luZzp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4OjIsZGZsdDoxfSxub3RpZnlPbkxvZ2dpbmc6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDoyLGRmbHQ6MH0scXVldWVMZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MH0sZ2xvYmFsVHJhbnNmb3Jtczp7dmFsVHlwZToiYW55IixkZmx0OltdfSxsb2NhbGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiZW4tVVMifSxsb2NhbGVzOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e319fSxpPXt9OyFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07aS52YWxUeXBlP3Jbbl09aS5kZmx0OihyW25dfHwocltuXT17fSksdChpLHJbbl0pKX19KG4saSksZS5leHBvcnRzPXtjb25maWdBdHRyaWJ1dGVzOm4sZGZsdENvbmZpZzppfX0se31dLDU0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyIpLGw9dCgiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxjPXQoIi4vcGxvdF9jb25maWciKS5jb25maWdBdHRyaWJ1dGVzLHU9dCgiLi9lZGl0X3R5cGVzIiksZj1pLmV4dGVuZERlZXBBbGwsaD1pLmlzUGxhaW5PYmplY3QscD1pLmlzQXJyYXlPclR5cGVkQXJyYXksZD1pLm5lc3RlZFByb3BlcnR5LG09aS52YWxPYmplY3RNZXRhLGc9WyJfaXNTdWJwbG90T2JqIiwiX2lzTGlua2VkVG9BcnJheSIsIl9hcnJheUF0dHJSZWdleHBzIiwiX2RlcHJlY2F0ZWQiXTtmdW5jdGlvbiB2KHQsZSxyKXtpZighdClyZXR1cm4hMTtpZih0Ll9pc0xpbmtlZFRvQXJyYXkpaWYoeShlW3JdKSlyKys7ZWxzZSBpZihyPGUubGVuZ3RoKXJldHVybiExO2Zvcig7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYoIWgobikpYnJlYWs7aWYodD1uLHI9PT1lLmxlbmd0aC0xKWJyZWFrO2lmKHQuX2lzTGlua2VkVG9BcnJheSl7aWYoIXkoZVsrK3JdKSlyZXR1cm4hMX1lbHNlIGlmKCJpbmZvX2FycmF5Ij09PXQudmFsVHlwZSl7dmFyIGk9ZVsrK3JdO2lmKCF5KGkpKXJldHVybiExO3ZhciBhPXQuaXRlbXM7aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT49YS5sZW5ndGgpcmV0dXJuITE7aWYoMj09PXQuZGltZW5zaW9ucyl7aWYocisrLGUubGVuZ3RoPT09cilyZXR1cm4gdDt2YXIgbz1lW3JdO2lmKCF5KG8pKXJldHVybiExO3Q9YVtpXVtvXX1lbHNlIHQ9YVtpXX1lbHNlIHQ9YX19cmV0dXJuIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdD09PU1hdGgucm91bmQodCkmJnQ+PTB9ZnVuY3Rpb24geCgpe3ZhciB0LGUscj17fTtmb3IodCBpbiBmKHIsbyksbi5zdWJwbG90c1JlZ2lzdHJ5KXtpZigoZT1uLnN1YnBsb3RzUmVnaXN0cnlbdF0pLmxheW91dEF0dHJpYnV0ZXMpaWYoQXJyYXkuaXNBcnJheShlLmF0dHIpKWZvcih2YXIgaT0wO2k8ZS5hdHRyLmxlbmd0aDtpKyspdyhyLGUsZS5hdHRyW2ldKTtlbHNlIHcocixlLCJzdWJwbG90Ij09PWUuYXR0cj9lLm5hbWU6ZS5hdHRyKX1mb3IodCBpbiBuLmNvbXBvbmVudHNSZWdpc3RyeSl7dmFyIGE9KGU9bi5jb21wb25lbnRzUmVnaXN0cnlbdF0pLnNjaGVtYTtpZihhJiYoYS5zdWJwbG90c3x8YS5sYXlvdXQpKXt2YXIgcz1hLnN1YnBsb3RzO2lmKHMmJnMueGF4aXMmJiFzLnlheGlzKWZvcih2YXIgbCBpbiBzLnhheGlzKWRlbGV0ZSByLnlheGlzW2xdfWVsc2UiY29sb3JzY2FsZSI9PT1lLm5hbWU/ZihyLGUubGF5b3V0QXR0cmlidXRlcyk6ZS5sYXlvdXRBdHRyaWJ1dGVzJiZUKHIsZS5sYXlvdXRBdHRyaWJ1dGVzLGUubmFtZSl9cmV0dXJue2xheW91dEF0dHJpYnV0ZXM6XyhyKX19ZnVuY3Rpb24gYigpe3ZhciB0PXtmcmFtZXM6Zih7fSxzKX07cmV0dXJuIF8odCksdC5mcmFtZXN9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZnVuY3Rpb24odCl7ci5jcmF3bCh0LChmdW5jdGlvbih0LGUsbil7ci5pc1ZhbE9iamVjdCh0KT8hMCE9PXQuYXJyYXlPayYmImRhdGFfYXJyYXkiIT09dC52YWxUeXBlfHwobltlKyJzcmMiXT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9KTpoKHQpJiYodC5yb2xlPSJvYmplY3QiKX0pKX0odCksZnVuY3Rpb24odCl7ci5jcmF3bCh0LChmdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG49dC5faXNMaW5rZWRUb0FycmF5O24mJihkZWxldGUgdC5faXNMaW5rZWRUb0FycmF5LHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPSJvYmplY3QiKX19KSl9KHQpLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUpe2Zvcih2YXIgciBpbiBlKWlmKGgoZVtyXSkpdChlW3JdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZVtyXSkpZm9yKHZhciBuPTA7bjxlW3JdLmxlbmd0aDtuKyspdChlW3JdW25dKTtlbHNlIGVbcl1pbnN0YW5jZW9mIFJlZ0V4cCYmKGVbcl09ZVtyXS50b1N0cmluZygpKX0odCl9KHQpLHR9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49ZCh0LHIpLGk9Zih7fSxlLmxheW91dEF0dHJpYnV0ZXMpO2kuX2lzU3VicGxvdE9iaj0hMCxuLnNldChpKX1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj1kKHQscik7bi5zZXQoZihuLmdldCgpfHx7fSxlKSl9ci5JU19TVUJQTE9UX09CSj0iX2lzU3VicGxvdE9iaiIsci5JU19MSU5LRURfVE9fQVJSQVk9Il9pc0xpbmtlZFRvQXJyYXkiLHIuREVQUkVDQVRFRD0iX2RlcHJlY2F0ZWQiLHIuVU5ERVJTQ09SRV9BVFRSUz1nLHIuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9e307bi5hbGxUeXBlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKHQpe3ZhciBlLGk7ZT1uLm1vZHVsZXNbdF0uX21vZHVsZSxpPWUuYmFzZVBsb3RNb2R1bGU7dmFyIG89e3R5cGU6bnVsbH0scz1mKHt9LGEpLGw9Zih7fSxlLmF0dHJpYnV0ZXMpO3IuY3Jhd2wobCwoZnVuY3Rpb24odCxlLHIsbixpKXtkKHMsaSkuc2V0KHZvaWQgMCksdm9pZCAwPT09dCYmZChsLGkpLnNldCh2b2lkIDApfSkpLGYobyxzKSxuLnRyYWNlSXModCwibm9PcGFjaXR5IikmJmRlbGV0ZSBvLm9wYWNpdHk7bi50cmFjZUlzKHQsInNob3dMZWdlbmQiKXx8KGRlbGV0ZSBvLnNob3dsZWdlbmQsZGVsZXRlIG8ubGVnZW5kZ3JvdXApO24udHJhY2VJcyh0LCJub0hvdmVyIikmJihkZWxldGUgby5ob3ZlcmluZm8sZGVsZXRlIG8uaG92ZXJsYWJlbCk7ZS5zZWxlY3RQb2ludHN8fGRlbGV0ZSBvLnNlbGVjdGVkcG9pbnRzO2YobyxsKSxpLmF0dHJpYnV0ZXMmJmYobyxpLmF0dHJpYnV0ZXMpO28udHlwZT10O3ZhciBjPXttZXRhOmUubWV0YXx8e30sY2F0ZWdvcmllczplLmNhdGVnb3JpZXN8fHt9LGFuaW1hdGFibGU6Qm9vbGVhbihlLmFuaW1hdGFibGUpLHR5cGU6dCxhdHRyaWJ1dGVzOl8obyl9O2lmKGUubGF5b3V0QXR0cmlidXRlcyl7dmFyIHU9e307Zih1LGUubGF5b3V0QXR0cmlidXRlcyksYy5sYXlvdXRBdHRyaWJ1dGVzPV8odSl9ZS5hbmltYXRhYmxlfHxyLmNyYXdsKGMsKGZ1bmN0aW9uKHQpe3IuaXNWYWxPYmplY3QodCkmJiJhbmltImluIHQmJmRlbGV0ZSB0LmFuaW19KSk7cmV0dXJuIGN9KGUpfSkpO3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyhuLnRyYW5zZm9ybXNSZWdpc3RyeSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbih0KXt2YXIgZT1uLnRyYW5zZm9ybXNSZWdpc3RyeVt0XSxyPWYoe30sZS5hdHRyaWJ1dGVzKTtyZXR1cm4gT2JqZWN0LmtleXMobi5jb21wb25lbnRzUmVnaXN0cnkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2VdO2kuc2NoZW1hJiZpLnNjaGVtYS50cmFuc2Zvcm1zJiZpLnNjaGVtYS50cmFuc2Zvcm1zW3RdJiZPYmplY3Qua2V5cyhpLnNjaGVtYS50cmFuc2Zvcm1zW3RdKS5mb3JFYWNoKChmdW5jdGlvbihlKXtUKHIsaS5zY2hlbWEudHJhbnNmb3Jtc1t0XVtlXSxlKX0pKX0pKSx7YXR0cmlidXRlczpfKHIpfX0odCl9KSkse2RlZnM6e3ZhbE9iamVjdHM6bSxtZXRhS2V5czpnLmNvbmNhdChbImRlc2NyaXB0aW9uIiwicm9sZSIsImVkaXRUeXBlIiwiaW1wbGllZEVkaXRzIl0pLGVkaXRUeXBlOnt0cmFjZXM6dS50cmFjZXMsbGF5b3V0OnUubGF5b3V0fSxpbXBsaWVkRWRpdHM6e319LHRyYWNlczp0LGxheW91dDp4KCksdHJhbnNmb3JtczplLGZyYW1lczpiKCksYW5pbWF0aW9uOl8obCksY29uZmlnOl8oYyl9fSxyLmNyYXdsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPW58fDA7aT1pfHwiIixPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbz10W25dO2lmKC0xPT09Zy5pbmRleE9mKG4pKXt2YXIgcz0oaT9pKyIuIjoiIikrbjtlKG8sbix0LGEscyksci5pc1ZhbE9iamVjdChvKXx8aChvKSYmImltcGxpZWRFZGl0cyIhPT1uJiZyLmNyYXdsKG8sZSxhKzEscyl9fSkpfSxyLmlzVmFsT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnZhbFR5cGV9LHIuZmluZEFycmF5QXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgZSxuLGk9W10sbz1bXSxzPVtdO2Z1bmN0aW9uIGwodCxyLGEsbCl7bz1vLnNsaWNlKDAsbCkuY29uY2F0KFtyXSkscz1zLnNsaWNlKDAsbCkuY29uY2F0KFt0JiZ0Ll9pc0xpbmtlZFRvQXJyYXldKSx0JiYoImRhdGFfYXJyYXkiPT09dC52YWxUeXBlfHwhMD09PXQuYXJyYXlPaykmJiEoImNvbG9yYmFyIj09PW9bbC0xXSYmKCJ0aWNrdGV4dCI9PT1yfHwidGlja3ZhbHMiPT09cikpJiZmdW5jdGlvbiB0KGUscixhKXt2YXIgbD1lW29bcl1dLGM9YStvW3JdO2lmKHI9PT1vLmxlbmd0aC0xKXAobCkmJmkucHVzaChuK2MpO2Vsc2UgaWYoc1tyXSl7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IodmFyIHU9MDt1PGwubGVuZ3RoO3UrKyloKGxbdV0pJiZ0KGxbdV0scisxLGMrIlsiK3UrIl0uIil9ZWxzZSBoKGwpJiZ0KGwscisxLGMrIi4iKX0oZSwwLCIiKX1lPXQsbj0iIixyLmNyYXdsKGEsbCksdC5fbW9kdWxlJiZ0Ll9tb2R1bGUuYXR0cmlidXRlcyYmci5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxsKTt2YXIgYz10LnRyYW5zZm9ybXM7aWYoYylmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XSxkPWYuX21vZHVsZTtkJiYobj0idHJhbnNmb3Jtc1siK3UrIl0uIixlPWYsci5jcmF3bChkLmF0dHJpYnV0ZXMsbCkpfXJldHVybiBpfSxyLmdldFRyYWNlVmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxvPWVbMF0scz0xO2lmKCJ0cmFuc2Zvcm1zIj09PW8pe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gYS50cmFuc2Zvcm1zO3ZhciBsPXQudHJhbnNmb3JtcztpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiExO3ZhciBjPWVbMV07aWYoIXkoYyl8fGM+PWwubGVuZ3RoKXJldHVybiExO2k9KHI9KG4udHJhbnNmb3Jtc1JlZ2lzdHJ5W2xbY10udHlwZV18fHt9KS5hdHRyaWJ1dGVzKSYmcltlWzJdXSxzPTN9ZWxzZXt2YXIgdT10Ll9tb2R1bGU7aWYodXx8KHU9KG4ubW9kdWxlc1t0LnR5cGV8fGEudHlwZS5kZmx0XXx8e30pLl9tb2R1bGUpLCF1KXJldHVybiExO2lmKCEoaT0ocj11LmF0dHJpYnV0ZXMpJiZyW29dKSl7dmFyIGY9dS5iYXNlUGxvdE1vZHVsZTtmJiZmLmF0dHJpYnV0ZXMmJihpPWYuYXR0cmlidXRlc1tvXSl9aXx8KGk9YVtvXSl9cmV0dXJuIHYoaSxlLHMpfSxyLmdldExheW91dFZhbE9iamVjdD1mdW5jdGlvbih0LGUpe3JldHVybiB2KGZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLHMsbD10Ll9iYXNlUGxvdE1vZHVsZXM7aWYobCl7dmFyIGM7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKyl7aWYoKGE9bFtyXSkuYXR0clJlZ2V4JiZhLmF0dHJSZWdleC50ZXN0KGUpKXtpZihhLmxheW91dEF0dHJPdmVycmlkZXMpcmV0dXJuIGEubGF5b3V0QXR0ck92ZXJyaWRlczshYyYmYS5sYXlvdXRBdHRyaWJ1dGVzJiYoYz1hLmxheW91dEF0dHJpYnV0ZXMpfXZhciB1PWEuYmFzZUxheW91dEF0dHJPdmVycmlkZXM7aWYodSYmZSBpbiB1KXJldHVybiB1W2VdfWlmKGMpcmV0dXJuIGN9dmFyIGY9dC5fbW9kdWxlcztpZihmKWZvcihyPTA7cjxmLmxlbmd0aDtyKyspaWYoKHM9ZltyXS5sYXlvdXRBdHRyaWJ1dGVzKSYmZSBpbiBzKXJldHVybiBzW2VdO2ZvcihpIGluIG4uY29tcG9uZW50c1JlZ2lzdHJ5KXtpZigiY29sb3JzY2FsZSI9PT0oYT1uLmNvbXBvbmVudHNSZWdpc3RyeVtpXSkubmFtZSYmMD09PWUuaW5kZXhPZigiY29sb3JheGlzIikpcmV0dXJuIGEubGF5b3V0QXR0cmlidXRlc1tlXTtpZighYS5zY2hlbWEmJmU9PT1hLm5hbWUpcmV0dXJuIGEubGF5b3V0QXR0cmlidXRlc31yZXR1cm4gZSBpbiBvJiZvW2VdfSh0LGVbMF0pLGUsMSl9fSx7Ii4uL2xpYiI6NTAzLCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6NTQ4LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiOjU4NiwiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjYxMCwiLi4vcmVnaXN0cnkiOjYzOCwiLi9lZGl0X3R5cGVzIjo1MzYsIi4vcGxvdF9jb25maWciOjU0MX1dLDU0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXtuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn19O2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1mdW5jdGlvbiBzKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuInMiIT09dC5jaGFyQXQoZSkmJm4ud2FybigiYmFkIGFyZ3VtZW50IHRvIGFycmF5RGVmYXVsdEtleTogIit0KSx0LnN1YnN0cigwLHQubGVuZ3RoLTEpKyJkZWZhdWx0cyJ9YS50ZW1wbGF0ZWl0ZW1uYW1lPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sci50ZW1wbGF0ZWRBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0xpbmtlZFRvQXJyYXk9dCxlLm5hbWU9YS5uYW1lLGUudGVtcGxhdGVpdGVtbmFtZT1hLnRlbXBsYXRlaXRlbW5hbWUsZX0sci50cmFjZVRlbXBsYXRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLGE9e307Zm9yKGUgaW4gdClyPXRbZV0sQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGgmJihhW2VdPTApO3JldHVybntuZXdUcmFjZTpmdW5jdGlvbihvKXt2YXIgcz17dHlwZTplPW4uY29lcmNlKG8se30saSwidHlwZSIpLF90ZW1wbGF0ZTpudWxsfTtpZihlIGluIGEpe3I9dFtlXTt2YXIgbD1hW2VdJXIubGVuZ3RoO2FbZV0rKyxzLl90ZW1wbGF0ZT1yW2xdfXJldHVybiBzfX19LHIubmV3Q29udGFpbmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Ll90ZW1wbGF0ZSxhPWkmJihpW2VdfHxyJiZpW3JdKTtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KGEpfHwoYT1udWxsKSx0W2VdPXtfdGVtcGxhdGU6YX19LHIuYXJyYXlUZW1wbGF0ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3RlbXBsYXRlLGk9biYmbltzKGUpXSxhPW4mJm5bZV07QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGh8fChhPVtdKTt2YXIgbD17fTtyZXR1cm57bmV3SXRlbTpmdW5jdGlvbih0KXt2YXIgZT17bmFtZTp0Lm5hbWUsX2lucHV0OnR9LG49ZS50ZW1wbGF0ZWl0ZW1uYW1lPXQudGVtcGxhdGVpdGVtbmFtZTtpZighbyhuKSlyZXR1cm4gZS5fdGVtcGxhdGU9aSxlO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO2lmKGMubmFtZT09PW4pcmV0dXJuIGxbbl09MSxlLl90ZW1wbGF0ZT1jLGV9cmV0dXJuIGVbcl09dFtyXXx8ITEsZS5fdGVtcGxhdGU9ITEsZX0sZGVmYXVsdEl0ZW1zOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHI9YVtlXSxuPXIubmFtZTtpZihvKG4pJiYhbFtuXSl7dmFyIGk9e190ZW1wbGF0ZTpyLG5hbWU6bixfaW5wdXQ6e190ZW1wbGF0ZWl0ZW1uYW1lOm59fTtpLnRlbXBsYXRlaXRlbW5hbWU9ci50ZW1wbGF0ZWl0ZW1uYW1lLHQucHVzaChpKSxsW25dPTF9fXJldHVybiB0fX19LHIuYXJyYXlEZWZhdWx0S2V5PXMsci5hcnJheUVkaXRvcj1mdW5jdGlvbih0LGUscil7dmFyIGk9KG4ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8W10pLmxlbmd0aCxhPXIuX2luZGV4LG89YT49aSYmKHIuX2lucHV0fHx7fSkuX3RlbXBsYXRlaXRlbW5hbWU7byYmKGE9aSk7dmFyIHMsbD1lKyJbIithKyJdIjtmdW5jdGlvbiBjKCl7cz17fSxvJiYoc1tsXT17fSxzW2xdLnRlbXBsYXRlaXRlbW5hbWU9byl9ZnVuY3Rpb24gdSh0LGUpe28/bi5uZXN0ZWRQcm9wZXJ0eShzW2xdLHQpLnNldChlKTpzW2wrIi4iK3RdPWV9ZnVuY3Rpb24gZigpe3ZhciB0PXM7cmV0dXJuIGMoKSx0fXJldHVybiBjKCkse21vZGlmeUJhc2U6ZnVuY3Rpb24odCxlKXtzW3RdPWV9LG1vZGlmeUl0ZW06dSxnZXRVcGRhdGVPYmo6ZixhcHBseVVwZGF0ZTpmdW5jdGlvbihlLHIpe2UmJnUoZSxyKTt2YXIgaT1mKCk7Zm9yKHZhciBhIGluIGkpbi5uZXN0ZWRQcm9wZXJ0eSh0LGEpLnNldChpW2FdKX19fX0seyIuLi9saWIiOjUwMywiLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwfV0sNTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi4vbGliIikscz10KCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxsPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxjPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHU9dCgiLi4vY29tcG9uZW50cy90aXRsZXMiKSxmPXQoIi4uL2NvbXBvbmVudHMvbW9kZWJhciIpLGg9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxwPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxkPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLG09ZC5lbmZvcmNlLGc9ZC5jbGVhbix2PXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5kb0F1dG9SYW5nZTtmdW5jdGlvbiB5KHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXVswXSxhPXJbbl1bMV07aWYoIShpWzBdPj10WzFdfHxpWzFdPD10WzBdKSYmKGFbMF08ZVsxXSYmYVsxXT5lWzBdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB4KHQpe3ZhciBlLGkscyx1LGQsbSxnPXQuX2Z1bGxMYXlvdXQsdj1nLl9zaXplLHg9di5wLF89aC5saXN0KHQsIiIsITApO2lmKGcuX3BhcGVyZGl2LnN0eWxlKHt3aWR0aDp0Ll9jb250ZXh0LnJlc3BvbnNpdmUmJmcuYXV0b3NpemUmJiF0Ll9jb250ZXh0Ll9oYXNaZXJvV2lkdGgmJiF0LmxheW91dC53aWR0aD8iMTAwJSI6Zy53aWR0aCsicHgiLGhlaWdodDp0Ll9jb250ZXh0LnJlc3BvbnNpdmUmJmcuYXV0b3NpemUmJiF0Ll9jb250ZXh0Ll9oYXNaZXJvSGVpZ2h0JiYhdC5sYXlvdXQuaGVpZ2h0PyIxMDAlIjpnLmhlaWdodCsicHgifSkuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5jYWxsKGMuc2V0U2l6ZSxnLndpZHRoLGcuaGVpZ2h0KSx0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCxnLnBhcGVyX2JnY29sb3IpLHIuZHJhd01haW5UaXRsZSh0KSxmLm1hbmFnZSh0KSwhZy5faGFzKCJjYXJ0ZXNpYW4iKSlyZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpO2Z1bmN0aW9uIFQodCxlLHIpe3ZhciBuPXQuX2x3LzI7cmV0dXJuIngiPT09dC5faWQuY2hhckF0KDApP2U/InRvcCI9PT1yP2UuX29mZnNldC14LW46ZS5fb2Zmc2V0K2UuX2xlbmd0aCt4K246di50K3YuaCooMS0odC5wb3NpdGlvbnx8MCkpK24lMTplPyJyaWdodCI9PT1yP2UuX29mZnNldCtlLl9sZW5ndGgreCtuOmUuX29mZnNldC14LW46di5sK3YudyoodC5wb3NpdGlvbnx8MCkrbiUxfWZvcihlPTA7ZTxfLmxlbmd0aDtlKyspe3ZhciBrPSh1PV9bZV0pLl9hbmNob3JBeGlzO3UuX2xpbmVwb3NpdGlvbnM9e30sdS5fbHc9Yy5jcmlzcFJvdW5kKHQsdS5saW5ld2lkdGgsMSksdS5fbWFpbkxpbmVQb3NpdGlvbj1UKHUsayx1LnNpZGUpLHUuX21haW5NaXJyb3JQb3NpdGlvbj11Lm1pcnJvciYmaz9UKHUsayxwLk9QUE9TSVRFX1NJREVbdS5zaWRlXSk6bnVsbH12YXIgQT1bXSxNPVtdLFM9W10sRT0xPT09bC5vcGFjaXR5KGcucGFwZXJfYmdjb2xvcikmJjE9PT1sLm9wYWNpdHkoZy5wbG90X2JnY29sb3IpJiZnLnBhcGVyX2JnY29sb3I9PT1nLnBsb3RfYmdjb2xvcjtmb3IoaSBpbiBnLl9wbG90cylpZigocz1nLl9wbG90c1tpXSkubWFpbnBsb3Qpcy5iZyYmcy5iZy5yZW1vdmUoKSxzLmJnPXZvaWQgMDtlbHNle3ZhciBMPXMueGF4aXMuZG9tYWluLEM9cy55YXhpcy5kb21haW4sUD1zLnBsb3Rncm91cDtpZih5KEwsQyxTKSl7dmFyIEk9UC5ub2RlKCksTz1zLmJnPW8uZW5zdXJlU2luZ2xlKFAsInJlY3QiLCJiZyIpO0kuaW5zZXJ0QmVmb3JlKE8ubm9kZSgpLEkuY2hpbGROb2Rlc1swXSksTS5wdXNoKGkpfWVsc2UgUC5zZWxlY3QoInJlY3QuYmciKS5yZW1vdmUoKSxTLnB1c2goW0wsQ10pLEV8fChBLnB1c2goaSksTS5wdXNoKGkpKX12YXIgeixELFIsRixCLE4saixVLFYsSCxxLEcsWSxXPWcuX2JnTGF5ZXIuc2VsZWN0QWxsKCIuYmciKS5kYXRhKEEpO2ZvcihXLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmciLCEwKSxXLmV4aXQoKS5yZW1vdmUoKSxXLmVhY2goKGZ1bmN0aW9uKHQpe2cuX3Bsb3RzW3RdLmJnPW4uc2VsZWN0KHRoaXMpfSkpLGU9MDtlPE0ubGVuZ3RoO2UrKylzPWcuX3Bsb3RzW01bZV1dLGQ9cy54YXhpcyxtPXMueWF4aXMscy5iZyYmdm9pZCAwIT09ZC5fb2Zmc2V0JiZ2b2lkIDAhPT1tLl9vZmZzZXQmJnMuYmcuY2FsbChjLnNldFJlY3QsZC5fb2Zmc2V0LXgsbS5fb2Zmc2V0LXgsZC5fbGVuZ3RoKzIqeCxtLl9sZW5ndGgrMip4KS5jYWxsKGwuZmlsbCxnLnBsb3RfYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCk7aWYoIWcuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IoaSBpbiBnLl9wbG90cyl7cz1nLl9wbG90c1tpXSxkPXMueGF4aXMsbT1zLnlheGlzO3ZhciBYLFosSj1zLmNsaXBJZD0iY2xpcCIrZy5fdWlkK2krInBsb3QiLEs9by5lbnN1cmVTaW5nbGVCeUlkKGcuX2NsaXBzLCJjbGlwUGF0aCIsSiwoZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJwbG90Y2xpcCIsITApLmFwcGVuZCgicmVjdCIpfSkpO3MuY2xpcFJlY3Q9Sy5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpkLl9sZW5ndGgsaGVpZ2h0Om0uX2xlbmd0aH0pLGMuc2V0VHJhbnNsYXRlKHMucGxvdCxkLl9vZmZzZXQsbS5fb2Zmc2V0KSxzLl9oYXNDbGlwT25BeGlzRmFsc2U/KFg9bnVsbCxaPUopOihYPUosWj1udWxsKSxjLnNldENsaXBVcmwocy5wbG90LFgsdCkscy5sYXllckNsaXBJZD1afWZ1bmN0aW9uIFEodCl7cmV0dXJuIk0iK3orIiwiK3QrIkgiK0R9ZnVuY3Rpb24gJCh0KXtyZXR1cm4iTSIrZC5fb2Zmc2V0KyIsIit0KyJoIitkLl9sZW5ndGh9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIk0iK3QrIiwiK1UrIlYiK2p9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIk0iK3QrIiwiK20uX29mZnNldCsidiIrbS5fbGVuZ3RofWZ1bmN0aW9uIHJ0KHQsZSxyKXtpZighdC5zaG93bGluZXx8aSE9PXQuX21haW5TdWJwbG90KXJldHVybiIiO2lmKCF0Ll9hbmNob3JBeGlzKXJldHVybiByKHQuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPWUodC5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIHQubWlycm9yJiYobis9ZSh0Ll9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihpIGluIGcuX3Bsb3RzKXtzPWcuX3Bsb3RzW2ldLGQ9cy54YXhpcyxtPXMueWF4aXM7dmFyIG50PSJNMCwwIjtiKGQsaSkmJihCPXcoZCwibGVmdCIsbSxfKSx6PWQuX29mZnNldC0oQj94K0I6MCksTj13KGQsInJpZ2h0IixtLF8pLEQ9ZC5fb2Zmc2V0K2QuX2xlbmd0aCsoTj94K046MCksUj1UKGQsbSwiYm90dG9tIiksRj1UKGQsbSwidG9wIiksIShZPSFkLl9hbmNob3JBeGlzfHxpIT09ZC5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09ZC5taXJyb3ImJiJhbGwiIT09ZC5taXJyb3J8fChkLl9saW5lcG9zaXRpb25zW2ldPVtSLEZdKSxudD1ydChkLFEsJCksWSYmZC5zaG93bGluZSYmKCJhbGwiPT09ZC5taXJyb3J8fCJhbGx0aWNrcyI9PT1kLm1pcnJvcikmJihudCs9UShSKStRKEYpKSxzLnhsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixkLl9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLGQuc2hvd2xpbmU/ZC5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSkscy54bGluZXMuYXR0cigiZCIsbnQpO3ZhciBpdD0iTTAsMCI7YihtLGkpJiYocT13KG0sImJvdHRvbSIsZCxfKSxqPW0uX29mZnNldCttLl9sZW5ndGgrKHE/eDowKSxHPXcobSwidG9wIixkLF8pLFU9bS5fb2Zmc2V0LShHP3g6MCksVj1UKG0sZCwibGVmdCIpLEg9VChtLGQsInJpZ2h0IiksIShZPSFtLl9hbmNob3JBeGlzfHxpIT09bS5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09bS5taXJyb3ImJiJhbGwiIT09bS5taXJyb3J8fChtLl9saW5lcG9zaXRpb25zW2ldPVtWLEhdKSxpdD1ydChtLHR0LGV0KSxZJiZtLnNob3dsaW5lJiYoImFsbCI9PT1tLm1pcnJvcnx8ImFsbHRpY2tzIj09PW0ubWlycm9yKSYmKGl0Kz10dChWKSt0dChIKSkscy55bGluZXMuc3R5bGUoInN0cm9rZS13aWR0aCIsbS5fbHcrInB4IikuY2FsbChsLnN0cm9rZSxtLnNob3dsaW5lP20ubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIikpLHMueWxpbmVzLmF0dHIoImQiLGl0KX1yZXR1cm4gaC5tYWtlQ2xpcFBhdGhzKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuKHQudGlja3N8fHQuc2hvd2xpbmUpJiYoZT09PXQuX21haW5TdWJwbG90fHwiYWxsIj09PXQubWlycm9yfHwiYWxsdGlja3MiPT09dC5taXJyb3IpfWZ1bmN0aW9uIF8odCxlLHIpe2lmKCFyLnNob3dsaW5lfHwhci5fbHcpcmV0dXJuITE7aWYoImFsbCI9PT1yLm1pcnJvcnx8ImFsbHRpY2tzIj09PXIubWlycm9yKXJldHVybiEwO3ZhciBuPXIuX2FuY2hvckF4aXM7aWYoIW4pcmV0dXJuITE7dmFyIGk9cC5GUk9NX0JMW2VdO3JldHVybiByLnNpZGU9PT1lP24uZG9tYWluW2ldPT09dC5kb21haW5baV06ci5taXJyb3ImJm4uZG9tYWluWzEtaV09PT10LmRvbWFpblsxLWldfWZ1bmN0aW9uIHcodCxlLHIsbil7aWYoXyh0LGUscikpcmV0dXJuIHIuX2x3O2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKGEuX21haW5BeGlzPT09ci5fbWFpbkF4aXMmJl8odCxlLGEpKXJldHVybiBhLl9sd31yZXR1cm4gMH1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO3N3aXRjaCgic3RhcnQiPT09ZT9pPXIucGFkLmw6ImVuZCI9PT1lJiYoaT0tci5wYWQuciksci54cmVmKXtjYXNlInBhcGVyIjpyZXR1cm4gbi5sK24udypyLngraTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gdC53aWR0aCpyLngraX19ZnVuY3Rpb24gayh0LGUpe3ZhciByPXQudGl0bGUsbj10Ll9zaXplLGk9MDtpZigiMGVtIiE9PWUmJmU/ZT09PXAuQ0FQX1NISUZUKyJlbSImJihpPXIucGFkLnQpOmk9LXIucGFkLmIsImF1dG8iPT09ci55KXJldHVybiBuLnQvMjtzd2l0Y2goci55cmVmKXtjYXNlInBhcGVyIjpyZXR1cm4gbi50K24uaC1uLmgqci55K2k7Y2FzZSJjb250YWluZXIiOmRlZmF1bHQ6cmV0dXJuIHQuaGVpZ2h0LXQuaGVpZ2h0KnIueStpfX1yLmxheW91dFN0eWxlcz1mdW5jdGlvbih0KXtyZXR1cm4gby5zeW5jT3JBc3luYyhbYS5kb0F1dG9NYXJnaW4seF0sdCl9LHIuZHJhd01haW5UaXRsZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCl7dmFyIGU9dC50aXRsZSxyPSJtaWRkbGUiO28uaXNSaWdodEFuY2hvcihlKT9yPSJlbmQiOm8uaXNMZWZ0QW5jaG9yKGUpJiYocj0ic3RhcnQiKTtyZXR1cm4gcn0oZSksbj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9IjBlbSI7by5pc1RvcEFuY2hvcihlKT9yPXAuQ0FQX1NISUZUKyJlbSI6by5pc01pZGRsZUFuY2hvcihlKSYmKHI9cC5NSURfU0hJRlQrImVtIik7cmV0dXJuIHJ9KGUpO3UuZHJhdyh0LCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6InRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6VChlLHIpLHk6ayhlLG4pLCJ0ZXh0LWFuY2hvciI6cixkeTpufX0pfSxyLmRvVHJhY2VTdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuY2FsY2RhdGEsbz1bXTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgbD1uW2VdLGM9bFswXXx8e30sdT1jLnRyYWNlfHx7fSxmPXUuX21vZHVsZXx8e30saD1mLmFycmF5c1RvQ2FsY2RhdGE7aCYmaChsLHUpO3ZhciBwPWYuZWRpdFN0eWxlO3AmJm8ucHVzaCh7Zm46cCxjZDA6Y30pfWlmKG8ubGVuZ3RoKXtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgZD1vW2VdO2QuZm4odCxkLmNkMCl9cyh0KSxyLnJlZHJhd1JlZ2xUcmFjZXModCl9cmV0dXJuIGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Db2xvckJhcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQubGF5b3V0O3JldHVybiB0LmxheW91dD12b2lkIDAsaS5jYWxsKCJfZG9QbG90Iix0LCIiLGUpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGguZHJhdyh0LCJyZWRyYXciKSx0Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJihpLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20udXBkYXRlR3JpZCh0KSxzKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KSksci5kcmF3TWFpblRpdGxlKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb01vZGVCYXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtmLm1hbmFnZSh0KTtmb3IodmFyIHI9MDtyPGUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7cisrKXt2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXNbcl0udXBkYXRlRng7biYmbih0KX1yZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ2FtZXJhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc2NlbmUuc2V0Vmlld3BvcnQoaSl9fSxyLmRyYXdEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7cyh0KTtmb3IodmFyIG49ZS5fYmFzZVBsb3RNb2R1bGVzLG89MDtvPG4ubGVuZ3RoO28rKyluW29dLnBsb3QodCk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyh0KSxhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikodCksZS5fcmVwbG90dGluZz0hMSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIucmVkcmF3UmVnbFRyYWNlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKGUuX2hhcygicmVnbCIpKXt2YXIgcixuLGk9dC5fZnVsbERhdGEsYT1bXSxzPVtdO2ZvcihlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmUuX3NwbG9tR3JpZC5kcmF3KCkscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbD1pW3JdOyEwPT09bC52aXNpYmxlJiYwIT09bC5fbGVuZ3RoJiYoInNwbG9tIj09PWwudHlwZT9lLl9zcGxvbVNjZW5lc1tsLnVpZF0uZHJhdygpOiJzY2F0dGVyZ2wiPT09bC50eXBlP28ucHVzaFVuaXF1ZShhLGwueGF4aXMrbC55YXhpcyk6InNjYXR0ZXJwb2xhcmdsIj09PWwudHlwZSYmby5wdXNoVW5pcXVlKHMsbC5zdWJwbG90KSl9Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKykobj1lLl9wbG90c1thW3JdXSkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCk7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKykobj1lW3Nbcl1dLl9zdWJwbG90KS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKX19LHIuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1oLmxpc3QodCwiIiwhMCksbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspaWYoIW5bKGU9cltpXSkuX2lkXSl7bltlLl9pZF09MSxnKHQsZSksdih0LGUpO3ZhciBhPWUuX21hdGNoR3JvdXA7aWYoYSlmb3IodmFyIG8gaW4gYSl7dmFyIHM9aC5nZXRGcm9tSWQodCxvKTt2KHQscyxlLnJhbmdlKSxuW29dPTF9fW0odCl9LHIuZmluYWxEcmF3PWZ1bmN0aW9uKHQpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKSh0KX0sci5kcmF3TWFyZ2luUHVzaGVycz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JiYXIiLCJkcmF3IikodCl9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uL2NvbXBvbmVudHMvbW9kZWJhciI6NDI5LCIuLi9jb21wb25lbnRzL3RpdGxlcyI6NDY0LCIuLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NzEsIi4uL2xpYiI6NTAzLCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjQ4NywiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NTUzLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjU2MiwiLi4vcGxvdHMvcGxvdHMiOjYxOSwiLi4vcmVnaXN0cnkiOjYzOCwiQHBsb3RseS9kMyI6NTh9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT1uLmlzUGxhaW5PYmplY3QsYT10KCIuL3Bsb3Rfc2NoZW1hIiksbz10KCIuLi9wbG90cy9wbG90cyIpLHM9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi9wbG90X3RlbXBsYXRlIiksYz10KCIuL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZztmdW5jdGlvbiB1KHQsZSl7dD1uLmV4dGVuZERlZXAoe30sdCk7dmFyIHIsYSxvPU9iamVjdC5rZXlzKHQpLnNvcnQoKTtmdW5jdGlvbiBzKGUscixuKXtpZihpKHIpJiZpKGUpKXUoZSxyKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocikmJkFycmF5LmlzQXJyYXkoZSkpe3ZhciBvPWwuYXJyYXlUZW1wbGF0ZXIoe190ZW1wbGF0ZTp0fSxuKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdLGM9by5uZXdJdGVtKHMpLl90ZW1wbGF0ZTtjJiZ1KGMscyl9dmFyIGY9by5kZWZhdWx0SXRlbXMoKTtmb3IoYT0wO2E8Zi5sZW5ndGg7YSsrKXIucHVzaChmW2FdLl90ZW1wbGF0ZSk7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKylkZWxldGUgclthXS50ZW1wbGF0ZWl0ZW1uYW1lfX1mb3Iocj0wO3I8by5sZW5ndGg7cisrKXt2YXIgYz1vW3JdLGg9dFtjXTtpZihjIGluIGU/cyhoLGVbY10sYyk6ZVtjXT1oLGYoYyk9PT1jKWZvcih2YXIgcCBpbiBlKXt2YXIgZD1mKHApO3A9PT1kfHxkIT09Y3x8cCBpbiB0fHxzKGgsZVtwXSxjKX19fWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0rJC8sIiIpfWZ1bmN0aW9uIGgodCxlLHIsYSxvKXt2YXIgcz1vJiZyKG8pO2Zvcih2YXIgYyBpbiB0KXt2YXIgdT10W2NdLHA9bSh0LGMsYSksZD1tKHQsYyxvKSxnPXIoZCk7aWYoIWcpe3ZhciB2PWYoYyk7diE9PWMmJihnPXIoZD1tKHQsdixvKSkpfWlmKCghc3x8cyE9PWcpJiYhKCFnfHxnLl9ub1RlbXBsYXRpbmd8fCJkYXRhX2FycmF5Ij09PWcudmFsVHlwZXx8Zy5hcnJheU9rJiZBcnJheS5pc0FycmF5KHUpKSlpZighZy52YWxUeXBlJiZpKHUpKWgodSxlLHIscCxkKTtlbHNlIGlmKGcuX2lzTGlua2VkVG9BcnJheSYmQXJyYXkuaXNBcnJheSh1KSlmb3IodmFyIHk9ITEseD0wLGI9e30sXz0wO188dS5sZW5ndGg7XysrKXt2YXIgdz11W19dO2lmKGkodykpe3ZhciBUPXcubmFtZTtpZihUKWJbVF18fChoKHcsZSxyLG0odSx4LHApLG0odSx4LGQpKSx4KyssYltUXT0xKTtlbHNlIGlmKCF5KXt2YXIgaz1tKHQsbC5hcnJheURlZmF1bHRLZXkoYyksYSksQT1tKHUseCxwKTtoKHcsZSxyLEEsbSh1LHgsZCkpO3ZhciBNPW4ubmVzdGVkUHJvcGVydHkoZSxBKTtuLm5lc3RlZFByb3BlcnR5KGUsaykuc2V0KE0uZ2V0KCkpLE0uc2V0KG51bGwpLHk9ITB9fX1lbHNle24ubmVzdGVkUHJvcGVydHkoZSxwKS5zZXQodSl9fX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIGEuZ2V0TGF5b3V0VmFsT2JqZWN0KHQsbi5uZXN0ZWRQcm9wZXJ0eSh7fSxlKS5wYXJ0cyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBhLmdldFRyYWNlVmFsT2JqZWN0KHQsbi5uZXN0ZWRQcm9wZXJ0eSh7fSxlKS5wYXJ0cyl9ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI/QXJyYXkuaXNBcnJheSh0KT9yKyJbIitlKyJdIjpyKyIuIitlOmV9ZnVuY3Rpb24gZyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihpKHRbZV0pKXJldHVybiEwfWZ1bmN0aW9uIHYodCl7dmFyIGU7c3dpdGNoKHQuY29kZSl7Y2FzZSJkYXRhIjplPSJUaGUgdGVtcGxhdGUgaGFzIG5vIGtleSBkYXRhLiI7YnJlYWs7Y2FzZSJsYXlvdXQiOmU9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGxheW91dC4iO2JyZWFrO2Nhc2UibWlzc2luZyI6ZT10LnBhdGg/IlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIGl0ZW0gIit0LnBhdGgrIiB3aXRoIG5hbWUgIit0LnRlbXBsYXRlaXRlbW5hbWU6IlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIHRyYWNlICIrdC5pbmRleCsiLCBvZiB0eXBlICIrdC50cmFjZVR5cGUrIi4iO2JyZWFrO2Nhc2UidW51c2VkIjplPXQucGF0aD8iVGhlIHRlbXBsYXRlIGl0ZW0gYXQgIit0LnBhdGgrIiB3YXMgbm90IHVzZWQgaW4gY29uc3RydWN0aW5nIHRoZSBwbG90LiI6dC5kYXRhQ291bnQ/IlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiB3ZXJlIG5vdCB1c2VkLiBUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzLCB0aGUgZGF0YSBvbmx5IGhhcyAiK3QuZGF0YUNvdW50KyIgb2YgdGhpcyB0eXBlLiI6IlRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgYnV0IHRoZXJlIGFyZSBub25lIGluIHRoZSBkYXRhLiI7YnJlYWs7Y2FzZSJyZXVzZWQiOmU9IlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiB3ZXJlIHVzZWQgbW9yZSB0aGFuIG9uY2UuIFRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIGhhcyAiK3QuZGF0YUNvdW50KyIgb2YgdGhpcyB0eXBlLiJ9cmV0dXJuIHQubXNnPWUsdH1yLm1ha2VUZW1wbGF0ZT1mdW5jdGlvbih0KXt0PW4uaXNQbGFpbk9iamVjdCh0KT90Om4uZ2V0R3JhcGhEaXYodCksdD1uLmV4dGVuZERlZXAoe19jb250ZXh0OmN9LHtkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9KSxvLnN1cHBseURlZmF1bHRzKHQpO3ZhciBlPXQuZGF0YXx8W10scj10LmxheW91dHx8e307ci5fYmFzZVBsb3RNb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxyLl9tb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX21vZHVsZXM7dmFyIGE9e2RhdGE6e30sbGF5b3V0Ont9fTtlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2godCxlLGQuYmluZChudWxsLHQpKTt2YXIgcj1uLmNvZXJjZSh0LHt9LHMsInR5cGUiKSxpPWEuZGF0YVtyXTtpfHwoaT1hLmRhdGFbcl09W10pLGkucHVzaChlKX0pKSxoKHIsYS5sYXlvdXQscC5iaW5kKG51bGwscikpLGRlbGV0ZSBhLmxheW91dC50ZW1wbGF0ZTt2YXIgbD1yLnRlbXBsYXRlO2lmKGkobCkpe3ZhciBmLG0sZyx2LHkseCxiPWwubGF5b3V0O2koYikmJnUoYixhLmxheW91dCk7dmFyIF89bC5kYXRhO2lmKGkoXykpe2ZvcihtIGluIGEuZGF0YSlpZihnPV9bbV0sQXJyYXkuaXNBcnJheShnKSl7Zm9yKHg9KHk9YS5kYXRhW21dKS5sZW5ndGgsdj1nLmxlbmd0aCxmPTA7Zjx4O2YrKyl1KGdbZiV2XSx5W2ZdKTtmb3IoZj14O2Y8djtmKyspeS5wdXNoKG4uZXh0ZW5kRGVlcCh7fSxnW2ZdKSl9Zm9yKG0gaW4gXyltIGluIGEuZGF0YXx8KGEuZGF0YVttXT1uLmV4dGVuZERlZXAoW10sX1ttXSkpfX1yZXR1cm4gYX0sci52YWxpZGF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5leHRlbmREZWVwKHt9LHtfY29udGV4dDpjLGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLGE9ci5sYXlvdXR8fHt9O2koZSl8fChlPWEudGVtcGxhdGV8fHt9KTt2YXIgcz1lLmxheW91dCxsPWUuZGF0YSx1PVtdO3IubGF5b3V0PWEsci5sYXlvdXQudGVtcGxhdGU9ZSxvLnN1cHBseURlZmF1bHRzKHIpO3ZhciBoPXIuX2Z1bGxMYXlvdXQscD1yLl9mdWxsRGF0YSxkPXt9O2lmKGkocyk/KCFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkmJmkoZVtuXSkpe3ZhciBhLG89ZihuKSxzPVtdO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspcy5wdXNoKG0oZSxuLHJbYV0pKSxvIT09biYmcy5wdXNoKG0oZSxvLHJbYV0pKTtmb3IoYT0wO2E8cy5sZW5ndGg7YSsrKWRbc1thXV09MTt0KGVbbl0scyl9fShoLFsibGF5b3V0Il0pLGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigtMT09PW4uaW5kZXhPZigiZGVmYXVsdHMiKSYmaShlW25dKSl7dmFyIGE9bShlLG4scik7ZFthXT90KGVbbl0sYSk6dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHBhdGg6YX0pfX0ocywibGF5b3V0IikpOnUucHVzaCh7Y29kZToibGF5b3V0In0pLGkobCkpe2Zvcih2YXIgeSx4PXt9LGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIF89cFtiXTt4W3k9Xy50eXBlXT0oeFt5XXx8MCkrMSxfLl9mdWxsSW5wdXQuX3RlbXBsYXRlfHx1LnB1c2goe2NvZGU6Im1pc3NpbmciLGluZGV4Ol8uX2Z1bGxJbnB1dC5pbmRleCx0cmFjZVR5cGU6eX0pfWZvcih5IGluIGwpe3ZhciB3PWxbeV0ubGVuZ3RoLFQ9eFt5XXx8MDt3PlQ/dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6VH0pOlQ+dyYmdS5wdXNoKHtjb2RlOiJyZXVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6VH0pfX1lbHNlIHUucHVzaCh7Y29kZToiZGF0YSJ9KTtpZihmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkpe3ZhciBhPWVbbl0sbz1tKGUsbixyKTtpKGEpPyhBcnJheS5pc0FycmF5KGUpJiYhMT09PWEuX3RlbXBsYXRlJiZhLnRlbXBsYXRlaXRlbW5hbWUmJnUucHVzaCh7Y29kZToibWlzc2luZyIscGF0aDpvLHRlbXBsYXRlaXRlbW5hbWU6YS50ZW1wbGF0ZWl0ZW1uYW1lfSksdChhLG8pKTpBcnJheS5pc0FycmF5KGEpJiZnKGEpJiZ0KGEsbyl9fSh7ZGF0YTpwLGxheW91dDpofSwiIiksdS5sZW5ndGgpcmV0dXJuIHUubWFwKHYpfX0seyIuLi9saWIiOjUwMywiLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi9wbG90cy9wbG90cyI6NjE5LCIuL3Bsb3RfY29uZmlnIjo1NDEsIi4vcGxvdF9zY2hlbWEiOjU0MiwiLi9wbG90X3RlbXBsYXRlIjo1NDN9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vcGxvdF9hcGkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL3NuYXBzaG90L2hlbHBlcnMiKSxsPXQoIi4uL3NuYXBzaG90L3Rvc3ZnIiksYz10KCIuLi9zbmFwc2hvdC9zdmd0b2ltZyIpLHU9dCgiLi4vdmVyc2lvbiIpLnZlcnNpb24sZj17Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwbmciLCJqcGVnIiwid2VicCIsInN2ZyIsImZ1bGwtanNvbiJdLGRmbHQ6InBuZyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxfSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZToiYW55IixkZmx0OiExfSxpbWFnZURhdGFPbmx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaCxwLGQ7ZnVuY3Rpb24gbSh0KXtyZXR1cm4hKHQgaW4gZSl8fG8udmFsaWRhdGUoZVt0XSxmW3RdKX1pZihlPWV8fHt9LG8uaXNQbGFpbk9iamVjdCh0KT8ocj10LmRhdGF8fFtdLGg9dC5sYXlvdXR8fHt9LHA9dC5jb25maWd8fHt9LGQ9e30pOih0PW8uZ2V0R3JhcGhEaXYodCkscj1vLmV4dGVuZERlZXAoW10sdC5kYXRhKSxoPW8uZXh0ZW5kRGVlcCh7fSx0LmxheW91dCkscD10Ll9jb250ZXh0LGQ9dC5fZnVsbExheW91dHx8e30pLCFtKCJ3aWR0aCIpJiZudWxsIT09ZS53aWR0aHx8IW0oImhlaWdodCIpJiZudWxsIT09ZS5oZWlnaHQpdGhyb3cgbmV3IEVycm9yKCJIZWlnaHQgYW5kIHdpZHRoIHNob3VsZCBiZSBwaXhlbCB2YWx1ZXMuIik7aWYoIW0oImZvcm1hdCIpKXRocm93IG5ldyBFcnJvcigiRXhwb3J0IGZvcm1hdCBpcyBub3QgIitvLmpvaW4yKGYuZm9ybWF0LnZhbHVlcywiLCAiLCIgb3IgIikrIi4iKTt2YXIgZz17fTtmdW5jdGlvbiB2KHQscil7cmV0dXJuIG8uY29lcmNlKGUsZyxmLHQscil9dmFyIHk9digiZm9ybWF0IikseD12KCJ3aWR0aCIpLGI9digiaGVpZ2h0IiksXz12KCJzY2FsZSIpLHc9digic2V0QmFja2dyb3VuZCIpLFQ9digiaW1hZ2VEYXRhT25seSIpLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ay5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGsuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChrKTt2YXIgQT1vLmV4dGVuZEZsYXQoe30saCk7eD9BLndpZHRoPXg6bnVsbD09PWUud2lkdGgmJm4oZC53aWR0aCkmJihBLndpZHRoPWQud2lkdGgpLGI/QS5oZWlnaHQ9YjpudWxsPT09ZS5oZWlnaHQmJm4oZC5oZWlnaHQpJiYoQS5oZWlnaHQ9ZC5oZWlnaHQpO3ZhciBNPW8uZXh0ZW5kRmxhdCh7fSxwLHtfZXhwb3J0ZWRQbG90OiEwLHN0YXRpY1Bsb3Q6ITAsc2V0QmFja2dyb3VuZDp3fSksUz1zLmdldFJlZHJhd0Z1bmMoayk7ZnVuY3Rpb24gRSgpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LHMuZ2V0RGVsYXkoay5fZnVsbExheW91dCkpfSkpfWZ1bmN0aW9uIEwoKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bChrLHksXyksbj1rLl9mdWxsTGF5b3V0LndpZHRoLGY9ay5fZnVsbExheW91dC5oZWlnaHQ7ZnVuY3Rpb24gaCgpe2kucHVyZ2UoayksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChrKX1pZigiZnVsbC1qc29uIj09PXkpe3ZhciBwPWEuZ3JhcGhKc29uKGssITEsImtlZXBkYXRhIiwib2JqZWN0IiwhMCwhMCk7cmV0dXJuIHAudmVyc2lvbj11LHA9SlNPTi5zdHJpbmdpZnkocCksaCgpLHQoVD9wOnMuZW5jb2RlSlNPTihwKSl9aWYoaCgpLCJzdmciPT09eSlyZXR1cm4gdChUP3I6cy5lbmNvZGVTVkcocikpO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2QuaWQ9by5yYW5kc3RyKCksYyh7Zm9ybWF0Onksd2lkdGg6bixoZWlnaHQ6ZixzY2FsZTpfLGNhbnZhczpkLHN2ZzpyLHByb21pc2U6ITB9KS50aGVuKHQpLmNhdGNoKGUpfSkpfXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxlKXtpLm5ld1Bsb3QoayxyLEEsTSkudGhlbihTKS50aGVuKEUpLnRoZW4oTCkudGhlbigoZnVuY3Rpb24oZSl7dChmdW5jdGlvbih0KXtyZXR1cm4gVD90LnJlcGxhY2Uocy5JTUFHRV9VUkxfUFJFRklYLCIiKTp0fShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe2UodCl9KSl9KSl9fSx7Ii4uL2xpYiI6NTAzLCIuLi9wbG90cy9wbG90cyI6NjE5LCIuLi9zbmFwc2hvdC9oZWxwZXJzIjo2NDIsIi4uL3NuYXBzaG90L3N2Z3RvaW1nIjo2NDQsIi4uL3NuYXBzaG90L3Rvc3ZnIjo2NDYsIi4uL3ZlcnNpb24iOjExMTksIi4vcGxvdF9hcGkiOjU0MCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDU0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuL3Bsb3Rfc2NoZW1hIiksbz10KCIuL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxzPW4uaXNQbGFpbk9iamVjdCxsPUFycmF5LmlzQXJyYXksYz1uLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gdSh0LGUscixpLGEsbyl7bz1vfHxbXTtmb3IodmFyIGY9T2JqZWN0LmtleXModCksaD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdO2lmKCJ0cmFuc2Zvcm1zIiE9PXApe3ZhciB2PW8uc2xpY2UoKTt2LnB1c2gocCk7dmFyIHk9dFtwXSx4PWVbcF0sYj1nKHIscCksXz0oYnx8e30pLnZhbFR5cGUsdz0iaW5mb19hcnJheSI9PT1fLFQ9ImNvbG9yc2NhbGUiPT09XyxrPShifHx7fSkuaXRlbXM7aWYobShyLHApKWlmKHMoeSkmJnMoeCkmJiJhbnkiIT09Xyl1KHkseCxiLGksYSx2KTtlbHNlIGlmKHcmJmwoeSkpe3kubGVuZ3RoPngubGVuZ3RoJiZpLnB1c2goZCgidW51c2VkIixhLHYuY29uY2F0KHgubGVuZ3RoKSkpO3ZhciBBLE0sUyxFLEwsQz14Lmxlbmd0aCxQPUFycmF5LmlzQXJyYXkoayk7aWYoUCYmKEM9TWF0aC5taW4oQyxrLmxlbmd0aCkpLDI9PT1iLmRpbWVuc2lvbnMpZm9yKE09MDtNPEM7TSsrKWlmKGwoeVtNXSkpe3lbTV0ubGVuZ3RoPnhbTV0ubGVuZ3RoJiZpLnB1c2goZCgidW51c2VkIixhLHYuY29uY2F0KE0seFtNXS5sZW5ndGgpKSk7dmFyIEk9eFtNXS5sZW5ndGg7Zm9yKEE9MDtBPChQP01hdGgubWluKEksa1tNXS5sZW5ndGgpOkkpO0ErKylTPVA/a1tNXVtBXTprLEU9eVtNXVtBXSxMPXhbTV1bQV0sbi52YWxpZGF0ZShFLFMpP0whPT1FJiZMIT09K0UmJmkucHVzaChkKCJkeW5hbWljIixhLHYuY29uY2F0KE0sQSksRSxMKSk6aS5wdXNoKGQoInZhbHVlIixhLHYuY29uY2F0KE0sQSksRSkpfWVsc2UgaS5wdXNoKGQoImFycmF5IixhLHYuY29uY2F0KE0pLHlbTV0pKTtlbHNlIGZvcihNPTA7TTxDO00rKylTPVA/a1tNXTprLEU9eVtNXSxMPXhbTV0sbi52YWxpZGF0ZShFLFMpP0whPT1FJiZMIT09K0UmJmkucHVzaChkKCJkeW5hbWljIixhLHYuY29uY2F0KE0pLEUsTCkpOmkucHVzaChkKCJ2YWx1ZSIsYSx2LmNvbmNhdChNKSxFKSl9ZWxzZSBpZihiLml0ZW1zJiYhdyYmbCh5KSl7dmFyIE8seixEPWtbT2JqZWN0LmtleXMoaylbMF1dLFI9W107Zm9yKE89MDtPPHgubGVuZ3RoO08rKyl7dmFyIEY9eFtPXS5faW5kZXh8fE87aWYoKHo9di5zbGljZSgpKS5wdXNoKEYpLHMoeVtGXSkmJnMoeFtPXSkpe1IucHVzaChGKTt2YXIgQj15W0ZdLE49eFtPXTtzKEIpJiYhMSE9PUIudmlzaWJsZSYmITE9PT1OLnZpc2libGU/aS5wdXNoKGQoImludmlzaWJsZSIsYSx6KSk6dShCLE4sRCxpLGEseil9fWZvcihPPTA7Tzx5Lmxlbmd0aDtPKyspKHo9di5zbGljZSgpKS5wdXNoKE8pLHMoeVtPXSk/LTE9PT1SLmluZGV4T2YoTykmJmkucHVzaChkKCJ1bnVzZWQiLGEseikpOmkucHVzaChkKCJvYmplY3QiLGEseix5W09dKSl9ZWxzZSFzKHkpJiZzKHgpP2kucHVzaChkKCJvYmplY3QiLGEsdix5KSk6Yyh5KXx8IWMoeCl8fHd8fFQ/cCBpbiBlP24udmFsaWRhdGUoeSxiKT8iZW51bWVyYXRlZCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmeSE9PSt4fHx5IT09eCkmJmkucHVzaChkKCJkeW5hbWljIixhLHYseSx4KSk6aS5wdXNoKGQoInZhbHVlIixhLHYseSkpOmkucHVzaChkKCJ1bnVzZWQiLGEsdix5KSk6aS5wdXNoKGQoImFycmF5IixhLHYseSkpO2Vsc2UgaS5wdXNoKGQoInNjaGVtYSIsYSx2KSl9fXJldHVybiBpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9dC5sYXlvdXQubGF5b3V0QXR0cmlidXRlcyxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz10LnRyYWNlc1thLnR5cGVdLHM9by5sYXlvdXRBdHRyaWJ1dGVzO3MmJihhLnN1YnBsb3Q/bi5leHRlbmRGbGF0KHJbby5hdHRyaWJ1dGVzLnN1YnBsb3QuZGZsdF0scyk6bi5leHRlbmRGbGF0KHIscykpfXJldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1lJiYoZT17fSk7dmFyIHIsYyxoPWEuZ2V0KCkscD1bXSxtPXtfY29udGV4dDpuLmV4dGVuZEZsYXQoe30sbyl9O2wodCk/KG0uZGF0YT1uLmV4dGVuZERlZXAoW10sdCkscj10KToobS5kYXRhPVtdLHI9W10scC5wdXNoKGQoImFycmF5IiwiZGF0YSIpKSkscyhlKT8obS5sYXlvdXQ9bi5leHRlbmREZWVwKHt9LGUpLGM9ZSk6KG0ubGF5b3V0PXt9LGM9e30sYXJndW1lbnRzLmxlbmd0aD4xJiZwLnB1c2goZCgib2JqZWN0IiwibGF5b3V0IikpKSxpLnN1cHBseURlZmF1bHRzKG0pO2Zvcih2YXIgZz1tLl9mdWxsRGF0YSx2PXIubGVuZ3RoLHk9MDt5PHY7eSsrKXt2YXIgeD1yW3ldLGI9WyJkYXRhIix5XTtpZihzKHgpKXt2YXIgXz1nW3ldLHc9Xy50eXBlLFQ9aC50cmFjZXNbd10uYXR0cmlidXRlcztULnR5cGU9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbd119LCExPT09Xy52aXNpYmxlJiYhMSE9PXgudmlzaWJsZSYmcC5wdXNoKGQoImludmlzaWJsZSIsYikpLHUoeCxfLFQscCxiKTt2YXIgaz14LnRyYW5zZm9ybXMsQT1fLnRyYW5zZm9ybXM7aWYoayl7bChrKXx8cC5wdXNoKGQoImFycmF5IixiLFsidHJhbnNmb3JtcyJdKSksYi5wdXNoKCJ0cmFuc2Zvcm1zIik7Zm9yKHZhciBNPTA7TTxrLmxlbmd0aDtNKyspe3ZhciBTPVsidHJhbnNmb3JtcyIsTV0sRT1rW01dLnR5cGU7aWYocyhrW01dKSl7dmFyIEw9aC50cmFuc2Zvcm1zW0VdP2gudHJhbnNmb3Jtc1tFXS5hdHRyaWJ1dGVzOnt9O0wudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGgudHJhbnNmb3Jtcyl9LHUoa1tNXSxBW01dLEwscCxiLFMpfWVsc2UgcC5wdXNoKGQoIm9iamVjdCIsYixTKSl9fX1lbHNlIHAucHVzaChkKCJvYmplY3QiLGIpKX12YXIgQz1tLl9mdWxsTGF5b3V0LFA9ZihoLGcpO3JldHVybiB1KGMsQyxQLHAsImxheW91dCIpLDA9PT1wLmxlbmd0aD92b2lkIDA6cH07dmFyIGg9e29iamVjdDpmdW5jdGlvbih0LGUpe3JldHVybigibGF5b3V0Ij09PXQmJiIiPT09ZT8iVGhlIGxheW91dCBhcmd1bWVudCI6ImRhdGEiPT09dFswXSYmIiI9PT1lPyJUcmFjZSAiK3RbMV0rIiBpbiB0aGUgZGF0YSBhcmd1bWVudCI6cCh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBvYmplY3QgY29udGFpbmVyIn0sYXJyYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4oImRhdGEiPT09dD8iVGhlIGRhdGEgYXJndW1lbnQiOnAodCkrImtleSAiK2UpKyIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gYXJyYXkgY29udGFpbmVyIn0sc2NoZW1hOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHAodCkrImtleSAiK2UrIiBpcyBub3QgcGFydCBvZiB0aGUgc2NoZW1hIn0sdW51c2VkOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zKHIpPyJjb250YWluZXIiOiJrZXkiO3JldHVybiBwKHQpK24rIiAiK2UrIiBkaWQgbm90IGdldCBjb2VyY2VkIn0sZHluYW1pYzpmdW5jdGlvbih0LGUscixuKXtyZXR1cm5bcCh0KSsia2V5IixlLCIoc2V0IHRvICciK3IrIicpIiwiZ290IHJlc2V0IHRvIiwiJyIrbisiJyIsImR1cmluZyBkZWZhdWx0cy4iXS5qb2luKCIgIil9LGludmlzaWJsZTpmdW5jdGlvbih0LGUpe3JldHVybihlP3AodCkrIml0ZW0gIitlOiJUcmFjZSAiK3RbMV0pKyIgZ290IGRlZmF1bHRlZCB0byBiZSBub3QgdmlzaWJsZSJ9LHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bcCh0KSsia2V5ICIrZSwiaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUgKCIrcisiKSJdLmpvaW4oIiAiKX19O2Z1bmN0aW9uIHAodCl7cmV0dXJuIGwodCk/IkluIGRhdGEgdHJhY2UgIit0WzFdKyIsICI6IkluICIrdCsiLCAifWZ1bmN0aW9uIGQodCxlLHIsaSxhKXt2YXIgbyxzO3I9cnx8IiIsbChlKT8obz1lWzBdLHM9ZVsxXSk6KG89ZSxzPW51bGwpO3ZhciBjPWZ1bmN0aW9uKHQpe2lmKCFsKHQpKXJldHVybiBTdHJpbmcodCk7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTsibnVtYmVyIj09dHlwZW9mIG4/ZT1lLnN1YnN0cigwLGUubGVuZ3RoLTEpKyJbIituKyJdIjplKz1uLHI8dC5sZW5ndGgtMSYmKGUrPSIuIil9cmV0dXJuIGV9KHIpLHU9aFt0XShlLGMsaSxhKTtyZXR1cm4gbi5sb2codSkse2NvZGU6dCxjb250YWluZXI6byx0cmFjZTpzLHBhdGg6cixhc3RyOmMsbXNnOnV9fWZ1bmN0aW9uIG0odCxlKXt2YXIgcj15KGUpLG49ci5rZXlNaW51c0lkLGk9ci5pZDtyZXR1cm4hIShuIGluIHQmJnRbbl0uX2lzU3VicGxvdE9iaiYmaSl8fGUgaW4gdH1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGUgaW4gdD90W2VdOnRbeShlKS5rZXlNaW51c0lkXX12YXIgdj1uLmNvdW50ZXJSZWdleCgiKFthLXpdKykiKTtmdW5jdGlvbiB5KHQpe3ZhciBlPXQubWF0Y2godik7cmV0dXJue2tleU1pbnVzSWQ6ZSYmZVsxXSxpZDplJiZlWzJdfX19LHsiLi4vbGliIjo1MDMsIi4uL3Bsb3RzL3Bsb3RzIjo2MTksIi4vcGxvdF9jb25maWciOjU0MSwiLi9wbG90X3NjaGVtYSI6NTQyfV0sNTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiYWZ0ZXJhbGwiLHZhbHVlczpbImltbWVkaWF0ZSIsIm5leHQiLCJhZnRlcmFsbCJdfSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJyZXZlcnNlIl0sZGZsdDoiZm9yd2FyZCJ9LGZyb21jdXJyZW50Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmcmFtZTp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDB9LHJlZHJhdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NTAwLGVkaXRUeXBlOiJub25lIn0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjdWJpYy1pbi1vdXQiLHZhbHVlczpbImxpbmVhciIsInF1YWQiLCJjdWJpYyIsInNpbiIsImV4cCIsImNpcmNsZSIsImVsYXN0aWMiLCJiYWNrIiwiYm91bmNlIiwibGluZWFyLWluIiwicXVhZC1pbiIsImN1YmljLWluIiwic2luLWluIiwiZXhwLWluIiwiY2lyY2xlLWluIiwiZWxhc3RpYy1pbiIsImJhY2staW4iLCJib3VuY2UtaW4iLCJsaW5lYXItb3V0IiwicXVhZC1vdXQiLCJjdWJpYy1vdXQiLCJzaW4tb3V0IiwiZXhwLW91dCIsImNpcmNsZS1vdXQiLCJlbGFzdGljLW91dCIsImJhY2stb3V0IiwiYm91bmNlLW91dCIsImxpbmVhci1pbi1vdXQiLCJxdWFkLWluLW91dCIsImN1YmljLWluLW91dCIsInNpbi1pbi1vdXQiLCJleHAtaW4tb3V0IiwiY2lyY2xlLWluLW91dCIsImVsYXN0aWMtaW4tb3V0IiwiYmFjay1pbi1vdXQiLCJib3VuY2UtaW4tb3V0Il0sZWRpdFR5cGU6Im5vbmUifSxvcmRlcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGF5b3V0IGZpcnN0IiwidHJhY2VzIGZpcnN0Il0sZGZsdDoibGF5b3V0IGZpcnN0IixlZGl0VHlwZToibm9uZSJ9fX19LHt9XSw1NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHM9ci5uYW1lLGw9ci5pbmNsdXNpb25BdHRyfHwidmlzaWJsZSIsYz1lW3NdLHU9bi5pc0FycmF5T3JUeXBlZEFycmF5KHRbc10pP3Rbc106W10sZj1lW3NdPVtdLGg9aS5hcnJheVRlbXBsYXRlcihlLHMsbCk7Zm9yKGE9MDthPHUubGVuZ3RoO2ErKyl7dmFyIHA9dVthXTtuLmlzUGxhaW5PYmplY3QocCk/bz1oLm5ld0l0ZW0ocCk6KG89aC5uZXdJdGVtKHt9KSlbbF09ITEsby5faW5kZXg9YSwhMSE9PW9bbF0mJnIuaGFuZGxlSXRlbURlZmF1bHRzKHAsbyxlLHIpLGYucHVzaChvKX12YXIgZD1oLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxkLmxlbmd0aDthKyspKG89ZFthXSkuX2luZGV4PWYubGVuZ3RoLHIuaGFuZGxlSXRlbURlZmF1bHRzKHt9LG8sZSxyLHt9KSxmLnB1c2gobyk7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KGMpKXt2YXIgbT1NYXRoLm1pbihjLmxlbmd0aCxmLmxlbmd0aCk7Zm9yKGE9MDthPG07YSsrKW4ucmVsaW5rUHJpdmF0ZUtleXMoZlthXSxjW2FdKX1yZXR1cm4gZn19LHsiLi4vbGliIjo1MDMsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0M31dLDU1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10sZGZsdDoic2NhdHRlciIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLF9ub1RlbXBsYXRpbmc6ITB9LHZpc2libGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsImxlZ2VuZG9ubHkiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToic3R5bGUifSxsZWdlbmRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZGdyb3VwdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToic3R5bGUifSxmb250Om4oe2VkaXRUeXBlOiJzdHlsZSJ9KSxlZGl0VHlwZToic3R5bGUifSxsZWdlbmRyYW5rOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MWUzLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InN0eWxlIn0sdWlkOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90IixhbmltOiEwfSxpZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHNlbGVjdGVkcG9pbnRzOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ0ZXh0IiwibmFtZSJdLGV4dHJhczpbImFsbCIsIm5vbmUiLCJza2lwIl0sYXJyYXlPazohMCxkZmx0OiJhbGwiLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDppLmhvdmVybGFiZWwsc3RyZWFtOnt0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZToiY2FsYyJ9LG1heHBvaW50czp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MWU0LGRmbHQ6NTAwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOntfaXNMaW5rZWRUb0FycmF5OiJ0cmFuc2Zvcm0iLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fX0seyIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjM5NywiLi9mb250X2F0dHJpYnV0ZXMiOjU4NX1dLDU1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLmRhdGVUaW1lMm1zLG89aS5pbmNyZW1lbnRNb250aCxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVBVkdNT05USDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aWYoImRhdGUiIT09ZS50eXBlKXJldHVybnt2YWxzOml9O3ZhciBsPXRbcisicGVyaW9kYWxpZ25tZW50Il07aWYoIWwpcmV0dXJue3ZhbHM6aX07dmFyIGMsdT10W3IrInBlcmlvZCJdO2lmKG4odSkpe2lmKCh1PSt1KTw9MClyZXR1cm57dmFsczppfX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdSYmIk0iPT09dS5jaGFyQXQoMCkpe3ZhciBmPSt1LnN1YnN0cmluZygxKTtpZighKGY+MCYmTWF0aC5yb3VuZChmKT09PWYpKXJldHVybnt2YWxzOml9O2M9Zn1mb3IodmFyIGg9ZS5jYWxlbmRhcixwPSJzdGFydCI9PT1sLGQ9ImVuZCI9PT1sLG09dFtyKyJwZXJpb2QwIl0sZz1hKG0saCl8fDAsdj1bXSx5PVtdLHg9W10sYj1pLmxlbmd0aCxfPTA7XzxiO18rKyl7dmFyIHcsVCxrLEE9aVtfXTtpZihjKXtmb3Iodz1NYXRoLnJvdW5kKChBLWcpLyhjKnMpKSxrPW8oZyxjKncsaCk7az5BOylrPW8oaywtYyxoKTtmb3IoO2s8PUE7KWs9byhrLGMsaCk7VD1vKGssLWMsaCl9ZWxzZXtmb3Ioaz1nKyh3PU1hdGgucm91bmQoKEEtZykvdSkpKnU7az5BOylrLT11O2Zvcig7azw9QTspays9dTtUPWstdX12W19dPXA/VDpkP2s6KFQraykvMix5W19dPVQseFtfXT1rfXJldHVybnt2YWxzOnYsc3RhcnRzOnksZW5kczp4fX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiZmFzdC1pc251bWVyaWMiOjE5MH1dLDU1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3hheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seWF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkZQX1NBRkUscz10KCIuLi8uLi9yZWdpc3RyeSIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL2F4aXNfaWRzIiksdT1jLmdldEZyb21JZCxmPWMuaXNMaW5rZWQ7ZnVuY3Rpb24gaCh0LGUpe3ZhciByLG4saT1bXSxvPXQuX2Z1bGxMYXlvdXQscz1kKG8sZSwwKSxsPWQobyxlLDEpLGM9bSh0LGUpLHU9Yy5taW4sZj1jLm1heDtpZigwPT09dS5sZW5ndGh8fDA9PT1mLmxlbmd0aClyZXR1cm4gYS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7dmFyIGg9dVswXS52YWwsZz1mWzBdLnZhbDtmb3Iocj0xO3I8dS5sZW5ndGgmJmg9PT1nO3IrKyloPU1hdGgubWluKGgsdVtyXS52YWwpO2ZvcihyPTE7cjxmLmxlbmd0aCYmaD09PWc7cisrKWc9TWF0aC5tYXgoZyxmW3JdLnZhbCk7dmFyIHY9ITE7aWYoZS5yYW5nZSl7dmFyIHk9YS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7dj15WzFdPHlbMF19InJldmVyc2VkIj09PWUuYXV0b3JhbmdlJiYodj0hMCxlLmF1dG9yYW5nZT0hMCk7dmFyIHgsYixfLHcsVCxrLEE9ZS5yYW5nZW1vZGUsTT0idG96ZXJvIj09PUEsUz0ibm9ubmVnYXRpdmUiPT09QSxFPWUuX2xlbmd0aCxMPUUvMTAsQz0wO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspZm9yKHg9dVtyXSxuPTA7bjxmLmxlbmd0aDtuKyspKGs9KGI9ZltuXSkudmFsLXgudmFsLXAoZSx4LnZhbCxiLnZhbCkpPjAmJigoVD1FLXMoeCktbChiKSk+TD9rL1Q+QyYmKF89eCx3PWIsQz1rL1QpOmsvRT5DJiYoXz17dmFsOngudmFsLG5vcGFkOjF9LHc9e3ZhbDpiLnZhbCxub3BhZDoxfSxDPWsvRSkpO2lmKGg9PT1nKXt2YXIgUD1oLTEsST1oKzE7aWYoTSlpZigwPT09aClpPVswLDFdO2Vsc2V7dmFyIE89KGg+MD9mOnUpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxsKGUpKX0pLDApLHo9aC8oMS1NYXRoLm1pbiguNSxPL0UpKTtpPWg+MD9bMCx6XTpbeiwwXX1lbHNlIGk9Uz9bTWF0aC5tYXgoMCxQKSxNYXRoLm1heCgxLEkpXTpbUCxJXX1lbHNlIE0/KF8udmFsPj0wJiYoXz17dmFsOjAsbm9wYWQ6MX0pLHcudmFsPD0wJiYodz17dmFsOjAsbm9wYWQ6MX0pKTpTJiYoXy52YWwtQypzKF8pPDAmJihfPXt2YWw6MCxub3BhZDoxfSksdy52YWw8PTAmJih3PXt2YWw6MSxub3BhZDoxfSkpLEM9KHcudmFsLV8udmFsLXAoZSx4LnZhbCxiLnZhbCkpLyhFLXMoXyktbCh3KSksaT1bXy52YWwtQypzKF8pLHcudmFsK0MqbCh3KV07cmV0dXJuIHYmJmkucmV2ZXJzZSgpLGEuc2ltcGxlTWFwKGksZS5sMnJ8fE51bWJlcil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49MDtpZih0LnJhbmdlYnJlYWtzKWZvcih2YXIgaT10LmxvY2F0ZUJyZWFrcyhlLHIpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtuKz1vLm1heC1vLm1pbn1yZXR1cm4gbn1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgaT0uMDUqZS5fbGVuZ3RoLG89ZS5fYW5jaG9yQXhpc3x8e307aWYoLTEhPT0oZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpfHwtMSE9PShvLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikpe3ZhciBzPSJyZXZlcnNlZCI9PT1lLmF1dG9yYW5nZTtpZighcyl7dmFyIGM9YS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7cz1jWzFdPGNbMF19cyYmKHI9IXIpfXZhciB1PTA7cmV0dXJuIGYodCxlLl9pZCl8fCh1PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT0wLG89IngiPT09ZS5faWQuY2hhckF0KDApO2Zvcih2YXIgcyBpbiB0Ll9wbG90cyl7dmFyIGM9dC5fcGxvdHNbc107aWYoZS5faWQ9PT1jLnhheGlzLl9pZHx8ZS5faWQ9PT1jLnlheGlzLl9pZCl7dmFyIHU9KG8/Yy55YXhpczpjLnhheGlzKXx8e307aWYoLTEhPT0odS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpJiYoIXImJigibGVmdCI9PT11LnNpZGV8fCJib3R0b20iPT09dS5zaWRlKXx8ciYmKCJ0b3AiPT09dS5zaWRlfHwicmlnaHQiPT09dS5zaWRlKSkpe2lmKHUuX3ZhbHMpe3ZhciBmPWEuZGVnMnJhZCh1Ll90aWNrQW5nbGVzW3UuX2lkKyJ0aWNrIl18fDApLGg9TWF0aC5hYnMoTWF0aC5jb3MoZikpLHA9TWF0aC5hYnMoTWF0aC5zaW4oZikpO2lmKCF1Ll92YWxzWzBdLmJiKXt2YXIgZD11Ll9pZCsidGljayI7dS5fc2VsZWN0aW9uc1tkXS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtlLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLmVtcHR5KCkmJih0LmJiPWwuYkJveChlLm5vZGUoKSkpfSkpfWZvcih2YXIgbT0wO208dS5fdmFscy5sZW5ndGg7bSsrKXt2YXIgZz11Ll92YWxzW21dLmJiO2lmKGcpe3ZhciB2PTYrZy53aWR0aCx5PTYrZy5oZWlnaHQ7aT1NYXRoLm1heChpLG8/TWF0aC5tYXgodipoLHkqcCk6TWF0aC5tYXgoeSpoLHYqcCkpfX19Imluc2lkZSI9PT11LnRpY2tzJiYiaW5zaWRlIj09PXUudGlja2xhYmVscG9zaXRpb24mJihpKz11LnRpY2tsZW58fDApfX19cmV0dXJuIGl9KHQsZSxyKSksaT1NYXRoLm1heCh1LGkpLCJkb21haW4iPT09ZS5jb25zdHJhaW4mJmUuX2lucHV0RG9tYWluJiYoaSo9KGUuX2lucHV0RG9tYWluWzFdLWUuX2lucHV0RG9tYWluWzBdKS8oZS5kb21haW5bMV0tZS5kb21haW5bMF0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5ub3BhZD8wOnQucGFkKyh0LmV4dHJhcGFkP2k6dSl9fWUuZXhwb3J0cz17Z2V0QXV0b1JhbmdlOmgsbWFrZVBhZEZuOmQsZG9BdXRvUmFuZ2U6ZnVuY3Rpb24odCxlLHIpe2lmKGUuc2V0U2NhbGUoKSxlLmF1dG9yYW5nZSl7ZS5yYW5nZT1yP3Iuc2xpY2UoKTpoKHQsZSksZS5fcj1lLnJhbmdlLnNsaWNlKCksZS5fcmw9YS5zaW1wbGVNYXAoZS5fcixlLnIybCk7dmFyIG49ZS5faW5wdXQsaT17fTtpW2UuX2F0dHIrIi5yYW5nZSJdPWUucmFuZ2UsaVtlLl9hdHRyKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2Uscy5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSksbi5yYW5nZT1lLnJhbmdlLnNsaWNlKCksbi5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2V9dmFyIG89ZS5fYW5jaG9yQXhpcztpZihvJiZvLnJhbmdlc2xpZGVyKXt2YXIgbD1vLnJhbmdlc2xpZGVyW2UuX25hbWVdO2wmJiJhdXRvIj09PWwucmFuZ2Vtb2RlJiYobC5yYW5nZT1oKHQsZSkpLG8uX2lucHV0LnJhbmdlc2xpZGVyW2UuX25hbWVdPWEuZXh0ZW5kRmxhdCh7fSxsKX19LGZpbmRFeHRyZW1lczpmdW5jdGlvbih0LGUscil7cnx8KHI9e30pO3QuX218fHQuc2V0U2NhbGUoKTt2YXIgbixhLHMsbCxjLHUsZixoLHAsZD1bXSxtPVtdLHk9ZS5sZW5ndGgsYj1yLnBhZGRlZHx8ITEsXz1yLnRvemVybyYmKCJsaW5lYXIiPT09dC50eXBlfHwiLSI9PT10LnR5cGUpLHc9ImxvZyI9PT10LnR5cGUsVD0hMSxrPXIudnBhZExpbmVhcml6ZWR8fCExO2Z1bmN0aW9uIEEodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gVD0hMCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoTnVtYmVyKHRbZV18fDApLDApfTt2YXIgZT1NYXRoLm1heChOdW1iZXIodHx8MCksMCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBNPUEoKHQuX20+MD9yLnBwYWRwbHVzOnIucHBhZG1pbnVzKXx8ci5wcGFkfHwwKSxTPUEoKHQuX20+MD9yLnBwYWRtaW51czpyLnBwYWRwbHVzKXx8ci5wcGFkfHwwKSxFPUEoci52cGFkcGx1c3x8ci52cGFkKSxMPUEoci52cGFkbWludXN8fHIudnBhZCk7aWYoIVQpe2lmKGg9MS8wLHA9LTEvMCx3KWZvcihuPTA7bjx5O24rKykoYT1lW25dKTxoJiZhPjAmJihoPWEpLGE+cCYmYTxvJiYocD1hKTtlbHNlIGZvcihuPTA7bjx5O24rKykoYT1lW25dKTxoJiZhPi1vJiYoaD1hKSxhPnAmJmE8byYmKHA9YSk7ZT1baCxwXSx5PTJ9dmFyIEM9e3RvemVybzpfLGV4dHJhcGFkOmJ9O2Z1bmN0aW9uIFAocil7cz1lW3JdLGkocykmJih1PU0ociksZj1TKHIpLGs/KGw9dC5jMmwocyktTChyKSxjPXQuYzJsKHMpK0UocikpOihoPXMtTChyKSxwPXMrRShyKSx3JiZoPHAvMTAmJihoPXAvMTApLGw9dC5jMmwoaCksYz10LmMybChwKSksXyYmKGw9TWF0aC5taW4oMCxsKSxjPU1hdGgubWF4KDAsYykpLHgobCkmJmcoZCxsLGYsQykseChjKSYmdihtLGMsdSxDKSl9dmFyIEk9TWF0aC5taW4oNix5KTtmb3Iobj0wO248STtuKyspUChuKTtmb3Iobj15LTE7bj49STtuLS0pUChuKTtyZXR1cm57bWluOmQsbWF4Om0sb3B0czpyfX0sY29uY2F0RXh0cmVtZXM6bX07ZnVuY3Rpb24gbSh0LGUscil7dmFyIG4saSxhLG89ZS5faWQscz10Ll9mdWxsRGF0YSxsPXQuX2Z1bGxMYXlvdXQsYz1bXSxmPVtdO2Z1bmN0aW9uIGgodCxlKXtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj10W2Vbbl1dLHM9KHIuX2V4dHJlbWVzfHx7fSlbb107aWYoITA9PT1yLnZpc2libGUmJnMpe2ZvcihpPTA7aTxzLm1pbi5sZW5ndGg7aSsrKWE9cy5taW5baV0sZyhjLGEudmFsLGEucGFkLHtleHRyYXBhZDphLmV4dHJhcGFkfSk7Zm9yKGk9MDtpPHMubWF4Lmxlbmd0aDtpKyspYT1zLm1heFtpXSx2KGYsYS52YWwsYS5wYWQse2V4dHJhcGFkOmEuZXh0cmFwYWR9KX19fWlmKGgocyxlLl90cmFjZUluZGljZXMpLGgobC5hbm5vdGF0aW9uc3x8W10sZS5fYW5uSW5kaWNlc3x8W10pLGgobC5zaGFwZXN8fFtdLGUuX3NoYXBlSW5kaWNlc3x8W10pLGUuX21hdGNoR3JvdXAmJiFyKWZvcih2YXIgcCBpbiBlLl9tYXRjaEdyb3VwKWlmKHAhPT1lLl9pZCl7dmFyIGQ9dSh0LHApLHk9bSh0LGQsITApLHg9ZS5fbGVuZ3RoL2QuX2xlbmd0aDtmb3IoaT0wO2k8eS5taW4ubGVuZ3RoO2krKylhPXkubWluW2ldLGcoYyxhLnZhbCxhLnBhZCp4LHtleHRyYXBhZDphLmV4dHJhcGFkfSk7Zm9yKGk9MDtpPHkubWF4Lmxlbmd0aDtpKyspYT15Lm1heFtpXSx2KGYsYS52YWwsYS5wYWQqeCx7ZXh0cmFwYWQ6YS5leHRyYXBhZH0pfXJldHVybnttaW46YyxtYXg6Zn19ZnVuY3Rpb24gZyh0LGUscixuKXt5KHQsZSxyLG4sYil9ZnVuY3Rpb24gdih0LGUscixuKXt5KHQsZSxyLG4sXyl9ZnVuY3Rpb24geSh0LGUscixuLGkpe2Zvcih2YXIgYT1uLnRvemVybyxvPW4uZXh0cmFwYWQscz0hMCxsPTA7bDx0Lmxlbmd0aCYmcztsKyspe3ZhciBjPXRbbF07aWYoaShjLnZhbCxlKSYmYy5wYWQ+PXImJihjLmV4dHJhcGFkfHwhbykpe3M9ITE7YnJlYWt9aShlLGMudmFsKSYmYy5wYWQ8PXImJihvfHwhYy5leHRyYXBhZCkmJih0LnNwbGljZShsLDEpLGwtLSl9aWYocyl7dmFyIHU9YSYmMD09PWU7dC5wdXNoKHt2YWw6ZSxwYWQ6dT8wOnIsZXh0cmFwYWQ6IXUmJm99KX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gaSh0KSYmTWF0aC5hYnModCk8b31mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gXyh0LGUpe3JldHVybiB0Pj1lfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9heGlzX2lkcyI6NTU4LCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDU1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXMuc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksZD10KCIuL2NsZWFuX3RpY2tzIiksbT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksZz1tLk9ORU1BWFlFQVIsdj1tLk9ORUFWR1lFQVIseT1tLk9ORU1JTllFQVIseD1tLk9ORU1BWFFVQVJURVIsYj1tLk9ORUFWR1FVQVJURVIsXz1tLk9ORU1JTlFVQVJURVIsdz1tLk9ORU1BWE1PTlRILFQ9bS5PTkVBVkdNT05USCxrPW0uT05FTUlOTU9OVEgsQT1tLk9ORVdFRUssTT1tLk9ORURBWSxTPU0vMixFPW0uT05FSE9VUixMPW0uT05FTUlOLEM9bS5PTkVTRUMsUD1tLk1JTlVTX1NJR04sST1tLkJBRE5VTSxPPXtLOiJ6ZXJvbGluZSJ9LHo9e0s6ImdyaWRsaW5lIixMOiJwYXRoIn0sRD17SzoidGljayIsTDoicGF0aCJ9LFI9e0s6InRpY2siLEw6InRleHQifSxGPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxCPUYuTUlEX1NISUZULE49Ri5DQVBfU0hJRlQsaj1GLkxJTkVfU1BBQ0lORyxVPUYuT1BQT1NJVEVfU0lERSxWPWUuZXhwb3J0cz17fTtWLnNldENvbnZlcnQ9dCgiLi9zZXRfY29udmVydCIpO3ZhciBIPXQoIi4vYXhpc19hdXRvdHlwZSIpLHE9dCgiLi9heGlzX2lkcyIpLEc9cS5pZFNvcnQsWT1xLmlzTGlua2VkO1YuaWQybmFtZT1xLmlkMm5hbWUsVi5uYW1lMmlkPXEubmFtZTJpZCxWLmNsZWFuSWQ9cS5jbGVhbklkLFYubGlzdD1xLmxpc3QsVi5saXN0SWRzPXEubGlzdElkcyxWLmdldEZyb21JZD1xLmdldEZyb21JZCxWLmdldEZyb21UcmFjZT1xLmdldEZyb21UcmFjZTt2YXIgVz10KCIuL2F1dG9yYW5nZSIpO1YuZ2V0QXV0b1JhbmdlPVcuZ2V0QXV0b1JhbmdlLFYuZmluZEV4dHJlbWVzPVcuZmluZEV4dHJlbWVzO2Z1bmN0aW9uIFgodCl7dmFyIGU9MWUtNCoodFsxXS10WzBdKTtyZXR1cm5bdFswXS1lLHRbMV0rZV19Vi5jb2VyY2VSZWY9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW4uY2hhckF0KG4ubGVuZ3RoLTEpLGw9ci5fZnVsbExheW91dC5fc3VicGxvdHNbbysiYXhpcyJdLGM9bisicmVmIix1PXt9O3JldHVybiBpfHwoaT1sWzBdfHwoInN0cmluZyI9PXR5cGVvZiBhP2E6YVswXSkpLGF8fChhPWkpLGw9bC5jb25jYXQobC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KyIgZG9tYWluIn0pKSksdVtjXT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwuY29uY2F0KGE/InN0cmluZyI9PXR5cGVvZiBhP1thXTphOltdKSxkZmx0Oml9LHMuY29lcmNlKHQsZSx1LGMpfSxWLmdldFJlZlR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dDoicGFwZXIiPT09dD8icGFwZXIiOiJwaXhlbCI9PT10PyJwaXhlbCI6LyggZG9tYWluKSQvLnRlc3QodCk/ImRvbWFpbiI6InJhbmdlIn0sVi5jb2VyY2VQb3NpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbDtpZigicmFuZ2UiIT09Vi5nZXRSZWZUeXBlKG4pKW89cy5lbnN1cmVOdW1iZXIsbD1yKGksYSk7ZWxzZXt2YXIgYz1WLmdldEZyb21JZChlLG4pO2w9cihpLGE9Yy5mcmFjdGlvbjJyKGEpKSxvPWMuY2xlYW5Qb3N9dFtpXT1vKGwpfSxWLmNsZWFuUG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3JldHVybigicGFwZXIiPT09cnx8InBpeGVsIj09PXI/cy5lbnN1cmVOdW1iZXI6Vi5nZXRGcm9tSWQoZSxyKS5jbGVhblBvcykodCl9LFYucmVkcmF3Q29tcG9uZW50cz1mdW5jdGlvbih0LGUpe2U9ZXx8Vi5saXN0SWRzKHQpO3ZhciByPXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gbihuLGksYSxzKXtmb3IodmFyIGw9by5nZXRDb21wb25lbnRNZXRob2QobixpKSxjPXt9LHU9MDt1PGUubGVuZ3RoO3UrKylmb3IodmFyIGY9cltWLmlkMm5hbWUoZVt1XSldW2FdLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHA9ZltoXTtpZighY1twXSYmKGwodCxwKSxjW3BdPTEscykpcmV0dXJufX1uKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiLCJfYW5uSW5kaWNlcyIpLG4oInNoYXBlcyIsImRyYXdPbmUiLCJfc2hhcGVJbmRpY2VzIiksbigiaW1hZ2VzIiwiZHJhdyIsIl9pbWdJbmRpY2VzIiwhMCl9O3ZhciBaPVYuZ2V0RGF0YUNvbnZlcnNpb25zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9IngiPT09cnx8InkiPT09cnx8InoiPT09cj9yOm47aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT17dHlwZTpIKG4sdm9pZCAwLHthdXRvdHlwZW51bWJlcnM6dC5fZnVsbExheW91dC5hdXRvdHlwZW51bWJlcnN9KSxfY2F0ZWdvcmllczpbXX0sVi5zZXRDb252ZXJ0KGkpLCJjYXRlZ29yeSI9PT1pLnR5cGUpZm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspaS5kMmMobltvXSl9ZWxzZSBpPVYuZ2V0RnJvbVRyYWNlKHQsZSxhKTtyZXR1cm4gaT97ZDJjOmkuZDJjLGMyZDppLmMyZH06ImlkcyI9PT1hP3tkMmM6SyxjMmQ6S306e2QyYzpKLGMyZDpKfX07ZnVuY3Rpb24gSih0KXtyZXR1cm4rdH1mdW5jdGlvbiBLKHQpe3JldHVybiBTdHJpbmcodCl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4rdC5zdWJzdHJpbmcoMSl9Vi5nZXREYXRhVG9Db29yZEZ1bmM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIFoodCxlLHIsbikuZDJjfSxWLmNvdW50ZXJMZXR0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQXQoMCk7cmV0dXJuIngiPT09ZT8ieSI6InkiPT09ZT8ieCI6dm9pZCAwfSxWLm1pbkR0aWNrPWZ1bmN0aW9uKHQsZSxyLG4pey0xPT09WyJsb2ciLCJjYXRlZ29yeSIsIm11bHRpY2F0ZWdvcnkiXS5pbmRleE9mKHQudHlwZSkmJm4/dm9pZCAwPT09dC5fbWluRHRpY2s/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTp0Ll9taW5EdGljayYmKCh0Ll9taW5EdGljay9lKzFlLTYpJTE8MmUtNiYmKChyLXQuX2ZvcmNlVGljazApL2UlMSsxLjAwMDAwMSklMTwyZS02Pyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6KChlL3QuX21pbkR0aWNrKzFlLTYpJTE+MmUtNnx8KChyLXQuX2ZvcmNlVGljazApL3QuX21pbkR0aWNrJTErMS4wMDAwMDEpJTE+MmUtNikmJih0Ll9taW5EdGljaz0wKSk6dC5fbWluRHRpY2s9MH0sVi5zYXZlUmFuZ2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVYubGlzdCh0LCIiLCEwKSxuPSExLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPXZvaWQgMD09PWEuX3JhbmdlSW5pdGlhbCxzPW98fCEoYS5yYW5nZVswXT09PWEuX3JhbmdlSW5pdGlhbFswXSYmYS5yYW5nZVsxXT09PWEuX3JhbmdlSW5pdGlhbFsxXSk7KG8mJiExPT09YS5hdXRvcmFuZ2V8fGUmJnMpJiYoYS5fcmFuZ2VJbml0aWFsPWEucmFuZ2Uuc2xpY2UoKSxuPSEwKX1yZXR1cm4gbn0sVi5zYXZlU2hvd1NwaWtlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1WLmxpc3QodCwiIiwhMCksbj0hMSxpPSJvbiIsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdLHM9dm9pZCAwPT09by5fc2hvd1NwaWtlSW5pdGlhbCxsPXN8fCEoby5zaG93c3Bpa2VzPT09by5fc2hvd3NwaWtlcyk7KHN8fGUmJmwpJiYoby5fc2hvd1NwaWtlSW5pdGlhbD1vLnNob3dzcGlrZXMsbj0hMCksIm9uIiE9PWl8fG8uc2hvd3NwaWtlc3x8KGk9Im9mZiIpfXJldHVybiB0Ll9mdWxsTGF5b3V0Ll9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWksbn0sVi5hdXRvQmluPWZ1bmN0aW9uKHQsZSxyLG4sYSxvKXt2YXIgbCxjPXMuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQpLHU9cy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCk7aWYoImNhdGVnb3J5Ij09PWUudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlKXJldHVybntzdGFydDpjLS41LGVuZDp1Ky41LHNpemU6TWF0aC5tYXgoMSxNYXRoLnJvdW5kKG8pfHwxKSxfZGF0YVNwYW46dS1jfTtpZihhfHwoYT1lLmNhbGVuZGFyKSxsPSJsb2ciPT09ZS50eXBlP3t0eXBlOiJsaW5lYXIiLHJhbmdlOltjLHVdfTp7dHlwZTplLnR5cGUscmFuZ2U6cy5zaW1wbGVNYXAoW2MsdV0sZS5jMnIsMCxhKSxjYWxlbmRhcjphfSxWLnNldENvbnZlcnQobCksbz1vJiZkLmR0aWNrKG8sbC50eXBlKSlsLmR0aWNrPW8sbC50aWNrMD1kLnRpY2swKHZvaWQgMCxsLnR5cGUsYSk7ZWxzZXt2YXIgZjtpZihyKWY9KHUtYykvcjtlbHNle3ZhciBoPXMuZGlzdGluY3RWYWxzKHQpLHA9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhoLm1pbkRpZmYpL01hdGguTE4xMCkpLG09cCpzLnJvdW5kVXAoaC5taW5EaWZmL3AsWy45LDEuOSw0LjksOS45XSwhMCk7Zj1NYXRoLm1heChtLDIqcy5zdGRldih0KS9NYXRoLnBvdyh0Lmxlbmd0aCxuPy4yNTouNCkpLGkoZil8fChmPTEpfVYuYXV0b1RpY2tzKGwsZil9dmFyIGcsdj1sLmR0aWNrLHk9Vi50aWNrSW5jcmVtZW50KFYudGlja0ZpcnN0KGwpLHYsInJldmVyc2UiLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgdilnPSh5PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89MCxzPTAsbD0wLGM9MDtmdW5jdGlvbiB1KGUpe3JldHVybigxKzEwMCooZS10KS9yLmR0aWNrKSUxMDA8Mn1mb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyllW2ZdJTE9PTA/bCsrOmkoZVtmXSl8fGMrKyx1KGVbZl0pJiZvKyssdShlW2ZdK3IuZHRpY2svMikmJnMrKzt2YXIgaD1lLmxlbmd0aC1jO2lmKGw9PT1oJiYiZGF0ZSIhPT1yLnR5cGUpci5kdGljazwxP3Q9bi0uNSpyLmR0aWNrOih0LT0uNSkrci5kdGljazxuJiYodCs9ci5kdGljayk7ZWxzZSBpZihzPC4xKmgmJihvPi4zKmh8fHUobil8fHUoYSkpKXt2YXIgcD1yLmR0aWNrLzI7dCs9dCtwPG4/cDotcH1yZXR1cm4gdH0oeSx0LGwsYyx1KSkrKDErTWF0aC5mbG9vcigodS15KS92KSkqdjtlbHNlIGZvcigiTSI9PT1sLmR0aWNrLmNoYXJBdCgwKSYmKHk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1zLmZpbmRFeGFjdERhdGVzKGUsaSk7aWYoYS5leGFjdERheXM+Ljgpe3ZhciBvPU51bWJlcihyLnN1YnN0cigxKSk7YS5leGFjdFllYXJzPi44JiZvJTEyPT0wP3Q9Vi50aWNrSW5jcmVtZW50KHQsIk02IiwicmV2ZXJzZSIpKzEuNSpNOmEuZXhhY3RNb250aHM+Ljg/dD1WLnRpY2tJbmNyZW1lbnQodCwiTTEiLCJyZXZlcnNlIikrMTUuNSpNOnQtPVM7dmFyIGw9Vi50aWNrSW5jcmVtZW50KHQscik7aWYobDw9bilyZXR1cm4gbH1yZXR1cm4gdH0oeSx0LHYsYyxhKSksZz15LDA7Zzw9dTspZz1WLnRpY2tJbmNyZW1lbnQoZyx2LCExLGEpO3JldHVybntzdGFydDplLmMycih5LDAsYSksZW5kOmUuYzJyKGcsMCxhKSxzaXplOnYsX2RhdGFTcGFuOnUtY319LFYucHJlcFRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCx2b2lkIDAsdm9pZCAwLGUpO2lmKHQuX2R0aWNrSW5pdD10LmR0aWNrLHQuX3RpY2swSW5pdD10LnRpY2swLCJhdXRvIj09PXQudGlja21vZGV8fCF0LmR0aWNrKXt2YXIgbixhPXQubnRpY2tzO2F8fCgiY2F0ZWdvcnkiPT09dC50eXBlfHwibXVsdGljYXRlZ29yeSI9PT10LnR5cGU/KG49dC50aWNrZm9udD9zLmJpZ0ZvbnQodC50aWNrZm9udC5zaXplfHwxMik6MTUsYT10Ll9sZW5ndGgvbik6KG49InkiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLGE9cy5jb25zdHJhaW4odC5fbGVuZ3RoL24sNCw5KSsxKSwicmFkaWFsYXhpcyI9PT10Ll9uYW1lJiYoYSo9MikpLCJhcnJheSI9PT10LnRpY2ttb2RlJiYoYSo9MTAwKSx0Ll9yb3VnaERUaWNrPU1hdGguYWJzKHJbMV0tclswXSkvYSxWLmF1dG9UaWNrcyh0LHQuX3JvdWdoRFRpY2spLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGUmJmZ1bmN0aW9uKHQpe3ZhciBlO2Z1bmN0aW9uIHIoKXtyZXR1cm4hKGkodC5kdGljayl8fCJNIiE9PXQuZHRpY2suY2hhckF0KDApKX12YXIgbj1yKCksYT1WLmdldFRpY2tGb3JtYXQodCk7aWYoYSl7dmFyIG89dC5fZHRpY2tJbml0IT09dC5kdGljazsvJVtmTFFzU01YXS8udGVzdChhKXx8KC8lW0hJXS8udGVzdChhKT8oZT1FLG8mJiFuJiZ0LmR0aWNrPEUmJih0LmR0aWNrPUUpKTovJXAvLnRlc3QoYSk/KGU9UyxvJiYhbiYmdC5kdGljazxTJiYodC5kdGljaz1TKSk6LyVbQWFkZWp1d3hdLy50ZXN0KGEpPyhlPU0sbyYmIW4mJnQuZHRpY2s8TSYmKHQuZHRpY2s9TSkpOi8lW1VWV10vLnRlc3QoYSk/KGU9QSxvJiYhbiYmdC5kdGljazxBJiYodC5kdGljaz1BKSk6LyVbQmJtXS8udGVzdChhKT8oZT1ULG8mJihuP1EodC5kdGljayk8MTp0LmR0aWNrPGspJiYodC5kdGljaz0iTTEiKSk6LyVbcV0vLnRlc3QoYSk/KGU9YixvJiYobj9RKHQuZHRpY2spPDM6dC5kdGljazxfKSYmKHQuZHRpY2s9Ik0zIikpOi8lW1l5XS8udGVzdChhKSYmKGU9dixvJiYobj9RKHQuZHRpY2spPDEyOnQuZHRpY2s8eSkmJih0LmR0aWNrPSJNMTIiKSkpfShuPXIoKSkmJnQudGljazA9PT10Ll9kb3dUaWNrMCYmKHQudGljazA9dC5fcmF3VGljazApO3QuX2RlZmluZWREZWx0YT1lfSh0KSx0LnRpY2swfHwodC50aWNrMD0iZGF0ZSI9PT10LnR5cGU/IjIwMDAtMDEtMDEiOjApLCJkYXRlIj09PXQudHlwZSYmdC5kdGljazwuMSYmKHQuZHRpY2s9LjEpLHN0KHQpfSxWLmNhbGNUaWNrcz1mdW5jdGlvbih0LGUpe1YucHJlcFRpY2tzKHQsZSk7dmFyIHI9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCx2b2lkIDAsdm9pZCAwLGUpO2lmKCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpY2t2YWxzLHI9dC50aWNrdGV4dCxuPW5ldyBBcnJheShlLmxlbmd0aCksaT1YKHMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpKSxhPU1hdGgubWluKGlbMF0saVsxXSksbz1NYXRoLm1heChpWzBdLGlbMV0pLGw9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGM9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDsibG9nIj09PXQudHlwZSYmIkwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4odC5yYW5nZVswXSx0LnJhbmdlWzFdKSktMSkpO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKXt2YXIgZj1jKGVbdV0pO2Y+YSYmZjxvJiYodm9pZCAwPT09clt1XT9uW2xdPVYudGlja1RleHQodCxmKTpuW2xdPWx0KHQsZixTdHJpbmcoclt1XSkpLGwrKyl9bDxlLmxlbmd0aCYmbi5zcGxpY2UobCxlLmxlbmd0aC1sKTt0LnJhbmdlYnJlYWtzJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHQubWFza0JyZWFrcyhlLngpIT09SX0pKSk7cmV0dXJuIG59KHQpO3ZhciBuPVgociksYT1uWzBdLG89blsxXSxsPXJbMV08clswXSxjPU1hdGgubWluKHJbMF0sclsxXSksdT1NYXRoLm1heChyWzBdLHJbMV0pLGY9ImxvZyI9PT10LnR5cGUmJiEoaSh0LmR0aWNrKXx8IkwiPT09dC5kdGljay5jaGFyQXQoMCkpLGg9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGU7aWYodC5fdG1pbj1WLnRpY2tGaXJzdCh0LGUpLHQuX3RtaW48YSE9PWwpcmV0dXJuW107ImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwobz1sP01hdGgubWF4KC0uNSxvKTpNYXRoLm1pbih0Ll9jYXRlZ29yaWVzLmxlbmd0aC0uNSxvKSk7dmFyIHA9dC5fdG1pbjt0LnJhbmdlYnJlYWtzJiZ0Ll90aWNrMEluaXQhPT10LnRpY2swJiYocD1NdChwLHQpLGx8fChwPVYudGlja0luY3JlbWVudChwLHQuZHRpY2ssIWwsdC5jYWxlbmRhcikpKSxoJiYocD1WLnRpY2tJbmNyZW1lbnQocCx0LmR0aWNrLCFsLHQuY2FsZW5kYXIpKTtmb3IodmFyIGQsbT1NYXRoLm1heCgxZTMsdC5fbGVuZ3RofHwwKSxMPVtdLEM9bnVsbDtsP3A+PW86cDw9bztwPVYudGlja0luY3JlbWVudChwLHQuZHRpY2ssbCx0LmNhbGVuZGFyKSl7aWYodC5yYW5nZWJyZWFrcyYmIWwpe2lmKHA8YSljb250aW51ZTtpZih0Lm1hc2tCcmVha3MocCk9PT1JJiZNdChwLHQpPj11KWJyZWFrfWlmKEwubGVuZ3RoPm18fHA9PT1DKWJyZWFrO0M9cDt2YXIgUD0hMTtmJiZwIT09KDB8cCkmJihQPSEwKSxMLnB1c2goe21pbm9yOlAsdmFsdWU6cH0pfWlmKGgmJmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXS52YWx1ZSxhPW4sbz1uKzE7bjx0Lmxlbmd0aC0xPyhhPW4sbz1uKzEpOm4+MD8oYT1uLTEsbz1uKTooYT1uLG89bik7dmFyIHMsbD10W2FdLnZhbHVlLGM9dFtvXS52YWx1ZSx1PU1hdGguYWJzKGMtbCksZj1yfHx1LGg9MDtmPj15P2g9dT49eSYmdTw9Zz91OnY6cj09PWImJmY+PV8/aD11Pj1fJiZ1PD14P3U6YjpmPj1rP2g9dT49ayYmdTw9dz91OlQ6cj09PUEmJmY+PUE/aD1BOmY+PU0/aD1NOnI9PT1TJiZmPj1TP2g9UzpyPT09RSYmZj49RSYmKGg9RSksaD49dSYmKGg9dSxzPSEwKTt2YXIgcD1pK2g7aWYoZS5yYW5nZWJyZWFrcyYmaD4wKXtmb3IodmFyIGQ9MCxtPTA7bTw4NDttKyspe3ZhciBMPShtKy41KS84NDtlLm1hc2tCcmVha3MoaSooMS1MKStMKnApIT09SSYmZCsrfShoKj1kLzg0KXx8KHRbbl0uZHJvcD0hMCkscyYmdT5BJiYoaD11KX0oaD4wfHwwPT09bikmJih0W25dLnBlcmlvZFg9aStoLzIpfX0oTCx0LHQuX2RlZmluZWREZWx0YSksdC5yYW5nZWJyZWFrcyl7dmFyIE89InkiPT09dC5faWQuY2hhckF0KDApLHo9MTsiYXV0byI9PT10LnRpY2ttb2RlJiYoej10LnRpY2tmb250P3QudGlja2ZvbnQuc2l6ZToxMik7dmFyIEQ9TmFOO2ZvcihkPUwubGVuZ3RoLTE7ZD4tMTtkLS0paWYoTFtkXS5kcm9wKUwuc3BsaWNlKGQsMSk7ZWxzZXtMW2RdLnZhbHVlPU10KExbZF0udmFsdWUsdCk7dmFyIFI9dC5jMnAoTFtkXS52YWx1ZSk7KE8/RD5SLXo6RDxSK3opP0wuc3BsaWNlKGw/ZCsxOmQsMSk6RD1SfX1BdCh0KSYmMzYwPT09TWF0aC5hYnMoclsxXS1yWzBdKSYmTC5wb3AoKSx0Ll90bWF4PShMW0wubGVuZ3RoLTFdfHx7fSkudmFsdWUsdC5fcHJldkRhdGVIZWFkPSIiLHQuX2luQ2FsY1RpY2tzPSEwO3ZhciBGLEIsTj1bXTtmb3IoZD0wO2Q8TC5sZW5ndGg7ZCsrKXt2YXIgaj1MW2RdLm1pbm9yLFU9TFtkXS52YWx1ZTtGPVYudGlja1RleHQodCxVLCExLGopLHZvaWQgMCE9PShCPUxbZF0ucGVyaW9kWCkmJihGLnBlcmlvZFg9QiwoQj51fHxCPGMpJiYoQj51JiYoRi5wZXJpb2RYPXUpLEI8YyYmKEYucGVyaW9kWD1jKSxGLnRleHQ9IiAiLHQuX3ByZXZEYXRlSGVhZD0iIikpLE4ucHVzaChGKX1yZXR1cm4gdC5faW5DYWxjVGlja3M9ITEsTn07dmFyICQ9WzIsNSwxMF0sdHQ9WzEsMiwzLDYsMTJdLGV0PVsxLDIsNSwxMCwxNSwzMF0scnQ9WzEsMiwzLDcsMTRdLG50PVstLjA0NiwwLC4zMDEsLjQ3NywuNjAyLC42OTksLjc3OCwuODQ1LC45MDMsLjk1NCwxXSxpdD1bLS4zMDEsMCwuMzAxLC42OTksMV0sYXQ9WzE1LDMwLDQ1LDkwLDE4MF07ZnVuY3Rpb24gb3QodCxlLHIpe3JldHVybiBlKnMucm91bmRVcCh0L2Uscil9ZnVuY3Rpb24gc3QodCl7dmFyIGU9dC5kdGljaztpZih0Ll90aWNrZXhwb25lbnQ9MCxpKGUpfHwic3RyaW5nIj09dHlwZW9mIGV8fChlPTEpLCJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KHQuX3RpY2tyb3VuZD1udWxsKSwiZGF0ZSI9PT10LnR5cGUpe3ZhciByPXQucjJsKHQudGljazApLG49dC5sMnIocikucmVwbGFjZSgvKF4tfGkpL2csIiIpLGE9bi5sZW5ndGg7aWYoIk0iPT09U3RyaW5nKGUpLmNoYXJBdCgwKSlhPjEwfHwiMDEtMDEiIT09bi5zdWJzdHIoNSk/dC5fdGlja3JvdW5kPSJkIjp0Ll90aWNrcm91bmQ9K2Uuc3Vic3RyKDEpJTEyPT0wPyJ5IjoibSI7ZWxzZSBpZihlPj1NJiZhPD0xMHx8ZT49MTUqTSl0Ll90aWNrcm91bmQ9ImQiO2Vsc2UgaWYoZT49TCYmYTw9MTZ8fGU+PUUpdC5fdGlja3JvdW5kPSJNIjtlbHNlIGlmKGU+PUMmJmE8PTE5fHxlPj1MKXQuX3RpY2tyb3VuZD0iUyI7ZWxzZXt2YXIgbz10LmwycihyK2UpLnJlcGxhY2UoL14tLywiIikubGVuZ3RoO3QuX3RpY2tyb3VuZD1NYXRoLm1heChhLG8pLTIwLHQuX3RpY2tyb3VuZDwwJiYodC5fdGlja3JvdW5kPTQpfX1lbHNlIGlmKGkoZSl8fCJMIj09PWUuY2hhckF0KDApKXt2YXIgcz10LnJhbmdlLm1hcCh0LnIyZHx8TnVtYmVyKTtpKGUpfHwoZT1OdW1iZXIoZS5zdWJzdHIoMSkpKSx0Ll90aWNrcm91bmQ9Mi1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCsuMDEpO3ZhciBsPU1hdGgubWF4KE1hdGguYWJzKHNbMF0pLE1hdGguYWJzKHNbMV0pKSxjPU1hdGguZmxvb3IoTWF0aC5sb2cobCkvTWF0aC5MTjEwKy4wMSksdT12b2lkIDA9PT10Lm1pbmV4cG9uZW50PzM6dC5taW5leHBvbmVudDtNYXRoLmFicyhjKT51JiYodXQodC5leHBvbmVudGZvcm1hdCkmJiFmdChjKT90Ll90aWNrZXhwb25lbnQ9MypNYXRoLnJvdW5kKChjLTEpLzMpOnQuX3RpY2tleHBvbmVudD1jKX1lbHNlIHQuX3RpY2tyb3VuZD1udWxsfWZ1bmN0aW9uIGx0KHQsZSxyKXt2YXIgbj10LnRpY2tmb250fHx7fTtyZXR1cm57eDplLGR4OjAsZHk6MCx0ZXh0OnJ8fCIiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1WLmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKX1pZigiZGF0ZSI9PT10LnR5cGUpe3QudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhciwwKTt2YXIgYT0yKmU7aWYoYT52KWUvPXYscj1uKDEwKSx0LmR0aWNrPSJNIisxMipvdChlLHIsJCk7ZWxzZSBpZihhPlQpZS89VCx0LmR0aWNrPSJNIitvdChlLDEsdHQpO2Vsc2UgaWYoYT5NKXt0LmR0aWNrPW90KGUsTSx0Ll9oYXNEYXlPZldlZWtCcmVha3M/WzEsMiw3LDE0XTpydCk7dmFyIG89Vi5nZXRUaWNrRm9ybWF0KHQpLGw9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGU7bCYmKHQuX3Jhd1RpY2swPXQudGljazApLC8lW3VWV10vLnRlc3Qobyk/dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDIpOnQudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhciwxKSxsJiYodC5fZG93VGljazA9dC50aWNrMCl9ZWxzZSBhPkU/dC5kdGljaz1vdChlLEUsdHQpOmE+TD90LmR0aWNrPW90KGUsTCxldCk6YT5DP3QuZHRpY2s9b3QoZSxDLGV0KToocj1uKDEwKSx0LmR0aWNrPW90KGUsciwkKSl9ZWxzZSBpZigibG9nIj09PXQudHlwZSl7dC50aWNrMD0wO3ZhciBjPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKGU+LjcpdC5kdGljaz1NYXRoLmNlaWwoZSk7ZWxzZSBpZihNYXRoLmFicyhjWzFdLWNbMF0pPDEpe3ZhciB1PTEuNSpNYXRoLmFicygoY1sxXS1jWzBdKS9lKTtlPU1hdGguYWJzKE1hdGgucG93KDEwLGNbMV0pLU1hdGgucG93KDEwLGNbMF0pKS91LHI9bigxMCksdC5kdGljaz0iTCIrb3QoZSxyLCQpfWVsc2UgdC5kdGljaz1lPi4zPyJEMiI6IkQxIn1lbHNlImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlPyh0LnRpY2swPTAsdC5kdGljaz1NYXRoLmNlaWwoTWF0aC5tYXgoZSwxKSkpOkF0KHQpPyh0LnRpY2swPTAscj0xLHQuZHRpY2s9b3QoZSxyLGF0KSk6KHQudGljazA9MCxyPW4oMTApLHQuZHRpY2s9b3QoZSxyLCQpKTtpZigwPT09dC5kdGljayYmKHQuZHRpY2s9MSksIWkodC5kdGljaykmJiJzdHJpbmciIT10eXBlb2YgdC5kdGljayl7dmFyIGY9dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsImF4LmR0aWNrIGVycm9yOiAiK1N0cmluZyhmKX19LFYudGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yPy0xOjE7aWYoaShlKSlyZXR1cm4gcy5pbmNyZW1lbnQodCxvKmUpO3ZhciBsPWUuY2hhckF0KDApLGM9bypOdW1iZXIoZS5zdWJzdHIoMSkpO2lmKCJNIj09PWwpcmV0dXJuIHMuaW5jcmVtZW50TW9udGgodCxjLGEpO2lmKCJMIj09PWwpcmV0dXJuIE1hdGgubG9nKE1hdGgucG93KDEwLHQpK2MpL01hdGguTE4xMDtpZigiRCI9PT1sKXt2YXIgdT0iRDIiPT09ZT9pdDpudCxmPXQrLjAxKm8saD1zLnJvdW5kVXAocy5tb2QoZiwxKSx1LHIpO3JldHVybiBNYXRoLmZsb29yKGYpK01hdGgubG9nKG4ucm91bmQoTWF0aC5wb3coMTAsaCksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoZSl9LFYudGlja0ZpcnN0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yMmx8fE51bWJlcixhPXMuc2ltcGxlTWFwKHQucmFuZ2Uscix2b2lkIDAsdm9pZCAwLGUpLG89YVsxXTxhWzBdLGw9bz9NYXRoLmZsb29yOk1hdGguY2VpbCxjPVgoYSlbMF0sdT10LmR0aWNrLGY9cih0LnRpY2swKTtpZihpKHUpKXt2YXIgaD1sKChjLWYpL3UpKnUrZjtyZXR1cm4iY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fChoPXMuY29uc3RyYWluKGgsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksaH12YXIgcD11LmNoYXJBdCgwKSxkPU51bWJlcih1LnN1YnN0cigxKSk7aWYoIk0iPT09cCl7Zm9yKHZhciBtLGcsdix5PTAseD1mO3k8MTA7KXtpZigoKG09Vi50aWNrSW5jcmVtZW50KHgsdSxvLHQuY2FsZW5kYXIpKS1jKSooeC1jKTw9MClyZXR1cm4gbz9NYXRoLm1pbih4LG0pOk1hdGgubWF4KHgsbSk7Zz0oYy0oeCttKS8yKS8obS14KSx2PXArKE1hdGguYWJzKE1hdGgucm91bmQoZykpfHwxKSpkLHg9Vi50aWNrSW5jcmVtZW50KHgsdixnPDA/IW86byx0LmNhbGVuZGFyKSx5Kyt9cmV0dXJuIHMuZXJyb3IoInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlIix0KSx4fWlmKCJMIj09PXApcmV0dXJuIE1hdGgubG9nKGwoKE1hdGgucG93KDEwLGMpLWYpL2QpKmQrZikvTWF0aC5MTjEwO2lmKCJEIj09PXApe3ZhciBiPSJEMiI9PT11P2l0Om50LF89cy5yb3VuZFVwKHMubW9kKGMsMSksYixvKTtyZXR1cm4gTWF0aC5mbG9vcihjKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLF8pLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKHUpfSxWLnRpY2tUZXh0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLG89bHQodCxlKSxsPSJhcnJheSI9PT10LnRpY2ttb2RlLGM9cnx8bCx1PXQudHlwZSxmPSJjYXRlZ29yeSI9PT11P3QuZDJsX25vYWRkOnQuZDJsO2lmKGwmJkFycmF5LmlzQXJyYXkodC50aWNrdGV4dCkpe3ZhciBoPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLHA9KE1hdGguYWJzKGhbMV0taFswXSktKHQuX2xCcmVha3N8fDApKS8xZTQ7Zm9yKGE9MDthPHQudGlja3RleHQubGVuZ3RoJiYhKE1hdGguYWJzKGUtZih0LnRpY2t2YWxzW2FdKSk8cCk7YSsrKTtpZihhPHQudGlja3RleHQubGVuZ3RoKXJldHVybiBvLnRleHQ9U3RyaW5nKHQudGlja3RleHRbYV0pLG99ZnVuY3Rpb24gZChuKXtpZih2b2lkIDA9PT1uKXJldHVybiEwO2lmKHIpcmV0dXJuIm5vbmUiPT09bjt2YXIgaT17Zmlyc3Q6dC5fdG1pbixsYXN0OnQuX3RtYXh9W25dO3JldHVybiJhbGwiIT09biYmZSE9PWl9dmFyIG09cj8ibmV2ZXIiOiJub25lIiE9PXQuZXhwb25lbnRmb3JtYXQmJmQodC5zaG93ZXhwb25lbnQpPyJoaWRlIjoiIjtpZigiZGF0ZSI9PT11P2Z1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXQuX3RpY2tyb3VuZCxvPXImJnQuaG92ZXJmb3JtYXR8fFYuZ2V0VGlja0Zvcm1hdCh0KTtuJiYoYT1pKGEpPzQ6e3k6Im0iLG06ImQiLGQ6Ik0iLE06IlMiLFM6NH1bYV0pO3ZhciBsLGM9cy5mb3JtYXREYXRlKGUueCxvLGEsdC5fZGF0ZUZvcm1hdCx0LmNhbGVuZGFyLHQuX2V4dHJhRm9ybWF0KSx1PWMuaW5kZXhPZigiXG4iKTstMSE9PXUmJihsPWMuc3Vic3RyKHUrMSksYz1jLnN1YnN0cigwLHUpKTtuJiYoIjAwOjAwOjAwIj09PWN8fCIwMDowMCI9PT1jPyhjPWwsbD0iIik6OD09PWMubGVuZ3RoJiYoYz1jLnJlcGxhY2UoLzowMCQvLCIiKSkpO2lmKGwpaWYocikiZCI9PT1hP2MrPSIsICIrbDpjPWwrKGM/IiwgIitjOiIiKTtlbHNlIGlmKHQuX2luQ2FsY1RpY2tzJiZ0Ll9wcmV2RGF0ZUhlYWQ9PT1sKXt2YXIgZj1TdCh0KSxoPXQuX3RydWVTaWRlfHx0LnNpZGU7KCFmJiYidG9wIj09PWh8fGYmJiJib3R0b20iPT09aCkmJihjKz0iPGJyPiAiKX1lbHNlIHQuX3ByZXZEYXRlSGVhZD1sLGMrPSI8YnI+IitsO2UudGV4dD1jfSh0LG8scixjKToibG9nIj09PXU/ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz10LmR0aWNrLGw9ZS54LGM9dC50aWNrZm9ybWF0LHU9InN0cmluZyI9PXR5cGVvZiBvJiZvLmNoYXJBdCgwKTsibmV2ZXIiPT09YSYmKGE9IiIpO24mJiJMIiE9PXUmJihvPSJMMyIsdT0iTCIpO2lmKGN8fCJMIj09PXUpZS50ZXh0PWh0KE1hdGgucG93KDEwLGwpLHQsYSxuKTtlbHNlIGlmKGkobyl8fCJEIj09PXUmJnMubW9kKGwrLjAxLDEpPC4xKXt2YXIgZj1NYXRoLnJvdW5kKGwpLGg9TWF0aC5hYnMoZikscD10LmV4cG9uZW50Zm9ybWF0OyJwb3dlciI9PT1wfHx1dChwKSYmZnQoZik/KGUudGV4dD0wPT09Zj8xOjE9PT1mPyIxMCI6IjEwPHN1cD4iKyhmPjE/IiI6UCkraCsiPC9zdXA+IixlLmZvbnRTaXplKj0xLjI1KTooImUiPT09cHx8IkUiPT09cCkmJmg+Mj9lLnRleHQ9IjEiK3ArKGY+MD8iKyI6UCkraDooZS50ZXh0PWh0KE1hdGgucG93KDEwLGwpLHQsIiIsImZha2Vob3ZlciIpLCJEMSI9PT1vJiYieSI9PT10Ll9pZC5jaGFyQXQoMCkmJihlLmR5LT1lLmZvbnRTaXplLzYpKX1lbHNle2lmKCJEIiE9PXUpdGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKG8pO2UudGV4dD1TdHJpbmcoTWF0aC5yb3VuZChNYXRoLnBvdygxMCxzLm1vZChsLDEpKSkpLGUuZm9udFNpemUqPS43NX1pZigiRDEiPT09dC5kdGljayl7dmFyIGQ9U3RyaW5nKGUudGV4dCkuY2hhckF0KDApOyIwIiE9PWQmJiIxIiE9PWR8fCgieSI9PT10Ll9pZC5jaGFyQXQoMCk/ZS5keC09ZS5mb250U2l6ZS80OihlLmR5Kz1lLmZvbnRTaXplLzIsZS5keCs9KHQucmFuZ2VbMV0+dC5yYW5nZVswXT8xOi0xKSplLmZvbnRTaXplKihsPDA/LjU6LjI1KSkpfX0odCxvLDAsYyxtKToiY2F0ZWdvcnkiPT09dT9mdW5jdGlvbih0LGUpe3ZhciByPXQuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZChlLngpXTt2b2lkIDA9PT1yJiYocj0iIik7ZS50ZXh0PVN0cmluZyhyKX0odCxvKToibXVsdGljYXRlZ29yeSI9PT11P2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnJvdW5kKGUueCksaT10Ll9jYXRlZ29yaWVzW25dfHxbXSxhPXZvaWQgMD09PWlbMV0/IiI6U3RyaW5nKGlbMV0pLG89dm9pZCAwPT09aVswXT8iIjpTdHJpbmcoaVswXSk7cj9lLnRleHQ9bysiIC0gIithOihlLnRleHQ9YSxlLnRleHQyPW8pfSh0LG8scik6QXQodCk/ZnVuY3Rpb24odCxlLHIsbixpKXtpZigicmFkaWFucyIhPT10LnRoZXRhdW5pdHx8cillLnRleHQ9aHQoZS54LHQsaSxuKTtlbHNle3ZhciBhPWUueC8xODA7aWYoMD09PWEpZS50ZXh0PSIwIjtlbHNle3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9MWUtNn12YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIHI9MTshZShNYXRoLnJvdW5kKHQqcikvcix0KTspcio9MTA7cmV0dXJuIHJ9KHQpLG49dCpyLGk9TWF0aC5hYnMoZnVuY3Rpb24gdChyLG4pe3JldHVybiBlKG4sMCk/cjp0KG4sciVuKX0obixyKSk7cmV0dXJuW01hdGgucm91bmQobi9pKSxNYXRoLnJvdW5kKHIvaSldfShhKTtpZihvWzFdPj0xMDApZS50ZXh0PWh0KHMuZGVnMnJhZChlLngpLHQsaSxuKTtlbHNle3ZhciBsPWUueDwwOzE9PT1vWzFdPzE9PT1vWzBdP2UudGV4dD0iXHUwM2MwIjplLnRleHQ9b1swXSsiXHUwM2MwIjplLnRleHQ9WyI8c3VwPiIsb1swXSwiPC9zdXA+IiwiXHUyMDQ0IiwiPHN1Yj4iLG9bMV0sIjwvc3ViPiIsIlx1MDNjMCJdLmpvaW4oIiIpLGwmJihlLnRleHQ9UCtlLnRleHQpfX19fSh0LG8scixjLG0pOmZ1bmN0aW9uKHQsZSxyLG4saSl7Im5ldmVyIj09PWk/aT0iIjoiYWxsIj09PXQuc2hvd2V4cG9uZW50JiZNYXRoLmFicyhlLngvdC5kdGljayk8MWUtNiYmKGk9ImhpZGUiKTtlLnRleHQ9aHQoZS54LHQsaSxuKX0odCxvLDAsYyxtKSxufHwodC50aWNrcHJlZml4JiYhZCh0LnNob3d0aWNrcHJlZml4KSYmKG8udGV4dD10LnRpY2twcmVmaXgrby50ZXh0KSx0LnRpY2tzdWZmaXgmJiFkKHQuc2hvd3RpY2tzdWZmaXgpJiYoby50ZXh0Kz10LnRpY2tzdWZmaXgpKSwiYm91bmRhcmllcyI9PT10LnRpY2tzb258fHQuc2hvd2RpdmlkZXJzKXt2YXIgZz1mdW5jdGlvbihlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj49MCYmcjw9dC5fbGVuZ3RoP2U6bnVsbH07by54Ym5kPVtnKG8ueC0uNSksZyhvLngrdC5kdGljay0uNSldfXJldHVybiBvfSxWLmhvdmVyTGFiZWxUZXh0PWZ1bmN0aW9uKHQsZSxyKXtyJiYodD1zLmV4dGVuZEZsYXQoe30sdCx7aG92ZXJmb3JtYXQ6cn0pKTt2YXIgbj1BcnJheS5pc0FycmF5KGUpP2VbMF06ZSxpPUFycmF5LmlzQXJyYXkoZSk/ZVsxXTp2b2lkIDA7aWYodm9pZCAwIT09aSYmaSE9PW4pcmV0dXJuIFYuaG92ZXJMYWJlbFRleHQodCxuLHIpKyIgLSAiK1YuaG92ZXJMYWJlbFRleHQodCxpLHIpO3ZhciBhPSJsb2ciPT09dC50eXBlJiZuPD0wLG89Vi50aWNrVGV4dCh0LHQuYzJsKGE/LW46biksImhvdmVyIikudGV4dDtyZXR1cm4gYT8wPT09bj8iMCI6UCtvOm99O3ZhciBjdD1bImYiLCJwIiwibiIsIlx1MDNiYyIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIl07ZnVuY3Rpb24gdXQodCl7cmV0dXJuIlNJIj09PXR8fCJCIj09PXR9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIHQ+MTR8fHQ8LTE1fWZ1bmN0aW9uIGh0KHQsZSxyLG4pe3ZhciBhPXQ8MCxvPWUuX3RpY2tyb3VuZCxsPXJ8fGUuZXhwb25lbnRmb3JtYXR8fCJCIixjPWUuX3RpY2tleHBvbmVudCx1PVYuZ2V0VGlja0Zvcm1hdChlKSxmPWUuc2VwYXJhdGV0aG91c2FuZHM7aWYobil7dmFyIGg9e2V4cG9uZW50Zm9ybWF0OmwsbWluZXhwb25lbnQ6ZS5taW5leHBvbmVudCxkdGljazoibm9uZSI9PT1lLnNob3dleHBvbmVudD9lLmR0aWNrOmkodCkmJk1hdGguYWJzKHQpfHwxLHJhbmdlOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UucmFuZ2UubWFwKGUucjJkKTpbMCx0fHwxXX07c3QoaCksbz0oTnVtYmVyKGguX3RpY2tyb3VuZCl8fDApKzQsYz1oLl90aWNrZXhwb25lbnQsZS5ob3ZlcmZvcm1hdCYmKHU9ZS5ob3ZlcmZvcm1hdCl9aWYodSlyZXR1cm4gZS5fbnVtRm9ybWF0KHUpKHQpLnJlcGxhY2UoLy0vZyxQKTt2YXIgcCxkPU1hdGgucG93KDEwLC1vKS8yO2lmKCJub25lIj09PWwmJihjPTApLCh0PU1hdGguYWJzKHQpKTxkKXQ9IjAiLGE9ITE7ZWxzZXtpZih0Kz1kLGMmJih0Kj1NYXRoLnBvdygxMCwtYyksbys9YyksMD09PW8pdD1TdHJpbmcoTWF0aC5mbG9vcih0KSk7ZWxzZSBpZihvPDApe3Q9KHQ9U3RyaW5nKE1hdGgucm91bmQodCkpKS5zdWJzdHIoMCx0Lmxlbmd0aCtvKTtmb3IodmFyIG09bzttPDA7bSsrKXQrPSIwIn1lbHNle3ZhciBnPSh0PVN0cmluZyh0KSkuaW5kZXhPZigiLiIpKzE7ZyYmKHQ9dC5zdWJzdHIoMCxnK28pLnJlcGxhY2UoL1wuPzArJC8sIiIpKX10PXMubnVtU2VwYXJhdGUodCxlLl9zZXBhcmF0b3JzLGYpfWMmJiJoaWRlIiE9PWwmJih1dChsKSYmZnQoYykmJihsPSJwb3dlciIpLHA9YzwwP1ArLWM6InBvd2VyIiE9PWw/IisiK2M6U3RyaW5nKGMpLCJlIj09PWx8fCJFIj09PWw/dCs9bCtwOiJwb3dlciI9PT1sP3QrPSJceGQ3MTA8c3VwPiIrcCsiPC9zdXA+IjoiQiI9PT1sJiY5PT09Yz90Kz0iQiI6dXQobCkmJih0Kz1jdFtjLzMrNV0pKTtyZXR1cm4gYT9QK3Q6dH1mdW5jdGlvbiBwdCh0LGUpe2Zvcih2YXIgcj1bXSxuPXt9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtuW2EudGV4dDJdP25bYS50ZXh0Ml0ucHVzaChhLngpOm5bYS50ZXh0Ml09W2EueF19Zm9yKHZhciBvIGluIG4pci5wdXNoKGx0KHQscy5pbnRlcnAobltvXSwuNSksbykpO3JldHVybiByfWZ1bmN0aW9uIGR0KHQpe3JldHVybiB2b2lkIDAhPT10LnBlcmlvZFg/dC5wZXJpb2RYOnQueH1mdW5jdGlvbiBtdCh0KXtyZXR1cm5bdC50ZXh0LHQueCx0LmF4SW5mbyx0LmZvbnQsdC5mb250U2l6ZSx0LmZvbnRDb2xvcl0uam9pbigiXyIpfWZ1bmN0aW9uIGd0KHQpe3ZhciBlPXQudGl0bGUuZm9udC5zaXplLHI9KHQudGl0bGUudGV4dC5tYXRjaChjLkJSX1RBR19BTEwpfHxbXSkubGVuZ3RoO3JldHVybiB0LnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpP3I/ZSooTityKmopOmUqTjpyP2UqKHIrMSkqajplfWZ1bmN0aW9uIHZ0KHQsZSl7dmFyIHI9dC5sMnAoZSk7cmV0dXJuIHI+MSYmcjx0Ll9sZW5ndGgtMX1mdW5jdGlvbiB5dCh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPWUuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIik7cmV0dXJuIHIuZW1wdHkoKT9lLnNlbGVjdCgidGV4dCIpOnJ9ZnVuY3Rpb24geHQodCl7cmV0dXJuIHQuX2lkKyIuYXV0b21hcmdpbiJ9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIHh0KHQpKyIubWlycm9yIn1mdW5jdGlvbiBfdCh0KXtyZXR1cm4gdC5faWQrIi5yYW5nZXNsaWRlciJ9ZnVuY3Rpb24gd3QodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyktMT09PXQuaW5kZXhPZihlW3JdKSYmdC5wdXNoKGVbcl0pfWZ1bmN0aW9uIFR0KHQsZSxyKXt2YXIgbixpLGE9W10sbz1bXSxsPXQubGF5b3V0O2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspYS5wdXNoKFYuZ2V0RnJvbUlkKHQsZVtuXSkpO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspby5wdXNoKFYuZ2V0RnJvbUlkKHQscltuXSkpO3ZhciBjPU9iamVjdC5rZXlzKHApLHU9WyJhbmNob3IiLCJkb21haW4iLCJvdmVybGF5aW5nIiwicG9zaXRpb24iLCJzaWRlIiwidGlja2FuZ2xlIiwiZWRpdFR5cGUiXSxmPVsibGluZWFyIiwibG9nIl07Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGg9Y1tuXSxkPWFbMF1baF0sbT1vWzBdW2hdLGc9ITAsdj0hMSx5PSExO2lmKCJfIiE9PWguY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgZCYmLTE9PT11LmluZGV4T2YoaCkpe2ZvcihpPTE7aTxhLmxlbmd0aCYmZztpKyspe3ZhciB4PWFbaV1baF07InR5cGUiPT09aCYmLTEhPT1mLmluZGV4T2YoZCkmJi0xIT09Zi5pbmRleE9mKHgpJiZkIT09eD92PSEwOnghPT1kJiYoZz0hMSl9Zm9yKGk9MTtpPG8ubGVuZ3RoJiZnO2krKyl7dmFyIGI9b1tpXVtoXTsidHlwZSI9PT1oJiYtMSE9PWYuaW5kZXhPZihtKSYmLTEhPT1mLmluZGV4T2YoYikmJm0hPT1iP3k9ITA6b1tpXVtoXSE9PW0mJihnPSExKX1nJiYodiYmKGxbYVswXS5fbmFtZV0udHlwZT0ibGluZWFyIikseSYmKGxbb1swXS5fbmFtZV0udHlwZT0ibGluZWFyIiksa3QobCxoLGEsbyx0Ll9mdWxsTGF5b3V0Ll9kZmx0VGl0bGUpKX19Zm9yKG49MDtuPHQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMubGVuZ3RoO24rKyl7dmFyIF89dC5fZnVsbExheW91dC5hbm5vdGF0aW9uc1tuXTstMSE9PWUuaW5kZXhPZihfLnhyZWYpJiYtMSE9PXIuaW5kZXhPZihfLnlyZWYpJiZzLnN3YXBBdHRycyhsLmFubm90YXRpb25zW25dLFsiPyJdKX19ZnVuY3Rpb24ga3QodCxlLHIsbixpKXt2YXIgYSxvPXMubmVzdGVkUHJvcGVydHksbD1vKHRbclswXS5fbmFtZV0sZSkuZ2V0KCksYz1vKHRbblswXS5fbmFtZV0sZSkuZ2V0KCk7Zm9yKCJ0aXRsZSI9PT1lJiYobCYmbC50ZXh0PT09aS54JiYobC50ZXh0PWkueSksYyYmYy50ZXh0PT09aS55JiYoYy50ZXh0PWkueCkpLGE9MDthPHIubGVuZ3RoO2ErKylvKHQsclthXS5fbmFtZSsiLiIrZSkuc2V0KGMpO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspbyh0LG5bYV0uX25hbWUrIi4iK2UpLnNldChsKX1mdW5jdGlvbiBBdCh0KXtyZXR1cm4iYW5ndWxhcmF4aXMiPT09dC5faWR9ZnVuY3Rpb24gTXQodCxlKXtmb3IodmFyIHI9ZS5fcmFuZ2VicmVha3MubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT1lLl9yYW5nZWJyZWFrc1tuXTtpZih0Pj1pLm1pbiYmdDxpLm1heClyZXR1cm4gaS5tYXh9cmV0dXJuIHR9ZnVuY3Rpb24gU3QodCl7cmV0dXJuLTEhPT0odC50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpfWZ1bmN0aW9uIEV0KHQsZSl7U3QodC5fYW5jaG9yQXhpc3x8e30pJiZ0Ll9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzJiZ0Ll9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzKGUpfVYuZ2V0VGlja0Zvcm1hdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsO2Z1bmN0aW9uIGModCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0P3Q6TnVtYmVyKHQucmVwbGFjZSgiTSIsIiIpKSpUfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1bIkwiLCJEIl07aWYodHlwZW9mIHQ9PXR5cGVvZiBlKXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQtZTt2YXIgbj1yLmluZGV4T2YodC5jaGFyQXQoMCkpLGk9ci5pbmRleE9mKGUuY2hhckF0KDApKTtyZXR1cm4gbj09PWk/TnVtYmVyKHQucmVwbGFjZSgvKEx8RCkvZywiIikpLU51bWJlcihlLnJlcGxhY2UoLyhMfEQpL2csIiIpKTpuLWl9cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0PzE6LTF9ZnVuY3Rpb24gZih0LGUpe3ZhciByPW51bGw9PT1lWzBdLG49bnVsbD09PWVbMV0saT11KHQsZVswXSk+PTAsYT11KHQsZVsxXSk8PTA7cmV0dXJuKHJ8fGkpJiYobnx8YSl9aWYodC50aWNrZm9ybWF0c3RvcHMmJnQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aD4wKXN3aXRjaCh0LnR5cGUpe2Nhc2UiZGF0ZSI6Y2FzZSJsaW5lYXIiOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiYoaT10LmR0aWNrLGE9bi5kdGlja3JhbmdlLG89dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLG89Y3x8ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHM9YVswXSxsPWFbMV0sKCFzJiYibnVtYmVyIiE9dHlwZW9mIHN8fG8ocyk8PW8oaSkpJiYoIWwmJiJudW1iZXIiIT10eXBlb2YgbHx8byhsKT49byhpKSkpKXtyPW47YnJlYWt9YnJlYWs7Y2FzZSJsb2ciOmZvcihlPTA7ZTx0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg7ZSsrKWlmKChuPXQudGlja2Zvcm1hdHN0b3BzW2VdKS5lbmFibGVkJiZmKHQuZHRpY2ssbi5kdGlja3JhbmdlKSl7cj1uO2JyZWFrfX1yZXR1cm4gcj9yLnZhbHVlOnQudGlja2Zvcm1hdH0sVi5nZXRTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLG49ci5jYXJ0ZXNpYW4uY29uY2F0KHIuZ2wyZHx8W10pLGk9ZT9WLmZpbmRTdWJwbG90c1dpdGhBeGlzKG4sZSk6bjtyZXR1cm4gaS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3Vic3RyKDEpLnNwbGl0KCJ5Iiksbj1lLnN1YnN0cigxKS5zcGxpdCgieSIpO3JldHVybiByWzBdPT09blswXT8rclsxXS0rblsxXTorclswXS0rblswXX0pKSxpfSxWLmZpbmRTdWJwbG90c1dpdGhBeGlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBSZWdFeHAoIngiPT09ZS5faWQuY2hhckF0KDApPyJeIitlLl9pZCsieSI6ZS5faWQrIiQiKSxuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTtyLnRlc3QoYSkmJm4ucHVzaChhKX1yZXR1cm4gbn0sVi5tYWtlQ2xpcFBhdGhzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoIWUuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIHIsaSxhPXtfb2Zmc2V0OjAsX2xlbmd0aDplLndpZHRoLF9pZDoiIn0sbz17X29mZnNldDowLF9sZW5ndGg6ZS5oZWlnaHQsX2lkOiIifSxzPVYubGlzdCh0LCJ4IiwhMCksbD1WLmxpc3QodCwieSIsITApLGM9W107Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylmb3IoYy5wdXNoKHt4OnNbcl0seTpvfSksaT0wO2k8bC5sZW5ndGg7aSsrKTA9PT1yJiZjLnB1c2goe3g6YSx5OmxbaV19KSxjLnB1c2goe3g6c1tyXSx5OmxbaV19KTt2YXIgdT1lLl9jbGlwcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLmRhdGEoYywoZnVuY3Rpb24odCl7cmV0dXJuIHQueC5faWQrdC55Ll9pZH0pKTt1LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImF4ZXNjbGlwIiwhMCkuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4iY2xpcCIrZS5fdWlkK3QueC5faWQrdC55Ll9pZH0pKS5hcHBlbmQoInJlY3QiKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6dC54Ll9vZmZzZXR8fDAseTp0LnkuX29mZnNldHx8MCx3aWR0aDp0LnguX2xlbmd0aHx8MSxoZWlnaHQ6dC55Ll9sZW5ndGh8fDF9KX0pKX19LFYuZHJhdz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDsicmVkcmF3Ij09PWUmJm4uX3BhcGVyLnNlbGVjdEFsbCgiZy5zdWJwbG90IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPW4uX3Bsb3RzW2VdO2lmKHIpe3ZhciBpPXIueGF4aXMsYT1yLnlheGlzO3IueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJ0aWNrIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci5ncmlkbGF5ZXImJnIuZ3JpZGxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHIuemVyb2xpbmVsYXllciYmci56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIraS5faWQrInRpdGxlIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIithLl9pZCsidGl0bGUiKS5yZW1vdmUoKX19KSk7dmFyIGk9ZSYmInJlZHJhdyIhPT1lP2U6Vi5saXN0SWRzKHQpO3JldHVybiBzLnN5bmNPckFzeW5jKGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt2YXIgbj1WLmdldEZyb21JZCh0LGUpLGk9Vi5kcmF3T25lKHQsbixyKTtyZXR1cm4gbi5fcj1uLnJhbmdlLnNsaWNlKCksbi5fcmw9cy5zaW1wbGVNYXAobi5fcixuLnIybCksaX19fSkpKX0sVi5kcmF3T25lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGw7cj1yfHx7fSxlLnNldFNjYWxlKCk7dmFyIGM9dC5fZnVsbExheW91dCxwPWUuX2lkLGQ9cC5jaGFyQXQoMCksbT1WLmNvdW50ZXJMZXR0ZXIocCksZz1jLl9wbG90c1tlLl9tYWluU3VicGxvdF07aWYoZyl7dmFyIHY9Z1tkKyJheGlzbGF5ZXIiXSx5PWUuX21haW5MaW5lUG9zaXRpb24seD1lLl9tYWluTWlycm9yUG9zaXRpb24sYj1lLl92YWxzPVYuY2FsY1RpY2tzKGUpLF89W2UubWlycm9yLHkseF0uam9pbigiXyIpO2ZvcihuPTA7bjxiLmxlbmd0aDtuKyspYltuXS5heEluZm89XztlLl9zZWxlY3Rpb25zPXt9LGUuX3RpY2tBbmdsZXMmJihlLl9wcmV2VGlja0FuZ2xlcz1lLl90aWNrQW5nbGVzKSxlLl90aWNrQW5nbGVzPXt9LGUuX2RlcHRoPW51bGw7dmFyIHc9e307aWYoZS52aXNpYmxlKXt2YXIgVCxrLEE9Vi5tYWtlVHJhbnNUaWNrRm4oZSksTT1WLm1ha2VUcmFuc1RpY2tMYWJlbEZuKGUpLFM9Imluc2lkZSI9PT1lLnRpY2tzLEU9Im91dHNpZGUiPT09ZS50aWNrcztpZigiYm91bmRhcmllcyI9PT1lLnRpY2tzb24pe3ZhciBMPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1bXSxpPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZuLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYoZS5sZW5ndGgpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaShlW3JdLDApO2koZVtyLTFdLDEpfXJldHVybiBufSgwLGIpO2s9Vi5jbGlwRW5kcyhlLEwpLFQ9Uz9rOkx9ZWxzZSBrPVYuY2xpcEVuZHMoZSxiKSxUPVMmJiJwZXJpb2QiIT09ZS50aWNrbGFiZWxtb2RlP2s6Yjt2YXIgQz1lLl9ncmlkVmFscz1rLFA9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9W10sYT1lLmxlbmd0aCYmZVtlLmxlbmd0aC0xXS54PGVbMF0ueCxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZpLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYodC5zaG93ZGl2aWRlcnMmJmUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbD1lW3JdO2wudGV4dDIhPT1uJiZvKGwsYT8xOjApLG49bC50ZXh0Mn1vKGVbci0xXSxhPzA6MSl9cmV0dXJuIGl9KGUsYik7aWYoIWMuX2hhc09ubHlMYXJnZVNwbG9tcyl7dmFyIEk9ZS5fc3VicGxvdHNXaXRoLE89e307Zm9yKG49MDtuPEkubGVuZ3RoO24rKyl7aT1JW25dO3ZhciB6PShsPWMuX3Bsb3RzW2ldKVttKyJheGlzIl0sRD16Ll9tYWluQXhpcy5faWQ7aWYoIU9bRF0pe09bRF09MTt2YXIgUj0ieCI9PT1kPyJNMCwiK3ouX29mZnNldCsidiIrei5fbGVuZ3RoOiJNIit6Ll9vZmZzZXQrIiwwaCIrei5fbGVuZ3RoO1YuZHJhd0dyaWQodCxlLHt2YWxzOkMsY291bnRlckF4aXM6eixsYXllcjpsLmdyaWRsYXllci5zZWxlY3QoIi4iK3ApLHBhdGg6Uix0cmFuc0ZuOkF9KSxWLmRyYXdaZXJvTGluZSh0LGUse2NvdW50ZXJBeGlzOnosbGF5ZXI6bC56ZXJvbGluZWxheWVyLHBhdGg6Uix0cmFuc0ZuOkF9KX19fXZhciBGPVYuZ2V0VGlja1NpZ25zKGUpLEI9W107aWYoZS50aWNrcyl7dmFyIE4sSCxxLEc9Vi5tYWtlVGlja1BhdGgoZSx5LEZbMl0pO2lmKGUuX2FuY2hvckF4aXMmJmUubWlycm9yJiYhMCE9PWUubWlycm9yPyhOPVYubWFrZVRpY2tQYXRoKGUseCxGWzNdKSxIPUcrTik6KE49IiIsSD1HKSxlLnNob3dkaXZpZGVycyYmRSYmImJvdW5kYXJpZXMiPT09ZS50aWNrc29uKXt2YXIgWT17fTtmb3Iobj0wO248UC5sZW5ndGg7bisrKVlbUFtuXS54XT0xO3E9ZnVuY3Rpb24odCl7cmV0dXJuIFlbdC54XT9OOkh9fWVsc2UgcT1IO1YuZHJhd1RpY2tzKHQsZSx7dmFsczpULGxheWVyOnYscGF0aDpxLHRyYW5zRm46QX0pLCJhbGx0aWNrcyI9PT1lLm1pcnJvciYmKEI9T2JqZWN0LmtleXMoZS5fbGluZXBvc2l0aW9uc3x8e30pKX1mb3Iobj0wO248Qi5sZW5ndGg7bisrKXtpPUJbbl0sbD1jLl9wbG90c1tpXTt2YXIgVz1lLl9saW5lcG9zaXRpb25zW2ldfHxbXSxYPVYubWFrZVRpY2tQYXRoKGUsV1swXSxGWzBdKStWLm1ha2VUaWNrUGF0aChlLFdbMV0sRlsxXSk7Vi5kcmF3VGlja3ModCxlLHt2YWxzOlQsbGF5ZXI6bFtkKyJheGlzbGF5ZXIiXSxwYXRoOlgsdHJhbnNGbjpBfSl9dmFyIFo9W107aWYoWi5wdXNoKChmdW5jdGlvbigpe3JldHVybiBWLmRyYXdMYWJlbHModCxlLHt2YWxzOmIsbGF5ZXI6dixwbG90aW5mbzpsLHRyYW5zRm46TSxsYWJlbEZuczpWLm1ha2VMYWJlbEZucyhlLHkpfSl9KSksIm11bHRpY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgSj17eDoyLHk6MTB9W2RdO1oucHVzaCgoZnVuY3Rpb24oKXt2YXIgcj17eDoiaGVpZ2h0Iix5OiJ3aWR0aCJ9W2RdLG49USgpW3JdK0orKGUuX3RpY2tBbmdsZXNbcCsidGljayJdP2UudGlja2ZvbnQuc2l6ZSpqOjApO3JldHVybiBWLmRyYXdMYWJlbHModCxlLHt2YWxzOnB0KGUsYiksbGF5ZXI6dixjbHM6cCsidGljazIiLHJlcG9zaXRpb25PblVwZGF0ZTohMCxzZWNvbmRhcnk6ITAsdHJhbnNGbjpBLGxhYmVsRm5zOlYubWFrZUxhYmVsRm5zKGUseStuKkZbNF0pfSl9KSksWi5wdXNoKChmdW5jdGlvbigpe3JldHVybiBlLl9kZXB0aD1GWzRdKihRKCJ0aWNrMiIpW2Uuc2lkZV0teSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX2lkKyJkaXZpZGVyIixpPXIudmFscyxhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShpLG10KTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKGYuc3Ryb2tlLGUuZGl2aWRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmNyaXNwUm91bmQodCxlLmRpdmlkZXJ3aWR0aCwxKSsicHgiKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpfSh0LGUse3ZhbHM6UCxsYXllcjp2LHBhdGg6Vi5tYWtlVGlja1BhdGgoZSx5LEZbNF0sZS5fZGVwdGgpLHRyYW5zRm46QX0pfSkpfWVsc2UgZS50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSYmWi5wdXNoKChmdW5jdGlvbigpe2UuX2RlcHRoPUZbNF0qKFEoKVtlLnNpZGVdLXkpfSkpO3ZhciBLPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKGUpO3JldHVybiBaLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHIsbixpLHMsbD1lLnNpZGUuY2hhckF0KDApLHU9VVtlLnNpZGVdLmNoYXJBdCgwKSxmPVYuZ2V0UHhQb3NpdGlvbih0LGUpLGg9RT9lLnRpY2tsZW46MDtpZigoZS5hdXRvbWFyZ2lufHxLKSYmKCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZT9yPVEoInRpY2syIik6KHI9USgpLCJ4Ij09PWQmJiJiIj09PWwmJihlLl9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/ci5ib3R0b20tZjowLGgpKSkpLGUuYXV0b21hcmdpbil7bj17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9O3ZhciBwPVswLDFdO2lmKCJ4Ij09PWQpe2lmKCJiIj09PWw/bltsXT1lLl9kZXB0aDoobltsXT1lLl9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/Zi1yLnRvcDowLGgpLHAucmV2ZXJzZSgpKSxyLndpZHRoPjApe3ZhciBnPXIucmlnaHQtKGUuX29mZnNldCtlLl9sZW5ndGgpO2c+MCYmKG4ueHI9MSxuLnI9Zyk7dmFyIHY9ZS5fb2Zmc2V0LXIubGVmdDt2PjAmJihuLnhsPTAsbi5sPXYpfX1lbHNlIGlmKCJsIj09PWw/bltsXT1lLl9kZXB0aD1NYXRoLm1heChyLmhlaWdodD4wP2Ytci5sZWZ0OjAsaCk6KG5bbF09ZS5fZGVwdGg9TWF0aC5tYXgoci5oZWlnaHQ+MD9yLnJpZ2h0LWY6MCxoKSxwLnJldmVyc2UoKSksci5oZWlnaHQ+MCl7dmFyIHk9ci5ib3R0b20tKGUuX29mZnNldCtlLl9sZW5ndGgpO3k+MCYmKG4ueWI9MCxuLmI9eSk7dmFyIHg9ZS5fb2Zmc2V0LXIudG9wO3g+MCYmKG4ueXQ9MSxuLnQ9eCl9blttXT0iZnJlZSI9PT1lLmFuY2hvcj9lLnBvc2l0aW9uOmUuX2FuY2hvckF4aXMuZG9tYWluW3BbMF1dLGUudGl0bGUudGV4dCE9PWMuX2RmbHRUaXRsZVtkXSYmKG5bbF0rPWd0KGUpKyhlLnRpdGxlLnN0YW5kb2ZmfHwwKSksZS5taXJyb3ImJiJmcmVlIiE9PWUuYW5jaG9yJiYoKGk9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfSlbdV09ZS5saW5ld2lkdGgsZS5taXJyb3ImJiEwIT09ZS5taXJyb3ImJihpW3VdKz1oKSwhMD09PWUubWlycm9yfHwidGlja3MiPT09ZS5taXJyb3I/aVttXT1lLl9hbmNob3JBeGlzLmRvbWFpbltwWzFdXToiYWxsIiE9PWUubWlycm9yJiYiYWxsdGlja3MiIT09ZS5taXJyb3J8fChpW21dPVtlLl9jb3VudGVyRG9tYWluTWluLGUuX2NvdW50ZXJEb21haW5NYXhdW3BbMV1dKSl9SyYmKHM9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiYXV0b01hcmdpbk9wdHMiKSh0LGUpKSxhLmF1dG9NYXJnaW4odCx4dChlKSxuKSxhLmF1dG9NYXJnaW4odCxidChlKSxpKSxhLmF1dG9NYXJnaW4odCxfdChlKSxzKX0pKSxyLnNraXBUaXRsZXx8SyYmImJvdHRvbSI9PT1lLnNpZGV8fFoucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQsaT1lLl9pZCxhPWkuY2hhckF0KDApLG89ZS50aXRsZS5mb250LnNpemU7aWYoZS50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSlyPWUuX2RlcHRoK2UudGl0bGUuc3RhbmRvZmYrZ3QoZSk7ZWxzZXt2YXIgcz1TdChlKTtpZigibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcj1lLl9kZXB0aDtlbHNle3ZhciBsPTEuNSpvO3MmJihsPS41Km8sIm91dHNpZGUiPT09ZS50aWNrcyYmKGwrPWUudGlja2xlbikpLHI9MTArbCsoZS5saW5ld2lkdGg/ZS5saW5ld2lkdGgtMTowKX1zfHwocis9IngiPT09YT8idG9wIj09PWUuc2lkZT9vKihlLnNob3d0aWNrbGFiZWxzPzE6MCk6byooZS5zaG93dGlja2xhYmVscz8xLjU6LjUpOiJyaWdodCI9PT1lLnNpZGU/byooZS5zaG93dGlja2xhYmVscz8xOi41KTpvKihlLnNob3d0aWNrbGFiZWxzPy41OjApKX12YXIgYyxmLHAsZCxtPVYuZ2V0UHhQb3NpdGlvbih0LGUpOyJ4Ij09PWE/KGY9ZS5fb2Zmc2V0K2UuX2xlbmd0aC8yLHA9InRvcCI9PT1lLnNpZGU/bS1yOm0rcik6KHA9ZS5fb2Zmc2V0K2UuX2xlbmd0aC8yLGY9InJpZ2h0Ij09PWUuc2lkZT9tK3I6bS1yLGM9e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH0pO2lmKCJtdWx0aWNhdGVnb3J5IiE9PWUudHlwZSl7dmFyIGc9ZS5fc2VsZWN0aW9uc1tlLl9pZCsidGljayJdO2lmKGQ9e3NlbGVjdGlvbjpnLHNpZGU6ZS5zaWRlfSxnJiZnLm5vZGUoKSYmZy5ub2RlKCkucGFyZW50Tm9kZSl7dmFyIHY9aC5nZXRUcmFuc2xhdGUoZy5ub2RlKCkucGFyZW50Tm9kZSk7ZC5vZmZzZXRMZWZ0PXYueCxkLm9mZnNldFRvcD12Lnl9ZS50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSYmKGQucGFkPTApfXJldHVybiB1LmRyYXcodCxpKyJ0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZTplLl9uYW1lKyIudGl0bGUudGV4dCIscGxhY2Vob2xkZXI6bi5fZGZsdFRpdGxlW2FdLGF2b2lkOmQsdHJhbnNmb3JtOmMsYXR0cmlidXRlczp7eDpmLHk6cCwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfSh0LGUpfSkpLHMuc3luY09yQXN5bmMoWil9fWZ1bmN0aW9uIFEodCl7dmFyIHI9cCsodHx8InRpY2siKTtyZXR1cm4gd1tyXXx8KHdbcl09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYTt0Ll9zZWxlY3Rpb25zW2VdLnNpemUoKT8ocj0xLzAsbj0tMS8wLGk9MS8wLGE9LTEvMCx0Ll9zZWxlY3Rpb25zW2VdLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9eXQodGhpcyksZT1oLmJCb3godC5ub2RlKCkucGFyZW50Tm9kZSk7cj1NYXRoLm1pbihyLGUudG9wKSxuPU1hdGgubWF4KG4sZS5ib3R0b20pLGk9TWF0aC5taW4oaSxlLmxlZnQpLGE9TWF0aC5tYXgoYSxlLnJpZ2h0KX0pKSk6KHI9MCxuPTAsaT0wLGE9MCk7cmV0dXJue3RvcDpyLGJvdHRvbTpuLGxlZnQ6aSxyaWdodDphLGhlaWdodDpuLXIsd2lkdGg6YS1pfX0oZSxyKSksd1tyXX19LFYuZ2V0VGlja1NpZ25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2lkLmNoYXJBdCgwKSxyPXt4OiJ0b3AiLHk6InJpZ2h0In1bZV0sbj10LnNpZGU9PT1yPzE6LTEsaT1bLTEsMSxuLC1uXTtyZXR1cm4iaW5zaWRlIiE9PXQudGlja3M9PSgieCI9PT1lKSYmKGk9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSx0LnNpZGUmJmkucHVzaCh7bDotMSx0Oi0xLHI6MSxiOjF9W3Quc2lkZS5jaGFyQXQoMCldKSxpfSxWLm1ha2VUcmFuc1RpY2tGbj1mdW5jdGlvbih0KXtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZnVuY3Rpb24oZSl7cmV0dXJuIGwodC5fb2Zmc2V0K3QubDJwKGUueCksMCl9OmZ1bmN0aW9uKGUpe3JldHVybiBsKDAsdC5fb2Zmc2V0K3QubDJwKGUueCkpfX0sVi5tYWtlVHJhbnNUaWNrTGFiZWxGbj1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT10LnRpY2tsYWJlbHBvc2l0aW9ufHwiIixyPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09ZS5pbmRleE9mKHQpfSxuPXIoInRvcCIpLGk9cigibGVmdCIpLGE9cigicmlnaHQiKSxvPXIoImJvdHRvbSIpLHM9cigiaW5zaWRlIiksbD1vfHxpfHxufHxhO2lmKCFsJiYhcylyZXR1cm5bMCwwXTt2YXIgYz10LnNpZGUsdT1sPyh0LnRpY2t3aWR0aHx8MCkvMjowLGY9MyxoPXQudGlja2ZvbnQ/dC50aWNrZm9udC5zaXplOjEyOyhvfHxuKSYmKHUrPWgqTixmKz0odC5saW5ld2lkdGh8fDApLzIpOyhpfHxhKSYmKHUrPSh0LmxpbmV3aWR0aHx8MCkvMixmKz0zKTtzJiYidG9wIj09PWMmJihmLT1oKigxLU4pKTsoaXx8bikmJih1PS11KTsiYm90dG9tIiE9PWMmJiJyaWdodCIhPT1jfHwoZj0tZik7cmV0dXJuW2w/dTowLHM/ZjowXX0odCkscj1lWzBdLG49ZVsxXTtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZnVuY3Rpb24oZSl7cmV0dXJuIGwocit0Ll9vZmZzZXQrdC5sMnAoZHQoZSkpLG4pfTpmdW5jdGlvbihlKXtyZXR1cm4gbChuLHIrdC5fb2Zmc2V0K3QubDJwKGR0KGUpKSl9fSxWLm1ha2VUaWNrUGF0aD1mdW5jdGlvbih0LGUscixuKXtuPXZvaWQgMCE9PW4/bjp0LnRpY2tsZW47dmFyIGk9dC5faWQuY2hhckF0KDApLGE9KHQubGluZXdpZHRofHwxKS8yO3JldHVybiJ4Ij09PWk/Ik0wLCIrKGUrYSpyKSsidiIrbipyOiJNIisoZSthKnIpKyIsMGgiK24qcn0sVi5tYWtlTGFiZWxGbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQudGlja2xhYmVscG9zaXRpb258fCIiLGE9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1uLmluZGV4T2YodCl9LG89YSgidG9wIiksbD1hKCJsZWZ0IiksYz1hKCJyaWdodCIpLHU9YSgiYm90dG9tIil8fGx8fG98fGMsZj1hKCJpbnNpZGUiKSxoPSJpbnNpZGUiPT09biYmImluc2lkZSI9PT10LnRpY2tzfHwhZiYmIm91dHNpZGUiPT09dC50aWNrcyYmImJvdW5kYXJpZXMiIT09dC50aWNrc29uLHA9MCxkPTAsbT1oP3QudGlja2xlbjowO2lmKGY/bSo9LTE6dSYmKG09MCksaCYmKHArPW0scikpe3ZhciBnPXMuZGVnMnJhZChyKTtwPW0qTWF0aC5jb3MoZykrMSxkPW0qTWF0aC5zaW4oZyl9dC5zaG93dGlja2xhYmVscyYmKGh8fHQuc2hvd2xpbmUpJiYocCs9LjIqdC50aWNrZm9udC5zaXplKTt2YXIgdix5LHgsYixfLHc9e2xhYmVsU3RhbmRvZmY6cCs9KHQubGluZXdpZHRofHwxKS8yKihmPy0xOjEpLGxhYmVsU2hpZnQ6ZH0sVD0wLGs9dC5zaWRlLEE9dC5faWQuY2hhckF0KDApLE09dC50aWNrYW5nbGU7aWYoIngiPT09QSliPShfPSFmJiYiYm90dG9tIj09PWt8fGYmJiJ0b3AiPT09ayk/MTotMSxmJiYoYio9LTEpLHY9ZCpiLHk9ZStwKmIseD1fPzE6LS4yLDkwPT09TWF0aC5hYnMoTSkmJihmP3grPUI6eD0tOTA9PT1NJiYiYm90dG9tIj09PWs/Tjo5MD09PU0mJiJ0b3AiPT09az9COi41LFQ9Qi8yKihNLzkwKSksdy54Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrditUKnQuZm9udFNpemV9LHcueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K3krdC5mb250U2l6ZSp4fSx3LmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7aWYodSl7aWYobClyZXR1cm4iZW5kIjtpZihjKXJldHVybiJzdGFydCJ9cmV0dXJuIGkoZSkmJjAhPT1lJiYxODAhPT1lP2UqYjwwIT09Zj8iZW5kIjoic3RhcnQiOiJtaWRkbGUifSx3LmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcjwtNjB8fHI+NjA/LS41Km46InRvcCI9PT10LnNpZGUhPT1mPy1uOjB9O2Vsc2UgaWYoInkiPT09QSl7aWYoYj0oXz0hZiYmImxlZnQiPT09a3x8ZiYmInJpZ2h0Ij09PWspPzE6LTEsZiYmKGIqPS0xKSx2PXAseT1kKmIseD0wLGZ8fDkwIT09TWF0aC5hYnMoTSl8fCh4PS05MD09PU0mJiJsZWZ0Ij09PWt8fDkwPT09TSYmInJpZ2h0Ij09PWs/TjouNSksZil7dmFyIFM9aShNKT8rTTowO2lmKDAhPT1TKXt2YXIgRT1zLmRlZzJyYWQoUyk7VD1NYXRoLmFicyhNYXRoLnNpbihFKSkqTipiLHg9MH19dy54Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrZS0odit0LmZvbnRTaXplKngpKmIrVCp0LmZvbnRTaXplfSx3LnlGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keSt5K3QuZm9udFNpemUqQn0sdy5hbmNob3JGbj1mdW5jdGlvbih0LGUpe3JldHVybiBpKGUpJiY5MD09PU1hdGguYWJzKGUpPyJtaWRkbGUiOl8/ImVuZCI6InN0YXJ0In0sdy5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuInJpZ2h0Ij09PXQuc2lkZSYmKHIqPS0xKSxyPC0zMD8tbjpyPDMwPy0uNSpuOjB9fXJldHVybiB3fSxWLmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCsidGljayIsaT1yLnZhbHM7InBlcmlvZCI9PT1lLnRpY2tsYWJlbG1vZGUmJihpPWkuc2xpY2UoKSkuc2hpZnQoKTt2YXIgYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoZS50aWNrcz9pOltdLG10KTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoInRpY2tzIiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKS5jYWxsKGYuc3Ryb2tlLGUudGlja2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmNyaXNwUm91bmQodCxlLnRpY2t3aWR0aCwxKSsicHgiKS5hdHRyKCJkIixyLnBhdGgpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxFdChlLFtEXSksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbil9LFYuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIG49ZS5faWQrImdyaWQiLGk9ci52YWxzLGE9ci5jb3VudGVyQXhpcztpZighMT09PWUuc2hvd2dyaWQpaT1bXTtlbHNlIGlmKGEmJlYuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxhKSlmb3IodmFyIG89ImFycmF5Ij09PWUudGlja21vZGUscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLng7aWYobz8hbDpNYXRoLmFicyhsKTxlLmR0aWNrLzEwMCl7aWYoaT1pLnNsaWNlKDAscykuY29uY2F0KGkuc2xpY2UocysxKSksIW8pYnJlYWs7cy0tfX12YXIgYz1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoaSxtdCk7Yy5leGl0KCkucmVtb3ZlKCksYy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKSxlLl9ndz1oLmNyaXNwUm91bmQodCxlLmdyaWR3aWR0aCwxKSxjLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpLmNhbGwoZi5zdHJva2UsZS5ncmlkY29sb3J8fCIjZGRkIikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5fZ3crInB4Iikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEV0KGUsW3pdKSwiZnVuY3Rpb24iPT10eXBlb2Ygci5wYXRoJiZjLmF0dHIoImQiLHIucGF0aCl9LFYuZHJhd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHI7dmFyIG49ZS5faWQrInpsIixpPVYuc2hvdWxkU2hvd1plcm9MaW5lKHQsZSxyLmNvdW50ZXJBeGlzKSxhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShpP1t7eDowLGlkOmUuX2lkfV06W10pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiemwiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmVhY2goKGZ1bmN0aW9uKCl7ci5sYXllci5zZWxlY3RBbGwoInBhdGgiKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBHKHQuaWQsZS5pZCl9KSl9KSksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKGYuc3Ryb2tlLGUuemVyb2xpbmVjb2xvcnx8Zi5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5jcmlzcFJvdW5kKHQsZS56ZXJvbGluZXdpZHRoLGUuX2d3fHwxKSsicHgiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksRXQoZSxbT10pfSxWLmRyYXdMYWJlbHM9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIGE9dC5fZnVsbExheW91dCxvPWUuX2lkLHU9by5jaGFyQXQoMCksZj1yLmNsc3x8bysidGljayIscD1yLnZhbHMsZD1yLmxhYmVsRm5zLG09ci5zZWNvbmRhcnk/MDplLnRpY2thbmdsZSxnPShlLl9wcmV2VGlja0FuZ2xlc3x8e30pW2ZdLHY9ci5sYXllci5zZWxlY3RBbGwoImcuIitmKS5kYXRhKGUuc2hvd3RpY2tsYWJlbHM/cDpbXSxtdCkseT1bXTtmdW5jdGlvbiB4KHQsYSl7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgbz1uLnNlbGVjdCh0aGlzKSxzPW8uc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksdT1kLmFuY2hvckZuKHQsYSksZj1yLnRyYW5zRm4uY2FsbChvLm5vZGUoKSx0KSsoaShhKSYmMCE9K2E/IiByb3RhdGUoIithKyIsIitkLnhGbih0KSsiLCIrKGQueUZuKHQpLXQuZm9udFNpemUvMikrIikiOiIiKSxwPWMubGluZUNvdW50KG8pLG09aip0LmZvbnRTaXplLGc9ZC5oZWlnaHRGbih0LGkoYSk/K2E6MCwocC0xKSptKTtpZihnJiYoZis9bCgwLGcpKSxzLmVtcHR5KCkpe3ZhciB2PW8uc2VsZWN0KCJ0ZXh0Iik7di5hdHRyKHt0cmFuc2Zvcm06ZiwidGV4dC1hbmNob3IiOnV9KSx2LnN0eWxlKCJvcGFjaXR5IiwxKSxlLl9hZGp1c3RUaWNrTGFiZWxzT3ZlcmZsb3cmJmUuX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdygpfWVsc2V7dmFyIHk9aC5iQm94KHMubm9kZSgpKS53aWR0aCp7ZW5kOi0uNSxzdGFydDouNX1bdV07cy5hdHRyKCJ0cmFuc2Zvcm0iLGYrbCh5LDApKX19KSl9di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZiwxKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9dC5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbChjLnBvc2l0aW9uVGV4dCxkLnhGbihlKSxkLnlGbihlKSkuY2FsbChoLmZvbnQsZS5mb250LGUuZm9udFNpemUsZS5mb250Q29sb3IpLnRleHQoZS50ZXh0KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHQpLHQuX3Byb21pc2VzW2ldP3kucHVzaCh0Ll9wcm9taXNlcy5wb3AoKS50aGVuKChmdW5jdGlvbigpe3gocixtKX0pKSk6eChyLG0pfSkpLEV0KGUsW1JdKSx2LmV4aXQoKS5yZW1vdmUoKSxyLnJlcG9zaXRpb25PblVwZGF0ZSYmdi5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInRleHQiKS5jYWxsKGMucG9zaXRpb25UZXh0LGQueEZuKHQpLGQueUZuKHQpKX0pKSxlLl9hZGp1c3RUaWNrTGFiZWxzT3ZlcmZsb3c9ZnVuY3Rpb24oKXt2YXIgcj1lLnRpY2tsYWJlbG92ZXJmbG93O2lmKHImJiJhbGxvdyIhPT1yKXt2YXIgaT0tMSE9PXIuaW5kZXhPZigiaGlkZSIpLG89IngiPT09ZS5faWQuY2hhckF0KDApLGw9MCxjPW8/dC5fZnVsbExheW91dC53aWR0aDp0Ll9mdWxsTGF5b3V0LmhlaWdodDtpZigtMSE9PXIuaW5kZXhPZigiZG9tYWluIikpe3ZhciB1PXMuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO2w9ZS5sMnAodVswXSkrZS5fb2Zmc2V0LGM9ZS5sMnAodVsxXSkrZS5fb2Zmc2V0fXZhciBmPU1hdGgubWluKGwsYykscD1NYXRoLm1heChsLGMpLGQ9ZS5zaWRlLG09MS8wLGc9LTEvMDtmb3IodmFyIHkgaW4gdi5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLmVtcHR5KCkpe3ZhciBhPWguYkJveChyLm5vZGUoKSkscz0wO28/KGEucmlnaHQ+cHx8YS5sZWZ0PGYpJiYocz0xKTooYS5ib3R0b20+cHx8YS50b3ArKGUudGlja2FuZ2xlPzA6dC5mb250U2l6ZS80KTxmKSYmKHM9MSk7dmFyIGw9ci5zZWxlY3QoInRleHQiKTtzP2kmJmwuc3R5bGUoIm9wYWNpdHkiLDApOihsLnN0eWxlKCJvcGFjaXR5IiwxKSxtPSJib3R0b20iPT09ZHx8InJpZ2h0Ij09PWQ/TWF0aC5taW4obSxvP2EudG9wOmEubGVmdCk6LTEvMCxnPSJ0b3AiPT09ZHx8ImxlZnQiPT09ZD9NYXRoLm1heChnLG8/YS5ib3R0b206YS5yaWdodCk6MS8wKX19KSksYS5fcGxvdHMpe3ZhciB4PWEuX3Bsb3RzW3ldO2lmKGUuX2lkPT09eC54YXhpcy5faWR8fGUuX2lkPT09eC55YXhpcy5faWQpe3ZhciBiPW8/eC55YXhpczp4LnhheGlzO2ImJihiWyJfdmlzaWJsZUxhYmVsTWluXyIrZS5faWRdPW0sYlsiX3Zpc2libGVMYWJlbE1heF8iK2UuX2lkXT1nKX19fX0sZS5faGlkZUNvdW50ZXJBeGlzSW5zaWRlVGlja0xhYmVscz1mdW5jdGlvbih0KXt2YXIgcj0ieCI9PT1lLl9pZC5jaGFyQXQoMCksaT1bXTtmb3IodmFyIG8gaW4gYS5fcGxvdHMpe3ZhciBzPWEuX3Bsb3RzW29dO2UuX2lkIT09cy54YXhpcy5faWQmJmUuX2lkIT09cy55YXhpcy5faWR8fGkucHVzaChyP3MueWF4aXM6cy54YXhpcyl9aS5mb3JFYWNoKChmdW5jdGlvbihyLGkpe3ImJlN0KHIpJiYodHx8W08seixELFJdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbz0idGljayI9PT10LksmJiJ0ZXh0Ij09PXQuTCYmInBlcmlvZCI9PT1lLnRpY2tsYWJlbG1vZGUscz1hLl9wbG90c1tlLl9tYWluU3VicGxvdF07KHQuSz09PU8uSz9zLnplcm9saW5lbGF5ZXIuc2VsZWN0QWxsKCIuIitlLl9pZCsiemwiKTp0Lks9PT16Lks/cy5ncmlkbGF5ZXIuc2VsZWN0QWxsKCIuIitlLl9pZCk6c1tlLl9pZC5jaGFyQXQoMCkrImF4aXNsYXllciJdKS5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uc2VsZWN0KHRoaXMpO3QuTCYmKGE9YS5zZWxlY3RBbGwodC5MKSksYS5lYWNoKChmdW5jdGlvbihhKXt2YXIgcz1lLmwycChvP2R0KGEpOmEueCkrZS5fb2Zmc2V0LGw9bi5zZWxlY3QodGhpcyk7czxlWyJfdmlzaWJsZUxhYmVsTWF4XyIrci5faWRdJiZzPmVbIl92aXNpYmxlTGFiZWxNaW5fIityLl9pZF0/bC5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKToidGljayIhPT10Lkt8fGl8fGwuc3R5bGUoImRpc3BsYXkiLG51bGwpfSkpfSkpfSkpfSkpfSx4KHYsZysxP2c6bSk7dmFyIGI9bnVsbDtlLl9zZWxlY3Rpb25zJiYoZS5fc2VsZWN0aW9uc1tmXT12KTt2YXIgXz1bZnVuY3Rpb24oKXtyZXR1cm4geS5sZW5ndGgmJlByb21pc2UuYWxsKHkpfV07ZS5hdXRvbWFyZ2luJiZhLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50JiY5MD09PWc/KGI9OTAsXy5wdXNoKChmdW5jdGlvbigpe3godixnKX0pKSk6Xy5wdXNoKChmdW5jdGlvbigpe2lmKHgodixtKSxwLmxlbmd0aCYmIngiPT09dSYmIWkobSkmJigibG9nIiE9PWUudHlwZXx8IkQiIT09U3RyaW5nKGUuZHRpY2spLmNoYXJBdCgwKSkpe2I9MDt2YXIgdCxuPTAsYT1bXTtpZih2LmVhY2goKGZ1bmN0aW9uKHQpe249TWF0aC5tYXgobix0LmZvbnRTaXplKTt2YXIgcj1lLmwycCh0LngpLGk9eXQodGhpcyksbz1oLmJCb3goaS5ub2RlKCkpO2EucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OnItby53aWR0aC8yLHJpZ2h0OnIrby53aWR0aC8yKzIsd2lkdGg6by53aWR0aCsyfSl9KSksImJvdW5kYXJpZXMiIT09ZS50aWNrc29uJiYhZS5zaG93ZGl2aWRlcnN8fHIuc2Vjb25kYXJ5KXt2YXIgbz1wLmxlbmd0aCxsPU1hdGguYWJzKChwW28tMV0ueC1wWzBdLngpKmUuX20pLyhvLTEpLGM9ZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIsZj1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PWMuaW5kZXhPZih0KX0sZD1mKCJ0b3AiKSxnPWYoImxlZnQiKSx5PWYoInJpZ2h0IiksXz1mKCJib3R0b20iKXx8Z3x8ZHx8eT8oZS50aWNrd2lkdGh8fDApKzY6MCx3PWw8Mi41Km58fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZXx8InJlYWxheGlzIj09PWUuX25hbWU7Zm9yKHQ9MDt0PGEubGVuZ3RoLTE7dCsrKWlmKHMuYkJveEludGVyc2VjdChhW3RdLGFbdCsxXSxfKSl7Yj13PzkwOjMwO2JyZWFrfX1lbHNle3ZhciBUPTI7Zm9yKGUudGlja3MmJihUKz1lLnRpY2t3aWR0aC8yKSx0PTA7dDxhLmxlbmd0aDt0Kyspe3ZhciBrPXBbdF0ueGJuZCxBPWFbdF07aWYobnVsbCE9PWtbMF0mJkEubGVmdC1lLmwycChrWzBdKTxUfHxudWxsIT09a1sxXSYmZS5sMnAoa1sxXSktQS5yaWdodDxUKXtiPTkwO2JyZWFrfX19YiYmeCh2LGIpfX0pKSxlLl90aWNrQW5nbGVzJiZfLnB1c2goKGZ1bmN0aW9uKCl7ZS5fdGlja0FuZ2xlc1tmXT1udWxsPT09Yj9pKG0pP206MDpifSkpO3ZhciB3PWUuX2FuY2hvckF4aXM7dyYmdy5hdXRvcmFuZ2UmJlN0KGUpJiYhWShhLGUuX2lkKSYmKGEuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2V8fChhLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlPXt9KSxhLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlW3cuX25hbWUrIi5hdXRvcmFuZ2UiXT13LmF1dG9yYW5nZSxfLnB1c2goKGZ1bmN0aW9uKCl7di5lYWNoKChmdW5jdGlvbih0LHIpe3ZhciBuPXl0KHRoaXMpO24uc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSYmKGUuX3ZhbHNbcl0uYmI9aC5iQm94KG4ubm9kZSgpKSl9KSl9KSkpO3ZhciBUPXMuc3luY09yQXN5bmMoXyk7cmV0dXJuIFQmJlQudGhlbiYmdC5fcHJvbWlzZXMucHVzaChUKSxUfSxWLmdldFB4UG9zaXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQuX3NpemUsaT1lLl9pZC5jaGFyQXQoMCksYT1lLnNpZGU7cmV0dXJuImZyZWUiIT09ZS5hbmNob3I/cj1lLl9hbmNob3JBeGlzOiJ4Ij09PWk/cj17X29mZnNldDpuLnQrKDEtKGUucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfToieSI9PT1pJiYocj17X29mZnNldDpuLmwrKGUucG9zaXRpb258fDApKm4udyxfbGVuZ3RoOjB9KSwidG9wIj09PWF8fCJsZWZ0Ij09PWE/ci5fb2Zmc2V0OiJib3R0b20iPT09YXx8InJpZ2h0Ij09PWE/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9LFYuc2hvdWxkU2hvd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtyZXR1cm4gblswXSpuWzFdPD0wJiZlLnplcm9saW5lJiYoImxpbmVhciI9PT1lLnR5cGV8fCItIj09PWUudHlwZSkmJiEoZS5yYW5nZWJyZWFrcyYmZS5tYXNrQnJlYWtzKDApPT09SSkmJih2dChlLDApfHwhZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5fbWFpbkF4aXM7aWYoIWkpcmV0dXJuO3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZC5jaGFyQXQoMCkscz1WLmNvdW50ZXJMZXR0ZXIoZS5faWQpLGw9ZS5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KCJ4Ij09PW8pPzA6ZS5fbGVuZ3RoKTtmdW5jdGlvbiBjKHQpe2lmKCF0LnNob3dsaW5lfHwhdC5saW5ld2lkdGgpcmV0dXJuITE7dmFyIHI9TWF0aC5tYXgoKHQubGluZXdpZHRoK2UuemVyb2xpbmV3aWR0aCkvMiwxKTtmdW5jdGlvbiBuKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmTWF0aC5hYnModC1sKTxyfWlmKG4odC5fbWFpbkxpbmVQb3NpdGlvbil8fG4odC5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgaT10Ll9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGEgaW4gaSlpZihuKGlbYV1bMF0pfHxuKGlbYV1bMV0pKXJldHVybiEwfXZhciB1PWEuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBmPVYubGlzdCh0LHMpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHA9ZltoXTtpZihwLl9tYWluQXhpcz09PWkmJmMocCkpcmV0dXJuITB9fSh0LGUscixuKXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbERhdGEsbj1lLl9tYWluU3VicGxvdCxpPWUuX2lkLmNoYXJBdCgwKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYoITA9PT1zLnZpc2libGUmJnMueGF4aXMrcy55YXhpcz09PW4pe2lmKG8udHJhY2VJcyhzLCJiYXItbGlrZSIpJiZzLm9yaWVudGF0aW9uPT09e3g6ImgiLHk6InYifVtpXSlyZXR1cm4hMDtpZihzLmZpbGwmJnMuZmlsbC5jaGFyQXQocy5maWxsLmxlbmd0aC0xKT09PWkpcmV0dXJuITB9fXJldHVybiExfSh0LGUpKX0sVi5jbGlwRW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHZ0KHQsZS54KX0pKX0sVi5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVYubGlzdCh0LCIiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5hdXRvbWFyZ2luJiYoYS5hbGxvd0F1dG9NYXJnaW4odCx4dChuKSksbi5taXJyb3ImJmEuYWxsb3dBdXRvTWFyZ2luKHQsYnQobikpKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShuKSYmYS5hbGxvd0F1dG9NYXJnaW4odCxfdChuKSl9fSxWLnN3YXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9W10sbz10Ll9mdWxsRGF0YVtlW3JdXS54YXhpcyxzPXQuX2Z1bGxEYXRhW2Vbcl1dLnlheGlzO2lmKG8mJnMpe2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspLTE9PT1pW25dLnguaW5kZXhPZihvKSYmLTE9PT1pW25dLnkuaW5kZXhPZihzKXx8YS5wdXNoKG4pO2lmKGEubGVuZ3RoKXt2YXIgbCxjPWlbYVswXV07aWYoYS5sZW5ndGg+MSlmb3Iobj0xO248YS5sZW5ndGg7bisrKWw9aVthW25dXSx3dChjLngsbC54KSx3dChjLnksbC55KTt3dChjLngsW29dKSx3dChjLnksW3NdKX1lbHNlIGkucHVzaCh7eDpbb10seTpbc119KX19cmV0dXJuIGl9KHQsZSksbj0wO248ci5sZW5ndGg7bisrKVR0KHQscltuXS54LHJbbl0ueSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo0NjQsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ3MSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTksIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vYXV0b3JhbmdlIjo1NTMsIi4vYXhpc19hdXRvdHlwZSI6NTU1LCIuL2F4aXNfaWRzIjo1NTgsIi4vY2xlYW5fdGlja3MiOjU2MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NTY5LCIuL3NldF9jb252ZXJ0Ijo1NzYsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNTU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzRGF0ZVRpbWUsbD1pLmNsZWFuTnVtYmVyLGM9TWF0aC5yb3VuZDtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGU/bih0KToibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gZih0KXtyZXR1cm4gTWF0aC5tYXgoMSwodC0xKS8xZTMpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCxoPXIubm9NdWx0aUNhdGVnb3J5O2lmKG8oaSkmJiFpLmxlbmd0aClyZXR1cm4iLSI7aWYoIWgmJmZ1bmN0aW9uKHQpe3JldHVybiBvKHRbMF0pJiZvKHRbMV0pfShpKSlyZXR1cm4ibXVsdGljYXRlZ29yeSI7aWYoaCYmQXJyYXkuaXNBcnJheShpWzBdKSl7Zm9yKHZhciBwPVtdLGQ9MDtkPGkubGVuZ3RoO2QrKylpZihvKGlbZF0pKWZvcih2YXIgbT0wO208aVtkXS5sZW5ndGg7bSsrKXAucHVzaChpW2RdW21dKTtpPXB9aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsaT1mKHIpLGE9MCxvPTAsbD17fSx1PTA7dTxyO3UrPWkpe3ZhciBoPWModSkscD10W2hdLGQ9U3RyaW5nKHApO2xbZF18fChsW2RdPTEscyhwLGUpJiZhKyssbihwKSYmbysrKX1yZXR1cm4gYT4yKm99KGksZSkpcmV0dXJuImRhdGUiO3ZhciBnPSJzdHJpY3QiIT09ci5hdXRvdHlwZW51bWJlcnM7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZihyKSxpPTAsbz0wLHM9e30sdT0wO3U8cjt1Kz1uKXt2YXIgaD1jKHUpLHA9dFtoXSxkPVN0cmluZyhwKTtpZighc1tkXSl7c1tkXT0xO3ZhciBtPXR5cGVvZiBwOyJib29sZWFuIj09PW0/bysrOihlP2wocCkhPT1hOiJudW1iZXIiPT09bSk/aSsrOiJzdHJpbmciPT09bSYmbysrfX1yZXR1cm4gbz4yKml9KGksZyk/ImNhdGVnb3J5IjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih1KHRbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9KGksZyk/ImxpbmVhciI6Ii0ifX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGM9dCgiLi90aWNrX21hcmtfZGVmYXVsdHMiKSx1PXQoIi4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGY9dCgiLi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIiksaD10KCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIikscD10KCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGQ9dCgiLi9zZXRfY29udmVydCIpLG09dCgiLi9jb25zdGFudHMiKS5XRUVLREFZX1BBVFRFUk4sZz10KCIuL2NvbnN0YW50cyIpLkhPVVJfUEFUVEVSTjtmdW5jdGlvbiB2KHQsZSxyKXtmdW5jdGlvbiBpKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxzLnJhbmdlYnJlYWtzLHIsbil9aWYoaSgiZW5hYmxlZCIpKXt2YXIgbz1pKCJib3VuZHMiKTtpZihvJiZvLmxlbmd0aD49Mil7dmFyIGwsYyx1PSIiO2lmKDI9PT1vLmxlbmd0aClmb3IobD0wO2w8MjtsKyspaWYoYz14KG9bbF0pKXt1PW07YnJlYWt9dmFyIGY9aSgicGF0dGVybiIsdSk7aWYoZj09PW0pZm9yKGw9MDtsPDI7bCsrKShjPXgob1tsXSkpJiYoZS5ib3VuZHNbbF09b1tsXT1jLTEpO2lmKGYpZm9yKGw9MDtsPDI7bCsrKXN3aXRjaChjPW9bbF0sZil7Y2FzZSBtOmlmKCFuKGMpKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSk7aWYoKGM9K2MpIT09TWF0aC5mbG9vcihjKXx8YzwwfHxjPj03KXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSk7ZS5ib3VuZHNbbF09b1tsXT1jO2JyZWFrO2Nhc2UgZzppZighbihjKSlyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpO2lmKChjPStjKTwwfHxjPjI0KXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSk7ZS5ib3VuZHNbbF09b1tsXT1jfWlmKCExPT09ci5hdXRvcmFuZ2Upe3ZhciBoPXIucmFuZ2U7aWYoaFswXTxoWzFdKXtpZihvWzBdPGhbMF0mJm9bMV0+aFsxXSlyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpfWVsc2UgaWYob1swXT5oWzBdJiZvWzFdPGhbMV0pcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKX19ZWxzZXt2YXIgcD1pKCJ2YWx1ZXMiKTtpZighcHx8IXAubGVuZ3RoKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSk7aSgiZHZhbHVlIil9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixnKXt2YXIgeSx4PW4ubGV0dGVyLGI9bi5mb250fHx7fSxfPW4uc3Bsb21TdGFzaHx8e30sdz1yKCJ2aXNpYmxlIiwhbi52aXNpYmxlRGZsdCksVD1lLl90ZW1wbGF0ZXx8e30saz1lLnR5cGV8fFQudHlwZXx8Ii0iOyJkYXRlIj09PWsmJihpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixuLmNhbGVuZGFyKSxuLm5vVGlja2xhYmVsbW9kZXx8KHk9cigidGlja2xhYmVsbW9kZSIpKSk7dmFyIEE9IiI7bi5ub1RpY2tsYWJlbHBvc2l0aW9uJiYibXVsdGljYXRlZ29yeSIhPT1rfHwoQT1hLmNvZXJjZSh0LGUse3RpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJvdXRzaWRlIix2YWx1ZXM6InBlcmlvZCI9PT15P1sib3V0c2lkZSIsImluc2lkZSJdOiJ4Ij09PXg/WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSBsZWZ0IiwiaW5zaWRlIGxlZnQiLCJvdXRzaWRlIHJpZ2h0IiwiaW5zaWRlIHJpZ2h0Il06WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl19fSwidGlja2xhYmVscG9zaXRpb24iKSksbi5ub1RpY2tsYWJlbG92ZXJmbG93fHxyKCJ0aWNrbGFiZWxvdmVyZmxvdyIsLTEhPT1BLmluZGV4T2YoImluc2lkZSIpPyJoaWRlIHBhc3QgZG9tYWluIjoiY2F0ZWdvcnkiPT09a3x8Im11bHRpY2F0ZWdvcnkiPT09az8iYWxsb3ciOiJoaWRlIHBhc3QgZGl2IiksZChlLGcpO3ZhciBNPSFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKTtNJiZuLnJldmVyc2VEZmx0JiYoTT0icmV2ZXJzZWQiKSwhcigiYXV0b3JhbmdlIixNKXx8ImxpbmVhciIhPT1rJiYiLSIhPT1rfHxyKCJyYW5nZW1vZGUiKSxyKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGgodCxlLHIsbiksImNhdGVnb3J5Ij09PWt8fG4ubm9Ib3Zlcnx8cigiaG92ZXJmb3JtYXQiKTt2YXIgUz1yKCJjb2xvciIpLEU9UyE9PXMuY29sb3IuZGZsdD9TOmIuY29sb3IsTD1fLmxhYmVsfHxnLl9kZmx0VGl0bGVbeF07aWYoZih0LGUscixrLG4pLCF3KXJldHVybiBlO3IoInRpdGxlLnRleHQiLEwpLGEuY29lcmNlRm9udChyLCJ0aXRsZS5mb250Iix7ZmFtaWx5OmIuZmFtaWx5LHNpemU6YS5iaWdGb250KGIuc2l6ZSksY29sb3I6RX0pLGwodCxlLHIsayksdSh0LGUscixrLG4pLGModCxlLHIsbikscCh0LGUscix7ZGZsdENvbG9yOlMsYmdDb2xvcjpuLmJnQ29sb3Isc2hvd0dyaWQ6bi5zaG93R3JpZCxhdHRyaWJ1dGVzOnN9KSwoZS5zaG93bGluZXx8ZS50aWNrcykmJnIoIm1pcnJvciIpLG4uYXV0b21hcmdpbiYmcigiYXV0b21hcmdpbiIpO3ZhciBDLFA9Im11bHRpY2F0ZWdvcnkiPT09aztuLm5vVGlja3Nvbnx8ImNhdGVnb3J5IiE9PWsmJiFQfHwhZS50aWNrcyYmIWUuc2hvd2dyaWR8fChQJiYoQz0iYm91bmRhcmllcyIpLCJib3VuZGFyaWVzIj09PXIoInRpY2tzb24iLEMpJiZkZWxldGUgZS50aWNrbGFiZWxwb3NpdGlvbik7UCYmKHIoInNob3dkaXZpZGVycyIpJiYocigiZGl2aWRlcmNvbG9yIikscigiZGl2aWRlcndpZHRoIikpKTtpZigiZGF0ZSI9PT1rKWlmKG8odCxlLHtuYW1lOiJyYW5nZWJyZWFrcyIsaW5jbHVzaW9uQXR0cjoiZW5hYmxlZCIsaGFuZGxlSXRlbURlZmF1bHRzOnZ9KSxlLnJhbmdlYnJlYWtzLmxlbmd0aCl7Zm9yKHZhciBJPTA7STxlLnJhbmdlYnJlYWtzLmxlbmd0aDtJKyspaWYoZS5yYW5nZWJyZWFrc1tJXS5wYXR0ZXJuPT09bSl7ZS5faGFzRGF5T2ZXZWVrQnJlYWtzPSEwO2JyZWFrfWlmKGQoZSxnKSxnLl9oYXMoInNjYXR0ZXJnbCIpfHxnLl9oYXMoInNwbG9tIikpZm9yKHZhciBPPTA7TzxuLmRhdGEubGVuZ3RoO08rKyl7dmFyIHo9bi5kYXRhW09dOyJzY2F0dGVyZ2wiIT09ei50eXBlJiYic3Bsb20iIT09ei50eXBlfHwoei52aXNpYmxlPSExLGEud2Fybih6LnR5cGUrIiB0cmFjZXMgZG8gbm90IHdvcmsgb24gYXhlcyB3aXRoIHJhbmdlYnJlYWtzLiBTZXR0aW5nIHRyYWNlICIrei5pbmRleCsiIHRvIGB2aXNpYmxlOiBmYWxzZWAuIikpfX1lbHNlIGRlbGV0ZSBlLnJhbmdlYnJlYWtzO3JldHVybiBlfTt2YXIgeT17c3VuOjEsbW9uOjIsdHVlOjMsd2VkOjQsdGh1OjUsZnJpOjYsc2F0Ojd9O2Z1bmN0aW9uIHgodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB5W3Quc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKV19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0OSwiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NTU5LCIuL2NvbnN0YW50cyI6NTYxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjksIi4vbGluZV9ncmlkX2RlZmF1bHRzIjo1NzEsIi4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyI6NTczLCIuL3NldF9jb252ZXJ0Ijo1NzYsIi4vdGlja19sYWJlbF9kZWZhdWx0cyI6NTc4LCIuL3RpY2tfbWFya19kZWZhdWx0cyI6NTc5LCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjU4MCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDU1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLGk9bi5GT1JNQVRfTElOSyxhPW4uREFURV9GT1JNQVRfTElOSztmdW5jdGlvbiBvKHQsZSl7cmV0dXJuWyJTZXRzIHRoZSAiK3QrIiBmb3JtYXR0aW5nIHJ1bGUiKyhlPyJmb3IgYCIrZSsiYCAiOiIiKSwidXNpbmcgZDMgZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlcyIsIndoaWNoIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhvc2UgaW4gUHl0aG9uLiBGb3IgbnVtYmVycywgc2VlOiAiK2krIi4iXS5qb2luKCIgIil9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQsZSkrWyIgQW5kIGZvciBkYXRlcyBzZWU6ICIrYSsiLiIsIldlIGFkZCB0d28gaXRlbXMgdG8gZDMncyBkYXRlIGZvcm1hdHRlcjoiLCIqJWgqIGZvciBoYWxmIG9mIHRoZSB5ZWFyIGFzIGEgZGVjaW1hbCBudW1iZXIgYXMgd2VsbCBhcyIsIiole259ZiogZm9yIGZyYWN0aW9uYWwgc2Vjb25kcyIsIndpdGggbiBkaWdpdHMuIEZvciBleGFtcGxlLCAqMjAxNi0xMC0xMyAwOToxNToyMy40NTYqIHdpdGggdGlja2Zvcm1hdCIsIiolSH4lTX4lUy4lMmYqIHdvdWxkIGRpc3BsYXkgKjA5fjE1fjIzLjQ2KiJdLmpvaW4oIiAiKX1lLmV4cG9ydHM9e2F4aXNIb3ZlckZvcm1hdDpmdW5jdGlvbih0LGUpe3JldHVybnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUiLGRlc2NyaXB0aW9uOihlP286cykoImhvdmVyIHRleHQiLHQpK1siQnkgZGVmYXVsdCB0aGUgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgIisoZT8iZ2VuZXJpYyBudW1iZXIgZm9ybWF0IjoiYCIrdCsiYXhpcy5ob3ZlcmZvcm1hdGAiKSsiLiJdLmpvaW4oIiAiKX19LGRlc2NyaXB0aW9uT25seU51bWJlcnM6byxkZXNjcmlwdGlvbldpdGhEYXRlczpzfX0seyIuLi8uLi9jb25zdGFudHMvZG9jcyI6NDc0fV0sNTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGEodCxlKXtpZihlJiZlLmxlbmd0aClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdW3RdKXJldHVybiEwO3JldHVybiExfXIuaWQybmFtZT1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQubWF0Y2goaS5BWF9JRF9QQVRURVJOKSl7dmFyIGU9dC5zcGxpdCgiICIpWzBdLnN1YnN0cigxKTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrImF4aXMiK2V9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaChpLkFYX05BTUVfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKStlfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0vKCBkb21haW4pJC8udGVzdCh0KTtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQubWF0Y2goaS5BWF9JRF9QQVRURVJOKSYmKCFlfHx0LmNoYXJBdCgwKT09PWUpJiYoIW58fHIpKXt2YXIgYT10LnNwbGl0KCIgIilbMF0uc3Vic3RyKDEpLnJlcGxhY2UoL14wKy8sIiIpO3JldHVybiIxIj09PWEmJihhPSIiKSx0LmNoYXJBdCgwKSthKyhuJiZyPyIgZG9tYWluIjoiIil9fSxyLmxpc3Q9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQ7aWYoIWkpcmV0dXJuW107dmFyIGEsbz1yLmxpc3RJZHModCxlKSxzPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGw9b1thXTtzW2FdPWlbbC5jaGFyQXQoMCkrImF4aXMiK2wuc3Vic3RyKDEpXX1pZighbil7dmFyIGM9aS5fc3VicGxvdHMuZ2wzZHx8W107Zm9yKGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIHU9aVtjW2FdXTtlP3MucHVzaCh1W2UrImF4aXMiXSk6cy5wdXNoKHUueGF4aXMsdS55YXhpcyx1LnpheGlzKX19cmV0dXJuIHN9LHIubGlzdElkcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7aWYoIXIpcmV0dXJuW107dmFyIG49ci5fc3VicGxvdHM7cmV0dXJuIGU/bltlKyJheGlzIl06bi54YXhpcy5jb25jYXQobi55YXhpcyl9LHIuZ2V0RnJvbUlkPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O3JldHVybiBlPXZvaWQgMD09PWV8fCJzdHJpbmciIT10eXBlb2YgZT9lOmUucmVwbGFjZSgiIGRvbWFpbiIsIiIpLCJ4Ij09PW4/ZT1lLnJlcGxhY2UoL3lbMC05XSovLCIiKToieSI9PT1uJiYoZT1lLnJlcGxhY2UoL3hbMC05XSovLCIiKSksaVtyLmlkMm5hbWUoZSldfSxyLmdldEZyb21UcmFjZT1mdW5jdGlvbih0LGUsaSl7dmFyIGE9dC5fZnVsbExheW91dCxvPW51bGw7aWYobi50cmFjZUlzKGUsImdsM2QiKSl7dmFyIHM9ZS5zY2VuZTsic2NlbmUiPT09cy5zdWJzdHIoMCw1KSYmKG89YVtzXVtpKyJheGlzIl0pfWVsc2Ugbz1yLmdldEZyb21JZCh0LGVbaSsiYXhpcyJdfHxpKTtyZXR1cm4gb30sci5pZFNvcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJBdCgwKSxuPWUuY2hhckF0KDApO3JldHVybiByIT09bj9yPm4/MTotMTorKHQuc3Vic3RyKDEpfHwxKS0rKGUuc3Vic3RyKDEpfHwxKX0sci5yZWYyaWQ9ZnVuY3Rpb24odCl7cmV0dXJuISEvXlt4eXpdLy50ZXN0KHQpJiZ0LnNwbGl0KCIgIilbMF19LHIuaXNMaW5rZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShlLHQuX2F4aXNNYXRjaEdyb3Vwcyl8fGEoZSx0Ll9heGlzQ29uc3RyYWludEdyb3Vwcyl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vY29uc3RhbnRzIjo1NjF9XSw1NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJjYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBpLGE9dC5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtvJiYoaT0iYXJyYXkiKTt2YXIgcyxsPXIoImNhdGVnb3J5b3JkZXIiLGkpOyJhcnJheSI9PT1sJiYocz1yKCJjYXRlZ29yeWFycmF5IikpLG98fCJhcnJheSIhPT1sfHwobD1lLmNhdGVnb3J5b3JkZXI9InRyYWNlIiksInRyYWNlIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9W106ImFycmF5Ij09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9cy5zbGljZSgpOihzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9ZS5kYXRhQXR0cnx8dC5faWQuY2hhckF0KDApLG89e307aWYoZS5heERhdGEpcj1lLmF4RGF0YTtlbHNlIGZvcihyPVtdLG49MDtuPGUuZGF0YS5sZW5ndGg7bisrKXt2YXIgcz1lLmRhdGFbbl07c1thKyJheGlzIl09PT10Ll9pZCYmci5wdXNoKHMpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBsPXJbbl1bYV07Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfShlLG4pLnNvcnQoKSwiY2F0ZWdvcnkgYXNjZW5kaW5nIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9czoiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT1sJiYoZS5faW5pdGlhbENhdGVnb3JpZXM9cy5yZXZlcnNlKCkpKX19fSx7fV0sNTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxvPWEuT05FREFZLHM9YS5PTkVXRUVLO3IuZHRpY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj0ibG9nIj09PWUsaT0iZGF0ZSI9PT1lLGE9ImNhdGVnb3J5Ij09PWUscz1pP286MTtpZighdClyZXR1cm4gcztpZihuKHQpKXJldHVybih0PU51bWJlcih0KSk8PTA/czphP01hdGgubWF4KDEsTWF0aC5yb3VuZCh0KSk6aT9NYXRoLm1heCguMSx0KTp0O2lmKCJzdHJpbmciIT10eXBlb2YgdHx8IWkmJiFyKXJldHVybiBzO3ZhciBsPXQuY2hhckF0KDApLGM9dC5zdWJzdHIoMSk7cmV0dXJuKGM9bihjKT9OdW1iZXIoYyk6MCk8PTB8fCEoaSYmIk0iPT09bCYmYz09PU1hdGgucm91bmQoYyl8fHImJiJMIj09PWx8fHImJiJEIj09PWwmJigxPT09Y3x8Mj09PWMpKT9zOnR9LHIudGljazA9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuImRhdGUiPT09ZT9pLmNsZWFuRGF0ZSh0LGkuZGF0ZVRpY2swKHIsYSVzPT0wPzE6MCkpOiJEMSIhPT1hJiYiRDIiIT09YT9uKHQpP051bWJlcih0KTowOnZvaWQgMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiZmFzdC1pc251bWVyaWMiOjE5MH1dLDU2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyO2UuZXhwb3J0cz17aWRSZWdleDp7eDpuKCJ4IiwiKCBkb21haW4pPyIpLHk6bigieSIsIiggZG9tYWluKT8iKX0sYXR0clJlZ2V4Om4oIlt4eV1heGlzIikseEF4aXNNYXRjaDpuKCJ4YXhpcyIpLHlBeGlzTWF0Y2g6bigieWF4aXMiKSxBWF9JRF9QQVRURVJOOi9eW3h5el1bMC05XSooIGRvbWFpbik/JC8sQVhfTkFNRV9QQVRURVJOOi9eW3h5el1heGlzWzAtOV0qJC8sU1VCUExPVF9QQVRURVJOOi9eeChbMC05XSopeShbMC05XSopJC8sSE9VUl9QQVRURVJOOiJob3VyIixXRUVLREFZX1BBVFRFUk46ImRheSBvZiB3ZWVrIixNSU5EUkFHOjgsTUlOU0VMRUNUOjEyLE1JTlpPT006MjAsRFJBR0dFUlNJWkU6MjAsQkVORFBYOjEuNSxSRURSQVdERUxBWTo1MCxTRUxFQ1RERUxBWToxMDAsU0VMRUNUSUQ6Ii1zZWxlY3QiLERGTFRSQU5HRVg6Wy0xLDZdLERGTFRSQU5HRVk6Wy0xLDRdLHRyYWNlTGF5ZXJDbGFzc2VzOlsiaW1hZ2VsYXllciIsImhlYXRtYXBsYXllciIsImNvbnRvdXJjYXJwZXRsYXllciIsImNvbnRvdXJsYXllciIsImZ1bm5lbGxheWVyIiwid2F0ZXJmYWxsbGF5ZXIiLCJiYXJsYXllciIsImNhcnBldGxheWVyIiwidmlvbGlubGF5ZXIiLCJib3hsYXllciIsIm9obGNsYXllciIsInNjYXR0ZXJjYXJwZXRsYXllciIsInNjYXR0ZXJsYXllciJdLGNsaXBPbkF4aXNGYWxzZVF1ZXJ5OlsiLnNjYXR0ZXJsYXllciIsIi5iYXJsYXllciIsIi5mdW5uZWxsYXllciIsIi53YXRlcmZhbGxsYXllciJdLGxheWVyVmFsdWUybGF5ZXJDbGFzczp7ImFib3ZlIHRyYWNlcyI6ImFib3ZlIiwiYmVsb3cgdHJhY2VzIjoiYmVsb3cifX19LHsiLi4vLi4vbGliL3JlZ2V4Ijo1MjB9XSw1NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F1dG9yYW5nZSIpLGE9dCgiLi9heGlzX2lkcyIpLmlkMm5hbWUsbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuL3NjYWxlX3pvb20iKSxsPXQoIi4vc2V0X2NvbnZlcnQiKSxjPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5BTE1PU1RfRVFVQUwsdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtmdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1yLmF4SWRzLHM9ci5sYXlvdXRPdXQsbD1yLmhhc0ltYWdlLGM9cy5fYXhpc0NvbnN0cmFpbnRHcm91cHMsdT1zLl9heGlzTWF0Y2hHcm91cHMsZj1lLl9pZCxtPWYuY2hhckF0KDApLGc9KChzLl9zcGxvbUF4ZXN8fHt9KVttXXx8e30pW2ZdfHx7fSx2PWUuX2lkLHk9IngiPT09di5jaGFyQXQoMCk7ZnVuY3Rpb24geChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX21hdGNoR3JvdXA9bnVsbCxlLl9jb25zdHJhaW50R3JvdXA9bnVsbCx4KCJjb25zdHJhaW4iLGw/ImRvbWFpbiI6InJhbmdlIiksbi5jb2VyY2UodCxlLHtjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczp5P1sibGVmdCIsImNlbnRlciIsInJpZ2h0Il06WyJib3R0b20iLCJtaWRkbGUiLCJ0b3AiXSxkZmx0Onk/ImNlbnRlciI6Im1pZGRsZSJ9fSwiY29uc3RyYWludG93YXJkIik7dmFyIGIsXyx3PWUudHlwZSxUPVtdO2ZvcihiPTA7YjxpLmxlbmd0aDtiKyspe2lmKChfPWlbYl0pIT09dilzW2EoXyldLnR5cGU9PT13JiZULnB1c2goXyl9dmFyIGs9cChjLHYpO2lmKGspe3ZhciBBPVtdO2ZvcihiPTA7YjxULmxlbmd0aDtiKyspa1tfPVRbYl1dfHxBLnB1c2goXyk7VD1BfXZhciBNLFMsRT1ULmxlbmd0aDtFJiYodC5tYXRjaGVzfHxnLm1hdGNoZXMpJiYoTT1uLmNvZXJjZSh0LGUse21hdGNoZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpULGRmbHQ6LTEhPT1ULmluZGV4T2YoZy5tYXRjaGVzKT9nLm1hdGNoZXM6dm9pZCAwfX0sIm1hdGNoZXMiKSk7dmFyIEw9bCYmIXk/ZS5hbmNob3I6dm9pZCAwO2lmKEUmJiFNJiYodC5zY2FsZWFuY2hvcnx8TCkmJihTPW4uY29lcmNlKHQsZSx7c2NhbGVhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpUfX0sInNjYWxlYW5jaG9yIixMKSksTSl7ZS5fbWF0Y2hHcm91cD1kKHUsdixNLDEpO3ZhciBDPXNbYShNKV0sUD1oKHMsZSkvaChzLEMpO3khPT0oIngiPT09TS5jaGFyQXQoMCkpJiYoUD0oeT8ieCI6InkiKStQKSxkKGMsdixNLFApfWVsc2UgdC5tYXRjaGVzJiYtMSE9PWkuaW5kZXhPZih0Lm1hdGNoZXMpJiZuLndhcm4oImlnbm9yZWQgIitlLl9uYW1lKycubWF0Y2hlczogIicrdC5tYXRjaGVzKyciIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AnKTtpZihTKXt2YXIgST14KCJzY2FsZXJhdGlvIik7SXx8KEk9ZS5zY2FsZXJhdGlvPTEpLGQoYyx2LFMsSSl9ZWxzZSB0LnNjYWxlYW5jaG9yJiYtMSE9PWkuaW5kZXhPZih0LnNjYWxlYW5jaG9yKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLnNjYWxlYW5jaG9yOiAiJyt0LnNjYWxlYW5jaG9yKyciIHRvIGF2b2lkIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBwb3NzaWJseSBpbmNvbnNpc3RlbnQgc2NhbGVyYXRpb3MsIG9yIGJlY2F1c2UgdGhpcyBheGlzIGRlY2xhcmVzIGEgKm1hdGNoZXMqIGNvbnN0cmFpbnQuJyl9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPWUuZG9tYWluO3JldHVybiByfHwocj10W2EoZS5vdmVybGF5aW5nKV0uZG9tYWluKSxyWzFdLXJbMF19ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl1bZV0pcmV0dXJuIHRbcl07cmV0dXJuIG51bGx9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaSxhLG8scyxsLGM9cCh0LGUpO251bGw9PT1jPygoYz17fSlbZV09MSxsPXQubGVuZ3RoLHQucHVzaChjKSk6bD10LmluZGV4T2YoYyk7dmFyIHU9T2JqZWN0LmtleXMoYyk7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZihvPXRbaV0saSE9PWwmJm9bcl0pe3ZhciBmPW9bcl07Zm9yKGE9MDthPHUubGVuZ3RoO2ErKylvW3M9dVthXV09bShmLG0obixjW3NdKSk7cmV0dXJuIHZvaWQgdC5zcGxpY2UobCwxKX1pZigxIT09bilmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgaD11W2FdO2NbaF09bShuLGNbaF0pfWNbcl09MX1mdW5jdGlvbiBtKHQsZSl7dmFyIHIsbixpPSIiLGE9IiI7InN0cmluZyI9PXR5cGVvZiB0JiYocj0oaT10Lm1hdGNoKC9eW3h5XSovKVswXSkubGVuZ3RoLHQ9K3Quc3Vic3RyKHIpKSwic3RyaW5nIj09dHlwZW9mIGUmJihuPShhPWUubWF0Y2goL15beHldKi8pWzBdKS5sZW5ndGgsZT0rZS5zdWJzdHIobikpO3ZhciBvPXQqZTtyZXR1cm4gcnx8bj9yJiZuJiZpLmNoYXJBdCgwKSE9PWEuY2hhckF0KDApP3I9PT1uP286KHI+bj9pLnN1YnN0cihuKTphLnN1YnN0cihyKSkrbzppK2ErdCplOm99ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1lLl9zaXplLG49ci5oL3IudyxpPXt9LGE9T2JqZWN0LmtleXModCksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9dFtzXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe3ZhciBjPWwubWF0Y2goL15beHldKi8pWzBdLHU9Yy5sZW5ndGg7bD0rbC5zdWJzdHIodSk7Zm9yKHZhciBmPSJ5Ij09PWMuY2hhckF0KDApP246MS9uLGg9MDtoPHU7aCsrKWwqPWZ9aVtzXT1sfXJldHVybiBpfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10Ll9pbnB1dERvbWFpbixuPXVbdC5jb25zdHJhaW50b3dhcmRdLGk9clswXSsoclsxXS1yWzBdKSpuO3QuZG9tYWluPXQuX2lucHV0LmRvbWFpbj1baSsoclswXS1pKS9lLGkrKHJbMV0taSkvZV0sdC5zZXRTY2FsZSgpfXIuaGFuZGxlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG8scyxjLHUsaCxwLGQsbT1yLmF4SWRzLGc9ci5heEhhc0ltYWdlLHY9ZS5fYXhpc0NvbnN0cmFpbnRHcm91cHM9W10seT1lLl9heGlzTWF0Y2hHcm91cHM9W107Zm9yKGk9MDtpPG0ubGVuZ3RoO2krKylmKHU9dFtjPWEobVtpXSldLGg9ZVtjXSx7YXhJZHM6bSxsYXlvdXRPdXQ6ZSxoYXNJbWFnZTpnW2NdfSk7ZnVuY3Rpb24geCh0LHIpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspZm9yKHMgaW4gbz10W2ldKWVbYShzKV1bcl09b31mb3IoeCh5LCJfbWF0Y2hHcm91cCIpLGk9MDtpPHYubGVuZ3RoO2krKylmb3IocyBpbiBvPXZbaV0paWYoKGg9ZVthKHMpXSkuZml4ZWRyYW5nZSl7Zm9yKHZhciBiIGluIG8pe3ZhciBfPWEoYik7ITE9PT0odFtfXXx8e30pLmZpeGVkcmFuZ2UmJm4ud2FybigiZml4ZWRyYW5nZSB3YXMgc3BlY2lmaWVkIGFzIGZhbHNlIGZvciBheGlzICIrXysiIGJ1dCB3YXMgb3ZlcnJpZGRlbiBiZWNhdXNlIGFub3RoZXIgYXhpcyBpbiBpdHMgY29uc3RyYWludCBncm91cCBoYXMgZml4ZWRyYW5nZSB0cnVlIiksZVtfXS5maXhlZHJhbmdlPSEwfWJyZWFrfWZvcihpPTA7aTx2Lmxlbmd0aDspe2ZvcihzIGluIG89dltpXSl7KGg9ZVthKHMpXSkuX21hdGNoR3JvdXAmJk9iamVjdC5rZXlzKGguX21hdGNoR3JvdXApLmxlbmd0aD09PU9iamVjdC5rZXlzKG8pLmxlbmd0aCYmKHYuc3BsaWNlKGksMSksaS0tKTticmVha31pKyt9eCh2LCJfY29uc3RyYWludEdyb3VwIik7dmFyIHc9WyJjb25zdHJhaW4iLCJyYW5nZSIsImF1dG9yYW5nZSIsInJhbmdlbW9kZSIsInJhbmdlYnJlYWtzIiwiY2F0ZWdvcnlvcmRlciIsImNhdGVnb3J5YXJyYXkiXSxUPSExLGs9ITE7ZnVuY3Rpb24gQSgpe2Q9aFtwXSwicmFuZ2VicmVha3MiPT09cCYmKGs9aC5faGFzRGF5T2ZXZWVrQnJlYWtzKX1mb3IoaT0wO2k8eS5sZW5ndGg7aSsrKXtvPXlbaV07Zm9yKHZhciBNPTA7TTx3Lmxlbmd0aDtNKyspe3ZhciBTO2ZvcihzIGluIHA9d1tNXSxkPW51bGwsbylpZih1PXRbYz1hKHMpXSxoPWVbY10scCBpbiBoKXtpZighaC5tYXRjaGVzJiYoUz1oLHAgaW4gdSkpe0EoKTticmVha31udWxsPT09ZCYmcCBpbiB1JiZBKCl9aWYoInJhbmdlIj09PXAmJmQmJihUPSEwKSwiYXV0b3JhbmdlIj09PXAmJm51bGw9PT1kJiZUJiYoZD0hMSksbnVsbD09PWQmJnAgaW4gUyYmKGQ9U1twXSksbnVsbCE9PWQpZm9yKHMgaW4gbykoaD1lW2EocyldKVtwXT0icmFuZ2UiPT09cD9kLnNsaWNlKCk6ZCwicmFuZ2VicmVha3MiPT09cCYmKGguX2hhc0RheU9mV2Vla0JyZWFrcz1rLGwoaCxlKSl9fX0sci5lbmZvcmNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvLGwsdSxmLGgscD10Ll9mdWxsTGF5b3V0LGQ9cC5fYXhpc0NvbnN0cmFpbnRHcm91cHN8fFtdO2ZvcihlPTA7ZTxkLmxlbmd0aDtlKyspe249ZyhkW2VdLHApO3ZhciBtPU9iamVjdC5rZXlzKG4pLHk9MS8wLHg9MCxiPTEvMCxfPXt9LHc9e30sVD0hMTtmb3Iocj0wO3I8bS5sZW5ndGg7cisrKXdbbz1tW3JdXT1sPXBbYShvKV0sbC5faW5wdXREb21haW4/bC5kb21haW49bC5faW5wdXREb21haW4uc2xpY2UoKTpsLl9pbnB1dERvbWFpbj1sLmRvbWFpbi5zbGljZSgpLGwuX2lucHV0UmFuZ2V8fChsLl9pbnB1dFJhbmdlPWwucmFuZ2Uuc2xpY2UoKSksbC5zZXRTY2FsZSgpLF9bb109dT1NYXRoLmFicyhsLl9tKS9uW29dLHk9TWF0aC5taW4oeSx1KSwiZG9tYWluIiE9PWwuY29uc3RyYWluJiZsLl9jb25zdHJhaW50U2hyaW5rYWJsZXx8KGI9TWF0aC5taW4oYix1KSksZGVsZXRlIGwuX2NvbnN0cmFpbnRTaHJpbmthYmxlLHg9TWF0aC5tYXgoeCx1KSwiZG9tYWluIj09PWwuY29uc3RyYWluJiYoVD0hMCk7aWYoISh5PmMqeCl8fFQpZm9yKHI9MDtyPG0ubGVuZ3RoO3IrKylpZih1PV9bbz1tW3JdXSxmPShsPXdbb10pLmNvbnN0cmFpbix1IT09Ynx8ImRvbWFpbiI9PT1mKWlmKGg9dS9iLCJyYW5nZSI9PT1mKXMobCxoKTtlbHNle3ZhciBrPWwuX2lucHV0RG9tYWluLEE9KGwuZG9tYWluWzFdLWwuZG9tYWluWzBdKS8oa1sxXS1rWzBdKSxNPShsLnIybChsLnJhbmdlWzFdKS1sLnIybChsLnJhbmdlWzBdKSkvKGwucjJsKGwuX2lucHV0UmFuZ2VbMV0pLWwucjJsKGwuX2lucHV0UmFuZ2VbMF0pKTtpZigoaC89QSkqTTwxKXtsLmRvbWFpbj1sLl9pbnB1dC5kb21haW49ay5zbGljZSgpLHMobCxoKTtjb250aW51ZX1pZihNPDEmJihsLnJhbmdlPWwuX2lucHV0LnJhbmdlPWwuX2lucHV0UmFuZ2Uuc2xpY2UoKSxoKj1NKSxsLmF1dG9yYW5nZSl7dmFyIFM9bC5yMmwobC5yYW5nZVswXSksRT1sLnIybChsLnJhbmdlWzFdKSxMPShTK0UpLzIsQz1MLFA9TCxJPU1hdGguYWJzKEUtTCksTz1MLUkqaCoxLjAwMDEsej1MK0kqaCoxLjAwMDEsRD1pLm1ha2VQYWRGbihwLGwsMCksUj1pLm1ha2VQYWRGbihwLGwsMSk7dihsLGgpO3ZhciBGLEIsTj1NYXRoLmFicyhsLl9tKSxqPWkuY29uY2F0RXh0cmVtZXModCxsKSxVPWoubWluLFY9ai5tYXg7Zm9yKEI9MDtCPFUubGVuZ3RoO0IrKykoRj1VW0JdLnZhbC1EKFVbQl0pL04pPk8mJkY8QyYmKEM9Rik7Zm9yKEI9MDtCPFYubGVuZ3RoO0IrKykoRj1WW0JdLnZhbCtSKFZbQl0pL04pPHomJkY+UCYmKFA9Rik7aC89KFAtQykvKDIqSSksQz1sLmwycihDKSxQPWwubDJyKFApLGwucmFuZ2U9bC5faW5wdXQucmFuZ2U9UzxFP1tDLFBdOltQLENdfXYobCxoKX19fSxyLmdldEF4aXNHcm91cD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9heGlzTWF0Y2hHcm91cHMsbj0wO248ci5sZW5ndGg7bisrKXtpZihyW25dW2VdKXJldHVybiJnIitufXJldHVybiBlfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSl7aWYoZS5faW5wdXREb21haW4pe2Zvcih2YXIgcj0hMSxuPWUuX2lkLGk9dC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlbYV1bbl0pe3I9ITA7YnJlYWt9ciYmImRvbWFpbiI9PT1lLmNvbnN0cmFpbnx8KGUuX2lucHV0LmRvbWFpbj1lLmRvbWFpbj1lLl9pbnB1dERvbWFpbixkZWxldGUgZS5faW5wdXREb21haW4pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCIuL2F1dG9yYW5nZSI6NTUzLCIuL2F4aXNfaWRzIjo1NTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OSwiLi9zY2FsZV96b29tIjo1NzQsIi4vc2V0X2NvbnZlcnQiOjU3Nn1dLDU2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPWkubnVtYmVyRm9ybWF0LG89dCgidGlueWNvbG9yMiIpLHM9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksbD10KCIuLi8uLi9yZWdpc3RyeSIpLGM9aS5zdHJUcmFuc2xhdGUsdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHA9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGQ9dCgiLi9heGVzIiksbT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZz10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksdj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSx5PXYuc2VsZWN0aW5nT3JEcmF3aW5nLHg9di5mcmVlTW9kZSxiPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX1RMLF89dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksdz10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsVD10KCIuLi9wbG90cyIpLGs9dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCxBPXQoIi4vc2VsZWN0IikucHJlcFNlbGVjdCxNPXQoIi4vc2VsZWN0IikuY2xlYXJTZWxlY3QsUz10KCIuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssRT10KCIuL3NjYWxlX3pvb20iKSxMPXQoIi4vY29uc3RhbnRzIiksQz1MLk1JTkRSQUcsUD1MLk1JTlpPT00sST0hMDtmdW5jdGlvbiBPKHQsZSxyLG4pe3ZhciBhPWkuZW5zdXJlU2luZ2xlKHQuZHJhZ2xheWVyLGUsciwoZnVuY3Rpb24oZSl7ZS5jbGFzc2VkKCJkcmFnIiwhMCkuc3R5bGUoe2ZpbGw6InRyYW5zcGFyZW50Iiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZGF0YS1zdWJwbG90Iix0LmlkKX0pKTtyZXR1cm4gYS5jYWxsKG0sbiksYS5ub2RlKCl9ZnVuY3Rpb24geih0LGUscixpLGEsbyxzKXt2YXIgbD1PKHQsInJlY3QiLGUscik7cmV0dXJuIG4uc2VsZWN0KGwpLmNhbGwoaC5zZXRSZWN0LGksYSxvLHMpLGx9ZnVuY3Rpb24gRCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKCF0W3JdLmZpeGVkcmFuZ2UpcmV0dXJuIGU7cmV0dXJuIiJ9ZnVuY3Rpb24gUih0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKCFvLmZpeGVkcmFuZ2UpaWYoby5yYW5nZWJyZWFrcyl7dmFyIHM9InkiPT09by5faWQuY2hhckF0KDApLGw9cz8xLWU6ZSxjPXM/MS1yOnI7bltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLmwycihvLnAybChsKm8uX2xlbmd0aCkpLG5bby5fbmFtZSsiLnJhbmdlWzFdIl09by5sMnIoby5wMmwoYypvLl9sZW5ndGgpKX1lbHNle3ZhciB1PW8uX3JsWzBdLGY9by5fcmxbMV0tdTtuW28uX25hbWUrIi5yYW5nZVswXSJdPW8ubDJyKHUrZiplKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKHUrZipyKX19aWYoaSYmaS5sZW5ndGgpe3ZhciBoPShlKygxLXIpKS8yO1IoaSxoLDEtaCxuLFtdKX19ZnVuY3Rpb24gRih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKCFuLmZpeGVkcmFuZ2UpaWYobi5yYW5nZWJyZWFrcyl7dmFyIGk9bi5fbGVuZ3RoLGE9KG4ucDJsKDArZSktbi5wMmwoMCkrKG4ucDJsKGkrZSktbi5wMmwoaSkpKS8yO24ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWEpLG4ubDJyKG4uX3JsWzFdLWEpXX1lbHNlIG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV19fWZ1bmN0aW9uIEIodCl7cmV0dXJuIDEtKHQ+PTA/TWF0aC5taW4odCwuOSk6MS8oMS9NYXRoLm1heCh0LC0uMykrMy4yMjIpKX1mdW5jdGlvbiBOKHQsZSxyLG4saSl7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94Iikuc3R5bGUoe2ZpbGw6ZT4uMj8icmdiYSgwLDAsMCwwKSI6InJnYmEoMjU1LDI1NSwyNTUsMCkiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLGMocixuKSkuYXR0cigiZCIsaSsiWiIpfWZ1bmN0aW9uIGoodCxlLHIpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuc3R5bGUoe2ZpbGw6Zi5iYWNrZ3JvdW5kLHN0cm9rZTpmLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjEsb3BhY2l0eTowfSkuYXR0cigidHJhbnNmb3JtIixjKGUscikpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIFUodCxlLHIsbixpLGEpe3QuYXR0cigiZCIsbisiTSIrci5sKyIsIityLnQrInYiK3IuaCsiaCIrci53KyJ2LSIrci5oKyJoLSIrci53KyJaIiksVih0LGUsaSxhKX1mdW5jdGlvbiBWKHQsZSxyLG4pe3J8fCh0LnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsbj4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxlLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSl9ZnVuY3Rpb24gSCh0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfWZ1bmN0aW9uIHEodCl7SSYmdC5kYXRhJiZ0Ll9jb250ZXh0LnNob3dUaXBzJiYoaS5ub3RpZmllcihpLl8odCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLEk9ITEpfWZ1bmN0aW9uIEcodCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLm1pbih0LmItdC50LHQuci10LmwsUCkvMik7cmV0dXJuIk0iKyh0LmwtMy41KSsiLCIrKHQudC0uNStlKSsiaDN2IistZSsiaCIrZSsidi0zaC0iKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC50LS41K2UpKyJoLTN2IistZSsiaCIrLWUrInYtM2giKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC5iKy41LWUpKyJoLTN2IitlKyJoIistZSsidjNoIisoZSszKSsiWk0iKyh0LmwtMy41KSsiLCIrKHQuYisuNS1lKSsiaDN2IitlKyJoIitlKyJ2M2gtIisoZSszKSsiWiJ9ZnVuY3Rpb24gWSh0LGUscixuLGEpe2Zvcih2YXIgbyxzLGwsYyx1PSExLGY9e30saD17fSxwPShhfHx7fSkueGFIYXNoLGQ9KGF8fHt9KS55YUhhc2gsbT0wO208ZS5sZW5ndGg7bSsrKXt2YXIgZz1lW21dO2ZvcihvIGluIHIpaWYoZ1tvXSl7Zm9yKGwgaW4gZylhJiYocFtsXXx8ZFtsXSl8fCgieCI9PT1sLmNoYXJBdCgwKT9yOm4pW2xdfHwoZltsXT1vKTtmb3IocyBpbiBuKWEmJihwW3NdfHxkW3NdKXx8IWdbc118fCh1PSEwKX1mb3IocyBpbiBuKWlmKGdbc10pZm9yKGMgaW4gZylhJiYocFtjXXx8ZFtjXSl8fCgieCI9PT1jLmNoYXJBdCgwKT9yOm4pW2NdfHwoaFtjXT1zKX11JiYoaS5leHRlbmRGbGF0KGYsaCksaD17fSk7dmFyIHY9e30seT1bXTtmb3IobCBpbiBmKXt2YXIgeD1rKHQsbCk7eS5wdXNoKHgpLHZbeC5faWRdPXh9dmFyIGI9e30sXz1bXTtmb3IoYyBpbiBoKXt2YXIgdz1rKHQsYyk7Xy5wdXNoKHcpLGJbdy5faWRdPXd9cmV0dXJue3hhSGFzaDp2LHlhSGFzaDpiLHhheGVzOnkseWF4ZXM6Xyx4TGlua3M6Zix5TGlua3M6aCxpc1N1YnBsb3RDb25zdHJhaW5lZDp1fX1mdW5jdGlvbiBXKHQsZSl7aWYocyl7dmFyIHI9dm9pZCAwIT09dC5vbndoZWVsPyJ3aGVlbCI6Im1vdXNld2hlZWwiO3QuX29ud2hlZWwmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLHQuX29ud2hlZWwpLHQuX29ud2hlZWw9ZSx0LmFkZEV2ZW50TGlzdGVuZXIocixlLHtwYXNzaXZlOiExfSl9ZWxzZSB2b2lkIDAhPT10Lm9ud2hlZWw/dC5vbndoZWVsPWU6dm9pZCAwIT09dC5vbm1vdXNld2hlZWw/dC5vbm1vdXNld2hlZWw9ZTp0LmlzQWRkZWRXaGVlbEV2ZW50fHwodC5pc0FkZGVkV2hlZWxFdmVudD0hMCx0LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixlLHtwYXNzaXZlOiExfSkpfWZ1bmN0aW9uIFgodCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfWUuZXhwb3J0cz17bWFrZURyYWdCb3g6ZnVuY3Rpb24odCxlLHIscyxjLGYsbSx2KXt2YXIgSSxPLFYsWixKLEssUSwkLHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LGN0LHV0LGZ0LGh0LHB0LGR0LG10PXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcixndD1tK3Y9PT0ibnNldyIsdnQ9MT09PShtK3YpLmxlbmd0aDtmdW5jdGlvbiB5dCgpe2lmKEk9ZS54YXhpcyxPPWUueWF4aXMsdHQ9SS5fbGVuZ3RoLGV0PU8uX2xlbmd0aCxRPUkuX29mZnNldCwkPU8uX29mZnNldCwoVj17fSlbSS5faWRdPUksKFo9e30pW08uX2lkXT1PLG0mJnYpZm9yKHZhciByPWUub3ZlcmxheXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLnhheGlzO1ZbaS5faWRdPWk7dmFyIGE9cltuXS55YXhpcztaW2EuX2lkXT1hfUo9WChWKSxLPVgoWiksaXQ9RChKLHYpLGF0PUQoSyxtKSxvdD0hYXQmJiFpdCxudD1ZKHQsdC5fZnVsbExheW91dC5fYXhpc01hdGNoR3JvdXBzLFYsWik7dmFyIG89KHJ0PVkodCx0Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxWLFosbnQpKS5pc1N1YnBsb3RDb25zdHJhaW5lZHx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQ7c3Q9dnx8byxsdD1tfHxvO3ZhciBzPXQuX2Z1bGxMYXlvdXQ7Y3Q9cy5faGFzKCJzY2F0dGVyZ2wiKSx1dD1zLl9oYXMoInNwbG9tIiksZnQ9cy5faGFzKCJzdmciKX15dCgpO3ZhciB4dD1mdW5jdGlvbih0LGUscil7aWYoIXQpcmV0dXJuInBvaW50ZXIiO2lmKCJuc2V3Ij09PXQpcmV0dXJuIHI/IiI6InBhbiI9PT1lPyJtb3ZlIjoiY3Jvc3NoYWlyIjtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpKyItcmVzaXplIn0oYXQraXQsdC5fZnVsbExheW91dC5kcmFnbW9kZSxndCksYnQ9eihlLG0rdisiZHJhZyIseHQscixzLGMsZik7aWYob3QmJiFndClyZXR1cm4gYnQub25tb3VzZWRvd249bnVsbCxidC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixidDt2YXIgX3Qsd3QsVHQsa3QsQXQsTXQsU3QsRXQsTHQsQ3QsUHQ9e2VsZW1lbnQ6YnQsZ2Q6dCxwbG90aW5mbzplfTtmdW5jdGlvbiBJdCgpe1B0LnBsb3RpbmZvLnNlbGVjdGlvbj0hMSxNKHQpfWZ1bmN0aW9uIE90KHQscil7dmFyIGk9UHQuZ2Q7aWYoaS5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MClpLl9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGUoaSk7ZWxzZXt2YXIgbz1pLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpZihIKGkpLDIhPT10fHx2dHx8cXQoKSxndClvLmluZGV4T2YoInNlbGVjdCIpPi0xJiZTKHIsaSxKLEssZS5pZCxQdCksby5pbmRleE9mKCJldmVudCIpPi0xJiZwLmNsaWNrKGkscixlLmlkKTtlbHNlIGlmKDE9PT10JiZ2dCl7dmFyIHM9bT9POkksYz0icyI9PT1tfHwidyI9PT12PzA6MSxmPXMuX25hbWUrIi5yYW5nZVsiK2MrIl0iLGg9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQucmFuZ2VbZV0saT1NYXRoLmFicyhuLXQucmFuZ2VbMS1lXSk7cmV0dXJuImRhdGUiPT09dC50eXBlP246ImxvZyI9PT10LnR5cGU/KHI9TWF0aC5jZWlsKE1hdGgubWF4KDAsLU1hdGgubG9nKGkpL01hdGguTE4xMCkpKzMsYSgiLiIrcisiZyIpKE1hdGgucG93KDEwLG4pKSk6KHI9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhuKSkvTWF0aC5MTjEwKS1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCkrNCxhKCIuIitTdHJpbmcocikrImciKShuKSl9KHMsYyksZD0ibGVmdCIsZz0ibWlkZGxlIjtpZihzLmZpeGVkcmFuZ2UpcmV0dXJuO20/KGc9Im4iPT09bT8idG9wIjoiYm90dG9tIiwicmlnaHQiPT09cy5zaWRlJiYoZD0icmlnaHQiKSk6ImUiPT09diYmKGQ9InJpZ2h0IiksaS5fY29udGV4dC5zaG93QXhpc1JhbmdlRW50cnlCb3hlcyYmbi5zZWxlY3QoYnQpLmNhbGwodS5tYWtlRWRpdGFibGUse2dkOmksaW1tZWRpYXRlOiEwLGJhY2tncm91bmQ6aS5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKGgpLGZpbGw6cy50aWNrZm9udD9zLnRpY2tmb250LmNvbG9yOiIjNDQ0Iixob3Jpem9udGFsQWxpZ246ZCx2ZXJ0aWNhbEFsaWduOmd9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXMuZDJyKHQpO3ZvaWQgMCE9PWUmJmwuY2FsbCgiX2d1aVJlbGF5b3V0IixpLGYsZSl9KSl9fX1mdW5jdGlvbiB6dChlLHIpe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIG49TWF0aC5tYXgoMCxNYXRoLm1pbih0dCxwdCplK190KSksaT1NYXRoLm1heCgwLE1hdGgubWluKGV0LGR0KnIrd3QpKSxhPU1hdGguYWJzKG4tX3QpLG89TWF0aC5hYnMoaS13dCk7ZnVuY3Rpb24gcygpe1N0PSIiLFR0LnI9VHQubCxUdC50PVR0LmIsTHQuYXR0cigiZCIsIk0wLDBaIil9aWYoVHQubD1NYXRoLm1pbihfdCxuKSxUdC5yPU1hdGgubWF4KF90LG4pLFR0LnQ9TWF0aC5taW4od3QsaSksVHQuYj1NYXRoLm1heCh3dCxpKSxydC5pc1N1YnBsb3RDb25zdHJhaW5lZClhPlB8fG8+UD8oU3Q9Inh5IixhL3R0Pm8vZXQ/KG89YSpldC90dCx3dD5pP1R0LnQ9d3QtbzpUdC5iPXd0K28pOihhPW8qdHQvZXQsX3Q+bj9UdC5sPV90LWE6VHQucj1fdCthKSxMdC5hdHRyKCJkIixHKFR0KSkpOnMoKTtlbHNlIGlmKG50LmlzU3VicGxvdENvbnN0cmFpbmVkKWlmKGE+UHx8bz5QKXtTdD0ieHkiO3ZhciBsPU1hdGgubWluKFR0LmwvdHQsKGV0LVR0LmIpL2V0KSxjPU1hdGgubWF4KFR0LnIvdHQsKGV0LVR0LnQpL2V0KTtUdC5sPWwqdHQsVHQucj1jKnR0LFR0LmI9KDEtbCkqZXQsVHQudD0oMS1jKSpldCxMdC5hdHRyKCJkIixHKFR0KSl9ZWxzZSBzKCk7ZWxzZSFhdHx8bzxNYXRoLm1pbihNYXRoLm1heCguNiphLEMpLFApP2E8Q3x8IWl0P3MoKTooVHQudD0wLFR0LmI9ZXQsU3Q9IngiLEx0LmF0dHIoImQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIk0iKyh0LmwtLjUpKyIsIisoZS1QLS41KSsiaC0zdiIrKDIqUCsxKSsiaDNaTSIrKHQucisuNSkrIiwiKyhlLVAtLjUpKyJoM3YiKygyKlArMSkrImgtM1oifShUdCx3dCkpKTohaXR8fGE8TWF0aC5taW4oLjYqbyxQKT8oVHQubD0wLFR0LnI9dHQsU3Q9InkiLEx0LmF0dHIoImQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIk0iKyhlLVAtLjUpKyIsIisodC50LS41KSsidi0zaCIrKDIqUCsxKSsidjNaTSIrKGUtUC0uNSkrIiwiKyh0LmIrLjUpKyJ2M2giKygyKlArMSkrInYtM1oifShUdCxfdCkpKTooU3Q9Inh5IixMdC5hdHRyKCJkIixHKFR0KSkpO1R0Lnc9VHQuci1UdC5sLFR0Lmg9VHQuYi1UdC50LFN0JiYoQ3Q9ITApLHQuX2RyYWdnZWQ9Q3QsVShFdCxMdCxUdCxBdCxNdCxrdCksRHQoKSx0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsaHQpLE10PSEwfWZ1bmN0aW9uIER0KCl7aHQ9e30sInh5IiE9PVN0JiYieCIhPT1TdHx8KFIoSixUdC5sL3R0LFR0LnIvdHQsaHQscnQueGF4ZXMpLFZ0KCJ4IixodCkpLCJ4eSIhPT1TdCYmInkiIT09U3R8fChSKEssKGV0LVR0LmIpL2V0LChldC1UdC50KS9ldCxodCxydC55YXhlcyksVnQoInkiLGh0KSl9ZnVuY3Rpb24gUnQoKXtEdCgpLEgodCksR3QoKSxxKHQpfVB0LnByZXBGbj1mdW5jdGlvbihlLHIsbil7dmFyIGE9UHQuZHJhZ21vZGUscz10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO3MhPT1hJiYoUHQuZHJhZ21vZGU9cykseXQoKSxwdD10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsZHQ9dC5fZnVsbExheW91dC5faW52U2NhbGVZLG90fHwoZ3Q/ZS5zaGlmdEtleT8icGFuIj09PXM/cz0iem9vbSI6eShzKXx8KHM9InBhbiIpOmUuY3RybEtleSYmKHM9InBhbiIpOnM9InBhbiIpLHgocyk/UHQubWluRHJhZz0xOlB0Lm1pbkRyYWc9dm9pZCAwLHkocyk/KFB0LnhheGVzPUosUHQueWF4ZXM9SyxBKGUscixuLFB0LHMpKTooUHQuY2xpY2tGbj1PdCx5KGEpJiZJdCgpLG90fHwoInpvb20iPT09cz8oUHQubW92ZUZuPXp0LFB0LmRvbmVGbj1SdCxQdC5taW5EcmFnPTEsZnVuY3Rpb24oZSxyLG4pe3ZhciBhPWJ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO190PXItYS5sZWZ0LHd0PW4tYS50b3AsdC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIHM9aS5hcHBseTNEVHJhbnNmb3JtKHQuX2Z1bGxMYXlvdXQuX2ludlRyYW5zZm9ybSkoX3Qsd3QpO190PXNbMF0sd3Q9c1sxXSxUdD17bDpfdCxyOl90LHc6MCx0Ond0LGI6d3QsaDowfSxrdD10Ll9obXBpeGNvdW50P3QuX2htbHVtY291bnQvdC5faG1waXhjb3VudDpvKHQuX2Z1bGxMYXlvdXQucGxvdF9iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSxNdD0hMSxTdD0ieHkiLEN0PSExLEV0PU4obXQsa3QsUSwkLEF0PSJNMCwwSCIrdHQrIlYiK2V0KyJIMFYwIiksTHQ9aihtdCxRLCQpfSgwLHIsbikpOiJwYW4iPT09cyYmKFB0Lm1vdmVGbj1VdCxQdC5kb25lRm49R3QpKSksdC5fZnVsbExheW91dC5fcmVkcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dC5fZHJhZ2RhdGE7aWYoZSYmZS5lbGVtZW50PT09YnQpe3ZhciByPXQuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7eShyKXx8KHl0KCksWXQoWzAsMCx0dCxldF0pLFB0Lm1vdmVGbihlLmR4LGUuZHkpKX19fSxnLmluaXQoUHQpO3ZhciBGdD1bMCwwLHR0LGV0XSxCdD1udWxsLE50PUwuUkVEUkFXREVMQVksanQ9ZS5tYWlucGxvdD90Ll9mdWxsTGF5b3V0Ll9wbG90c1tlLm1haW5wbG90XTplO2Z1bmN0aW9uIFV0KGUscil7aWYoZSo9cHQscio9ZHQsIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe2lmKHQuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITAsImV3Ij09PWl0fHwibnMiPT09YXQpe3ZhciBuPWl0Py1lOjAsaT1hdD8tcjowO2lmKG50LmlzU3VicGxvdENvbnN0cmFpbmVkKXtpZihpdCYmYXQpe3ZhciBhPShlL3R0LXIvZXQpLzI7bj0tKGU9YSp0dCksaT0tKHI9LWEqZXQpfWF0P249LWkqdHQvZXQ6aT0tbipldC90dH1yZXR1cm4gaXQmJihGKEosZSksVnQoIngiKSksYXQmJihGKEssciksVnQoInkiKSksWXQoW24saSx0dCxldF0pLEh0KCksdm9pZCB0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsaHQpfXZhciBvLHMsbD0idyI9PT1pdD09KCJuIj09PWF0KT8xOi0xO2lmKGl0JiZhdCYmKHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkfHxudC5pc1N1YnBsb3RDb25zdHJhaW5lZCkpe3ZhciBjPShlL3R0K2wqci9ldCkvMjtlPWMqdHQscj1sKmMqZXR9aWYoInciPT09aXQ/ZT1wKEosMCxlKToiZSI9PT1pdD9lPXAoSiwxLC1lKTppdHx8KGU9MCksIm4iPT09YXQ/cj1wKEssMSxyKToicyI9PT1hdD9yPXAoSywwLC1yKTphdHx8KHI9MCksbz0idyI9PT1pdD9lOjAscz0ibiI9PT1hdD9yOjAscnQuaXNTdWJwbG90Q29uc3RyYWluZWQmJiFudC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQmJml0JiZhdCYmbD4wKXt2YXIgdTtpZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8IWl0JiYxPT09YXQubGVuZ3RoKXtmb3IodT0wO3U8Si5sZW5ndGg7dSsrKUpbdV0ucmFuZ2U9Slt1XS5fci5zbGljZSgpLEUoSlt1XSwxLXIvZXQpO289KGU9cip0dC9ldCkvMn1pZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8IWF0JiYxPT09aXQubGVuZ3RoKXtmb3IodT0wO3U8Sy5sZW5ndGg7dSsrKUtbdV0ucmFuZ2U9S1t1XS5fci5zbGljZSgpLEUoS1t1XSwxLWUvdHQpO3M9KHI9ZSpldC90dCkvMn19bnQuaXNTdWJwbG90Q29uc3RyYWluZWQmJmF0fHxWdCgieCIpLG50LmlzU3VicGxvdENvbnN0cmFpbmVkJiZpdHx8VnQoInkiKTt2YXIgZj10dC1lLGg9ZXQtcjshbnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fGl0JiZhdHx8KGl0PyhzPW8/MDplKmV0L3R0LGg9ZipldC90dCk6KG89cz8wOnIqdHQvZXQsZj1oKnR0L2V0KSksWXQoW28scyxmLGhdKSxIdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixodCl9ZnVuY3Rpb24gcCh0LGUscil7Zm9yKHZhciBuLGksYT0xLWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lmKCFzLmZpeGVkcmFuZ2Upe249cyxpPXMuX3JsW2FdKyhzLl9ybFtlXS1zLl9ybFthXSkvQihyL3MuX2xlbmd0aCk7dmFyIGw9cy5sMnIoaSk7ITEhPT1sJiZ2b2lkIDAhPT1sJiYocy5yYW5nZVtlXT1sKX19cmV0dXJuIG4uX2xlbmd0aCoobi5fcmxbZV0taSkvKG4uX3JsW2VdLW4uX3JsW2FdKX19ZnVuY3Rpb24gVnQodCxlKXtmb3IodmFyIHI9bnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Syx5Okp9W3RdOm50W3QrImF4ZXMiXSxuPW50LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OkoseTpLfVt0XTpbXSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1hLl9pZCxzPW50LnhMaW5rc1tvXXx8bnQueUxpbmtzW29dLGw9blswXXx8VltzXXx8WltzXTtsJiYoZT8oZVthLl9uYW1lKyIucmFuZ2VbMF0iXT1lW2wuX25hbWUrIi5yYW5nZVswXSJdLGVbYS5fbmFtZSsiLnJhbmdlWzFdIl09ZVtsLl9uYW1lKyIucmFuZ2VbMV0iXSk6YS5yYW5nZT1sLnJhbmdlLnNsaWNlKCkpfX1mdW5jdGlvbiBIdCgpe3ZhciBlLHI9W107ZnVuY3Rpb24gbih0KXtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uZml4ZWRyYW5nZXx8ci5wdXNoKHRbZV0uX2lkKX1mb3Ioc3QmJihuKEopLG4ocnQueGF4ZXMpLG4obnQueGF4ZXMpKSxsdCYmKG4oSyksbihydC55YXhlcyksbihudC55YXhlcykpLGh0PXt9LGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXSxhPWsodCxpKTtkLmRyYXdPbmUodCxhLHtza2lwVGl0bGU6ITB9KSxodFthLl9uYW1lKyIucmFuZ2VbMF0iXT1hLnJhbmdlWzBdLGh0W2EuX25hbWUrIi5yYW5nZVsxXSJdPWEucmFuZ2VbMV19ZC5yZWRyYXdDb21wb25lbnRzKHQscil9ZnVuY3Rpb24gcXQoKXtpZighdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7dmFyIGU9dC5fY29udGV4dC5kb3VibGVDbGljayxyPVtdO2l0JiYocj1yLmNvbmNhdChKKSksYXQmJihyPXIuY29uY2F0KEspKSxudC54YXhlcyYmKHI9ci5jb25jYXQobnQueGF4ZXMpKSxudC55YXhlcyYmKHI9ci5jb25jYXQobnQueWF4ZXMpKTt2YXIgbixpLGEsbz17fTtpZigicmVzZXQrYXV0b3NpemUiPT09ZSlmb3IoZT0iYXV0b3NpemUiLGk9MDtpPHIubGVuZ3RoO2krKylpZigobj1yW2ldKS5fcmFuZ2VJbml0aWFsJiYobi5yYW5nZVswXSE9PW4uX3JhbmdlSW5pdGlhbFswXXx8bi5yYW5nZVsxXSE9PW4uX3JhbmdlSW5pdGlhbFsxXSl8fCFuLl9yYW5nZUluaXRpYWwmJiFuLmF1dG9yYW5nZSl7ZT0icmVzZXQiO2JyZWFrfWlmKCJhdXRvc2l6ZSI9PT1lKWZvcihpPTA7aTxyLmxlbmd0aDtpKyspKG49cltpXSkuZml4ZWRyYW5nZXx8KG9bbi5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTtlbHNlIGlmKCJyZXNldCI9PT1lKWZvcigoaXR8fHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmKHI9ci5jb25jYXQocnQueGF4ZXMpKSxhdCYmIXJ0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYocj1yLmNvbmNhdChydC55YXhlcykpLHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYoaXQ/YXR8fChyPXIuY29uY2F0KEspKTpyPXIuY29uY2F0KEopKSxpPTA7aTxyLmxlbmd0aDtpKyspKG49cltpXSkuZml4ZWRyYW5nZXx8KG4uX3JhbmdlSW5pdGlhbD8oYT1uLl9yYW5nZUluaXRpYWwsb1tuLl9uYW1lKyIucmFuZ2VbMF0iXT1hWzBdLG9bbi5fbmFtZSsiLnJhbmdlWzFdIl09YVsxXSk6b1tuLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApO3QuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxsLmNhbGwoIl9ndWlSZWxheW91dCIsdCxvKX19ZnVuY3Rpb24gR3QoKXtZdChbMCwwLHR0LGV0XSksaS5zeW5jT3JBc3luYyhbVC5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMSxsLmNhbGwoIl9ndWlSZWxheW91dCIsdCxodCl9XSx0KX1mdW5jdGlvbiBZdChlKXt2YXIgcixuLGEsbyxzPXQuX2Z1bGxMYXlvdXQsYz1zLl9wbG90cyx1PXMuX3N1YnBsb3RzLmNhcnRlc2lhbjtpZih1dCYmbC5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLmRyYWcodCksY3QpZm9yKHI9MDtyPHUubGVuZ3RoO3IrKylpZihhPShuPWNbdVtyXV0pLnhheGlzLG89bi55YXhpcyxuLl9zY2VuZSl7dmFyIGY9aS5zaW1wbGVNYXAoYS5yYW5nZSxhLnIybCkscD1pLnNpbXBsZU1hcChvLnJhbmdlLG8ucjJsKTtuLl9zY2VuZS51cGRhdGUoe3JhbmdlOltmWzBdLHBbMF0sZlsxXSxwWzFdXX0pfWlmKCh1dHx8Y3QpJiYoXyh0KSx3KHQpKSxmdCl7dmFyIGQ9ZVsyXS9JLl9sZW5ndGgsZz1lWzNdL08uX2xlbmd0aDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKXthPShuPWNbdVtyXV0pLnhheGlzLG89bi55YXhpczt2YXIgeSx4LGIsVCxrPShzdHx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYhYS5maXhlZHJhbmdlJiZWW2EuX2lkXSxBPShsdHx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYhby5maXhlZHJhbmdlJiZaW28uX2lkXTtpZihrPyh5PWQsYj12fHxudC5pc1N1YnBsb3RDb25zdHJhaW5lZD9lWzBdOlp0KGEseSkpOm50LnhhSGFzaFthLl9pZF0/KHk9ZCxiPWVbMF0qYS5fbGVuZ3RoL0kuX2xlbmd0aCk6bnQueWFIYXNoW2EuX2lkXT8oeT1nLGI9Im5zIj09PWF0Py1lWzFdKmEuX2xlbmd0aC9PLl9sZW5ndGg6WnQoYSx5LHtuOiJ0b3AiLHM6ImJvdHRvbSJ9W2F0XSkpOmI9WHQoYSx5PVd0KGEsZCxnKSksQT8oeD1nLFQ9bXx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/ZVsxXTpadChvLHgpKTpudC55YUhhc2hbby5faWRdPyh4PWcsVD1lWzFdKm8uX2xlbmd0aC9PLl9sZW5ndGgpOm50LnhhSGFzaFtvLl9pZF0/KHg9ZCxUPSJldyI9PT1pdD8tZVswXSpvLl9sZW5ndGgvSS5fbGVuZ3RoOlp0KG8seCx7ZToicmlnaHQiLHc6ImxlZnQifVtpdF0pKTpUPVh0KG8seD1XdChvLGQsZykpLHl8fHgpe3l8fCh5PTEpLHh8fCh4PTEpO3ZhciBNPWEuX29mZnNldC1iL3ksUz1vLl9vZmZzZXQtVC94O24uY2xpcFJlY3QuY2FsbChoLnNldFRyYW5zbGF0ZSxiLFQpLmNhbGwoaC5zZXRTY2FsZSx5LHgpLG4ucGxvdC5jYWxsKGguc2V0VHJhbnNsYXRlLE0sUykuY2FsbChoLnNldFNjYWxlLDEveSwxL3gpLHk9PT1uLnhTY2FsZUZhY3RvciYmeD09PW4ueVNjYWxlRmFjdG9yfHwoaC5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMseSx4KSxoLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCx5LHgpKSxoLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMobi5jbGlwT25BeGlzRmFsc2VUcmFjZXMsbiksbi54U2NhbGVGYWN0b3I9eSxuLnlTY2FsZUZhY3Rvcj14fX19fWZ1bmN0aW9uIFd0KHQsZSxyKXtyZXR1cm4gdC5maXhlZHJhbmdlPzA6c3QmJnJ0LnhhSGFzaFt0Ll9pZF0/ZTpsdCYmKHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkP3J0LnhhSGFzaDpydC55YUhhc2gpW3QuX2lkXT9yOjB9ZnVuY3Rpb24gWHQodCxlKXtyZXR1cm4gZT8odC5yYW5nZT10Ll9yLnNsaWNlKCksRSh0LGUpLFp0KHQsZSkpOjB9ZnVuY3Rpb24gWnQodCxlLHIpe3JldHVybiB0Ll9sZW5ndGgqKDEtZSkqYltyfHx0LmNvbnN0cmFpbnRvd2FyZHx8Im1pZGRsZSJdfXJldHVybiBtLmxlbmd0aCp2Lmxlbmd0aCE9MSYmVyhidCwoZnVuY3Rpb24oZSl7aWYodC5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW58fHQuX2Z1bGxMYXlvdXQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKEl0KCksdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgZS5zdG9wUHJvcGFnYXRpb24oKTt5dCgpLGNsZWFyVGltZW91dChCdCk7dmFyIHI9LWUuZGVsdGFZO2lmKGlzRmluaXRlKHIpfHwocj1lLndoZWVsRGVsdGEvMTApLGlzRmluaXRlKHIpKXt2YXIgbixhPU1hdGguZXhwKC1NYXRoLm1pbihNYXRoLm1heChyLC0yMCksMjApLzIwMCksbz1qdC5kcmFnbGF5ZXIuc2VsZWN0KCIubnNld2RyYWciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz0oZS5jbGllbnRYLW8ubGVmdCkvby53aWR0aCxsPShvLmJvdHRvbS1lLmNsaWVudFkpL28uaGVpZ2h0O2lmKHN0KXtmb3Iodnx8KHM9LjUpLG49MDtuPEoubGVuZ3RoO24rKyljKEpbbl0scyxhKTtWdCgieCIpLEZ0WzJdKj1hLEZ0WzBdKz1GdFsyXSpzKigxL2EtMSl9aWYobHQpe2ZvcihtfHwobD0uNSksbj0wO248Sy5sZW5ndGg7bisrKWMoS1tuXSxsLGEpO1Z0KCJ5IiksRnRbM10qPWEsRnRbMV0rPUZ0WzNdKigxLWwpKigxL2EtMSl9WXQoRnQpLEh0KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KSxCdD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQmJihGdD1bMCwwLHR0LGV0XSxHdCgpKX0pLE50KSxlLnByZXZlbnREZWZhdWx0KCl9ZWxzZSBpLmxvZygiRGlkIG5vdCBmaW5kIHdoZWVsIG1vdGlvbiBhdHRyaWJ1dGVzOiAiLGUpfWZ1bmN0aW9uIGModCxlLHIpe2lmKCF0LmZpeGVkcmFuZ2Upe3ZhciBuPWkuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGE9blswXSsoblsxXS1uWzBdKSplO3QucmFuZ2U9bi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmwycihhKyhlLWEpKnIpfSkpfX19KSksYnR9LG1ha2VEcmFnZ2VyOk8sbWFrZVJlY3REcmFnZ2VyOnosbWFrZVpvb21ib3g6TixtYWtlQ29ybmVyczpqLHVwZGF0ZVpvb21ib3g6VSx4eUNvcm5lcnM6Ryx0cmFuc2l0aW9uWm9vbWJveDpWLHJlbW92ZVpvb21ib3g6SCxzaG93RG91YmxlQ2xpY2tOb3RpZmllcjpxLGF0dGFjaFdoZWVsRXZlbnRIYW5kbGVyOld9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6Mzg1LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjM4NCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo0ODcsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjUyNCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo1NDQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL3Bsb3RzIjo2MTksIi4vYXhlcyI6NTU0LCIuL2F4aXNfaWRzIjo1NTgsIi4vY29uc3RhbnRzIjo1NjEsIi4vc2NhbGVfem9vbSI6NTc0LCIuL3NlbGVjdCI6NTc1LCJAcGxvdGx5L2QzIjo1OCwiaGFzLXBhc3NpdmUtZXZlbnRzIjoyMjksdGlueWNvbG9yMjozMTJ9XSw1NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLG89dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHM9dCgiLi9kcmFnYm94IikubWFrZURyYWdCb3gsbD10KCIuL2NvbnN0YW50cyIpLkRSQUdHRVJTSVpFO3IuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKHQuX2NvbnRleHQuc3RhdGljUGxvdCluLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5kcmFnIikucmVtb3ZlKCk7ZWxzZSBpZihlLl9oYXMoImNhcnRlc2lhbiIpfHxlLl9oYXMoInNwbG9tIikpe09iamVjdC5rZXlzKGUuX3Bsb3RzfHx7fSkuc29ydCgoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KCJ5IiksaT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1pWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoaVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihpWzBdfHwxKX1yZXR1cm4gZS5fcGxvdHNbdF0ubWFpbnBsb3Q/MTotMX0pKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1lLl9wbG90c1tyXSxvPW4ueGF4aXMsYz1uLnlheGlzO2lmKCFuLm1haW5wbG90KXt2YXIgdT1zKHQsbixvLl9vZmZzZXQsYy5fb2Zmc2V0LG8uX2xlbmd0aCxjLl9sZW5ndGgsIm5zIiwiZXciKTt1Lm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yJiZ0Ll9mdWxsTGF5b3V0Ll9wbG90c1tyXSYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldC1sLGwsbCwibiIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1sLGwsbCwibiIsImUiKSxzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLCJzIiwiZSIpKX1pZih0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGY9by5fbWFpbkxpbmVQb3NpdGlvbjsidG9wIj09PW8uc2lkZSYmKGYtPWwpLHModCxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsZiwuOCpvLl9sZW5ndGgsbCwiIiwiZXciKSxzKHQsbixvLl9vZmZzZXQsZiwuMSpvLl9sZW5ndGgsbCwiIiwidyIpLHModCxuLG8uX29mZnNldCsuOSpvLl9sZW5ndGgsZiwuMSpvLl9sZW5ndGgsbCwiIiwiZSIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGg9Yy5fbWFpbkxpbmVQb3NpdGlvbjsicmlnaHQiIT09Yy5zaWRlJiYoaC09bCkscyh0LG4saCxjLl9vZmZzZXQrLjEqYy5fbGVuZ3RoLGwsLjgqYy5fbGVuZ3RoLCJucyIsIiIpLHModCxuLGgsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxsLC4xKmMuX2xlbmd0aCwicyIsIiIpLHModCxuLGgsYy5fb2Zmc2V0LGwsLjEqYy5fbGVuZ3RoLCJuIiwiIil9fX0pKTt2YXIgbz1lLl9ob3ZlcmxheWVyLm5vZGUoKTtvLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxvLm9uY2xpY2s9ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuY2xpY2sodCxlKX0sby5vbm1vdXNlZG93bj1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIub25tb3VzZWRvd24oZSl9LHIudXBkYXRlRngodCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj0icGFuIj09PWUuZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiO28oZS5fZHJhZ2dlcnMscil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjM4NSwiLi4vLi4vY29tcG9uZW50cy9meCI6NDA2LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MjQsIi4vY29uc3RhbnRzIjo1NjEsIi4vZHJhZ2JveCI6NTYzLCJAcGxvdGx5L2QzIjo1OH1dLDU2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NsZWFyT3V0bGluZUNvbnRyb2xsZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjtlJiZlLnNlbGVjdEFsbCgiLm91dGxpbmUtY29udHJvbGxlcnMiKS5yZW1vdmUoKX0sY2xlYXJTZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fem9vbWxheWVyO2UmJmUuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKSx0Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX19LHt9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlO2Z1bmN0aW9uIGkodCxlKXtzd2l0Y2godC50eXBlKXtjYXNlImxvZyI6cmV0dXJuIHQucDJkKGUpO2Nhc2UiZGF0ZSI6cmV0dXJuIHQucDJyKGUsMCx0LmNhbGVuZGFyKTtkZWZhdWx0OnJldHVybiB0LnAycihlKX19ZS5leHBvcnRzPXtwMnI6aSxyMnA6ZnVuY3Rpb24odCxlKXtzd2l0Y2godC50eXBlKXtjYXNlImxvZyI6cmV0dXJuIHQuZDJwKGUpO2Nhc2UiZGF0ZSI6cmV0dXJuIHQucjJwKGUsMCx0LmNhbGVuZGFyKTtkZWZhdWx0OnJldHVybiB0LnIycChlKX19LGF4VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9InkiPT09dC5faWQuY2hhckF0KDApPzE6MDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGkodCxyW2VdKX19LGdldFRyYW5zZm9ybTpmdW5jdGlvbih0KXtyZXR1cm4gbih0LnhheGlzLl9vZmZzZXQsdC55YXhpcy5fb2Zmc2V0KX19fSx7Ii4uLy4uL2xpYiI6NTAzfV0sNTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vYXhpc19pZHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG89ZVt0XTtpZihBcnJheS5pc0FycmF5KG8pKWZvcih2YXIgcz1uLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuLGw9cy5pZFJlZ2V4LGM9ci5fc3VicGxvdHMsdT1jLnhheGlzLGY9Yy55YXhpcyxoPWMuY2FydGVzaWFuLHA9ci5faGFzKCJjYXJ0ZXNpYW4iKXx8ci5faGFzKCJnbDJkIiksZD0wO2Q8by5sZW5ndGg7ZCsrKXt2YXIgbT1vW2RdO2lmKGkuaXNQbGFpbk9iamVjdChtKSl7dmFyIGc9YS5jbGVhbklkKG0ueHJlZiwieCIsITEpLHY9YS5jbGVhbklkKG0ueXJlZiwieSIsITEpLHk9bC54LnRlc3QoZykseD1sLnkudGVzdCh2KTtpZih5fHx4KXtwfHxpLnB1c2hVbmlxdWUoci5fYmFzZVBsb3RNb2R1bGVzLHMpO3ZhciBiPSExO3kmJi0xPT09dS5pbmRleE9mKGcpJiYodS5wdXNoKGcpLGI9ITApLHgmJi0xPT09Zi5pbmRleE9mKHYpJiYoZi5wdXNoKHYpLGI9ITApLGImJnkmJngmJmgucHVzaChnK3YpfX19fX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vYXhpc19pZHMiOjU1OH1dLDU2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9wbG90cyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGM9dCgiLi9heGlzX2lkcyIpLHU9dCgiLi9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksaD1hLmVuc3VyZVNpbmdsZTtmdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gYS5lbnN1cmVTaW5nbGUodCxlLHIsKGZ1bmN0aW9uKHQpe3QuZGF0dW0ocil9KSl9ZnVuY3Rpb24gZCh0LGUscixhLG8pe2Zvcih2YXIgYyxmLGgscD11LnRyYWNlTGF5ZXJDbGFzc2VzLGQ9dC5fZnVsbExheW91dCxtPWQuX21vZHVsZXMsZz1bXSx2PVtdLHk9MDt5PG0ubGVuZ3RoO3krKyl7dmFyIHg9KGM9bVt5XSkubmFtZSxiPWkubW9kdWxlc1t4XS5jYXRlZ29yaWVzO2lmKGIuc3ZnKXt2YXIgXz1jLmxheWVyTmFtZXx8eCsibGF5ZXIiLHc9Yy5wbG90O2g9KGY9bChyLHcpKVswXSxyPWZbMV0saC5sZW5ndGgmJmcucHVzaCh7aTpwLmluZGV4T2YoXyksY2xhc3NOYW1lOl8scGxvdE1ldGhvZDp3LGNkTW9kdWxlOmh9KSxiLnpvb21TY2FsZSYmdi5wdXNoKCIuIitfKX19Zy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmktZS5pfSkpO3ZhciBUPWUucGxvdC5zZWxlY3RBbGwoImcubWxheWVyIikuZGF0YShnLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KSk7aWYoVC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkpLmNsYXNzZWQoIm1sYXllciIsITApLmNsYXNzZWQoInJhbmdlcGxvdCIsZS5pc1JhbmdlUGxvdCksVC5leGl0KCkucmVtb3ZlKCksVC5vcmRlcigpLFQuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9bi5zZWxlY3QodGhpcyksbD1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QodCxlLHIuY2RNb2R1bGUsaSxhLG8pLC0xPT09dS5jbGlwT25BeGlzRmFsc2VRdWVyeS5pbmRleE9mKCIuIitsKSYmcy5zZXRDbGlwVXJsKGksZS5sYXllckNsaXBJZCx0KX0pKSxkLl9oYXMoInNjYXR0ZXJnbCIpJiYoYz1pLmdldE1vZHVsZSgic2NhdHRlcmdsIiksaD1sKHIsYylbMF0sYy5wbG90KHQsZSxoKSksIXQuX2NvbnRleHQuc3RhdGljUGxvdCYmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmKGUuY2xpcE9uQXhpc0ZhbHNlVHJhY2VzPWUucGxvdC5zZWxlY3RBbGwodS5jbGlwT25BeGlzRmFsc2VRdWVyeS5qb2luKCIsIikpLnNlbGVjdEFsbCgiLnRyYWNlIikpLHYubGVuZ3RoKSl7dmFyIGs9ZS5wbG90LnNlbGVjdEFsbCh2LmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKTtlLnpvb21TY2FsZVB0cz1rLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUuem9vbVNjYWxlVHh0PWsuc2VsZWN0QWxsKCIudGV4dHBvaW50Iil9fWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1lLnBsb3Rncm91cCxuPWUuaWQsaT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnhheGlzLmxheWVyXSxhPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueWF4aXMubGF5ZXJdLG89dC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zO2lmKGUubWFpbnBsb3Qpe3ZhciBzPWUubWFpbnBsb3RpbmZvLGw9cy5wbG90Z3JvdXAsZj1uKyIteCIsZD1uKyIteSI7ZS5ncmlkbGF5ZXI9cy5ncmlkbGF5ZXIsZS56ZXJvbGluZWxheWVyPXMuemVyb2xpbmVsYXllcixoKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGYpLGgocy5vdmVybGluZXNCZWxvdywicGF0aCIsZCksaChzLm92ZXJheGVzQmVsb3csImciLGYpLGgocy5vdmVyYXhlc0JlbG93LCJnIixkKSxlLnBsb3Q9aChzLm92ZXJwbG90LCJnIixuKSxoKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGYpLGgocy5vdmVybGluZXNBYm92ZSwicGF0aCIsZCksaChzLm92ZXJheGVzQWJvdmUsImciLGYpLGgocy5vdmVyYXhlc0Fib3ZlLCJnIixkKSxlLnhsaW5lcz1sLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2kpLnNlbGVjdCgiLiIrZiksZS55bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIithKS5zZWxlY3QoIi4iK2QpLGUueGF4aXNsYXllcj1sLnNlbGVjdCgiLm92ZXJheGVzLSIraSkuc2VsZWN0KCIuIitmKSxlLnlheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2EpLnNlbGVjdCgiLiIrZCl9ZWxzZSBpZihvKWUueGxpbmVzPWgociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLGUueWxpbmVzPWgociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLGUueGF4aXNsYXllcj1oKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksZS55YXhpc2xheWVyPWgociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKTtlbHNle3ZhciBtPWgociwiZyIsImxheWVyLXN1YnBsb3QiKTtlLnNoYXBlbGF5ZXI9aChtLCJnIiwic2hhcGVsYXllciIpLGUuaW1hZ2VsYXllcj1oKG0sImciLCJpbWFnZWxheWVyIiksZS5ncmlkbGF5ZXI9aChyLCJnIiwiZ3JpZGxheWVyIiksZS56ZXJvbGluZWxheWVyPWgociwiZyIsInplcm9saW5lbGF5ZXIiKSxoKHIsInBhdGgiLCJ4bGluZXMtYmVsb3ciKSxoKHIsInBhdGgiLCJ5bGluZXMtYmVsb3ciKSxlLm92ZXJsaW5lc0JlbG93PWgociwiZyIsIm92ZXJsaW5lcy1iZWxvdyIpLGgociwiZyIsInhheGlzbGF5ZXItYmVsb3ciKSxoKHIsImciLCJ5YXhpc2xheWVyLWJlbG93IiksZS5vdmVyYXhlc0JlbG93PWgociwiZyIsIm92ZXJheGVzLWJlbG93IiksZS5wbG90PWgociwiZyIsInBsb3QiKSxlLm92ZXJwbG90PWgociwiZyIsIm92ZXJwbG90IiksZS54bGluZXM9aChyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksZS55bGluZXM9aChyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksZS5vdmVybGluZXNBYm92ZT1oKHIsImciLCJvdmVybGluZXMtYWJvdmUiKSxoKHIsImciLCJ4YXhpc2xheWVyLWFib3ZlIiksaChyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpLGUub3ZlcmF4ZXNBYm92ZT1oKHIsImciLCJvdmVyYXhlcy1hYm92ZSIpLGUueGxpbmVzPXIuc2VsZWN0KCIueGxpbmVzLSIraSksZS55bGluZXM9ci5zZWxlY3QoIi55bGluZXMtIithKSxlLnhheGlzbGF5ZXI9ci5zZWxlY3QoIi54YXhpc2xheWVyLSIraSksZS55YXhpc2xheWVyPXIuc2VsZWN0KCIueWF4aXNsYXllci0iK2EpfW98fChwKGUuZ3JpZGxheWVyLCJnIixlLnhheGlzLl9pZCkscChlLmdyaWRsYXllciwiZyIsZS55YXhpcy5faWQpLGUuZ3JpZGxheWVyLnNlbGVjdEFsbCgiZyIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkuc29ydChjLmlkU29ydCkpLGUueGxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCksZS55bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKX1mdW5jdGlvbiBnKHQsZSl7aWYodCl7dmFyIHI9e307Zm9yKHZhciBpIGluIHQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dFswXTtuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKSx2KGksZSkscltpXT0hMH0pKSxlLl9wbG90cylmb3IodmFyIGE9ZS5fcGxvdHNbaV0ub3ZlcmxheXN8fFtdLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtyW3MuaWRdJiZzLnBsb3Quc2VsZWN0QWxsKCIudHJhY2UiKS5yZW1vdmUoKX19fWZ1bmN0aW9uIHYodCxlKXtlLl9kcmFnZ2Vycy5zZWxlY3RBbGwoImcuIit0KS5yZW1vdmUoKSxlLl9kZWZzLnNlbGVjdCgiI2NsaXAiK2UuX3VpZCt0KyJwbG90IikucmVtb3ZlKCl9ci5uYW1lPSJjYXJ0ZXNpYW4iLHIuYXR0cj1bInhheGlzIiwieWF4aXMiXSxyLmlkUm9vdD1bIngiLCJ5Il0sci5pZFJlZ2V4PXUuaWRSZWdleCxyLmF0dHJSZWdleD11LmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci50cmFuc2l0aW9uQXhlcz10KCIuL3RyYW5zaXRpb25fYXhlcyIpLHIuZmluYWxpemVTdWJwbG90cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxvPWUuX3N1YnBsb3RzLHM9by54YXhpcyxsPW8ueWF4aXMsZj1vLmNhcnRlc2lhbixoPWYuY29uY2F0KG8uZ2wyZHx8W10pLHA9e30sZD17fTtmb3Iocj0wO3I8aC5sZW5ndGg7cisrKXt2YXIgbT1oW3JdLnNwbGl0KCJ5Iik7cFttWzBdXT0xLGRbInkiK21bMV1dPTF9Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylwW249c1tyXV18fChpPSh0W2MuaWQybmFtZShuKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LnkudGVzdChpKXx8KGk9InkiKSxmLnB1c2gobitpKSxoLnB1c2gobitpKSxkW2ldfHwoZFtpXT0xLGEucHVzaFVuaXF1ZShsLGkpKSk7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylkW2k9bFtyXV18fChuPSh0W2MuaWQybmFtZShpKV18fHt9KS5hbmNob3IsdS5pZFJlZ2V4LngudGVzdChuKXx8KG49IngiKSxmLnB1c2gobitpKSxoLnB1c2gobitpKSxwW25dfHwocFtuXT0xLGEucHVzaFVuaXF1ZShzLG4pKSk7aWYoIWgubGVuZ3RoKXtmb3IodmFyIGcgaW4gbj0iIixpPSIiLHQpe2lmKHUuYXR0clJlZ2V4LnRlc3QoZykpIngiPT09Zy5jaGFyQXQoMCk/KCFufHwrZy5zdWJzdHIoNSk8K24uc3Vic3RyKDUpKSYmKG49Zyk6KCFpfHwrZy5zdWJzdHIoNSk8K2kuc3Vic3RyKDUpKSYmKGk9Zyl9bj1uP2MubmFtZTJpZChuKToieCIsaT1pP2MubmFtZTJpZChpKToieSIscy5wdXNoKG4pLGwucHVzaChpKSxmLnB1c2gobitpKX19LHIucGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQsbz1hLl9zdWJwbG90cy5jYXJ0ZXNpYW4scz10LmNhbGNkYXRhO2lmKCFBcnJheS5pc0FycmF5KGUpKWZvcihlPVtdLGk9MDtpPHMubGVuZ3RoO2krKyllLnB1c2goaSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7Zm9yKHZhciBsLGM9b1tpXSx1PWEuX3Bsb3RzW2NdLGY9W10saD0wO2g8cy5sZW5ndGg7aCsrKXt2YXIgcD1zW2hdLG09cFswXS50cmFjZTttLnhheGlzK20ueWF4aXM9PT1jJiYoKC0xIT09ZS5pbmRleE9mKG0uaW5kZXgpfHxtLmNhcnBldCkmJihsJiZsWzBdLnRyYWNlLnhheGlzK2xbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiLCJ0b25leHQiXS5pbmRleE9mKG0uZmlsbCkmJi0xPT09Zi5pbmRleE9mKGwpJiZmLnB1c2gobCksZi5wdXNoKHApKSxsPXApfWQodCx1LGYscixuKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9bi5fcGxvdHN8fHt9LGw9ZS5fcGxvdHN8fHt9LHU9bi5fc3VicGxvdHN8fHt9O2lmKG4uX2hhc09ubHlMYXJnZVNwbG9tcyYmIWUuX2hhc09ubHlMYXJnZVNwbG9tcylmb3IobyBpbiBzKShpPXNbb10pLnBsb3Rncm91cCYmaS5wbG90Z3JvdXAucmVtb3ZlKCk7dmFyIGY9bi5faGFzJiZuLl9oYXMoImdsIiksaD1lLl9oYXMmJmUuX2hhcygiZ2wiKTtpZihmJiYhaClmb3IobyBpbiBzKShpPXNbb10pLl9zY2VuZSYmaS5fc2NlbmUuZGVzdHJveSgpO2lmKHUueGF4aXMmJnUueWF4aXMpe3ZhciBwPWMubGlzdElkcyh7X2Z1bGxMYXlvdXQ6bn0pO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspe3ZhciBkPXBbYV07ZVtjLmlkMm5hbWUoZCldfHxuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuZy0iK2QrInRpdGxlIikucmVtb3ZlKCl9fXZhciBtPW4uX2hhcyYmbi5faGFzKCJjYXJ0ZXNpYW4iKSx5PWUuX2hhcyYmZS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihtJiYheSlnKG4uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKSxuKSxuLl9kZWZzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikucmVtb3ZlKCksZGVsZXRlIG4uX2F4aXNDb25zdHJhaW50R3JvdXBzLGRlbGV0ZSBuLl9heGlzTWF0Y2hHcm91cHM7ZWxzZSBpZih1LmNhcnRlc2lhbilmb3IoYT0wO2E8dS5jYXJ0ZXNpYW4ubGVuZ3RoO2ErKyl7dmFyIHg9dS5jYXJ0ZXNpYW5bYV07aWYoIWxbeF0pe3ZhciBiPSIuIit4KyIsLiIreCsiLXgsLiIreCsiLXkiO24uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbChiKS5yZW1vdmUoKSx2KHgsbil9fX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VicGxvdHMuY2FydGVzaWFuLGM9bC5sZW5ndGgsdT1bXSxmPVtdO2ZvcihlPTA7ZTxjO2UrKyl7bj1sW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgaD1hLl9tYWluQXhpcyxwPW8uX21haW5BeGlzLGQ9aC5faWQrcC5faWQsbT1zLl9wbG90c1tkXTtpLm92ZXJsYXlzPVtdLGQhPT1uJiZtPyhpLm1haW5wbG90PWQsaS5tYWlucGxvdGluZm89bSxmLnB1c2gobikpOihpLm1haW5wbG90PXZvaWQgMCxpLm1haW5wbG90aW5mbz12b2lkIDAsdS5wdXNoKG4pKX1mb3IoZT0wO2U8Zi5sZW5ndGg7ZSsrKW49ZltlXSwoaT1zLl9wbG90c1tuXSkubWFpbnBsb3RpbmZvLm92ZXJsYXlzLnB1c2goaSk7dmFyIGc9dS5jb25jYXQoZiksdj1uZXcgQXJyYXkoYyk7Zm9yKGU9MDtlPGM7ZSsrKXtuPWdbZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciB5PVtuLGEubGF5ZXIsby5sYXllcixhLm92ZXJsYXlpbmd8fCIiLG8ub3ZlcmxheWluZ3x8IiJdO2ZvcihyPTA7cjxpLm92ZXJsYXlzLmxlbmd0aDtyKyspeS5wdXNoKGkub3ZlcmxheXNbcl0uaWQpO3ZbZV09eX1yZXR1cm4gdn0odCksaT1lLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90IikuZGF0YShyLFN0cmluZyk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInN1YnBsb3QgIit0WzBdfSkpLGkub3JkZXIoKSxpLmV4aXQoKS5jYWxsKGcsZSksaS5lYWNoKChmdW5jdGlvbihyKXt2YXIgaT1yWzBdLGE9ZS5fcGxvdHNbaV07YS5wbG90Z3JvdXA9bi5zZWxlY3QodGhpcyksbSh0LGEpLGEuZHJhZ2xheWVyPWgoZS5fZHJhZ2dlcnMsImciLGkpfSkpfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7bSh0LGUpLGQodCxlLHIpLG8uc3R5bGUodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIik7ci5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkpLnNlbGVjdEFsbCgiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ZS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmYuc3ZnLCJ4bGluazpocmVmIjp0LHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLHg6MCx5OjAsd2lkdGg6dGhpcy5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5zdHlsZS5oZWlnaHR9KX0pKX0sci51cGRhdGVGeD10KCIuL2dyYXBoX2ludGVyYWN0IikudXBkYXRlRnh9LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9nZXRfZGF0YSI6NTkzLCIuLi9wbG90cyI6NjE5LCIuL2F0dHJpYnV0ZXMiOjU1MiwiLi9heGlzX2lkcyI6NTU4LCIuL2NvbnN0YW50cyI6NTYxLCIuL2dyYXBoX2ludGVyYWN0Ijo1NjQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OSwiLi9sYXlvdXRfZGVmYXVsdHMiOjU3MCwiLi90cmFuc2l0aW9uX2F4ZXMiOjU4MSwiQHBsb3RseS9kMyI6NTh9XSw1Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5kZXNjcmlwdGlvbldpdGhEYXRlcyxjPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVksdT10KCIuL2NvbnN0YW50cyIpLGY9dS5IT1VSX1BBVFRFUk4saD11LldFRUtEQVlfUEFUVEVSTjtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksc3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSIsIm11bHRpY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sYXV0b3R5cGVudW1iZXJzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb252ZXJ0IHR5cGVzIiwic3RyaWN0Il0sZGZsdDoiY29udmVydCB0eXBlcyIsZWRpdFR5cGU6ImNhbGMifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsicmFuZ2VbMF0iOnZvaWQgMCwicmFuZ2VbMV0iOnZvaWQgMH19LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX0sYW5pbTohMH1dLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX0sYW5pbTohMH0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHNjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W3UuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzY2FsZXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFuZ2UiLCJkb21haW4iXSxlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6InBsb3QifSxtYXRjaGVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W3UuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxyYW5nZWJyZWFrczpzKCJyYW5nZWJyZWFrIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGJvdW5kczp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSxwYXR0ZXJuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2gsZiwiIl0sZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn19LGR2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjAsZGZsdDpjfSxlZGl0VHlwZToiY2FsYyJ9KSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxpbmVhciIsImFycmF5Il0sZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2swOnZvaWQgMCxkdGljazp2b2lkIDB9fSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToidGlja3MifSx0aWNrMDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSxkdGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwiIl0sZWRpdFR5cGU6InRpY2tzIn0sdGlja3Nvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGFiZWxzIiwiYm91bmRhcmllcyJdLGRmbHQ6ImxhYmVscyIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2xhYmVsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zdGFudCIsInBlcmlvZCJdLGRmbHQ6Imluc3RhbnQiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tsYWJlbHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwib3V0c2lkZSB0b3AiLCJpbnNpZGUgdG9wIiwib3V0c2lkZSBsZWZ0IiwiaW5zaWRlIGxlZnQiLCJvdXRzaWRlIHJpZ2h0IiwiaW5zaWRlIHJpZ2h0Iiwib3V0c2lkZSBib3R0b20iLCJpbnNpZGUgYm90dG9tIl0sZGZsdDoib3V0c2lkZSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrbGFiZWxvdmVyZmxvdzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsb3ciLCJoaWRlIHBhc3QgZGl2IiwiaGlkZSBwYXN0IGRvbWFpbiJdLGVkaXRUeXBlOiJjYWxjIn0sbWlycm9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCJ0aWNrcyIsITEsImFsbCIsImFsbHRpY2tzIl0sZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NSxlZGl0VHlwZToidGlja3MifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxhdXRvbWFyZ2luOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im1vZGViYXIifSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpudWxsLGVkaXRUeXBlOiJub25lIn0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VkYXNoOm8oe30sYSx7ZGZsdDoiZGFzaCIsZWRpdFR5cGU6Im5vbmUifSksc3Bpa2Vtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ0b2F4aXMiLCJhY3Jvc3MiLCJtYXJrZXIiXSxkZmx0OiJ0b2F4aXMiLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VzbmFwOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkYXRhIiwiY3Vyc29yIiwiaG92ZXJlZCBkYXRhIl0sZGZsdDoiaG92ZXJlZCBkYXRhIixlZGl0VHlwZToibm9uZSJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToidGlja3MifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIixlZGl0VHlwZToidGlja3MifSxtaW5leHBvbmVudDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMsbWluOjAsZWRpdFR5cGU6InRpY2tzIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzIn0sdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyIsZGVzY3JpcHRpb246bCgidGljayBsYWJlbCIpfSx0aWNrZm9ybWF0c3RvcHM6cygidGlja2Zvcm1hdHN0b3AiLHtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGR0aWNrcmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifV0sZWRpdFR5cGU6InRpY2tzIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxlZGl0VHlwZToidGlja3MifSksaG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibm9uZSIsZGVzY3JpcHRpb246bCgiaG92ZXIgdGV4dCIpfSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToidGlja3MifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLHUuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLHUuaWRSZWdleC54LnRvU3RyaW5nKCksdS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIixlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToicGxvdCJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5IiwidG90YWwgYXNjZW5kaW5nIiwidG90YWwgZGVzY2VuZGluZyIsIm1pbiBhc2NlbmRpbmciLCJtaW4gZGVzY2VuZGluZyIsIm1heCBhc2NlbmRpbmciLCJtYXggZGVzY2VuZGluZyIsInN1bSBhc2NlbmRpbmciLCJzdW0gZGVzY2VuZGluZyIsIm1lYW4gYXNjZW5kaW5nIiwibWVhbiBkZXNjZW5kaW5nIiwibWVkaWFuIGFzY2VuZGluZyIsIm1lZGlhbiBkZXNjZW5kaW5nIl0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6Mzg3LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi9mb250X2F0dHJpYnV0ZXMiOjU4NSwiLi9jb25zdGFudHMiOjU2MX1dLDU3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmlzVW5pZmllZEhvdmVyLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3Zlcm1vZGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxsPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksYz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuL3R5cGVfZGVmYXVsdHMiKSxmPXQoIi4vYXhpc19kZWZhdWx0cyIpLGg9dCgiLi9jb25zdHJhaW50cyIpLHA9dCgiLi9wb3NpdGlvbl9kZWZhdWx0cyIpLGQ9dCgiLi9heGlzX2lkcyIpLG09ZC5pZDJuYW1lLGc9ZC5uYW1lMmlkLHY9dCgiLi9jb25zdGFudHMiKS5BWF9JRF9QQVRURVJOLHk9dCgiLi4vLi4vcmVnaXN0cnkiKSx4PXkudHJhY2VJcyxiPXkuZ2V0Q29tcG9uZW50TWV0aG9kO2Z1bmN0aW9uIF8odCxlLHIpe0FycmF5LmlzQXJyYXkodFtlXSk/dFtlXS5wdXNoKHIpOnRbZV09W3JdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHksdyxUPWUuYXV0b3R5cGVudW1iZXJzLGs9e30sQT17fSxNPXt9LFM9e30sRT17fSxMPXt9LEM9e30sUD17fSxJPXt9LE89e307Zm9yKHk9MDt5PHIubGVuZ3RoO3krKyl7dmFyIHo9clt5XTtpZih4KHosImNhcnRlc2lhbiIpfHx4KHosImdsMmQiKSl7dmFyIEQsUjtpZih6LnhheGlzKUQ9bSh6LnhheGlzKSxfKGssRCx6KTtlbHNlIGlmKHoueGF4ZXMpZm9yKHc9MDt3PHoueGF4ZXMubGVuZ3RoO3crKylfKGssbSh6LnhheGVzW3ddKSx6KTtpZih6LnlheGlzKVI9bSh6LnlheGlzKSxfKGssUix6KTtlbHNlIGlmKHoueWF4ZXMpZm9yKHc9MDt3PHoueWF4ZXMubGVuZ3RoO3crKylfKGssbSh6LnlheGVzW3ddKSx6KTtpZigiZnVubmVsIj09PXoudHlwZT8iaCI9PT16Lm9yaWVudGF0aW9uPyhEJiYoQVtEXT0hMCksUiYmKENbUl09ITApKTpSJiYoTVtSXT0hMCk6ImltYWdlIj09PXoudHlwZT8oUiYmKFBbUl09ITApLEQmJihQW0RdPSEwKSk6KFImJihFW1JdPSEwLExbUl09ITApLHgoeiwiY2FycGV0IikmJigiY2FycGV0IiE9PXoudHlwZXx8ei5fY2hlYXRlcil8fEQmJihTW0RdPSEwKSksImNhcnBldCI9PT16LnR5cGUmJnouX2NoZWF0ZXImJkQmJihBW0RdPSEwKSx4KHosIjJkTWFwIikmJihJW0RdPSEwLElbUl09ITApLHgoeiwib3JpZW50ZWQiKSlPWyJoIj09PXoub3JpZW50YXRpb24/UjpEXT0hMH19dmFyIEY9ZS5fc3VicGxvdHMsQj1GLnhheGlzLE49Ri55YXhpcyxqPW4uc2ltcGxlTWFwKEIsbSksVT1uLnNpbXBsZU1hcChOLG0pLFY9ai5jb25jYXQoVSksSD1pLmJhY2tncm91bmQ7Qi5sZW5ndGgmJk4ubGVuZ3RoJiYoSD1uLmNvZXJjZSh0LGUsbCwicGxvdF9iZ2NvbG9yIikpO3ZhciBxLEcsWSxXLFgsWj1pLmNvbWJpbmUoSCxlLnBhcGVyX2JnY29sb3IpO2Z1bmN0aW9uIEooKXt2YXIgdD1rW3FdfHxbXTtYLl90cmFjZUluZGljZXM9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSkpLFguX2FubkluZGljZXM9W10sWC5fc2hhcGVJbmRpY2VzPVtdLFguX2ltZ0luZGljZXM9W10sWC5fc3VicGxvdHNXaXRoPVtdLFguX2NvdW50ZXJBeGVzPVtdLFguX25hbWU9WC5fYXR0cj1xLFguX2lkPUd9ZnVuY3Rpb24gSyh0LGUpe3JldHVybiBuLmNvZXJjZShXLFgsYyx0LGUpfWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gbi5jb2VyY2UyKFcsWCxjLHQsZSl9ZnVuY3Rpb24gJCh0KXtyZXR1cm4ieCI9PT10P046Qn1mdW5jdGlvbiB0dChlLHIpe2Zvcih2YXIgbj0ieCI9PT1lP2o6VSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTtvPT09cnx8KHRbb118fHt9KS5vdmVybGF5aW5nfHxpLnB1c2goZyhvKSl9cmV0dXJuIGl9dmFyIGV0PXt4OiQoIngiKSx5OiQoInkiKX0scnQ9ZXQueC5jb25jYXQoZXQueSksbnQ9e30saXQ9W107ZnVuY3Rpb24gYXQoKXt2YXIgdD1XLm1hdGNoZXM7di50ZXN0KHQpJiYtMT09PXJ0LmluZGV4T2YodCkmJihudFt0XT1XLnR5cGUsaXQ9T2JqZWN0LmtleXMobnQpKX12YXIgb3Q9byh0LGUpLHN0PWEob3QpO2Zvcih5PTA7eTxWLmxlbmd0aDt5Kyspe3E9Vlt5XSxHPWcocSksWT1xLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtxXSl8fCh0W3FdPXt9KSxXPXRbcV0sWD1zLm5ld0NvbnRhaW5lcihlLHEsWSsiYXhpcyIpLEooKTt2YXIgbHQ9IngiPT09WSYmIVNbcV0mJkFbcV18fCJ5Ij09PVkmJiFFW3FdJiZNW3FdLGN0PSJ5Ij09PVkmJighTFtxXSYmQ1txXXx8UFtxXSksdXQ9e2xldHRlcjpZLGZvbnQ6ZS5mb250LG91dGVyVGlja3M6SVtxXSxzaG93R3JpZDohT1txXSxkYXRhOmtbcV18fFtdLGJnQ29sb3I6WixjYWxlbmRhcjplLmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsdmlzaWJsZURmbHQ6bHQscmV2ZXJzZURmbHQ6Y3QsYXV0b3R5cGVudW1iZXJzRGZsdDpULHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtZXXx8e30pW0ddfTtLKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLHUoVyxYLEssdXQpLGYoVyxYLEssdXQsZSk7dmFyIGZ0PXN0JiZZPT09b3QuY2hhckF0KDApLGh0PVEoInNwaWtlY29sb3IiLHN0P1guY29sb3I6dm9pZCAwKSxwdD1RKCJzcGlrZXRoaWNrbmVzcyIsc3Q/MS41OnZvaWQgMCksZHQ9USgic3Bpa2VkYXNoIixzdD8iZG90Ijp2b2lkIDApLG10PVEoInNwaWtlbW9kZSIsc3Q/ImFjcm9zcyI6dm9pZCAwKSxndD1RKCJzcGlrZXNuYXAiKTtLKCJzaG93c3Bpa2VzIiwhIShmdHx8aHR8fHB0fHxkdHx8bXR8fGd0KSl8fChkZWxldGUgWC5zcGlrZWNvbG9yLGRlbGV0ZSBYLnNwaWtldGhpY2tuZXNzLGRlbGV0ZSBYLnNwaWtlZGFzaCxkZWxldGUgWC5zcGlrZW1vZGUsZGVsZXRlIFguc3Bpa2VzbmFwKSxwKFcsWCxLLHtsZXR0ZXI6WSxjb3VudGVyQXhlczpldFtZXSxvdmVybGF5YWJsZUF4ZXM6dHQoWSxxKSxncmlkOmUuZ3JpZH0pLEsoInRpdGxlLnN0YW5kb2ZmIiksYXQoKSxYLl9pbnB1dD1XfWZvcih5PTA7eTxpdC5sZW5ndGg7KXtHPWl0W3krK10sWT0ocT1tKEcpKS5jaGFyQXQoMCksbi5pc1BsYWluT2JqZWN0KHRbcV0pfHwodFtxXT17fSksVz10W3FdLFg9cy5uZXdDb250YWluZXIoZSxxLFkrImF4aXMiKSxKKCk7dmFyIHZ0PXtsZXR0ZXI6WSxmb250OmUuZm9udCxvdXRlclRpY2tzOklbcV0sc2hvd0dyaWQ6IU9bcV0sZGF0YTpbXSxiZ0NvbG9yOlosY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLHZpc2libGVEZmx0OiExLHJldmVyc2VEZmx0OiExLGF1dG90eXBlbnVtYmVyc0RmbHQ6VCxzcGxvbVN0YXNoOigoZS5fc3Bsb21BeGVzfHx7fSlbWV18fHt9KVtHXX07SygidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxYLnR5cGU9bnRbR118fCJsaW5lYXIiLGYoVyxYLEssdnQsZSkscChXLFgsSyx7bGV0dGVyOlksY291bnRlckF4ZXM6ZXRbWV0sb3ZlcmxheWFibGVBeGVzOnR0KFkscSksZ3JpZDplLmdyaWR9KSxLKCJmaXhlZHJhbmdlIiksYXQoKSxYLl9pbnB1dD1XfXZhciB5dD1iKCJyYW5nZXNsaWRlciIsImhhbmRsZURlZmF1bHRzIikseHQ9YigicmFuZ2VzZWxlY3RvciIsImhhbmRsZURlZmF1bHRzIik7Zm9yKHk9MDt5PGoubGVuZ3RoO3krKylxPWpbeV0sVz10W3FdLFg9ZVtxXSx5dCh0LGUscSksImRhdGUiPT09WC50eXBlJiZ4dChXLFgsZSxVLFguY2FsZW5kYXIpLEsoImZpeGVkcmFuZ2UiKTtmb3IoeT0wO3k8VS5sZW5ndGg7eSsrKXtxPVVbeV0sVz10W3FdLFg9ZVtxXTt2YXIgYnQ9ZVttKFguYW5jaG9yKV07SygiZml4ZWRyYW5nZSIsYigicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShidCkpfWguaGFuZGxlRGVmYXVsdHModCxlLHtheElkczpydC5jb25jYXQoaXQpLnNvcnQoZC5pZFNvcnQpLGF4SGFzSW1hZ2U6UH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NDAyLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybW9kZV9kZWZhdWx0cyI6NDA1LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6NjEwLCIuL2F4aXNfZGVmYXVsdHMiOjU1NiwiLi9heGlzX2lkcyI6NTU4LCIuL2NvbnN0YW50cyI6NTYxLCIuL2NvbnN0cmFpbnRzIjo1NjIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OSwiLi9wb3NpdGlvbl9kZWZhdWx0cyI6NTcyLCIuL3R5cGVfZGVmYXVsdHMiOjU4Mn1dLDU3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikubGlnaHRGcmFjdGlvbixhPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gYS5jb2VyY2UyKHQsZSxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1sKCJsaW5lY29sb3IiLHMpLHU9bCgibGluZXdpZHRoIik7cigic2hvd2xpbmUiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSBlLmxpbmVjb2xvcixkZWxldGUgZS5saW5ld2lkdGgpO3ZhciBmPWwoImdyaWRjb2xvciIsbihzLG8uYmdDb2xvcixvLmJsZW5kfHxpKS50b1JnYlN0cmluZygpKSxoPWwoImdyaWR3aWR0aCIpO2lmKHIoInNob3dncmlkIixvLnNob3dHcmlkfHwhIWZ8fCEhaCl8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1sKCJ6ZXJvbGluZWNvbG9yIixzKSxkPWwoInplcm9saW5ld2lkdGgiKTtyKCJ6ZXJvbGluZSIsby5zaG93R3JpZHx8ISFwfHwhIWQpfHwoZGVsZXRlIGUuemVyb2xpbmVjb2xvcixkZWxldGUgZS56ZXJvbGluZXdpZHRoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9saWIiOjUwMyx0aW55Y29sb3IyOjMxMn1dLDU3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjLHU9YS5jb3VudGVyQXhlc3x8W10sZj1hLm92ZXJsYXlhYmxlQXhlc3x8W10saD1hLmxldHRlcixwPWEuZ3JpZDtwJiYocz1wLl9kb21haW5zW2hdW3AuX2F4aXNNYXBbZS5faWRdXSxvPXAuX2FuY2hvcnNbZS5faWRdLHMmJihsPXBbaCsic2lkZSJdLnNwbGl0KCIgIilbMF0sYz1wLmRvbWFpbltoXVsicmlnaHQiPT09bHx8InRvcCI9PT1sPzE6MF0pKSxzPXN8fFswLDFdLG89b3x8KG4odC5wb3NpdGlvbik/ImZyZWUiOnVbMF18fCJmcmVlIiksbD1sfHwoIngiPT09aD8iYm90dG9tIjoibGVmdCIpLGM9Y3x8MCwiZnJlZSI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSJdLmNvbmNhdCh1KSxkZmx0Om99fSwiYW5jaG9yIikmJnIoInBvc2l0aW9uIixjKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1oP1siYm90dG9tIiwidG9wIl06WyJsZWZ0IiwicmlnaHQiXSxkZmx0Omx9fSwic2lkZSIpO3ZhciBkPSExO2lmKGYubGVuZ3RoJiYoZD1pLmNvZXJjZSh0LGUse292ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITFdLmNvbmNhdChmKSxkZmx0OiExfX0sIm92ZXJsYXlpbmciKSksIWQpe3ZhciBtPXIoImRvbWFpbiIscyk7bVswXT5tWzFdLTEvNDA5NiYmKGUuZG9tYWluPXMpLGkubm9uZU9yQWxsKHQuZG9tYWluLGUuZG9tYWluLHMpfXJldHVybiByKCJsYXllciIpLGV9fSx7Ii4uLy4uL2xpYiI6NTAzLCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19kZmx0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YXx8KGE9e30pO3ZhciBvPWEudGlja1N1ZmZpeERmbHQscz1uKHQpO3IoInRpY2twcmVmaXgiKSYmcigic2hvd3RpY2twcmVmaXgiLHMpLHIoInRpY2tzdWZmaXgiLG8pJiZyKCJzaG93dGlja3N1ZmZpeCIscyl9fSx7Ii4vc2hvd19kZmx0Ijo1Nzd9XSw1NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fQkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj1uW3QuY29uc3RyYWludG93YXJkfHwiY2VudGVyIl0pO3ZhciBpPVt0LnIybCh0LnJhbmdlWzBdKSx0LnIybCh0LnJhbmdlWzFdKV0sYT1pWzBdKyhpWzFdLWlbMF0pKnI7dC5yYW5nZT10Ll9pbnB1dC5yYW5nZT1bdC5sMnIoYSsoaVswXS1hKSplKSx0LmwycihhKyhpWzFdLWEpKmUpXSx0LnNldFNjYWxlKCl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ3MX1dLDU3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwb2x5Ym9vbGpzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikuZGFzaFN0eWxlLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikubWFrZUV2ZW50RGF0YSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLHU9Yy5mcmVlTW9kZSxmPWMucmVjdE1vZGUsaD1jLmRyYXdNb2RlLHA9Yy5vcGVuTW9kZSxkPWMuc2VsZWN0TW9kZSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9oZWxwZXJzIikuaGFuZGxlRWxsaXBzZSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvbmV3c2hhcGVzIikseT10KCIuLi8uLi9saWIiKSx4PXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksYj10KCIuLi8uLi9saWIvdGhyb3R0bGUiKSxfPXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsdz10KCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxUPXQoIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIikucmVkcmF3UmVnbFRyYWNlcyxrPXQoIi4vY29uc3RhbnRzIiksQT1rLk1JTlNFTEVDVCxNPXguZmlsdGVyLFM9eC50ZXN0ZXIsRT10KCIuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsTD10KCIuL2hlbHBlcnMiKSxDPUwucDJyLFA9TC5heFZhbHVlLEk9TC5nZXRUcmFuc2Zvcm07ZnVuY3Rpb24gTyh0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGgsZCxnLHYseT1lLl9ob3ZlcmRhdGEseD1lLl9mdWxsTGF5b3V0LmNsaWNrbW9kZS5pbmRleE9mKCJldmVudCIpPi0xLGI9W107aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LmlzQXJyYXkodCkmJiEwIT09dFswXS5ob3Zlck9uQm94fSh5KSl7Rih0LGUsYSk7dmFyIF89ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPS0xLG89W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihyPWVbbl0saS5mdWxsRGF0YS5fZXhwYW5kZWRJbmRleD09PXIuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXgpe2lmKCEwPT09aS5ob3Zlck9uQm94KWJyZWFrO3ZvaWQgMCE9PWkucG9pbnROdW1iZXI/YT1pLnBvaW50TnVtYmVyOnZvaWQgMCE9PWkuYmluTnVtYmVyJiYoYT1pLmJpbk51bWJlcixvPWkucG9pbnROdW1iZXJzKTticmVha31yZXR1cm57cG9pbnROdW1iZXI6YSxwb2ludE51bWJlcnM6byxzZWFyY2hJbmZvOnJ9fSh5LHM9TihlLHIsbixpKSk7aWYoXy5wb2ludE51bWJlcnMubGVuZ3RoPjA/ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShyPXRbaV0pLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzJiZyLmNkWzBdLnRyYWNlLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD4wJiZhLnB1c2gocik7aWYoMT09PWEubGVuZ3RoJiZhWzBdPT09ZS5zZWFyY2hJbmZvJiYobj1lLnNlYXJjaEluZm8uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLmxlbmd0aD09PWUucG9pbnROdW1iZXJzLmxlbmd0aCl7Zm9yKGk9MDtpPGUucG9pbnROdW1iZXJzLmxlbmd0aDtpKyspaWYobi5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGUucG9pbnROdW1iZXJzW2ldKTwwKXJldHVybiExO3JldHVybiEwfXJldHVybiExfShzLF8pOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTA7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPXRbbl0sKHI9ZS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMpe2lmKHIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjEpcmV0dXJuITE7aWYoKGkrPXIuc2VsZWN0ZWRwb2ludHMubGVuZ3RoKT4xKXJldHVybiExfXJldHVybiAxPT09aX0ocykmJihoPWooXykpKXtmb3IobyYmby5yZW1vdmUoKSx2PTA7djxzLmxlbmd0aDt2KyspKGw9c1t2XSkuX21vZHVsZS5zZWxlY3RQb2ludHMobCwhMSk7VShlLHMpLEIoYSkseCYmZS5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2V7Zm9yKGQ9dC5zaGlmdEtleSYmKHZvaWQgMCE9PWg/aDpqKF8pKSxjPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57cG9pbnROdW1iZXI6dCxzZWFyY2hJbmZvOmUsc3VidHJhY3Q6cn19KF8ucG9pbnROdW1iZXIsXy5zZWFyY2hJbmZvLGQpLHU9UihhLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtjXSkpLHY9MDt2PHMubGVuZ3RoO3YrKylpZihmPVYoc1t2XS5fbW9kdWxlLnNlbGVjdFBvaW50cyhzW3ZdLHUpLHNbdl0pLGIubGVuZ3RoKWZvcih2YXIgdz0wO3c8Zi5sZW5ndGg7dysrKWIucHVzaChmW3ddKTtlbHNlIGI9ZjtpZihVKGUscyxnPXtwb2ludHM6Yn0pLGMmJmEmJmEuc2VsZWN0aW9uRGVmcy5wdXNoKGMpLG8pe3ZhciBUPWEubWVyZ2VkUG9seWdvbnMsaz1wKGEuZHJhZ21vZGUpO20oSChULGspLG8sYSl9eCYmZS5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLGcpfX19ZnVuY3Rpb24geih0KXtyZXR1cm4icG9pbnROdW1iZXIiaW4gdCYmInNlYXJjaEluZm8iaW4gdH1mdW5jdGlvbiBEKHQpe3JldHVybnt4bWluOjAseG1heDowLHltaW46MCx5bWF4OjAscHRzOltdLGNvbnRhaW5zOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuc2VhcmNoSW5mby5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleDtyZXR1cm4gaS5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleD09PWEmJm49PT10LnBvaW50TnVtYmVyfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMSxzdWJ0cmFjdDp0LnN1YnRyYWN0fX1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT1bXSxyPXoodFswXSk/MDp0WzBdWzBdWzBdLG49cixpPXoodFswXSk/MDp0WzBdWzBdWzFdLGE9aSxvPTA7bzx0Lmxlbmd0aDtvKyspaWYoeih0W29dKSllLnB1c2goRCh0W29dKSk7ZWxzZXt2YXIgcz14LnRlc3Rlcih0W29dKTtzLnN1YnRyYWN0PXRbb10uc3VidHJhY3QsZS5wdXNoKHMpLHI9TWF0aC5taW4ocixzLnhtaW4pLG49TWF0aC5tYXgobixzLnhtYXgpLGk9TWF0aC5taW4oaSxzLnltaW4pLGE9TWF0aC5tYXgoYSxzLnltYXgpfXJldHVybnt4bWluOnIseG1heDpuLHltaW46aSx5bWF4OmEscHRzOltdLGNvbnRhaW5zOmZ1bmN0aW9uKHQscixuLGkpe2Zvcih2YXIgYT0hMSxvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5jb250YWlucyh0LHIsbixpKSYmKGE9ITE9PT1lW29dLnN1YnRyYWN0KTtyZXR1cm4gYX0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITF9fWZ1bmN0aW9uIEYodCxlLHIpe2UuX2Z1bGxMYXlvdXQuX2RyYXdpbmc9ITE7dmFyIG49ZS5fZnVsbExheW91dCxpPXIucGxvdGluZm8sYT1yLmRyYWdtb2RlLG89bi5fbGFzdFNlbGVjdGVkU3VicGxvdCYmbi5fbGFzdFNlbGVjdGVkU3VicGxvdD09PWkuaWQscz0odC5zaGlmdEtleXx8dC5hbHRLZXkpJiYhKGgoYSkmJnAoYSkpO28mJnMmJmkuc2VsZWN0aW9uJiZpLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzJiYhci5zZWxlY3Rpb25EZWZzPyhyLnNlbGVjdGlvbkRlZnM9aS5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcyxyLm1lcmdlZFBvbHlnb25zPWkuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zKTpzJiZpLnNlbGVjdGlvbnx8QihyKSxvfHwoRShlKSxuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PWkuaWQpfWZ1bmN0aW9uIEIodCl7dmFyIGU9dC5kcmFnbW9kZSxyPXQucGxvdGluZm8sbj10LmdkO2lmKG4uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJm4uX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZShuKSxoKGUpKXt2YXIgYT1uLl9mdWxsTGF5b3V0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUtIityLmlkKTtpZihhJiZuLl9mdWxsTGF5b3V0Ll9kcmF3aW5nKXt2YXIgbz12KGEsdCk7byYmaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLG4se3NoYXBlczpvfSksbi5fZnVsbExheW91dC5fZHJhd2luZz0hMX19ci5zZWxlY3Rpb249e30sci5zZWxlY3Rpb24uc2VsZWN0aW9uRGVmcz10LnNlbGVjdGlvbkRlZnM9W10sci5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnM9dC5tZXJnZWRQb2x5Z29ucz1bXX1mdW5jdGlvbiBOKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKSxjPXIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5faWR9KSk7Zm9yKG89MDtvPHQuY2FsY2RhdGEubGVuZ3RoO28rKylpZighMD09PShhPShpPXQuY2FsY2RhdGFbb10pWzBdLnRyYWNlKS52aXNpYmxlJiZhLl9tb2R1bGUmJmEuX21vZHVsZS5zZWxlY3RQb2ludHMpaWYoIW58fGEuc3VicGxvdCE9PW4mJmEuZ2VvIT09bilpZigic3Bsb20iPT09YS50eXBlJiZhLl94YXhlc1tsWzBdXSYmYS5feWF4ZXNbY1swXV0pe3ZhciB1PWgoYS5fbW9kdWxlLGksZVswXSxyWzBdKTt1LnNjZW5lPXQuX2Z1bGxMYXlvdXQuX3NwbG9tU2NlbmVzW2EudWlkXSxzLnB1c2godSl9ZWxzZSBpZigic2Fua2V5Ij09PWEudHlwZSl7dmFyIGY9aChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3MucHVzaChmKX1lbHNle2lmKC0xPT09bC5pbmRleE9mKGEueGF4aXMpKWNvbnRpbnVlO2lmKC0xPT09Yy5pbmRleE9mKGEueWF4aXMpKWNvbnRpbnVlO3MucHVzaChoKGEuX21vZHVsZSxpLF8odCxhLnhheGlzKSxfKHQsYS55YXhpcykpKX1lbHNlIHMucHVzaChoKGEuX21vZHVsZSxpLGVbMF0sclswXSkpO3JldHVybiBzO2Z1bmN0aW9uIGgodCxlLHIsbil7cmV0dXJue19tb2R1bGU6dCxjZDplLHhheGlzOnIseWF4aXM6bn19fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLHI9dC5wb2ludE51bWJlcixuPXQucG9pbnROdW1iZXJzLGk9bi5sZW5ndGg+MD9uWzBdOnI7cmV0dXJuISFlLnNlbGVjdGVkcG9pbnRzJiZlLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoaSk+LTF9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG4sYSxvLHM7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGw9ZVtuXS5jZFswXS50cmFjZS5fZnVsbElucHV0LGM9dC5fZnVsbExheW91dC5fdHJhY2VQcmVHVUlbbC51aWRdfHx7fTt2b2lkIDA9PT1jLnNlbGVjdGVkcG9pbnRzJiYoYy5zZWxlY3RlZHBvaW50cz1sLl9pbnB1dC5zZWxlY3RlZHBvaW50c3x8bnVsbCl9aWYocil7dmFyIHU9ci5wb2ludHN8fFtdO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHM9ZVtuXS5jZFswXS50cmFjZSkuX2lucHV0LnNlbGVjdGVkcG9pbnRzPXMuX2Z1bGxJbnB1dC5zZWxlY3RlZHBvaW50cz1bXSxzLl9mdWxsSW5wdXQhPT1zJiYocy5zZWxlY3RlZHBvaW50cz1bXSk7Zm9yKG49MDtuPHUubGVuZ3RoO24rKyl7dmFyIGY9dVtuXSxoPWYuZGF0YSxwPWYuZnVsbERhdGE7Zi5wb2ludEluZGljZXM/KFtdLnB1c2guYXBwbHkoaC5zZWxlY3RlZHBvaW50cyxmLnBvaW50SW5kaWNlcykscy5fZnVsbElucHV0IT09cyYmW10ucHVzaC5hcHBseShwLnNlbGVjdGVkcG9pbnRzLGYucG9pbnRJbmRpY2VzKSk6KGguc2VsZWN0ZWRwb2ludHMucHVzaChmLnBvaW50SW5kZXgpLHMuX2Z1bGxJbnB1dCE9PXMmJnAuc2VsZWN0ZWRwb2ludHMucHVzaChmLnBvaW50SW5kZXgpKX19ZWxzZSBmb3Iobj0wO248ZS5sZW5ndGg7bisrKWRlbGV0ZShzPWVbbl0uY2RbMF0udHJhY2UpLnNlbGVjdGVkcG9pbnRzLGRlbGV0ZSBzLl9pbnB1dC5zZWxlY3RlZHBvaW50cyxzLl9mdWxsSW5wdXQhPT1zJiZkZWxldGUgcy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzO3ZhciBkPSExO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3M9KG89KGE9ZVtuXSkuY2QpWzBdLnRyYWNlLGkudHJhY2VJcyhzLCJyZWdsIikmJihkPSEwKTt2YXIgbT1hLl9tb2R1bGUsZz1tLnN0eWxlT25TZWxlY3R8fG0uc3R5bGU7ZyYmKGcodCxvLG9bMF0ubm9kZTMpLG9bMF0ubm9kZVJhbmdlUGxvdDMmJmcodCxvLG9bMF0ubm9kZVJhbmdlUGxvdDMpKX1kJiYodyh0KSxUKHQpKX1mdW5jdGlvbiBWKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9ZS5jZCxuPWUuY2RbMF0udHJhY2UsaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV09bCh0W2ldLG4scik7cmV0dXJuIHR9ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3Jbbl09W107Zm9yKHZhciBpPTA7aTx0W25dLmxlbmd0aDtpKyspe3Jbbl1baV09W10scltuXVtpXVswXT1pPyJMIjoiTSI7Zm9yKHZhciBhPTA7YTx0W25dW2ldLmxlbmd0aDthKyspcltuXVtpXS5wdXNoKHRbbl1baV1bYV0pfWV8fHJbbl0ucHVzaChbIloiLHJbbl1bMF1bMV0scltuXVswXVsyXV0pfXJldHVybiByfWUuZXhwb3J0cz17cHJlcFNlbGVjdDpmdW5jdGlvbih0LGUscixpLGwpe3ZhciBjPXUobCksdj1mKGwpLHg9cChsKSxfPWgobCksdz1kKGwpLFQ9ImRyYXdjaXJjbGUiPT09bCxFPSJkcmF3bGluZSI9PT1sfHxULEw9aS5nZCx6PUwuX2Z1bGxMYXlvdXQsRD16Ll96b29tbGF5ZXIsaj1pLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscT1pLnBsb3RpbmZvLEc9SShxKSxZPWUtai5sZWZ0LFc9ci1qLnRvcDt6Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybShMKTt2YXIgWD15LmFwcGx5M0RUcmFuc2Zvcm0oei5faW52VHJhbnNmb3JtKShZLFcpO1k9WFswXSxXPVhbMV07dmFyIFosSixLLFEsJCx0dCxldCxydD16Ll9pbnZTY2FsZVgsbnQ9ei5faW52U2NhbGVZLGl0PVksYXQ9VyxvdD0iTSIrWSsiLCIrVyxzdD1pLnhheGVzWzBdLl9sZW5ndGgsbHQ9aS55YXhlc1swXS5fbGVuZ3RoLGN0PWkueGF4ZXMuY29uY2F0KGkueWF4ZXMpLHV0PXQuYWx0S2V5JiYhKGgobCkmJngpO0YodCxMLGkpLGMmJihaPU0oW1tZLFddXSxrLkJFTkRQWCkpO3ZhciBmdD1ELnNlbGVjdEFsbCgicGF0aC5zZWxlY3Qtb3V0bGluZS0iK3EuaWQpLmRhdGEoXz9bMF06WzEsMl0pLGh0PXoubmV3c2hhcGU7ZnQuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJzZWxlY3Qtb3V0bGluZSBzZWxlY3Qtb3V0bGluZS0iK3QrIiBzZWxlY3Qtb3V0bGluZS0iK3EuaWR9KSkuc3R5bGUoXz97b3BhY2l0eTpodC5vcGFjaXR5LzIsZmlsbDp4P3ZvaWQgMDpodC5maWxsY29sb3Isc3Ryb2tlOmh0LmxpbmUuY29sb3IsInN0cm9rZS1kYXNoYXJyYXkiOmEoaHQubGluZS5kYXNoLGh0LmxpbmUud2lkdGgpLCJzdHJva2Utd2lkdGgiOmh0LmxpbmUud2lkdGgrInB4In06e30pLmF0dHIoImZpbGwtcnVsZSIsaHQuZmlsbHJ1bGUpLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhIV8pLmF0dHIoInRyYW5zZm9ybSIsRykuYXR0cigiZCIsb3QrIloiKTt2YXIgcHQsZHQ9RC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOm8uYmFja2dyb3VuZCxzdHJva2U6by5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxfSkuYXR0cigidHJhbnNmb3JtIixHKS5hdHRyKCJkIiwiTTAsMFoiKSxtdD16Ll91aWQray5TRUxFQ1RJRCxndD1bXSx2dD1OKEwsaS54YXhlcyxpLnlheGVzLGkuc3VicGxvdCk7ZnVuY3Rpb24geXQodCxlKXtyZXR1cm4gdC1lfXB0PXEuZmlsbFJhbmdlSXRlbXM/cS5maWxsUmFuZ2VJdGVtczp2P2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoJD0wOyQ8Y3QubGVuZ3RoOyQrKyl7dmFyIG49Y3RbJF0saT1uLl9pZC5jaGFyQXQoMCk7cltuLl9pZF09W0MobixlW2krIm1pbiJdKSxDKG4sZVtpKyJtYXgiXSldLnNvcnQoeXQpfX06ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGFzc29Qb2ludHM9e307Zm9yKCQ9MDskPGN0Lmxlbmd0aDskKyspe3ZhciBpPWN0WyRdO25baS5faWRdPXIuZmlsdGVyZWQubWFwKFAoaSkpfX0saS5tb3ZlRm49ZnVuY3Rpb24odCxlKXtpdD1NYXRoLm1heCgwLE1hdGgubWluKHN0LHJ0KnQrWSkpLGF0PU1hdGgubWF4KDAsTWF0aC5taW4obHQsbnQqZStXKSk7dmFyIHI9TWF0aC5hYnMoaXQtWSksYT1NYXRoLmFicyhhdC1XKTtpZih2KXt2YXIgbyxzLGw7aWYodyl7dmFyIHU9ei5zZWxlY3RkaXJlY3Rpb247c3dpdGNoKG89ImFueSI9PT11P2E8TWF0aC5taW4oLjYqcixBKT8iaCI6cjxNYXRoLm1pbiguNiphLEEpPyJ2IjoiZCI6dSl7Y2FzZSJoIjpzPVQ/bHQvMjowLGw9bHQ7YnJlYWs7Y2FzZSJ2IjpzPVQ/c3QvMjowLGw9c3R9fWlmKF8pc3dpdGNoKHoubmV3c2hhcGUuZHJhd2RpcmVjdGlvbil7Y2FzZSJ2ZXJ0aWNhbCI6bz0iaCIscz1UP2x0LzI6MCxsPWx0O2JyZWFrO2Nhc2UiaG9yaXpvbnRhbCI6bz0idiIscz1UP3N0LzI6MCxsPXN0O2JyZWFrO2Nhc2Uib3J0aG8iOnI8YT8obz0iaCIscz1XLGw9YXQpOihvPSJ2IixzPVksbD1pdCk7YnJlYWs7ZGVmYXVsdDpvPSJkIn0iaCI9PT1vPygoUT1FP2coVCxbaXQsc10sW2l0LGxdKTpbW1ksc10sW1ksbF0sW2l0LGxdLFtpdCxzXV0pLnhtaW49RT9pdDpNYXRoLm1pbihZLGl0KSxRLnhtYXg9RT9pdDpNYXRoLm1heChZLGl0KSxRLnltaW49TWF0aC5taW4ocyxsKSxRLnltYXg9TWF0aC5tYXgocyxsKSxkdC5hdHRyKCJkIiwiTSIrUS54bWluKyIsIisoVy1BKSsiaC00diIrMipBKyJoNFpNIisoUS54bWF4LTEpKyIsIisoVy1BKSsiaDR2IisyKkErImgtNFoiKSk6InYiPT09bz8oKFE9RT9nKFQsW3MsYXRdLFtsLGF0XSk6W1tzLFddLFtzLGF0XSxbbCxhdF0sW2wsV11dKS54bWluPU1hdGgubWluKHMsbCksUS54bWF4PU1hdGgubWF4KHMsbCksUS55bWluPUU/YXQ6TWF0aC5taW4oVyxhdCksUS55bWF4PUU/YXQ6TWF0aC5tYXgoVyxhdCksZHQuYXR0cigiZCIsIk0iKyhZLUEpKyIsIitRLnltaW4rInYtNGgiKzIqQSsidjRaTSIrKFktQSkrIiwiKyhRLnltYXgtMSkrInY0aCIrMipBKyJ2LTRaIikpOiJkIj09PW8mJigoUT1FP2coVCxbWSxXXSxbaXQsYXRdKTpbW1ksV10sW1ksYXRdLFtpdCxhdF0sW2l0LFddXSkueG1pbj1NYXRoLm1pbihZLGl0KSxRLnhtYXg9TWF0aC5tYXgoWSxpdCksUS55bWluPU1hdGgubWluKFcsYXQpLFEueW1heD1NYXRoLm1heChXLGF0KSxkdC5hdHRyKCJkIiwiTTAsMFoiKSl9ZWxzZSBjJiYoWi5hZGRQdChbaXQsYXRdKSxRPVouZmlsdGVyZWQpO2kuc2VsZWN0aW9uRGVmcyYmaS5zZWxlY3Rpb25EZWZzLmxlbmd0aD8oSz1mdW5jdGlvbih0LGUscil7aWYocilyZXR1cm4gbi5kaWZmZXJlbmNlKHtyZWdpb25zOnQsaW52ZXJ0ZWQ6ITF9LHtyZWdpb25zOltlXSxpbnZlcnRlZDohMX0pLnJlZ2lvbnM7cmV0dXJuIG4udW5pb24oe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uc30oaS5tZXJnZWRQb2x5Z29ucyxRLHV0KSxRLnN1YnRyYWN0PXV0LEo9UihpLnNlbGVjdGlvbkRlZnMuY29uY2F0KFtRXSkpKTooSz1bUV0sSj1TKFEpKSxtKEgoSyx4KSxmdCxpKSx3JiZiLnRocm90dGxlKG10LGsuU0VMRUNUREVMQVksKGZ1bmN0aW9uKCl7dmFyIHQ7Z3Q9W107dmFyIGUscj1bXTtmb3IoJD0wOyQ8dnQubGVuZ3RoOyQrKylpZihlPSh0dD12dFskXSkuX21vZHVsZS5zZWxlY3RQb2ludHModHQsSiksci5wdXNoKGUpLHQ9VihlLHR0KSxndC5sZW5ndGgpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspZ3QucHVzaCh0W25dKTtlbHNlIGd0PXQ7VShMLHZ0LGV0PXtwb2ludHM6Z3R9KSxwdChldCxRLFopLGkuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGluZyIsZXQpfSkpfSxpLmNsaWNrRm49ZnVuY3Rpb24odCxlKXtpZihkdC5yZW1vdmUoKSxMLl9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wKUwuX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZShMKTtlbHNlIGlmKCFfKXt2YXIgcj16LmNsaWNrbW9kZTtiLmRvbmUobXQpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoYi5jbGVhcihtdCksMj09PXQpe2ZvcihmdC5yZW1vdmUoKSwkPTA7JDx2dC5sZW5ndGg7JCsrKSh0dD12dFskXSkuX21vZHVsZS5zZWxlY3RQb2ludHModHQsITEpO1UoTCx2dCksQihpKSxMLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZSByLmluZGV4T2YoInNlbGVjdCIpPi0xJiZPKGUsTCxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90LGksZnQpLCJldmVudCI9PT1yJiZMLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsdm9pZCAwKTtzLmNsaWNrKEwsZSl9KSkuY2F0Y2goeS5lcnJvcil9fSxpLmRvbmVGbj1mdW5jdGlvbigpe2R0LnJlbW92ZSgpLGIuZG9uZShtdCkudGhlbigoZnVuY3Rpb24oKXtiLmNsZWFyKG10KSxpLmdkLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsZXQpLFEmJmkuc2VsZWN0aW9uRGVmcyYmKFEuc3VidHJhY3Q9dXQsaS5zZWxlY3Rpb25EZWZzLnB1c2goUSksaS5tZXJnZWRQb2x5Z29ucy5sZW5ndGg9MCxbXS5wdXNoLmFwcGx5KGkubWVyZ2VkUG9seWdvbnMsSykpLGkuZG9uZUZuQ29tcGxldGVkJiZpLmRvbmVGbkNvbXBsZXRlZChndCl9KSkuY2F0Y2goeS5lcnJvciksXyYmQihpKX19LGNsZWFyU2VsZWN0OkUsY2xlYXJTZWxlY3Rpb25zQ2FjaGU6QixzZWxlY3RPbkNsaWNrOk99fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjozODQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDYsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NDAyLCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiOjQ1NCwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9oZWxwZXJzIjo0NTUsIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvbmV3c2hhcGVzIjo0NTYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjQ4NywiLi4vLi4vbGliL3BvbHlnb24iOjUxNSwiLi4vLi4vbGliL3Rocm90dGxlIjo1MzAsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo1NDQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vYXhpc19pZHMiOjU1OCwiLi9jb25zdGFudHMiOjU2MSwiLi9oYW5kbGVfb3V0bGluZSI6NTY1LCIuL2hlbHBlcnMiOjU2Nixwb2x5Ym9vbGpzOjI1NH1dLDU3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy10aW1lLWZvcm1hdCIpLnV0Y0Zvcm1hdCxhPXQoIi4uLy4uL2xpYiIpLG89YS5udW1iZXJGb3JtYXQscz10KCJmYXN0LWlzbnVtZXJpYyIpLGw9YS5jbGVhbk51bWJlcixjPWEubXMyRGF0ZVRpbWUsdT1hLmRhdGVUaW1lMm1zLGY9YS5lbnN1cmVOdW1iZXIsaD1hLmlzQXJyYXlPclR5cGVkQXJyYXkscD10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksZD1wLkZQX1NBRkUsbT1wLkJBRE5VTSxnPXAuTE9HX0NMSVAsdj1wLk9ORVdFRUsseT1wLk9ORURBWSx4PXAuT05FSE9VUixiPXAuT05FTUlOLF89cC5PTkVTRUMsdz10KCIuL2F4aXNfaWRzIiksVD10KCIuL2NvbnN0YW50cyIpLGs9VC5IT1VSX1BBVFRFUk4sQT1ULldFRUtEQVlfUEFUVEVSTjtmdW5jdGlvbiBNKHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX1mdW5jdGlvbiBTKHQpe3JldHVybiBudWxsIT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9dC5faWR8fCJ4IixwPXIuY2hhckF0KDApO2Z1bmN0aW9uIEUoZSxyKXtpZihlPjApcmV0dXJuIE1hdGgubG9nKGUpL01hdGguTE4xMDtpZihlPD0wJiZyJiZ0LnJhbmdlJiYyPT09dC5yYW5nZS5sZW5ndGgpe3ZhciBuPXQucmFuZ2VbMF0saT10LnJhbmdlWzFdO3JldHVybi41KihuK2ktMipnKk1hdGguYWJzKG4taSkpfXJldHVybiBtfWZ1bmN0aW9uIEwoZSxyLG4saSl7aWYoKGl8fHt9KS5tc1VUQyYmcyhlKSlyZXR1cm4rZTt2YXIgbz11KGUsbnx8dC5jYWxlbmRhcik7aWYobz09PW0pe2lmKCFzKGUpKXJldHVybiBtO2U9K2U7dmFyIGw9TWF0aC5mbG9vcigxMCphLm1vZChlKy4wNSwxKSksYz1NYXRoLnJvdW5kKGUtbC8xMCk7bz11KG5ldyBEYXRlKGMpKStsLzEwfXJldHVybiBvfWZ1bmN0aW9uIEMoZSxyLG4pe3JldHVybiBjKGUscixufHx0LmNhbGVuZGFyKX1mdW5jdGlvbiBQKGUpe3JldHVybiB0Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZSldfWZ1bmN0aW9uIEkoZSl7aWYoUyhlKSl7aWYodm9pZCAwPT09dC5fY2F0ZWdvcmllc01hcCYmKHQuX2NhdGVnb3JpZXNNYXA9e30pLHZvaWQgMCE9PXQuX2NhdGVnb3JpZXNNYXBbZV0pcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV07dC5fY2F0ZWdvcmllcy5wdXNoKCJudW1iZXIiPT10eXBlb2YgZT9TdHJpbmcoZSk6ZSk7dmFyIHI9dC5fY2F0ZWdvcmllcy5sZW5ndGgtMTtyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXT1yLHJ9cmV0dXJuIG19ZnVuY3Rpb24gTyhlKXtpZih0Ll9jYXRlZ29yaWVzTWFwKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdfWZ1bmN0aW9uIHoodCl7dmFyIGU9Tyh0KTtyZXR1cm4gdm9pZCAwIT09ZT9lOnModCk/K3Q6dm9pZCAwfWZ1bmN0aW9uIEQodCl7cmV0dXJuIHModCk/K3Q6Tyh0KX1mdW5jdGlvbiBSKHQsZSxyKXtyZXR1cm4gbi5yb3VuZChyK2UqdCwyKX1mdW5jdGlvbiBGKHQsZSxyKXtyZXR1cm4odC1yKS9lfXZhciBCPWZ1bmN0aW9uKGUpe3JldHVybiBzKGUpP1IoZSx0Ll9tLHQuX2IpOm19LE49ZnVuY3Rpb24oZSl7cmV0dXJuIEYoZSx0Ll9tLHQuX2IpfTtpZih0LnJhbmdlYnJlYWtzKXt2YXIgaj0ieSI9PT1wO0I9ZnVuY3Rpb24oZSl7aWYoIXMoZSkpcmV0dXJuIG07dmFyIHI9dC5fcmFuZ2VicmVha3MubGVuZ3RoO2lmKCFyKXJldHVybiBSKGUsdC5fbSx0Ll9iKTt2YXIgbj1qO3QucmFuZ2VbMF0+dC5yYW5nZVsxXSYmKG49IW4pO2Zvcih2YXIgaT1uPy0xOjEsYT1pKmUsbz0wLGw9MDtsPHI7bCsrKXt2YXIgYz1pKnQuX3JhbmdlYnJlYWtzW2xdLm1pbix1PWkqdC5fcmFuZ2VicmVha3NbbF0ubWF4O2lmKGE8YylicmVhaztpZighKGE+dSkpe289YTwoYyt1KS8yP2w6bCsxO2JyZWFrfW89bCsxfXZhciBmPXQuX0Jbb118fDA7cmV0dXJuIGlzRmluaXRlKGYpP1IoZSx0Ll9tMixmKTowfSxOPWZ1bmN0aW9uKGUpe3ZhciByPXQuX3JhbmdlYnJlYWtzLmxlbmd0aDtpZighcilyZXR1cm4gRihlLHQuX20sdC5fYik7Zm9yKHZhciBuPTAsaT0wO2k8ciYmIShlPHQuX3JhbmdlYnJlYWtzW2ldLnBtaW4pO2krKyllPnQuX3JhbmdlYnJlYWtzW2ldLnBtYXgmJihuPWkrMSk7cmV0dXJuIEYoZSx0Ll9tMix0Ll9CW25dKX19dC5jMmw9ImxvZyI9PT10LnR5cGU/RTpmLHQubDJjPSJsb2ciPT09dC50eXBlP006Zix0LmwycD1CLHQucDJsPU4sdC5jMnA9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gQihFKHQsZSkpfTpCLHQucDJjPSJsb2ciPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBNKE4odCkpfTpOLC0xIT09WyJsaW5lYXIiLCItIl0uaW5kZXhPZih0LnR5cGUpPyh0LmQycj10LnIyZD10LmQyYz10LnIyYz10LmQybD10LnIybD1sLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPWYsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKGwoZSkpfSx0LnAyZD10LnAycj1OLHQuY2xlYW5Qb3M9Zik6ImxvZyI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEUobCh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIE0obCh0KSl9LHQuZDJjPXQucjJsPWwsdC5jMmQ9dC5sMnI9Zix0LmMycj1FLHQubDJkPU0sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBNKE4odCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobChlKSl9LHQucDJyPU4sdC5jbGVhblBvcz1mKToiZGF0ZSI9PT10LnR5cGU/KHQuZDJyPXQucjJkPWEuaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9TCx0LmMyZD10LmMycj10LmwyZD10Lmwycj1DLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoTChlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIEMoTih0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBhLmNsZWFuRGF0ZShlLG0sdC5jYWxlbmRhcil9KToiY2F0ZWdvcnkiPT09dC50eXBlPyh0LmQyYz10LmQybD1JLHQucjJkPXQuYzJkPXQubDJkPVAsdC5kMnI9dC5kMmxfbm9hZGQ9eix0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1EKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5sMnI9dC5jMnI9Zix0LnIybD1ELHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBQKE4odCkpfSx0LnIycD10LmQycCx0LnAycj1OLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpmKHQpfSk6Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlJiYodC5yMmQ9dC5jMmQ9dC5sMmQ9UCx0LmQycj10LmQybF9ub2FkZD16LHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPXooZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0LnIyY19qdXN0X2luZGljZXM9Tyx0Lmwycj10LmMycj1mLHQucjJsPXosdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFAoTih0KSl9LHQucjJwPXQuZDJwLHQucDJyPU4sdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8InN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpmKHQpfSx0LnNldHVwTXVsdGlDYXRlZ29yeT1mdW5jdGlvbihuKXt2YXIgaSxvLHM9dC5fdHJhY2VJbmRpY2VzLGw9dC5fbWF0Y2hHcm91cDtpZihsJiYwPT09dC5fY2F0ZWdvcmllcy5sZW5ndGgpZm9yKHZhciBjIGluIGwpaWYoYyE9PXIpe3ZhciB1PWVbdy5pZDJuYW1lKGMpXTtzPXMuY29uY2F0KHUuX3RyYWNlSW5kaWNlcyl9dmFyIGY9W1swLHt9XSxbMCx7fV1dLGQ9W107Zm9yKGk9MDtpPHMubGVuZ3RoO2krKyl7dmFyIG09bltzW2ldXTtpZihwIGluIG0pe3ZhciBnPW1bcF0sdj1tLl9sZW5ndGh8fGEubWluUm93TGVuZ3RoKGcpO2lmKGgoZ1swXSkmJmgoZ1sxXSkpZm9yKG89MDtvPHY7bysrKXt2YXIgeT1nWzBdW29dLHg9Z1sxXVtvXTtTKHkpJiZTKHgpJiYoZC5wdXNoKFt5LHhdKSx5IGluIGZbMF1bMV18fChmWzBdWzFdW3ldPWZbMF1bMF0rKykseCBpbiBmWzFdWzFdfHwoZlsxXVsxXVt4XT1mWzFdWzBdKyspKX19fWZvcihkLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZlswXVsxXSxuPXJbdFswXV0tcltlWzBdXTtpZihuKXJldHVybiBuO3ZhciBpPWZbMV1bMV07cmV0dXJuIGlbdFsxXV0taVtlWzFdXX0pKSxpPTA7aTxkLmxlbmd0aDtpKyspSShkW2ldKX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlLHIpe3J8fChyPXt9KSxlfHwoZT0icmFuZ2UiKTt2YXIgbixpLG89YS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpO2lmKGk9KGk9ImRhdGUiPT09dC50eXBlP2EuZGZsdFJhbmdlKHQuY2FsZW5kYXIpOiJ5Ij09PXA/VC5ERkxUUkFOR0VZOiJyZWFsYXhpcyI9PT10Ll9uYW1lP1swLDFdOnIuZGZsdFJhbmdlfHxULkRGTFRSQU5HRVgpLnNsaWNlKCksInRvemVybyIhPT10LnJhbmdlbW9kZSYmIm5vbm5lZ2F0aXZlIiE9PXQucmFuZ2Vtb2RlfHwoaVswXT0wKSxvJiYyPT09by5sZW5ndGgpZm9yKCJkYXRlIiE9PXQudHlwZXx8dC5hdXRvcmFuZ2V8fChvWzBdPWEuY2xlYW5EYXRlKG9bMF0sbSx0LmNhbGVuZGFyKSxvWzFdPWEuY2xlYW5EYXRlKG9bMV0sbSx0LmNhbGVuZGFyKSksbj0wO248MjtuKyspaWYoImRhdGUiPT09dC50eXBlKXtpZighYS5pc0RhdGVUaW1lKG9bbl0sdC5jYWxlbmRhcikpe3RbZV09aTticmVha31pZih0LnIybChvWzBdKT09PXQucjJsKG9bMV0pKXt2YXIgbD1hLmNvbnN0cmFpbih0LnIybChvWzBdKSxhLk1JTl9NUysxZTMsYS5NQVhfTVMtMWUzKTtvWzBdPXQubDJyKGwtMWUzKSxvWzFdPXQubDJyKGwrMWUzKTticmVha319ZWxzZXtpZighcyhvW25dKSl7aWYoIXMob1sxLW5dKSl7dFtlXT1pO2JyZWFrfW9bbl09b1sxLW5dKihuPzEwOi4xKX1pZihvW25dPC1kP29bbl09LWQ6b1tuXT5kJiYob1tuXT1kKSxvWzBdPT09b1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02Km9bMF0pKTtvWzBdLT1jLG9bMV0rPWN9fWVsc2UgYS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChpKX0sdC5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj1lLl9zaXplO2lmKHQub3ZlcmxheWluZyl7dmFyIGk9dy5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49aS5kb21haW59dmFyIGE9ciYmdC5fcj8iX3IiOiJyYW5nZSIsbz10LmNhbGVuZGFyO3QuY2xlYW5SYW5nZShhKTt2YXIgcyxsLGM9dC5yMmwodFthXVswXSxvKSx1PXQucjJsKHRbYV1bMV0sbyksZj0ieSI9PT1wO2lmKChmPyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhjLXUpLHQuX2I9LXQuX20qdSk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8odS1jKSx0Ll9iPS10Ll9tKmMpLHQuX3JhbmdlYnJlYWtzPVtdLHQuX2xCcmVha3M9MCx0Ll9tMj0wLHQuX0I9W10sdC5yYW5nZWJyZWFrcykmJih0Ll9yYW5nZWJyZWFrcz10LmxvY2F0ZUJyZWFrcyhNYXRoLm1pbihjLHUpLE1hdGgubWF4KGMsdSkpLHQuX3JhbmdlYnJlYWtzLmxlbmd0aCkpe2ZvcihzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKWw9dC5fcmFuZ2VicmVha3Nbc10sdC5fbEJyZWFrcys9TWF0aC5hYnMobC5tYXgtbC5taW4pO3ZhciBoPWY7Yz51JiYoaD0haCksaCYmdC5fcmFuZ2VicmVha3MucmV2ZXJzZSgpO3ZhciBkPWg/LTE6MTtmb3IodC5fbTI9ZCp0Ll9sZW5ndGgvKE1hdGguYWJzKHUtYyktdC5fbEJyZWFrcyksdC5fQi5wdXNoKC10Ll9tMiooZj91OmMpKSxzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKWw9dC5fcmFuZ2VicmVha3Nbc10sdC5fQi5wdXNoKHQuX0JbdC5fQi5sZW5ndGgtMV0tZCp0Ll9tMioobC5tYXgtbC5taW4pKTtmb3Iocz0wO3M8dC5fcmFuZ2VicmVha3MubGVuZ3RoO3MrKykobD10Ll9yYW5nZWJyZWFrc1tzXSkucG1pbj1CKGwubWluKSxsLnBtYXg9QihsLm1heCl9aWYoIWlzRmluaXRlKHQuX20pfHwhaXNGaW5pdGUodC5fYil8fHQuX2xlbmd0aDwwKXRocm93IGUuX3JlcGxvdHRpbmc9ITEsbmV3IEVycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGF4aXMgc2NhbGluZyIpfSx0Lm1hc2tCcmVha3M9ZnVuY3Rpb24oZSl7dmFyIHIsbixpLG8scyxjPXQucmFuZ2VicmVha3N8fFtdO2MuX2NhY2hlZFBhdHRlcm5zfHwoYy5fY2FjaGVkUGF0dGVybnM9Yy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVuYWJsZWQmJmUuYm91bmRzP2Euc2ltcGxlTWFwKGUuYm91bmRzLGUucGF0dGVybj9sOnQuZDJjKTpudWxsfSkpKSxjLl9jYWNoZWRWYWx1ZXN8fChjLl9jYWNoZWRWYWx1ZXM9Yy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVuYWJsZWQmJmUudmFsdWVzP2Euc2ltcGxlTWFwKGUudmFsdWVzLHQuZDJjKS5zb3J0KGEuc29ydGVyQXNjKTpudWxsfSkpKTtmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGY9Y1t1XTtpZihmLmVuYWJsZWQpaWYoZi5ib3VuZHMpe3ZhciBoPWYucGF0dGVybjtzd2l0Y2gobj0ocj1jLl9jYWNoZWRQYXR0ZXJuc1t1XSlbMF0saT1yWzFdLGgpe2Nhc2UgQTpvPShzPW5ldyBEYXRlKGUpKS5nZXRVVENEYXkoKSxuPmkmJihpKz03LG88biYmKG8rPTcpKTticmVhaztjYXNlIGs6bz0ocz1uZXcgRGF0ZShlKSkuZ2V0VVRDSG91cnMoKSsocy5nZXRVVENNaW51dGVzKCkvNjArcy5nZXRVVENTZWNvbmRzKCkvMzYwMCtzLmdldFVUQ01pbGxpc2Vjb25kcygpLzM2ZTUpLG4+aSYmKGkrPTI0LG88biYmKG8rPTI0KSk7YnJlYWs7Y2FzZSIiOm89ZX1pZihvPj1uJiZvPGkpcmV0dXJuIG19ZWxzZSBmb3IodmFyIHA9Yy5fY2FjaGVkVmFsdWVzW3VdLGQ9MDtkPHAubGVuZ3RoO2QrKylpZihpPShuPXBbZF0pK2YuZHZhbHVlLGU+PW4mJmU8aSlyZXR1cm4gbX1yZXR1cm4gZX0sdC5sb2NhdGVCcmVha3M9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLG8scyxjPVtdO2lmKCF0LnJhbmdlYnJlYWtzKXJldHVybiBjO3ZhciB1PXQucmFuZ2VicmVha3Muc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnBhdHRlcm49PT1BJiZlLnBhdHRlcm49PT1rPy0xOmUucGF0dGVybj09PUEmJnQucGF0dGVybj09PWs/MTowfSkpLGY9ZnVuY3Rpb24odCxuKXtpZigodD1hLmNvbnN0cmFpbih0LGUscikpIT09KG49YS5jb25zdHJhaW4obixlLHIpKSl7Zm9yKHZhciBpPSEwLG89MDtvPGMubGVuZ3RoO28rKyl7dmFyIHM9Y1tvXTt0PHMubWF4JiZuPj1zLm1pbiYmKHQ8cy5taW4mJihzLm1pbj10KSxuPnMubWF4JiYocy5tYXg9biksaT0hMSl9aSYmYy5wdXNoKHttaW46dCxtYXg6bn0pfX07Zm9yKG49MDtuPHUubGVuZ3RoO24rKyl7dmFyIGg9dVtuXTtpZihoLmVuYWJsZWQpaWYoaC5ib3VuZHMpe3ZhciBwPWUsZD1yO2gucGF0dGVybiYmKHA9TWF0aC5mbG9vcihwKSksbz0oaT1hLnNpbXBsZU1hcChoLmJvdW5kcyxoLnBhdHRlcm4/bDp0LnIybCkpWzBdLHM9aVsxXTt2YXIgbSxnLHc9bmV3IERhdGUocCk7c3dpdGNoKGgucGF0dGVybil7Y2FzZSBBOmc9dixtPShzLW8rKHM8bz83OjApKSp5LHArPW8qeS0ody5nZXRVVENEYXkoKSp5K3cuZ2V0VVRDSG91cnMoKSp4K3cuZ2V0VVRDTWludXRlcygpKmIrdy5nZXRVVENTZWNvbmRzKCkqXyt3LmdldFVUQ01pbGxpc2Vjb25kcygpKTticmVhaztjYXNlIGs6Zz15LG09KHMtbysoczxvPzI0OjApKSp4LHArPW8qeC0ody5nZXRVVENIb3VycygpKngrdy5nZXRVVENNaW51dGVzKCkqYit3LmdldFVUQ1NlY29uZHMoKSpfK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2RlZmF1bHQ6cD1NYXRoLm1pbihpWzBdLGlbMV0pLG09Zz0oZD1NYXRoLm1heChpWzBdLGlbMV0pKS1wfWZvcih2YXIgVD1wO1Q8ZDtUKz1nKWYoVCxUK20pfWVsc2UgZm9yKHZhciBNPWEuc2ltcGxlTWFwKGgudmFsdWVzLHQuZDJjKSxTPTA7UzxNLmxlbmd0aDtTKyspZihvPU1bU10scz1vK2guZHZhbHVlKX1yZXR1cm4gYy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1pbi1lLm1pbn0pKSxjfSx0Lm1ha2VDYWxjZGF0YT1mdW5jdGlvbihlLHIsbil7dmFyIGksbyxzLGwsYz10LnR5cGUsdT0iZGF0ZSI9PT1jJiZlW3IrImNhbGVuZGFyIl07aWYociBpbiBlKXtpZihpPWVbcl0sbD1lLl9sZW5ndGh8fGEubWluUm93TGVuZ3RoKGkpLGEuaXNUeXBlZEFycmF5KGkpJiYoImxpbmVhciI9PT1jfHwibG9nIj09PWMpKXtpZihsPT09aS5sZW5ndGgpcmV0dXJuIGk7aWYoaS5zdWJhcnJheSlyZXR1cm4gaS5zdWJhcnJheSgwLGwpfWlmKCJtdWx0aWNhdGVnb3J5Ij09PWMpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl7dmFyIGk9KHRbMF18fFtdKVtuXSxhPSh0WzFdfHxbXSlbbl07cltuXT1PKFtpLGFdKX1yZXR1cm4gcn0oaSxsKTtmb3Iobz1uZXcgQXJyYXkobCkscz0wO3M8bDtzKyspb1tzXT10LmQyYyhpW3NdLDAsdSxuKX1lbHNle3ZhciBmPXIrIjAiaW4gZT90LmQyYyhlW3IrIjAiXSwwLHUpOjAsaD1lWyJkIityXT9OdW1iZXIoZVsiZCIrcl0pOjE7Zm9yKGk9ZVt7eDoieSIseToieCJ9W3JdXSxsPWUuX2xlbmd0aHx8aS5sZW5ndGgsbz1uZXcgQXJyYXkobCkscz0wO3M8bDtzKyspb1tzXT1mK3MqaH1pZih0LnJhbmdlYnJlYWtzKWZvcihzPTA7czxsO3MrKylvW3NdPXQubWFza0JyZWFrcyhvW3NdKTtyZXR1cm4gb30sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmcyh0LnIybChlWzBdKSkmJnModC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYzJsKGVbcF0sbnVsbCxyKSxpPXQucjJsKHQucmFuZ2VbMF0pLGE9dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIGk8YT9pPD1uJiZuPD1hOmE8PW4mJm48PWl9LHQuX2VtcHR5Q2F0ZWdvcmllcz1mdW5jdGlvbigpe3QuX2NhdGVnb3JpZXM9W10sdC5fY2F0ZWdvcmllc01hcD17fX0sdC5jbGVhckNhbGM9ZnVuY3Rpb24oKXt2YXIgcj10Ll9tYXRjaEdyb3VwO2lmKHIpe3ZhciBuPW51bGwsaT1udWxsO2Zvcih2YXIgYSBpbiByKXt2YXIgbz1lW3cuaWQybmFtZShhKV07aWYoby5fY2F0ZWdvcmllcyl7bj1vLl9jYXRlZ29yaWVzLGk9by5fY2F0ZWdvcmllc01hcDticmVha319biYmaT8odC5fY2F0ZWdvcmllcz1uLHQuX2NhdGVnb3JpZXNNYXA9aSk6dC5fZW1wdHlDYXRlZ29yaWVzKCl9ZWxzZSB0Ll9lbXB0eUNhdGVnb3JpZXMoKTtpZih0Ll9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIHM9MDtzPHQuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtzKyspSSh0Ll9pbml0aWFsQ2F0ZWdvcmllc1tzXSl9LHQuc29ydEJ5SW5pdGlhbENhdGVnb3JpZXM9ZnVuY3Rpb24oKXt2YXIgbj1bXTtpZih0Ll9lbXB0eUNhdGVnb3JpZXMoKSx0Ll9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGk9MDtpPHQuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtpKyspSSh0Ll9pbml0aWFsQ2F0ZWdvcmllc1tpXSk7bj1uLmNvbmNhdCh0Ll90cmFjZUluZGljZXMpO3ZhciBhPXQuX21hdGNoR3JvdXA7Zm9yKHZhciBvIGluIGEpaWYociE9PW8pe3ZhciBzPWVbdy5pZDJuYW1lKG8pXTtzLl9jYXRlZ29yaWVzPXQuX2NhdGVnb3JpZXMscy5fY2F0ZWdvcmllc01hcD10Ll9jYXRlZ29yaWVzTWFwLG49bi5jb25jYXQocy5fdHJhY2VJbmRpY2VzKX1yZXR1cm4gbn07dmFyIFU9ZS5fZDNsb2NhbGU7ImRhdGUiPT09dC50eXBlJiYodC5fZGF0ZUZvcm1hdD1VP1UudGltZUZvcm1hdDppLHQuX2V4dHJhRm9ybWF0PWUuX2V4dHJhRm9ybWF0KSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyx0Ll9udW1Gb3JtYXQ9VT9VLm51bWJlckZvcm1hdDpvLGRlbGV0ZSB0Ll9taW5EdGljayxkZWxldGUgdC5fZm9yY2VUaWNrMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi9heGlzX2lkcyI6NTU4LCIuL2NvbnN0YW50cyI6NTYxLCJAcGxvdGx5L2QzIjo1OCwiZDMtdGltZS1mb3JtYXQiOjEyMCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDU3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9WyJzaG93ZXhwb25lbnQiLCJzaG93dGlja3ByZWZpeCIsInNob3d0aWNrc3VmZml4Il0uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pKTtpZihlLmV2ZXJ5KChmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT09PXRbZVswXV19KSl8fDE9PT1lLmxlbmd0aClyZXR1cm4gdFtlWzBdXX19LHt9XSw1Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuY29udHJhc3QsYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuL3Nob3dfZGZsdCIpLHM9dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIik7ZnVuY3Rpb24gbCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEudGlja2Zvcm1hdHN0b3BzLHIsaSl9cigiZW5hYmxlZCIpJiYocigiZHRpY2tyYW5nZSIpLHIoInZhbHVlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjLHUpe3V8fCh1PXt9KTt2YXIgZj1vKHQpO2lmKHIoInNob3d0aWNrbGFiZWxzIikpe3ZhciBoPXUuZm9udHx8e30scD1lLmNvbG9yLGQ9LTEhPT0oZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpP2kodS5iZ0NvbG9yKTpwJiZwIT09YS5jb2xvci5kZmx0P3A6aC5jb2xvcjtpZihuLmNvZXJjZUZvbnQociwidGlja2ZvbnQiLHtmYW1pbHk6aC5mYW1pbHksc2l6ZTpoLnNpemUsY29sb3I6ZH0pLHUubm9Bbmd8fHIoInRpY2thbmdsZSIpLCJjYXRlZ29yeSIhPT1jKXt2YXIgbT1yKCJ0aWNrZm9ybWF0Iik7cyh0LGUse25hbWU6InRpY2tmb3JtYXRzdG9wcyIsaW5jbHVzaW9uQXR0cjoiZW5hYmxlZCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLnRpY2tmb3JtYXRzdG9wcy5sZW5ndGh8fGRlbGV0ZSBlLnRpY2tmb3JtYXRzdG9wcyx1Lm5vRXhwfHxtfHwiZGF0ZSI9PT1jfHwocigic2hvd2V4cG9uZW50IixmKSxyKCJleHBvbmVudGZvcm1hdCIpLHIoIm1pbmV4cG9uZW50Iikscigic2VwYXJhdGV0aG91c2FuZHMiKSl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9saWIiOjUwMywiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OSwiLi9zaG93X2RmbHQiOjU3N31dLDU3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLCJ0aWNrbGVuIikscz1uLmNvZXJjZTIodCxlLGksInRpY2t3aWR0aCIpLGw9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrY29sb3IiLGUuY29sb3IpO3IoInRpY2tzIixhLm91dGVyVGlja3N8fG98fHN8fGw/Im91dHNpZGUiOiIiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo1Njl9XSw1ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jbGVhbl90aWNrcyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyhyKXt2YXIgbj10W3JdO3JldHVybiB2b2lkIDAhPT1uP246KGUuX3RlbXBsYXRlfHx7fSlbcl19dmFyIHM9bygidGljazAiKSxsPW8oImR0aWNrIiksYz1vKCJ0aWNrdmFscyIpLHU9cigidGlja21vZGUiLGkoYyk/ImFycmF5IjpsPyJsaW5lYXIiOiJhdXRvIik7aWYoImF1dG8iPT09dSlyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09dSl7dmFyIGY9ZS5kdGljaz1uLmR0aWNrKGwsYSk7ZS50aWNrMD1uLnRpY2swKHMsYSxlLmNhbGVuZGFyLGYpfWVsc2UgaWYoIm11bHRpY2F0ZWdvcnkiIT09YSl7dm9pZCAwPT09cigidGlja3ZhbHMiKT9lLnRpY2ttb2RlPSJhdXRvIjpyKCJ0aWNrdGV4dCIpfX19LHsiLi4vLi4vbGliIjo1MDMsIi4vY2xlYW5fdGlja3MiOjU2MH1dLDU4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10Ll9mdWxsTGF5b3V0O2lmKDAhPT1lLmxlbmd0aCl7dmFyIHUsZixoLHA7bCYmKHU9bCgpKTt2YXIgZD1uLmVhc2Uoci5lYXNpbmcpO3JldHVybiB0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShwKSxwPW51bGwsZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dLG89YS5wbG90aW5mby54YXhpcyxzPWEucGxvdGluZm8ueWF4aXM7YS54cjAmJihyW28uX25hbWUrIi5yYW5nZSJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYocltzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKW0oZVt0XS5wbG90aW5mbyl9KSl9KCl9KSksZj1EYXRlLm5vdygpLHA9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24gbigpe2g9RGF0ZS5ub3coKTtmb3IodmFyIGE9TWF0aC5taW4oMSwoaC1mKS9yLmR1cmF0aW9uKSxvPWQoYSkscz0wO3M8ZS5sZW5ndGg7cysrKWcoZVtzXSxvKTtoLWY+ci5kdXJhdGlvbj8oIWZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEucGxvdGluZm8ueGF4aXMscz1hLnBsb3RpbmZvLnlheGlzO2EueHIxJiYocltvLl9uYW1lKyIucmFuZ2UiXT1hLnhyMS5zbGljZSgpKSxhLnlyMSYmKHJbcy5fbmFtZSsiLnJhbmdlIl09YS55cjEuc2xpY2UoKSl9dSYmdSgpLGkuY2FsbCgicmVsYXlvdXQiLHQscikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyltKGVbdF0ucGxvdGluZm8pfSkpfSgpLHA9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pKTpwPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gbSh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztjLl9kZWZzLnNlbGVjdCgiIyIrdC5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoby5zZXRUcmFuc2xhdGUsMCwwKS5jYWxsKG8uc2V0U2NhbGUsMSwxKSx0LnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxlLl9vZmZzZXQsci5fb2Zmc2V0KS5jYWxsKG8uc2V0U2NhbGUsMSwxKTt2YXIgbj10LnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyIC50cmFjZSIpO24uc2VsZWN0QWxsKCIucG9pbnQiKS5jYWxsKG8uc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKG8uc2V0VGV4dFBvaW50c1NjYWxlLDEsMSksbi5jYWxsKG8uaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KX1mdW5jdGlvbiBnKGUscil7dmFyIG49ZS5wbG90aW5mbyxpPW4ueGF4aXMsbD1uLnlheGlzLGM9aS5fbGVuZ3RoLHU9bC5fbGVuZ3RoLGY9ISFlLnhyMSxoPSEhZS55cjEscD1bXTtpZihmKXt2YXIgZD1hLnNpbXBsZU1hcChlLnhyMCxpLnIybCksbT1hLnNpbXBsZU1hcChlLnhyMSxpLnIybCksZz1kWzFdLWRbMF0sdj1tWzFdLW1bMF07cFswXT0oZFswXSooMS1yKStyKm1bMF0tZFswXSkvKGRbMV0tZFswXSkqYyxwWzJdPWMqKDEtcityKnYvZyksaS5yYW5nZVswXT1pLmwycihkWzBdKigxLXIpK3IqbVswXSksaS5yYW5nZVsxXT1pLmwycihkWzFdKigxLXIpK3IqbVsxXSl9ZWxzZSBwWzBdPTAscFsyXT1jO2lmKGgpe3ZhciB5PWEuc2ltcGxlTWFwKGUueXIwLGwucjJsKSx4PWEuc2ltcGxlTWFwKGUueXIxLGwucjJsKSxiPXlbMV0teVswXSxfPXhbMV0teFswXTtwWzFdPSh5WzFdKigxLXIpK3IqeFsxXS15WzFdKS8oeVswXS15WzFdKSp1LHBbM109dSooMS1yK3IqXy9iKSxsLnJhbmdlWzBdPWkubDJyKHlbMF0qKDEtcikrcip4WzBdKSxsLnJhbmdlWzFdPWwubDJyKHlbMV0qKDEtcikrcip4WzFdKX1lbHNlIHBbMV09MCxwWzNdPXU7cy5kcmF3T25lKHQsaSx7c2tpcFRpdGxlOiEwfSkscy5kcmF3T25lKHQsbCx7c2tpcFRpdGxlOiEwfSkscy5yZWRyYXdDb21wb25lbnRzKHQsW2kuX2lkLGwuX2lkXSk7dmFyIHc9Zj9jL3BbMl06MSxUPWg/dS9wWzNdOjEsaz1mP3BbMF06MCxBPWg/cFsxXTowLE09Zj9wWzBdL3BbMl0qYzowLFM9aD9wWzFdL3BbM10qdTowLEU9aS5fb2Zmc2V0LU0sTD1sLl9vZmZzZXQtUztuLmNsaXBSZWN0LmNhbGwoby5zZXRUcmFuc2xhdGUsayxBKS5jYWxsKG8uc2V0U2NhbGUsMS93LDEvVCksbi5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsRSxMKS5jYWxsKG8uc2V0U2NhbGUsdyxUKSxvLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cywxL3csMS9UKSxvLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCwxL3csMS9UKX1zLnJlZHJhd0NvbXBvbmVudHModCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9heGVzIjo1NTQsIkBwbG90bHkvZDMiOjU4fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxpPXQoIi4vYXhpc19hdXRvdHlwZSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6IngiLGg6InkifVt0Lm9yaWVudGF0aW9ufHwidiJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LCJib3gtdmlvbGluIiksbz1uKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3IoImF1dG90eXBlbnVtYmVycyIscy5hdXRvdHlwZW51bWJlcnNEZmx0KSwiLSI9PT1yKCJ0eXBlIiwocy5zcGxvbVN0YXNofHx7fSkudHlwZSkmJighZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByLHM9dC5faWQsbD1zLmNoYXJBdCgwKTstMSE9PXMuaW5kZXhPZigic2NlbmUiKSYmKHM9bCk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKCJzcGxvbSI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVsiXyIrcisiYXhlcyJdfHx7fSlbZV0pcmV0dXJuIGk7aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX0oZSxzLGwpO2lmKCFjKXJldHVybjtpZigiaGlzdG9ncmFtIj09PWMudHlwZSYmbD09PXt2OiJ5IixoOiJ4In1bYy5vcmllbnRhdGlvbnx8InYiXSlyZXR1cm4gdm9pZCh0LnR5cGU9ImxpbmVhciIpO3ZhciB1PWwrImNhbGVuZGFyIixmPWNbdV0saD17bm9NdWx0aUNhdGVnb3J5OiFuKGMsImNhcnRlc2lhbiIpfHxuKGMsIm5vTXVsdGlDYXRlZ29yeSIpfTsiYm94Ij09PWMudHlwZSYmYy5faGFzUHJlQ29tcFN0YXRzJiZsPT09e2g6IngiLHY6InkifVtjLm9yaWVudGF0aW9ufHwidiJdJiYoaC5ub011bHRpQ2F0ZWdvcnk9ITApO2lmKGguYXV0b3R5cGVudW1iZXJzPXQuYXV0b3R5cGVudW1iZXJzLG8oYyxsKSl7dmFyIHA9YShjKSxkPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBtPWVbcl07bihtLCJib3gtdmlvbGluIikmJihtW2wrImF4aXMiXXx8bCk9PT1zJiYodm9pZCAwIT09bVtwXT9kLnB1c2gobVtwXVswXSk6dm9pZCAwIT09bS5uYW1lP2QucHVzaChtLm5hbWUpOmQucHVzaCgidGV4dCIpLG1bdV0hPT1mJiYoZj12b2lkIDApKX10LnR5cGU9aShkLGYsaCl9ZWxzZSBpZigic3Bsb20iPT09Yy50eXBlKXt2YXIgZz1jLmRpbWVuc2lvbnNbYy5fYXhlc0RpbVtzXV07Zy52aXNpYmxlJiYodC50eXBlPWkoZy52YWx1ZXMsZixoKSl9ZWxzZSB0LnR5cGU9aShjW2xdfHxbY1tsKyIwIl1dLGYsaCl9KGUscy5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGUpfX0seyIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuL2F4aXNfYXV0b3R5cGUiOjU1NX1dLDU4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG4sYSxvLHM9ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWFbbl09ZVsxXTtlbHNle2lmKCFpLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7YT1ufXJldHVybiBsKGEsKGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6ImxheW91dCIscHJvcDp0LHZhbHVlOm59KX0pLCIiLDApLHJ9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYSxvLHM9W107aWYobj1lWzBdLGE9ZVsxXSxyPWVbMl0sbz17fSwic3RyaW5nIj09dHlwZW9mIG4pb1tuXT1hO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcztvPW4sdm9pZCAwPT09ciYmKHI9YSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLGwobywoZnVuY3Rpb24oZSxuLGkpe3ZhciBhLG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1pLnNsaWNlKCk7dmFyIGw9TWF0aC5taW4oby5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKGw9TWF0aC5taW4obCxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBjPTA7YzxsO2MrKylhW2NdPXI/cltjXTpjfWVsc2Ugbz1pLGE9cj9yLnNsaWNlKCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KG8pKXt2YXIgdT1vO289W107Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspb1tmXT11fW8ubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKX1zLnB1c2goe3R5cGU6ImRhdGEiLHByb3A6ZSx0cmFjZXM6YSx2YWx1ZTpvfSl9KSwiIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIG89dFthXTtpZigiXyIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/Ii4iOiIiKSthO2kuaXNQbGFpbk9iamVjdChvKT9sKG8sZSxzLG4rMSk6ZShzLGEsbyl9fSkpfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7YSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWEodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxmPTA7Zjx1Lmxlbmd0aDtmKyspdC5faW50ZXJuYWxPbih1W2ZdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGkubG9nKCJVbmFibGUgdG8gYXV0b21hdGljYWxseSBiaW5kIHBsb3QgdXBkYXRlcyB0byBBUEkgY29tbWFuZCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgZj1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1mLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZigocz1mWzBdKS50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGg9MDtoPGEudHJhY2VzLmxlbmd0aDtoKyspaWYoYS50cmFjZXNbaF0hPT1zLnRyYWNlc1toXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9ZlswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWZbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJza2lwIj09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBhPW4uYXBpTWV0aG9kUmVnaXN0cnlbZV0sbz1bdF07QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKW8ucHVzaChyW3NdKTtyZXR1cm4gYS5hcHBseShudWxsLG8pLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pKX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2UicmVzdHlsZSI6bj1zKHQscik7YnJlYWs7Y2FzZSJyZWxheW91dCI6bj1vKHQscik7YnJlYWs7Y2FzZSJ1cGRhdGUiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2UiYW5pbWF0ZSI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6ImxheW91dCIscHJvcDoiX2N1cnJlbnRGcmFtZSIsdmFsdWU6ZVswXVswXS50b1N0cmluZygpfV06W119KDAscik7YnJlYWs7ZGVmYXVsdDpuPVtdfXJldHVybiBufX0seyIuLi9saWIiOjUwMywiLi4vcmVnaXN0cnkiOjYzOH1dLDU4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0pLGl9LHIuZGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9biYmbi54fHxbMCwxXSxhPW4mJm4ueXx8WzAsMV0sbz1lLmdyaWQ7aWYobyl7dmFyIHM9cigiZG9tYWluLmNvbHVtbiIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKCJkb21haW4ucm93Iik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXZhciBjPXIoImRvbWFpbi54IixpKSx1PXIoImRvbWFpbi55IixhKTtjWzBdPGNbMV18fCh0LmRvbWFpbi54PWkuc2xpY2UoKSksdVswXTx1WzFdfHwodC5kb21haW4ueT1hLnNsaWNlKCkpfX0seyIuLi9saWIvZXh0ZW5kIjo0OTN9XSw1ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWRpdFR5cGUscj10LmNvbG9yRWRpdFR5cGU7dm9pZCAwPT09ciYmKHI9ZSk7dmFyIG49e2ZhbWlseTp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTplfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGVkaXRUeXBlOmV9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6cn0sZWRpdFR5cGU6ZX07cmV0dXJuIHQuYXV0b1NpemUmJihuLnNpemUuZGZsdD0iYXV0byIpLHQuYXV0b0NvbG9yJiYobi5jb2xvci5kZmx0PSJhdXRvIiksdC5hcnJheU9rJiYobi5mYW1pbHkuYXJyYXlPaz0hMCxuLnNpemUuYXJyYXlPaz0hMCxuLmNvbG9yLmFycmF5T2s9ITApLG59fSx7fV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sNTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucHJvak5hbWVzPXthaXJ5OiJhaXJ5IixhaXRvZmY6ImFpdG9mZiIsImFsYmVycyB1c2EiOiJhbGJlcnNVc2EiLGFsYmVyczoiYWxiZXJzIixhdWd1c3Q6ImF1Z3VzdCIsImF6aW11dGhhbCBlcXVhbCBhcmVhIjoiYXppbXV0aGFsRXF1YWxBcmVhIiwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjoiYXppbXV0aGFsRXF1aWRpc3RhbnQiLGJha2VyOiJiYWtlciIsYmVydGluMTk1MzoiYmVydGluMTk1MyIsYm9nZ3M6ImJvZ2dzIixib25uZToiYm9ubmUiLGJvdHRvbWxleToiYm90dG9tbGV5Iixicm9tbGV5OiJicm9tbGV5Iixjb2xsaWdub246ImNvbGxpZ25vbiIsImNvbmljIGNvbmZvcm1hbCI6ImNvbmljQ29uZm9ybWFsIiwiY29uaWMgZXF1YWwgYXJlYSI6ImNvbmljRXF1YWxBcmVhIiwiY29uaWMgZXF1aWRpc3RhbnQiOiJjb25pY0VxdWlkaXN0YW50IixjcmFpZzoiY3JhaWciLGNyYXN0ZXI6ImNyYXN0ZXIiLCJjeWxpbmRyaWNhbCBlcXVhbCBhcmVhIjoiY3lsaW5kcmljYWxFcXVhbEFyZWEiLCJjeWxpbmRyaWNhbCBzdGVyZW9ncmFwaGljIjoiY3lsaW5kcmljYWxTdGVyZW9ncmFwaGljIixlY2tlcnQxOiJlY2tlcnQxIixlY2tlcnQyOiJlY2tlcnQyIixlY2tlcnQzOiJlY2tlcnQzIixlY2tlcnQ0OiJlY2tlcnQ0IixlY2tlcnQ1OiJlY2tlcnQ1IixlY2tlcnQ2OiJlY2tlcnQ2IixlaXNlbmxvaHI6ImVpc2VubG9ociIsZXF1aXJlY3Rhbmd1bGFyOiJlcXVpcmVjdGFuZ3VsYXIiLGZhaGV5OiJmYWhleSIsImZvdWNhdXQgc2ludXNvaWRhbCI6ImZvdWNhdXRTaW51c29pZGFsIixmb3VjYXV0OiJmb3VjYXV0IixnaW56YnVyZzQ6ImdpbnpidXJnNCIsZ2luemJ1cmc1OiJnaW56YnVyZzUiLGdpbnpidXJnNjoiZ2luemJ1cmc2IixnaW56YnVyZzg6ImdpbnpidXJnOCIsZ2luemJ1cmc5OiJnaW56YnVyZzkiLGdub21vbmljOiJnbm9tb25pYyIsImdyaW5nb3J0ZW4gcXVpbmN1bmNpYWwiOiJncmluZ29ydGVuUXVpbmN1bmNpYWwiLGdyaW5nb3J0ZW46ImdyaW5nb3J0ZW4iLGd1eW91OiJndXlvdSIsaGFtbWVyOiJoYW1tZXIiLGhpbGw6ImhpbGwiLGhvbW9sb3NpbmU6ImhvbW9sb3NpbmUiLGh1Zm5hZ2VsOiJodWZuYWdlbCIsaHlwZXJlbGxpcHRpY2FsOiJoeXBlcmVsbGlwdGljYWwiLGthdnJheXNraXk3OiJrYXZyYXlza2l5NyIsbGFncmFuZ2U6ImxhZ3JhbmdlIixsYXJyaXZlZToibGFycml2ZWUiLGxhc2tvd3NraToibGFza293c2tpIixsb3hpbXV0aGFsOiJsb3hpbXV0aGFsIixtZXJjYXRvcjoibWVyY2F0b3IiLG1pbGxlcjoibWlsbGVyIixtb2xsd2VpZGU6Im1vbGx3ZWlkZSIsIm10IGZsYXQgcG9sYXIgcGFyYWJvbGljIjoibXRGbGF0UG9sYXJQYXJhYm9saWMiLCJtdCBmbGF0IHBvbGFyIHF1YXJ0aWMiOiJtdEZsYXRQb2xhclF1YXJ0aWMiLCJtdCBmbGF0IHBvbGFyIHNpbnVzb2lkYWwiOiJtdEZsYXRQb2xhclNpbnVzb2lkYWwiLCJuYXR1cmFsIGVhcnRoIjoibmF0dXJhbEVhcnRoIiwibmF0dXJhbCBlYXJ0aDEiOiJuYXR1cmFsRWFydGgxIiwibmF0dXJhbCBlYXJ0aDIiOiJuYXR1cmFsRWFydGgyIiwibmVsbCBoYW1tZXIiOiJuZWxsSGFtbWVyIixuaWNvbG9zaToibmljb2xvc2kiLG9ydGhvZ3JhcGhpYzoib3J0aG9ncmFwaGljIixwYXR0ZXJzb246InBhdHRlcnNvbiIsInBlaXJjZSBxdWluY3VuY2lhbCI6InBlaXJjZVF1aW5jdW5jaWFsIixwb2x5Y29uaWM6InBvbHljb25pYyIsInJlY3Rhbmd1bGFyIHBvbHljb25pYyI6InJlY3Rhbmd1bGFyUG9seWNvbmljIixyb2JpbnNvbjoicm9iaW5zb24iLHNhdGVsbGl0ZToic2F0ZWxsaXRlIiwic2ludSBtb2xsd2VpZGUiOiJzaW51TW9sbHdlaWRlIixzaW51c29pZGFsOiJzaW51c29pZGFsIixzdGVyZW9ncmFwaGljOiJzdGVyZW9ncmFwaGljIix0aW1lczoidGltZXMiLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoidHJhbnN2ZXJzZU1lcmNhdG9yIiwidmFuIGRlciBncmludGVuIjoidmFuRGVyR3JpbnRlbiIsInZhbiBkZXIgZ3JpbnRlbjIiOiJ2YW5EZXJHcmludGVuMiIsInZhbiBkZXIgZ3JpbnRlbjMiOiJ2YW5EZXJHcmludGVuMyIsInZhbiBkZXIgZ3JpbnRlbjQiOiJ2YW5EZXJHcmludGVuNCIsd2FnbmVyNDoid2FnbmVyNCIsd2FnbmVyNjoid2FnbmVyNiIsd2llY2hlbDoid2llY2hlbCIsIndpbmtlbCB0cmlwZWwiOiJ3aW5rZWwzIix3aW5rZWwzOiJ3aW5rZWwzIn0sci5heGVzTmFtZXM9WyJsb25heGlzIiwibGF0YXhpcyJdLHIubG9uYXhpc1NwYW49e29ydGhvZ3JhcGhpYzoxODAsImF6aW11dGhhbCBlcXVhbCBhcmVhIjozNjAsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6MzYwLCJjb25pYyBjb25mb3JtYWwiOjE4MCxnbm9tb25pYzoxNjAsc3RlcmVvZ3JhcGhpYzoxODAsInRyYW5zdmVyc2UgbWVyY2F0b3IiOjE4MCwiKiI6MzYwfSxyLmxhdGF4aXNTcGFuPXsiY29uaWMgY29uZm9ybWFsIjoxNTAsc3RlcmVvZ3JhcGhpYzoxNzkuNSwiKiI6MTgwfSxyLnNjb3BlRGVmYXVsdHM9e3dvcmxkOntsb25heGlzUmFuZ2U6Wy0xODAsMTgwXSxsYXRheGlzUmFuZ2U6Wy05MCw5MF0scHJvalR5cGU6ImVxdWlyZWN0YW5ndWxhciIscHJvalJvdGF0ZTpbMCwwLDBdfSx1c2E6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNTBdLGxhdGF4aXNSYW5nZTpbMTUsODBdLHByb2pUeXBlOiJhbGJlcnMgdXNhIn0sZXVyb3BlOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlszMCw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbMTUsMCwwXSxwcm9qUGFyYWxsZWxzOlswLDYwXX0sYXNpYTp7bG9uYXhpc1JhbmdlOlsyMiwxNjBdLGxhdGF4aXNSYW5nZTpbLTE1LDU1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sYWZyaWNhOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlstNDAsNDBdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSwibm9ydGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNDVdLGxhdGF4aXNSYW5nZTpbNSw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbLTEwMCwwLDBdLHByb2pQYXJhbGxlbHM6WzI5LjUsNDUuNV19LCJzb3V0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTAwLC0zMF0sbGF0YXhpc1JhbmdlOlstNjAsMTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfX0sci5jbGlwUGFkPS4wMDEsci5wcmVjaXNpb249LjEsci5sYW5kQ29sb3I9IiNGMERDODIiLHIud2F0ZXJDb2xvcj0iIzMzOTlGRiIsci5sb2NhdGlvbm1vZGVUb0xheWVyPXsiSVNPLTMiOiJjb3VudHJpZXMiLCJVU0Etc3RhdGVzIjoic3VidW5pdHMiLCJjb3VudHJ5IG5hbWVzIjoiY291bnRyaWVzIn0sci5zcGhlcmVTVkc9e3R5cGU6IlNwaGVyZSJ9LHIuZmlsbExheWVycz17b2NlYW46MSxsYW5kOjEsbGFrZXM6MX0sci5saW5lTGF5ZXJzPXtzdWJ1bml0czoxLGNvdW50cmllczoxLGNvYXN0bGluZXM6MSxyaXZlcnM6MSxmcmFtZToxfSxyLmxheWVycz1bImJnIiwib2NlYW4iLCJsYW5kIiwibGFrZXMiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJyaXZlcnMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJmcm9udHBsb3QiXSxyLmxheWVyc0ZvckNob3JvcGxldGg9WyJiZyIsIm9jZWFuIiwibGFuZCIsInN1YnVuaXRzIiwiY291bnRyaWVzIiwiY29hc3RsaW5lcyIsImxhdGF4aXMiLCJsb25heGlzIiwiZnJhbWUiLCJiYWNrcGxvdCIsInJpdmVycyIsImxha2VzIiwiZnJvbnRwbG90Il0sci5sYXllck5hbWVUb0FkamVjdGl2ZT17b2NlYW46Im9jZWFuIixsYW5kOiJsYW5kIixsYWtlczoibGFrZSIsc3VidW5pdHM6InN1YnVuaXQiLGNvdW50cmllczoiY291bnRyeSIsY29hc3RsaW5lczoiY29hc3RsaW5lIixyaXZlcnM6InJpdmVyIixmcmFtZToiZnJhbWUifX0se31dLDU4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1nZW8iKSxhPWkuZ2VvUGF0aCxvPWkuZ2VvRGlzdGFuY2Uscz10KCJkMy1nZW8tcHJvamVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPXQoIi4uLy4uL2xpYiIpLHU9Yy5zdHJUcmFuc2xhdGUsZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxkPXQoIi4uL3Bsb3RzIiksbT10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmdldEF1dG9SYW5nZSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx5PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHg9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGI9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssXz10KCIuL3pvb20iKSx3PXQoIi4vY29uc3RhbnRzIiksVD10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIiksaz10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKSxBPXQoInRvcG9qc29uLWNsaWVudCIpLmZlYXR1cmU7ZnVuY3Rpb24gTSh0KXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMudG9wb2pzb25VUkw9dC50b3BvanNvblVSTCx0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdCx0aGlzLnRvcG9qc29uTmFtZT1udWxsLHRoaXMudG9wb2pzb249bnVsbCx0aGlzLnByb2plY3Rpb249bnVsbCx0aGlzLnNjb3BlPW51bGwsdGhpcy52aWV3SW5pdGlhbD1udWxsLHRoaXMuZml0U2NhbGU9bnVsbCx0aGlzLmJvdW5kcz1udWxsLHRoaXMubWlkUHQ9bnVsbCx0aGlzLmhhc0Nob3JvcGxldGg9ITEsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5iYXNlUGF0aHM9e30sdGhpcy5kYXRhUGF0aHM9e30sdGhpcy5kYXRhUG9pbnRzPXt9LHRoaXMuY2xpcERlZj1udWxsLHRoaXMuY2xpcFJlY3Q9bnVsbCx0aGlzLmJnUmVjdD1udWxsLHRoaXMubWFrZUZyYW1ld29yaygpfXZhciBTPU0ucHJvdG90eXBlO2Z1bmN0aW9uIEUodCxlKXt2YXIgcj13LmNsaXBQYWQsbj10WzBdK3IsaT10WzFdLXIsYT1lWzBdK3Isbz1lWzFdLXI7bj4wJiZpPDAmJihpKz0zNjApO3ZhciBzPShpLW4pLzQ7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltbW24sYV0sW24sb10sW24rcyxvXSxbbisyKnMsb10sW24rMypzLG9dLFtpLG9dLFtpLGFdLFtpLXMsYV0sW2ktMipzLGFdLFtpLTMqcyxhXSxbbixhXV1dfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNKHQpfSxTLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1lW3RoaXMuaWRdLGE9W10sbz0hMTtmb3IodmFyIHMgaW4gdy5sYXllck5hbWVUb0FkamVjdGl2ZSlpZigiZnJhbWUiIT09cyYmaVsic2hvdyIrc10pe289ITA7YnJlYWt9Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspaWYodFswXVswXS50cmFjZS5sb2NhdGlvbm1vZGUpe289ITA7YnJlYWt9aWYobyl7dmFyIGM9ay5nZXRUb3BvanNvbk5hbWUoaSk7bnVsbCE9PW4udG9wb2pzb24mJmM9PT1uLnRvcG9qc29uTmFtZXx8KG4udG9wb2pzb25OYW1lPWMsdm9pZCAwPT09UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW24udG9wb2pzb25OYW1lXSYmYS5wdXNoKG4uZmV0Y2hUb3BvanNvbigpKSl9YT1hLmNvbmNhdChULmZldGNoVHJhY2VHZW9EYXRhKHQpKSxyLnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsaSl7UHJvbWlzZS5hbGwoYSkudGhlbigoZnVuY3Rpb24oKXtuLnRvcG9qc29uPVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0sbi51cGRhdGUodCxlKSxyKCl9KSkuY2F0Y2goaSl9KSkpfSxTLmZldGNoVG9wb2pzb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9ay5nZXRUb3BvanNvblBhdGgodC50b3BvanNvblVSTCx0LnRvcG9qc29uTmFtZSk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe24uanNvbihlLChmdW5jdGlvbihuLGEpe2lmKG4pcmV0dXJuIDQwND09PW4uc3RhdHVzP2kobmV3IEVycm9yKFsicGxvdGx5LmpzIGNvdWxkIG5vdCBmaW5kIHRvcG9qc29uIGZpbGUgYXQiLGUsIi4iLCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uIiwiaXMgc2V0IHByb3Blcmx5LiJdLmpvaW4oIiAiKSkpOmkobmV3IEVycm9yKFsidW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0IixlXS5qb2luKCIgIikpKTtQbG90bHlHZW9Bc3NldHMudG9wb2pzb25bdC50b3BvanNvbk5hbWVdPWEscigpfSkpfSkpfSxTLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aVswXS50cmFjZTsiY2hvcm9wbGV0aCI9PT1hLnR5cGUmJih0aGlzLmhhc0Nob3JvcGxldGg9ITApLCEwPT09YS52aXNpYmxlJiZhLl9sZW5ndGg+MCYmYS5fbW9kdWxlLmNhbGNHZW9KU09OKGksZSl9aWYoIXRoaXMudXBkYXRlUHJvamVjdGlvbih0LGUpKXt0aGlzLnZpZXdJbml0aWFsJiZ0aGlzLnNjb3BlPT09ci5zY29wZXx8dGhpcy5zYXZlVmlld0luaXRpYWwociksdGhpcy5zY29wZT1yLnNjb3BlLHRoaXMudXBkYXRlQmFzZUxheWVycyhlLHIpLHRoaXMudXBkYXRlRGltcyhlLHIpLHRoaXMudXBkYXRlRngoZSxyKSxkLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKTt2YXIgbz10aGlzLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PW8uc2VsZWN0QWxsKCIucG9pbnQiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1vLnNlbGVjdEFsbCgidGV4dCIpLHRoaXMuZGF0YVBhdGhzLmxpbmU9by5zZWxlY3RBbGwoIi5qcy1saW5lIik7dmFyIHM9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1zLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMucmVuZGVyKCl9fSxTLnVwZGF0ZVByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdyYXBoRGl2LG49ZVt0aGlzLmlkXSxsPWUuX3NpemUsdT1uLmRvbWFpbixmPW4ucHJvamVjdGlvbixoPW4ubG9uYXhpcyxwPW4ubGF0YXhpcyxkPWguX2F4LG09cC5fYXgsdj10aGlzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dC5wcm9qZWN0aW9uLHI9ZS50eXBlLG49dy5wcm9qTmFtZXNbcl07bj0iZ2VvIitjLnRpdGxlQ2FzZShuKTtmb3IodmFyIGw9KGlbbl18fHNbbl0pKCksdT10Ll9pc1NhdGVsbGl0ZT8xODAqTWF0aC5hY29zKDEvZS5kaXN0YW5jZSkvTWF0aC5QSTp0Ll9pc0NsaXBwZWQ/dy5sb25heGlzU3BhbltyXS8yOm51bGwsZj1bImNlbnRlciIsInJvdGF0ZSIsInBhcmFsbGVscyIsImNsaXBFeHRlbnQiXSxoPWZ1bmN0aW9uKHQpe3JldHVybiB0P2w6W119LHA9MDtwPGYubGVuZ3RoO3ArKyl7dmFyIGQ9ZltwXTsiZnVuY3Rpb24iIT10eXBlb2YgbFtkXSYmKGxbZF09aCl9bC5pc0xvbkxhdE92ZXJFZGdlcz1mdW5jdGlvbih0KXtpZihudWxsPT09bCh0KSlyZXR1cm4hMDtpZih1KXt2YXIgZT1sLnJvdGF0ZSgpO3JldHVybiBvKHQsWy1lWzBdLC1lWzFdXSk+dSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sbC5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGEoKS5wcm9qZWN0aW9uKGwpfSxsLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gbC5nZXRQYXRoKCkuYm91bmRzKHQpfSxsLnByZWNpc2lvbih3LnByZWNpc2lvbiksdC5faXNTYXRlbGxpdGUmJmwudGlsdChlLnRpbHQpLmRpc3RhbmNlKGUuZGlzdGFuY2UpO3UmJmwuY2xpcEFuZ2xlKHUtdy5jbGlwUGFkKTtyZXR1cm4gbH0obikseT1bW2wubCtsLncqdS54WzBdLGwudCtsLmgqKDEtdS55WzFdKV0sW2wubCtsLncqdS54WzFdLGwudCtsLmgqKDEtdS55WzBdKV1dLHg9bi5jZW50ZXJ8fHt9LGI9Zi5yb3RhdGlvbnx8e30sXz1oLnJhbmdlfHxbXSxUPXAucmFuZ2V8fFtdO2lmKG4uZml0Ym91bmRzKXtkLl9sZW5ndGg9eVsxXVswXS15WzBdWzBdLG0uX2xlbmd0aD15WzFdWzFdLXlbMF1bMV0sZC5yYW5nZT1nKHIsZCksbS5yYW5nZT1nKHIsbSk7dmFyIGs9KGQucmFuZ2VbMF0rZC5yYW5nZVsxXSkvMixBPShtLnJhbmdlWzBdK20ucmFuZ2VbMV0pLzI7aWYobi5faXNTY29wZWQpeD17bG9uOmssbGF0OkF9O2Vsc2UgaWYobi5faXNDbGlwcGVkKXt4PXtsb246ayxsYXQ6QX0sYj17bG9uOmssbGF0OkEscm9sbDpiLnJvbGx9O3ZhciBNPWYudHlwZSxTPXcubG9uYXhpc1NwYW5bTV0vMnx8MTgwLEw9dy5sYXRheGlzU3BhbltNXS8yfHw5MDtfPVtrLVMsaytTXSxUPVtBLUwsQStMXX1lbHNlIHg9e2xvbjprLGxhdDpBfSxiPXtsb246ayxsYXQ6Yi5sYXQscm9sbDpiLnJvbGx9fXYuY2VudGVyKFt4Lmxvbi1iLmxvbix4LmxhdC1iLmxhdF0pLnJvdGF0ZShbLWIubG9uLC1iLmxhdCxiLnJvbGxdKS5wYXJhbGxlbHMoZi5wYXJhbGxlbHMpO3ZhciBDPUUoXyxUKTt2LmZpdEV4dGVudCh5LEMpO3ZhciBQPXRoaXMuYm91bmRzPXYuZ2V0Qm91bmRzKEMpLEk9dGhpcy5maXRTY2FsZT12LnNjYWxlKCksTz12LnRyYW5zbGF0ZSgpO2lmKG4uZml0Ym91bmRzKXt2YXIgej12LmdldEJvdW5kcyhFKGQucmFuZ2UsbS5yYW5nZSkpLEQ9TWF0aC5taW4oKFBbMV1bMF0tUFswXVswXSkvKHpbMV1bMF0telswXVswXSksKFBbMV1bMV0tUFswXVsxXSkvKHpbMV1bMV0telswXVsxXSkpO2lzRmluaXRlKEQpP3Yuc2NhbGUoRCpJKTpjLndhcm4oIlNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyIrdGhpcy5pZCsiZml0Ym91bmRzIGNvbXB1dGF0aW9ucy4iKX1lbHNlIHYuc2NhbGUoZi5zY2FsZSpJKTt2YXIgUj10aGlzLm1pZFB0PVsoUFswXVswXStQWzFdWzBdKS8yLChQWzBdWzFdK1BbMV1bMV0pLzJdO2lmKHYudHJhbnNsYXRlKFtPWzBdKyhSWzBdLU9bMF0pLE9bMV0rKFJbMV0tT1sxXSldKS5jbGlwRXh0ZW50KFApLG4uX2lzQWxiZXJzVXNhKXt2YXIgRj12KFt4Lmxvbix4LmxhdF0pLEI9di50cmFuc2xhdGUoKTt2LnRyYW5zbGF0ZShbQlswXS0oRlswXS1CWzBdKSxCWzFdLShGWzFdLUJbMV0pXSl9fSxTLnVwZGF0ZUJhc2VMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGk9ci50b3BvanNvbixhPXIubGF5ZXJzLG89ci5iYXNlUGF0aHM7ZnVuY3Rpb24gcyh0KXtyZXR1cm4ibG9uYXhpcyI9PT10fHwibGF0YXhpcyI9PT10fWZ1bmN0aW9uIGwodCl7cmV0dXJuIEJvb2xlYW4ody5saW5lTGF5ZXJzW3RdKX1mdW5jdGlvbiBjKHQpe3JldHVybiBCb29sZWFuKHcuZmlsbExheWVyc1t0XSl9dmFyIHU9KHRoaXMuaGFzQ2hvcm9wbGV0aD93LmxheWVyc0ZvckNob3JvcGxldGg6dy5sYXllcnMpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGwodCl8fGModCk/ZVsic2hvdyIrdF06IXModCl8fGVbdF0uc2hvd2dyaWR9KSkscD1yLmZyYW1ld29yay5zZWxlY3RBbGwoIi5sYXllciIpLmRhdGEodSxTdHJpbmcpO3AuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2RlbGV0ZSBhW3RdLGRlbGV0ZSBvW3RdLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpLHAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJsYXllciAiK3R9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9YVt0XT1uLnNlbGVjdCh0aGlzKTsiYmciPT09dD9yLmJnUmVjdD1lLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpOnModCk/b1t0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpOiJiYWNrcGxvdCI9PT10P2UuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2hvcm9wbGV0aGxheWVyIiwhMCk6ImZyb250cGxvdCI9PT10P2UuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk6bCh0KT9vW3RdPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGwiLCJub25lIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKTpjKHQpJiYob1t0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2UiLCJub25lIikpfSkpLHAub3JkZXIoKSxwLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPW9bcl0sYT13LmxheWVyTmFtZVRvQWRqZWN0aXZlW3JdOyJmcmFtZSI9PT1yP24uZGF0dW0ody5zcGhlcmVTVkcpOmwocil8fGMocik/bi5kYXR1bShBKGksaS5vYmplY3RzW3JdKSk6cyhyKSYmbi5kYXR1bShmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89ZVt0XSxzPXcuc2NvcGVEZWZhdWx0c1tlLnNjb3BlXTsibG9uYXhpcyI9PT10PyhuPXMubG9uYXhpc1JhbmdlLGk9cy5sYXRheGlzUmFuZ2UsYT1mdW5jdGlvbih0LGUpe3JldHVyblt0LGVdfSk6ImxhdGF4aXMiPT09dCYmKG49cy5sYXRheGlzUmFuZ2UsaT1zLmxvbmF4aXNSYW5nZSxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UsdF19KTt2YXIgbD17dHlwZToibGluZWFyIixyYW5nZTpbblswXSxuWzFdLTFlLTZdLHRpY2swOm8udGljazAsZHRpY2s6by5kdGlja307bS5zZXRDb252ZXJ0KGwscik7dmFyIGM9bS5jYWxjVGlja3MobCk7ZS5pc1Njb3BlZHx8ImxvbmF4aXMiIT09dHx8Yy5wb3AoKTtmb3IodmFyIHU9Yy5sZW5ndGgsZj1uZXcgQXJyYXkodSksaD0wO2g8dTtoKyspZm9yKHZhciBwPWNbaF0ueCxkPWZbaF09W10sZz1pWzBdO2c8aVsxXSsyLjU7Zys9Mi41KWQucHVzaChhKHAsZykpO3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmZ9fShyLGUsdCkpLmNhbGwoZi5zdHJva2UsZVtyXS5ncmlkY29sb3IpLmNhbGwoaC5kYXNoTGluZSwiIixlW3JdLmdyaWR3aWR0aCksbChyKT9uLmNhbGwoZi5zdHJva2UsZVthKyJjb2xvciJdKS5jYWxsKGguZGFzaExpbmUsIiIsZVthKyJ3aWR0aCJdKTpjKHIpJiZuLmNhbGwoZi5maWxsLGVbYSsiY29sb3IiXSl9KSl9LFMudXBkYXRlRGltcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuYm91bmRzLG49KGUuZnJhbWV3aWR0aHx8MCkvMixpPXJbMF1bMF0tbixhPXJbMF1bMV0tbixvPXJbMV1bMF0taStuLHM9clsxXVsxXS1hK247aC5zZXRSZWN0KHRoaXMuY2xpcFJlY3QsaSxhLG8scyksdGhpcy5iZ1JlY3QuY2FsbChoLnNldFJlY3QsaSxhLG8scykuY2FsbChmLmZpbGwsZS5iZ2NvbG9yKSx0aGlzLnhheGlzLl9vZmZzZXQ9aSx0aGlzLnhheGlzLl9sZW5ndGg9byx0aGlzLnlheGlzLl9vZmZzZXQ9YSx0aGlzLnlheGlzLl9sZW5ndGg9c30sUy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLmdyYXBoRGl2LGE9ci5iZ1JlY3Qsbz10LmRyYWdtb2RlLHM9dC5jbGlja21vZGU7aWYoIXIuaXNTdGF0aWMpe3ZhciB1OyJzZWxlY3QiPT09bz91PWZ1bmN0aW9uKHQsZSl7KHQucmFuZ2U9e30pW3IuaWRdPVtoKFtlLnhtaW4sZS55bWluXSksaChbZS54bWF4LGUueW1heF0pXX06Imxhc3NvIj09PW8mJih1PWZ1bmN0aW9uKHQsZSxuKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09bi5maWx0ZXJlZC5tYXAoaCl9KTt2YXIgZj17ZWxlbWVudDpyLmJnUmVjdC5ub2RlKCksZ2Q6aSxwbG90aW5mbzp7aWQ6ci5pZCx4YXhpczpyLnhheGlzLHlheGlzOnIueWF4aXMsZmlsbFJhbmdlSXRlbXM6dX0seGF4ZXM6W3IueGF4aXNdLHlheGVzOltyLnlheGlzXSxzdWJwbG90OnIuaWQsY2xpY2tGbjpmdW5jdGlvbih0KXsyPT09dCYmeChpKX19OyJwYW4iPT09bz8oYS5ub2RlKCkub25tb3VzZWRvd249bnVsbCxhLmNhbGwoXyhyLGUpKSxhLm9uKCJkYmxjbGljay56b29tIiwoZnVuY3Rpb24oKXt2YXIgdD1yLnZpZXdJbml0aWFsLGU9e307Zm9yKHZhciBuIGluIHQpZVtyLmlkKyIuIituXT10W25dO2wuY2FsbCgiX2d1aVJlbGF5b3V0IixpLGUpLGkuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKX0pKSxpLl9jb250ZXh0Ll9zY3JvbGxab29tLmdlb3x8YS5vbigid2hlZWwuem9vbSIsbnVsbCkpOiJzZWxlY3QiIT09byYmImxhc3NvIiE9PW98fChhLm9uKCIuem9vbSIsbnVsbCksZi5wcmVwRm49ZnVuY3Rpb24odCxlLHIpe3kodCxlLHIsZixvKX0sdi5pbml0KGYpKSxhLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbigpe3ZhciB0PXIucHJvamVjdGlvbi5pbnZlcnQoYy5nZXRQb3NpdGlvbkZyb21EM0V2ZW50KCkpO2lmKCF0KXJldHVybiB2LnVuaG92ZXIoaSxuLmV2ZW50KTtyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzBdfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzFdfSxwLmhvdmVyKGksbi5ldmVudCxyLmlkKX0pKSxhLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7aS5fZHJhZ2dpbmd8fHYudW5ob3ZlcihpLG4uZXZlbnQpfSkpLGEub24oImNsaWNrIiwoZnVuY3Rpb24oKXsic2VsZWN0IiE9PW8mJiJsYXNzbyIhPT1vJiYocy5pbmRleE9mKCJzZWxlY3QiKT4tMSYmYihuLmV2ZW50LGksW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLGYpLHMuaW5kZXhPZigiZXZlbnQiKT4tMSYmcC5jbGljayhpLG4uZXZlbnQpKX0pKX1mdW5jdGlvbiBoKHQpe3JldHVybiByLnByb2plY3Rpb24uaW52ZXJ0KFt0WzBdK3IueGF4aXMuX29mZnNldCx0WzFdK3IueWF4aXMuX29mZnNldF0pfX0sUy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZ3JhcGhEaXYscj1lLl9mdWxsTGF5b3V0LGk9ImNsaXAiK3IuX3VpZCt0LmlkO3QuY2xpcERlZj1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGkpLHQuY2xpcFJlY3Q9dC5jbGlwRGVmLmFwcGVuZCgicmVjdCIpLHQuZnJhbWV3b3JrPW4uc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdlbyAiK3QuaWQpLmNhbGwoaC5zZXRDbGlwVXJsLGksZSksdC5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQucHJvamVjdGlvbihlKTtyZXR1cm4gcj9bclswXS10LnhheGlzLl9vZmZzZXQsclsxXS10LnlheGlzLl9vZmZzZXRdOltudWxsLG51bGxdfSx0LnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzBdfX0sdC55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVsxXX19LHQubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0sbS5zZXRDb252ZXJ0KHQubW9ja0F4aXMscil9LFMuc2F2ZVZpZXdJbml0aWFsPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5jZW50ZXJ8fHt9LG49dC5wcm9qZWN0aW9uLGk9bi5yb3RhdGlvbnx8e307dGhpcy52aWV3SW5pdGlhbD17Zml0Ym91bmRzOnQuZml0Ym91bmRzLCJwcm9qZWN0aW9uLnNjYWxlIjpuLnNjYWxlfSxlPXQuX2lzU2NvcGVkP3siY2VudGVyLmxvbiI6ci5sb24sImNlbnRlci5sYXQiOnIubGF0fTp0Ll9pc0NsaXBwZWQ/eyJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6aS5sb24sInByb2plY3Rpb24ucm90YXRpb24ubGF0IjppLmxhdH06eyJjZW50ZXIubG9uIjpyLmxvbiwiY2VudGVyLmxhdCI6ci5sYXQsInByb2plY3Rpb24ucm90YXRpb24ubG9uIjppLmxvbn0sYy5leHRlbmRGbGF0KHRoaXMudmlld0luaXRpYWwsZSl9LFMucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLnByb2plY3Rpb24scj1lLmdldFBhdGgoKTtmdW5jdGlvbiBuKHQpe3ZhciByPWUodC5sb25sYXQpO3JldHVybiByP3UoclswXSxyWzFdKTpudWxsfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuaXNMb25MYXRPdmVyRWRnZXModC5sb25sYXQpPyJub25lIjpudWxsfWZvcih0IGluIHRoaXMuYmFzZVBhdGhzKXRoaXMuYmFzZVBhdGhzW3RdLmF0dHIoImQiLHIpO2Zvcih0IGluIHRoaXMuZGF0YVBhdGhzKXRoaXMuZGF0YVBhdGhzW3RdLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gcih0Lmdlb2pzb24pfSkpO2Zvcih0IGluIHRoaXMuZGF0YVBvaW50cyl0aGlzLmRhdGFQb2ludHNbdF0uYXR0cigiZGlzcGxheSIsaSkuYXR0cigidHJhbnNmb3JtIixuKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IjozODUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTYsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NTMyLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NTMsIi4uL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjU3NSwiLi4vcGxvdHMiOjYxOSwiLi9jb25zdGFudHMiOjU4NywiLi96b29tIjo1OTIsIkBwbG90bHkvZDMiOjU4LCJkMy1nZW8iOjExNCwiZDMtZ2VvLXByb2plY3Rpb24iOjExMywidG9wb2pzb24tY2xpZW50IjozMTV9XSw1ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL2dlbyIpLG89ImdlbyIscz1pKG8pLGw9e307bC5nZW89e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpvLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOm8sbmFtZTpvLGlkUm9vdDpvLGlkUmVnZXg6cyxhdHRyUmVnZXg6cyxhdHRyaWJ1dGVzOmwsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzLmdlbyxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1uKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9YSh7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSx1cGRhdGVGeDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdlbyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc3VicGxvdC51cGRhdGVGeChlLGkpfX0sY2xlYW46ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdlb3x8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMuZnJhbWV3b3JrLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSl9fX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo1OTMsIi4vZ2VvIjo1ODgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU5MCwiLi9sYXlvdXRfZGVmYXVsdHMiOjU5MX1dLDU5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxsPXtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxkdGljazp7dmFsVHlwZToibnVtYmVyIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmxpZ2h0TGluZX0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19OyhlLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6ImdlbyJ9LHt9KSxmaXRib3VuZHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsImxvY2F0aW9ucyIsImdlb2pzb24iXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0scmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzKGEuc2NvcGVEZWZhdWx0cyksZGZsdDoid29ybGQifSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyhhLnByb2pOYW1lcyl9LHJvdGF0aW9uOntsb246e3ZhbFR5cGU6Im51bWJlciJ9LGxhdDp7dmFsVHlwZToibnVtYmVyIn0scm9sbDp7dmFsVHlwZToibnVtYmVyIn19LHRpbHQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxkaXN0YW5jZTp7dmFsVHlwZToibnVtYmVyIixtaW46MS4wMDEsZGZsdDoyfSxwYXJhbGxlbHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciJ9LGxhdDp7dmFsVHlwZToibnVtYmVyIn19LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3djb2FzdGxpbmVzOnt2YWxUeXBlOiJib29sZWFuIn0sY29hc3RsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGNvYXN0bGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2xhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxhbmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5sYW5kQ29sb3J9LHNob3dvY2Vhbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb2NlYW5jb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93bGFrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxha2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93cml2ZXJzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxyaXZlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLndhdGVyQ29sb3J9LHJpdmVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93Y291bnRyaWVzOnt2YWxUeXBlOiJib29sZWFuIn0sY291bnRyeWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb3VudHJ5d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93c3VidW5pdHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzdWJ1bml0Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHN1YnVuaXR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dmcmFtZTp7dmFsVHlwZToiYm9vbGVhbiJ9LGZyYW1lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGZyYW1ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LGxvbmF4aXM6bCxsYXRheGlzOmx9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2NSwiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiOjUyNiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTM2LCIuLi9kb21haW4iOjU4NCwiLi9jb25zdGFudHMiOjU4N31dLDU5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9by5heGVzTmFtZXM7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgcz1hKGkuZnVsbERhdGEsImdlbyIsaS5pZCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKSxjPXIoInJlc29sdXRpb24iKSx1PXIoInNjb3BlIiksZj1vLnNjb3BlRGVmYXVsdHNbdV0saD1yKCJwcm9qZWN0aW9uLnR5cGUiLGYucHJvalR5cGUpLHA9ZS5faXNBbGJlcnNVc2E9ImFsYmVycyB1c2EiPT09aDtwJiYodT1lLnNjb3BlPSJ1c2EiKTt2YXIgZD1lLl9pc1Njb3BlZD0id29ybGQiIT09dSxtPWUuX2lzU2F0ZWxsaXRlPSJzYXRlbGxpdGUiPT09aCxnPWUuX2lzQ29uaWM9LTEhPT1oLmluZGV4T2YoImNvbmljIil8fCJhbGJlcnMiPT09aCx2PWUuX2lzQ2xpcHBlZD0hIW8ubG9uYXhpc1NwYW5baF07aWYoITE9PT10LnZpc2libGUpe3ZhciB5PW4uZXh0ZW5kRGVlcCh7fSxlLl90ZW1wbGF0ZSk7eS5zaG93Y29hc3RsaW5lcz0hMSx5LnNob3djb3VudHJpZXM9ITEseS5zaG93ZnJhbWU9ITEseS5zaG93bGFrZXM9ITEseS5zaG93bGFuZD0hMSx5LnNob3dvY2Vhbj0hMSx5LnNob3dyaXZlcnM9ITEseS5zaG93c3VidW5pdHM9ITEseS5sb25heGlzJiYoeS5sb25heGlzLnNob3dncmlkPSExKSx5LmxhdGF4aXMmJih5LmxhdGF4aXMuc2hvd2dyaWQ9ITEpLGUuX3RlbXBsYXRlPXl9Zm9yKHZhciB4PXIoInZpc2libGUiKSxiPTA7YjxsLmxlbmd0aDtiKyspe3ZhciBfLHc9bFtiXSxUPVszMCwxMF1bYl07aWYoZClfPWZbdysiUmFuZ2UiXTtlbHNle3ZhciBrPW9bdysiU3BhbiJdLEE9KGtbaF18fGtbIioiXSkvMixNPXIoInByb2plY3Rpb24ucm90YXRpb24uIit3LnN1YnN0cigwLDMpLGYucHJvalJvdGF0ZVtiXSk7Xz1bTS1BLE0rQV19dmFyIFM9cih3KyIucmFuZ2UiLF8pO3IodysiLnRpY2swIikscih3KyIuZHRpY2siLFQpLHIodysiLnNob3dncmlkIiwhIXgmJnZvaWQgMCkmJihyKHcrIi5ncmlkY29sb3IiKSxyKHcrIi5ncmlkd2lkdGgiKSksZVt3XS5fYXg9e3R5cGU6ImxpbmVhciIsX2lkOncuc2xpY2UoMCwzKSxfdHJhY2VJbmRpY2VzOnMsc2V0U2NhbGU6bi5pZGVudGl0eSxjMmw6bi5pZGVudGl0eSxyMmw6bi5pZGVudGl0eSxhdXRvcmFuZ2U6ITAscmFuZ2U6Uy5zbGljZSgpLF9tOjEsX2lucHV0Ont9fX12YXIgRT1lLmxvbmF4aXMucmFuZ2UsTD1lLmxhdGF4aXMucmFuZ2UsQz1FWzBdLFA9RVsxXTtDPjAmJlA8MCYmKFArPTM2MCk7dmFyIEksTyx6LEQ9KEMrUCkvMjtpZighcCl7dmFyIFI9ZD9mLnByb2pSb3RhdGU6W0QsMCwwXTtJPXIoInByb2plY3Rpb24ucm90YXRpb24ubG9uIixSWzBdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsUlsxXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5yb2xsIixSWzJdKSxyKCJzaG93Y29hc3RsaW5lcyIsIWQmJngpJiYocigiY29hc3RsaW5lY29sb3IiKSxyKCJjb2FzdGxpbmV3aWR0aCIpKSxyKCJzaG93b2NlYW4iLCEheCYmdm9pZCAwKSYmcigib2NlYW5jb2xvciIpfShwPyhPPS05Ni42LHo9MzguNyk6KE89ZD9EOkksej0oTFswXStMWzFdKS8yKSxyKCJjZW50ZXIubG9uIixPKSxyKCJjZW50ZXIubGF0Iix6KSxtJiYocigicHJvamVjdGlvbi50aWx0IikscigicHJvamVjdGlvbi5kaXN0YW5jZSIpKSxnKSYmcigicHJvamVjdGlvbi5wYXJhbGxlbHMiLGYucHJvalBhcmFsbGVsc3x8WzAsNjBdKTtyKCJwcm9qZWN0aW9uLnNjYWxlIikscigic2hvd2xhbmQiLCEheCYmdm9pZCAwKSYmcigibGFuZGNvbG9yIikscigic2hvd2xha2VzIiwhIXgmJnZvaWQgMCkmJnIoImxha2Vjb2xvciIpLHIoInNob3dyaXZlcnMiLCEheCYmdm9pZCAwKSYmKHIoInJpdmVyY29sb3IiKSxyKCJyaXZlcndpZHRoIikpLHIoInNob3djb3VudHJpZXMiLGQmJiJ1c2EiIT09dSYmeCkmJihyKCJjb3VudHJ5Y29sb3IiKSxyKCJjb3VudHJ5d2lkdGgiKSksKCJ1c2EiPT09dXx8Im5vcnRoIGFtZXJpY2EiPT09dSYmNTA9PT1jKSYmKHIoInNob3dzdWJ1bml0cyIseCkscigic3VidW5pdGNvbG9yIikscigic3VidW5pdHdpZHRoIikpLGR8fHIoInNob3dmcmFtZSIseCkmJihyKCJmcmFtZWNvbG9yIikscigiZnJhbWV3aWR0aCIpKSxyKCJiZ2NvbG9yIikscigiZml0Ym91bmRzIikmJihkZWxldGUgZS5wcm9qZWN0aW9uLnNjYWxlLGQ/KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCk6dj8oZGVsZXRlIGUuY2VudGVyLmxvbixkZWxldGUgZS5jZW50ZXIubGF0LGRlbGV0ZSBlLnByb2plY3Rpb24ucm90YXRpb24ubG9uLGRlbGV0ZSBlLnByb2plY3Rpb24ucm90YXRpb24ubGF0LGRlbGV0ZSBlLmxvbmF4aXMucmFuZ2UsZGVsZXRlIGUubGF0YXhpcy5yYW5nZSk6KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCxkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aSh0LGUscix7dHlwZToiZ2VvIixhdHRyaWJ1dGVzOnMsaGFuZGxlRGVmYXVsdHM6YyxmdWxsRGF0YTpyLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL2dldF9kYXRhIjo1OTMsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjYzMiwiLi9jb25zdGFudHMiOjU4NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NTkwfV0sNTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOiJwb2ludGVyIn0sYz17Y3Vyc29yOiJhdXRvIn07ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj10LmlkLG89dC5ncmFwaERpdixzPW8ubGF5b3V0LGw9c1tuXSxjPW8uX2Z1bGxMYXlvdXQsdT1jW25dLGY9e30saD17fTtmdW5jdGlvbiBwKHQsZSl7ZltuKyIuIit0XT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixzLGMuX3ByZUdVSSxmKTt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGhbbisiLiIrdF09ZSl9cihwKSxwKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSkscCgiZml0Ym91bmRzIiwhMSksby5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGgpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKCJjZW50ZXIubG9uIixuWzBdKSxyKCJjZW50ZXIubGF0IixuWzFdKX1yZXR1cm4gci5vbigiem9vbXN0YXJ0IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKX0pKS5vbigiem9vbSIsKGZ1bmN0aW9uKCl7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKS50cmFuc2xhdGUobi5ldmVudC50cmFuc2xhdGUpLHQucmVuZGVyKCk7dmFyIHI9ZS5pbnZlcnQodC5taWRQdCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8uY2VudGVyLmxvbiI6clswXSwiZ2VvLmNlbnRlci5sYXQiOnJbMV19KX0pKS5vbigiem9vbWVuZCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZih0LGUsaSl9KSkscn1mdW5jdGlvbiBwKHQsZSl7dmFyIHIsaSxhLG8scyxoLHAsZCxtLGc9dSgwLGUpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIGUuaW52ZXJ0KHQpfWZ1bmN0aW9uIHkocil7dmFyIG49ZS5yb3RhdGUoKSxpPWUuaW52ZXJ0KHQubWlkUHQpO3IoInByb2plY3Rpb24ucm90YXRpb24ubG9uIiwtblswXSkscigiY2VudGVyLmxvbiIsaVswXSkscigiY2VudGVyLmxhdCIsaVsxXSl9cmV0dXJuIGcub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCkscj1uLm1vdXNlKHRoaXMpLGk9ZS5yb3RhdGUoKSxhPWUudHJhbnNsYXRlKCksbz1pLHM9dihyKX0pKS5vbigiem9vbSIsKGZ1bmN0aW9uKCl7aWYoaD1uLm1vdXNlKHRoaXMpLGZ1bmN0aW9uKHQpe3ZhciByPXYodCk7aWYoIXIpcmV0dXJuITA7dmFyIG49ZShyKTtyZXR1cm4gTWF0aC5hYnMoblswXS10WzBdKT4yfHxNYXRoLmFicyhuWzFdLXRbMV0pPjJ9KHIpKXJldHVybiBnLnNjYWxlKGUuc2NhbGUoKSksdm9pZCBnLnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKTtlLnNjYWxlKG4uZXZlbnQuc2NhbGUpLGUudHJhbnNsYXRlKFthWzBdLG4uZXZlbnQudHJhbnNsYXRlWzFdXSkscz92KGgpJiYoZD12KGgpLHA9W29bMF0rKGRbMF0tc1swXSksaVsxXSxpWzJdXSxlLnJvdGF0ZShwKSxvPXApOnM9dihyPWgpLG09ITAsdC5yZW5kZXIoKTt2YXIgbD1lLnJvdGF0ZSgpLGM9ZS5pbnZlcnQodC5taWRQdCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8uY2VudGVyLmxvbiI6Y1swXSwiZ2VvLmNlbnRlci5sYXQiOmNbMV0sImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6LWxbMF19KX0pKS5vbigiem9vbWVuZCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksbSYmZih0LGUseSl9KSksZ31mdW5jdGlvbiBkKHQsZSl7dmFyIHIsaT17cjplLnJvdGF0ZSgpLGs6ZS5zY2FsZSgpfSxhPXUoMCxlKSxvPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9W107Zm9yKDsrK2U8cjspaS5wdXNoKGFyZ3VtZW50c1tlXSk7dmFyIGE9bi5kaXNwYXRjaC5hcHBseShudWxsLGkpO3JldHVybiBhLm9mPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvO3RyeXtvPWkuc291cmNlRXZlbnQ9bi5ldmVudCxpLnRhcmdldD10LG4uZXZlbnQ9aSxhW2kudHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e24uZXZlbnQ9b319fSxhfShhLCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpLHM9MCxoPWEub247ZnVuY3Rpb24gcCh0KXtzKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBkKHQpe3Qoe3R5cGU6Inpvb20ifSl9ZnVuY3Rpb24gYih0KXstLXN8fHQoe3R5cGU6Inpvb21lbmQifSl9ZnVuY3Rpb24gXyh0KXt2YXIgcj1lLnJvdGF0ZSgpO3QoInByb2plY3Rpb24ucm90YXRpb24ubG9uIiwtclswXSksdCgicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLC1yWzFdKX1yZXR1cm4gYS5vbigiem9vbXN0YXJ0IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKTt2YXIgdD1uLm1vdXNlKHRoaXMpLHM9ZS5yb3RhdGUoKSxjPXMsdT1lLnRyYW5zbGF0ZSgpLGY9ZyhzKTtyPW0oZSx0KSxoLmNhbGwoYSwiem9vbSIsKGZ1bmN0aW9uKCl7dmFyIGE9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihtKGUsYSkpe2Uucm90YXRlKHMpLnRyYW5zbGF0ZSh1KTt2YXIgbD1tKGUsYSksaD15KHIsbCkscD1UKHYoZixoKSksZz1pLnI9eChwLHIsYyk7aXNGaW5pdGUoZ1swXSkmJmlzRmluaXRlKGdbMV0pJiZpc0Zpbml0ZShnWzJdKXx8KGc9YyksZS5yb3RhdGUoZyksYz1nfX1lbHNlIHI9bShlLHQ9YSk7ZChvLm9mKHRoaXMsYXJndW1lbnRzKSl9KSkscChvLm9mKHRoaXMsYXJndW1lbnRzKSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGguY2FsbChhLCJ6b29tIixudWxsKSxiKG8ub2YodGhpcyxhcmd1bWVudHMpKSxmKHQsZSxfKX0pKS5vbigiem9vbS5yZWRyYXciLChmdW5jdGlvbigpe3QucmVuZGVyKCk7dmFyIHI9ZS5yb3RhdGUoKTt0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIseyJnZW8ucHJvamVjdGlvbi5zY2FsZSI6ZS5zY2FsZSgpL3QuZml0U2NhbGUsImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6LXJbMF0sImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCI6LXJbMV19KX0pKSxuLnJlYmluZChhLG8sIm9uIil9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQuaW52ZXJ0KGUpO3JldHVybiByJiZpc0Zpbml0ZShyWzBdKSYmaXNGaW5pdGUoclsxXSkmJmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qbyxyPXRbMV0qbyxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfShyKX1mdW5jdGlvbiBnKHQpe3ZhciBlPS41KnRbMF0qbyxyPS41KnRbMV0qbyxuPS41KnRbMl0qbyxpPU1hdGguc2luKGUpLGE9TWF0aC5jb3MoZSkscz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKTtyZXR1cm5bYSpsKnUraSpzKmMsaSpsKnUtYSpzKmMsYSpzKnUraSpsKmMsYSpsKmMtaSpzKnVdfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdLG89ZVswXSxzPWVbMV0sbD1lWzJdLGM9ZVszXTtyZXR1cm5bcipvLW4qcy1pKmwtYSpjLHIqcytuKm8raSpjLWEqbCxyKmwtbipjK2kqbythKnMscipjK24qbC1pKnMrYSpvXX1mdW5jdGlvbiB5KHQsZSl7aWYodCYmZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KGsocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxrKHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX19ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dyhlLDIsdFswXSk7bj13KG4sMSx0WzFdKSxuPXcobiwwLHRbMl0tclsyXSk7dmFyIGksYSxvPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PW5bMF0sZj1uWzFdLGg9blsyXSxwPU1hdGguYXRhbjIobCxvKSpzLGQ9TWF0aC5zcXJ0KG8qbytsKmwpO01hdGguYWJzKGYpPmQ/KGE9KGY+MD85MDotOTApLXAsaT0wKTooYT1NYXRoLmFzaW4oZi9kKSpzLXAsaT1NYXRoLnNxcnQoZCpkLWYqZikpO3ZhciBtPTE4MC1hLTIqcCxnPShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihjLGkpKSpzLHY9KE1hdGguYXRhbjIoaCx1KS1NYXRoLmF0YW4yKGMsLWkpKSpzO3JldHVybiBiKHJbMF0sclsxXSxhLGcpPD1iKHJbMF0sclsxXSxtLHYpP1thLGcsclsyXV06W20sdixyWzJdXX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPV8oci10KSxhPV8obi1lKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaSthKmEpfWZ1bmN0aW9uIF8odCl7cmV0dXJuKHQlMzYwKzU0MCklMzYwLTE4MH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1yKm8saT10LnNsaWNlKCksYT0wPT09ZT8xOjAscz0yPT09ZT8xOjIsbD1NYXRoLmNvcyhuKSxjPU1hdGguc2luKG4pO3JldHVybiBpW2FdPXRbYV0qbC10W3NdKmMsaVtzXT10W3NdKmwrdFthXSpjLGl9ZnVuY3Rpb24gVCh0KXtyZXR1cm5bTWF0aC5hdGFuMigyKih0WzBdKnRbMV0rdFsyXSp0WzNdKSwxLTIqKHRbMV0qdFsxXSt0WzJdKnRbMl0pKSpzLE1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLDIqKHRbMF0qdFsyXS10WzNdKnRbMV0pKSkpKnMsTWF0aC5hdGFuMigyKih0WzBdKnRbM10rdFsxXSp0WzJdKSwxLTIqKHRbMl0qdFsyXSt0WzNdKnRbM10pKSpzXX1mdW5jdGlvbiBrKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9qZWN0aW9uO3JldHVybihlLl9pc1Njb3BlZD9oOmUuX2lzQ2xpcHBlZD9kOnApKHQscil9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCJAcGxvdGx5L2QzIjo1OH1dLDU5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO3IuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoIWkpcmV0dXJuW107Zm9yKHZhciBhPWkuYXR0cixvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsWzBdLnRyYWNlW2FdPT09ciYmby5wdXNoKGwpfXJldHVybiBvfSxyLmdldE1vZHVsZUNhbGNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1bXSxhPVtdO2lmKCEocj0ic3RyaW5nIj09dHlwZW9mIGU/bi5nZXRNb2R1bGUoZSkucGxvdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmUucGxvdCkpcmV0dXJuW2ksdF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiYwIT09bC5fbGVuZ3RoJiYobC5fbW9kdWxlLnBsb3Q9PT1yP2kucHVzaChzKTphLnB1c2gocykpfXJldHVybltpLGFdfSxyLmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighbi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO3ZhciBhLG8scyxsPW4uc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGM9W107aWYoImdsMmQiPT09ZSl7dmFyIHU9ci5tYXRjaChpKTtvPSJ4Iit1WzFdLHM9InkiK3VbMl19Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspYT10W2ZdLCJnbDJkIj09PWUmJm4udHJhY2VJcyhhLCJnbDJkIik/YVtsWzBdXT09PW8mJmFbbFsxXV09PT1zJiZjLnB1c2goYSk6YVtsXT09PXImJmMucHVzaChhKTtyZXR1cm4gY319LHsiLi4vcmVnaXN0cnkiOjYzOCwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo1NjF9XSw1OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtY2hhbmdlIiksaT10KCJtb3VzZS13aGVlbCIpLGE9dCgibW91c2UtZXZlbnQtb2Zmc2V0Iiksbz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikscz10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5lbGVtZW50PXQsdGhpcy5wbG90PWUsdGhpcy5tb3VzZUxpc3RlbmVyPW51bGwsdGhpcy53aGVlbExpc3RlbmVyPW51bGwsdGhpcy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdGhpcy5sYXN0UG9zPVswLDBdLHRoaXMuYm94RW5hYmxlZD0hMSx0aGlzLmJveEluaXRlZD0hMSx0aGlzLmJveFN0YXJ0PVswLDBdLHRoaXMuYm94RW5kPVswLDBdLHRoaXMuZHJhZ1N0YXJ0PVswLDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1vdXNlQ29udGFpbmVyLHI9dC5nbHBsb3QsYz1uZXcgbChlLHIpO2Z1bmN0aW9uIHUoKXt0LnhheGlzLmF1dG9yYW5nZT0hMSx0LnlheGlzLmF1dG9yYW5nZT0hMX1mdW5jdGlvbiBmKGUsbixpKXt2YXIgYSxzLGw9dC5jYWxjRGF0YUJveCgpLGY9ci52aWV3Qm94LGg9Yy5sYXN0UG9zWzBdLHA9Yy5sYXN0UG9zWzFdLGQ9by5NSU5EUkFHKnIucGl4ZWxSYXRpbyxtPW8uTUlOWk9PTSpyLnBpeGVsUmF0aW87ZnVuY3Rpb24gZyhlLHIsbil7dmFyIGk9TWF0aC5taW4ocixuKSxhPU1hdGgubWF4KHIsbik7aSE9PWE/KGxbZV09aSxsW2UrMl09YSxjLmRhdGFCb3g9bCx0LnNldFJhbmdlcyhsKSk6KHQuc2VsZWN0Qm94LnNlbGVjdEJveD1bMCwwLDEsMV0sdC5nbHBsb3Quc2V0RGlydHkoKSl9c3dpdGNoKG4qPXIucGl4ZWxSYXRpbyxpKj1yLnBpeGVsUmF0aW8saT1mWzNdLWZbMV0taSx0LmZ1bGxMYXlvdXQuZHJhZ21vZGUpe2Nhc2Uiem9vbSI6aWYoZSl7dmFyIHY9bi8oZlsyXS1mWzBdKSoobFsyXS1sWzBdKStsWzBdLHk9aS8oZlszXS1mWzFdKSoobFszXS1sWzFdKStsWzFdO2MuYm94SW5pdGVkfHwoYy5ib3hTdGFydFswXT12LGMuYm94U3RhcnRbMV09eSxjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLGMuYm94RW5kWzBdPXYsYy5ib3hFbmRbMV09eSxjLmJveEluaXRlZD0hMCxjLmJveEVuYWJsZWR8fGMuYm94U3RhcnRbMF09PT1jLmJveEVuZFswXSYmYy5ib3hTdGFydFsxXT09PWMuYm94RW5kWzFdfHwoYy5ib3hFbmFibGVkPSEwKTt2YXIgeD1NYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxtLGI9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8bTtpZighZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMscj10LnhheGlzLl9pZCxuPXQueWF4aXMuX2lkLGk9MDtpPGUubGVuZ3RoO2krKylpZigtMSE9PWVbaV1bcl0pe2lmKC0xIT09ZVtpXVtuXSlyZXR1cm4hMDticmVha31yZXR1cm4hMX0oKXx8eCYmYil4JiYoYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSksYiYmKGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0pO2Vsc2V7YT1jLmJveEVuZFswXS1jLmJveFN0YXJ0WzBdLHM9Yy5ib3hFbmRbMV0tYy5ib3hTdGFydFsxXTt2YXIgXz0obFszXS1sWzFdKS8obFsyXS1sWzBdKTtNYXRoLmFicyhhKl8pPk1hdGguYWJzKHMpPyhjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdK01hdGguYWJzKGEpKl8qKHM+PTA/MTotMSksYy5ib3hFbmRbMV08bFsxXT8oYy5ib3hFbmRbMV09bFsxXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzFdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKTpjLmJveEVuZFsxXT5sWzNdJiYoYy5ib3hFbmRbMV09bFszXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzNdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKSk6KGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rTWF0aC5hYnMocykvXyooYT49MD8xOi0xKSxjLmJveEVuZFswXTxsWzBdPyhjLmJveEVuZFswXT1sWzBdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMF0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpOmMuYm94RW5kWzBdPmxbMl0mJihjLmJveEVuZFswXT1sWzJdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMl0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpKX19ZWxzZSBjLmJveEVuYWJsZWQ/KGE9Yy5ib3hTdGFydFswXSE9PWMuYm94RW5kWzBdLHM9Yy5ib3hTdGFydFsxXSE9PWMuYm94RW5kWzFdLGF8fHM/KGEmJihnKDAsYy5ib3hTdGFydFswXSxjLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLHMmJihnKDEsYy5ib3hTdGFydFsxXSxjLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSk6Yy5ib3hJbml0ZWQmJihjLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZSJwYW4iOmMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSxlPyhjLnBhbm5pbmd8fChjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGQmJihuPWMuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxkJiYoaT1jLmRyYWdTdGFydFsxXSksYT0oaC1uKSoobFsyXS1sWzBdKS8oci52aWV3Qm94WzJdLXIudmlld0JveFswXSkscz0ocC1pKSoobFszXS1sWzFdKS8oci52aWV3Qm94WzNdLXIudmlld0JveFsxXSksbFswXSs9YSxsWzJdKz1hLGxbMV0rPXMsbFszXSs9cyx0LnNldFJhbmdlcyhsKSxjLnBhbm5pbmc9ITAsYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Yy5wYW5uaW5nJiYoYy5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1jLmxhc3RQb3NbMF09bixjLmxhc3RQb3NbMV09aX1yZXR1cm4gYy5tb3VzZUxpc3RlbmVyPW4oZSxmKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLChmdW5jdGlvbih0KXt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7ZigwLHJbMF0sclsxXSksZigxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWEodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtmKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9KSwhIXMmJntwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uKHQpe2YoMCxjLmxhc3RQb3NbMF0sYy5sYXN0UG9zWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9KSwhIXMmJntwYXNzaXZlOiExfSksYy53aGVlbExpc3RlbmVyPWkoZSwoZnVuY3Rpb24oZSxuKXtpZighdC5zY3JvbGxab29tKXJldHVybiExO3ZhciBpPXQuY2FsY0RhdGFCb3goKSxhPXIudmlld0JveCxvPWMubGFzdFBvc1swXSxzPWMubGFzdFBvc1sxXSxsPU1hdGguZXhwKDUqbi8oYVszXS1hWzFdKSksZj1vLyhhWzJdLWFbMF0pKihpWzJdLWlbMF0pK2lbMF0saD1zLyhhWzNdLWFbMV0pKihpWzNdLWlbMV0pK2lbMV07cmV0dXJuIGlbMF09KGlbMF0tZikqbCtmLGlbMl09KGlbMl0tZikqbCtmLGlbMV09KGlbMV0taCkqbCtoLGlbM109KGlbM10taCkqbCtoLHQuc2V0UmFuZ2VzKGkpLGMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCksdC5yZWxheW91dENhbGxiYWNrKCksITB9KSwhMCksY319LHsiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NTYxLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjIyOSwibW91c2UtY2hhbmdlIjoyNDEsIm1vdXNlLWV2ZW50LW9mZnNldCI6MjQyLCJtb3VzZS13aGVlbCI6MjQ0fV0sNTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gYSh0KXt0aGlzLnNjZW5lPXQsdGhpcy5nbD10LmdsLHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zY3JlZW5Cb3g9WzAsMCwxLDFdLHRoaXMudmlld0JveD1bMCwwLDEsMV0sdGhpcy5kYXRhQm94PVstMSwtMSwxLDFdLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITEsITEsITEsITFdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsxLDEsMSwxXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tzPVtbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxzPVsieCIsInkiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbFNpemU9WzEyLDEyXSx0aGlzLmxhYmVsRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGU9IiIsdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQ2VudGVyPVswLDAsMCwwXSx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMudGl0bGVGb250PSJzYW5zLXNlcmlmIix0aGlzLnRpdGxlU2l6ZT0xOCx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsLjVdLFswLDAsMCwuNV1dLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVsxLDFdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuc3RhdGljPXRoaXMuc2NlbmUuc3RhdGljUGxvdH12YXIgbz1hLnByb3RvdHlwZSxzPVsieGF4aXMiLCJ5YXhpcyJdO28ubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbyxsLGMsdSxmLGgscDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1pKHQucGxvdF9iZ2NvbG9yKSxoPTA7aDwyOysraCl7dmFyIGQ9KGU9c1toXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlLnRleHQ9PT10aGlzLnNjZW5lLmZ1bGxMYXlvdXQuX2RmbHRUaXRsZVtkXT8iIjpyLnRpdGxlLnRleHQscD0wO3A8PTI7cCs9Mil0aGlzLmxhYmVsRW5hYmxlW2grcF09ITEsdGhpcy5sYWJlbHNbaCtwXT1uLHRoaXMubGFiZWxDb2xvcltoK3BdPWkoci50aXRsZS5mb250LmNvbG9yKSx0aGlzLmxhYmVsRm9udFtoK3BdPXIudGl0bGUuZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbaCtwXT1yLnRpdGxlLmZvbnQuc2l6ZSx0aGlzLmxhYmVsUGFkW2grcF09dGhpcy5nZXRMYWJlbFBhZChlLHIpLHRoaXMudGlja0VuYWJsZVtoK3BdPSExLHRoaXMudGlja0NvbG9yW2grcF09aSgoci50aWNrZm9udHx8e30pLmNvbG9yKSx0aGlzLnRpY2tBbmdsZVtoK3BdPSJhdXRvIj09PXIudGlja2FuZ2xlPzA6TWF0aC5QSSotci50aWNrYW5nbGUvMTgwLHRoaXMudGlja1BhZFtoK3BdPXRoaXMuZ2V0VGlja1BhZChyKSx0aGlzLnRpY2tNYXJrTGVuZ3RoW2grcF09MCx0aGlzLnRpY2tNYXJrV2lkdGhbaCtwXT1yLnRpY2t3aWR0aHx8MCx0aGlzLnRpY2tNYXJrQ29sb3JbaCtwXT1pKHIudGlja2NvbG9yKSx0aGlzLmJvcmRlckxpbmVFbmFibGVbaCtwXT0hMSx0aGlzLmJvcmRlckxpbmVDb2xvcltoK3BdPWkoci5saW5lY29sb3IpLHRoaXMuYm9yZGVyTGluZVdpZHRoW2grcF09ci5saW5ld2lkdGh8fDA7Yz10aGlzLmhhc1NoYXJlZEF4aXMociksbz10aGlzLmhhc0F4aXNJbkRmbHRQb3MoZSxyKSYmIWMsbD10aGlzLmhhc0F4aXNJbkFsdHJQb3MoZSxyKSYmIWMsYT1yLm1pcnJvcnx8ITEsdT1jPy0xIT09U3RyaW5nKGEpLmluZGV4T2YoImFsbCIpOiEhYSxmPWM/ImFsbHRpY2tzIj09PWE6LTEhPT1TdHJpbmcoYSkuaW5kZXhPZigidGlja3MiKSxvP3RoaXMubGFiZWxFbmFibGVbaF09ITA6bCYmKHRoaXMubGFiZWxFbmFibGVbaCsyXT0hMCksbz90aGlzLnRpY2tFbmFibGVbaF09ci5zaG93dGlja2xhYmVsczpsJiYodGhpcy50aWNrRW5hYmxlW2grMl09ci5zaG93dGlja2xhYmVscyksKG98fHUpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2hdPXIuc2hvd2xpbmUpLChsfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtoKzJdPXIuc2hvd2xpbmUpLChvfHxmKSYmKHRoaXMudGlja01hcmtMZW5ndGhbaF09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksKGx8fGYpJiYodGhpcy50aWNrTWFya0xlbmd0aFtoKzJdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLHRoaXMuZ3JpZExpbmVFbmFibGVbaF09ci5zaG93Z3JpZCx0aGlzLmdyaWRMaW5lQ29sb3JbaF09aShyLmdyaWRjb2xvciksdGhpcy5ncmlkTGluZVdpZHRoW2hdPXIuZ3JpZHdpZHRoLHRoaXMuemVyb0xpbmVFbmFibGVbaF09ci56ZXJvbGluZSx0aGlzLnplcm9MaW5lQ29sb3JbaF09aShyLnplcm9saW5lY29sb3IpLHRoaXMuemVyb0xpbmVXaWR0aFtoXT1yLnplcm9saW5ld2lkdGh9fSxvLmhhc1NoYXJlZEF4aXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbExheW91dC5fc3VicGxvdHMuZ2wyZDtyZXR1cm4gMCE9PW4uZmluZFN1YnBsb3RzV2l0aEF4aXMocix0KS5pbmRleE9mKGUuaWQpfSxvLmhhc0F4aXNJbkRmbHRQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/ImJvdHRvbSI9PT1yOiJ5YXhpcyI9PT10PyJsZWZ0Ij09PXI6dm9pZCAwfSxvLmhhc0F4aXNJbkFsdHJQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1yOiJ5YXhpcyI9PT10PyJyaWdodCI9PT1yOnZvaWQgMH0sby5nZXRMYWJlbFBhZD1mdW5jdGlvbih0LGUpe3ZhciByPWUudGl0bGUuZm9udC5zaXplLG49ZS5zaG93dGlja2xhYmVscztyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PWUuc2lkZT9yKigxLjUrKG4/MTowKSktMTA6ciooMS41KyhuPy41OjApKS0xMDoieWF4aXMiPT09dD8icmlnaHQiPT09ZS5zaWRlPzEwK3IqKDEuNSsobj8xOi41KSk6MTArciooMS41KyhuPy41OjApKTp2b2lkIDB9LG8uZ2V0VGlja1BhZD1mdW5jdGlvbih0KXtyZXR1cm4ib3V0c2lkZSI9PT10LnRpY2tzPzEwK3QudGlja2xlbjoxNX0sby5nZXRUaWNrTWFya0xlbmd0aD1mdW5jdGlvbih0KXtpZighdC50aWNrcylyZXR1cm4gMDt2YXIgZT10LnRpY2tsZW47cmV0dXJuImluc2lkZSI9PT10LnRpY2tzPy1lOmV9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyOCwiLi4vY2FydGVzaWFuL2F4ZXMiOjU1NH1dLDU5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuL3NjZW5lMmQiKSxhPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9dCgiLi4vY2FydGVzaWFuIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO3IubmFtZT0iZ2wyZCIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcygiY2FydGVzaWFuIil8fGwuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxyLmxheW91dEF0dHJPdmVycmlkZXM9bihsLmxheW91dEF0dHJpYnV0ZXMsInBsb3QiLCJmcm9tLXJvb3QiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsImdsMmQiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSkscy5fc2NlbmUyZD1jKSxjLnBsb3QobCx0LmNhbGNkYXRhLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wyZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bi5fcGxvdHNbb107aWYocy5fc2NlbmUyZCl7dmFyIGM9dSh0LCJnbDJkIixvKTswPT09Yy5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfX1sLmNsZWFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5kcmF3RnJhbWV3b3JrKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWUuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLGE9aS50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOm8uc3ZnLCJ4bGluazpocmVmIjphLHg6MCx5OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxpLmRlc3Ryb3koKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQudXBkYXRlRngoZS5kcmFnbW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo0MDcsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vY2FydGVzaWFuIjo1NjgsIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIjo1NTIsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjU2MSwiLi4vZ2V0X2RhdGEiOjU5MywiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYxMCwiLi9zY2VuZTJkIjo1OTd9XSw1OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGw9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZ2xfcGxvdDJkLGM9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZ2xfc3Bpa2VzMmQsdT10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9zZWxlY3RfYm94LGY9dCgid2ViZ2wtY29udGV4dCIpLGg9dCgiLi9jb252ZXJ0IikscD10KCIuL2NhbWVyYSIpLGQ9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIiksbT10KCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxnPW0uZW5mb3JjZSx2PW0uY2xlYW4seT10KCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2UseD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxiPXguZHJhd01vZGUsXz14LnNlbGVjdE1vZGUsdz1bInhheGlzIiwieWF4aXMiXSxUPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ZnVuY3Rpb24gayh0LGUpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLnBpeGVsUmF0aW89dC5wbG90R2xQaXhlbFJhdGlvfHx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmlkPXQuaWQsdGhpcy5zdGF0aWNQbG90PSEhdC5zdGF0aWNQbG90LHRoaXMuc2Nyb2xsWm9vbT10aGlzLmdyYXBoRGl2Ll9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbix0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy51cGRhdGVSZWZzKGUpLHRoaXMubWFrZUZyYW1ld29yaygpLHRoaXMuc3RvcHBlZHx8KHRoaXMuZ2xwbG90T3B0aW9ucz1oKHRoaXMpLHRoaXMuZ2xwbG90T3B0aW9ucy5tZXJnZShlKSx0aGlzLmdscGxvdD1sKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5jYW1lcmE9cCh0aGlzKSx0aGlzLnRyYWNlcz17fSx0aGlzLnNwaWtlcz1jKHRoaXMuZ2xwbG90KSx0aGlzLnNlbGVjdEJveD11KHRoaXMuZ2xwbG90LHtpbm5lckZpbGw6ITEsb3V0ZXJGaWxsOiEwfSksdGhpcy5sYXN0QnV0dG9uU3RhdGU9MCx0aGlzLnBpY2tSZXN1bHQ9bnVsbCx0aGlzLmlzTW91c2VPdmVyPSEwLHRoaXMuc3RvcHBlZD0hMSx0aGlzLnJlZHJhdz10aGlzLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlZHJhdygpKX1lLmV4cG9ydHM9azt2YXIgQT1rLnByb3RvdHlwZTtBLm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRpY1Bsb3Qpe2lmKCEoaXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaT1mKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3RoaXMuY2FudmFzPW4sdGhpcy5nbD1pfWVsc2V7dmFyIHQ9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmdsLWNhbnZhcy1mb2N1cyIpLGU9Zih7Y2FudmFzOnQscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMH0pO2lmKCFlKXJldHVybiBkKHRoaXMpLHZvaWQodGhpcy5zdG9wcGVkPSEwKTt0aGlzLmNhbnZhcz10LHRoaXMuZ2w9ZX12YXIgcj10aGlzLmNhbnZhcztyLnN0eWxlLndpZHRoPSIxMDAlIixyLnN0eWxlLmhlaWdodD0iMTAwJSIsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIix0aGlzLnVwZGF0ZVNpemUocik7dmFyIGE9dGhpcy5zdmdDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2Euc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD1hLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLmhlaWdodD0iMTAwJSIsYS5zdHlsZVsiei1pbmRleCJdPTIwLGEuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiO3ZhciBvPXRoaXMubW91c2VDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLG8uc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iLHRoaXMucGlja0NhbnZhcz10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuZ2wtY2FudmFzLXBpY2siKTt2YXIgcz10aGlzLmNvbnRhaW5lcjtzLmFwcGVuZENoaWxkKGEpLHMuYXBwZW5kQ2hpbGQobyk7dmFyIGw9dGhpcztvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSExLGwudW5ob3ZlcigpfSkpLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSEwfSkpfSxBLnRvSW1hZ2U9ZnVuY3Rpb24odCl7dHx8KHQ9InBuZyIpLHRoaXMuc3RvcHBlZD0hMCx0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmNsZWFyQ29sb3IoMSwxLDEsMCksZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVR8ZS5ERVBUSF9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5zZXREaXJ0eSgpLHRoaXMuZ2xwbG90LmRyYXcoKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpO2Zvcih2YXIgbz0wLHM9aS0xO288czsrK28sLS1zKWZvcih2YXIgbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7Yzw0OysrYyl7dmFyIHU9YVs0KihyKm8rbCkrY107YVs0KihyKm8rbCkrY109YVs0KihyKnMrbCkrY10sYVs0KihyKnMrbCkrY109dX12YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtmLndpZHRoPXIsZi5oZWlnaHQ9aTt2YXIgaCxwPWYuZ2V0Q29udGV4dCgiMmQiKSxkPXAuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7c3dpdGNoKGQuZGF0YS5zZXQoYSkscC5wdXRJbWFnZURhdGEoZCwwLDApLHQpe2Nhc2UianBlZyI6aD1mLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2Uid2VicCI6aD1mLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2RlZmF1bHQ6aD1mLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9cmV0dXJuIHRoaXMuc3RhdGljUGxvdCYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksaH0sQS51cGRhdGVTaXplPWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuY2FudmFzKTt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLmZ1bGxMYXlvdXQsbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0wfE1hdGguY2VpbChlKm4pLG89MHxNYXRoLmNlaWwoZSppKTtyZXR1cm4gdC53aWR0aD09PWEmJnQuaGVpZ2h0PT09b3x8KHQud2lkdGg9YSx0LmhlaWdodD1vKSx0fSxBLmNvbXB1dGVUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLnhheGlzLnNldFNjYWxlKCksdGhpcy55YXhpcy5zZXRTY2FsZSgpO2Zvcih2YXIgdD1bby5jYWxjVGlja3ModGhpcy54YXhpcyksby5jYWxjVGlja3ModGhpcy55YXhpcyldLGU9MDtlPDI7KytlKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7KytyKXRbZV1bcl0udGV4dD10W2VdW3JdLnRleHQrIiI7cmV0dXJuIHR9LEEudXBkYXRlUmVmcz1mdW5jdGlvbih0KXt0aGlzLmZ1bGxMYXlvdXQ9dDt2YXIgZT10aGlzLmlkLm1hdGNoKFQpLHI9InhheGlzIitlWzFdLG49InlheGlzIitlWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSxBLnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dCxpPXt9LG89aVtlLl9uYW1lKyIucmFuZ2UiXT1lLnJhbmdlLnNsaWNlKCkscz1pW3IuX25hbWUrIi5yYW5nZSJdPXIucmFuZ2Uuc2xpY2UoKTtpW2UuX25hbWUrIi5hdXRvcmFuZ2UiXT1lLmF1dG9yYW5nZSxpW3IuX25hbWUrIi5hdXRvcmFuZ2UiXT1yLmF1dG9yYW5nZSxhLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKTt2YXIgbD1uW2UuX25hbWVdO2wucmFuZ2U9byxsLmF1dG9yYW5nZT1lLmF1dG9yYW5nZTt2YXIgYz1uW3IuX25hbWVdO2MucmFuZ2U9cyxjLmF1dG9yYW5nZT1yLmF1dG9yYW5nZSxpLmxhc3RJbnB1dFRpbWU9dGhpcy5jYW1lcmEubGFzdElucHV0VGltZSx0LmVtaXQoInBsb3RseV9yZWxheW91dCIsaSl9LEEuY2FtZXJhQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FtZXJhO3RoaXMuZ2xwbG90LnNldERhdGFCb3godGhpcy5jYWxjRGF0YUJveCgpKTt2YXIgZT10aGlzLmNvbXB1dGVUaWNrTWFya3MoKTsoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDI7KytyKXt2YXIgbj10W3JdLGk9ZVtyXTtpZihuLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7KythKWlmKG5bYV0ueCE9PWlbYV0ueClyZXR1cm4hMH1yZXR1cm4hMX0pKGUsdGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzKSYmKHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcz1lLHRoaXMuZ2xwbG90T3B0aW9ucy5kYXRhQm94PXQuZGF0YUJveCx0aGlzLmdscGxvdC51cGRhdGUodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmhhbmRsZUFubm90YXRpb25zKCkpfSxBLmhhbmRsZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLmZ1bGxMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24ueHJlZj09PXRoaXMueGF4aXMuX2lkJiZuLnlyZWY9PT10aGlzLnlheGlzLl9pZCYmYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKHQscil9fSxBLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLmdscGxvdCl7dmFyIHQ9dGhpcy50cmFjZXM7dCYmT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pKSx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5zdmdDb250YWluZXIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMubW91c2VDb250YWluZXIpLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLmdscGxvdD1udWxsLHRoaXMuc3RvcHBlZD0hMCx0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5tb3VzZUNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LEEucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMueGF4aXMuY2xlYXJDYWxjKCksdGhpcy55YXhpcy5jbGVhckNhbGMoKSx0aGlzLnVwZGF0ZVRyYWNlcyh0LGUpLHRoaXMudXBkYXRlRngoci5kcmFnbW9kZSk7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0O3RoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIG89dGhpcy5nbHBsb3RPcHRpb25zO28ubWVyZ2Uociksby5zY3JlZW5Cb3g9WzAsMCxpLGFdO3ZhciBzPXtfZnVsbExheW91dDp7X2F4aXNDb25zdHJhaW50R3JvdXBzOnIuX2F4aXNDb25zdHJhaW50R3JvdXBzLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpcyxfc2l6ZTpyLl9zaXplfX07dihzLHRoaXMueGF4aXMpLHYocyx0aGlzLnlheGlzKTt2YXIgbCxjLHU9ci5fc2l6ZSxmPXRoaXMueGF4aXMuZG9tYWluLGg9dGhpcy55YXhpcy5kb21haW47Zm9yKG8udmlld0JveD1bdS5sK2ZbMF0qdS53LHUuYitoWzBdKnUuaCxpLXUuci0oMS1mWzFdKSp1LncsYS11LnQtKDEtaFsxXSkqdS5oXSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLndpZHRoPXUudyooZlsxXS1mWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSsicHgiLHRoaXMubW91c2VDb250YWluZXIuaGVpZ2h0PXUuaCooaFsxXS1oWzBdKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmxlZnQ9dS5sK2ZbMF0qdS53KyJweCIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS50b3A9dS50KygxLWhbMV0pKnUuaCsicHgiLGM9MDtjPDI7KytjKShsPXRoaXNbd1tjXV0pLl9sZW5ndGg9by52aWV3Qm94W2MrMl0tby52aWV3Qm94W2NdLHkodGhpcy5ncmFwaERpdixsKSxsLnNldFNjYWxlKCk7ZyhzKSxvLnRpY2tzPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpLG8uZGF0YUJveD10aGlzLmNhbGNEYXRhQm94KCksby5tZXJnZShyKSxuLnVwZGF0ZShvKSx0aGlzLmdscGxvdC5kcmF3KCl9LEEuY2FsY0RhdGFCb3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnhheGlzLGU9dGhpcy55YXhpcyxyPXQucmFuZ2Usbj1lLnJhbmdlLGk9dC5yMmwsYT1lLnIybDtyZXR1cm5baShyWzBdKSxhKG5bMF0pLGkoclsxXSksYShuWzFdKV19LEEuc2V0UmFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49ZS5sMnIsaT1yLmwycjtlLnJhbmdlPVtuKHRbMF0pLG4odFsyXSldLHIucmFuZ2U9W2kodFsxXSksaSh0WzNdKV19LEEudXBkYXRlVHJhY2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3RoaXMuZnVsbERhdGE9dDt0OmZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBvPWFbcl0scz10aGlzLnRyYWNlc1tvXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKChpPXRbbl0pLnVpZD09PW8mJmkudHlwZT09PXMudHlwZSljb250aW51ZSB0O3MuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tvXX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpPXRbcl07dmFyIGw9ZVtyXSxjPXRoaXMudHJhY2VzW2kudWlkXTtjP2MudXBkYXRlKGksbCk6KGM9aS5fbW9kdWxlLnBsb3QodGhpcyxpLGwpLHRoaXMudHJhY2VzW2kudWlkXT1jKX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmluZGV4LWUuX3RyYWNlLmluZGV4fSkpfSxBLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe18odCl8fGIodCk/KHRoaXMucGlja0NhbnZhcy5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIpOih0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmN1cnNvcj0icGFuIj09PXQ/Im1vdmUiOiJ6b29tIj09PXQ/ImNyb3NzaGFpciI6bnVsbH0sQS5lbWl0UG9pbnRBY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnRyYWNlLnVpZCxpPXQucG9pbnRJbmRleCxhPTA7YTx0aGlzLmZ1bGxEYXRhLmxlbmd0aDthKyspdGhpcy5mdWxsRGF0YVthXS51aWQ9PT1uJiYocj10aGlzLmZ1bGxEYXRhW2FdKTt2YXIgbz17eDp0LnRyYWNlQ29vcmRbMF0seTp0LnRyYWNlQ29vcmRbMV0sY3VydmVOdW1iZXI6ci5pbmRleCxwb2ludE51bWJlcjppLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6dGhpcy5mdWxsRGF0YSx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9O3MuYXBwZW5kQXJyYXlQb2ludFZhbHVlKG8scixpKSx0aGlzLmdyYXBoRGl2LmVtaXQoZSx7cG9pbnRzOltvXX0pfSxBLmRyYXc9ZnVuY3Rpb24oKXtpZighdGhpcy5zdG9wcGVkKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWRyYXcpO3ZhciB0PXRoaXMuZ2xwbG90LGU9dGhpcy5jYW1lcmEscj1lLm1vdXNlTGlzdGVuZXIsbj0xPT09dGhpcy5sYXN0QnV0dG9uU3RhdGUmJjA9PT1yLmJ1dHRvbnMsaT10aGlzLmZ1bGxMYXlvdXQ7dGhpcy5sYXN0QnV0dG9uU3RhdGU9ci5idXR0b25zLHRoaXMuY2FtZXJhQ2hhbmdlZCgpO3ZhciBhLG89ci54KnQucGl4ZWxSYXRpbyxsPXRoaXMuY2FudmFzLmhlaWdodC10LnBpeGVsUmF0aW8qci55O2lmKGUuYm94RW5hYmxlZCYmInpvb20iPT09aS5kcmFnbW9kZSl7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMDtmb3IodmFyIGM9dGhpcy5zZWxlY3RCb3guc2VsZWN0Qm94PVtNYXRoLm1pbihlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1pbihlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKSxNYXRoLm1heChlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1heChlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKV0sdT0wO3U8Mjt1KyspZS5ib3hTdGFydFt1XT09PWUuYm94RW5kW3VdJiYoY1t1XT10LmRhdGFCb3hbdV0sY1t1KzJdPXQuZGF0YUJveFt1KzJdKTt0LnNldERpcnR5KCl9ZWxzZSBpZighZS5wYW5uaW5nJiZ0aGlzLmlzTW91c2VPdmVyKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSExO3ZhciBmPWkuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixwPXRoaXMueWF4aXMuZG9tYWluLGQ9KGE9dC5waWNrKG8vdC5waXhlbFJhdGlvK2YubCtoWzBdKmYudyxsL3QucGl4ZWxSYXRpby0oZi50KygxLXBbMV0pKmYuaCkpKSYmYS5vYmplY3QuX3RyYWNlLmhhbmRsZVBpY2soYSk7aWYoZCYmbiYmdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2NsaWNrIiksYSYmInNraXAiIT09YS5vYmplY3QuX3RyYWNlLmhvdmVyaW5mbyYmaS5ob3Zlcm1vZGUmJmQmJighdGhpcy5sYXN0UGlja1Jlc3VsdHx8dGhpcy5sYXN0UGlja1Jlc3VsdC50cmFjZVVpZCE9PWQudHJhY2UudWlkfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFswXSE9PWQuZGF0YUNvb3JkWzBdfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFsxXSE9PWQuZGF0YUNvb3JkWzFdKSl7dmFyIG09ZDt0aGlzLmxhc3RQaWNrUmVzdWx0PXt0cmFjZVVpZDpkLnRyYWNlP2QudHJhY2UudWlkOm51bGwsZGF0YUNvb3JkOmQuZGF0YUNvb3JkLnNsaWNlKCl9LHRoaXMuc3Bpa2VzLnVwZGF0ZSh7Y2VudGVyOmEuZGF0YUNvb3JkfSksbS5zY3JlZW5Db29yZD1bKCh0LnZpZXdCb3hbMl0tdC52aWV3Qm94WzBdKSooYS5kYXRhQ29vcmRbMF0tdC5kYXRhQm94WzBdKS8odC5kYXRhQm94WzJdLXQuZGF0YUJveFswXSkrdC52aWV3Qm94WzBdKS90LnBpeGVsUmF0aW8sKHRoaXMuY2FudmFzLmhlaWdodC0odC52aWV3Qm94WzNdLXQudmlld0JveFsxXSkqKGEuZGF0YUNvb3JkWzFdLXQuZGF0YUJveFsxXSkvKHQuZGF0YUJveFszXS10LmRhdGFCb3hbMV0pLXQudmlld0JveFsxXSkvdC5waXhlbFJhdGlvXSx0aGlzLmVtaXRQb2ludEFjdGlvbihkLCJwbG90bHlfaG92ZXIiKTt2YXIgZz10aGlzLmZ1bGxEYXRhW20udHJhY2UuaW5kZXhdfHx7fSx2PW0ucG9pbnRJbmRleCx5PXMuY2FzdEhvdmVyaW5mbyhnLGksdik7aWYoeSYmImFsbCIhPT15KXt2YXIgeD15LnNwbGl0KCIrIik7LTE9PT14LmluZGV4T2YoIngiKSYmKG0udHJhY2VDb29yZFswXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ5IikmJihtLnRyYWNlQ29vcmRbMV09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieiIpJiYobS50cmFjZUNvb3JkWzJdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInRleHQiKSYmKG0udGV4dExhYmVsPXZvaWQgMCksLTE9PT14LmluZGV4T2YoIm5hbWUiKSYmKG0ubmFtZT12b2lkIDApfXMubG9uZUhvdmVyKHt4Om0uc2NyZWVuQ29vcmRbMF0seTptLnNjcmVlbkNvb3JkWzFdLHhMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKCJ4YXhpcyIsbS50cmFjZUNvb3JkWzBdKSx5TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieWF4aXMiLG0udHJhY2VDb29yZFsxXSksekxhYmVsOm0udHJhY2VDb29yZFsyXSx0ZXh0Om0udGV4dExhYmVsLG5hbWU6bS5uYW1lLGNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwiYmdjb2xvciIpfHxtLmNvbG9yLGJvcmRlckNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOnMuY2FzdEhvdmVyT3B0aW9uKGcsdiwibmFtZWxlbmd0aCIpLHRleHRBbGlnbjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImFsaWduIil9LHtjb250YWluZXI6dGhpcy5zdmdDb250YWluZXIsZ2Q6dGhpcy5ncmFwaERpdn0pfX1hfHx0aGlzLnVuaG92ZXIoKSx0LmRyYXcoKX19LEEudW5ob3Zlcj1mdW5jdGlvbigpe3RoaXMubGFzdFBpY2tSZXN1bHQmJih0aGlzLnNwaWtlcy51cGRhdGUoe30pLHRoaXMubGFzdFBpY2tSZXN1bHQ9bnVsbCx0aGlzLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIikscy5sb25lVW5ob3Zlcih0aGlzLnN2Z0NvbnRhaW5lcikpfSxBLmhvdmVyRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZSl7dmFyIHI9dGhpc1t0XTtyZXR1cm4gby50aWNrVGV4dChyLHIuYzJsKGUpLCJob3ZlciIpLnRleHR9fX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMjAsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6Mzg0LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDYsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NTI1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NTMsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjU2MSwiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo1NjIsIi4vY2FtZXJhIjo1OTQsIi4vY29udmVydCI6NTk1LCJ3ZWJnbC1jb250ZXh0IjozMzF9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9zY2VuZSIpLG89dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtyLm5hbWU9ImdsM2QiLHIuYXR0cj0ic2NlbmUiLHIuaWRSb290PSJzY2VuZSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KCJzY2VuZSIpLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXSxsPW8ociwiZ2wzZCIscyksYz1lW3NdLHU9Yy5jYW1lcmEsZj1jLl9zY2VuZTtmfHwoZj1uZXcgYSh7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxjYW1lcmE6dX0sZSksYy5fc2NlbmU9ZiksZi52aWV3SW5pdGlhbHx8KGYudmlld0luaXRpYWw9e3VwOnt4OnUudXAueCx5OnUudXAueSx6OnUudXAuen0sZXllOnt4OnUuZXllLngseTp1LmV5ZS55LHo6dS5leWUuen0sY2VudGVyOnt4OnUuY2VudGVyLngseTp1LmNlbnRlci55LHo6dS5jZW50ZXIuen19KSxmLnBsb3QobCxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goL15zY2VuZVswLTldKiQvKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLCJzY2VuZSIrZX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc2NlbmUudXBkYXRlRngoZS5kcmFnbW9kZSxlLmhvdmVybW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo0MDcsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uL2dldF9kYXRhIjo1OTMsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjU5OSwiLi9sYXlvdXQvZGVmYXVsdHMiOjYwMywiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjYwNCwiLi9zY2VuZSI6NjA4fV0sNTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sNjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPW8oe3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOnt0ZXh0OmkudGl0bGUudGV4dCxmb250OmkudGl0bGUuZm9udH0sdHlwZTphKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6YSh7fSxpLnJhbmdlLHtpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX1dLGFuaW06ITF9KSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6aS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGgsX2RlcHJlY2F0ZWQ6e3RpdGxlOmkuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmkuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sInBsb3QiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTM2LCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OX1dLDYwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F4aXNfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksYz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZjtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGkuY29lcmNlKHUsZixvLHQsZSl9Zm9yKHZhciBwPTA7cDxjLmxlbmd0aDtwKyspe3ZhciBkPWNbcF07dT10W2RdfHx7fSwoZj1hLm5ld0NvbnRhaW5lcihlLGQpKS5faWQ9ZFswXStyLnNjZW5lLGYuX25hbWU9ZCxzKHUsZixoLHIpLGwodSxmLGgse2ZvbnQ6ci5mb250LGxldHRlcjpkWzBdLGRhdGE6ci5kYXRhLHNob3dHcmlkOiEwLG5vVGlja3NvbjohMCxub1RpY2tsYWJlbG1vZGU6ITAsbm9UaWNrbGFiZWxwb3NpdGlvbjohMCxub1RpY2tsYWJlbG92ZXJmbG93OiEwLGJnQ29sb3I6ci5iZ0NvbG9yLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHIuZnVsbExheW91dCksaCgiZ3JpZGNvbG9yIixuKGYuY29sb3Isci5iZ0NvbG9yLDEzNjAwLzE4NykudG9SZ2JTdHJpbmcoKSksaCgidGl0bGUudGV4dCIsZFswXSksZi5zZXRTY2FsZT1pLm5vb3AsaCgic2hvd3NwaWtlcyIpJiYoaCgic3Bpa2VzaWRlcyIpLGgoInNwaWtldGhpY2tuZXNzIiksaCgic3Bpa2Vjb2xvciIsZi5jb2xvcikpLGgoInNob3dheGVzbGFiZWxzIiksaCgic2hvd2JhY2tncm91bmQiKSYmaCgiYmFja2dyb3VuZGNvbG9yIil9fX0seyIuLi8uLi8uLi9saWIiOjUwMywiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6NTU2LCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyI6NTgyLCIuL2F4aXNfYXR0cmlidXRlcyI6NjAwLHRpbnljb2xvcjI6MzEyfV0sNjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBvKCl7dGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTgsMTgsMThdLHRoaXMubGFiZWxzPVsieCIsInkiLCJ6Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PVsiT3BlbiBTYW5zIiwiT3BlbiBTYW5zIiwiT3BlbiBTYW5zIl0sdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVszMCwzMCwzMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMTAsMTAsMTBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2RlZmF1bHRUaWNrUGFkPXRoaXMudGlja1BhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMYWJlbFBhZD10aGlzLmxhYmVsUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoPXRoaXMubGluZVRpY2tMZW5ndGguc2xpY2UoKX1vLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe3ZhciBvPWVbYVtyXV07by52aXNpYmxlPyh0aGlzLmxhYmVsc1tyXT10Ll9tZXRhP2kudGVtcGxhdGVTdHJpbmcoby50aXRsZS50ZXh0LHQuX21ldGEpOm8udGl0bGUudGV4dCwiZm9udCJpbiBvLnRpdGxlJiYoby50aXRsZS5mb250LmNvbG9yJiYodGhpcy5sYWJlbENvbG9yW3JdPW4oby50aXRsZS5mb250LmNvbG9yKSksby50aXRsZS5mb250LmZhbWlseSYmKHRoaXMubGFiZWxGb250W3JdPW8udGl0bGUuZm9udC5mYW1pbHkpLG8udGl0bGUuZm9udC5zaXplJiYodGhpcy5sYWJlbFNpemVbcl09by50aXRsZS5mb250LnNpemUpKSwic2hvd2xpbmUiaW4gbyYmKHRoaXMubGluZUVuYWJsZVtyXT1vLnNob3dsaW5lKSwibGluZWNvbG9yImluIG8mJih0aGlzLmxpbmVDb2xvcltyXT1uKG8ubGluZWNvbG9yKSksImxpbmV3aWR0aCJpbiBvJiYodGhpcy5saW5lV2lkdGhbcl09by5saW5ld2lkdGgpLCJzaG93Z3JpZCJpbiBvJiYodGhpcy5ncmlkRW5hYmxlW3JdPW8uc2hvd2dyaWQpLCJncmlkY29sb3IiaW4gbyYmKHRoaXMuZ3JpZENvbG9yW3JdPW4oby5ncmlkY29sb3IpKSwiZ3JpZHdpZHRoImluIG8mJih0aGlzLmdyaWRXaWR0aFtyXT1vLmdyaWR3aWR0aCksImxvZyI9PT1vLnR5cGU/dGhpcy56ZXJvRW5hYmxlW3JdPSExOiJ6ZXJvbGluZSJpbiBvJiYodGhpcy56ZXJvRW5hYmxlW3JdPW8uemVyb2xpbmUpLCJ6ZXJvbGluZWNvbG9yImluIG8mJih0aGlzLnplcm9MaW5lQ29sb3Jbcl09bihvLnplcm9saW5lY29sb3IpKSwiemVyb2xpbmV3aWR0aCJpbiBvJiYodGhpcy56ZXJvTGluZVdpZHRoW3JdPW8uemVyb2xpbmV3aWR0aCksInRpY2tzImluIG8mJm8udGlja3M/dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMDp0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLCJ0aWNrbGVuImluIG8mJih0aGlzLmxpbmVUaWNrTGVuZ3RoW3JdPXRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aFtyXT1vLnRpY2tsZW4pLCJ0aWNrY29sb3IiaW4gbyYmKHRoaXMubGluZVRpY2tDb2xvcltyXT1uKG8udGlja2NvbG9yKSksInRpY2t3aWR0aCJpbiBvJiYodGhpcy5saW5lVGlja1dpZHRoW3JdPW8udGlja3dpZHRoKSwidGlja2FuZ2xlImluIG8mJih0aGlzLnRpY2tBbmdsZVtyXT0iYXV0byI9PT1vLnRpY2thbmdsZT8tMzYwMDpNYXRoLlBJKi1vLnRpY2thbmdsZS8xODApLCJzaG93dGlja2xhYmVscyJpbiBvJiYodGhpcy50aWNrRW5hYmxlW3JdPW8uc2hvd3RpY2tsYWJlbHMpLCJ0aWNrZm9udCJpbiBvJiYoby50aWNrZm9udC5jb2xvciYmKHRoaXMudGlja0NvbG9yW3JdPW4oby50aWNrZm9udC5jb2xvcikpLG8udGlja2ZvbnQuZmFtaWx5JiYodGhpcy50aWNrRm9udFtyXT1vLnRpY2tmb250LmZhbWlseSksby50aWNrZm9udC5zaXplJiYodGhpcy50aWNrU2l6ZVtyXT1vLnRpY2tmb250LnNpemUpKSwibWlycm9yImluIG8/LTEhPT1bInRpY2tzIiwiYWxsIiwiYWxsdGlja3MiXS5pbmRleE9mKG8ubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMCx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOiEwPT09by5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITEpOnRoaXMubGluZU1pcnJvcltyXT0hMSwic2hvd2JhY2tncm91bmQiaW4gbyYmITEhPT1vLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3Jbcl09bihvLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KHRoaXMudGlja0VuYWJsZVtyXT0hMSx0aGlzLmxhYmVsRW5hYmxlW3JdPSExLHRoaXMubGluZUVuYWJsZVtyXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLHRoaXMuZ3JpZEVuYWJsZVtyXT0hMSx0aGlzLnplcm9FbmFibGVbcl09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBvO3JldHVybiByLm1lcmdlKHQsZSkscn19LHsiLi4vLi4vLi4vbGliIjo1MDMsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyOH1dLDYwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIiKSxpPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuL2F4aXNfZGVmYXVsdHMiKSxsPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGE7ZnVuY3Rpb24gdSh0LGUscixuKXtmb3IodmFyIG89cigiYmdjb2xvciIpLGw9aS5jb21iaW5lKG8sbi5wYXBlcl9iZ2NvbG9yKSx1PVsidXAiLCJjZW50ZXIiLCJleWUiXSxmPTA7Zjx1Lmxlbmd0aDtmKyspcigiY2FtZXJhLiIrdVtmXSsiLngiKSxyKCJjYW1lcmEuIit1W2ZdKyIueSIpLHIoImNhbWVyYS4iK3VbZl0rIi56Iik7cigiY2FtZXJhLnByb2plY3Rpb24udHlwZSIpO3ZhciBoPSEhcigiYXNwZWN0cmF0aW8ueCIpJiYhIXIoImFzcGVjdHJhdGlvLnkiKSYmISFyKCJhc3BlY3RyYXRpby56IikscD1yKCJhc3BlY3Rtb2RlIixoPyJtYW51YWwiOiJhdXRvIik7aHx8KHQuYXNwZWN0cmF0aW89ZS5hc3BlY3RyYXRpbz17eDoxLHk6MSx6OjF9LCJtYW51YWwiPT09cCYmKGUuYXNwZWN0bW9kZT0iYXV0byIpLHQuYXNwZWN0bW9kZT1lLmFzcGVjdG1vZGUpO3ZhciBkPWMobi5mdWxsRGF0YSwiZ2wzZCIsbi5pZCk7cyh0LGUse2ZvbnQ6bi5mb250LHNjZW5lOm4uaWQsZGF0YTpkLGJnQ29sb3I6bCxjYWxlbmRhcjpuLmNhbGVuZGFyLGF1dG90eXBlbnVtYmVyc0RmbHQ6bi5hdXRvdHlwZW51bWJlcnNEZmx0LGZ1bGxMYXlvdXQ6bi5mdWxsTGF5b3V0fSksYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zM2QiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSxuKTt2YXIgbT1uLmdldERmbHRGcm9tTGF5b3V0KCJkcmFnbW9kZSIpO2lmKCExIT09bSYmIW0paWYobT0ib3JiaXQiLHQuY2FtZXJhJiZ0LmNhbWVyYS51cCl7dmFyIGc9dC5jYW1lcmEudXAueCx2PXQuY2FtZXJhLnVwLnkseT10LmNhbWVyYS51cC56OzAhPT15JiYoZyYmdiYmeT95L01hdGguc3FydChnKmcrdip2K3kqeSk+Ljk5OSYmKG09InR1cm50YWJsZSIpOm09InR1cm50YWJsZSIpfWVsc2UgbT0idHVybnRhYmxlIjtyKCJkcmFnbW9kZSIsbSkscigiaG92ZXJtb2RlIixuLmdldERmbHRGcm9tTGF5b3V0KCJob3Zlcm1vZGUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoPjE7byh0LGUscix7dHlwZToiZ2wzZCIsYXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOnUsZnVsbExheW91dDplLGZvbnQ6ZS5mb250LGZ1bGxEYXRhOnIsZ2V0RGZsdEZyb21MYXlvdXQ6ZnVuY3Rpb24oZSl7aWYoIWkpcmV0dXJuIG4udmFsaWRhdGUodFtlXSxsW2VdKT90W2VdOnZvaWQgMH0sYXV0b3R5cGVudW1iZXJzRGZsdDplLmF1dG90eXBlbnVtYmVycyxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixjYWxlbmRhcjplLmNhbGVuZGFyfSl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vLi4vbGliIjo1MDMsIi4uLy4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uLy4uL2dldF9kYXRhIjo1OTMsIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiOjYzMiwiLi9heGlzX2RlZmF1bHRzIjo2MDEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYwNH1dLDYwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vLi4vbGliIikuY291bnRlclJlZ2V4O2Z1bmN0aW9uIHModCxlLHIpe3JldHVybnt4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6dCxlZGl0VHlwZToiY2FtZXJhIn0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0OmUsZWRpdFR5cGU6ImNhbWVyYSJ9LHo6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpyLGVkaXRUeXBlOiJjYW1lcmEifSxlZGl0VHlwZToiY2FtZXJhIn19ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbbygic2NlbmUiLCIuYW5ub3RhdGlvbnMiLCEwKV0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJwbG90In0sY2FtZXJhOnt1cDphKHMoMCwwLDEpLHt9KSxjZW50ZXI6YShzKDAsMCwwKSx7fSksZXllOmEocygxLjI1LDEuMjUsMS4yNSkse30pLHByb2plY3Rpb246e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnNwZWN0aXZlIiwib3J0aG9ncmFwaGljIl0sZGZsdDoicGVyc3BlY3RpdmUiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FtZXJhIn0sZG9tYWluOmkoe25hbWU6InNjZW5lIixlZGl0VHlwZToicGxvdCJ9KSxhc3BlY3Rtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiY3ViZSIsImRhdGEiLCJtYW51YWwiXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiYXNwZWN0cmF0aW8ueCI6dm9pZCAwLCJhc3BlY3RyYXRpby55Ijp2b2lkIDAsImFzcGVjdHJhdGlvLnoiOnZvaWQgMH19LGFzcGVjdHJhdGlvOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnthc3BlY3Rtb2RlOiJtYW51YWwifX0seGF4aXM6bix5YXhpczpuLHpheGlzOm4sZHJhZ21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm9yYml0IiwidHVybnRhYmxlIiwiem9vbSIsInBhbiIsITFdLGVkaXRUeXBlOiJwbG90In0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9zZXN0IiwhMV0sZGZsdDoiY2xvc2VzdCIsZWRpdFR5cGU6Im1vZGViYXIifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6InBsb3QiLF9kZXByZWNhdGVkOntjYW1lcmFwb3NpdGlvbjp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbWVyYSJ9fX19LHsiLi4vLi4vLi4vbGliIjo1MDMsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vZG9tYWluIjo1ODQsIi4vYXhpc19hdHRyaWJ1dGVzIjo2MDB9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGk9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBhKCl7dGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMubGluZVdpZHRoPVsxLDEsMV19YS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwzOysrZSl7dmFyIHI9dFtpW2VdXTtyLnZpc2libGU/KHRoaXMuZW5hYmxlZFtlXT1yLnNob3dzcGlrZXMsdGhpcy5jb2xvcnNbZV09bihyLnNwaWtlY29sb3IpLHRoaXMuZHJhd1NpZGVzW2VdPXIuc3Bpa2VzaWRlcyx0aGlzLmxpbmVXaWR0aFtlXT1yLnNwaWtldGhpY2tuZXNzKToodGhpcy5lbmFibGVkW2VdPSExLHRoaXMuZHJhd1NpZGVzW2VdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYTtyZXR1cm4gZS5tZXJnZSh0KSxlfX0seyIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo1Mjh9XSw2MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxzPXQuZnVsbFNjZW5lTGF5b3V0LGw9W1tdLFtdLFtdXSxjPTA7YzwzOysrYyl7dmFyIHU9c1thW2NdXTtpZih1Ll9sZW5ndGg9KHJbY10uaGktcltjXS5sbykqcltjXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtjXSxNYXRoLmFicyh1Ll9sZW5ndGgpPT09MS8wfHxpc05hTih1Ll9sZW5ndGgpKWxbY109W107ZWxzZXt1Ll9pbnB1dF9yYW5nZT11LnJhbmdlLnNsaWNlKCksdS5yYW5nZVswXT1yW2NdLmxvL3QuZGF0YVNjYWxlW2NdLHUucmFuZ2VbMV09cltjXS5oaS90LmRhdGFTY2FsZVtjXSx1Ll9tPTEvKHQuZGF0YVNjYWxlW2NdKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQpLHUucmFuZ2VbMF09PT11LnJhbmdlWzFdJiYodS5yYW5nZVswXS09MSx1LnJhbmdlWzFdKz0xKTt2YXIgZj11LnRpY2ttb2RlO2lmKCJhdXRvIj09PXUudGlja21vZGUpe3UudGlja21vZGU9ImxpbmVhciI7dmFyIGg9dS5udGlja3N8fGkuY29uc3RyYWluKHUuX2xlbmd0aC80MCw0LDkpO24uYXV0b1RpY2tzKHUsTWF0aC5hYnModS5yYW5nZVsxXS11LnJhbmdlWzBdKS9oKX1mb3IodmFyIHA9bi5jYWxjVGlja3ModSx7bXNVVEM6ITB9KSxkPTA7ZDxwLmxlbmd0aDsrK2QpcFtkXS54PXBbZF0ueCp0LmRhdGFTY2FsZVtjXSwiZGF0ZSI9PT11LnR5cGUmJihwW2RdLnRleHQ9cFtkXS50ZXh0LnJlcGxhY2UoL1w8YnJcPi9nLCIgIikpO2xbY109cCx1LnRpY2ttb2RlPWZ9fWUudGlja3M9bDtmb3IoYz0wO2M8MzsrK2Mpe29bY109LjUqKHQuZ2xwbG90LmJvdW5kc1swXVtjXSt0LmdscGxvdC5ib3VuZHNbMV1bY10pO2ZvcihkPTA7ZDwyOysrZCllLmJvdW5kc1tkXVtjXT10LmdscGxvdC5ib3VuZHNbZF1bY119dC5jb250b3VyTGV2ZWxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMykscj0wO3I8MzsrK3Ipe2Zvcih2YXIgbj10W3JdLGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxhPTA7YTxuLmxlbmd0aDsrK2EpaVthXT1uW2FdLng7ZVtyXT1pfXJldHVybiBlfShsKX07dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxvPVswLDAsMF19LHsiLi4vLi4vLi4vbGliIjo1MDMsIi4uLy4uL2NhcnRlc2lhbi9heGVzIjo1NTR9XSw2MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4saT1bMCwwLDAsMF07Zm9yKHI9MDtyPDQ7KytyKWZvcihuPTA7bjw0OysrbilpW25dKz10WzQqcituXSplW3JdO3JldHVybiBpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQucHJvamVjdGlvbixuKHQudmlldyxuKHQubW9kZWwsW2VbMF0sZVsxXSxlWzJdLDFdKSkpfX0se31dLDYwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGE9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZ2xfcGxvdDNkLG89YS5jcmVhdGVDYW1lcmEscz1hLmNyZWF0ZVNjZW5lLGw9dCgid2ViZ2wtY29udGV4dCIpLGM9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksdT10KCIuLi8uLi9yZWdpc3RyeSIpLGY9dCgiLi4vLi4vbGliIiksaD1mLnByZXNlcnZlRHJhd2luZ0J1ZmZlcigpLHA9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxtPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxnPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLHY9dCgiLi9wcm9qZWN0IikseT10KCIuL2xheW91dC9jb252ZXJ0IikseD10KCIuL2xheW91dC9zcGlrZXMiKSxiPXQoIi4vbGF5b3V0L3RpY2tfbWFya3MiKTtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj10LmNvbnRhaW5lcjt0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXY7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlLnRvcD1pLnN0eWxlLmxlZnQ9IjBweCIsaS5zdHlsZS53aWR0aD1pLnN0eWxlLmhlaWdodD0iMTAwJSIsaS5zdHlsZVsiei1pbmRleCJdPTIwLGkuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5zdmdDb250YWluZXI9aSxyLmlkPXQuaWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPXIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixuLmFwcGVuZENoaWxkKHIpLHRoaXMuZnVsbExheW91dD1lLHRoaXMuaWQ9dC5pZHx8InNjZW5lIix0aGlzLmZ1bGxTY2VuZUxheW91dD1lW3RoaXMuaWRdLHRoaXMucGxvdEFyZ3M9W1tdLHt9LHt9XSx0aGlzLmF4ZXNPcHRpb25zPXkoZSxlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz14KGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW98fHQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPXUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiY29udmVydCIpLHRoaXMuZHJhd0Fubm90YXRpb25zPXUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiZHJhdyIpLHRoaXMuaW5pdGlhbGl6ZUdMUGxvdCgpfXZhciB3PV8ucHJvdG90eXBlO3cucHJlcGFyZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD17Y2FudmFzOnRoaXMuY2FudmFzLGdsOnRoaXMuZ2wsZ2xPcHRpb25zOntwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6aCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSxjb250YWluZXI6dGhpcy5jb250YWluZXIsYXhlczp0aGlzLmF4ZXNPcHRpb25zLHNwaWtlczp0aGlzLnNwaWtlT3B0aW9ucyxwaWNrUmFkaXVzOjEwLHNuYXBUb0RhdGE6ITAsYXV0b1NjYWxlOiEwLGF1dG9Cb3VuZHM6ITEsY2FtZXJhT2JqZWN0OnRoaXMuY2FtZXJhLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfTtpZih0aGlzLnN0YXRpY01vZGUpe2lmKCEoaXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaT1sKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJlcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3QuZ2w9aSx0LmNhbnZhcz1ufXJldHVybiB0fTt2YXIgVD0hMDt3LnRyeUNyZWF0ZVBsb3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByZXBhcmVPcHRpb25zKCksZT0hMDt0cnl7dGhpcy5nbHBsb3Q9cyh0KX1jYXRjaChyKXtpZih0aGlzLnN0YXRpY01vZGV8fCFUfHxoKWU9ITE7ZWxzZXtmLndhcm4oWyJ3ZWJnbCBzZXR1cCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIiwiZmFsc2UgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGNvbmZpZy4iLCJUaGUgbW9iaWxlL3RhYmxldCBkZXZpY2UgbWF5IG5vdCBiZSBkZXRlY3RlZCBieSBpcy1tb2JpbGUgbW9kdWxlLiIsIkVuYWJsaW5nIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBpbiBzZWNvbmQgYXR0ZW1wdCB0byBjcmVhdGUgd2ViZ2wgc2NlbmUuLi4iXS5qb2luKCIgIikpO3RyeXtoPXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj0hMCx0aGlzLmdscGxvdD1zKHQpfWNhdGNoKHIpe2g9dC5nbE9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPSExLGU9ITF9fX1yZXR1cm4gVD0hMSxlfSx3LmluaXRpYWxpemVHTENhbWVyYT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZnVsbFNjZW5lTGF5b3V0LmNhbWVyYSxlPSJvcnRob2dyYXBoaWMiPT09dC5wcm9qZWN0aW9uLnR5cGU7dGhpcy5jYW1lcmE9byh0aGlzLmNvbnRhaW5lcix7Y2VudGVyOlt0LmNlbnRlci54LHQuY2VudGVyLnksdC5jZW50ZXIuel0sZXllOlt0LmV5ZS54LHQuZXllLnksdC5leWUuel0sdXA6W3QudXAueCx0LnVwLnksdC51cC56XSxfb3J0aG86ZSx6b29tTWluOi4wMSx6b29tTWF4OjEwMCxtb2RlOiJvcmJpdCJ9KX0sdy5pbml0aWFsaXplR0xQbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0LmluaXRpYWxpemVHTENhbWVyYSgpLCF0LnRyeUNyZWF0ZVBsb3QoKSlyZXR1cm4gZyh0KTt0LnRyYWNlcz17fSx0Lm1ha2U0dGhEaW1lbnNpb24oKTt2YXIgZT10LmdyYXBoRGl2LHI9ZS5sYXlvdXQsbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0LmlzQ2FtZXJhQ2hhbmdlZChyKSYmKGVbdC5pZCsiLmNhbWVyYSJdPXQuZ2V0Q2FtZXJhKCkpLHQuaXNBc3BlY3RDaGFuZ2VkKHIpJiYoZVt0LmlkKyIuYXNwZWN0cmF0aW8iXT10LmdscGxvdC5nZXRBc3BlY3RyYXRpbygpLCJtYW51YWwiIT09clt0LmlkXS5hc3BlY3Rtb2RlJiYodC5mdWxsU2NlbmVMYXlvdXQuYXNwZWN0bW9kZT1yW3QuaWRdLmFzcGVjdG1vZGU9ZVt0LmlkKyIuYXNwZWN0bW9kZSJdPSJtYW51YWwiKSksZX0saT1mdW5jdGlvbih0KXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlKXt2YXIgZT1uKCk7dC5zYXZlTGF5b3V0KHIpLHQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixlKX19O3JldHVybiB0LmdscGxvdC5jYW52YXMmJih0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aSh0KX0pKSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLChmdW5jdGlvbihyKXtpZihlLl9jb250ZXh0Ll9zY3JvbGxab29tLmdsM2Qpe2lmKHQuY2FtZXJhLl9vcnRobyl7dmFyIG49ci5kZWx0YVg+ci5kZWx0YVk/MS4xOjEvMS4xLGE9dC5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKTt0LmdscGxvdC5zZXRBc3BlY3RyYXRpbyh7eDpuKmEueCx5Om4qYS55LHo6biphLnp9KX1pKHQpfX0pLCEhYyYme3Bhc3NpdmU6ITF9KSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oKXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlJiYwIT09dC5jYW1lcmEubW91c2VMaXN0ZW5lci5idXR0b25zKXt2YXIgZT1uKCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGUpfX0pKSx0LnN0YXRpY01vZGV8fHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwoZnVuY3Rpb24ocil7ZSYmZS5lbWl0JiZlLmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6cixsYXllcjp0LmlkfSl9KSwhMSkpLHQuZ2xwbG90Lm9uY29udGV4dGxvc3M9ZnVuY3Rpb24oKXt0LnJlY292ZXJDb250ZXh0KCl9LHQuZ2xwbG90Lm9ucmVuZGVyPWZ1bmN0aW9uKCl7dC5yZW5kZXIoKX0sITB9LHcucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLHI9ZS5ncmFwaERpdixuPWUuc3ZnQ29udGFpbmVyLGk9ZS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ci5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0ocik7dmFyIGE9ci5fZnVsbExheW91dC5faW52U2NhbGVYLG89ci5fZnVsbExheW91dC5faW52U2NhbGVZLHM9aS53aWR0aCphLGw9aS5oZWlnaHQqbztuLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgIitzKyIgIitsKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixzKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsbCksYihlKSxlLmdscGxvdC5heGVzLnVwZGF0ZShlLmF4ZXNPcHRpb25zKTtmb3IodmFyIGM9T2JqZWN0LmtleXMoZS50cmFjZXMpLHU9bnVsbCxoPWUuZ2xwbG90LnNlbGVjdGlvbixtPTA7bTxjLmxlbmd0aDsrK20pInNraXAiIT09KHQ9ZS50cmFjZXNbY1ttXV0pLmRhdGEuaG92ZXJpbmZvJiZ0LmhhbmRsZVBpY2soaCkmJih1PXQpLHQuc2V0Q29udG91ckxldmVscyYmdC5zZXRDb250b3VyTGV2ZWxzKCk7ZnVuY3Rpb24gZyh0LHIsbil7dmFyIGk9ZS5mdWxsU2NlbmVMYXlvdXRbdCsiYXhpcyJdO3JldHVybiJsb2ciIT09aS50eXBlJiYocj1pLmQybChyKSkscC5ob3ZlckxhYmVsVGV4dChpLHIsbil9aWYobnVsbCE9PXUpe3ZhciB5PXYoZS5nbHBsb3QuY2FtZXJhUGFyYW1zLGguZGF0YUNvb3JkaW5hdGUpO3Q9dS5kYXRhO3ZhciB4LF89ci5fZnVsbERhdGFbdC5pbmRleF0sdz1oLmluZGV4LFQ9e3hMYWJlbDpnKCJ4IixoLnRyYWNlQ29vcmRpbmF0ZVswXSx0Lnhob3ZlcmZvcm1hdCkseUxhYmVsOmcoInkiLGgudHJhY2VDb29yZGluYXRlWzFdLHQueWhvdmVyZm9ybWF0KSx6TGFiZWw6ZygieiIsaC50cmFjZUNvb3JkaW5hdGVbMl0sdC56aG92ZXJmb3JtYXQpfSxrPWQuY2FzdEhvdmVyaW5mbyhfLGUuZnVsbExheW91dCx3KSxBPShrfHwiIikuc3BsaXQoIisiKSxNPWsmJiJhbGwiPT09aztfLmhvdmVydGVtcGxhdGV8fE18fCgtMT09PUEuaW5kZXhPZigieCIpJiYoVC54TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZigieSIpJiYoVC55TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZigieiIpJiYoVC56TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZigidGV4dCIpJiYoaC50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PUEuaW5kZXhPZigibmFtZSIpJiYodS5uYW1lPXZvaWQgMCkpO3ZhciBTPVtdOyJjb25lIj09PXQudHlwZXx8InN0cmVhbXR1YmUiPT09dC50eXBlPyhULnVMYWJlbD1nKCJ4IixoLnRyYWNlQ29vcmRpbmF0ZVszXSx0LnVob3ZlcmZvcm1hdCksKE18fC0xIT09QS5pbmRleE9mKCJ1IikpJiZTLnB1c2goInU6ICIrVC51TGFiZWwpLFQudkxhYmVsPWcoInkiLGgudHJhY2VDb29yZGluYXRlWzRdLHQudmhvdmVyZm9ybWF0KSwoTXx8LTEhPT1BLmluZGV4T2YoInYiKSkmJlMucHVzaCgidjogIitULnZMYWJlbCksVC53TGFiZWw9ZygieiIsaC50cmFjZUNvb3JkaW5hdGVbNV0sdC53aG92ZXJmb3JtYXQpLChNfHwtMSE9PUEuaW5kZXhPZigidyIpKSYmUy5wdXNoKCJ3OiAiK1Qud0xhYmVsKSxULm5vcm1MYWJlbD1oLnRyYWNlQ29vcmRpbmF0ZVs2XS50b1ByZWNpc2lvbigzKSwoTXx8LTEhPT1BLmluZGV4T2YoIm5vcm0iKSkmJlMucHVzaCgibm9ybTogIitULm5vcm1MYWJlbCksInN0cmVhbXR1YmUiPT09dC50eXBlJiYoVC5kaXZlcmdlbmNlTGFiZWw9aC50cmFjZUNvb3JkaW5hdGVbN10udG9QcmVjaXNpb24oMyksKE18fC0xIT09QS5pbmRleE9mKCJkaXZlcmdlbmNlIikpJiZTLnB1c2goImRpdmVyZ2VuY2U6ICIrVC5kaXZlcmdlbmNlTGFiZWwpKSxoLnRleHRMYWJlbCYmUy5wdXNoKGgudGV4dExhYmVsKSx4PVMuam9pbigiPGJyPiIpKToiaXNvc3VyZmFjZSI9PT10LnR5cGV8fCJ2b2x1bWUiPT09dC50eXBlPyhULnZhbHVlTGFiZWw9cC5ob3ZlckxhYmVsVGV4dChlLl9tb2NrQXhpcyxlLl9tb2NrQXhpcy5kMmwoaC50cmFjZUNvb3JkaW5hdGVbM10pLHQudmFsdWVob3ZlcmZvcm1hdCksUy5wdXNoKCJ2YWx1ZTogIitULnZhbHVlTGFiZWwpLGgudGV4dExhYmVsJiZTLnB1c2goaC50ZXh0TGFiZWwpLHg9Uy5qb2luKCI8YnI+IikpOng9aC50ZXh0TGFiZWw7dmFyIEU9e3g6aC50cmFjZUNvb3JkaW5hdGVbMF0seTpoLnRyYWNlQ29vcmRpbmF0ZVsxXSx6OmgudHJhY2VDb29yZGluYXRlWzJdLGRhdGE6Xy5faW5wdXQsZnVsbERhdGE6XyxjdXJ2ZU51bWJlcjpfLmluZGV4LHBvaW50TnVtYmVyOnd9O2QuYXBwZW5kQXJyYXlQb2ludFZhbHVlKEUsXyx3KSx0Ll9tb2R1bGUuZXZlbnREYXRhJiYoRT1fLl9tb2R1bGUuZXZlbnREYXRhKEUsaCxfLHt9LHcpKTt2YXIgTD17cG9pbnRzOltFXX07aWYoZS5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlKXt2YXIgQz1bXTtkLmxvbmVIb3Zlcih7dHJhY2U6Xyx4OiguNSsuNSp5WzBdL3lbM10pKnMseTooLjUtLjUqeVsxXS95WzNdKSpsLHhMYWJlbDpULnhMYWJlbCx5TGFiZWw6VC55TGFiZWwsekxhYmVsOlQuekxhYmVsLHRleHQ6eCxuYW1lOnUubmFtZSxjb2xvcjpkLmNhc3RIb3Zlck9wdGlvbihfLHcsImJnY29sb3IiKXx8dS5jb2xvcixib3JkZXJDb2xvcjpkLmNhc3RIb3Zlck9wdGlvbihfLHcsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpkLmNhc3RIb3Zlck9wdGlvbihfLHcsImZvbnQuZmFtaWx5IiksZm9udFNpemU6ZC5jYXN0SG92ZXJPcHRpb24oXyx3LCJmb250LnNpemUiKSxmb250Q29sb3I6ZC5jYXN0SG92ZXJPcHRpb24oXyx3LCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpkLmNhc3RIb3Zlck9wdGlvbihfLHcsIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246ZC5jYXN0SG92ZXJPcHRpb24oXyx3LCJhbGlnbiIpLGhvdmVydGVtcGxhdGU6Zi5jYXN0T3B0aW9uKF8sdywiaG92ZXJ0ZW1wbGF0ZSIpLGhvdmVydGVtcGxhdGVMYWJlbHM6Zi5leHRlbmRGbGF0KHt9LEUsVCksZXZlbnREYXRhOltFXX0se2NvbnRhaW5lcjpuLGdkOnIsaW5PdXRfYmJveDpDfSksRS5iYm94PUNbMF19aC5idXR0b25zJiZoLmRpc3RhbmNlPDU/ci5lbWl0KCJwbG90bHlfY2xpY2siLEwpOnIuZW1pdCgicGxvdGx5X2hvdmVyIixMKSx0aGlzLm9sZEV2ZW50RGF0YT1MfWVsc2UgZC5sb25lVW5ob3ZlcihuKSx0aGlzLm9sZEV2ZW50RGF0YSYmci5lbWl0KCJwbG90bHlfdW5ob3ZlciIsdGhpcy5vbGRFdmVudERhdGEpLHRoaXMub2xkRXZlbnREYXRhPXZvaWQgMDtlLmRyYXdBbm5vdGF0aW9ucyhlKX0sdy5yZWNvdmVyQ29udGV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5nbHBsb3QuZGlzcG9zZSgpO3ZhciBlPWZ1bmN0aW9uKCl7dC5nbHBsb3QuZ2wuaXNDb250ZXh0TG9zdCgpP3JlcXVlc3RBbmltYXRpb25GcmFtZShlKTp0LmluaXRpYWxpemVHTFBsb3QoKT90LnBsb3QuYXBwbHkodCx0LnBsb3RBcmdzKTpmLmVycm9yKCJDYXRhc3Ryb3BoaWMgYW5kIHVucmVjb3ZlcmFibGUgV2ViR0wgZXJyb3IuIENvbnRleHQgbG9zdC4iKX07cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpfTt2YXIgaz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIEEodCxlLHIpe2Zvcih2YXIgbj10LmZ1bGxTY2VuZUxheW91dCxpPTA7aTwzO2krKyl7dmFyIGE9a1tpXSxvPWEuY2hhckF0KDApLHM9blthXSxsPWVbb10sYz1lW28rImNhbGVuZGFyIl0sdT1lWyJfIitvKyJsZW5ndGgiXTtpZihmLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpZm9yKHZhciBoLHA9MDtwPCh1fHxsLmxlbmd0aCk7cCsrKWlmKGYuaXNBcnJheU9yVHlwZWRBcnJheShsW3BdKSlmb3IodmFyIGQ9MDtkPGxbcF0ubGVuZ3RoOysrZCloPXMuZDJsKGxbcF1bZF0sMCxjKSwhaXNOYU4oaCkmJmlzRmluaXRlKGgpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGgpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxoKSk7ZWxzZSBoPXMuZDJsKGxbcF0sMCxjKSwhaXNOYU4oaCkmJmlzRmluaXRlKGgpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGgpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxoKSk7ZWxzZSByWzBdW2ldPU1hdGgubWluKHJbMF1baV0sMCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLHUtMSl9fXcucGxvdD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5wbG90QXJncz1bdCxlLHJdLCF0aGlzLmdscGxvdC5jb250ZXh0TG9zdCl7dmFyIG4saSxhLG8scyxsLGM9ZVt0aGlzLmlkXSx1PXJbdGhpcy5pZF07dGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9Yyx0aGlzLmF4ZXNPcHRpb25zLm1lcmdlKGUsYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRWaWV3cG9ydChjKSx0aGlzLnVwZGF0ZUZ4KGMuZHJhZ21vZGUsYy5ob3Zlcm1vZGUpLHRoaXMuY2FtZXJhLmVuYWJsZVdoZWVsPXRoaXMuZ3JhcGhEaXYuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2wzZCx0aGlzLmdscGxvdC5zZXRDbGVhckNvbG9yKG0oYy5iZ2NvbG9yKSksdGhpcy5zZXRDb252ZXJ0KHMpLHQ/QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTp0PVtdO3ZhciBmPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiYwIT09bi5fbGVuZ3RoJiZBKHRoaXMsbixmKTshZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsbj1yLmFubm90YXRpb25zfHxbXSxpPTA7aTwzO2krKylmb3IodmFyIGE9a1tpXSxvPWEuY2hhckF0KDApLHM9clthXSxsPTA7bDxuLmxlbmd0aDtsKyspe3ZhciBjPW5bbF07aWYoYy52aXNpYmxlKXt2YXIgdT1zLnIybChjW29dKTshaXNOYU4odSkmJmlzRmluaXRlKHUpJiYoZVswXVtpXT1NYXRoLm1pbihlWzBdW2ldLHUpLGVbMV1baV09TWF0aC5tYXgoZVsxXVtpXSx1KSl9fX0odGhpcyxmKTt2YXIgaD1bMSwxLDFdO2ZvcihvPTA7bzwzOysrbylmWzFdW29dPT09ZlswXVtvXT9oW29dPTE6aFtvXT0xLyhmWzFdW29dLWZbMF1bb10pO2Zvcih0aGlzLmRhdGFTY2FsZT1oLHRoaXMuY29udmVydEFubm90YXRpb25zKHRoaXMpLGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJjAhPT1uLl9sZW5ndGgmJigoaT10aGlzLnRyYWNlc1tuLnVpZF0pP2kuZGF0YS50eXBlPT09bi50eXBlP2kudXBkYXRlKG4pOihpLmRpc3Bvc2UoKSxpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpOihpPW4uX21vZHVsZS5wbG90KHRoaXMsbiksdGhpcy50cmFjZXNbbi51aWRdPWkpLGkubmFtZT1uLm5hbWUpO3ZhciBwPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0OmZvcihhPTA7YTxwLmxlbmd0aDsrK2Epe2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28paWYodFtvXS51aWQ9PT1wW2FdJiYhMD09PXRbb10udmlzaWJsZSYmMCE9PXRbb10uX2xlbmd0aCljb250aW51ZSB0OyhpPXRoaXMudHJhY2VzW3BbYV1dKS5kaXNwb3NlKCksZGVsZXRlIHRoaXMudHJhY2VzW3BbYV1dfXRoaXMuZ2xwbG90Lm9iamVjdHMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuZGF0YS5pbmRleC1lLl90cmFjZS5kYXRhLmluZGV4fSkpO3ZhciBkLGc9W1swLDAsMF0sWzAsMCwwXV0sdj1bXSx5PXt9O2ZvcihhPTA7YTwzOysrYSl7aWYoKGw9KHM9Y1trW2FdXSkudHlwZSlpbiB5Pyh5W2xdLmFjYyo9aFthXSx5W2xdLmNvdW50Kz0xKTp5W2xdPXthY2M6aFthXSxjb3VudDoxfSxzLmF1dG9yYW5nZSl7Z1swXVthXT0xLzAsZ1sxXVthXT0tMS8wO3ZhciB4PXRoaXMuZ2xwbG90Lm9iamVjdHMsYj10aGlzLmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9uc3x8W10sXz1zLl9uYW1lLmNoYXJBdCgwKTtmb3Iobz0wO288eC5sZW5ndGg7bysrKXt2YXIgdz14W29dLFQ9dy5ib3VuZHMsTT13Ll90cmFjZS5kYXRhLl9wYWR8fDA7IkVycm9yQmFycyI9PT13LmNvbnN0cnVjdG9yLm5hbWUmJnMuX2xvd2VyTG9nRXJyb3JCb3VuZD9nWzBdW2FdPU1hdGgubWluKGdbMF1bYV0scy5fbG93ZXJMb2dFcnJvckJvdW5kKTpnWzBdW2FdPU1hdGgubWluKGdbMF1bYV0sVFswXVthXS9oW2FdLU0pLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSxUWzFdW2FdL2hbYV0rTSl9Zm9yKG89MDtvPGIubGVuZ3RoO28rKyl7dmFyIFM9YltvXTtpZihTLnZpc2libGUpe3ZhciBFPXMucjJsKFNbX10pO2dbMF1bYV09TWF0aC5taW4oZ1swXVthXSxFKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sRSl9fWlmKCJyYW5nZW1vZGUiaW4gcyYmInRvemVybyI9PT1zLnJhbmdlbW9kZSYmKGdbMF1bYV09TWF0aC5taW4oZ1swXVthXSwwKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sMCkpLGdbMF1bYV0+Z1sxXVthXSlnWzBdW2FdPS0xLGdbMV1bYV09MTtlbHNle3ZhciBMPWdbMV1bYV0tZ1swXVthXTtnWzBdW2FdLT1MLzMyLGdbMV1bYV0rPUwvMzJ9aWYoInJldmVyc2VkIj09PXMuYXV0b3JhbmdlKXt2YXIgQz1nWzBdW2FdO2dbMF1bYV09Z1sxXVthXSxnWzFdW2FdPUN9fWVsc2V7dmFyIFA9cy5yYW5nZTtnWzBdW2FdPXMucjJsKFBbMF0pLGdbMV1bYV09cy5yMmwoUFsxXSl9Z1swXVthXT09PWdbMV1bYV0mJihnWzBdW2FdLT0xLGdbMV1bYV0rPTEpLHZbYV09Z1sxXVthXS1nWzBdW2FdLHRoaXMuZ2xwbG90LnNldEJvdW5kcyhhLHttaW46Z1swXVthXSpoW2FdLG1heDpnWzFdW2FdKmhbYV19KX12YXIgST1jLmFzcGVjdG1vZGU7aWYoImN1YmUiPT09SSlkPVsxLDEsMV07ZWxzZSBpZigibWFudWFsIj09PUkpe3ZhciBPPWMuYXNwZWN0cmF0aW87ZD1bTy54LE8ueSxPLnpdfWVsc2V7aWYoImF1dG8iIT09SSYmImRhdGEiIT09SSl0aHJvdyBuZXcgRXJyb3IoInNjZW5lLmpzIGFzcGVjdFJhdGlvIHdhcyBub3Qgb25lIG9mIHRoZSBlbnVtZXJhdGVkIHR5cGVzIik7dmFyIHo9WzEsMSwxXTtmb3IoYT0wO2E8MzsrK2Epe3ZhciBEPXlbbD0ocz1jW2tbYV1dKS50eXBlXTt6W2FdPU1hdGgucG93KEQuYWNjLDEvRC5jb3VudCkvaFthXX1kPSJkYXRhIj09PUl8fE1hdGgubWF4LmFwcGx5KG51bGwseikvTWF0aC5taW4uYXBwbHkobnVsbCx6KTw9ND96OlsxLDEsMV19Yy5hc3BlY3RyYXRpby54PXUuYXNwZWN0cmF0aW8ueD1kWzBdLGMuYXNwZWN0cmF0aW8ueT11LmFzcGVjdHJhdGlvLnk9ZFsxXSxjLmFzcGVjdHJhdGlvLno9dS5hc3BlY3RyYXRpby56PWRbMl0sdGhpcy5nbHBsb3Quc2V0QXNwZWN0cmF0aW8oYy5hc3BlY3RyYXRpbyksdGhpcy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpb3x8KHRoaXMudmlld0luaXRpYWwuYXNwZWN0cmF0aW89e3g6Yy5hc3BlY3RyYXRpby54LHk6Yy5hc3BlY3RyYXRpby55LHo6Yy5hc3BlY3RyYXRpby56fSksdGhpcy52aWV3SW5pdGlhbC5hc3BlY3Rtb2RlfHwodGhpcy52aWV3SW5pdGlhbC5hc3BlY3Rtb2RlPWMuYXNwZWN0bW9kZSk7dmFyIFI9Yy5kb21haW58fG51bGwsRj1lLl9zaXplfHxudWxsO2lmKFImJkYpe3ZhciBCPXRoaXMuY29udGFpbmVyLnN0eWxlO0IucG9zaXRpb249ImFic29sdXRlIixCLmxlZnQ9Ri5sK1IueFswXSpGLncrInB4IixCLnRvcD1GLnQrKDEtUi55WzFdKSpGLmgrInB4IixCLndpZHRoPUYudyooUi54WzFdLVIueFswXSkrInB4IixCLmhlaWdodD1GLmgqKFIueVsxXS1SLnlbMF0pKyJweCJ9dGhpcy5nbHBsb3QucmVkcmF3KCl9fSx3LmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmdscGxvdCYmKHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbCx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5nbHBsb3Q9bnVsbCl9LHcuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSkse3VwOnt4Oih0PXRoaXMuY2FtZXJhKS51cFswXSx5OnQudXBbMV0sejp0LnVwWzJdfSxjZW50ZXI6e3g6dC5jZW50ZXJbMF0seTp0LmNlbnRlclsxXSx6OnQuY2VudGVyWzJdfSxleWU6e3g6dC5leWVbMF0seTp0LmV5ZVsxXSx6OnQuZXllWzJdfSxwcm9qZWN0aW9uOnt0eXBlOiEwPT09dC5fb3J0aG8/Im9ydGhvZ3JhcGhpYyI6InBlcnNwZWN0aXZlIn19fSx3LnNldFZpZXdwb3J0PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5jYW1lcmE7dGhpcy5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsW1soZT1yKS5leWUueCxlLmV5ZS55LGUuZXllLnpdLFtlLmNlbnRlci54LGUuY2VudGVyLnksZS5jZW50ZXIuel0sW2UudXAueCxlLnVwLnksZS51cC56XV0pLHRoaXMuZ2xwbG90LnNldEFzcGVjdHJhdGlvKHQuYXNwZWN0cmF0aW8pLCJvcnRob2dyYXBoaWMiPT09ci5wcm9qZWN0aW9uLnR5cGUhPT10aGlzLmNhbWVyYS5fb3J0aG8mJih0aGlzLmdscGxvdC5yZWRyYXcoKSx0aGlzLmdscGxvdC5jbGVhclJHQkEoKSx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5pbml0aWFsaXplR0xQbG90KCkpfSx3LmlzQ2FtZXJhQ2hhbmdlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENhbWVyYSgpLHI9Zi5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKS5nZXQoKTtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBpPVsidXAiLCJjZW50ZXIiLCJleWUiXSxhPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbaVtyXV0mJnRbaVtyXV1bYVtuXV09PT1lW2lbcl1dW2Fbbl1dfXZhciBpPSExO2lmKHZvaWQgMD09PXIpaT0hMDtlbHNle2Zvcih2YXIgYT0wO2E8MzthKyspZm9yKHZhciBvPTA7bzwzO28rKylpZighbihlLHIsYSxvKSl7aT0hMDticmVha30oIXIucHJvamVjdGlvbnx8ZS5wcm9qZWN0aW9uJiZlLnByb2plY3Rpb24udHlwZSE9PXIucHJvamVjdGlvbi50eXBlKSYmKGk9ITApfXJldHVybiBpfSx3LmlzQXNwZWN0Q2hhbmdlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdscGxvdC5nZXRBc3BlY3RyYXRpbygpLHI9Zi5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5hc3BlY3RyYXRpbyIpLmdldCgpO3JldHVybiB2b2lkIDA9PT1yfHxyLnghPT1lLnh8fHIueSE9PWUueXx8ci56IT09ZS56fSx3LnNhdmVMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM9dGhpcy5mdWxsTGF5b3V0LGw9dGhpcy5pc0NhbWVyYUNoYW5nZWQodCksYz10aGlzLmlzQXNwZWN0Q2hhbmdlZCh0KSxoPWx8fGM7aWYoaCl7dmFyIHA9e307aWYobCYmKGU9dGhpcy5nZXRDYW1lcmEoKSxuPShyPWYubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuY2FtZXJhIikpLmdldCgpLHBbdGhpcy5pZCsiLmNhbWVyYSJdPW4pLGMmJihpPXRoaXMuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCksbz0oYT1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikpLmdldCgpLHBbdGhpcy5pZCsiLmFzcGVjdHJhdGlvIl09byksdS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LHMuX3ByZUdVSSxwKSxsKXIuc2V0KGUpLGYubmVzdGVkUHJvcGVydHkocyx0aGlzLmlkKyIuY2FtZXJhIikuc2V0KGUpO2lmKGMpYS5zZXQoaSksZi5uZXN0ZWRQcm9wZXJ0eShzLHRoaXMuaWQrIi5hc3BlY3RyYXRpbyIpLnNldChpKSx0aGlzLmdscGxvdC5yZWRyYXcoKX1yZXR1cm4gaH0sdy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO2lmKHIpaWYoIm9yYml0Ij09PXQpci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIjtlbHNlIGlmKCJ0dXJudGFibGUiPT09dCl7ci51cD1bMCwwLDFdLHIubW9kZT0idHVybnRhYmxlIixyLmtleUJpbmRpbmdNb2RlPSJyb3RhdGUiO3ZhciBuPXRoaXMuZ3JhcGhEaXYsaT1uLl9mdWxsTGF5b3V0LGE9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLG89YS51cC54LHM9YS51cC55LGw9YS51cC56O2lmKGwvTWF0aC5zcXJ0KG8qbytzKnMrbCpsKTwuOTk5KXt2YXIgYz10aGlzLmlkKyIuY2FtZXJhLnVwIixoPXt4OjAseTowLHo6MX0scD17fTtwW2NdPWg7dmFyIGQ9bi5sYXlvdXQ7dS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixkLGkuX3ByZUdVSSxwKSxhLnVwPWgsZi5uZXN0ZWRQcm9wZXJ0eShkLGMpLnNldChoKX19ZWxzZSByLmtleUJpbmRpbmdNb2RlPXQ7dGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LHcudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGk9ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGE9bmV3IFVpbnQ4QXJyYXkocippKjQpO2UucmVhZFBpeGVscygwLDAscixpLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsYSksZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9ci0xO248aTsrK24sLS1pKWZvcih2YXIgYT0wO2E8ZTsrK2EpZm9yKHZhciBvPTA7bzw0Oysrbyl7dmFyIHM9NCooZSpuK2EpK28sbD00KihlKmkrYSkrbyxjPXRbc107dFtzXT10W2xdLHRbbF09Y319KGEscixpKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxyOysrbilmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgYT00KihlKm4raSksbz10W2ErM107aWYobz4wKWZvcih2YXIgcz0yNTUvbyxsPTA7bDwzOysrbCl0W2ErbF09TWF0aC5taW4ocyp0W2ErbF0sMjU1KX19KGEscixpKTt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtvLndpZHRoPXIsby5oZWlnaHQ9aTt2YXIgcyxsPW8uZ2V0Q29udGV4dCgiMmQiKSxjPWwuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7c3dpdGNoKGMuZGF0YS5zZXQoYSksbC5wdXRJbWFnZURhdGEoYywwLDApLHQpe2Nhc2UianBlZyI6cz1vLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2Uid2VicCI6cz1vLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2RlZmF1bHQ6cz1vLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9cmV0dXJuIHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksc30sdy5zZXRDb252ZXJ0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzO3QrKyl7dmFyIGU9dGhpcy5mdWxsU2NlbmVMYXlvdXRba1t0XV07cC5zZXRDb252ZXJ0KGUsdGhpcy5mdWxsTGF5b3V0KSxlLnNldFNjYWxlPWYubm9vcH19LHcubWFrZTR0aERpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQ7dGhpcy5fbW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0scC5zZXRDb252ZXJ0KHRoaXMuX21vY2tBeGlzLHQpfSxlLmV4cG9ydHM9X30seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMjAsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NTI1LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo1MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vbGF5b3V0L2NvbnZlcnQiOjYwMiwiLi9sYXlvdXQvc3Bpa2VzIjo2MDUsIi4vbGF5b3V0L3RpY2tfbWFya3MiOjYwNiwiLi9wcm9qZWN0Ijo2MDcsImhhcy1wYXNzaXZlLWV2ZW50cyI6MjI5LCJ3ZWJnbC1jb250ZXh0IjozMzF9XSw2MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8dC5sZW5ndGg7Zm9yKHZhciBpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKylpW2FdPVt0W2FdLGVbYV0sclthXV07cmV0dXJuIGl9fSx7fV0sNjEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksYT10KCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvYXR0cmlidXRlcyIpLHM9dCgiLi9wYWRfYXR0cmlidXRlcyIpLGw9dCgiLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1uKHtlZGl0VHlwZToiY2FsYyJ9KTtjLmZhbWlseS5kZmx0PSciT3BlbiBTYW5zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLGMuc2l6ZS5kZmx0PTEyLGMuY29sb3IuZGZsdD1hLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Zm9udDpjLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImNvbnRhaW5lciIsdmFsdWVzOlsiY29udGFpbmVyIiwicGFwZXIiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiYXV0byIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxwYWQ6bChzKHtlZGl0VHlwZToibGF5b3V0c3R5bGUifSkse30pLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHVuaWZvcm10ZXh0Onttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJoaWRlIiwic2hvdyJdLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxtaW5zaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sYXV0b3NpemU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MTAsZGZsdDo3MDAsZWRpdFR5cGU6InBsb3QifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NDUwLGVkaXRUeXBlOiJwbG90In0sbWFyZ2luOntsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSxyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSx0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAwLGVkaXRUeXBlOiJwbG90In0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGF1dG9leHBhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbXB1dGVkOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJwbG90In0scGxvdF9iZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmJhY2tncm91bmQsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sYXV0b3R5cGVudW1iZXJzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb252ZXJ0IHR5cGVzIiwic3RyaWN0Il0sZGZsdDoiY29udmVydCB0eXBlcyIsZWRpdFR5cGU6ImNhbGMifSxzZXBhcmF0b3JzOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0saGlkZXNvdXJjZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToibGVnZW5kIn0sY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZGZsdDphLmRlZmF1bHRzLGVkaXRUeXBlOiJjYWxjIn0sZGF0YXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHNlbGVjdGlvbnJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sdGVtcGxhdGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxuZXdzaGFwZTpvLm5ld3NoYXBlLGFjdGl2ZXNoYXBlOm8uYWN0aXZlc2hhcGUsbWV0YTp7dmFsVHlwZToiYW55IixhcnJheU9rOiEwLGVkaXRUeXBlOiJwbG90In0sdHJhbnNpdGlvbjpsKHt9LGkudHJhbnNpdGlvbix7ZWRpdFR5cGU6Im5vbmUifSksX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZToibGF5b3V0c3R5bGUifSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2NSwiLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9hdHRyaWJ1dGVzIjo0NTEsIi4uL2xpYi9leHRlbmQiOjQ5MywiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6NTQ4LCIuL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuL3BhZF9hdHRyaWJ1dGVzIjo2MTh9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxpPSdceGE5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycsYT1bJ1x4YTkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vY2FydG8uY29tLyI+Q2FydG88L2E+JyxpXS5qb2luKCIgIiksbz1bJ01hcCB0aWxlcyBieSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPicsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+JywifCIsJ0RhdGEgYnkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9EYkw8L2E+J10uam9pbigiICIpLHM9eyJvcGVuLXN0cmVldC1tYXAiOntpZDoib3NtIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1vc20tdGlsZXMiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOmksdGlsZXM6WyJodHRwczovL2EudGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmciLCJodHRwczovL2IudGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LW9zbS10aWxlcyIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1vc20tdGlsZXMiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJ3aGl0ZS1iZyI6e2lkOiJ3aGl0ZS1iZyIsdmVyc2lvbjo4LHNvdXJjZXM6e30sbGF5ZXJzOlt7aWQ6IndoaXRlLWJnIix0eXBlOiJiYWNrZ3JvdW5kIixwYWludDp7ImJhY2tncm91bmQtY29sb3IiOiIjRkZGRkZGIn0sbWluem9vbTowLG1heHpvb206MjJ9XX0sImNhcnRvLXBvc2l0cm9uIjp7aWQ6ImNhcnRvLXBvc2l0cm9uIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1jYXJ0by1wb3NpdHJvbiI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246YSx0aWxlczpbImh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1jLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9saWdodF9hbGwve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1jYXJ0by1wb3NpdHJvbiIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1jYXJ0by1wb3NpdHJvbiIsbWluem9vbTowLG1heHpvb206MjJ9XX0sImNhcnRvLWRhcmttYXR0ZXIiOntpZDoiY2FydG8tZGFya21hdHRlciIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktY2FydG8tZGFya21hdHRlciI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246YSx0aWxlczpbImh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1jLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9kYXJrX2FsbC97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktY2FydG8tZGFya21hdHRlciIsbWluem9vbTowLG1heHpvb206MjJ9XX0sInN0YW1lbi10ZXJyYWluIjp7aWQ6InN0YW1lbi10ZXJyYWluIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1zdGFtZW4tdGVycmFpbiI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246byx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvdGVycmFpbi97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LXN0YW1lbi10ZXJyYWluIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LXN0YW1lbi10ZXJyYWluIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwic3RhbWVuLXRvbmVyIjp7aWQ6InN0YW1lbi10b25lciIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXRvbmVyIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjpvLHRpbGVzOlsiaHR0cHM6Ly9zdGFtZW4tdGlsZXMuYS5zc2wuZmFzdGx5Lm5ldC90b25lci97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LXN0YW1lbi10b25lciIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4tdG9uZXIiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJzdGFtZW4td2F0ZXJjb2xvciI6e2lkOiJzdGFtZW4td2F0ZXJjb2xvciIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXdhdGVyY29sb3IiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOlsnTWFwIHRpbGVzIGJ5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL3N0YW1lbi5jb20iPlN0YW1lbiBEZXNpZ248L2E+JywndW5kZXIgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAiPkNDIEJZIDMuMDwvYT4nLCJ8IiwnRGF0YSBieSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9vcGVuc3RyZWV0bWFwLm9yZyI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJywndW5kZXIgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAiPkNDIEJZIFNBPC9hPiddLmpvaW4oIiAiKSx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvd2F0ZXJjb2xvci97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIixtaW56b29tOjAsbWF4em9vbToyMn1dfX0sbD1uKHMpO2UuZXhwb3J0cz17cmVxdWlyZWRWZXJzaW9uOiIxLjEwLjEiLHN0eWxlVXJsUHJlZml4OiJtYXBib3g6Ly9zdHlsZXMvbWFwYm94LyIsc3R5bGVVcmxTdWZmaXg6InY5IixzdHlsZVZhbHVlc01hcGJveDpbImJhc2ljIiwic3RyZWV0cyIsIm91dGRvb3JzIiwibGlnaHQiLCJkYXJrIiwic2F0ZWxsaXRlIiwic2F0ZWxsaXRlLXN0cmVldHMiXSxzdHlsZVZhbHVlRGZsdDoiYmFzaWMiLHN0eWxlc05vbk1hcGJveDpzLHN0eWxlVmFsdWVzTm9uTWFwYm94OmwsdHJhY2VMYXllclByZWZpeDoicGxvdGx5LXRyYWNlLWxheWVyLSIsbGF5b3V0TGF5ZXJQcmVmaXg6InBsb3RseS1sYXlvdXQtbGF5ZXItIix3cm9uZ1ZlcnNpb25FcnJvck1zZzpbIllvdXIgY3VzdG9tIHBsb3RseS5qcyBidW5kbGUgaXMgbm90IHVzaW5nIHRoZSBjb3JyZWN0IG1hcGJveC1nbCB2ZXJzaW9uIiwiUGxlYXNlIGluc3RhbGwgbWFwYm94LWdsQDEuMTAuMS4iXS5qb2luKCJcbiIpLG5vQWNjZXNzVG9rZW5FcnJvck1zZzpbIk1pc3NpbmcgTWFwYm94IGFjY2VzcyB0b2tlbi4iLCJNYXBib3ggdHJhY2UgdHlwZSByZXF1aXJlIGEgTWFwYm94IGFjY2VzcyB0b2tlbiB0byBiZSByZWdpc3RlcmVkLiIsIkZvciBleGFtcGxlOiIsIiAgUGxvdGx5Lm5ld1Bsb3QoZ2QsIGRhdGEsIGxheW91dCwgeyBtYXBib3hBY2Nlc3NUb2tlbjogJ215LWFjY2Vzcy10b2tlbicgfSk7IiwiTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9kZWZpbmUtYWNjZXNzLXRva2VuLyJdLmpvaW4oIlxuIiksbWlzc2luZ1N0eWxlRXJyb3JNc2c6WyJObyB2YWxpZCBtYXBib3ggc3R5bGUgZm91bmQsIHBsZWFzZSBzZXQgYG1hcGJveC5zdHlsZWAgdG8gb25lIG9mOiIsbC5qb2luKCIsICIpLCJvciByZWdpc3RlciBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gdXNlIGEgTWFwYm94LXNlcnZlZCBzdHlsZS4iXS5qb2luKCJcbiIpLG11bHRpcGxlVG9rZW5zRXJyb3JNc2c6WyJTZXQgbXVsdGlwbGUgbWFwYm94IGFjY2VzcyB0b2tlbiBhY3Jvc3MgZGlmZmVyZW50IG1hcGJveCBzdWJwbG90LCIsInVzaW5nIGZpcnN0IHRva2VuIGZvdW5kIGFzIG1hcGJveC1nbCBkb2VzIG5vdCBhbGxvdyBtdWx0aXBsZWFjY2VzcyB0b2tlbnMgb24gdGhlIHNhbWUgcGFnZS4iXS5qb2luKCJcbiIpLG1hcE9uRXJyb3JNc2c6Ik1hcGJveCBlcnJvci4iLG1hcGJveExvZ286e3BhdGgwOiJtIDEwLjUsMS4yNCBjIC01LjExLDAgLTkuMjUsNC4xNSAtOS4yNSw5LjI1IDAsNS4xIDQuMTUsOS4yNSA5LjI1LDkuMjUgNS4xLDAgOS4yNSwtNC4xNSA5LjI1LC05LjI1IDAsLTUuMTEgLTQuMTQsLTkuMjUgLTkuMjUsLTkuMjUgeiBtIDQuMzksMTEuNTMgYyAtMS45MywxLjkzIC00Ljc4LDIuMzEgLTYuNywyLjMxIC0wLjcsMCAtMS40MSwtMC4wNSAtMi4xLC0wLjE2IDAsMCAtMS4wMiwtNS42NCAyLjE0LC04LjgxIDAuODMsLTAuODMgMS45NSwtMS4yOCAzLjEzLC0xLjI4IDEuMjcsMCAyLjQ5LDAuNTEgMy4zOSwxLjQyIDEuODQsMS44NCAxLjg5LDQuNzUgMC4xNCw2LjUyIHoiLHBhdGgxOiJNIDEwLjUsLTAuMDEgQyA0LjcsLTAuMDEgMCw0LjcgMCwxMC40OSBjIDAsNS43OSA0LjcsMTAuNSAxMC41LDEwLjUgNS44LDAgMTAuNSwtNC43IDEwLjUsLTEwLjUgQyAyMC45OSw0LjcgMTYuMywtMC4wMSAxMC41LC0wLjAxIFogbSAwLDE5Ljc1IGMgLTUuMTEsMCAtOS4yNSwtNC4xNSAtOS4yNSwtOS4yNSAwLC01LjEgNC4xNCwtOS4yNiA5LjI1LC05LjI2IDUuMTEsMCA5LjI1LDQuMTUgOS4yNSw5LjI1IDAsNS4xMyAtNC4xNCw5LjI2IC05LjI1LDkuMjYgeiIscGF0aDI6Ik0gMTQuNzQsNi4yNSBDIDEyLjksNC40MSA5Ljk4LDQuMzUgOC4yMyw2LjEgNS4wNyw5LjI3IDYuMDksMTQuOTEgNi4wOSwxNC45MSBjIDAsMCA1LjY0LDEuMDIgOC44MSwtMi4xNCBDIDE2LjY0LDExIDE2LjU5LDguMDkgMTQuNzQsNi4yNSBaIG0gLTIuMjcsNC4wOSAtMC45MSwxLjg3IC0wLjksLTEuODcgLTEuODYsLTAuOTEgMS44NiwtMC45IDAuOSwtMS44NyAwLjkxLDEuODcgMS44NiwwLjkgeiIscG9seWdvbjoiMTEuNTYsMTIuMjEgMTAuNjYsMTAuMzQgOC44LDkuNDMgMTAuNjYsOC41MyAxMS41Niw2LjY2IDEyLjQ3LDguNTMgMTQuMzMsOS40MyAxMi40NywxMC4zNCJ9LHN0eWxlUnVsZXM6e21hcDoib3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlOyIsIm1pc3NpbmctY3NzIjoiZGlzcGxheTpub25lOyIsY2FuYXJ5OiJiYWNrZ3JvdW5kLWNvbG9yOnNhbG1vbjsiLCJjdHJsLWJvdHRvbS1sZWZ0IjoicG9zaXRpb246IGFic29sdXRlOyBwb2ludGVyLWV2ZW50czogbm9uZTsgei1pbmRleDogMjsgYm90dG9tOiAwOyBsZWZ0OiAwOyIsImN0cmwtYm90dG9tLXJpZ2h0IjoicG9zaXRpb246IGFic29sdXRlOyBwb2ludGVyLWV2ZW50czogbm9uZTsgei1pbmRleDogMjsgcmlnaHQ6IDA7IGJvdHRvbTogMDsiLGN0cmw6ImNsZWFyOiBib3RoOyBwb2ludGVyLWV2ZW50czogYXV0bzsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdCAubWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXIiOiJkaXNwbGF5OiBub25lOyIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6aG92ZXIgLm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIjoiZGlzcGxheTogYmxvY2s7IG1hcmdpbi10b3A6MnB4IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDpob3ZlciI6InBhZGRpbmc6IDJweCAyNHB4IDJweCA0cHg7IHZpc2liaWxpdHk6IHZpc2libGU7IG1hcmdpbi10b3A6IDZweDsiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OjphZnRlciI6J2NvbnRlbnQ6ICIiOyBjdXJzb3I6IHBvaW50ZXI7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiUzRSAlM0NwYXRoIGZpbGw9IiUyMzMzMzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNCwxMGE2LDYgMCAxLDAgMTIsMGE2LDYgMCAxLDAgLTEyLDAgTTksN2ExLDEgMCAxLDAgMiwwYTEsMSAwIDEsMCAtMiwwIE05LDEwYTEsMSAwIDEsMSAyLDBsMCwzYTEsMSAwIDEsMSAtMiwwIi8lM0UgJTNDL3N2ZyUzRVwnKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOyB3aWR0aDogMjRweDsgaGVpZ2h0OiAyNHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXItcmFkaXVzOiAxMnB4OycsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3QiOiJtaW4taGVpZ2h0OiAyMHB4OyBwYWRkaW5nOiAwOyBtYXJnaW46IDEwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgYm9yZGVyLXJhZGl1czogM3B4IDEycHggMTJweCAzcHg7IiwiY3RybC1ib3R0b20tcmlnaHQgPiAubWFwYm94Z2wtY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOiJib3R0b206IDA7IHJpZ2h0OiAwIiwiY3RybC1ib3R0b20tbGVmdCA+IC5tYXBib3hnbC1jdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OjphZnRlciI6ImJvdHRvbTogMDsgbGVmdDogMCIsImN0cmwtYm90dG9tLWxlZnQgLm1hcGJveGdsLWN0cmwiOiJtYXJnaW46IDAgMCAxMHB4IDEwcHg7IGZsb2F0OiBsZWZ0OyIsImN0cmwtYm90dG9tLXJpZ2h0IC5tYXBib3hnbC1jdHJsIjoibWFyZ2luOiAwIDEwcHggMTBweCAwOyBmbG9hdDogcmlnaHQ7IiwiY3RybC1hdHRyaWIiOiJjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjc1KTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEycHgiLCJjdHJsLWF0dHJpYiBhIjoiY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4IiwiY3RybC1hdHRyaWIgYTpob3ZlciI6ImNvbG9yOiBpbmhlcml0OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiLCJjdHJsLWF0dHJpYiAubWFwYm94LWltcHJvdmUtbWFwIjoiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbi1sZWZ0OiAycHg7IiwiYXR0cmliLWVtcHR5IjoiZGlzcGxheTogbm9uZTsiLCJjdHJsLWxvZ28iOidkaXNwbGF5OmJsb2NrOyB3aWR0aDogMjFweDsgaGVpZ2h0OiAyMXB4OyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0M/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8lM0UgJTNDc3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjEgMjEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIxIDIxOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIlM0UlM0NnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMC4wMSkiJTNFJTNDcGF0aCBkPSJtIDEwLjUsMS4yNCBjIC01LjExLDAgLTkuMjUsNC4xNSAtOS4yNSw5LjI1IDAsNS4xIDQuMTUsOS4yNSA5LjI1LDkuMjUgNS4xLDAgOS4yNSwtNC4xNSA5LjI1LC05LjI1IDAsLTUuMTEgLTQuMTQsLTkuMjUgLTkuMjUsLTkuMjUgeiBtIDQuMzksMTEuNTMgYyAtMS45MywxLjkzIC00Ljc4LDIuMzEgLTYuNywyLjMxIC0wLjcsMCAtMS40MSwtMC4wNSAtMi4xLC0wLjE2IDAsMCAtMS4wMiwtNS42NCAyLjE0LC04LjgxIDAuODMsLTAuODMgMS45NSwtMS4yOCAzLjEzLC0xLjI4IDEuMjcsMCAyLjQ5LDAuNTEgMy4zOSwxLjQyIDEuODQsMS44NCAxLjg5LDQuNzUgMC4xNCw2LjUyIHoiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWxsOiUyM2ZmZmZmZjtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDAiLyUzRSUzQ3BhdGggZD0iTSAxMC41LC0wLjAxIEMgNC43LC0wLjAxIDAsNC43IDAsMTAuNDkgYyAwLDUuNzkgNC43LDEwLjUgMTAuNSwxMC41IDUuOCwwIDEwLjUsLTQuNyAxMC41LC0xMC41IEMgMjAuOTksNC43IDE2LjMsLTAuMDEgMTAuNSwtMC4wMSBaIG0gMCwxOS43NSBjIC01LjExLDAgLTkuMjUsLTQuMTUgLTkuMjUsLTkuMjUgMCwtNS4xIDQuMTQsLTkuMjYgOS4yNSwtOS4yNiA1LjExLDAgOS4yNSw0LjE1IDkuMjUsOS4yNSAwLDUuMTMgLTQuMTQsOS4yNiAtOS4yNSw5LjI2IHoiIHN0eWxlPSJvcGFjaXR5OjAuMzU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QxIi8lM0UlM0NwYXRoIGQ9Ik0gMTQuNzQsNi4yNSBDIDEyLjksNC40MSA5Ljk4LDQuMzUgOC4yMyw2LjEgNS4wNyw5LjI3IDYuMDksMTQuOTEgNi4wOSwxNC45MSBjIDAsMCA1LjY0LDEuMDIgOC44MSwtMi4xNCBDIDE2LjY0LDExIDE2LjU5LDguMDkgMTQuNzQsNi4yNSBaIG0gLTIuMjcsNC4wOSAtMC45MSwxLjg3IC0wLjksLTEuODcgLTEuODYsLTAuOTEgMS44NiwtMC45IDAuOSwtMS44NyAwLjkxLDEuODcgMS44NiwwLjkgeiIgc3R5bGU9Im9wYWNpdHk6MC4zNTtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDEiLyUzRSUzQ3BvbHlnb24gcG9pbnRzPSIxMS41NiwxMi4yMSAxMC42NiwxMC4zNCA4LjgsOS40MyAxMC42Niw4LjUzIDExLjU2LDYuNjYgMTIuNDcsOC41MyAxNC4zMyw5LjQzIDEyLjQ3LDEwLjM0ICIgc3R5bGU9Im9wYWNpdHk6MC45O2ZpbGw6JTIzZmZmZmZmO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MCIvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXCcpJ319fSx7Ii4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIjo1MjZ9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zcGxpdCgiICIpLGk9clswXSxhPXJbMV0sbz1uLmlzQXJyYXlPclR5cGVkQXJyYXkoZSk/bi5tZWFuKGUpOmUscz0uNStvLzEwMCxsPTEuNStvLzEwMCxjPVsiIiwiIl0sdT1bMCwwXTtzd2l0Y2goaSl7Y2FzZSJ0b3AiOmNbMF09InRvcCIsdVsxXT0tbDticmVhaztjYXNlImJvdHRvbSI6Y1swXT0iYm90dG9tIix1WzFdPWx9c3dpdGNoKGEpe2Nhc2UibGVmdCI6Y1sxXT0icmlnaHQiLHVbMF09LXM7YnJlYWs7Y2FzZSJyaWdodCI6Y1sxXT0ibGVmdCIsdVswXT1zfXJldHVybnthbmNob3I6Y1swXSYmY1sxXT9jLmpvaW4oIi0iKTpjWzBdP2NbMF06Y1sxXT9jWzFdOiJjZW50ZXIiLG9mZnNldDp1fX19LHsiLi4vLi4vbGliIjo1MDN9XSw2MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsL2Rpc3QvbWFwYm94LWdsLXVubWluaWZpZWQiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5zdHJUcmFuc2xhdGUsbz1pLnN0clNjYWxlLHM9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGM9dCgiQHBsb3RseS9kMyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4vbWFwYm94IikscD1yLmNvbnN0YW50cz10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT1wLnN0eWxlVmFsdWVzTWFwYm94LmluZGV4T2YodCl8fDA9PT10LmluZGV4T2YoIm1hcGJveDovLyIpKX1yLm5hbWU9Im1hcGJveCIsci5hdHRyPSJzdWJwbG90IixyLmlkUm9vdD0ibWFwYm94IixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9aS5jb3VudGVyUmVnZXgoIm1hcGJveCIpLHIuYXR0cmlidXRlcz17c3VicGxvdDp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJtYXBib3giLGVkaXRUeXBlOiJjYWxjIn19LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLm1hcGJveDtpZihuLnZlcnNpb24hPT1wLnJlcXVpcmVkVmVyc2lvbil0aHJvdyBuZXcgRXJyb3IocC53cm9uZ1ZlcnNpb25FcnJvck1zZyk7dmFyIG89ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCIiPT09dC5fY29udGV4dC5tYXBib3hBY2Nlc3NUb2tlbilyZXR1cm4iIjtmb3IodmFyIG49W10sYT1bXSxvPSExLHM9ITEsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1yW2VbbF1dLHU9Yy5hY2Nlc3N0b2tlbjtkKGMuc3R5bGUpJiYodT9pLnB1c2hVbmlxdWUobix1KTooZChjLl9pbnB1dC5zdHlsZSkmJihpLmVycm9yKCJVc2VzIE1hcGJveCBtYXAgc3R5bGUsIGJ1dCBkaWQgbm90IHNldCBhbiBhY2Nlc3MgdG9rZW4uIiksbz0hMCkscz0hMCkpLHUmJmkucHVzaFVuaXF1ZShhLHUpfWlmKHMpe3ZhciBmPW8/cC5ub0FjY2Vzc1Rva2VuRXJyb3JNc2c6cC5taXNzaW5nU3R5bGVFcnJvck1zZzt0aHJvdyBpLmVycm9yKGYpLG5ldyBFcnJvcihmKX1yZXR1cm4gbi5sZW5ndGg/KG4ubGVuZ3RoPjEmJmkud2FybihwLm11bHRpcGxlVG9rZW5zRXJyb3JNc2cpLG5bMF0pOihhLmxlbmd0aCYmaS5sb2coWyJMaXN0ZWQgbWFwYm94IGFjY2VzcyB0b2tlbihzKSIsYS5qb2luKCIsIiksImJ1dCBkaWQgbm90IHVzZSBhIE1hcGJveCBtYXAgc3R5bGUsIGlnbm9yaW5nIHRva2VuKHMpLiJdLmpvaW4oIiAiKSksIiIpfSh0LGEpO24uYWNjZXNzVG9rZW49bztmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIGM9YVtsXSx1PXMociwibWFwYm94IixjKSxmPWVbY10sbT1mLl9zdWJwbG90O218fChtPW5ldyBoKHQsYyksZVtjXS5fc3VicGxvdD1tKSxtLnZpZXdJbml0aWFsfHwobS52aWV3SW5pdGlhbD17Y2VudGVyOmkuZXh0ZW5kRmxhdCh7fSxmLmNlbnRlciksem9vbTpmLnpvb20sYmVhcmluZzpmLmJlYXJpbmcscGl0Y2g6Zi5waXRjaH0pLG0ucGxvdCh1LGUsdC5fcHJvbWlzZXMpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMubWFwYm94fHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07IWVbb10mJm5bb10uX3N1YnBsb3QmJm5bb10uX3N1YnBsb3QuZGVzdHJveSgpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLm1hcGJveCxuPWUuX3NpemUsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1lW3JbaV1dLGg9cy5kb21haW4sZD1zLl9zdWJwbG90LnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcsInhsaW5rOmhyZWYiOmQseDpuLmwrbi53KmgueFswXSx5Om4udCtuLmgqKDEtaC55WzFdKSx3aWR0aDpuLncqKGgueFsxXS1oLnhbMF0pLGhlaWdodDpuLmgqKGgueVsxXS1oLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSk7dmFyIG09Yy5zZWxlY3Qocy5fc3VicGxvdC5kaXYpO2lmKCEobnVsbD09PW0uc2VsZWN0KCIubWFwYm94Z2wtY3RybC1sb2dvIikubm9kZSgpLm9mZnNldFBhcmVudCkpe3ZhciBnPWUuX2dsaW1hZ2VzLmFwcGVuZCgiZyIpO2cuYXR0cigidHJhbnNmb3JtIixhKG4ubCtuLncqaC54WzBdKzEwLG4udCtuLmgqKDEtaC55WzBdKS0zMSkpLGcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5tYXBib3hMb2dvLnBhdGgwKS5zdHlsZSh7b3BhY2l0eTouOSxmaWxsOiIjZmZmZmZmIiwiZW5hYmxlLWJhY2tncm91bmQiOiJuZXcifSksZy5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwLm1hcGJveExvZ28ucGF0aDEpLnN0eWxlKCJvcGFjaXR5IiwuMzUpLnN0eWxlKCJlbmFibGUtYmFja2dyb3VuZCIsIm5ldyIpLGcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5tYXBib3hMb2dvLnBhdGgyKS5zdHlsZSgib3BhY2l0eSIsLjM1KS5zdHlsZSgiZW5hYmxlLWJhY2tncm91bmQiLCJuZXciKSxnLmFwcGVuZCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIscC5tYXBib3hMb2dvLnBvbHlnb24pLnN0eWxlKHtvcGFjaXR5Oi45LGZpbGw6IiNmZmZmZmYiLCJlbmFibGUtYmFja2dyb3VuZCI6Im5ldyJ9KX12YXIgdj1tLnNlbGVjdCgiLm1hcGJveGdsLWN0cmwtYXR0cmliIikudGV4dCgpLnJlcGxhY2UoIkltcHJvdmUgdGhpcyBtYXAiLCIiKSx5PWUuX2dsaW1hZ2VzLmFwcGVuZCgiZyIpLHg9eS5hcHBlbmQoInRleHQiKTt4LnRleHQodikuY2xhc3NlZCgic3RhdGljLWF0dHJpYnV0aW9uIiwhMCkuYXR0cih7ImZvbnQtc2l6ZSI6MTIsImZvbnQtZmFtaWx5IjoiQXJpYWwiLGNvbG9yOiJyZ2JhKDAsIDAsIDAsIDAuNzUpIiwidGV4dC1hbmNob3IiOiJlbmQiLCJkYXRhLXVuZm9ybWF0dGVkIjp2fSk7dmFyIGI9dS5iQm94KHgubm9kZSgpKSxfPW4udyooaC54WzFdLWgueFswXSk7aWYoYi53aWR0aD5fLzIpe3ZhciB3PXYuc3BsaXQoInwiKS5qb2luKCI8YnI+Iik7eC50ZXh0KHcpLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiLHcpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMsdCksYj11LmJCb3goeC5ub2RlKCkpfXguYXR0cigidHJhbnNmb3JtIixhKC0zLDgtYi5oZWlnaHQpKSx5Lmluc2VydCgicmVjdCIsIi5zdGF0aWMtYXR0cmlidXRpb24iKS5hdHRyKHt4Oi1iLndpZHRoLTYseTotYi5oZWlnaHQtMyx3aWR0aDpiLndpZHRoKzYsaGVpZ2h0OmIuaGVpZ2h0KzMsZmlsbDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KSJ9KTt2YXIgVD0xO2Iud2lkdGgrNj5fJiYoVD1fLyhiLndpZHRoKzYpKTt2YXIgaz1bbi5sK24udypoLnhbMV0sbi50K24uaCooMS1oLnlbMF0pXTt5LmF0dHIoInRyYW5zZm9ybSIsYShrWzBdLGtbMV0pK28oVCkpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLm1hcGJveCxuPTA7bjxyLmxlbmd0aDtuKyspe2VbcltuXV0uX3N1YnBsb3QudXBkYXRlRngoZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjQ4MCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NTkzLCIuL2NvbnN0YW50cyI6NjExLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MTUsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MTYsIi4vbWFwYm94Ijo2MTcsIkBwbG90bHkvZDMiOjU4LCJtYXBib3gtZ2wvZGlzdC9tYXBib3gtZ2wtdW5taW5pZmllZCI6MjM5fV0sNjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikuc2FuaXRpemVIVE1MLGE9dCgiLi9jb252ZXJ0X3RleHRfb3B0cyIpLG89dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBzKHQsZSl7dGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9dC51aWQrIi0iK2UsdGhpcy5pbmRleD1lLHRoaXMuaWRTb3VyY2U9InNvdXJjZS0iK3RoaXMudWlkLHRoaXMuaWRMYXllcj1vLmxheW91dExheWVyUHJlZml4K3RoaXMudWlkLHRoaXMuc291cmNlVHlwZT1udWxsLHRoaXMuc291cmNlPW51bGwsdGhpcy5sYXllclR5cGU9bnVsbCx0aGlzLmJlbG93PW51bGwsdGhpcy52aXNpYmxlPSExfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCl7aWYoIXQudmlzaWJsZSlyZXR1cm4hMTt2YXIgZT10LnNvdXJjZTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZigic3RyaW5nIiE9dHlwZW9mIGVbcl18fDA9PT1lW3JdLmxlbmd0aClyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gbi5pc1BsYWluT2JqZWN0KGUpfHwic3RyaW5nIj09dHlwZW9mIGUmJmUubGVuZ3RoPjB9ZnVuY3Rpb24gdSh0KXt2YXIgZT17fSxyPXt9O3N3aXRjaCh0LnR5cGUpe2Nhc2UiY2lyY2xlIjpuLmV4dGVuZEZsYXQocix7ImNpcmNsZS1yYWRpdXMiOnQuY2lyY2xlLnJhZGl1cywiY2lyY2xlLWNvbG9yIjp0LmNvbG9yLCJjaXJjbGUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJsaW5lIjpuLmV4dGVuZEZsYXQocix7ImxpbmUtd2lkdGgiOnQubGluZS53aWR0aCwibGluZS1jb2xvciI6dC5jb2xvciwibGluZS1vcGFjaXR5Ijp0Lm9wYWNpdHksImxpbmUtZGFzaGFycmF5Ijp0LmxpbmUuZGFzaH0pO2JyZWFrO2Nhc2UiZmlsbCI6bi5leHRlbmRGbGF0KHIseyJmaWxsLWNvbG9yIjp0LmNvbG9yLCJmaWxsLW91dGxpbmUtY29sb3IiOnQuZmlsbC5vdXRsaW5lY29sb3IsImZpbGwtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJzeW1ib2wiOnZhciBpPXQuc3ltYm9sLG89YShpLnRleHRwb3NpdGlvbixpLmljb25zaXplKTtuLmV4dGVuZEZsYXQoZSx7Imljb24taW1hZ2UiOmkuaWNvbisiLTE1IiwiaWNvbi1zaXplIjppLmljb25zaXplLzEwLCJ0ZXh0LWZpZWxkIjppLnRleHQsInRleHQtc2l6ZSI6aS50ZXh0Zm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6by5hbmNob3IsInRleHQtb2Zmc2V0IjpvLm9mZnNldCwic3ltYm9sLXBsYWNlbWVudCI6aS5wbGFjZW1lbnR9KSxuLmV4dGVuZEZsYXQocix7Imljb24tY29sb3IiOnQuY29sb3IsInRleHQtY29sb3IiOmkudGV4dGZvbnQuY29sb3IsInRleHQtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJyYXN0ZXIiOm4uZXh0ZW5kRmxhdChyLHsicmFzdGVyLWZhZGUtZHVyYXRpb24iOjAsInJhc3Rlci1vcGFjaXR5Ijp0Lm9wYWNpdHl9KX1yZXR1cm57bGF5b3V0OmUscGFpbnQ6cn19bC51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlP3RoaXMubmVlZHNOZXdJbWFnZSh0KT90aGlzLnVwZGF0ZUltYWdlKHQpOnRoaXMubmVlZHNOZXdTb3VyY2UodCk/KHRoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCk/dGhpcy51cGRhdGVMYXllcih0KTp0aGlzLnVwZGF0ZVN0eWxlKHQpOih0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKSx0aGlzLnZpc2libGU9Yyh0KX0sbC5uZWVkc05ld0ltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN1YnBsb3QubWFwLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmImltYWdlIj09PXRoaXMuc291cmNlVHlwZSYmImltYWdlIj09PXQuc291cmNldHlwZSYmKHRoaXMuc291cmNlIT09dC5zb3VyY2V8fEpTT04uc3RyaW5naWZ5KHRoaXMuY29vcmRpbmF0ZXMpIT09SlNPTi5zdHJpbmdpZnkodC5jb29yZGluYXRlcykpfSxsLm5lZWRzTmV3U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZVR5cGUhPT10LnNvdXJjZXR5cGV8fEpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlKSE9PUpTT04uc3RyaW5naWZ5KHQuc291cmNlKXx8dGhpcy5sYXllclR5cGUhPT10LnR5cGV9LGwubmVlZHNOZXdMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclR5cGUhPT10LnR5cGV8fHRoaXMuYmVsb3chPT10aGlzLnN1YnBsb3QuYmVsb3dMb29rdXBbImxheW91dC0iK3RoaXMuaW5kZXhdfSxsLmxvb2t1cEJlbG93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3VicGxvdC5iZWxvd0xvb2t1cFsibGF5b3V0LSIrdGhpcy5pbmRleF19LGwudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkudXBkYXRlSW1hZ2Uoe3VybDp0LnNvdXJjZSxjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzfSk7dmFyIGU9dGhpcy5maW5kRm9sbG93aW5nTWFwYm94TGF5ZXJJZCh0aGlzLmxvb2t1cEJlbG93KCkpO251bGwhPT1lJiZ0aGlzLnN1YnBsb3QubWFwLm1vdmVMYXllcih0aGlzLmlkTGF5ZXIsZSl9LGwudXBkYXRlU291cmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3VicGxvdC5tYXA7aWYoZS5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJmUucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpLHRoaXMuc291cmNlVHlwZT10LnNvdXJjZXR5cGUsdGhpcy5zb3VyY2U9dC5zb3VyY2UsYyh0KSl7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNvdXJjZXR5cGUsbj10LnNvdXJjZSxhPXt0eXBlOnJ9OyJnZW9qc29uIj09PXI/ZT0iZGF0YSI6InZlY3RvciI9PT1yP2U9InN0cmluZyI9PXR5cGVvZiBuPyJ1cmwiOiJ0aWxlcyI6InJhc3RlciI9PT1yPyhlPSJ0aWxlcyIsYS50aWxlU2l6ZT0yNTYpOiJpbWFnZSI9PT1yJiYoZT0idXJsIixhLmNvb3JkaW5hdGVzPXQuY29vcmRpbmF0ZXMpO2FbZV09bix0LnNvdXJjZWF0dHJpYnV0aW9uJiYoYS5hdHRyaWJ1dGlvbj1pKHQuc291cmNlYXR0cmlidXRpb24pKTtyZXR1cm4gYX0odCk7ZS5hZGRTb3VyY2UodGhpcy5pZFNvdXJjZSxyKX19LGwuZmluZEZvbGxvd2luZ01hcGJveExheWVySWQ9ZnVuY3Rpb24odCl7aWYoInRyYWNlcyI9PT10KWZvcih2YXIgZT10aGlzLnN1YnBsb3QuZ2V0TWFwTGF5ZXJzKCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLmlkO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmMD09PW4uaW5kZXhPZihvLnRyYWNlTGF5ZXJQcmVmaXgpKXt0PW47YnJlYWt9fXJldHVybiB0fSxsLnVwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3VicGxvdCxyPXUodCksbj10aGlzLmxvb2t1cEJlbG93KCksaT10aGlzLmZpbmRGb2xsb3dpbmdNYXBib3hMYXllcklkKG4pO3RoaXMucmVtb3ZlTGF5ZXIoKSxjKHQpJiZlLmFkZExheWVyKHtpZDp0aGlzLmlkTGF5ZXIsc291cmNlOnRoaXMuaWRTb3VyY2UsInNvdXJjZS1sYXllciI6dC5zb3VyY2VsYXllcnx8IiIsdHlwZTp0LnR5cGUsbWluem9vbTp0Lm1pbnpvb20sbWF4em9vbTp0Lm1heHpvb20sbGF5b3V0OnIubGF5b3V0LHBhaW50OnIucGFpbnR9LGkpLHRoaXMubGF5ZXJUeXBlPXQudHlwZSx0aGlzLmJlbG93PW59LGwudXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7aWYoYyh0KSl7dmFyIGU9dSh0KTt0aGlzLnN1YnBsb3Quc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldExheW91dFByb3BlcnR5IixlLmxheW91dCksdGhpcy5zdWJwbG90LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRQYWludFByb3BlcnR5IixlLnBhaW50KX19LGwucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN1YnBsb3QubWFwO3QuZ2V0TGF5ZXIodGhpcy5pZExheWVyKSYmdC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN1YnBsb3QubWFwO3QuZ2V0TGF5ZXIodGhpcy5pZExheWVyKSYmdC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHQuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZ0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgcyh0LGUpO3JldHVybiBuLnVwZGF0ZShyKSxufX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4vY29uc3RhbnRzIjo2MTEsIi4vY29udmVydF90ZXh0X29wdHMiOjYxMn1dLDYxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5kZWZhdWx0TGluZSxhPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS50ZXh0cG9zaXRpb24sbD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksdT10KCIuL2NvbnN0YW50cyIpLGY9byh7fSk7Zi5mYW1pbHkuZGZsdD0iT3BlbiBTYW5zIFJlZ3VsYXIsIEFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciIsKGUuZXhwb3J0cz1sKHtfYXJyYXlBdHRyUmVnZXhwczpbbi5jb3VudGVyUmVnZXgoIm1hcGJveCIsIi5sYXllcnMiLCEwKV0sZG9tYWluOmEoe25hbWU6Im1hcGJveCJ9KSxhY2Nlc3N0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc3R5bGU6e3ZhbFR5cGU6ImFueSIsdmFsdWVzOnUuc3R5bGVWYWx1ZXNNYXBib3guY29uY2F0KHUuc3R5bGVWYWx1ZXNOb25NYXBib3gpLGRmbHQ6dS5zdHlsZVZhbHVlRGZsdH0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfX0sem9vbTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGJlYXJpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxheWVyczpjKCJsYXllciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNvdXJjZXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdlb2pzb24iLCJ2ZWN0b3IiLCJyYXN0ZXIiLCJpbWFnZSJdLGRmbHQ6Imdlb2pzb24ifSxzb3VyY2U6e3ZhbFR5cGU6ImFueSJ9LHNvdXJjZWxheWVyOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHNvdXJjZWF0dHJpYnV0aW9uOnt2YWxUeXBlOiJzdHJpbmcifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJsaW5lIiwiZmlsbCIsInN5bWJvbCIsInJhc3RlciJdLGRmbHQ6ImNpcmNsZSJ9LGNvb3JkaW5hdGVzOnt2YWxUeXBlOiJhbnkifSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Oml9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxtaW56b29tOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyNCxkZmx0OjB9LG1heHpvb206e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjI0LGRmbHQ6MjR9LGNpcmNsZTp7cmFkaXVzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTV9fSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjJ9LGRhc2g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX0sZmlsbDp7b3V0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfX0sc3ltYm9sOntpY29uOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Im1hcmtlciJ9LGljb25zaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0scGxhY2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwb2ludCIsImxpbmUiLCJsaW5lLWNlbnRlciJdLGRmbHQ6InBvaW50In0sdGV4dGZvbnQ6Zix0ZXh0cG9zaXRpb246bi5leHRlbmRGbGF0KHt9LHMse2FycmF5T2s6ITF9KX19KX0sInBsb3QiLCJmcm9tLXJvb3QiKSkudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjYsIi4uL2RvbWFpbiI6NTg0LCIuLi9mb250X2F0dHJpYnV0ZXMiOjU4NSwiLi9jb25zdGFudHMiOjYxMX1dLDYxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cigiYWNjZXNzdG9rZW4iLG4uYWNjZXNzVG9rZW4pLHIoInN0eWxlIikscigiY2VudGVyLmxvbiIpLHIoImNlbnRlci5sYXQiKSxyKCJ6b29tIikscigiYmVhcmluZyIpLHIoInBpdGNoIiksYSh0LGUse25hbWU6ImxheWVycyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLl9pbnB1dD10fWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLmxheWVycyxyLGkpfWlmKHIoInZpc2libGUiKSl7dmFyIGksYT1yKCJzb3VyY2V0eXBlIikscz0icmFzdGVyIj09PWF8fCJpbWFnZSI9PT1hO3IoInNvdXJjZSIpLHIoInNvdXJjZWF0dHJpYnV0aW9uIiksInZlY3RvciI9PT1hJiZyKCJzb3VyY2VsYXllciIpLCJpbWFnZSI9PT1hJiZyKCJjb29yZGluYXRlcyIpLHMmJihpPSJyYXN0ZXIiKTt2YXIgbD1yKCJ0eXBlIixpKTtzJiYicmFzdGVyIiE9PWwmJihsPWUudHlwZT0icmFzdGVyIixuLmxvZygiU291cmNlIHR5cGVzICpyYXN0ZXIqIGFuZCAqaW1hZ2UqIG11c3QgZHJhd24gKnJhc3RlciogbGF5ZXIgdHlwZS4iKSkscigiYmVsb3ciKSxyKCJjb2xvciIpLHIoIm9wYWNpdHkiKSxyKCJtaW56b29tIikscigibWF4em9vbSIpLCJjaXJjbGUiPT09bCYmcigiY2lyY2xlLnJhZGl1cyIpLCJsaW5lIj09PWwmJihyKCJsaW5lLndpZHRoIikscigibGluZS5kYXNoIikpLCJmaWxsIj09PWwmJnIoImZpbGwub3V0bGluZWNvbG9yIiksInN5bWJvbCI9PT1sJiYocigic3ltYm9sLmljb24iKSxyKCJzeW1ib2wuaWNvbnNpemUiKSxyKCJzeW1ib2wudGV4dCIpLG4uY29lcmNlRm9udChyLCJzeW1ib2wudGV4dGZvbnQiKSxyKCJzeW1ib2wudGV4dHBvc2l0aW9uIikscigic3ltYm9sLnBsYWNlbWVudCIpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpKHQsZSxyLHt0eXBlOiJtYXBib3giLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpzLHBhcnRpdGlvbjoieSIsYWNjZXNzVG9rZW46ZS5fbWFwYm94QWNjZXNzVG9rZW59KX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ5LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo2MzIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYxNX1dLDYxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtYXBib3gtZ2wvZGlzdC9tYXBib3gtZ2wtdW5taW5pZmllZCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLGY9dS5yZWN0TW9kZSxoPXUuZHJhd01vZGUscD11LnNlbGVjdE1vZGUsZD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxtPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxnPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdGlvbnNDYWNoZSx2PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHk9dCgiLi9jb25zdGFudHMiKSx4PXQoIi4vbGF5ZXJzIik7ZnVuY3Rpb24gYih0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQ7dmFyIHI9dC5fZnVsbExheW91dCxuPXQuX2NvbnRleHQ7dGhpcy5jb250YWluZXI9ci5fZ2xjb250YWluZXIubm9kZSgpLHRoaXMuaXNTdGF0aWM9bi5zdGF0aWNQbG90LHRoaXMudWlkPXIuX3VpZCsiLSIrdGhpcy5pZCx0aGlzLmRpdj1udWxsLHRoaXMueGF4aXM9bnVsbCx0aGlzLnlheGlzPW51bGwsdGhpcy5jcmVhdGVGcmFtZXdvcmsociksdGhpcy5tYXA9bnVsbCx0aGlzLmFjY2Vzc1Rva2VuPW51bGwsdGhpcy5zdHlsZU9iaj1udWxsLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJMaXN0PVtdLHRoaXMuYmVsb3dMb29rdXA9e30sdGhpcy5kcmFnZ2luZz0hMSx0aGlzLndoZWVsaW5nPSExfXZhciBfPWIucHJvdG90eXBlO18ucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzLGE9ZVtpLmlkXTtpLm1hcCYmYS5hY2Nlc3N0b2tlbiE9PWkuYWNjZXNzVG9rZW4mJihpLm1hcC5yZW1vdmUoKSxpLm1hcD1udWxsLGkuc3R5bGVPYmo9bnVsbCxpLnRyYWNlSGFzaD17fSxpLmxheWVyTGlzdD1bXSksbj1pLm1hcD9uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtpLnVwZGF0ZU1hcCh0LGUscixuKX0pKTpuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtpLmNyZWF0ZU1hcCh0LGUscixuKX0pKSxyLnB1c2gobil9LF8uY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPXRoaXMscz1lW28uaWRdLGw9by5zdHlsZU9iaj1UKHMuc3R5bGUpO28uYWNjZXNzVG9rZW49cy5hY2Nlc3N0b2tlbjt2YXIgYz1vLm1hcD1uZXcgbi5NYXAoe2NvbnRhaW5lcjpvLmRpdixzdHlsZTpsLnN0eWxlLGNlbnRlcjpBKHMuY2VudGVyKSx6b29tOnMuem9vbSxiZWFyaW5nOnMuYmVhcmluZyxwaXRjaDpzLnBpdGNoLGludGVyYWN0aXZlOiFvLmlzU3RhdGljLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpvLmlzU3RhdGljLGRvdWJsZUNsaWNrWm9vbTohMSxib3hab29tOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMX0pLmFkZENvbnRyb2wobmV3IG4uQXR0cmlidXRpb25Db250cm9sKHtjb21wYWN0OiEwfSkpO2MuX2NhbnZhcy5zdHlsZS5sZWZ0PSIwcHgiLGMuX2NhbnZhcy5zdHlsZS50b3A9IjBweCIsby5yZWplY3RPbkVycm9yKGkpLG8uaXNTdGF0aWN8fG8uaW5pdEZ4KHQsZSk7dmFyIHU9W107dS5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtjLm9uY2UoImxvYWQiLHQpfSkpKSx1PXUuY29uY2F0KGEuZmV0Y2hUcmFjZUdlb0RhdGEodCkpLFByb21pc2UuYWxsKHUpLnRoZW4oKGZ1bmN0aW9uKCl7by5maWxsQmVsb3dMb29rdXAodCxlKSxvLnVwZGF0ZURhdGEodCksby51cGRhdGVMYXlvdXQoZSksby5yZXNvbHZlT25SZW5kZXIocil9KSkuY2F0Y2goaSl9LF8udXBkYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsbz1pLm1hcCxzPWVbdGhpcy5pZF07aS5yZWplY3RPbkVycm9yKG4pO3ZhciBsPVtdLGM9VChzLnN0eWxlKTtKU09OLnN0cmluZ2lmeShpLnN0eWxlT2JqKSE9PUpTT04uc3RyaW5naWZ5KGMpJiYoaS5zdHlsZU9iaj1jLG8uc2V0U3R5bGUoYy5zdHlsZSksaS50cmFjZUhhc2g9e30sbC5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtvLm9uY2UoInN0eWxlZGF0YSIsdCl9KSkpKSxsPWwuY29uY2F0KGEuZmV0Y2hUcmFjZUdlb0RhdGEodCkpLFByb21pc2UuYWxsKGwpLnRoZW4oKGZ1bmN0aW9uKCl7aS5maWxsQmVsb3dMb29rdXAodCxlKSxpLnVwZGF0ZURhdGEodCksaS51cGRhdGVMYXlvdXQoZSksaS5yZXNvbHZlT25SZW5kZXIocil9KSkuY2F0Y2gobil9LF8uZmlsbEJlbG93TG9va3VwPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPWVbdGhpcy5pZF0ubGF5ZXJzLGE9dGhpcy5iZWxvd0xvb2t1cD17fSxvPSExO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBzPXRbcl1bMF0udHJhY2UsbD1zLl9tb2R1bGU7InN0cmluZyI9PXR5cGVvZiBzLmJlbG93P249cy5iZWxvdzpsLmdldEJlbG93JiYobj1sLmdldEJlbG93KHMsdGhpcykpLCIiPT09biYmKG89ITApLGFbInRyYWNlLSIrcy51aWRdPW58fCIifWZvcihyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBjPWlbcl07bj0ic3RyaW5nIj09dHlwZW9mIGMuYmVsb3c/Yy5iZWxvdzpvPyJ0cmFjZXMiOiIiLGFbImxheW91dC0iK3JdPW59dmFyIHUsZixoPXt9O2Zvcih1IGluIGEpaFtuPWFbdV1dP2hbbl0ucHVzaCh1KTpoW25dPVt1XTtmb3IobiBpbiBoKXt2YXIgcD1oW25dO2lmKHAubGVuZ3RoPjEpZm9yKHI9MDtyPHAubGVuZ3RoO3IrKykwPT09KHU9cFtyXSkuaW5kZXhPZigidHJhY2UtIik/KGY9dS5zcGxpdCgidHJhY2UtIilbMV0sdGhpcy50cmFjZUhhc2hbZl0mJih0aGlzLnRyYWNlSGFzaFtmXS5iZWxvdz1udWxsKSk6MD09PXUuaW5kZXhPZigibGF5b3V0LSIpJiYoZj11LnNwbGl0KCJsYXlvdXQtIilbMV0sdGhpcy5sYXllckxpc3RbZl0mJih0aGlzLmxheWVyTGlzdFtmXS5iZWxvdz1udWxsKSl9fTt2YXIgdz17Y2hvcm9wbGV0aG1hcGJveDowLGRlbnNpdHltYXBib3g6MSxzY2F0dGVybWFwYm94OjJ9O2Z1bmN0aW9uIFQodCl7dmFyIGU9e307cmV0dXJuIGkuaXNQbGFpbk9iamVjdCh0KT8oZS5pZD10LmlkLGUuc3R5bGU9dCk6InN0cmluZyI9PXR5cGVvZiB0PyhlLmlkPXQsLTEhPT15LnN0eWxlVmFsdWVzTWFwYm94LmluZGV4T2YodCk/ZS5zdHlsZT1rKHQpOnkuc3R5bGVzTm9uTWFwYm94W3RdP2Uuc3R5bGU9eS5zdHlsZXNOb25NYXBib3hbdF06ZS5zdHlsZT10KTooZS5pZD15LnN0eWxlVmFsdWVEZmx0LGUuc3R5bGU9ayh5LnN0eWxlVmFsdWVEZmx0KSksZS50cmFuc2l0aW9uPXtkdXJhdGlvbjowLGRlbGF5OjB9LGV9ZnVuY3Rpb24gayh0KXtyZXR1cm4geS5zdHlsZVVybFByZWZpeCt0KyItIit5LnN0eWxlVXJsU3VmZml4fWZ1bmN0aW9uIEEodCl7cmV0dXJuW3QubG9uLHQubGF0XX1fLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLnRyYWNlSGFzaCxvPXQuc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB3W3RbMF0udHJhY2UudHlwZV0td1tlWzBdLnRyYWNlLnR5cGVdfSkpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspe3ZhciBzPW9bbl0sbD0hMTsoZT1hWyhyPXNbMF0udHJhY2UpLnVpZF0pJiYoZS50eXBlPT09ci50eXBlPyhlLnVwZGF0ZShzKSxsPSEwKTplLmRpc3Bvc2UoKSksIWwmJnIuX21vZHVsZSYmKGFbci51aWRdPXIuX21vZHVsZS5wbG90KHRoaXMscykpfXZhciBjPU9iamVjdC5rZXlzKGEpO3Q6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIHU9Y1tuXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHU9PT0ocj10W2ldWzBdLnRyYWNlKS51aWQpY29udGludWUgdDsoZT1hW3VdKS5kaXNwb3NlKCksZGVsZXRlIGFbdV19fSxfLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPXRbdGhpcy5pZF07dGhpcy5kcmFnZ2luZ3x8dGhpcy53aGVlbGluZ3x8KGUuc2V0Q2VudGVyKEEoci5jZW50ZXIpKSxlLnNldFpvb20oci56b29tKSxlLnNldEJlYXJpbmcoci5iZWFyaW5nKSxlLnNldFBpdGNoKHIucGl0Y2gpKSx0aGlzLnVwZGF0ZUxheWVycyh0KSx0aGlzLnVwZGF0ZUZyYW1ld29yayh0KSx0aGlzLnVwZGF0ZUZ4KHQpLHRoaXMubWFwLnJlc2l6ZSgpLHRoaXMuZ2QuX2NvbnRleHQuX3Njcm9sbFpvb20ubWFwYm94P2Uuc2Nyb2xsWm9vbS5lbmFibGUoKTplLnNjcm9sbFpvb20uZGlzYWJsZSgpfSxfLnJlc29sdmVPblJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtlLm9uKCJyZW5kZXIiLChmdW5jdGlvbiByKCl7ZS5sb2FkZWQoKSYmKGUub2ZmKCJyZW5kZXIiLHIpLHNldFRpbWVvdXQodCwxMCkpfSkpfSxfLnJlamVjdE9uRXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZnVuY3Rpb24gcigpe3QobmV3IEVycm9yKHkubWFwT25FcnJvck1zZykpfWUub25jZSgiZXJyb3IiLHIpLGUub25jZSgic3R5bGUuZXJyb3IiLHIpLGUub25jZSgic291cmNlLmVycm9yIixyKSxlLm9uY2UoInRpbGUuZXJyb3IiLHIpLGUub25jZSgibGF5ZXIuZXJyb3IiLHIpfSxfLmNyZWF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5pZD1lLnVpZCxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5jb250YWluZXIuYXBwZW5kQ2hpbGQociksZS54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS54fX0sZS55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvamVjdCh0KS55fX0sZS51cGRhdGVGcmFtZXdvcmsodCksZS5tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSxzLnNldENvbnZlcnQoZS5tb2NrQXhpcyx0KX0sXy5pbml0Rng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZCxpPXIubWFwO2Z1bmN0aW9uIGEoKXtjLmxvbmVVbmhvdmVyKGUuX2hvdmVybGF5ZXIpfWZ1bmN0aW9uIHMoKXt2YXIgdD1yLmdldFZpZXcoKTtuLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsci5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZCh0KSl9aS5vbigibW92ZWVuZCIsKGZ1bmN0aW9uKHQpe2lmKHIubWFwKXt2YXIgZT1uLl9mdWxsTGF5b3V0O2lmKHQub3JpZ2luYWxFdmVudHx8ci53aGVlbGluZyl7dmFyIGk9ZVtyLmlkXTtvLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLG4ubGF5b3V0LGUuX3ByZUdVSSxyLmdldFZpZXdFZGl0cyhpKSk7dmFyIGE9ci5nZXRWaWV3KCk7aS5faW5wdXQuY2VudGVyPWkuY2VudGVyPWEuY2VudGVyLGkuX2lucHV0Lnpvb209aS56b29tPWEuem9vbSxpLl9pbnB1dC5iZWFyaW5nPWkuYmVhcmluZz1hLmJlYXJpbmcsaS5faW5wdXQucGl0Y2g9aS5waXRjaD1hLnBpdGNoLG4uZW1pdCgicGxvdGx5X3JlbGF5b3V0IixyLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkKGEpKX10Lm9yaWdpbmFsRXZlbnQmJiJtb3VzZXVwIj09PXQub3JpZ2luYWxFdmVudC50eXBlP3IuZHJhZ2dpbmc9ITE6ci53aGVlbGluZyYmKHIud2hlZWxpbmc9ITEpLGUuX3JlaG92ZXImJmUuX3JlaG92ZXIoKX19KSksaS5vbigid2hlZWwiLChmdW5jdGlvbigpe3Iud2hlZWxpbmc9ITB9KSksaS5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24odCl7dmFyIGU9ci5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1bdC5vcmlnaW5hbEV2ZW50Lm9mZnNldFgsdC5vcmlnaW5hbEV2ZW50Lm9mZnNldFldO3QudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbigpe3JldHVybiBlfSxyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiBpLnVucHJvamVjdChhKS5sbmd9LHIueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIGkudW5wcm9qZWN0KGEpLmxhdH0sbi5fZnVsbExheW91dC5fcmVob3Zlcj1mdW5jdGlvbigpe24uX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD09PXIuaWQmJm4uX2Z1bGxMYXlvdXRbci5pZF0mJmMuaG92ZXIobix0LHIuaWQpfSxjLmhvdmVyKG4sdCxyLmlkKSxuLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9ci5pZH0pKSxpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe3IuZHJhZ2dpbmc9ITAsYSgpfSkpLGkub24oInpvb21zdGFydCIsYSksaS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe24uX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1udWxsfSkpLGkub24oImRyYWciLHMpLGkub24oInpvb20iLHMpLGkub24oImRibGNsaWNrIiwoZnVuY3Rpb24oKXt2YXIgdD1uLl9mdWxsTGF5b3V0W3IuaWRdO28uY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsbi5sYXlvdXQsbi5fZnVsbExheW91dC5fcHJlR1VJLHIuZ2V0Vmlld0VkaXRzKHQpKTt2YXIgZT1yLnZpZXdJbml0aWFsO2kuc2V0Q2VudGVyKEEoZS5jZW50ZXIpKSxpLnNldFpvb20oZS56b29tKSxpLnNldEJlYXJpbmcoZS5iZWFyaW5nKSxpLnNldFBpdGNoKGUucGl0Y2gpO3ZhciBhPXIuZ2V0VmlldygpO3QuX2lucHV0LmNlbnRlcj10LmNlbnRlcj1hLmNlbnRlcix0Ll9pbnB1dC56b29tPXQuem9vbT1hLnpvb20sdC5faW5wdXQuYmVhcmluZz10LmJlYXJpbmc9YS5iZWFyaW5nLHQuX2lucHV0LnBpdGNoPXQucGl0Y2g9YS5waXRjaCxuLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksbi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQoYSkpfSkpLHIuY2xlYXJTZWxlY3Q9ZnVuY3Rpb24oKXtnKHIuZHJhZ09wdGlvbnMpLG0oci5kcmFnT3B0aW9ucy5nZCl9LHIub25DbGlja0luUGFuRm49ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPW4uX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2kuaW5kZXhPZigic2VsZWN0Iik+LTEmJnYoZS5vcmlnaW5hbEV2ZW50LG4sW3IueGF4aXNdLFtyLnlheGlzXSxyLmlkLHQpLGkuaW5kZXhPZigiZXZlbnQiKT4tMSYmYy5jbGljayhuLGUub3JpZ2luYWxFdmVudCl9fX0sXy51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5tYXAsbj1lLmdkO2lmKCFlLmlzU3RhdGljKXt2YXIgYSxvPXQuZHJhZ21vZGU7YT1mKG8pP2Z1bmN0aW9uKHQscil7KHQucmFuZ2U9e30pW2UuaWRdPVtjKFtyLnhtaW4sci55bWluXSksYyhbci54bWF4LHIueW1heF0pXX06ZnVuY3Rpb24odCxyLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtlLmlkXT1uLmZpbHRlcmVkLm1hcChjKX07dmFyIHM9ZS5kcmFnT3B0aW9ucztlLmRyYWdPcHRpb25zPWkuZXh0ZW5kRGVlcChzfHx7fSx7ZHJhZ21vZGU6dC5kcmFnbW9kZSxlbGVtZW50OmUuZGl2LGdkOm4scGxvdGluZm86e2lkOmUuaWQsZG9tYWluOnRbZS5pZF0uZG9tYWluLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxmaWxsUmFuZ2VJdGVtczphfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdLHN1YnBsb3Q6ZS5pZH0pLHIub2ZmKCJjbGljayIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSxwKG8pfHxoKG8pPyhyLmRyYWdQYW4uZGlzYWJsZSgpLHIub24oInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kcmFnT3B0aW9ucy5wcmVwRm49ZnVuY3Rpb24odCxyLG4pe2QodCxyLG4sZS5kcmFnT3B0aW9ucyxvKX0sbC5pbml0KGUuZHJhZ09wdGlvbnMpKTooci5kcmFnUGFuLmVuYWJsZSgpLHIub2ZmKCJ6b29tc3RhcnQiLGUuY2xlYXJTZWxlY3QpLGUuZGl2Lm9ubW91c2Vkb3duPW51bGwsZS5vbkNsaWNrSW5QYW5IYW5kbGVyPWUub25DbGlja0luUGFuRm4oZS5kcmFnT3B0aW9ucyksci5vbigiY2xpY2siLGUub25DbGlja0luUGFuSGFuZGxlcikpfWZ1bmN0aW9uIGModCl7dmFyIHI9ZS5tYXAudW5wcm9qZWN0KHQpO3JldHVybltyLmxuZyxyLmxhdF19fSxfLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrInB4IixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pKyJweCIsbi5sZWZ0PXIubCtlLnhbMF0qci53KyJweCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oKyJweCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LF8udXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFt0aGlzLmlkXS5sYXllcnMsbj10aGlzLmxheWVyTGlzdDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uZGlzcG9zZSgpO2ZvcihuPXRoaXMubGF5ZXJMaXN0PVtdLGU9MDtlPHIubGVuZ3RoO2UrKyluLnB1c2goeCh0aGlzLGUscltlXSkpfWVsc2UgZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluW2VdLnVwZGF0ZShyW2VdKX0sXy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLm1hcC5yZW1vdmUoKSx0aGlzLm1hcD1udWxsLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KSl9LF8udG9JbWFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5zdG9wKCksdGhpcy5tYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCl9LF8uc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpdGhpcy5tYXBbZV0odCxuLHJbbl0pfSxfLmdldE1hcExheWVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5nZXRTdHlsZSgpLmxheWVyc30sXy5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubWFwO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoIiI9PT1lKXJldHVybiB2b2lkIHIuYWRkTGF5ZXIodCxlKTtmb3IodmFyIG49dGhpcy5nZXRNYXBMYXllcnMoKSxhPTA7YTxuLmxlbmd0aDthKyspaWYoZT09PW5bYV0uaWQpcmV0dXJuIHZvaWQgci5hZGRMYXllcih0LGUpO2kud2FybihbIlRyeWluZyB0byBhZGQgbGF5ZXIgd2l0aCAqYmVsb3cqIHZhbHVlIixlLCJyZWZlcmVuY2luZyBhIGxheWVyIHRoYXQgZG9lcyBub3QgZXhpc3QiLCJvciB0aGF0IGRvZXMgbm90IHlldCBleGlzdC4iXS5qb2luKCIgIikpfXIuYWRkTGF5ZXIodCl9LF8ucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAucHJvamVjdChuZXcgbi5MbmdMYXQodFswXSx0WzFdKSl9LF8uZ2V0Vmlldz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwLGU9dC5nZXRDZW50ZXIoKSxyPXtsb246ZS5sbmcsbGF0OmUubGF0fSxuPXQuZ2V0Q2FudmFzKCksaT1wYXJzZUludChuLnN0eWxlLndpZHRoKSxhPXBhcnNlSW50KG4uc3R5bGUuaGVpZ2h0KTtyZXR1cm57Y2VudGVyOnIsem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKSxfZGVyaXZlZDp7Y29vcmRpbmF0ZXM6W3QudW5wcm9qZWN0KFswLDBdKS50b0FycmF5KCksdC51bnByb2plY3QoW2ksMF0pLnRvQXJyYXkoKSx0LnVucHJvamVjdChbaSxhXSkudG9BcnJheSgpLHQudW5wcm9qZWN0KFswLGFdKS50b0FycmF5KCldfX19LF8uZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9WyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIl0sbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07bltlKyIuIithXT10W2FdfXJldHVybiBufSxfLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLmdldFZpZXdFZGl0cyh0KTtyZXR1cm4gcltlKyIuX2Rlcml2ZWQiXT10Ll9kZXJpdmVkLHJ9LGUuZXhwb3J0cz1ifSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjM4NSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjozODQsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjQ5NiwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NTc1LCIuL2NvbnN0YW50cyI6NjExLCIuL2xheWVycyI6NjE0LCJtYXBib3gtZ2wvZGlzdC9tYXBib3gtZ2wtdW5taW5pZmllZCI6MjM5fV0sNjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlO3JldHVybnt0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxlZGl0VHlwZTplfX19LHt9XSw2MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS50aW1lRm9ybWF0TG9jYWxlLGE9dCgiZDMtZm9ybWF0IikuZm9ybWF0TG9jYWxlLG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4uL3JlZ2lzdHJ5IiksbD10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGM9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHU9dCgiLi4vbGliIiksZj10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHA9dCgiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxkPXQoIi4vY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsbT10KCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksZz10KCIuL2ZyYW1lX2F0dHJpYnV0ZXMiKSx2PXQoIi4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEseT11LnJlbGlua1ByaXZhdGVLZXlzLHg9dS5fLGI9ZS5leHBvcnRzPXt9O3UuZXh0ZW5kRmxhdChiLHMpLGIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxiLmF0dHJpYnV0ZXMudHlwZS52YWx1ZXM9Yi5hbGxUeXBlcyxiLmZvbnRBdHRycz10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYi5mb250V2VpZ2h0PSJub3JtYWwiO3ZhciBfPWIudHJhbnNmb3Jtc1JlZ2lzdHJ5LHc9dCgiLi9jb21tYW5kIik7Yi5leGVjdXRlQVBJQ29tbWFuZD13LmV4ZWN1dGVBUElDb21tYW5kLGIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz13LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3MsYi5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9dy5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIsYi5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9dy5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3MsYi5yZWRyYXdUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0PXUuZ2V0R3JhcGhEaXYodCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dCYmKHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxzLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxlKGIucHJldmlvdXNQcm9taXNlcyh0KSkpfSksMzAwKX0pKX0sYi5yZXNpemU9ZnVuY3Rpb24odCl7dmFyIGU7dD11LmdldEdyYXBoRGl2KHQpO3ZhciByPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3QmJiF1LmlzSGlkZGVuKHQpfHxuKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLHQuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQodC5fcmVkcmF3VGltZXIpLHQuX3Jlc29sdmVSZXNpemUmJihlPXQuX3Jlc29sdmVSZXNpemUpLHQuX3Jlc29sdmVSZXNpemU9cix0Ll9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2lmKCF0LmxheW91dHx8dC5sYXlvdXQud2lkdGgmJnQubGF5b3V0LmhlaWdodHx8dS5pc0hpZGRlbih0KSlyKHQpO2Vsc2V7ZGVsZXRlIHQubGF5b3V0LndpZHRoLGRlbGV0ZSB0LmxheW91dC5oZWlnaHQ7dmFyIGU9dC5jaGFuZ2VkO3QuYXV0b3BsYXk9ITAscy5jYWxsKCJyZWxheW91dCIsdCx7YXV0b3NpemU6ITB9KS50aGVuKChmdW5jdGlvbigpe3QuY2hhbmdlZD1lLHQuX3Jlc29sdmVSZXNpemU9PT1yJiYoZGVsZXRlIHQuX3Jlc29sdmVSZXNpemUscih0KSl9KSl9fSksMTAwKX0pKTtyZXR1cm4gZSYmZShyKSxyfSxiLnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24odCl7aWYoKHQuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbigoZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pKX0sYi5hZGRMaW5rcz1mdW5jdGlvbih0KXtpZih0Ll9jb250ZXh0LnNob3dMaW5rfHx0Ll9jb250ZXh0LnNob3dTb3VyY2VzKXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dS5lbnN1cmVTaW5nbGUoZS5fcGFwZXIsInRleHQiLCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwoZnVuY3Rpb24odCl7dC5zdHlsZSh7ImZvbnQtZmFtaWx5IjonIk9wZW4gU2FucyIsIEFyaWFsLCBzYW5zLXNlcmlmJywiZm9udC1zaXplIjoiMTJweCIsZmlsbDpmLmRlZmF1bHRMaW5lLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pKX0pKSxpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhpKSYmaS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49ZS53aWR0aC0yMD8oYVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGEueD01KTooYVsidGV4dC1hbmNob3IiXT0iZW5kIixhLng9ZS5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxzPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSxsPXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKHQsZSl7ZS50ZXh0KCIiKTt2YXIgcj1lLmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQodC5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIiwoZnVuY3Rpb24oKXtiLnNlbmREYXRhVG9DbG91ZCh0KX0pKTtlbHNle3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgiLyIpLGk9d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyLmF0dHIoeyJ4bGluazp4bGluazpzaG93IjoibmV3IiwieGxpbms6eGxpbms6aHJlZiI6Ii8iK25bMl0uc3BsaXQoIi4iKVswXSsiLyIrblsxXStpfSl9fSh0LG8pLHMudGV4dChvLnRleHQoKSYmbC50ZXh0KCk/IiAtICI6IiIpfX0sYi5zZW5kRGF0YVRvQ2xvdWQ9ZnVuY3Rpb24odCl7dmFyIGU9KHdpbmRvdy5QTE9UTFlFTlZ8fHt9KS5CQVNFX1VSTHx8dC5fY29udGV4dC5wbG90bHlTZXJ2ZXJVUkw7aWYoZSl7dC5lbWl0KCJwbG90bHlfYmVmb3JlZXhwb3J0Iik7dmFyIHI9bi5zZWxlY3QodCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxpPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOmUrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gaS5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9Yi5ncmFwaEpzb24odCwhMSwia2VlcGRhdGEiKSxpLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9fTt2YXIgVD1bImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZHMiLCJkYXRlVGltZSIsImRhdGUiLCJ0aW1lIiwiZGVjaW1hbCIsInRob3VzYW5kcyIsImdyb3VwaW5nIiwiY3VycmVuY3kiXSxrPVsieWVhciIsIm1vbnRoIiwiZGF5TW9udGgiLCJkYXlNb250aFllYXIiXTtmdW5jdGlvbiBBKHQsZSl7dmFyIHI9dC5fY29udGV4dC5sb2NhbGU7cnx8KHI9ImVuLVVTIik7dmFyIG49ITEsaT17fTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgcj0hMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aVtvXXx8KHRbb10/aVtvXT10W29dOnI9ITEpfXImJihuPSEwKX1mb3IodmFyIG89MDtvPDI7bysrKXtmb3IodmFyIGw9dC5fY29udGV4dC5sb2NhbGVzLGM9MDtjPDI7YysrKXt2YXIgdT0obFtyXXx8e30pLmZvcm1hdDtpZih1JiYoYSh1KSxuKSlicmVhaztsPXMubG9jYWxlUmVnaXN0cnl9dmFyIGY9ci5zcGxpdCgiLSIpWzBdO2lmKG58fGY9PT1yKWJyZWFrO3I9Zn1yZXR1cm4gbnx8YShzLmxvY2FsZVJlZ2lzdHJ5LmVuLmZvcm1hdCksaX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9e19mdWxsTGF5b3V0OmV9LG49IngiPT09dC5faWQuY2hhckF0KDApLGk9dC5fbWFpbkF4aXMuX2FuY2hvckF4aXMsYT0iIixvPSIiLHM9IiI7aWYoaSYmKHM9aS5fbWFpbkF4aXMuX2lkLGE9bj90Ll9pZCtzOnMrdC5faWQpLCFhfHwhZS5fcGxvdHNbYV0pe2E9IiI7Zm9yKHZhciBsPXQuX2NvdW50ZXJBeGVzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXSxmPW4/dC5faWQrdTp1K3QuX2lkO298fChvPWYpO3ZhciBoPXAuZ2V0RnJvbUlkKHIsdSk7aWYocyYmaC5vdmVybGF5aW5nPT09cyl7YT1mO2JyZWFrfX19cmV0dXJuIGF8fG99ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT1uLl9tb2R1bGV8fF9bbi50eXBlXTtpZihpJiZpLm1ha2VzRGF0YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBFKHQsZSxyLG4pe2Zvcih2YXIgaT10LnRyYW5zZm9ybXMsYT1bdF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9X1tzLnR5cGVdO2wmJmwudHJhbnNmb3JtJiYoYT1sLnRyYW5zZm9ybShhLHt0cmFuc2Zvcm06cyxmdWxsVHJhY2U6dCxmdWxsRGF0YTplLGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBhfWZ1bmN0aW9uIEwodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYicHgiPT09dC5zdWJzdHIodC5sZW5ndGgtMikmJnBhcnNlRmxvYXQodCl9ZnVuY3Rpb24gQyh0KXt2YXIgZT10Lm1hcmdpbjtpZighdC5fc2l6ZSl7dmFyIHI9dC5fc2l6ZT17bDpNYXRoLnJvdW5kKGUubCkscjpNYXRoLnJvdW5kKGUuciksdDpNYXRoLnJvdW5kKGUudCksYjpNYXRoLnJvdW5kKGUuYikscDpNYXRoLnJvdW5kKGUucGFkKX07ci53PU1hdGgucm91bmQodC53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZCh0LmhlaWdodCktci50LXIuYn10Ll9wdXNobWFyZ2lufHwodC5fcHVzaG1hcmdpbj17fSksdC5fcHVzaG1hcmdpbklkc3x8KHQuX3B1c2htYXJnaW5JZHM9e30pfWIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lJiZlLnNraXBVcGRhdGVDYWxjLG49dC5fZnVsbExheW91dHx8e307aWYobi5fc2tpcERlZmF1bHRzKWRlbGV0ZSBuLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbyxsPXQuX2Z1bGxMYXlvdXQ9e30sYz10LmxheW91dHx8e30sZj10Ll9mdWxsRGF0YXx8W10saD10Ll9mdWxsRGF0YT1bXSxwPXQuZGF0YXx8W10sbT10LmNhbGNkYXRhfHxbXSxnPXQuX2NvbnRleHR8fHt9O3QuX3RyYW5zaXRpb25EYXRhfHxiLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLGwuX2RmbHRUaXRsZT17cGxvdDp4KHQsIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGUiKSx4OngodCwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlIikseTp4KHQsIkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLGNvbG9yYmFyOngodCwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSIpLGFubm90YXRpb246eCh0LCJuZXcgdGV4dCIpfSxsLl90cmFjZVdvcmQ9eCh0LCJ0cmFjZSIpO3ZhciB2PUEodCxUKTtpZihsLl9tYXBib3hBY2Nlc3NUb2tlbj1nLm1hcGJveEFjY2Vzc1Rva2VuLG4uX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIF89bi53aWR0aCx3PW4uaGVpZ2h0O2Iuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxsLHYpLGMud2lkdGh8fChsLndpZHRoPV8pLGMuaGVpZ2h0fHwobC5oZWlnaHQ9dyksYi5zYW5pdGl6ZU1hcmdpbnMobCl9ZWxzZXtiLnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMsbCx2KTt2YXIgTT0hYy53aWR0aHx8IWMuaGVpZ2h0LFM9bC5hdXRvc2l6ZSxFPWcuYXV0b3NpemFibGU7TSYmKFN8fEUpP2IucGxvdEF1dG9TaXplKHQsYyxsKTpNJiZiLnNhbml0aXplTWFyZ2lucyhsKSwhUyYmTSYmKGMud2lkdGg9bC53aWR0aCxjLmhlaWdodD1sLmhlaWdodCl9bC5fZDNsb2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWNpbWFsPWUuY2hhckF0KDApLHQudGhvdXNhbmRzPWUuY2hhckF0KDEpLHtudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dHJ5e2U9YSh0KS5mb3JtYXQodS5hZGp1c3RGb3JtYXQoZSkpfWNhdGNoKHQpe3JldHVybiB1Lndhcm5CYWRGb3JtYXQoZSksdS5ub0Zvcm1hdH1yZXR1cm4gZX0sdGltZUZvcm1hdDppKHQpLnV0Y0Zvcm1hdH19KHYsbC5zZXBhcmF0b3JzKSxsLl9leHRyYUZvcm1hdD1BKHQsayksbC5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLGwuX2RhdGFMZW5ndGg9cC5sZW5ndGgsbC5fbW9kdWxlcz1bXSxsLl92aXNpYmxlTW9kdWxlcz1bXSxsLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEw9bC5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9cy5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBpPXMuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIGEgaW4gaSl7dmFyIG89aVthXS5hdHRyO2lmKG8mJihyLnB1c2goYSksQXJyYXkuaXNBcnJheShvKSkpZm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl1LnB1c2hVbmlxdWUocixvW2VdKX19Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKyluW3JbdF1dPVtdO3JldHVybiBufSgpLFA9bC5fc3Bsb21BeGVzPXt4Ont9LHk6e319LEk9bC5fc3Bsb21TdWJwbG90cz17fTtsLl9zcGxvbUdyaWREZmx0PXt9LGwuX3NjYXR0ZXJTdGFja09wdHM9e30sbC5fZmlyc3RTY2F0dGVyPXt9LGwuX2FsaWdubWVudE9wdHM9e30sbC5fY29sb3JBeGVzPXt9LGwuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxsLl90cmFjZVVpZHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLl9mdWxsSW5wdXQ7byE9PW4mJmEucHVzaChvKSxuPW99dmFyIHM9YS5sZW5ndGgsbD1uZXcgQXJyYXkoaSksYz17fTtmdW5jdGlvbiBmKHQsZSl7bFtlXT10LGNbdF09MX1mdW5jdGlvbiBoKHQsZSl7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0JiYhY1t0XSlyZXR1cm4gZih0LGUpLCEwfWZvcihyPTA7cjxpO3IrKyl7dmFyIHA9ZVtyXS51aWQ7Im51bWJlciI9PXR5cGVvZiBwJiYocD1TdHJpbmcocCkpLGgocCxyKXx8KHI8cyYmaChhW3JdLnVpZCxyKXx8Zih1LnJhbmRzdHIoYykscikpfXJldHVybiBsfShmLHApLGwuX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLGIuc3VwcGx5RGF0YURlZmF1bHRzKHAsaCxjLGwpO3ZhciBPPU9iamVjdC5rZXlzKFAueCksej1PYmplY3Qua2V5cyhQLnkpO2lmKE8ubGVuZ3RoPjEmJnoubGVuZ3RoPjEpe2ZvcihzLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKGMsbCksbz0wO288Ty5sZW5ndGg7bysrKXUucHVzaFVuaXF1ZShMLnhheGlzLE9bb10pO2ZvcihvPTA7bzx6Lmxlbmd0aDtvKyspdS5wdXNoVW5pcXVlKEwueWF4aXMseltvXSk7Zm9yKHZhciBEIGluIEkpdS5wdXNoVW5pcXVlKEwuY2FydGVzaWFuLEQpfWlmKGwuX2hhcz1iLl9oYXNQbG90VHlwZS5iaW5kKGwpLGYubGVuZ3RoPT09aC5sZW5ndGgpZm9yKG89MDtvPGgubGVuZ3RoO28rKyl5KGhbb10sZltvXSk7Yi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLGwsaCx0Ll90cmFuc2l0aW9uRGF0YSk7dmFyIFI9bC5fdmlzaWJsZU1vZHVsZXMsRj1bXTtmb3Iobz0wO288Ui5sZW5ndGg7bysrKXt2YXIgQj1SW29dLmNyb3NzVHJhY2VEZWZhdWx0cztCJiZ1LnB1c2hVbmlxdWUoRixCKX1mb3Iobz0wO288Ri5sZW5ndGg7bysrKUZbb10oaCxsKTtsLl9oYXNPbmx5TGFyZ2VTcGxvbXM9MT09PWwuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGgmJiJzcGxvbSI9PT1sLl9iYXNlUGxvdE1vZHVsZXNbMF0ubmFtZSYmTy5sZW5ndGg+MTUmJnoubGVuZ3RoPjE1JiYwPT09bC5zaGFwZXMubGVuZ3RoJiYwPT09bC5pbWFnZXMubGVuZ3RoLGIubGlua1N1YnBsb3RzKGgsbCxmLG4pLGIuY2xlYW5QbG90KGgsbCxmLG4pO3ZhciBOPSEoIW4uX2hhc3x8IW4uX2hhcygiZ2wyZCIpKSxqPSEoIWwuX2hhc3x8IWwuX2hhcygiZ2wyZCIpKSxVPSEoIW4uX2hhc3x8IW4uX2hhcygiY2FydGVzaWFuIikpfHxOLFY9ISghbC5faGFzfHwhbC5faGFzKCJjYXJ0ZXNpYW4iKSl8fGo7VSYmIVY/bi5fYmdMYXllci5yZW1vdmUoKTpWJiYhVSYmKGwuX3Nob3VsZENyZWF0ZUJnTGF5ZXI9ITApLG4uX3pvb21sYXllciYmIXQuX2RyYWdnaW5nJiZkKHtfZnVsbExheW91dDpufSksZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdO2UubWV0YSYmKHI9ZS5fbWV0YT17bWV0YTplLm1ldGEsbGF5b3V0OnttZXRhOmUubWV0YX19KTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTthLm1ldGE/blthLmluZGV4XT1hLl9tZXRhPXttZXRhOmEubWV0YX06ZS5tZXRhJiYoYS5fbWV0YT17bWV0YTplLm1ldGF9KSxlLm1ldGEmJihhLl9tZXRhLmxheW91dD17bWV0YTplLm1ldGF9KX1uLmxlbmd0aCYmKHJ8fChyPWUuX21ldGE9e30pLHIuZGF0YT1uKX0oaCxsKSx5KGwsbikscy5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yc2NhbGUiLCJjcm9zc1RyYWNlRGVmYXVsdHMiKShoLGwpLGwuX3ByZUdVSXx8KGwuX3ByZUdVST17fSksbC5fdHJhY2VQcmVHVUl8fChsLl90cmFjZVByZUdVST17fSk7dmFyIEgscT1sLl90cmFjZVByZUdVSSxHPXt9O2ZvcihIIGluIHEpR1tIXT0ib2xkIjtmb3Iobz0wO288aC5sZW5ndGg7bysrKUdbSD1oW29dLl9mdWxsSW5wdXQudWlkXXx8KHFbSF09e30pLEdbSF09Im5ldyI7Zm9yKEggaW4gRykib2xkIj09PUdbSF0mJmRlbGV0ZSBxW0hdO0MobCkscy5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwibWFrZURhdGEiKShsKSxyfHxtLmxlbmd0aCE9PWgubGVuZ3RofHxiLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyhtLGgpfX0sYi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPSh0W3JdfHxbXSlbMF07aWYoaSYmaS50cmFjZSl7dmFyIGE9aS50cmFjZTtpZihhLl9oYXNDYWxjVHJhbnNmb3JtKXt2YXIgbyxzLGwsYz1hLl9hcnJheUF0dHJzO2ZvcihvPTA7bzxjLmxlbmd0aDtvKyspcz1jW29dLGw9dS5uZXN0ZWRQcm9wZXJ0eShhLHMpLmdldCgpLnNsaWNlKCksdS5uZXN0ZWRQcm9wZXJ0eShuLHMpLnNldChsKX1pLnRyYWNlPW59fX0sYi5jcmVhdGVUcmFuc2l0aW9uRGF0YT1mdW5jdGlvbih0KXt0Ll90cmFuc2l0aW9uRGF0YXx8KHQuX3RyYW5zaXRpb25EYXRhPXt9KSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcz1bXSksdC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaHx8KHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyfHwodC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXI9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrc3x8KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3M9W10pfSxiLl9oYXNQbG90VHlwZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm5hbWU9PT10KXJldHVybiEwO3ZhciBuPXRoaXMuX21vZHVsZXN8fFtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBpPW5bZV0ubmFtZTtpZihpPT09dClyZXR1cm4hMDt2YXIgYT1zLm1vZHVsZXNbaV07aWYoYSYmYS5jYXRlZ29yaWVzW3RdKXJldHVybiEwfXJldHVybiExfSxiLmNsZWFuUGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldO3MuY2xlYW4mJnMuY2xlYW4odCxlLHIsbil9dmFyIGw9bi5faGFzJiZuLl9oYXMoImdsIiksYz1lLl9oYXMmJmUuX2hhcygiZ2wiKTtsJiYhYyYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5uby13ZWJnbCIpLnJlbW92ZSgpLG4uX2dsY2FudmFzPW51bGwpO3ZhciB1PSEhbi5faW5mb2xheWVyO3Q6Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGY9cltpXS51aWQ7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl7aWYoZj09PXRbYV0udWlkKWNvbnRpbnVlIHR9dSYmbi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitmKS5yZW1vdmUoKX19LGIubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9wbG90c3x8e30sbD1lLl9wbG90cz17fSxjPWUuX3N1YnBsb3RzLGY9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LGg9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBkLG09aFtpXSxnPW9bbV0sdj1wLmdldEZyb21JZChmLG0sIngiKSx5PXAuZ2V0RnJvbUlkKGYsbSwieSIpO2ZvcihnP2Q9bFttXT1nOihkPWxbbV09e30pLmlkPW0sdi5fY291bnRlckF4ZXMucHVzaCh5Ll9pZCkseS5fY291bnRlckF4ZXMucHVzaCh2Ll9pZCksdi5fc3VicGxvdHNXaXRoLnB1c2gobSkseS5fc3VicGxvdHNXaXRoLnB1c2gobSksZC54YXhpcz12LGQueWF4aXM9eSxkLl9oYXNDbGlwT25BeGlzRmFsc2U9ITEsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgeD10W2FdO2lmKHgueGF4aXM9PT1kLnhheGlzLl9pZCYmeC55YXhpcz09PWQueWF4aXMuX2lkJiYhMT09PXguY2xpcG9uYXhpcyl7ZC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX19dmFyIGIsXz1wLmxpc3QoZixudWxsLCEwKTtmb3IoaT0wO2k8Xy5sZW5ndGg7aSsrKXt2YXIgdz1udWxsOyhiPV9baV0pLm92ZXJsYXlpbmcmJih3PXAuZ2V0RnJvbUlkKGYsYi5vdmVybGF5aW5nKSkmJncub3ZlcmxheWluZyYmKGIub3ZlcmxheWluZz0hMSx3PW51bGwpLGIuX21haW5BeGlzPXd8fGIsdyYmKGIuZG9tYWluPXcuZG9tYWluLnNsaWNlKCkpLGIuX2FuY2hvckF4aXM9ImZyZWUiPT09Yi5hbmNob3I/bnVsbDpwLmdldEZyb21JZChmLGIuYW5jaG9yKX1mb3IoaT0wO2k8Xy5sZW5ndGg7aSsrKWlmKChiPV9baV0pLl9jb3VudGVyQXhlcy5zb3J0KHAuaWRTb3J0KSxiLl9zdWJwbG90c1dpdGguc29ydCh1LnN1YnBsb3RTb3J0KSxiLl9tYWluU3VicGxvdD1NKGIsZSksYi5fY291bnRlckF4ZXMubGVuZ3RoJiYoYi5zcGlrZW1vZGUmJi0xIT09Yi5zcGlrZW1vZGUuaW5kZXhPZigiYWNyb3NzIil8fGIuYXV0b21hcmdpbiYmYi5taXJyb3ImJiJmcmVlIiE9PWIuYW5jaG9yfHxzLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShiKSkpe3ZhciBUPTEsaz0wO2ZvcihhPTA7YTxiLl9jb3VudGVyQXhlcy5sZW5ndGg7YSsrKXt2YXIgQT1wLmdldEZyb21JZChmLGIuX2NvdW50ZXJBeGVzW2FdKTtUPU1hdGgubWluKFQsQS5kb21haW5bMF0pLGs9TWF0aC5tYXgoayxBLmRvbWFpblsxXSl9VDxrJiYoYi5fY291bnRlckRvbWFpbk1pbj1ULGIuX2NvdW50ZXJEb21haW5NYXg9ayl9fSxiLmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnM9ZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihyPVtdLChlPXQuX21vZHVsZS5fY29sb3JBdHRycyl8fCh0Ll9tb2R1bGUuX2NvbG9yQXR0cnM9ZT1bXSxsLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLChmdW5jdGlvbih0LG4saSxhKXtyW2FdPW4sci5sZW5ndGg9YSsxLCJjb2xvciI9PT10LnZhbFR5cGUmJnZvaWQgMD09PXQuZGZsdCYmZS5wdXNoKHIuam9pbigiLiIpKX0pKSksbj0wO248ZS5sZW5ndGg7bisrKXt1Lm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK2Vbbl0pLmdldCgpfHx1Lm5lc3RlZFByb3BlcnR5KHQsZVtuXSkuc2V0KG51bGwpfX0sYi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLGw9bi5fbW9kdWxlcyxmPW4uX3Zpc2libGVNb2R1bGVzLGg9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxkPTA7ZnVuY3Rpb24gbSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJih1LnB1c2hVbmlxdWUobCxyKSwhMD09PXQudmlzaWJsZSYmdS5wdXNoVW5pcXVlKGYsciksdS5wdXNoVW5pcXVlKGgsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZkKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIGc9e30sdj1bXSx4PShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1jLnRyYWNlVGVtcGxhdGVyKHgpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKG89dFtpXSwoYT1fLm5ld1RyYWNlKG8pKS51aWQ9bi5fdHJhY2VVaWRzW2ldLGIuc3VwcGx5VHJhY2VEZWZhdWx0cyhvLGEsZCxuLGkpLGEuaW5kZXg9aSxhLl9pbnB1dD1vLGEuX2V4cGFuZGVkSW5kZXg9cCxhLnRyYW5zZm9ybXMmJmEudHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09by52aXNpYmxlJiYhMT09PWEudmlzaWJsZSxUPUUoYSxlLHIsbiksaz0wO2s8VC5sZW5ndGg7aysrKXt2YXIgQT1UW2tdLE09e190ZW1wbGF0ZTphLl90ZW1wbGF0ZSx0eXBlOmEudHlwZSx1aWQ6YS51aWQra307dyYmITE9PT1BLnZpc2libGUmJmRlbGV0ZSBBLnZpc2libGUsYi5zdXBwbHlUcmFjZURlZmF1bHRzKEEsTSxwLG4saSkseShNLEEpLE0uaW5kZXg9aSxNLl9pbnB1dD1vLE0uX2Z1bGxJbnB1dD1hLE0uX2V4cGFuZGVkSW5kZXg9cCxNLl9leHBhbmRlZElucHV0PUEsbShNKX1lbHNlIGEuX2Z1bGxJbnB1dD1hLGEuX2V4cGFuZGVkSW5wdXQ9YSxtKGEpO3MudHJhY2VJcyhhLCJjYXJwZXRBeGlzIikmJihnW2EuY2FycGV0XT1hKSxzLnRyYWNlSXMoYSwiY2FycGV0RGVwZW5kZW50IikmJnYucHVzaChpKX1mb3IoaT0wO2k8di5sZW5ndGg7aSsrKWlmKChhPWVbdltpXV0pLnZpc2libGUpe3ZhciBTPWdbYS5jYXJwZXRdO2EuX2NhcnBldD1TLFMmJlMudmlzaWJsZT8oYS54YXhpcz1TLnhheGlzLGEueWF4aXM9Uy55YXhpcyk6YS52aXNpYmxlPSExfX0sYi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZTt0PXR8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4oZSxuKXtyZXR1cm4gdS5jb2VyY2UodHx8e30scixtLGUsbil9aWYobigibW9kZSIpLG4oImRpcmVjdGlvbiIpLG4oImZyb21jdXJyZW50IiksQXJyYXkuaXNBcnJheSh0LmZyYW1lKSlmb3Ioci5mcmFtZT1bXSxlPTA7ZTx0LmZyYW1lLmxlbmd0aDtlKyspci5mcmFtZVtlXT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZVtlXXx8e30pO2Vsc2Ugci5mcmFtZT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZXx8e30pO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2l0aW9uKSlmb3Ioci50cmFuc2l0aW9uPVtdLGU9MDtlPHQudHJhbnNpdGlvbi5sZW5ndGg7ZSsrKXIudHJhbnNpdGlvbltlXT1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb25bZV18fHt9KTtlbHNlIHIudHJhbnNpdGlvbj1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb258fHt9KTtyZXR1cm4gcn0sYi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gdS5jb2VyY2UodHx8e30sZSxtLmZyYW1lLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigicmVkcmF3IiksZX0sYi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiB1LmNvZXJjZSh0fHx7fSxlLG0udHJhbnNpdGlvbixyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoImVhc2luZyIpLGV9LGIuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHUuY29lcmNlKHQsZSxnLHIsbil9cmV0dXJuIHIoImdyb3VwIikscigibmFtZSIpLHIoInRyYWNlcyIpLHIoImJhc2VmcmFtZSIpLHIoImRhdGEiKSxyKCJsYXlvdXQiKSxlfSxiLnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPW4uY29sb3J3YXl8fGYuZGVmYXVsdHMsbD1vW3Ilby5sZW5ndGhdO2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gdS5jb2VyY2UodCxlLGIuYXR0cmlidXRlcyxyLG4pfXZhciBoPWMoInZpc2libGUiKTtjKCJ0eXBlIiksYygibmFtZSIsbi5fdHJhY2VXb3JkKyIgIitpKSxjKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pO3ZhciBwPWIuZ2V0TW9kdWxlKGUpO2lmKGUuX21vZHVsZT1wLHApe3ZhciBkPXAuYmFzZVBsb3RNb2R1bGUsbT1kLmF0dHIsZz1kLmF0dHJpYnV0ZXM7aWYobSYmZyl7dmFyIHY9bi5fc3VicGxvdHMseT0iIjtpZihofHwiZ2wyZCIhPT1kLm5hbWUpe2lmKEFycmF5LmlzQXJyYXkobSkpZm9yKGE9MDthPG0ubGVuZ3RoO2ErKyl7dmFyIHg9bVthXSxfPXUuY29lcmNlKHQsZSxnLHgpO3ZbeF0mJnUucHVzaFVuaXF1ZSh2W3hdLF8pLHkrPV99ZWxzZSB5PXUuY29lcmNlKHQsZSxnLG0pO3ZbZC5uYW1lXSYmdS5wdXNoVW5pcXVlKHZbZC5uYW1lXSx5KX19fXJldHVybiBoJiYoYygiY3VzdG9tZGF0YSIpLGMoImlkcyIpLGMoIm1ldGEiKSxzLnRyYWNlSXMoZSwic2hvd0xlZ2VuZCIpPyh1LmNvZXJjZSh0LGUscC5hdHRyaWJ1dGVzLnNob3dsZWdlbmQ/cC5hdHRyaWJ1dGVzOmIuYXR0cmlidXRlcywic2hvd2xlZ2VuZCIpLGMoImxlZ2VuZGdyb3VwIiksYygibGVnZW5kZ3JvdXB0aXRsZS50ZXh0IiksYygibGVnZW5kcmFuayIpLGUuX2RmbHRTaG93TGVnZW5kPSEwKTplLl9kZmx0U2hvd0xlZ2VuZD0hMSxwJiZwLnN1cHBseURlZmF1bHRzKHQsZSxsLG4pLHMudHJhY2VJcyhlLCJub09wYWNpdHkiKXx8Yygib3BhY2l0eSIpLHMudHJhY2VJcyhlLCJub3RMZWdlbmRJc29sYXRhYmxlIikmJihlLnZpc2libGU9ISFlLnZpc2libGUpLHMudHJhY2VJcyhlLCJub0hvdmVyIil8fChlLmhvdmVydGVtcGxhdGV8fHUuY29lcmNlSG92ZXJpbmZvKHQsZSxuKSwicGFyY2F0cyIhPT1lLnR5cGUmJnMuZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsInN1cHBseURlZmF1bHRzIikodCxlLGwsbikpLHAmJnAuc2VsZWN0UG9pbnRzJiZjKCJzZWxlY3RlZHBvaW50cyIpLGIuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHModCxlLG4pKSxlfSxiLmhhc01ha2VzRGF0YVRyYW5zZm9ybT1TLGIuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2lmKGUuX2xlbmd0aHx8Uyh0KSl7dmFyIG49ci5fZ2xvYmFsVHJhbnNmb3Jtc3x8W10saT1yLl90cmFuc2Zvcm1Nb2R1bGVzfHxbXTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNmb3Jtcyl8fDAhPT1uLmxlbmd0aClmb3IodmFyIGE9dC50cmFuc2Zvcm1zfHxbXSxvPW4uY29uY2F0KGEpLHM9ZS50cmFuc2Zvcm1zPVtdLGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIGMsZj1vW2xdLGg9Zi50eXBlLHA9X1toXSxkPSEoZi5fbW9kdWxlJiZmLl9tb2R1bGU9PT1wKSxtPXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHx1Lndhcm4oIlVucmVjb2duaXplZCB0cmFuc2Zvcm0gdHlwZSAiK2grIi4iKSxwJiZwLnN1cHBseURlZmF1bHRzJiYoZHx8bSk/KChjPXAuc3VwcGx5RGVmYXVsdHMoZixlLHIsdCkpLnR5cGU9aCxjLl9tb2R1bGU9cCx1LnB1c2hVbmlxdWUoaSxwKSk6Yz11LmV4dGVuZEZsYXQoe30sZikscy5wdXNoKGMpfX19LGIuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gdS5jb2VyY2UodCxlLGIubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBpPXQudGVtcGxhdGU7dS5pc1BsYWluT2JqZWN0KGkpJiYoZS50ZW1wbGF0ZT1pLGUuX3RlbXBsYXRlPWkubGF5b3V0LGUuX2RhdGFUZW1wbGF0ZT1pLmRhdGEpLG4oImF1dG90eXBlbnVtYmVycyIpO3ZhciBhPXUuY29lcmNlRm9udChuLCJmb250Iiksbz1hLnNpemU7dS5jb2VyY2VGb250KG4sInRpdGxlLmZvbnQiLHUuZXh0ZW5kRmxhdCh7fSxhLHtzaXplOk1hdGgucm91bmQoMS40Km8pfSkpLG4oInRpdGxlLnRleHQiLGUuX2RmbHRUaXRsZS5wbG90KSxuKCJ0aXRsZS54cmVmIiksbigidGl0bGUueXJlZiIpLG4oInRpdGxlLngiKSxuKCJ0aXRsZS55IiksbigidGl0bGUueGFuY2hvciIpLG4oInRpdGxlLnlhbmNob3IiKSxuKCJ0aXRsZS5wYWQudCIpLG4oInRpdGxlLnBhZC5yIiksbigidGl0bGUucGFkLmIiKSxuKCJ0aXRsZS5wYWQubCIpLG4oInVuaWZvcm10ZXh0Lm1vZGUiKSYmbigidW5pZm9ybXRleHQubWluc2l6ZSIpLG4oImF1dG9zaXplIiwhKHQud2lkdGgmJnQuaGVpZ2h0KSksbigid2lkdGgiKSxuKCJoZWlnaHQiKSxuKCJtYXJnaW4ubCIpLG4oIm1hcmdpbi5yIiksbigibWFyZ2luLnQiKSxuKCJtYXJnaW4uYiIpLG4oIm1hcmdpbi5wYWQiKSxuKCJtYXJnaW4uYXV0b2V4cGFuZCIpLHQud2lkdGgmJnQuaGVpZ2h0JiZiLnNhbml0aXplTWFyZ2lucyhlKSxzLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKHQsZSksbigicGFwZXJfYmdjb2xvciIpLG4oInNlcGFyYXRvcnMiLHIuZGVjaW1hbCtyLnRob3VzYW5kcyksbigiaGlkZXNvdXJjZXMiKSxuKCJjb2xvcndheSIpLG4oImRhdGFyZXZpc2lvbiIpO3ZhciBsPW4oInVpcmV2aXNpb24iKTtuKCJlZGl0cmV2aXNpb24iLGwpLG4oInNlbGVjdGlvbnJldmlzaW9uIixsKSxzLmdldENvbXBvbmVudE1ldGhvZCgibW9kZWJhciIsInN1cHBseUxheW91dERlZmF1bHRzIikodCxlKSxzLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwic3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHMiKSh0LGUsbiksbigibWV0YSIpLHUuaXNQbGFpbk9iamVjdCh0LnRyYW5zaXRpb24pJiYobigidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG4oInRyYW5zaXRpb24uZWFzaW5nIiksbigidHJhbnNpdGlvbi5vcmRlcmluZyIpKSxzLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIikscy5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMiKSh0LGUsbil9LGIucGxvdEF1dG9TaXplPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dC5fY29udGV4dHx8e30scz1hLmZyYW1lTWFyZ2lucyxsPXUuaXNQbG90RGl2KHQpO2lmKGwmJnQuZW1pdCgicGxvdGx5X2F1dG9zaXplIiksYS5maWxsRnJhbWUpbj13aW5kb3cuaW5uZXJXaWR0aCxpPXdpbmRvdy5pbm5lckhlaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Vsc2V7dmFyIGM9bD93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTp7fTtpZihuPUwoYy53aWR0aCl8fEwoYy5tYXhXaWR0aCl8fHIud2lkdGgsaT1MKGMuaGVpZ2h0KXx8TChjLm1heEhlaWdodCl8fHIuaGVpZ2h0LG8ocykmJnM+MCl7dmFyIGY9MS0yKnM7bj1NYXRoLnJvdW5kKGYqbiksaT1NYXRoLnJvdW5kKGYqaSl9fXZhciBoPWIubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4scD1iLmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPGgmJihuPWgpLGk8cCYmKGk9cCk7dmFyIGQ9IWUud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxtPSFlLmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtaSk+MTsobXx8ZCkmJihkJiYoci53aWR0aD1uKSxtJiYoci5oZWlnaHQ9aSkpLHQuX2luaXRpYWxBdXRvU2l6ZXx8KHQuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6aX0pLGIuc2FuaXRpemVNYXJnaW5zKHIpfSxiLnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxsPXMuY29tcG9uZW50c1JlZ2lzdHJ5LGM9ZS5fYmFzZVBsb3RNb2R1bGVzLGY9cy5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbjtmb3IoaSBpbiBsKShvPWxbaV0pLmluY2x1ZGVCYXNlUGxvdCYmby5pbmNsdWRlQmFzZVBsb3QodCxlKTtmb3IodmFyIGggaW4gYy5sZW5ndGh8fGMucHVzaChmKSxlLl9oYXMoImNhcnRlc2lhbiIpJiYocy5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJjb250ZW50RGVmYXVsdHMiKSh0LGUpLGYuZmluYWxpemVTdWJwbG90cyh0LGUpKSxlLl9zdWJwbG90cyllLl9zdWJwbG90c1toXS5zb3J0KHUuc3VicGxvdFNvcnQpO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspKG89Y1thXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBwPWUuX21vZHVsZXM7Zm9yKGE9MDthPHAubGVuZ3RoO2ErKykobz1wW2FdKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmby5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIGQ9ZS5fdHJhbnNmb3JtTW9kdWxlcztmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKShvPWRbYV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZvLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyLG4pO2ZvcihpIGluIGwpKG89bFtpXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxiLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9O3ZvaWQgMCE9PWUuX2dsY29udGFpbmVyJiYoZS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikucmVtb3ZlKCksZS5fZ2xjb250YWluZXIucmVtb3ZlKCksZS5fZ2xjYW52YXM9bnVsbCksZS5fbW9kZUJhciYmZS5fbW9kZUJhci5kZXN0cm95KCksdC5fdHJhbnNpdGlvbkRhdGEmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSx1LmNsZWFyVGhyb3R0bGUoKSx1LmNsZWFyUmVzcG9uc2l2ZSh0KSxkZWxldGUgdC5kYXRhLGRlbGV0ZSB0LmxheW91dCxkZWxldGUgdC5fZnVsbERhdGEsZGVsZXRlIHQuX2Z1bGxMYXlvdXQsZGVsZXRlIHQuY2FsY2RhdGEsZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2RyYWdkYXRhLGRlbGV0ZSB0Ll9ob3ZlcmRhdGEsZGVsZXRlIHQuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgdC5fZWRpdGluZyxkZWxldGUgdC5fbW91c2VEb3duVGltZSxkZWxldGUgdC5fbGVnZW5kTW91c2VEb3duVGltZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sYi5zdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQuX3Zpc2libGVNb2R1bGVzLG49W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXTtpLnN0eWxlJiZ1LnB1c2hVbmlxdWUobixpLnN0eWxlKX1mb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0odCl9LGIuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LGIuY2xlYXJBdXRvTWFyZ2luSWRzPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHM9e319LGIuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkc1tlXT0xfTtiLmF1dG9NYXJnaW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1uLndpZHRoLGE9bi5oZWlnaHQsbz1uLm1hcmdpbixzPXUuY29uc3RyYWluKGktby5sLW8uciwyLDY0KSxsPXUuY29uc3RyYWluKGEtby50LW8uYiwyLDY0KSxjPU1hdGgubWF4KDAsaS1zKSxmPU1hdGgubWF4KDAsYS1sKSxoPW4uX3B1c2htYXJnaW4scD1uLl9wdXNobWFyZ2luSWRzO2lmKCExIT09by5hdXRvZXhwYW5kKXtpZihyKXt2YXIgZD1yLnBhZDtpZih2b2lkIDA9PT1kJiYoZD1NYXRoLm1pbigxMixvLmwsby5yLG8udCxvLmIpKSxjKXt2YXIgbT0oci5sK3IucikvYzttPjEmJihyLmwvPW0sci5yLz1tKX1pZihmKXt2YXIgZz0oci50K3IuYikvZjtnPjEmJihyLnQvPWcsci5iLz1nKX12YXIgdj12b2lkIDAhPT1yLnhsP3IueGw6ci54LHk9dm9pZCAwIT09ci54cj9yLnhyOnIueCx4PXZvaWQgMCE9PXIueXQ/ci55dDpyLnksXz12b2lkIDAhPT1yLnliP3IueWI6ci55O2hbZV09e2w6e3ZhbDp2LHNpemU6ci5sK2R9LHI6e3ZhbDp5LHNpemU6ci5yK2R9LGI6e3ZhbDpfLHNpemU6ci5iK2R9LHQ6e3ZhbDp4LHNpemU6ci50K2R9fSxwW2VdPTF9ZWxzZSBkZWxldGUgaFtlXSxkZWxldGUgcFtlXTtpZighbi5fcmVwbG90dGluZylyZXR1cm4gYi5kb0F1dG9NYXJnaW4odCl9fSxiLmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS53aWR0aCxuPWUuaGVpZ2h0O2UuX3NpemV8fChlLl9zaXplPXt9KSxDKGUpO3ZhciBpPWUuX3NpemUsYT1lLm1hcmdpbixsPXUuZXh0ZW5kRmxhdCh7fSxpKSxjPWEubCxmPWEucixoPWEudCxkPWEuYixtPWUuX3B1c2htYXJnaW4sZz1lLl9wdXNobWFyZ2luSWRzO2lmKCExIT09ZS5tYXJnaW4uYXV0b2V4cGFuZCl7Zm9yKHZhciB2IGluIG0pZ1t2XXx8ZGVsZXRlIG1bdl07Zm9yKHZhciB5IGluIG0uYmFzZT17bDp7dmFsOjAsc2l6ZTpjfSxyOnt2YWw6MSxzaXplOmZ9LHQ6e3ZhbDoxLHNpemU6aH0sYjp7dmFsOjAsc2l6ZTpkfX0sbSl7dmFyIHg9bVt5XS5sfHx7fSxfPW1beV0uYnx8e30sdz14LnZhbCxUPXguc2l6ZSxrPV8udmFsLEE9Xy5zaXplO2Zvcih2YXIgTSBpbiBtKXtpZihvKFQpJiZtW01dLnIpe3ZhciBTPW1bTV0uci52YWwsRT1tW01dLnIuc2l6ZTtpZihTPncpe3ZhciBMPShUKlMrKEUtcikqdykvKFMtdyksUD0oRSooMS13KSsoVC1yKSooMS1TKSkvKFMtdyk7TCtQPmMrZiYmKGM9TCxmPVApfX1pZihvKEEpJiZtW01dLnQpe3ZhciBJPW1bTV0udC52YWwsTz1tW01dLnQuc2l6ZTtpZihJPmspe3ZhciB6PShBKkkrKE8tbikqaykvKEktayksRD0oTyooMS1rKSsoQS1uKSooMS1JKSkvKEktayk7eitEPmQraCYmKGQ9eixoPUQpfX19fX12YXIgUj11LmNvbnN0cmFpbihyLWEubC1hLnIsMiw2NCksRj11LmNvbnN0cmFpbihuLWEudC1hLmIsMiw2NCksQj1NYXRoLm1heCgwLHItUiksTj1NYXRoLm1heCgwLG4tRik7aWYoQil7dmFyIGo9KGMrZikvQjtqPjEmJihjLz1qLGYvPWopfWlmKE4pe3ZhciBVPShkK2gpL047VT4xJiYoZC89VSxoLz1VKX1pZihpLmw9TWF0aC5yb3VuZChjKSxpLnI9TWF0aC5yb3VuZChmKSxpLnQ9TWF0aC5yb3VuZChoKSxpLmI9TWF0aC5yb3VuZChkKSxpLnA9TWF0aC5yb3VuZChhLnBhZCksaS53PU1hdGgucm91bmQociktaS5sLWkucixpLmg9TWF0aC5yb3VuZChuKS1pLnQtaS5iLCFlLl9yZXBsb3R0aW5nJiZiLmRpZE1hcmdpbkNoYW5nZShsLGkpKXsiX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQiaW4gZT9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50Kys6ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD0xO3ZhciBWPTMqKDErT2JqZWN0LmtleXMoZykubGVuZ3RoKTtpZihlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PFYpcmV0dXJuIHMuY2FsbCgiX2RvUGxvdCIsdCk7ZS5fc2l6ZT1sLHUud2FybigiVG9vIG1hbnkgYXV0by1tYXJnaW4gcmVkcmF3cy4iKX0hZnVuY3Rpb24odCl7dmFyIGU9cC5saXN0KHQsIiIsITApO1siX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdyIsIl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl1bdF07biYmbigpfX0pKX0odCl9O3ZhciBQPVsibCIsInIiLCJ0IiwiYiIsInAiLCJ3IiwiaCJdO2Z1bmN0aW9uIEkodCxlLHIpe3ZhciBuPSExO3ZhciBpPVtiLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbih0KXt2YXIgZT1Qcm9taXNlLnJlc29sdmUoKTtpZighdClyZXR1cm4gZTtmb3IoO3QubGVuZ3RoOyllPWUudGhlbih0LnNoaWZ0KCkpO3JldHVybiBlfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sYi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSl7dC5fdHJhbnNpdGlvbmluZz0hMCxlLmR1cmF0aW9uPjAmJih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7bj0hMH0pKSxyLnJlZHJhdyYmdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBzLmNhbGwoInJlZHJhdyIsdCl9KSksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3QuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSkpO3ZhciBhPTAsbz0wO2Z1bmN0aW9uIGwoKXtyZXR1cm4gYSsrLGZ1bmN0aW9uKCl7bysrLG58fG8hPT1hfHxmdW5jdGlvbihlKXtpZighdC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuOyhmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0pKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoci5yZWRyYXcpcmV0dXJuIHMuY2FsbCgicmVkcmF3Iix0KX0pKS50aGVuKChmdW5jdGlvbigpe3QuX3RyYW5zaXRpb25pbmc9ITEsdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMSx0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uZWQiLFtdKX0pKS50aGVuKGUpfShpKX19ci5ydW5GbihsKSxzZXRUaW1lb3V0KGwoKSl9KSl9XSxhPXUuc3luY09yQXN5bmMoaSx0KTtyZXR1cm4gYSYmYS50aGVufHwoYT1Qcm9taXNlLnJlc29sdmUoKSksYS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0fSkpfWIuZGlkTWFyZ2luQ2hhbmdlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxQLmxlbmd0aDtyKyspe3ZhciBuPVBbcl0saT10W25dLGE9ZVtuXTtpZighbyhpKXx8TWF0aC5hYnMoYS1pKT4xKXJldHVybiEwfXJldHVybiExfSxiLmdyYXBoSnNvbj1mdW5jdGlvbih0LGUscixuLGksYSl7KGkmJmUmJiF0Ll9mdWxsRGF0YXx8aSYmIWUmJiF0Ll9mdWxsTGF5b3V0KSYmYi5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgbz1pP3QuX2Z1bGxEYXRhOnQuZGF0YSxzPWk/dC5fZnVsbExheW91dDp0LmxheW91dCxsPSh0Ll90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBlPyJfZnVuY3Rpb25fIjpudWxsO2lmKHUuaXNQbGFpbk9iamVjdCh0KSl7dmFyIG4saT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuc29ydCgpLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKC0xPT09WyJfIiwiWyJdLmluZGV4T2YoYS5jaGFyQXQoMCkpKWlmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W2FdKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1hLnN1YnN0cihhLmxlbmd0aC0zKSlyZXR1cm59ZWxzZSBpZigia2VlcHN0cmVhbSI9PT1yKXtpZigic3RyaW5nIj09dHlwZW9mKG49dFthKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjAmJiF1LmlzUGxhaW5PYmplY3QodC5zdHJlYW0pKXJldHVybn1lbHNlIGlmKCJrZWVwYWxsIiE9PXImJiJzdHJpbmciPT10eXBlb2Yobj10W2ErInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MClyZXR1cm47aVthXT1jKHRbYV0sZSl9ZWxzZSBlJiYoaVthXT0iX2Z1bmN0aW9uIil9KSksaX1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGModCxlKX0pKTp1LmlzVHlwZWRBcnJheSh0KT91LnNpbXBsZU1hcCh0LHUuaWRlbnRpdHkpOnUuaXNKU0RhdGUodCk/dS5tczJEYXRlVGltZUxvY2FsKCt0KTp0fXZhciBmPXtkYXRhOihvfHxbXSkubWFwKChmdW5jdGlvbih0KXt2YXIgcj1jKHQpO3JldHVybiBlJiZkZWxldGUgci5maXQscn0pKX07aWYoIWUmJihmLmxheW91dD1jKHMpLGkpKXt2YXIgaD1zLl9zaXplO2YubGF5b3V0LmNvbXB1dGVkPXttYXJnaW46e2I6aC5iLGw6aC5sLHI6aC5yLHQ6aC50fX19cmV0dXJuIGwmJihmLmZyYW1lcz1jKGwpKSxhJiYoZi5jb25maWc9Yyh0Ll9jb250ZXh0LCEwKSksIm9iamVjdCI9PT1uP2Y6SlNPTi5zdHJpbmdpZnkoZil9LGIubW9kaWZ5RnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylzd2l0Y2goKG49ZVtyXSkudHlwZSl7Y2FzZSJyZXBsYWNlIjppPW4udmFsdWU7dmFyIHM9KGFbbi5pbmRleF18fHt9KS5uYW1lLGw9aS5uYW1lO2Fbbi5pbmRleF09b1tsXT1pLGwhPT1zJiYoZGVsZXRlIG9bc10sb1tsXT1pKTticmVhaztjYXNlImluc2VydCI6b1soaT1uLnZhbHVlKS5uYW1lXT1pLGEuc3BsaWNlKG4uaW5kZXgsMCxpKTticmVhaztjYXNlImRlbGV0ZSI6ZGVsZXRlIG9bKGk9YVtuLmluZGV4XSkubmFtZV0sYS5zcGxpY2Uobi5pbmRleCwxKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGIuY29tcHV0ZUZyYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFlKXRocm93IG5ldyBFcnJvcigiY29tcHV0ZUZyYW1lIG11c3QgYmUgZ2l2ZW4gYSBzdHJpbmcgZnJhbWUgbmFtZSIpO3ZhciBzPW9bZS50b1N0cmluZygpXTtpZighcylyZXR1cm4hMTtmb3IodmFyIGw9W3NdLGM9W3MubmFtZV07cy5iYXNlZnJhbWUmJihzPW9bcy5iYXNlZnJhbWUudG9TdHJpbmcoKV0pJiYtMT09PWMuaW5kZXhPZihzLm5hbWUpOylsLnB1c2gocyksYy5wdXNoKHMubmFtZSk7Zm9yKHZhciB1PXt9O3M9bC5wb3AoKTspaWYocy5sYXlvdXQmJih1LmxheW91dD1iLmV4dGVuZExheW91dCh1LmxheW91dCxzLmxheW91dCkpLHMuZGF0YSl7aWYodS5kYXRhfHwodS5kYXRhPVtdKSwhKG49cy50cmFjZXMpKWZvcihuPVtdLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW5bcl09cjtmb3IodS50cmFjZXN8fCh1LnRyYWNlcz1bXSkscj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbnVsbCE9KGk9bltyXSkmJigtMT09PShhPXUudHJhY2VzLmluZGV4T2YoaSkpJiYoYT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2FdPWkpLHUuZGF0YVthXT1iLmV4dGVuZFRyYWNlKHUuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gdX0sYi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSxiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyxmPXUuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGV8fHt9KSxoPXUuZXhwYW5kT2JqZWN0UGF0aHMoZikscD17fTtpZihyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXZvaWQgMD09PShpPShuPXUubmVzdGVkUHJvcGVydHkoaCxyW2FdKSkuZ2V0KCkpP3UubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQobnVsbCk6KG4uc2V0KG51bGwpLHUubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQoaSkpO2lmKHQ9dS5leHRlbmREZWVwTm9BcnJheXModHx8e30saCksciYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKylpZihsPXUubmVzdGVkUHJvcGVydHkocCxyW2FdKS5nZXQoKSl7Zm9yKGM9KHM9dS5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pKS5nZXQoKSxBcnJheS5pc0FycmF5KGMpfHwoYz1bXSxzLnNldChjKSksbz0wO288bC5sZW5ndGg7bysrKXt2YXIgZD1sW29dO2Nbb109bnVsbD09PWQ/bnVsbDpiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGNbb10sZCl9cy5zZXQoYyl9cmV0dXJuIHR9LGIuZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiLCJkaW1lbnNpb25zIl0sYi5sYXlvdXRBcnJheUNvbnRhaW5lcnM9cy5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYi5leHRlbmRUcmFjZT1mdW5jdGlvbih0LGUpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSxiLmRhdGFBcnJheUNvbnRhaW5lcnMpfSxiLmV4dGVuZExheW91dD1mdW5jdGlvbih0LGUpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSxiLmxheW91dEFycmF5Q29udGFpbmVycyl9LGIudHJhbnNpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e3JlZHJhdzppLnJlZHJhd30scz17fSxsPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe2Zvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAsYT1uLnNsaWNlKDAsaSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgYz1hW29dLGY9dC5fZnVsbERhdGFbY10uX21vZHVsZTtpZihmKXtpZihmLmFuaW1hdGFibGUpe3ZhciBoPWYuYmFzZVBsb3RNb2R1bGUubmFtZTtzW2hdfHwoc1toXT1bXSksc1toXS5wdXNoKGMpfXQuZGF0YVthW29dXT1iLmV4dGVuZFRyYWNlKHQuZGF0YVthW29dXSxlW29dKX19dmFyIHA9dS5leHBhbmRPYmplY3RQYXRocyh1LmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSksZD0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciBtIGluIHApZC50ZXN0KG0pJiZkZWxldGUgcFttXS5yYW5nZTtiLmV4dGVuZExheW91dCh0LmxheW91dCxwKSxkZWxldGUgdC5jYWxjZGF0YSxiLnN1cHBseURlZmF1bHRzKHQpLGIuZG9DYWxjZGF0YSh0KTt2YXIgZz11LmV4cGFuZE9iamVjdFBhdGhzKHIpO2lmKGcpe3ZhciB2PXQuX2Z1bGxMYXlvdXQuX3Bsb3RzO2Zvcih2YXIgeSBpbiB2KXt2YXIgeD12W3ldLF89eC54YXhpcyx3PXgueWF4aXMsVD1fLnJhbmdlLnNsaWNlKCksaz13LnJhbmdlLnNsaWNlKCksQT1udWxsLE09bnVsbCxTPW51bGwsRT1udWxsO0FycmF5LmlzQXJyYXkoZ1tfLl9uYW1lKyIucmFuZ2UiXSk/QT1nW18uX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgoZ1tfLl9uYW1lXXx8e30pLnJhbmdlKSYmKEE9Z1tfLl9uYW1lXS5yYW5nZS5zbGljZSgpKSxBcnJheS5pc0FycmF5KGdbdy5fbmFtZSsiLnJhbmdlIl0pP009Z1t3Ll9uYW1lKyIucmFuZ2UiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbdy5fbmFtZV18fHt9KS5yYW5nZSkmJihNPWdbdy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksVCYmQSYmKF8ucjJsKFRbMF0pIT09Xy5yMmwoQVswXSl8fF8ucjJsKFRbMV0pIT09Xy5yMmwoQVsxXSkpJiYoUz17eHIwOlQseHIxOkF9KSxrJiZNJiYody5yMmwoa1swXSkhPT13LnIybChNWzBdKXx8dy5yMmwoa1sxXSkhPT13LnIybChNWzFdKSkmJihFPXt5cjA6ayx5cjE6TX0pLChTfHxFKSYmbC5wdXNoKHUuZXh0ZW5kRmxhdCh7cGxvdGluZm86eH0sUyxFKSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGM9bC5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxsLGEsZSk7Zm9yKHZhciBmIGluIGM/KChuPXUuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxkZWxldGUgcy5jYXJ0ZXNpYW4pOm49YSxzKXt2YXIgaD1zW2ZdO3QuX2Z1bGxEYXRhW2hbMF1dLl9tb2R1bGUuYmFzZVBsb3RNb2R1bGUucGxvdCh0LGgsbixlKX19LEkodCxhLG8pfSxiLnRyYW5zaXRpb25Gcm9tUmVhY3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxhPWkudHJhbnNpdGlvbixvPXt9LHM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7dmFyIHQ9aS5fcGxvdHM7Zm9yKHZhciBhIGluIG8ucmVkcmF3PSExLCJzb21lIj09PWUuYW5pbSYmKG8ucmVkcmF3PSEwKSwic29tZSI9PT1yLmFuaW0mJihvLnJlZHJhdz0hMCksdCl7dmFyIGw9dFthXSxjPWwueGF4aXMsZj1sLnlheGlzLGg9bltjLl9uYW1lXS5yYW5nZS5zbGljZSgpLHA9bltmLl9uYW1lXS5yYW5nZS5zbGljZSgpLGQ9Yy5yYW5nZS5zbGljZSgpLG09Zi5yYW5nZS5zbGljZSgpO2Muc2V0U2NhbGUoKSxmLnNldFNjYWxlKCk7dmFyIGc9bnVsbCx2PW51bGw7Yy5yMmwoaFswXSk9PT1jLnIybChkWzBdKSYmYy5yMmwoaFsxXSk9PT1jLnIybChkWzFdKXx8KGc9e3hyMDpoLHhyMTpkfSksZi5yMmwocFswXSk9PT1mLnIybChtWzBdKSYmZi5yMmwocFsxXSk9PT1mLnIybChtWzFdKXx8KHY9e3lyMDpwLHlyMTptfSksKGd8fHYpJiZzLnB1c2godS5leHRlbmRGbGF0KHtwbG90aW5mbzpsfSxnLHYpKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24ocil7Zm9yKHZhciBuLGksbyxsPXQuX2Z1bGxEYXRhLGM9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGY9W10saD0wO2g8bC5sZW5ndGg7aCsrKWYucHVzaChoKTtmdW5jdGlvbiBwKCl7aWYodC5fZnVsbExheW91dClmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnRyYW5zaXRpb25BeGVzJiZjW2VdLnRyYW5zaXRpb25BeGVzKHQscyxuLHIpfWZ1bmN0aW9uIGQoKXtpZih0Ll9mdWxsTGF5b3V0KWZvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWNbZV0ucGxvdCh0LG8saSxyKX1zLmxlbmd0aCYmZS5hbmltPyJ0cmFjZXMgZmlyc3QiPT09YS5vcmRlcmluZz8obj11LmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLG89ZixpPWEsc2V0VGltZW91dChwLGEuZHVyYXRpb24pLGQoKSk6KG49YSxvPW51bGwsaT11LmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLHNldFRpbWVvdXQoZCxuLmR1cmF0aW9uKSxwKCkpOnMubGVuZ3RoPyhuPWEscCgpKTplLmFuaW0mJihvPWYsaT1hLGQoKSl9LEkodCxhLG8pfSxiLmRvQ2FsY2RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXAubGlzdCh0KSxjPXQuX2Z1bGxEYXRhLGY9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheShjLmxlbmd0aCksbT0odC5jYWxjZGF0YXx8W10pLnNsaWNlKCk7Zm9yKHQuY2FsY2RhdGE9ZCxmLl9udW1Cb3hlcz0wLGYuX251bVZpb2xpbnM9MCxmLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxmLl9waWVjb2xvcm1hcD17fSxmLl9zdW5idXJzdGNvbG9ybWFwPXt9LGYuX3RyZWVtYXBjb2xvcm1hcD17fSxmLl9pY2ljbGVjb2xvcm1hcD17fSxmLl9mdW5uZWxhcmVhY29sb3JtYXA9e30saT0wO2k8Yy5sZW5ndGg7aSsrKUFycmF5LmlzQXJyYXkoZSkmJi0xPT09ZS5pbmRleE9mKGkpJiYoZFtpXT1tW2ldKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKShyPWNbaV0pLl9hcnJheUF0dHJzPWwuZmluZEFycmF5QXR0cmlidXRlcyhyKSxyLl9leHRyZW1lcz17fTt2YXIgZz1mLl9zdWJwbG90cy5wb2xhcnx8W107Zm9yKGk9MDtpPGcubGVuZ3RoO2krKylvLnB1c2goZltnW2ldXS5yYWRpYWxheGlzLGZbZ1tpXV0uYW5ndWxhcmF4aXMpO2Zvcih2YXIgdiBpbiBmLl9jb2xvckF4ZXMpe3ZhciB5PWZbdl07ITEhPT15LmNhdXRvJiYoZGVsZXRlIHkuY21pbixkZWxldGUgeS5jbWF4KX12YXIgeD0hMTtmdW5jdGlvbiBiKGUpe2lmKHI9Y1tlXSxuPXIuX21vZHVsZSwhMD09PXIudmlzaWJsZSYmci50cmFuc2Zvcm1zKXtpZihuJiZuLmNhbGMpe3ZhciBpPW4uY2FsYyh0LHIpO2lbMF0mJmlbMF0udCYmaVswXS50Ll9zY2VuZSYmZGVsZXRlIGlbMF0udC5fc2NlbmUuZGlydHl9Zm9yKGE9MDthPHIudHJhbnNmb3Jtcy5sZW5ndGg7YSsrKXt2YXIgbz1yLnRyYW5zZm9ybXNbYV07KG49X1tvLnR5cGVdKSYmbi5jYWxjVHJhbnNmb3JtJiYoci5faGFzQ2FsY1RyYW5zZm9ybT0hMCx4PSEwLG4uY2FsY1RyYW5zZm9ybSh0LHIsbykpfX19ZnVuY3Rpb24gdyhlLGkpe2lmKHI9Y1tlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgbz1bXTtpZighMD09PXIudmlzaWJsZSYmMCE9PXIuX2xlbmd0aCl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIHM9ci50cmFuc2Zvcm1zfHxbXTtmb3IoYT1zLmxlbmd0aC0xO2E+PTA7YS0tKWlmKHNbYV0uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1zW2FdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKG89bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkobykmJm9bMF18fChvPVt7eDpoLHk6aH1dKSxvWzBdLnR8fChvWzBdLnQ9e30pLG9bMF0udHJhY2U9cixkW2VdPW99fWZvcih6KG8sYyxmKSxpPTA7aTxjLmxlbmd0aDtpKyspdyhpLCEwKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKWIoaSk7Zm9yKHgmJnoobyxjLGYpLGk9MDtpPGMubGVuZ3RoO2krKyl3KGksITApO2ZvcihpPTA7aTxjLmxlbmd0aDtpKyspdyhpLCExKTtEKHQpO3ZhciBUPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxsPVtdO2Z1bmN0aW9uIGModCxyLG4pe3ZhciBpPXIuX2lkLmNoYXJBdCgwKTtpZigiaGlzdG9ncmFtMmRjb250b3VyIj09PXQpe3ZhciBhPXIuX2NvdW50ZXJBeGVzWzBdLG89cC5nZXRGcm9tSWQoZSxhKSxzPSJ4Ij09PWl8fCJ4Ij09PWEmJiJjYXRlZ29yeSI9PT1vLnR5cGUsbD0ieSI9PT1pfHwieSI9PT1hJiYiY2F0ZWdvcnkiPT09by50eXBlO3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8MD09PWV8fHMmJnQ9PT1uW2VdLmxlbmd0aC0xfHxsJiZlPT09bi5sZW5ndGgtMT8tMTooInkiPT09aT9lOnQpLTF9fXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiJ5Ij09PWk/ZTp0fX12YXIgZj17bWluOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KX0sbWF4OmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KX0sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LHRvdGFsOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LG1lYW46ZnVuY3Rpb24odCl7cmV0dXJuIHUubWVhbih0KX0sbWVkaWFuOmZ1bmN0aW9uKHQpe3JldHVybiB1Lm1lZGlhbih0KX19O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBoPXRbcl07aWYoImNhdGVnb3J5Ij09PWgudHlwZSl7dmFyIGQ9aC5jYXRlZ29yeW9yZGVyLm1hdGNoKE8pO2lmKGQpe3ZhciBtPWRbMV0sZz1kWzJdLHY9aC5faWQuY2hhckF0KDApLHk9IngiPT09dix4PVtdO2ZvcihuPTA7bjxoLl9jYXRlZ29yaWVzLmxlbmd0aDtuKyspeC5wdXNoKFtoLl9jYXRlZ29yaWVzW25dLFtdXSk7Zm9yKG49MDtuPGguX3RyYWNlSW5kaWNlcy5sZW5ndGg7bisrKXt2YXIgYj1oLl90cmFjZUluZGljZXNbbl0sXz1lLl9mdWxsRGF0YVtiXTtpZighMD09PV8udmlzaWJsZSl7dmFyIHc9Xy50eXBlO3MudHJhY2VJcyhfLCJoaXN0b2dyYW0iKSYmKGRlbGV0ZSBfLl94YXV0b0JpbkZpbmlzaGVkLGRlbGV0ZSBfLl95YXV0b0JpbkZpbmlzaGVkKTt2YXIgVD0ic3Bsb20iPT09dyxrPSJzY2F0dGVyZ2wiPT09dyxBPWUuY2FsY2RhdGFbYl07Zm9yKGk9MDtpPEEubGVuZ3RoO2krKyl7dmFyIE0sUyxFPUFbaV07aWYoVCl7dmFyIEw9Xy5fYXhlc0RpbVtoLl9pZF07aWYoIXkpe3ZhciBDPV8uX2RpYWdbTF1bMF07QyYmKGg9ZS5fZnVsbExheW91dFtwLmlkMm5hbWUoQyldKX12YXIgUD1FLnRyYWNlLmRpbWVuc2lvbnNbTF0udmFsdWVzO2ZvcihhPTA7YTxQLmxlbmd0aDthKyspZm9yKE09aC5fY2F0ZWdvcmllc01hcFtQW2FdXSxvPTA7bzxFLnRyYWNlLmRpbWVuc2lvbnMubGVuZ3RoO28rKylpZihvIT09TCl7dmFyIEk9RS50cmFjZS5kaW1lbnNpb25zW29dO3hbTV1bMV0ucHVzaChJLnZhbHVlc1thXSl9fWVsc2UgaWYoayl7Zm9yKGE9MDthPEUudC54Lmxlbmd0aDthKyspeT8oTT1FLnQueFthXSxTPUUudC55W2FdKTooTT1FLnQueVthXSxTPUUudC54W2FdKSx4W01dWzFdLnB1c2goUyk7RS50JiZFLnQuX3NjZW5lJiZkZWxldGUgRS50Ll9zY2VuZS5kaXJ0eX1lbHNlIGlmKEUuaGFzT3duUHJvcGVydHkoInoiKSl7Uz1FLno7dmFyIHo9YyhfLnR5cGUsaCxTKTtmb3IoYT0wO2E8Uy5sZW5ndGg7YSsrKWZvcihvPTA7bzxTW2FdLmxlbmd0aDtvKyspKE09eihvLGEpKSsxJiZ4W01dWzFdLnB1c2goU1thXVtvXSl9ZWxzZSBmb3Iodm9pZCAwPT09KE09RS5wKSYmKE09RVt2XSksdm9pZCAwPT09KFM9RS5zKSYmKFM9RS52KSx2b2lkIDA9PT1TJiYoUz15P0UueTpFLngpLEFycmF5LmlzQXJyYXkoUyl8fChTPXZvaWQgMD09PVM/W106W1NdKSxhPTA7YTxTLmxlbmd0aDthKyspeFtNXVsxXS5wdXNoKFNbYV0pfX19aC5fY2F0ZWdvcmllc1ZhbHVlPXg7dmFyIEQ9W107Zm9yKG49MDtuPHgubGVuZ3RoO24rKylELnB1c2goW3hbbl1bMF0sZlttXSh4W25dWzFdKV0pO0Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFsxXS1lWzFdfSkpLGguX2NhdGVnb3JpZXNBZ2dyZWdhdGVkVmFsdWU9RCxoLl9pbml0aWFsQ2F0ZWdvcmllcz1ELm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksImRlc2NlbmRpbmciPT09ZyYmaC5faW5pdGlhbENhdGVnb3JpZXMucmV2ZXJzZSgpLGw9bC5jb25jYXQoaC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcygpKX19fXJldHVybiBsfShvLHQpO2lmKFQubGVuZ3RoKXtmb3IoZi5fbnVtQm94ZXM9MCxmLl9udW1WaW9saW5zPTAsaT0wO2k8VC5sZW5ndGg7aSsrKXcoVFtpXSwhMCk7Zm9yKGk9MDtpPFQubGVuZ3RoO2krKyl3KFRbaV0sITEpO0QodCl9cy5nZXRDb21wb25lbnRNZXRob2QoImZ4IiwiY2FsYyIpKHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJjYWxjIikodCl9O3ZhciBPPS8odG90YWx8c3VtfG1pbnxtYXh8bWVhbnxtZWRpYW4pIChhc2NlbmRpbmd8ZGVzY2VuZGluZykvO2Z1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7dC5jbGVhckNhbGMoKSwibXVsdGljYXRlZ29yeSI9PT10LnR5cGUmJnQuc2V0dXBNdWx0aUNhdGVnb3J5KGUpLG5bdC5faWRdPTF9dS5zaW1wbGVNYXAodCxpKTtmb3IodmFyIGE9ci5fYXhpc01hdGNoR3JvdXBzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspZm9yKHZhciBzIGluIGFbb10pbltzXXx8aShyW3AuaWQybmFtZShzKV0pfWZ1bmN0aW9uIEQodCl7dmFyIGUscixuLGk9dC5fZnVsbExheW91dCxhPWkuX3Zpc2libGVNb2R1bGVzLG89e307Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIHM9YVtyXSxsPXMuY3Jvc3NUcmFjZUNhbGM7aWYobCl7dmFyIGM9cy5iYXNlUGxvdE1vZHVsZS5uYW1lO29bY10/dS5wdXNoVW5pcXVlKG9bY10sbCk6b1tjXT1bbF19fWZvcihuIGluIG8pe3ZhciBmPW9bbl0saD1pLl9zdWJwbG90c1tuXTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihlPTA7ZTxoLmxlbmd0aDtlKyspe3ZhciBwPWhbZV0sZD0iY2FydGVzaWFuIj09PW4/aS5fcGxvdHNbcF06aVtwXTtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWZbcl0odCxkLHApfWVsc2UgZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylmW3JdKHQpfX1iLnJlaG92ZXI9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVob3ZlciYmdC5fZnVsbExheW91dC5fcmVob3ZlcigpfSxiLnJlZHJhZz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcmJnQuX2Z1bGxMYXlvdXQuX3JlZHJhZygpfSxiLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUudHJhY2VIYXNoLG89e307Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxsPXNbMF0udHJhY2U7bC52aXNpYmxlJiYob1tsLnR5cGVdPW9bbC50eXBlXXx8W10sb1tsLnR5cGVdLnB1c2gocykpfWZvcih2YXIgYyBpbiBhKWlmKCFvW2NdKXt2YXIgZj1hW2NdWzBdO2ZbMF0udHJhY2UudmlzaWJsZT0hMSxvW2NdPVtmXX1mb3IodmFyIGggaW4gbyl7dmFyIHA9b1toXTtwWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdCh0LGUsdS5maWx0ZXJWaXNpYmxlKHApLG4pfWUudHJhY2VIYXNoPW99LGIucGxvdEJhc2VQbG90PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9cy5nZXRNb2R1bGUodCksbz12KGUuY2FsY2RhdGEsYSlbMF07YS5wbG90KGUsbyxuLGkpfSxiLmNsZWFuQmFzZVBsb3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1pLl9oYXMmJmkuX2hhcyh0KSxvPXIuX2hhcyYmci5faGFzKHQpO2EmJiFvJiZpWyJfIit0KyJsYXllciJdLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vbGliIjo1MDMsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo1NDIsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vcGxvdHMvZ2V0X2RhdGEiOjU5MywiLi4vcmVnaXN0cnkiOjYzOCwiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6NTQ4LCIuL2F0dHJpYnV0ZXMiOjU1MCwiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiOjU1OCwiLi9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjU2NSwiLi9jb21tYW5kIjo1ODMsIi4vZm9udF9hdHRyaWJ1dGVzIjo1ODUsIi4vZnJhbWVfYXR0cmlidXRlcyI6NTg2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MTAsIkBwbG90bHkvZDMiOjU4LCJkMy1mb3JtYXQiOjExMiwiZDMtdGltZS1mb3JtYXQiOjEyMCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDYyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InBvbGFyIixheGlzTmFtZXM6WyJhbmd1bGFyYXhpcyIsInJhZGlhbGF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOiJ0aGV0YSIscmFkaWFsYXhpczoiciJ9LGxheWVyTmFtZXM6WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImFuZ3VsYXItZ3JpZCIsInJhZGlhbC1ncmlkIiwiZnJvbnRwbG90IiwiYW5ndWxhci1saW5lIiwicmFkaWFsLWxpbmUiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw2MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWYoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9ZihNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxoPWYoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBoP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypoLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxmPWkubGVuZ3RoLGg9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBtKHQpe3JldHVybiBuLm1vZCh0LGYpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIHY9YShpLChmdW5jdGlvbih0KXtyZXR1cm4gZyh0KT9sKHQsZSk6MS8wfSkpLHk9ZChpW3ZdLGlbbSh2LTEpXSxlKTtmb3IoaC5wdXNoKHkpLHM9dix1PTA7dTxmO3MrKyx1Kyspe3ZhciB4PWlbbShzKV07aWYoIWcoeCkpYnJlYWs7aC5wdXNoKHAoeCkpfXZhciBiPWEoaSwoZnVuY3Rpb24odCl7cmV0dXJuIGcodCk/bCh0LHIpOjEvMH0pKSxfPWQoaVtiXSxpW20oYisxKV0scik7cmV0dXJuIGgucHVzaChfKSxoLnB1c2goWzAsMF0pLGgucHVzaChoWzBdLnNsaWNlKCkpLGh9KHQsZSxyLGkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIE1hdGguYWJzKHQpPjFlLTEwP3Q6MH1mdW5jdGlvbiBoKHQsZSxyKXtlPWV8fDAscj1yfHwwO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKyl7dmFyIG89dFthXTtpW2FdPVtlK29bMF0sci1vWzFdXX1yZXR1cm4gaX1lLmV4cG9ydHM9e2lzUHRJbnNpZGVQb2x5Z29uOmZ1bmN0aW9uKHQsZSxyLG4sYSl7aWYoIW8oZSxuKSlyZXR1cm4hMTt2YXIgcyxsO3JbMF08clsxXT8ocz1yWzBdLGw9clsxXSk6KHM9clsxXSxsPXJbMF0pO3ZhciBjPWkodShzLG5bMF0sblsxXSxhKSksZj1pKHUobCxuWzBdLG5bMV0sYSkpLGg9W3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbihlKV07cmV0dXJuIGYuY29udGFpbnMoaCkmJiFjLmNvbnRhaW5zKGgpfSxmaW5kUG9seWdvbk9mZnNldDpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MS8wLGE9MS8wLG89dSh0LGUscixuKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107aT1NYXRoLm1pbihpLGxbMF0pLGE9TWF0aC5taW4oYSwtbFsxXSl9cmV0dXJuW2ksYV19LGZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hKGUsKGZ1bmN0aW9uKGUpe3ZhciByPXMoZSx0KTtyZXR1cm4gcj4wP3I6MS8wfSkpLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6ZixwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIk0iK2godSh0LGUscixuKSxpLGEpLmpvaW4oIkwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9aCh1KHMscixuLGkpLGEsbyk7cmV0dXJuIk0iK2godShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKCJMIikrIk0iK2Muam9pbigiTCIpfX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9wb2x5Z29uIjo1MTV9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9aShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcygiZ2wiKSxvPWUuX2hhcyYmZS5faGFzKCJnbCIpLHM9YSYmIW8sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdLGY9blt1XS5fc3VicGxvdDtpZighZVt1XSYmZilmb3IodmFyIGggaW4gZi5mcmFtZXdvcmsucmVtb3ZlKCksZi5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl0ucmVtb3ZlKCksZi5jbGlwUGF0aHMpZi5jbGlwUGF0aHNbaF0ucmVtb3ZlKCk7cyYmZi5fc2NlbmUmJihmLl9zY2VuZS5kZXN0cm95KCksZi5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo1MDMsIi4uL2NhcnRlc2lhbiI6NTY4LCIuLi9nZXRfZGF0YSI6NTkzLCIuL2NvbnN0YW50cyI6NjIwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MjMsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MjQsIi4vcG9sYXIiOjYyNX1dLDYyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1zKHtjb2xvcjppLmNvbG9yLHNob3dsaW5lOm8oe30saS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6byh7fSxpLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmkuZ3JpZGNvbG9yLGdyaWR3aWR0aDppLmdyaWR3aWR0aH0sInBsb3QiLCJmcm9tLXJvb3QiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LG1pbmV4cG9uZW50OmkubWluZXhwb25lbnQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsbGF5ZXI6aS5sYXllcn0sInBsb3QiLCJmcm9tLXJvb3QiKSx1PXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTpvKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGF1dG9yYW5nZTpvKHt9LGkuYXV0b3JhbmdlLHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvemVybyIsIm5vbm5lZ2F0aXZlIiwibm9ybWFsIl0sZGZsdDoidG96ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOm8oe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToicGxvdCJ9KSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNsb2Nrd2lzZSIsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDpvKHt9LGkudGl0bGUudGV4dCx7ZWRpdFR5cGU6InBsb3QiLGRmbHQ6IiJ9KSxmb250Om8oe30saS50aXRsZS5mb250LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fTtvKHUsbCxjKTt2YXIgZj17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIixfbm9UZW1wbGF0aW5nOiEwfSxhdXRvdHlwZW51bWJlcnM6aS5hdXRvdHlwZW51bWJlcnMsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjIn0scGVyaW9kOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudGVyY2xvY2t3aXNlIiwiY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifTtvKGYsbCxjKSxlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOiJwb2xhciIsZWRpdFR5cGU6InBsb3QifSksc2VjdG9yOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDM2MF0sZWRpdFR5cGU6InBsb3QifSxob2xlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpmLGdyaWRzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY3VsYXIiLCJsaW5lYXIiXSxkZmx0OiJjaXJjdWxhciIsZWRpdFR5cGU6InBsb3QifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2NSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjksIi4uL2RvbWFpbiI6NTg0fV0sNjI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYz10KCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGY9dCgiLi4vY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiKSxoPXQoIi4uL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLHA9dCgiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGQ9dCgiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKSxtPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxnPXQoIi4vc2V0X2NvbnZlcnQiKSx2PXQoIi4vY29uc3RhbnRzIikseT12LmF4aXNOYW1lcztmdW5jdGlvbiB4KHQsZSxyLG8pe3ZhciBkPXIoImJnY29sb3IiKTtvLmJnQ29sb3I9aS5jb21iaW5lKGQsby5wYXBlcl9iZ2NvbG9yKTt2YXIgeD1yKCJzZWN0b3IiKTtyKCJob2xlIik7dmFyIF8sdz1zKG8uZnVsbERhdGEsdi5uYW1lLG8uaWQpLFQ9by5sYXlvdXRPdXQ7ZnVuY3Rpb24gayh0LGUpe3JldHVybiByKF8rIi4iK3QsZSl9Zm9yKHZhciBBPTA7QTx5Lmxlbmd0aDtBKyspe189eVtBXSxuLmlzUGxhaW5PYmplY3QodFtfXSl8fCh0W19dPXt9KTt2YXIgTT10W19dLFM9YS5uZXdDb250YWluZXIoZSxfKTtTLl9pZD1TLl9uYW1lPV8sUy5fYXR0cj1vLmlkKyIuIitfLFMuX3RyYWNlSW5kaWNlcz13Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSk7dmFyIEU9di5heGlzTmFtZTJkYXRhQXJyYXlbX10sTD1iKE0sUyxrLHcsRSxvKTtoKE0sUyxrLHtheERhdGE6dyxkYXRhQXR0cjpFfSk7dmFyIEM9aygidmlzaWJsZSIpO3N3aXRjaChnKFMsZSxUKSxrKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLFMuX209MSxfKXtjYXNlInJhZGlhbGF4aXMiOnZhciBQPWsoImF1dG9yYW5nZSIsIVMuaXNWYWxpZFJhbmdlKE0ucmFuZ2UpKTtNLmF1dG9yYW5nZT1QLCFQfHwibGluZWFyIiE9PUwmJiItIiE9PUx8fGsoInJhbmdlbW9kZSIpLCJyZXZlcnNlZCI9PT1QJiYoUy5fbT0tMSksaygicmFuZ2UiKSxTLmNsZWFuUmFuZ2UoInJhbmdlIix7ZGZsdFJhbmdlOlswLDFdfSk7YnJlYWs7Y2FzZSJhbmd1bGFyYXhpcyI6aWYoImRhdGUiPT09TCl7bi5sb2coIlBvbGFyIHBsb3RzIGRvIG5vdCBzdXBwb3J0IGRhdGUgYW5ndWxhciBheGVzIHlldC4iKTtmb3IodmFyIEk9MDtJPHcubGVuZ3RoO0krKyl3W0ldLnZpc2libGU9ITE7TD1NLnR5cGU9Uy50eXBlPSJsaW5lYXIifWsoImxpbmVhciI9PT1MPyJ0aGV0YXVuaXQiOiJwZXJpb2QiKTt2YXIgTz1rKCJkaXJlY3Rpb24iKTtrKCJyb3RhdGlvbiIse2NvdW50ZXJjbG9ja3dpc2U6MCxjbG9ja3dpc2U6OTB9W09dKX1pZihmKE0sUyxrLFMudHlwZSx7dGlja1N1ZmZpeERmbHQ6ImRlZ3JlZXMiPT09Uy50aGV0YXVuaXQ/Ilx4YjAiOnZvaWQgMH0pLEMpe3ZhciB6LEQsUixGLEI9by5mb250fHx7fTtEPSh6PWsoImNvbG9yIikpPT09TS5jb2xvcj96OkIuY29sb3IsUj1CLnNpemUsRj1CLmZhbWlseSxsKE0sUyxrLFMudHlwZSksdShNLFMsayxTLnR5cGUse2ZvbnQ6e2NvbG9yOkQsc2l6ZTpSLGZhbWlseTpGfX0pLGMoTSxTLGsse291dGVyVGlja3M6ITB9KSxwKE0sUyxrLHtkZmx0Q29sb3I6eixiZ0NvbG9yOm8uYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6bVtfXX0pLGsoImxheWVyIiksInJhZGlhbGF4aXMiPT09XyYmKGsoInNpZGUiKSxrKCJhbmdsZSIseFswXSksaygidGl0bGUudGV4dCIpLG4uY29lcmNlRm9udChrLCJ0aXRsZS5mb250Iix7Y29sb3I6RCxzaXplOm4uYmlnRm9udChSKSxmYW1pbHk6Rn0pKX0iY2F0ZWdvcnkiIT09TCYmaygiaG92ZXJmb3JtYXQiKSxTLl9pbnB1dD1NfSJjYXRlZ29yeSI9PT1lLmFuZ3VsYXJheGlzLnR5cGUmJnIoImdyaWRzaGFwZSIpfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEpe3ZhciBvPXIoImF1dG90eXBlbnVtYmVycyIsYS5hdXRvdHlwZW51bWJlcnNEZmx0KTtpZigiLSI9PT1yKCJ0eXBlIikpe2Zvcih2YXIgcyxsPTA7bDxuLmxlbmd0aDtsKyspaWYobltsXS52aXNpYmxlKXtzPW5bbF07YnJlYWt9cyYmc1tpXSYmKGUudHlwZT1kKHNbaV0sImdyZWdvcmlhbiIse25vTXVsdGlDYXRlZ29yeTohMCxhdXRvdHlwZW51bWJlcnM6b30pKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGV9cmV0dXJuIGUudHlwZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6di5uYW1lLGF0dHJpYnV0ZXM6bSxoYW5kbGVEZWZhdWx0czp4LGZvbnQ6ZS5mb250LGF1dG90eXBlbnVtYmVyc0RmbHQ6ZS5hdXRvdHlwZW51bWJlcnMscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsZnVsbERhdGE6cixsYXlvdXRPdXQ6ZX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo1NTUsIi4uL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NTU5LCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIjo1NzEsIi4uL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIjo1NzMsIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo1NzgsIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjU3OSwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjU4MCwiLi4vZ2V0X2RhdGEiOjU5MywiLi4vc3VicGxvdF9kZWZhdWx0cyI6NjMyLCIuL2NvbnN0YW50cyI6NjIwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MjMsIi4vc2V0X2NvbnZlcnQiOjYyNn1dLDYyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clJvdGF0ZSxsPW8uc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi9wbG90cyIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxwPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGQ9dCgiLi9zZXRfY29udmVydCIpLG09dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLGc9dCgiLi4vY2FydGVzaWFuL2RyYWdib3giKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx5PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx4PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksYj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxfPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHc9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LFQ9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGs9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksQT10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsTT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULFM9dCgiLi9jb25zdGFudHMiKSxFPXQoIi4vaGVscGVycyIpLEw9dCgiLi4vc21pdGgvaGVscGVycyIpLEM9TC5zbWl0aCxQPUwucmVhY3RhbmNlQXJjLEk9TC5yZXNpc3RhbmNlQXJjLE89TC5zbWl0aFRyYW5zZm9ybSx6PW8uXyxEPW8ubW9kLFI9by5kZWcycmFkLEY9by5yYWQyZGVnO2Z1bmN0aW9uIEIodCxlLHIpe3RoaXMuaXNTbWl0aD1yfHwhMSx0aGlzLmlkPWUsdGhpcy5nZD10LHRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT1udWxsLHRoaXMudmFuZ2xlcz1udWxsLHRoaXMucmFkaWFsQXhpc0FuZ2xlPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5jbGlwUGF0aHM9e30sdGhpcy5jbGlwSWRzPXt9LHRoaXMudmlld0luaXRpYWw9e307dmFyIG49dC5fZnVsbExheW91dCxpPSJjbGlwIituLl91aWQrZTt0aGlzLmNsaXBJZHMuZm9yVHJhY2VzPWkrIi1mb3ItdHJhY2VzIix0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXM9bi5fY2xpcHMuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIix0aGlzLmNsaXBJZHMuZm9yVHJhY2VzKSx0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuYXBwZW5kKCJwYXRoIiksdGhpcy5mcmFtZXdvcms9blsiXyIrKHI/InNtaXRoIjoicG9sYXIiKSsibGF5ZXIiXS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZSksdGhpcy5nZXRIb2xlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzU21pdGg/MDp0LmhvbGV9LHRoaXMuZ2V0U2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzU21pdGg/WzAsMzYwXTp0LnNlY3Rvcn0sdGhpcy5nZXRSYWRpYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNTbWl0aD90LnJlYWxheGlzOnQucmFkaWFsYXhpc30sdGhpcy5nZXRBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzU21pdGg/dC5pbWFnaW5hcnlheGlzOnQuYW5ndWxhcmF4aXN9LHJ8fCh0aGlzLnJhZGlhbFRpY2tMYXlvdXQ9bnVsbCx0aGlzLmFuZ3VsYXJUaWNrTGF5b3V0PW51bGwpfXZhciBOPUIucHJvdG90eXBlO2Z1bmN0aW9uIGoodCl7dmFyIGU9dC50aWNrcytTdHJpbmcodC50aWNrbGVuKStTdHJpbmcodC5zaG93dGlja2xhYmVscyk7cmV0dXJuInNpZGUiaW4gdCYmKGUrPXQuc2lkZSksZX1mdW5jdGlvbiBVKHQsZSl7cmV0dXJuIGVbby5maW5kSW5kZXhPZk1pbihlLChmdW5jdGlvbihlKXtyZXR1cm4gby5hbmdsZURpc3QodCxlKX0pKV19ZnVuY3Rpb24gVih0LGUscil7cmV0dXJuIGU/KHQuYXR0cigiZGlzcGxheSIsbnVsbCksdC5hdHRyKHIpKTp0JiZ0LmF0dHIoImRpc3BsYXkiLCJub25lIiksdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgQih0LGUscil9LE4ucGxvdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lW3RoaXMuaWRdLG49ITEsaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7bj0hMDticmVha319dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW4sdGhpcy51cGRhdGVMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZUxheW91dChlLHIpLGYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ2QsdGhpcyx0LHIpLHRoaXMudXBkYXRlRngoZSxyKSx0aGlzLmlzU21pdGgmJihkZWxldGUgci5yZWFsYXhpcy5yYW5nZSxkZWxldGUgci5pbWFnaW5hcnlheGlzLnJhbmdlKX0sTi51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlzU21pdGgsaT10aGlzLmxheWVycyxhPXRoaXMuZ2V0UmFkaWFsKGUpLG89dGhpcy5nZXRBbmd1bGFyKGUpLHM9Uy5sYXllck5hbWVzLGw9cy5pbmRleE9mKCJmcm9udHBsb3QiKSxjPXMuc2xpY2UoMCxsKSx1PSJiZWxvdyB0cmFjZXMiPT09by5sYXllcixmPSJiZWxvdyB0cmFjZXMiPT09YS5sYXllcjt1JiZjLnB1c2goImFuZ3VsYXItbGluZSIpLGYmJmMucHVzaCgicmFkaWFsLWxpbmUiKSx1JiZjLnB1c2goImFuZ3VsYXItYXhpcyIpLGYmJmMucHVzaCgicmFkaWFsLWF4aXMiKSxjLnB1c2goImZyb250cGxvdCIpLHV8fGMucHVzaCgiYW5ndWxhci1saW5lIiksZnx8Yy5wdXNoKCJyYWRpYWwtbGluZSIpLHV8fGMucHVzaCgiYW5ndWxhci1heGlzIiksZnx8Yy5wdXNoKCJyYWRpYWwtYXhpcyIpO3ZhciBoPShyPyJzbWl0aCI6InBvbGFyIikrInN1YmxheWVyIixwPXRoaXMuZnJhbWV3b3JrLnNlbGVjdEFsbCgiLiIraCkuZGF0YShjLFN0cmluZyk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIGgrIiAiK3R9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aVt0XT1uLnNlbGVjdCh0aGlzKTtzd2l0Y2godCl7Y2FzZSJmcm9udHBsb3QiOnJ8fGUuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmFybGF5ZXIiLCEwKSxlLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApO2JyZWFrO2Nhc2UiYmFja3Bsb3QiOmUuYXBwZW5kKCJnIikuY2xhc3NlZCgibWFwbGF5ZXIiLCEwKTticmVhaztjYXNlInBsb3RiZyI6aS5iZz1lLmFwcGVuZCgicGF0aCIpO2JyZWFrO2Nhc2UicmFkaWFsLWdyaWQiOmNhc2UiYW5ndWxhci1ncmlkIjplLnN0eWxlKCJmaWxsIiwibm9uZSIpO2JyZWFrO2Nhc2UicmFkaWFsLWxpbmUiOmUuYXBwZW5kKCJsaW5lIikuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJhbmd1bGFyLWxpbmUiOmUuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGwiLCJub25lIil9fSkpLHAub3JkZXIoKX0sTi51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxuPXQuX3NpemUsaT10aGlzLmdldFJhZGlhbChlKSxhPXRoaXMuZ2V0QW5ndWxhcihlKSxvPWUuZG9tYWluLngscz1lLmRvbWFpbi55O3RoaXMueE9mZnNldD1uLmwrbi53Km9bMF0sdGhpcy55T2Zmc2V0PW4udCtuLmgqKDEtc1sxXSk7dmFyIGY9dGhpcy54TGVuZ3RoPW4udyoob1sxXS1vWzBdKSxoPXRoaXMueUxlbmd0aD1uLmgqKHNbMV0tc1swXSkscD10aGlzLmdldFNlY3RvcihlKTt0aGlzLnNlY3RvckluUmFkPXAubWFwKFIpO3ZhciBkLG0sZyx2LHkseD10aGlzLnNlY3RvckJCb3g9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10WzBdLG89dFsxXS1hLHM9RChhLDM2MCksbD1zK28sYz1NYXRoLmNvcyhSKHMpKSx1PU1hdGguc2luKFIocykpLGY9TWF0aC5jb3MoUihsKSksaD1NYXRoLnNpbihSKGwpKTtpPXM8PTkwJiZsPj05MHx8cz45MCYmbD49NDUwPzE6dTw9MCYmaDw9MD8wOk1hdGgubWF4KHUsaCk7ZT1zPD0xODAmJmw+PTE4MHx8cz4xODAmJmw+PTU0MD8tMTpjPj0wJiZmPj0wPzA6TWF0aC5taW4oYyxmKTtyPXM8PTI3MCYmbD49MjcwfHxzPjI3MCYmbD49NjMwPy0xOnU+PTAmJmg+PTA/MDpNYXRoLm1pbih1LGgpO249bD49MzYwPzE6Yzw9MCYmZjw9MD8wOk1hdGgubWF4KGMsZik7cmV0dXJuW2UscixuLGldfShwKSxiPXhbMl0teFswXSxfPXhbM10teFsxXSx3PWgvZixUPU1hdGguYWJzKF8vYik7dz5UPyhkPWYseT0oaC0obT1mKlQpKS9uLmgvMixnPVtvWzBdLG9bMV1dLHY9W3NbMF0reSxzWzFdLXldKToobT1oLHk9KGYtKGQ9aC9UKSkvbi53LzIsZz1bb1swXSt5LG9bMV0teV0sdj1bc1swXSxzWzFdXSksdGhpcy54TGVuZ3RoMj1kLHRoaXMueUxlbmd0aDI9bSx0aGlzLnhEb21haW4yPWcsdGhpcy55RG9tYWluMj12O3ZhciBrLEE9dGhpcy54T2Zmc2V0Mj1uLmwrbi53KmdbMF0sTT10aGlzLnlPZmZzZXQyPW4udCtuLmgqKDEtdlsxXSksUz10aGlzLnJhZGl1cz1kL2IsRT10aGlzLmlubmVyUmFkaXVzPXRoaXMuZ2V0SG9sZShlKSpTLEw9dGhpcy5jeD1BLVMqeFswXSxDPXRoaXMuY3k9TStTKnhbM10sUD10aGlzLmN4eD1MLUEsST10aGlzLmN5eT1DLU0sTz1pLnNpZGU7ImNvdW50ZXJjbG9ja3dpc2UiPT09Tz8oaz1PLE89InRvcCIpOiJjbG9ja3dpc2UiPT09TyYmKGs9TyxPPSJib3R0b20iKSx0aGlzLnJhZGlhbEF4aXM9dGhpcy5tb2NrQXhpcyh0LGUsaSx7X2lkOiJ4IixzaWRlOk8sX3RydWVTaWRlOmssZG9tYWluOltFL24udyxTL24ud119KSx0aGlzLmFuZ3VsYXJBeGlzPXRoaXMubW9ja0F4aXModCxlLGEse3NpZGU6InJpZ2h0Iixkb21haW46WzAsTWF0aC5QSV0sYXV0b3JhbmdlOiExfSksdGhpcy5kb0F1dG9SYW5nZSh0LGUpLHRoaXMudXBkYXRlQW5ndWxhckF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh0LGUpLHRoaXMueGF4aXM9dGhpcy5tb2NrQ2FydGVzaWFuQXhpcyh0LGUse19pZDoieCIsZG9tYWluOmd9KSx0aGlzLnlheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6InkiLGRvbWFpbjp2fSk7dmFyIHo9dGhpcy5wYXRoU3VicGxvdCgpO3RoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIix6KS5hdHRyKCJ0cmFuc2Zvcm0iLGwoUCxJKSksci5mcm9udHBsb3QuYXR0cigidHJhbnNmb3JtIixsKEEsTSkpLmNhbGwodS5zZXRDbGlwVXJsLHRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOnRoaXMuY2xpcElkcy5mb3JUcmFjZXMsdGhpcy5nZCksci5iZy5hdHRyKCJkIix6KS5hdHRyKCJ0cmFuc2Zvcm0iLGwoTCxDKSkuY2FsbChjLmZpbGwsZS5iZ2NvbG9yKX0sTi5tb2NrQXhpcz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmV4dGVuZEZsYXQoe30scixuKTtyZXR1cm4gZChpLGUsdCksaX0sTi5tb2NrQ2FydGVzaWFuQXhpcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPW4uaXNTbWl0aCxhPXIuX2lkLHM9by5leHRlbmRGbGF0KHt0eXBlOiJsaW5lYXIifSxyKTtwKHMsdCk7dmFyIGw9e3g6WzAsMl0seTpbMSwzXX07cmV0dXJuIHMuc2V0UmFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD1uLnNlY3RvckJCb3gscj1sW2FdLGk9bi5yYWRpYWxBeGlzLl9ybCxvPShpWzFdLWlbMF0pLygxLW4uZ2V0SG9sZShlKSk7cy5yYW5nZT1bdFtyWzBdXSpvLHRbclsxXV0qb119LHMuaXNQdFdpdGhpblJhbmdlPSJ4IiE9PWF8fGk/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQdEluc2lkZSh0KX0scy5zZXRSYW5nZSgpLHMuc2V0U2NhbGUoKSxzfSxOLmRvQXV0b1JhbmdlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZCxuPXRoaXMucmFkaWFsQXhpcyxpPXRoaXMuZ2V0UmFkaWFsKGUpO20ocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLCJncmVnb3JpYW4iKSxuLnIybChhWzFdLG51bGwsImdyZWdvcmlhbiIpXX0sTi51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ci5nZXRSYWRpYWwoZSksbT1EKHIuZ2V0U2VjdG9yKGUpWzBdLDM2MCksZz1yLnJhZGlhbEF4aXMsdj11PGEseT1yLmlzU21pdGg7eXx8KHIuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLmFuZ2xlIixkLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5yYW5nZSIsZy5yYW5nZS5zbGljZSgpKSxnLnNldEdlb21ldHJ5KCkpLCJhdXRvIj09PWcudGlja2FuZ2xlJiZtPjkwJiZtPD0yNzAmJihnLnRpY2thbmdsZT0xODApO3ZhciB4PXk/ZnVuY3Rpb24odCl7dmFyIGU9TyhyLEMoW3QueCwwXSkpO3JldHVybiBsKGVbMF0tZixlWzFdLXApfTpmdW5jdGlvbih0KXtyZXR1cm4gbChnLmwycCh0LngpK3UsMCl9LGI9eT9mdW5jdGlvbih0KXtyZXR1cm4gSShyLHQueCwtMS8wLDEvMCl9OmZ1bmN0aW9uKHQpe3JldHVybiByLnBhdGhBcmMoZy5yMnAodC54KSt1KX0sXz1qKGQpO2lmKHIucmFkaWFsVGlja0xheW91dCE9PV8mJihpWyJyYWRpYWwtYXhpcyJdLnNlbGVjdEFsbCgiLnh0aWNrIikucmVtb3ZlKCksci5yYWRpYWxUaWNrTGF5b3V0PV8pLHYpe2cuc2V0U2NhbGUoKTt2YXIgdz0wLFQ9eT8oZy50aWNrdmFsc3x8W10pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTB9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaC50aWNrVGV4dChnLHQsITAsITEpfSkpOmguY2FsY1RpY2tzKGcpLGs9eT9UOmguY2xpcEVuZHMoZyxUKSxBPWguZ2V0VGlja1NpZ25zKGcpWzJdO3kmJigoInRvcCI9PT1nLnRpY2tzJiYiYm90dG9tIj09PWcuc2lkZXx8ImJvdHRvbSI9PT1nLnRpY2tzJiYidG9wIj09PWcuc2lkZSkmJihBPS1BKSwidG9wIj09PWcudGlja3MmJiJ0b3AiPT09Zy5zaWRlJiYodz0tZy50aWNrbGVuKSwiYm90dG9tIj09PWcudGlja3MmJiJib3R0b20iPT09Zy5zaWRlJiYodz1nLnRpY2tsZW4pKSxoLmRyYXdUaWNrcyhuLGcse3ZhbHM6VCxsYXllcjppWyJyYWRpYWwtYXhpcyJdLHBhdGg6aC5tYWtlVGlja1BhdGgoZywwLEEpLHRyYW5zRm46eCxjcmlzcDohMX0pLGguZHJhd0dyaWQobixnLHt2YWxzOmssbGF5ZXI6aVsicmFkaWFsLWdyaWQiXSxwYXRoOmIsdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSxoLmRyYXdMYWJlbHMobixnLHt2YWxzOlQsbGF5ZXI6aVsicmFkaWFsLWF4aXMiXSx0cmFuc0ZuOngsbGFiZWxGbnM6aC5tYWtlTGFiZWxGbnMoZyx3KX0pfXZhciBNPXIucmFkaWFsQXhpc0FuZ2xlPXIudmFuZ2xlcz9GKFUoUihkLmFuZ2xlKSxyLnZhbmdsZXMpKTpkLmFuZ2xlLFM9bChmLHApLEU9UytzKC1NKTtWKGlbInJhZGlhbC1heGlzIl0sdiYmKGQuc2hvd3RpY2tsYWJlbHN8fGQudGlja3MpLHt0cmFuc2Zvcm06RX0pLFYoaVsicmFkaWFsLWdyaWQiXSx2JiZkLnNob3dncmlkLHt0cmFuc2Zvcm06eT8iIjpTfSksVihpWyJyYWRpYWwtbGluZSJdLnNlbGVjdCgibGluZSIpLHYmJmQuc2hvd2xpbmUse3gxOnk/LWE6dSx5MTowLHgyOmEseTI6MCx0cmFuc2Zvcm06RX0pLmF0dHIoInN0cm9rZS13aWR0aCIsZC5saW5ld2lkdGgpLmNhbGwoYy5zdHJva2UsZC5saW5lY29sb3IpfSxOLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuaXNTbWl0aCl7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz10aGlzLmdldFJhZGlhbChlKSxsPXRoaXMuaWQrInRpdGxlIixjPTA7aWYocy50aXRsZSl7dmFyIGY9dS5iQm94KHRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcyJdLm5vZGUoKSkuaGVpZ2h0LGg9cy50aXRsZS5mb250LnNpemUscD1zLnNpZGU7Yz0idG9wIj09PXA/aDoiY291bnRlcmNsb2Nrd2lzZSI9PT1wPy0oZisuNCpoKTpmKy44Kmh9dmFyIGQ9dm9pZCAwIT09cj9yOnRoaXMucmFkaWFsQXhpc0FuZ2xlLG09UihkKSxnPU1hdGguY29zKG0pLHY9TWF0aC5zaW4obSkseT1hK2kvMipnK2MqdixiPW8taS8yKnYrYypnO3RoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcy10aXRsZSJdPXguZHJhdyhuLGwse3Byb3BDb250YWluZXI6cyxwcm9wTmFtZTp0aGlzLmlkKyIucmFkaWFsYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6eihuLCJDbGljayB0byBlbnRlciByYWRpYWwgYXhpcyB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6eSx5OmIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0sdHJhbnNmb3JtOntyb3RhdGU6LWR9fSl9fSxOLnVwZGF0ZUFuZ3VsYXJBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ci5nZXRBbmd1bGFyKGUpLG09ci5hbmd1bGFyQXhpcyxnPXIuaXNTbWl0aDtnfHwoci5maWxsVmlld0luaXRpYWxLZXkoImFuZ3VsYXJheGlzLnJvdGF0aW9uIixkLnJvdGF0aW9uKSxtLnNldEdlb21ldHJ5KCksbS5zZXRTY2FsZSgpKTt2YXIgdj1nP2Z1bmN0aW9uKHQpe3ZhciBlPU8ocixDKFswLHQueF0pKTtyZXR1cm4gTWF0aC5hdGFuMihlWzBdLWYsZVsxXS1wKS1NYXRoLlBJLzJ9OmZ1bmN0aW9uKHQpe3JldHVybiBtLnQyZyh0LngpfTsibGluZWFyIj09PW0udHlwZSYmInJhZGlhbnMiPT09bS50aGV0YXVuaXQmJihtLnRpY2swPUYobS50aWNrMCksbS5kdGljaz1GKG0uZHRpY2spKTt2YXIgeT1mdW5jdGlvbih0KXtyZXR1cm4gbChmK2EqTWF0aC5jb3ModCkscC1hKk1hdGguc2luKHQpKX0seD1nP2Z1bmN0aW9uKHQpe3ZhciBlPU8ocixDKFswLHQueF0pKTtyZXR1cm4gbChlWzBdLGVbMV0pfTpmdW5jdGlvbih0KXtyZXR1cm4geSh2KHQpKX0sYj1nP2Z1bmN0aW9uKHQpe3ZhciBlPU8ocixDKFswLHQueF0pKSxuPU1hdGguYXRhbjIoZVswXS1mLGVbMV0tcCktTWF0aC5QSS8yO3JldHVybiBsKGVbMF0sZVsxXSkrcygtRihuKSl9OmZ1bmN0aW9uKHQpe3ZhciBlPXYodCk7cmV0dXJuIHkoZSkrcygtRihlKSl9LF89Zz9mdW5jdGlvbih0KXtyZXR1cm4gUChyLHQueCwwLDEvMCl9OmZ1bmN0aW9uKHQpe3ZhciBlPXYodCkscj1NYXRoLmNvcyhlKSxuPU1hdGguc2luKGUpO3JldHVybiJNIitbZit1KnIscC11Km5dKyJMIitbZithKnIscC1hKm5dfSx3PWgubWFrZUxhYmVsRm5zKG0sMCkubGFiZWxTdGFuZG9mZixUPXt4Rm46ZnVuY3Rpb24odCl7dmFyIGU9dih0KTtyZXR1cm4gTWF0aC5jb3MoZSkqd30seUZuOmZ1bmN0aW9uKHQpe3ZhciBlPXYodCkscj1NYXRoLnNpbihlKT4wPy4yOjE7cmV0dXJuLU1hdGguc2luKGUpKih3K3QuZm9udFNpemUqcikrTWF0aC5hYnMoTWF0aC5jb3MoZSkpKih0LmZvbnRTaXplKk0pfSxhbmNob3JGbjpmdW5jdGlvbih0KXt2YXIgZT12KHQpLHI9TWF0aC5jb3MoZSk7cmV0dXJuIE1hdGguYWJzKHIpPC4xPyJtaWRkbGUiOnI+MD8ic3RhcnQiOiJlbmQifSxoZWlnaHRGbjpmdW5jdGlvbih0LGUscil7dmFyIG49dih0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9fSxrPWooZCk7ci5hbmd1bGFyVGlja0xheW91dCE9PWsmJihpWyJhbmd1bGFyLWF4aXMiXS5zZWxlY3RBbGwoIi4iK20uX2lkKyJ0aWNrIikucmVtb3ZlKCksci5hbmd1bGFyVGlja0xheW91dD1rKTt2YXIgQSxTPWc/WzEvMF0uY29uY2F0KG0udGlja3ZhbHN8fFtdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBoLnRpY2tUZXh0KG0sdCwhMCwhMSl9KSk6aC5jYWxjVGlja3MobSk7aWYoZyYmKFNbMF0udGV4dD0iXHUyMjFlIixTWzBdLmZvbnRTaXplKj0xLjc1KSwibGluZWFyIj09PWUuZ3JpZHNoYXBlPyhBPVMubWFwKHYpLG8uYW5nbGVEZWx0YShBWzBdLEFbMV0pPDAmJihBPUEuc2xpY2UoKS5yZXZlcnNlKCkpKTpBPW51bGwsci52YW5nbGVzPUEsImNhdGVnb3J5Ij09PW0udHlwZSYmKFM9Uy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmlzQW5nbGVJbnNpZGVTZWN0b3Iodih0KSxyLnNlY3RvckluUmFkKX0pKSksbS52aXNpYmxlKXt2YXIgRT0iaW5zaWRlIj09PW0udGlja3M/LTE6MSxMPShtLmxpbmV3aWR0aHx8MSkvMjtoLmRyYXdUaWNrcyhuLG0se3ZhbHM6UyxsYXllcjppWyJhbmd1bGFyLWF4aXMiXSxwYXRoOiJNIitFKkwrIiwwaCIrRSptLnRpY2tsZW4sdHJhbnNGbjpiLGNyaXNwOiExfSksaC5kcmF3R3JpZChuLG0se3ZhbHM6UyxsYXllcjppWyJhbmd1bGFyLWdyaWQiXSxwYXRoOl8sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSxoLmRyYXdMYWJlbHMobixtLHt2YWxzOlMsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scmVwb3NpdGlvbk9uVXBkYXRlOiEwLHRyYW5zRm46eCxsYWJlbEZuczpUfSl9VihpWyJhbmd1bGFyLWxpbmUiXS5zZWxlY3QoInBhdGgiKSxkLnNob3dsaW5lLHtkOnIucGF0aFN1YnBsb3QoKSx0cmFuc2Zvcm06bChmLHApfSkuYXR0cigic3Ryb2tlLXdpZHRoIixkLmxpbmV3aWR0aCkuY2FsbChjLnN0cm9rZSxkLmxpbmVjb2xvcil9LE4udXBkYXRlRng9ZnVuY3Rpb24odCxlKXt0aGlzLmdkLl9jb250ZXh0LnN0YXRpY1Bsb3R8fCghdGhpcy5pc1NtaXRoJiYodGhpcy51cGRhdGVBbmd1bGFyRHJhZyh0KSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDApLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMSkpLHRoaXMudXBkYXRlSG92ZXJBbmRNYWluRHJhZyh0KSl9LE4udXBkYXRlSG92ZXJBbmRNYWluRHJhZz1mdW5jdGlvbih0KXt2YXIgZSxyLHM9dGhpcyxjPXMuaXNTbWl0aCx1PXMuZ2QsZj1zLmxheWVycyxoPXQuX3pvb21sYXllcixwPVMuTUlOWk9PTSxkPVMuT0ZGRURHRSxtPXMucmFkaXVzLHg9cy5pbm5lclJhZGl1cyxUPXMuY3gsaz1zLmN5LEE9cy5jeHgsTT1zLmN5eSxMPXMuc2VjdG9ySW5SYWQsQz1zLnZhbmdsZXMsUD1zLnJhZGlhbEF4aXMsST1FLmNsYW1wVGlueSxPPUUuZmluZFhZYXRMZW5ndGgsej1FLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXMsRD1TLmNvcm5lckhhbGZXaWR0aCxSPVMuY29ybmVyTGVuLzIsRj1nLm1ha2VEcmFnZ2VyKGYsInBhdGgiLCJtYWluZHJhZyIsImNyb3NzaGFpciIpO24uc2VsZWN0KEYpLmF0dHIoImQiLHMucGF0aFN1YnBsb3QoKSkuYXR0cigidHJhbnNmb3JtIixsKFQsaykpLEYub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7eS5ob3Zlcih1LHQscy5pZCksdS5fZnVsbExheW91dC5fbGFzdGhvdmVyPUYsdS5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXMuaWR9LEYub25tb3VzZW91dD1mdW5jdGlvbih0KXt1Ll9kcmFnZ2luZ3x8di51bmhvdmVyKHUsdCl9O3ZhciBCLE4saixVLFYsSCxxLEcsWSxXPXtlbGVtZW50OkYsZ2Q6dSxzdWJwbG90OnMuaWQscGxvdGluZm86e2lkOnMuaWQseGF4aXM6cy54YXhpcyx5YXhpczpzLnlheGlzfSx4YXhlczpbcy54YXhpc10seWF4ZXM6W3MueWF4aXNdfTtmdW5jdGlvbiBYKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKX1mdW5jdGlvbiBaKHQsZSl7cmV0dXJuIFgodC1BLGUtTSl9ZnVuY3Rpb24gSih0LGUpe3JldHVybiBNYXRoLmF0YW4yKE0tZSx0LUEpfWZ1bmN0aW9uIEsodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKC1lKV19ZnVuY3Rpb24gUSh0LGUpe2lmKDA9PT10KXJldHVybiBzLnBhdGhTZWN0b3IoMipEKTt2YXIgcj1SL3Qsbj1lLXIsaT1lK3IsYT1NYXRoLm1heCgwLE1hdGgubWluKHQsbSkpLG89YS1ELGw9YStEO3JldHVybiJNIitLKG8sbikrIkEiK1tvLG9dKyIgMCwwLDAgIitLKG8saSkrIkwiK0sobCxpKSsiQSIrW2wsbF0rIiAwLDAsMSAiK0sobCxuKSsiWiJ9ZnVuY3Rpb24gJCh0LGUscil7aWYoMD09PXQpcmV0dXJuIHMucGF0aFNlY3RvcigyKkQpO3ZhciBuLGksYT1LKHQsZSksbz1LKHQsciksbD1JKChhWzBdK29bMF0pLzIpLGM9SSgoYVsxXStvWzFdKS8yKTtpZihsJiZjKXt2YXIgdT1jL2wsZj0tMS91LGg9TyhELHUsbCxjKTtuPU8oUixmLGhbMF1bMF0saFswXVsxXSksaT1PKFIsZixoWzFdWzBdLGhbMV1bMV0pfWVsc2V7dmFyIHAsZDtjPyhwPVIsZD1EKToocD1ELGQ9Uiksbj1bW2wtcCxjLWRdLFtsK3AsYy1kXV0saT1bW2wtcCxjK2RdLFtsK3AsYytkXV19cmV0dXJuIk0iK24uam9pbigiTCIpKyJMIitpLnJldmVyc2UoKS5qb2luKCJMIikrIloifWZ1bmN0aW9uIHR0KHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoTWF0aC5taW4oZSxtKSx4KSx0PGQ/dD0wOm0tdDxkP3Q9bTplPGQ/ZT0wOm0tZTxkJiYoZT1tKSxNYXRoLmFicyhlLXQpPnA/KHQ8ZT8oaj10LFU9ZSk6KGo9ZSxVPXQpLCEwKTooaj1udWxsLFU9bnVsbCwhMSl9ZnVuY3Rpb24gZXQodCxlKXt0PXR8fFYsZT1lfHwiTTAsMFoiLEcuYXR0cigiZCIsdCksWS5hdHRyKCJkIixlKSxnLnRyYW5zaXRpb25ab29tYm94KEcsWSxILHEpLEg9ITA7dmFyIHI9e307b3QociksdS5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHIpfWZ1bmN0aW9uIHJ0KHQsbil7dmFyIGksYSxvPUIrKHQqPWUpLGw9Tisobio9ciksYz1aKEIsTiksdT1NYXRoLm1pbihaKG8sbCksbSksZj1KKEIsTik7dHQoYyx1KSYmKGk9VitzLnBhdGhTZWN0b3IoVSksaiYmKGkrPXMucGF0aFNlY3RvcihqKSksYT1RKGosZikrUShVLGYpKSxldChpLGEpfWZ1bmN0aW9uIG50KHQsZSxyLG4pe3ZhciBpPUUuZmluZEludGVyc2VjdGlvblhZKHIsbixyLFt0LUEsTS1lXSk7cmV0dXJuIFgoaVswXSxpWzFdKX1mdW5jdGlvbiBpdCh0LGUpe3ZhciByLG4saT1CK3QsYT1OK2Usbz1KKEIsTiksbD1KKGksYSksYz16KG8sQyksdT16KGwsQyk7dHQobnQoQixOLGNbMF0sY1sxXSksTWF0aC5taW4obnQoaSxhLHVbMF0sdVsxXSksbSkpJiYocj1WK3MucGF0aFNlY3RvcihVKSxqJiYocis9cy5wYXRoU2VjdG9yKGopKSxuPVskKGosY1swXSxjWzFdKSwkKFUsY1swXSxjWzFdKV0uam9pbigiICIpKSxldChyLG4pfWZ1bmN0aW9uIGF0KCl7aWYoZy5yZW1vdmVab29tYm94KHUpLG51bGwhPT1qJiZudWxsIT09VSl7dmFyIHQ9e307b3QodCksZy5zaG93RG91YmxlQ2xpY2tOb3RpZmllcih1KSxhLmNhbGwoIl9ndWlSZWxheW91dCIsdSx0KX19ZnVuY3Rpb24gb3QodCl7dmFyIGU9UC5fcmwscj0oZVsxXS1lWzBdKS8oMS14L20pL20sbj1bZVswXSsoai14KSpyLGVbMF0rKFUteCkqcl07dFtzLmlkKyIucmFkaWFsYXhpcy5yYW5nZSJdPW59ZnVuY3Rpb24gc3QodCxlKXt2YXIgcj11Ll9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpZihnLnJlbW92ZVpvb21ib3godSksMj09PXQpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBzLnZpZXdJbml0aWFsKW5bcy5pZCsiLiIraV09cy52aWV3SW5pdGlhbFtpXTt1LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHUsbil9ci5pbmRleE9mKCJzZWxlY3QiKT4tMSYmMT09PXQmJl8oZSx1LFtzLnhheGlzXSxbcy55YXhpc10scy5pZCxXKSxyLmluZGV4T2YoImV2ZW50Iik+LTEmJnkuY2xpY2sodSxlLHMuaWQpfVcucHJlcEZuPWZ1bmN0aW9uKHQsbixhKXt2YXIgbD11Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGY9Ri5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt1Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh1KTt2YXIgcD11Ll9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm07ZT11Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgscj11Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVk7dmFyIGQ9by5hcHBseTNEVHJhbnNmb3JtKHApKG4tZi5sZWZ0LGEtZi50b3ApO2lmKEI9ZFswXSxOPWRbMV0sQyl7dmFyIHY9RS5maW5kUG9seWdvbk9mZnNldChtLExbMF0sTFsxXSxDKTtCKz1BK3ZbMF0sTis9TSt2WzFdfXN3aXRjaChsKXtjYXNlInpvb20iOlcuY2xpY2tGbj1zdCxjfHwoVy5tb3ZlRm49Qz9pdDpydCxXLmRvbmVGbj1hdCxmdW5jdGlvbigpe2o9bnVsbCxVPW51bGwsVj1zLnBhdGhTdWJwbG90KCksSD0hMTt2YXIgdD11Ll9mdWxsTGF5b3V0W3MuaWRdO3E9aSh0LmJnY29sb3IpLmdldEx1bWluYW5jZSgpLChHPWcubWFrZVpvb21ib3goaCxxLFQsayxWKSkuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLFk9Zy5tYWtlQ29ybmVycyhoLFQsayksdyh1KX0oKSk7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2UibGFzc28iOmIodCxuLGEsVyxsKX19LHYuaW5pdChXKX0sTi51cGRhdGVSYWRpYWxEcmFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLGM9aS5nZCx1PWkubGF5ZXJzLGY9aS5yYWRpdXMsaD1pLmlubmVyUmFkaXVzLHA9aS5jeCxkPWkuY3ksbT1pLnJhZGlhbEF4aXMseT1TLnJhZGlhbERyYWdCb3hTaXplLHg9eS8yO2lmKG0udmlzaWJsZSl7dmFyIGIsXyxULE09UihpLnJhZGlhbEF4aXNBbmdsZSksRT1tLl9ybCxMPUVbMF0sQz1FWzFdLFA9RVtyXSxJPS43NSooRVsxXS1FWzBdKS8oMS1pLmdldEhvbGUoZSkpL2Y7cj8oYj1wKyhmK3gpKk1hdGguY29zKE0pLF89ZC0oZit4KSpNYXRoLnNpbihNKSxUPSJyYWRpYWxkcmFnIik6KGI9cCsoaC14KSpNYXRoLmNvcyhNKSxfPWQtKGgteCkqTWF0aC5zaW4oTSksVD0icmFkaWFsZHJhZy1pbm5lciIpO3ZhciBPLHosRCxCPWcubWFrZVJlY3REcmFnZ2VyKHUsVCwiY3Jvc3NoYWlyIiwteCwteCx5LHkpLE49e2VsZW1lbnQ6QixnZDpjfTtWKG4uc2VsZWN0KEIpLG0udmlzaWJsZSYmaDxmLHt0cmFuc2Zvcm06bChiLF8pfSksTi5wcmVwRm49ZnVuY3Rpb24oKXtPPW51bGwsej1udWxsLEQ9bnVsbCxOLm1vdmVGbj1qLE4uZG9uZUZuPUgsdyhjKX0sTi5jbGFtcEZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKTxTLk1JTkRSQUcmJih0PTAsZT0wKSxbdCxlXX0sdi5pbml0KE4pfWZ1bmN0aW9uIGoodCxlKXtpZihPKU8odCxlKTtlbHNle3ZhciBuPVt0LC1lXSxhPVtNYXRoLmNvcyhNKSxNYXRoLnNpbihNKV0scz1NYXRoLmFicyhvLmRvdChuLGEpL01hdGguc3FydChvLmRvdChuLG4pKSk7aXNOYU4ocyl8fChPPXM8LjU/cTpHKX12YXIgbD17fTshZnVuY3Rpb24odCl7bnVsbCE9PXo/dFtpLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPXo6bnVsbCE9PUQmJih0W2kuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSJdPUQpfShsKSxjLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsbCl9ZnVuY3Rpb24gSCgpe251bGwhPT16P2EuY2FsbCgiX2d1aVJlbGF5b3V0IixjLGkuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIix6KTpudWxsIT09RCYmYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGMsaS5pZCsiLnJhZGlhbGF4aXMucmFuZ2VbIityKyJdIixEKX1mdW5jdGlvbiBxKHQsZSl7aWYoMCE9PXIpe3ZhciBuPWIrdCxhPV8rZTt6PU1hdGguYXRhbjIoZC1hLG4tcCksaS52YW5nbGVzJiYoej1VKHosaS52YW5nbGVzKSksej1GKHopO3ZhciBvPWwocCxkKStzKC16KTt1WyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsbyksdVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pO3ZhciBjPWkuZ2QuX2Z1bGxMYXlvdXQsZj1jW2kuaWRdO2kudXBkYXRlUmFkaWFsQXhpc1RpdGxlKGMsZix6KX19ZnVuY3Rpb24gRyh0LGUpe3ZhciBuPW8uZG90KFt0LC1lXSxbTWF0aC5jb3MoTSksTWF0aC5zaW4oTSldKTtpZihEPVAtSSpuLEk+MD09KHI/RD5MOkQ8Qykpe3ZhciBzPWMuX2Z1bGxMYXlvdXQsbD1zW2kuaWRdO20ucmFuZ2Vbcl09RCxtLl9ybFtyXT1ELGkudXBkYXRlUmFkaWFsQXhpcyhzLGwpLGkueGF4aXMuc2V0UmFuZ2UoKSxpLnhheGlzLnNldFNjYWxlKCksaS55YXhpcy5zZXRSYW5nZSgpLGkueWF4aXMuc2V0U2NhbGUoKTt2YXIgdT0hMTtmb3IodmFyIGYgaW4gaS50cmFjZUhhc2gpe3ZhciBoPWkudHJhY2VIYXNoW2ZdLHA9by5maWx0ZXJWaXNpYmxlKGgpO2hbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KGMsaSxwLGwpLGEudHJhY2VJcyhmLCJnbCIpJiZwLmxlbmd0aCYmKHU9ITApfXUmJihrKGMpLEEoYykpfWVsc2UgRD1udWxsfX0sTi51cGRhdGVBbmd1bGFyRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxpPWUubGF5ZXJzLGM9ZS5yYWRpdXMsZj1lLmFuZ3VsYXJBeGlzLGg9ZS5jeCxwPWUuY3ksZD1lLmN4eCxtPWUuY3l5LHk9Uy5hbmd1bGFyRHJhZ0JveFNpemUseD1nLm1ha2VEcmFnZ2VyKGksInBhdGgiLCJhbmd1bGFyZHJhZyIsIm1vdmUiKSxiPXtlbGVtZW50OngsZ2Q6cn07ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBNYXRoLmF0YW4yKG0reS1lLHQtZC15KX1uLnNlbGVjdCh4KS5hdHRyKCJkIixlLnBhdGhBbm51bHVzKGMsYyt5KSkuYXR0cigidHJhbnNmb3JtIixsKGgscCkpLmNhbGwoVCwibW92ZSIpO3ZhciBNLEUsTCxDLFAsSSxPPWkuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIiksej1PLnNlbGVjdEFsbCgiLnBvaW50IiksRD1PLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpO2Z1bmN0aW9uIFIoYyxnKXt2YXIgdj1lLmdkLl9mdWxsTGF5b3V0LHk9dltlLmlkXSx4PV8oTStjKnQuX2ludlNjYWxlWCxFK2cqdC5faW52U2NhbGVZKSxiPUYoeC1JKTtpZihDPUwrYixpLmZyb250cGxvdC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54T2Zmc2V0MixlLnlPZmZzZXQyKStzKFstYixkLG1dKSksZS52YW5nbGVzKXtQPWUucmFkaWFsQXhpc0FuZ2xlK2I7dmFyIHc9bChoLHApK3MoLWIpLFQ9bChoLHApK3MoLVApO2kuYmcuYXR0cigidHJhbnNmb3JtIix3KSxpWyJyYWRpYWwtZ3JpZCJdLmF0dHIoInRyYW5zZm9ybSIsdyksaVsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLFQpLGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixUKSxlLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh2LHksUCl9ZWxzZSBlLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixsKGQsbSkrcyhiKSk7ei5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54LGUueSkrcyhbYl0pKX0pKSxELmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgidGV4dCIpLHI9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLHMoW2IsZS5hdHRyKCJ4IiksZS5hdHRyKCJ5IildKStsKHIueCxyLnkpKX0pKSxmLnJvdGF0aW9uPW8ubW9kSGFsZihDLDM2MCksZS51cGRhdGVBbmd1bGFyQXhpcyh2LHkpLGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiZPLmNhbGwodS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLGUpO3ZhciBTPSExO2Zvcih2YXIgUiBpbiBlLnRyYWNlSGFzaClpZihhLnRyYWNlSXMoUiwiZ2wiKSl7dmFyIE49ZS50cmFjZUhhc2hbUl0saj1vLmZpbHRlclZpc2libGUoTik7TlswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocixlLGoseSksai5sZW5ndGgmJihTPSEwKX1TJiYoayhyKSxBKHIpKTt2YXIgVT17fTtCKFUpLHIuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixVKX1mdW5jdGlvbiBCKHQpe3RbZS5pZCsiLmFuZ3VsYXJheGlzLnJvdGF0aW9uIl09QyxlLnZhbmdsZXMmJih0W2UuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIl09UCl9ZnVuY3Rpb24gTigpe0Quc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgdD17fTtCKHQpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfWIucHJlcEZuPWZ1bmN0aW9uKG4saSxhKXt2YXIgcz10W2UuaWRdO0w9cy5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgbD14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO009aS1sLmxlZnQsRT1hLWwudG9wLHIuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHIpO3ZhciBjPW8uYXBwbHkzRFRyYW5zZm9ybSh0Ll9pbnZUcmFuc2Zvcm0pKE0sRSk7TT1jWzBdLEU9Y1sxXSxJPV8oTSxFKSxiLm1vdmVGbj1SLGIuZG9uZUZuPU4sdyhyKX0sZS52YW5nbGVzJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJihiLnByZXBGbj1vLm5vb3AsVChuLnNlbGVjdCh4KSxudWxsKSksdi5pbml0KGIpfSxOLmlzUHRJbnNpZGU9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1NtaXRoKXJldHVybiEwO3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXMsbj10aGlzLmFuZ3VsYXJBeGlzLmMyZyh0LnRoZXRhKSxpPXRoaXMucmFkaWFsQXhpcyxhPWkuYzJsKHQucikscz1pLl9ybDtyZXR1cm4ocj9FLmlzUHRJbnNpZGVQb2x5Z29uOm8uaXNQdEluc2lkZVNlY3RvcikoYSxuLHMsZSxyKX0sTi5wYXRoQXJjPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXM7cmV0dXJuKHI/RS5wYXRoUG9seWdvbjpvLnBhdGhBcmMpKHQsZVswXSxlWzFdLHIpfSxOLnBhdGhTZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9FLnBhdGhQb2x5Z29uOm8ucGF0aFNlY3RvcikodCxlWzBdLGVbMV0scil9LE4ucGF0aEFubnVsdXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNlY3RvckluUmFkLG49dGhpcy52YW5nbGVzO3JldHVybihuP0UucGF0aFBvbHlnb25Bbm51bHVzOm8ucGF0aEFubnVsdXMpKHQsZSxyWzBdLHJbMV0sbil9LE4ucGF0aFN1YnBsb3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlubmVyUmFkaXVzLGU9dGhpcy5yYWRpdXM7cmV0dXJuIHQ/dGhpcy5wYXRoQW5udWx1cyh0LGUpOnRoaXMucGF0aFNlY3RvcihlKX0sTi5maWxsVmlld0luaXRpYWxLZXk9ZnVuY3Rpb24odCxlKXt0IGluIHRoaXMudmlld0luaXRpYWx8fCh0aGlzLnZpZXdJbml0aWFsW3RdPWUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjM4NSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjQ2NCwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo0ODcsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjUyNCwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjU0NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSI6NTUzLCIuLi9jYXJ0ZXNpYW4vZHJhZ2JveCI6NTYzLCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo1NzUsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NTc2LCIuLi9wbG90cyI6NjE5LCIuLi9zbWl0aC9oZWxwZXJzIjo2MjgsIi4vY29uc3RhbnRzIjo2MjAsIi4vaGVscGVycyI6NjIxLCIuL3NldF9jb252ZXJ0Ijo2MjYsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6MzEyfV0sNjI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksYT1uLmRlZzJyYWQsbz1uLnJhZDJkZWc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goaSh0LHIpLHQuX2lkKXtjYXNlIngiOmNhc2UicmFkaWFsYXhpcyI6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fc3VicGxvdDt0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dC5fcmxbMF0sbj10Ll9ybFsxXSxpPXIuaW5uZXJSYWRpdXMsYT0oci5yYWRpdXMtaSkvKG4tZSksbz1pL2Escz1lPm4/ZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTB9OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wfTt0LmMyZz1mdW5jdGlvbihyKXt2YXIgbj10LmMybChyKS1lO3JldHVybihzKG4pP246MCkrb30sdC5nMmM9ZnVuY3Rpb24ocil7cmV0dXJuIHQubDJjKHIrZS1vKX0sdC5nMnA9ZnVuY3Rpb24odCl7cmV0dXJuIHQqYX0sdC5jMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZzJwKHQuYzJnKGUpKX19fSh0LGUpO2JyZWFrO2Nhc2UiYW5ndWxhcmF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZTtpZigibGluZWFyIj09PXIpe3ZhciBpPXQuZDJjLHM9dC5jMmQ7dC5kMmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP2EodCk6dH0oaSh0KSxlKX0sdC5jMmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhmdW5jdGlvbih0LGUpe3JldHVybiJkZWdyZWVzIj09PWU/byh0KTp0fSh0LGUpKX19dC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxpKXt2YXIgYSxvLHM9ZVtpXSxsPWUuX2xlbmd0aCxjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmQyYyhyLGUudGhldGF1bml0KX07aWYocyl7aWYobi5pc1R5cGVkQXJyYXkocykmJiJsaW5lYXIiPT09cil7aWYobD09PXMubGVuZ3RoKXJldHVybiBzO2lmKHMuc3ViYXJyYXkpcmV0dXJuIHMuc3ViYXJyYXkoMCxsKX1mb3IoYT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspYVtvXT1jKHNbb10pfWVsc2V7dmFyIHU9aSsiMCIsZj0iZCIraSxoPXUgaW4gZT9jKGVbdV0pOjAscD1lW2ZdP2MoZVtmXSk6KHQucGVyaW9kfHwyKk1hdGguUEkpL2w7Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109aCtvKnB9cmV0dXJuIGF9LHQuc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgaSxzLGwsYyx1PWUuc2VjdG9yLGY9dS5tYXAoYSksaD17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLHA9YSh0LnJvdGF0aW9uKSxkPWZ1bmN0aW9uKHQpe3JldHVybiBoKnQrcH0sbT1mdW5jdGlvbih0KXtyZXR1cm4odC1wKS9ofTtzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOnM9aT1uLmlkZW50aXR5LGM9YSxsPW8sdC5yYW5nZT1uLmlzRnVsbENpcmNsZShmKT9bdVswXSx1WzBdKzM2MF06Zi5tYXAobSkubWFwKG8pO2JyZWFrO2Nhc2UiY2F0ZWdvcnkiOnZhciBnPXQuX2NhdGVnb3JpZXMubGVuZ3RoLHY9dC5wZXJpb2Q/TWF0aC5tYXgodC5wZXJpb2QsZyk6ZzswPT09diYmKHY9MSkscz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS92fSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqdi9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsdl19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKG0odCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwobSh0KSl9fX0odCxlKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjU3Nn1dLDYyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InNtaXRoIixheGlzTmFtZXM6WyJyZWFsYXhpcyIsImltYWdpbmFyeWF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2ltYWdpbmFyeWF4aXM6ImltYWciLHJlYWxheGlzOiJyZWFsIn19fSx7fV0sNjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQ8MD8tMTp0PjA/MTowfWZ1bmN0aW9uIGkodCl7dmFyIGU9dFswXSxyPXRbMV07aWYoIWlzRmluaXRlKGUpfHwhaXNGaW5pdGUocikpcmV0dXJuWzEsMF07dmFyIG49KGUrMSkqKGUrMSkrcipyO3JldHVyblsoZSplK3Iqci0xKS9uLDIqci9uXX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuW3IqdC5yYWRpdXMrdC5jeCwtbip0LnJhZGl1cyt0LmN5XX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGUqdC5yYWRpdXN9ZS5leHBvcnRzPXtzbWl0aDppLHJlYWN0YW5jZUFyYzpmdW5jdGlvbih0LGUscixuKXt2YXIgcz1hKHQsaShbcixlXSkpLGw9c1swXSxjPXNbMV0sdT1hKHQsaShbbixlXSkpLGY9dVswXSxoPXVbMV07aWYoMD09PWUpcmV0dXJuWyJNIitsKyIsIitjLCJMIitmKyIsIitoXS5qb2luKCIgIik7dmFyIHA9byh0LDEvTWF0aC5hYnMoZSkpO3JldHVyblsiTSIrbCsiLCIrYywiQSIrcCsiLCIrcCsiIDAgMCwiKyhlPDA/MTowKSsiICIrZisiLCIraF0uam9pbigiICIpfSxyZXNpc3RhbmNlQXJjOmZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPW8odCwxLyhlKzEpKSxjPWEodCxpKFtlLHJdKSksdT1jWzBdLGY9Y1sxXSxoPWEodCxpKFtlLHNdKSkscD1oWzBdLGQ9aFsxXTtpZihuKHIpIT09bihzKSl7dmFyIG09YSh0LGkoW2UsMF0pKTtyZXR1cm5bIk0iK3UrIiwiK2YsIkEiK2wrIiwiK2wrIiAwIDAsIisoMDxyPzA6MSkrIiAiK21bMF0rIiwiK21bMV0sIkEiK2wrIiwiK2wrIiAwIDAsIisoczwwPzA6MSkrcCsiLCIrZF0uam9pbigiICIpfXJldHVyblsiTSIrdSsiLCIrZiwiQSIrbCsiLCIrbCsiIDAgMCwiKyhzPHI/MDoxKSsiICIrcCsiLCIrZF0uam9pbigiICIpfSxzbWl0aFRyYW5zZm9ybTphfX0se31dLDYyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3RDYWxjRGF0YSxpPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleCxhPXQoIi4uL3BvbGFyL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9aShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscywhMCksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDtpZighZVtvXSYmcylmb3IodmFyIGMgaW4gcy5mcmFtZXdvcmsucmVtb3ZlKCkscy5jbGlwUGF0aHMpcy5jbGlwUGF0aHNbY10ucmVtb3ZlKCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo1MDMsIi4uL2NhcnRlc2lhbiI6NTY4LCIuLi9nZXRfZGF0YSI6NTkzLCIuLi9wb2xhci9wb2xhciI6NjI1LCIuL2NvbnN0YW50cyI6NjI3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MzAsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MzF9XSw2MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9cyh7Y29sb3I6aS5jb2xvcixzaG93bGluZTpvKHt9LGkuc2hvd2xpbmUse2RmbHQ6ITB9KSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOm8oe30saS5zaG93Z3JpZCx7ZGZsdDohMH0pLGdyaWRjb2xvcjppLmdyaWRjb2xvcixncmlkd2lkdGg6aS5ncmlkd2lkdGh9LCJwbG90IiwiZnJvbS1yb290IiksYz1zKHt0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6byh7fSxpLnRpY2t3aWR0aCx7ZGZsdDoyfSksdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHRpY2tmb250OmkudGlja2ZvbnQsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsaG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCxsYXllcjppLmxheWVyfSwicGxvdCIsImZyb20tcm9vdCIpLHU9byh7dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHRpY2t2YWxzOntkZmx0OlsuMiwuNSwxLDIsNV0sdmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSx0aWNrYW5nbGU6byh7fSxpLnRpY2thbmdsZSx7ZGZsdDo5MH0pLHRpY2tzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCIiXSxlZGl0VHlwZToidGlja3MifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSxsLGMpLGY9byh7dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LHRpY2tzOmkudGlja3MsZWRpdFR5cGU6ImNhbGMifSxsLGMpO2UuZXhwb3J0cz17ZG9tYWluOmEoe25hbWU6InNtaXRoIixlZGl0VHlwZToicGxvdCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxyZWFsYXhpczp1LGltYWdpbmFyeWF4aXM6ZixlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTM2LCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OSwiLi4vZG9tYWluIjo1ODR9XSw2MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYz10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksdT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLGY9dCgiLi4vY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiKSxoPXQoIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIikscD10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIiksZD10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxtPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxnPXQoIi4vY29uc3RhbnRzIiksdj1nLmF4aXNOYW1lcyx5PShuPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCkucmV2ZXJzZSgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSkuY29uY2F0KFswXSkuY29uY2F0KHQpfSxpPVN0cmluZyxhPXt9LGZ1bmN0aW9uKHQpe3ZhciBlPWk/aSh0KTp0O2lmKGUgaW4gYSlyZXR1cm4gYVtlXTt2YXIgcj1uKHQpO3JldHVybiBhW2VdPXIscn0pO2Z1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9cigiYmdjb2xvciIpO24uYmdDb2xvcj1zLmNvbWJpbmUoaSxuLnBhcGVyX2JnY29sb3IpO3ZhciBhLGM9dShuLmZ1bGxEYXRhLGcubmFtZSxuLmlkKSx4PW4ubGF5b3V0T3V0O2Z1bmN0aW9uIGIodCxlKXtyZXR1cm4gcihhKyIuIit0LGUpfWZvcih2YXIgXz0wO188di5sZW5ndGg7XysrKXthPXZbX10sby5pc1BsYWluT2JqZWN0KHRbYV0pfHwodFthXT17fSk7dmFyIHc9dFthXSxUPWwubmV3Q29udGFpbmVyKGUsYSk7VC5faWQ9VC5fbmFtZT1hLFQuX2F0dHI9bi5pZCsiLiIrYSxULl90cmFjZUluZGljZXM9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9leHBhbmRlZEluZGV4fSkpO3ZhciBrPWIoInZpc2libGUiKTtpZihULnR5cGU9ImxpbmVhciIsZChULHgpLGYodyxULGIsVC50eXBlKSxrKXt2YXIgQSxNLFMsRSxMPSJyZWFsYXhpcyI9PT1hO2lmKEwmJmIoInNpZGUiKSxMKWIoInRpY2t2YWxzIik7ZWxzZSBiKCJ0aWNrdmFscyIseShlLnJlYWxheGlzLnRpY2t2YWxzfHxtLnJlYWxheGlzLnRpY2t2YWxzLmRmbHQpKTt2YXIgQz1uLmZvbnR8fHt9O2smJihNPShBPWIoImNvbG9yIikpPT09dy5jb2xvcj9BOkMuY29sb3IsUz1DLnNpemUsRT1DLmZhbWlseSksaCh3LFQsYixULnR5cGUse25vQW5nOiFMLG5vRXhwOiEwLGZvbnQ6e2NvbG9yOk0sc2l6ZTpTLGZhbWlseTpFfX0pLG8uY29lcmNlMih0LGUsbSxhKyIudGlja2xlbiIpLG8uY29lcmNlMih0LGUsbSxhKyIudGlja3dpZHRoIiksby5jb2VyY2UyKHQsZSxtLGErIi50aWNrY29sb3IiLGUuY29sb3IpLGIoInRpY2tzIil8fChkZWxldGUgZVthXS50aWNrbGVuLGRlbGV0ZSBlW2FdLnRpY2t3aWR0aCxkZWxldGUgZVthXS50aWNrY29sb3IpLHAodyxULGIse2RmbHRDb2xvcjpBLGJnQ29sb3I6bi5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczptW2FdfSksYigibGF5ZXIiKX1iKCJob3ZlcmZvcm1hdCIpLGRlbGV0ZSBULnR5cGUsVC5faW5wdXQ9d319ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtjKHQsZSxyLHtub1VpcmV2aXNpb246ITAsdHlwZTpnLm5hbWUsYXR0cmlidXRlczptLGhhbmRsZURlZmF1bHRzOngsZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsZnVsbERhdGE6cixsYXlvdXRPdXQ6ZX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjU3MSwiLi4vY2FydGVzaWFuL3ByZWZpeF9zdWZmaXhfZGVmYXVsdHMiOjU3MywiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo1NzYsIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo1NzgsIi4uL2dldF9kYXRhIjo1OTMsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjYzMiwiLi9jb25zdGFudHMiOjYyNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjMwfV0sNjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi9kb21haW4iKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjPW8udHlwZSx1PW8uYXR0cmlidXRlcyxmPW8uaGFuZGxlRGVmYXVsdHMsaD1vLnBhcnRpdGlvbnx8IngiLHA9ZS5fc3VicGxvdHNbY10sZD1wLmxlbmd0aCxtPWQmJnBbMF0ucmVwbGFjZSgvXGQrJC8sIiIpO2Z1bmN0aW9uIGcodCxlKXtyZXR1cm4gbi5jb2VyY2UocyxsLHUsdCxlKX1mb3IodmFyIHY9MDt2PGQ7disrKXt2YXIgeT1wW3ZdO3M9dFt5XT90W3ldOnRbeV09e30sbD1pLm5ld0NvbnRhaW5lcihlLHksbSksby5ub1VpcmV2aXNpb258fGcoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbik7dmFyIHg9e307eFtoXT1bdi9kLCh2KzEpL2RdLGEobCxlLGcseCksby5pZD15LGYocyxsLGcsbyl9fX0seyIuLi9saWIiOjUwMywiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuL2RvbWFpbiI6NTg0fV0sNjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbnN0YW50cy9kb2NzIik7bi5GT1JNQVRfTElOSyxuLkRBVEVfRk9STUFUX0xJTks7ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmRlc2NyaXB0aW9uPyIgIit0LmRlc2NyaXB0aW9uOiIiLHI9dC5rZXlzfHxbXTtpZihyLmxlbmd0aD4wKXtmb3IodmFyIG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ImAiK3JbaV0rImAiO2UrPSJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gIixlPTE9PT1yLmxlbmd0aD8idmFyaWFibGUgIituWzBdOiJ2YXJpYWJsZXMgIituLnNsaWNlKDAsLTEpLmpvaW4oIiwgIikrIiBhbmQgIituLnNsaWNlKC0xKSsiLiJ9cmV0dXJuIGV9ci5ob3ZlcnRlbXBsYXRlQXR0cnM9ZnVuY3Rpb24odCxlKXt0PXR8fHt9O2koZT1lfHx7fSk7dmFyIHI9e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZTp0LmVkaXRUeXBlfHwibm9uZSJ9O3JldHVybiExIT09dC5hcnJheU9rJiYoci5hcnJheU9rPSEwKSxyfSxyLnRleHR0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTtpKGU9ZXx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8ImNhbGMifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn19LHsiLi4vY29uc3RhbnRzL2RvY3MiOjQ3NH1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Rlcm5hcnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4O3IubmFtZT0idGVybmFyeSI7dmFyIG89ci5hdHRyPSJzdWJwbG90IjtyLmlkUm9vdD0idGVybmFyeSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWEoInRlcm5hcnkiKSwoci5hdHRyaWJ1dGVzPXt9KVtvXT17dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ0ZXJuYXJ5IixlZGl0VHlwZToiY2FsYyJ9LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy50ZXJuYXJ5LG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkociwidGVybmFyeSIscyksYz1lW3NdLl9zdWJwbG90O2N8fChjPW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX3Rlcm5hcnlsYXllci5ub2RlKCl9LGUpLGVbc10uX3N1YnBsb3Q9YyksYy5wbG90KGwsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy50ZXJuYXJ5fHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uW29dLl9zdWJwbG90OyFlW29dJiZzJiYocy5wbG90Q29udGFpbmVyLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSxzLmNsaXBEZWZSZWxhdGl2ZS5yZW1vdmUoKSxzLmxheWVyc1siYS10aXRsZSJdLnJlbW92ZSgpLHMubGF5ZXJzWyJiLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImMtdGl0bGUiXS5yZW1vdmUoKSl9fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjU5MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjM1LCIuL2xheW91dF9kZWZhdWx0cyI6NjM2LCIuL3Rlcm5hcnkiOjYzN31dLDYzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3RpdGxlOnt0ZXh0OmEudGl0bGUudGV4dCxmb250OmEudGl0bGUuZm9udH0sY29sb3I6YS5jb2xvcix0aWNrbW9kZTphLnRpY2ttb2RlLG50aWNrczpzKHt9LGEubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDphLnRpY2swLGR0aWNrOmEuZHRpY2ssdGlja3ZhbHM6YS50aWNrdmFscyx0aWNrdGV4dDphLnRpY2t0ZXh0LHRpY2tzOmEudGlja3MsdGlja2xlbjphLnRpY2tsZW4sdGlja3dpZHRoOmEudGlja3dpZHRoLHRpY2tjb2xvcjphLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczphLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4OmEuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDphLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6YS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmEudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6YS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6YS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDphLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6InRlcm5hcnkifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sInBsb3QiLCJmcm9tLXJvb3QiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxjLmFheGlzLnVpcmV2aXNpb249Yy5iYXhpcy51aXJldmlzaW9uPWMuY2F4aXMudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo1NjksIi4uL2RvbWFpbiI6NTg0fV0sNjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4uL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIiksYz10KCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGY9dCgiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGg9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHA9WyJhYXhpcyIsImJheGlzIiwiY2F4aXMiXTtmdW5jdGlvbiBkKHQsZSxyLGEpe3ZhciBvLHMsbCxjPXIoImJnY29sb3IiKSx1PXIoInN1bSIpO2EuYmdDb2xvcj1uLmNvbWJpbmUoYyxhLnBhcGVyX2JnY29sb3IpO2Zvcih2YXIgZj0wO2Y8cC5sZW5ndGg7ZisrKXM9dFtvPXBbZl1dfHx7fSwobD1pLm5ld0NvbnRhaW5lcihlLG8pKS5fbmFtZT1vLG0ocyxsLGEsZSk7dmFyIGg9ZS5hYXhpcyxkPWUuYmF4aXMsZz1lLmNheGlzO2gubWluK2QubWluK2cubWluPj11JiYoaC5taW49MCxkLm1pbj0wLGcubWluPTAsdC5hYXhpcyYmZGVsZXRlIHQuYWF4aXMubWluLHQuYmF4aXMmJmRlbGV0ZSB0LmJheGlzLm1pbix0LmNheGlzJiZkZWxldGUgdC5jYXhpcy5taW4pfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9aFtlLl9uYW1lXTtmdW5jdGlvbiBvKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxpLHIsbil9bygidWlyZXZpc2lvbiIsbi51aXJldmlzaW9uKSxlLnR5cGU9ImxpbmVhciI7dmFyIHA9bygiY29sb3IiKSxkPXAhPT1pLmNvbG9yLmRmbHQ/cDpyLmZvbnQuY29sb3IsbT1lLl9uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLGc9IkNvbXBvbmVudCAiK20sdj1vKCJ0aXRsZS50ZXh0IixnKTtlLl9ob3ZlcnRpdGxlPXY9PT1nP3Y6bSxhLmNvZXJjZUZvbnQobywidGl0bGUuZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6YS5iaWdGb250KHIuZm9udC5zaXplKSxjb2xvcjpkfSksbygibWluIiksdSh0LGUsbywibGluZWFyIiksbCh0LGUsbywibGluZWFyIikscyh0LGUsbywibGluZWFyIiksYyh0LGUsbyx7b3V0ZXJUaWNrczohMH0pLG8oInNob3d0aWNrbGFiZWxzIikmJihhLmNvZXJjZUZvbnQobywidGlja2ZvbnQiLHtmYW1pbHk6ci5mb250LmZhbWlseSxzaXplOnIuZm9udC5zaXplLGNvbG9yOmR9KSxvKCJ0aWNrYW5nbGUiKSxvKCJ0aWNrZm9ybWF0IikpLGYodCxlLG8se2RmbHRDb2xvcjpwLGJnQ29sb3I6ci5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczppfSksbygiaG92ZXJmb3JtYXQiKSxvKCJsYXllciIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7byh0LGUscix7dHlwZToidGVybmFyeSIsYXR0cmlidXRlczpoLGhhbmRsZURlZmF1bHRzOmQsZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3J9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIjo1NzEsIi4uL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIjo1NzMsIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo1NzgsIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjU3OSwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjU4MCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6NjMyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MzV9XSw2Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD1vLl8sYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxmPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscD10KCIuLi9wbG90cyIpLGQ9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLHk9di5mcmVlTW9kZSx4PXYucmVjdE1vZGUsYj10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLF89dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3Qsdz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayxUPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxrPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdGlvbnNDYWNoZSxBPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKTtmdW5jdGlvbiBNKHQsZSl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmluaXQoZSksdGhpcy5tYWtlRnJhbWV3b3JrKGUpLHRoaXMuYVRpY2tMYXlvdXQ9bnVsbCx0aGlzLmJUaWNrTGF5b3V0PW51bGwsdGhpcy5jVGlja0xheW91dD1udWxsfWUuZXhwb3J0cz1NO3ZhciBTPU0ucHJvdG90eXBlO1MuaW5pdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRhaW5lcj10Ll90ZXJuYXJ5bGF5ZXIsdGhpcy5kZWZzPXQuX2RlZnMsdGhpcy5sYXlvdXRJZD10Ll91aWQsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e319LFMucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF0sbj1lLl9zaXplO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7aWYoITE9PT10W2ldWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMociksdGhpcy5hZGp1c3RMYXlvdXQocixuKSxwLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKSx0aGlzLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikuY2FsbChjLmZpbGwsci5iZ2NvbG9yKX0sUy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10W3RoaXMuaWRdLG49dGhpcy5jbGlwSWQ9ImNsaXAiK3RoaXMubGF5b3V0SWQrdGhpcy5pZCxpPXRoaXMuY2xpcElkUmVsYXRpdmU9ImNsaXAtcmVsYXRpdmUiK3RoaXMubGF5b3V0SWQrdGhpcy5pZDt0aGlzLmNsaXBEZWY9by5lbnN1cmVTaW5nbGVCeUlkKHQuX2NsaXBzLCJjbGlwUGF0aCIsbiwoZnVuY3Rpb24odCl7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKX0pKSx0aGlzLmNsaXBEZWZSZWxhdGl2ZT1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixpLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSkpLHRoaXMucGxvdENvbnRhaW5lcj1vLmVuc3VyZVNpbmdsZSh0aGlzLmNvbnRhaW5lciwiZyIsdGhpcy5pZCksdGhpcy51cGRhdGVMYXllcnMociksdS5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmJhY2twbG90LG4sZSksdS5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmdyaWRzLG4sZSl9LFMudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJzLHI9WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImdyaWRzIl07ImJlbG93IHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaCgiYmF4aXMiLCJibGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKCJjYXhpcyIsImNsaW5lIiksci5wdXNoKCJmcm9udHBsb3QiKSwiYWJvdmUgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKCJiYXhpcyIsImJsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goImNheGlzIiwiY2xpbmUiKTt2YXIgaT10aGlzLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCJnLnRvcGxldmVsIikuZGF0YShyLFN0cmluZyksYT1bImFncmlkIiwiYmdyaWQiLCJjZ3JpZCJdO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0b3BsZXZlbCAiK3R9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ZVt0XT1yLCJmcm9udHBsb3QiPT09dD9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOiJiYWNrcGxvdCI9PT10P3IuYXBwZW5kKCJnIikuY2xhc3NlZCgibWFwbGF5ZXIiLCEwKToicGxvdGJnIj09PXQ/ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKToiYWxpbmUiPT09dHx8ImJsaW5lIj09PXR8fCJjbGluZSI9PT10P3IuYXBwZW5kKCJwYXRoIik6ImdyaWRzIj09PXQmJmEuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdyaWQgIit0LCEwKX0pKX0pKSxpLm9yZGVyKCl9O3ZhciBFPU1hdGguc3FydCg0LzMpO1MuYWRqdXN0TGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxsLHA9dGhpcyxkPXQuZG9tYWluLG09KGQueFswXStkLnhbMV0pLzIsZz0oZC55WzBdK2QueVsxXSkvMix2PWQueFsxXS1kLnhbMF0seT1kLnlbMV0tZC55WzBdLHg9diplLncsYj15KmUuaCxfPXQuc3VtLHc9dC5hYXhpcy5taW4sVD10LmJheGlzLm1pbixrPXQuY2F4aXMubWluO3g+RSpiP2k9KGE9YikqRTphPShpPXgpL0Usbz12KmkveCxsPXkqYS9iLHI9ZS5sK2UudyptLWkvMixuPWUudCtlLmgqKDEtZyktYS8yLHAueDA9cixwLnkwPW4scC53PWkscC5oPWEscC5zdW09XyxwLnhheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt3KzIqay1fLF8tdy0yKlRdLGRvbWFpbjpbbS1vLzIsbStvLzJdLF9pZDoieCJ9LGYocC54YXhpcyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxwLnhheGlzLnNldFNjYWxlKCkscC54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49cC5hYXhpcy5yYW5nZVswXSYmdC5hPD1wLmFheGlzLnJhbmdlWzFdJiZ0LmI+PXAuYmF4aXMucmFuZ2VbMV0mJnQuYjw9cC5iYXhpcy5yYW5nZVswXSYmdC5jPj1wLmNheGlzLnJhbmdlWzFdJiZ0LmM8PXAuY2F4aXMucmFuZ2VbMF19LHAueWF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3csXy1ULWtdLGRvbWFpbjpbZy1sLzIsZytsLzJdLF9pZDoieSJ9LGYocC55YXhpcyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxwLnlheGlzLnNldFNjYWxlKCkscC55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIEE9cC55YXhpcy5kb21haW5bMF0sTT1wLmFheGlzPWgoe30sdC5hYXhpcyx7cmFuZ2U6W3csXy1ULWtdLHNpZGU6ImxlZnQiLHRpY2thbmdsZTooK3QuYWF4aXMudGlja2FuZ2xlfHwwKS0zMCxkb21haW46W0EsQStsKkVdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6aX0pO2YoTSxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxNLnNldFNjYWxlKCk7dmFyIFM9cC5iYXhpcz1oKHt9LHQuYmF4aXMse3JhbmdlOltfLXctayxUXSxzaWRlOiJib3R0b20iLGRvbWFpbjpwLnhheGlzLmRvbWFpbixhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ4IixfbGVuZ3RoOml9KTtmKFMscC5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpO3ZhciBMPXAuY2F4aXM9aCh7fSx0LmNheGlzLHtyYW5nZTpbXy13LVQsa10sc2lkZToicmlnaHQiLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W0EsQStsKkVdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6aX0pO2YoTCxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxMLnNldFNjYWxlKCk7dmFyIEM9Ik0iK3IrIiwiKyhuK2EpKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7cC5jbGlwRGVmLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEMpLHAubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixDKTt2YXIgUD0iTTAsIithKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7cC5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsUCk7dmFyIEk9cyhyLG4pO3AucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyIikuYXR0cigidHJhbnNmb3JtIixJKSxwLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO3ZhciBPPXMoci1TLl9vZmZzZXQsbithKTtwLmxheWVycy5iYXhpcy5hdHRyKCJ0cmFuc2Zvcm0iLE8pLHAubGF5ZXJzLmJncmlkLmF0dHIoInRyYW5zZm9ybSIsTyk7dmFyIHo9cyhyK2kvMixuKSsicm90YXRlKDMwKSIrcygwLC1NLl9vZmZzZXQpO3AubGF5ZXJzLmFheGlzLmF0dHIoInRyYW5zZm9ybSIseikscC5sYXllcnMuYWdyaWQuYXR0cigidHJhbnNmb3JtIix6KTt2YXIgRD1zKHIraS8yLG4pKyJyb3RhdGUoLTMwKSIrcygwLC1MLl9vZmZzZXQpO3AubGF5ZXJzLmNheGlzLmF0dHIoInRyYW5zZm9ybSIsRCkscC5sYXllcnMuY2dyaWQuYXR0cigidHJhbnNmb3JtIixEKSxwLmRyYXdBeGVzKCEwKSxwLmxheWVycy5hbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixNLnNob3dsaW5lPyJNIityKyIsIisobithKSsibCIraS8yKyIsLSIrYToiTTAsMCIpLmNhbGwoYy5zdHJva2UsTS5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKE0ubGluZXdpZHRofHwwKSsicHgiKSxwLmxheWVycy5ibGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixTLnNob3dsaW5lPyJNIityKyIsIisobithKSsiaCIraToiTTAsMCIpLmNhbGwoYy5zdHJva2UsUy5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKFMubGluZXdpZHRofHwwKSsicHgiKSxwLmxheWVycy5jbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixMLnNob3dsaW5lPyJNIisocitpLzIpKyIsIituKyJsIitpLzIrIiwiK2E6Ik0wLDAiKS5jYWxsKGMuc3Ryb2tlLEwubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChMLmxpbmV3aWR0aHx8MCkrInB4IikscC5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxwLmluaXRJbnRlcmFjdGlvbnMoKSx1LnNldENsaXBVcmwocC5sYXllcnMuZnJvbnRwbG90LHAuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOnAuY2xpcElkLHAuZ3JhcGhEaXYpfSxTLmRyYXdBeGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10aGlzLmlkLnN1YnN0cig3KSsidGl0bGUiLG49dGhpcy5sYXllcnMsaT10aGlzLmFheGlzLGE9dGhpcy5iYXhpcyxvPXRoaXMuY2F4aXM7aWYodGhpcy5kcmF3QXgoaSksdGhpcy5kcmF3QXgoYSksdGhpcy5kcmF3QXgobyksdCl7dmFyIHM9TWF0aC5tYXgoaS5zaG93dGlja2xhYmVscz9pLnRpY2tmb250LnNpemUvMjowLChvLnNob3d0aWNrbGFiZWxzPy43NSpvLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSksYz0oYS5zaG93dGlja2xhYmVscz9hLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PWEudGlja3M/YS50aWNrbGVuOjApKzM7blsiYS10aXRsZSJdPWIuZHJhdyhlLCJhIityLHtwcm9wQ29udGFpbmVyOmkscHJvcE5hbWU6dGhpcy5pZCsiLmFheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpsKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBBIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudy8yLHk6dGhpcy55MC1pLnRpdGxlLmZvbnQuc2l6ZS8zLXMsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxuWyJiLXRpdGxlIl09Yi5kcmF3KGUsImIiK3Ise3Byb3BDb250YWluZXI6YSxwcm9wTmFtZTp0aGlzLmlkKyIuYmF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEIgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDAtYyx5OnRoaXMueTArdGhpcy5oKy44MyphLnRpdGxlLmZvbnQuc2l6ZStjLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSksblsiYy10aXRsZSJdPWIuZHJhdyhlLCJjIityLHtwcm9wQ29udGFpbmVyOm8scHJvcE5hbWU6dGhpcy5pZCsiLmNheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpsKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBDIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudytjLHk6dGhpcy55MCt0aGlzLmgrLjgzKm8udGl0bGUuZm9udC5zaXplK2MsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX19LFMuZHJhd0F4PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5ncmFwaERpdixuPXQuX25hbWUsaT1uLmNoYXJBdCgwKSxhPXQuX2lkLHM9dGhpcy5sYXllcnNbbl0sbD1pKyJ0aWNrTGF5b3V0IixjPShlPXQpLnRpY2tzK1N0cmluZyhlLnRpY2tsZW4pK1N0cmluZyhlLnNob3d0aWNrbGFiZWxzKTt0aGlzW2xdIT09YyYmKHMuc2VsZWN0QWxsKCIuIithKyJ0aWNrIikucmVtb3ZlKCksdGhpc1tsXT1jKSx0LnNldFNjYWxlKCk7dmFyIHU9ZC5jYWxjVGlja3ModCksZj1kLmNsaXBFbmRzKHQsdSksaD1kLm1ha2VUcmFuc1RpY2tGbih0KSxwPWQuZ2V0VGlja1NpZ25zKHQpWzJdLG09by5kZWcycmFkKDMwKSxnPXAqKHQubGluZXdpZHRofHwxKS8yLHY9cCp0LnRpY2tsZW4seT10aGlzLncseD10aGlzLmgsYj0iYiI9PT1pPyJNMCwiK2crImwiK01hdGguc2luKG0pKnYrIiwiK01hdGguY29zKG0pKnY6Ik0iK2crIiwwbCIrTWF0aC5jb3MobSkqdisiLCIrLU1hdGguc2luKG0pKnYsXz17YToiTTAsMGwiK3grIiwtIit5LzIsYjoiTTAsMGwtIit5LzIrIiwtIit4LGM6Ik0wLDBsLSIreCsiLCIreS8yfVtpXTtkLmRyYXdUaWNrcyhyLHQse3ZhbHM6Imluc2lkZSI9PT10LnRpY2tzP2Y6dSxsYXllcjpzLHBhdGg6Yix0cmFuc0ZuOmgsY3Jpc3A6ITF9KSxkLmRyYXdHcmlkKHIsdCx7dmFsczpmLGxheWVyOnRoaXMubGF5ZXJzW2krImdyaWQiXSxwYXRoOl8sdHJhbnNGbjpoLGNyaXNwOiExfSksZC5kcmF3TGFiZWxzKHIsdCx7dmFsczp1LGxheWVyOnMsdHJhbnNGbjpoLGxhYmVsRm5zOmQubWFrZUxhYmVsRm5zKHQsMCwzMCl9KX07dmFyIEw9QS5NSU5aT09NLzIrLjg3LEM9Im0tMC44NywuNWgiK0wrInYzaC0iKyhMKzUuMikrImwiKyhMLzIrMi42KSsiLC0iKyguODcqTCs0LjUpKyJsMi42LDEuNWwtIitMLzIrIiwiKy44NypMKyJaIixQPSJtMC44NywuNWgtIitMKyJ2M2giKyhMKzUuMikrImwtIisoTC8yKzIuNikrIiwtIisoLjg3KkwrNC41KSsibC0yLjYsMS41bCIrTC8yKyIsIisuODcqTCsiWiIsST0ibTAsMWwiK0wvMisiLCIrLjg3KkwrImwyLjYsLTEuNWwtIisoTC8yKzIuNikrIiwtIisoLjg3KkwrNC41KSsibC0iKyhMLzIrMi42KSsiLCIrKC44NypMKzQuNSkrImwyLjYsMS41bCIrTC8yKyIsLSIrLjg3KkwrIloiLE89ITA7ZnVuY3Rpb24geih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfVMuY2xlYXJTZWxlY3Q9ZnVuY3Rpb24oKXtrKHRoaXMuZHJhZ09wdGlvbnMpLFQodGhpcy5kcmFnT3B0aW9ucy5nZCl9LFMuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbigpe3ZhciB0LGUscixuLGYsaCxwLGQsdixiLFQsayxNPXRoaXMsUz1NLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikubm9kZSgpLEw9TS5ncmFwaERpdixEPUwuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjtmdW5jdGlvbiBSKHQpe3ZhciBlPXt9O3JldHVybiBlW00uaWQrIi5hYXhpcy5taW4iXT10LmEsZVtNLmlkKyIuYmF4aXMubWluIl09dC5iLGVbTS5pZCsiLmNheGlzLm1pbiJdPXQuYyxlfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1MLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTt6KEwpLDI9PT10JiYoTC5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixMLFIoe2E6MCxiOjAsYzowfSkpKSxyLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmdyhlLEwsW00ueGF4aXNdLFtNLnlheGlzXSxNLmlkLE0uZHJhZ09wdGlvbnMpLHIuaW5kZXhPZigiZXZlbnQiKT4tMSYmZy5jbGljayhMLGUsTS5pZCl9ZnVuY3Rpb24gQih0LGUpe3JldHVybiAxLWUvTS5ofWZ1bmN0aW9uIE4odCxlKXtyZXR1cm4gMS0odCsoTS5oLWUpL01hdGguc3FydCgzKSkvTS53fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4odC0oTS5oLWUpL01hdGguc3FydCgzKSkvTS53fWZ1bmN0aW9uIFUoaSxhKXt2YXIgbz1yK2kqdCxzPW4rYSplLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEIoMCxuKSxCKDAscykpKSxjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxOKHIsbiksTihvLHMpKSksdT1NYXRoLm1heCgwLE1hdGgubWluKDEsaihyLG4pLGoobyxzKSkpLG09KGwvMit1KSpNLncsZz0oMS1sLzItYykqTS53LHk9KG0rZykvMix4PWctbSxfPSgxLWwpKk0uaCx3PV8teC9FO3g8QS5NSU5aT09NPyhwPWYsVC5hdHRyKCJkIix2KSxrLmF0dHIoImQiLCJNMCwwWiIpKToocD17YTpmLmErbCpoLGI6Zi5iK2MqaCxjOmYuYyt1Kmh9LFQuYXR0cigiZCIsdisiTSIrbSsiLCIrXysiSCIrZysiTCIreSsiLCIrdysiTCIrbSsiLCIrXysiWiIpLGsuYXR0cigiZCIsIk0iK3IrIiwiK24rIm0wLjUsMC41aDV2LTJoLTV2LTVoLTJ2NWgtNXYyaDV2NWgyWk0iK20rIiwiK18rQysiTSIrZysiLCIrXytQKyJNIit5KyIsIit3K0kpKSxifHwoVC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLGQ+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksay50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCksYj0hMCksTC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLFIocCkpfWZ1bmN0aW9uIFYoKXt6KEwpLHAhPT1mJiYoYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEwsUihwKSksTyYmTC5kYXRhJiZMLl9jb250ZXh0LnNob3dUaXBzJiYoby5ub3RpZmllcihsKEwsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxPPSExKSl9ZnVuY3Rpb24gSCh0LGUpe3ZhciByPXQvTS54YXhpcy5fbSxuPWUvTS55YXhpcy5fbSxpPVsocD17YTpmLmEtbixiOmYuYisocituKS8yLGM6Zi5jLShyLW4pLzJ9KS5hLHAuYixwLmNdLnNvcnQoby5zb3J0ZXJBc2MpLGE9aS5pbmRleE9mKHAuYSksbD1pLmluZGV4T2YocC5iKSxjPWkuaW5kZXhPZihwLmMpO2lbMF08MCYmKGlbMV0raVswXS8yPDA/KGlbMl0rPWlbMF0raVsxXSxpWzBdPWlbMV09MCk6KGlbMl0rPWlbMF0vMixpWzFdKz1pWzBdLzIsaVswXT0wKSxwPXthOmlbYV0sYjppW2xdLGM6aVtjXX0sZT0oZi5hLXAuYSkqTS55YXhpcy5fbSx0PShmLmMtcC5jLWYuYitwLmIpKk0ueGF4aXMuX20pO3ZhciBoPXMoTS54MCt0LE0ueTArZSk7TS5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLGgpO3ZhciBkPXMoLXQsLWUpO00uY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsZCksTS5hYXhpcy5yYW5nZT1bcC5hLE0uc3VtLXAuYi1wLmNdLE0uYmF4aXMucmFuZ2U9W00uc3VtLXAuYS1wLmMscC5iXSxNLmNheGlzLnJhbmdlPVtNLnN1bS1wLmEtcC5iLHAuY10sTS5kcmF3QXhlcyghMSksTS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiZNLnBsb3RDb250YWluZXIuc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIudHJhY2UiKS5jYWxsKHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxNKSxMLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsUihwKSl9ZnVuY3Rpb24gcSgpe2EuY2FsbCgiX2d1aVJlbGF5b3V0IixMLFIocCkpfXRoaXMuZHJhZ09wdGlvbnM9e2VsZW1lbnQ6UyxnZDpMLHBsb3RpbmZvOntpZDpNLmlkLGRvbWFpbjpMLl9mdWxsTGF5b3V0W00uaWRdLmRvbWFpbix4YXhpczpNLnhheGlzLHlheGlzOk0ueWF4aXN9LHN1YnBsb3Q6TS5pZCxwcmVwRm46ZnVuY3Rpb24oYSxsLHUpe00uZHJhZ09wdGlvbnMueGF4ZXM9W00ueGF4aXNdLE0uZHJhZ09wdGlvbnMueWF4ZXM9W00ueWF4aXNdLHQ9TC5fZnVsbExheW91dC5faW52U2NhbGVYLGU9TC5fZnVsbExheW91dC5faW52U2NhbGVZO3ZhciBtPU0uZHJhZ09wdGlvbnMuZHJhZ21vZGU9TC5fZnVsbExheW91dC5kcmFnbW9kZTt5KG0pP00uZHJhZ09wdGlvbnMubWluRHJhZz0xOk0uZHJhZ09wdGlvbnMubWluRHJhZz12b2lkIDAsInpvb20iPT09bT8oTS5kcmFnT3B0aW9ucy5tb3ZlRm49VSxNLmRyYWdPcHRpb25zLmNsaWNrRm49RixNLmRyYWdPcHRpb25zLmRvbmVGbj1WLGZ1bmN0aW9uKHQsZSxhKXt2YXIgbD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3I9ZS1sLmxlZnQsbj1hLWwudG9wLEwuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKEwpO3ZhciB1PUwuX2Z1bGxMYXlvdXQuX2ludlRyYW5zZm9ybSxtPW8uYXBwbHkzRFRyYW5zZm9ybSh1KShyLG4pO3I9bVswXSxuPW1bMV0sZj17YTpNLmFheGlzLnJhbmdlWzBdLGI6TS5iYXhpcy5yYW5nZVsxXSxjOk0uY2F4aXMucmFuZ2VbMV19LHA9ZixoPU0uYWF4aXMucmFuZ2VbMV0tZi5hLGQ9aShNLmdyYXBoRGl2Ll9mdWxsTGF5b3V0W00uaWRdLmJnY29sb3IpLmdldEx1bWluYW5jZSgpLHY9Ik0wLCIrTS5oKyJMIitNLncvMisiLCAwTCIrTS53KyIsIitNLmgrIloiLGI9ITEsVD1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLmF0dHIoInRyYW5zZm9ybSIscyhNLngwLE0ueTApKS5zdHlsZSh7ZmlsbDpkPi4yPyJyZ2JhKDAsMCwwLDApIjoicmdiYSgyNTUsMjU1LDI1NSwwKSIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImQiLHYpLGs9RC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLmF0dHIoInRyYW5zZm9ybSIscyhNLngwLE0ueTApKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJkIiwiTTAsMFoiKSxNLmNsZWFyU2VsZWN0KEwpfSgwLGwsdSkpOiJwYW4iPT09bT8oTS5kcmFnT3B0aW9ucy5tb3ZlRm49SCxNLmRyYWdPcHRpb25zLmNsaWNrRm49RixNLmRyYWdPcHRpb25zLmRvbmVGbj1xLGY9e2E6TS5hYXhpcy5yYW5nZVswXSxiOk0uYmF4aXMucmFuZ2VbMV0sYzpNLmNheGlzLnJhbmdlWzFdfSxwPWYsTS5jbGVhclNlbGVjdChMKSk6KHgobSl8fHkobSkpJiZfKGEsbCx1LE0uZHJhZ09wdGlvbnMsbSl9fSxTLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe2cuaG92ZXIoTCx0LE0uaWQpLEwuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1TLEwuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1NLmlkfSxTLm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7TC5fZHJhZ2dpbmd8fG0udW5ob3ZlcihMLHQpfSxtLmluaXQodGhpcy5kcmFnT3B0aW9ucyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6Mzg1LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjM4NCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjQ2NCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NTYxLCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo1NzUsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NTc2LCIuLi9wbG90cyI6NjE5LCJAcGxvdGx5L2QzIjo1OCx0aW55Y29sb3IyOjMxMn1dLDYzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9sb2dnZXJzIiksaT10KCIuL2xpYi9ub29wIiksYT10KCIuL2xpYi9wdXNoX3VuaXF1ZSIpLG89dCgiLi9saWIvaXNfcGxhaW5fb2JqZWN0Iikscz10KCIuL2xpYi9kb20iKS5hZGRTdHlsZVJ1bGUsbD10KCIuL2xpYi9leHRlbmQiKSxjPXQoIi4vcGxvdHMvYXR0cmlidXRlcyIpLHU9dCgiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLGY9bC5leHRlbmRGbGF0LGg9bC5leHRlbmREZWVwQWxsO2Z1bmN0aW9uIHAodCl7dmFyIGU9dC5uYW1lLGk9dC5jYXRlZ29yaWVzLGE9dC5tZXRhO2lmKHIubW9kdWxlc1tlXSluLmxvZygiVHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQiKTtlbHNle3Iuc3VicGxvdHNSZWdpc3RyeVt0LmJhc2VQbG90TW9kdWxlLm5hbWVdfHxmdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU7aWYoci5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybiB2b2lkIG4ubG9nKCJQbG90IHR5cGUgIitlKyIgYWxyZWFkeSByZWdpc3RlcmVkLiIpO2Zvcih2YXIgaSBpbiB2KHQpLHIuc3VicGxvdHNSZWdpc3RyeVtlXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KWIoaSx0Lm5hbWUpfSh0LmJhc2VQbG90TW9kdWxlKTtmb3IodmFyIG89e30sbD0wO2w8aS5sZW5ndGg7bCsrKW9baVtsXV09ITAsci5hbGxDYXRlZ29yaWVzW2lbbF1dPSEwO2Zvcih2YXIgYyBpbiByLm1vZHVsZXNbZV09e19tb2R1bGU6dCxjYXRlZ29yaWVzOm99LGEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKHIubW9kdWxlc1tlXS5tZXRhPWEpLHIuYWxsVHlwZXMucHVzaChlKSxyLmNvbXBvbmVudHNSZWdpc3RyeSl5KGMsZSk7dC5sYXlvdXRBdHRyaWJ1dGVzJiZmKHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzLHQubGF5b3V0QXR0cmlidXRlcyk7dmFyIHU9dC5iYXNlUGxvdE1vZHVsZSxoPXUubmFtZTtpZigibWFwYm94Ij09PWgpe3ZhciBwPXUuY29uc3RhbnRzLnN0eWxlUnVsZXM7Zm9yKHZhciBkIGluIHApcygiLmpzLXBsb3RseS1wbG90IC5wbG90bHkgLm1hcGJveGdsLSIrZCxwW2RdKX0iZ2VvIiE9PWgmJiJtYXBib3giIT09aHx8dm9pZCAwPT09dHlwZW9mIHdpbmRvd3x8dm9pZCAwIT09d2luZG93LlBsb3RseUdlb0Fzc2V0c3x8KHdpbmRvdy5QbG90bHlHZW9Bc3NldHM9e3RvcG9qc29uOnt9fSl9fWZ1bmN0aW9uIGQodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBlPXQubmFtZTtmb3IodmFyIG4gaW4gci5jb21wb25lbnRzUmVnaXN0cnlbZV09dCx0LmxheW91dEF0dHJpYnV0ZXMmJih0LmxheW91dEF0dHJpYnV0ZXMuX2lzTGlua2VkVG9BcnJheSYmYShyLmxheW91dEFycmF5Q29udGFpbmVycyxlKSx2KHQpKSxyLm1vZHVsZXMpeShlLG4pO2Zvcih2YXIgaSBpbiByLnN1YnBsb3RzUmVnaXN0cnkpYihlLGkpO2Zvcih2YXIgbyBpbiByLnRyYW5zZm9ybXNSZWdpc3RyeSl4KGUsbyk7dC5zY2hlbWEmJnQuc2NoZW1hLmxheW91dCYmaCh1LHQuc2NoZW1hLmxheW91dCl9ZnVuY3Rpb24gbSh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zZm9ybSBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9IlRyYW5zZm9ybSBtb2R1bGUgIit0Lm5hbWUsaT0iZnVuY3Rpb24iPT10eXBlb2YgdC50cmFuc2Zvcm0sYT0iZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxjVHJhbnNmb3JtO2lmKCFpJiYhYSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG1pc3NpbmcgYSAqdHJhbnNmb3JtKiBvciAqY2FsY1RyYW5zZm9ybSogbWV0aG9kLiIpO2Zvcih2YXIgcyBpbiBpJiZhJiZuLmxvZyhbZSsiIGhhcyBib3RoIGEgKnRyYW5zZm9ybSogYW5kICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiIsIlBsZWFzZSBub3RlIHRoYXQgYWxsICp0cmFuc2Zvcm0qIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIiwiYmVmb3JlIGFsbCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iXS5qb2luKCIgIikpLG8odC5hdHRyaWJ1dGVzKXx8bi5sb2coZSsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiAqYXR0cmlidXRlcyogb2JqZWN0LiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnN1cHBseURlZmF1bHRzJiZuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGEgKnN1cHBseURlZmF1bHRzKiBtZXRob2QuIiksci50cmFuc2Zvcm1zUmVnaXN0cnlbdC5uYW1lXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KXgocyx0Lm5hbWUpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5uYW1lLG49ZS5zcGxpdCgiLSIpWzBdLGk9dC5kaWN0aW9uYXJ5LGE9dC5mb3JtYXQsbz1pJiZPYmplY3Qua2V5cyhpKS5sZW5ndGgscz1hJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgsbD1yLmxvY2FsZVJlZ2lzdHJ5LGM9bFtlXTtpZihjfHwobFtlXT1jPXt9KSxuIT09ZSl7dmFyIHU9bFtuXTt1fHwobFtuXT11PXt9KSxvJiZ1LmRpY3Rpb25hcnk9PT1jLmRpY3Rpb25hcnkmJih1LmRpY3Rpb25hcnk9aSkscyYmdS5mb3JtYXQ9PT1jLmZvcm1hdCYmKHUuZm9ybWF0PWEpfW8mJihjLmRpY3Rpb25hcnk9aSkscyYmKGMuZm9ybWF0PWEpfWZ1bmN0aW9uIHYodCl7aWYodC5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgZT10LmxheW91dEF0dHJpYnV0ZXMuX2FycmF5QXR0clJlZ2V4cHM7aWYoZSlmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylhKHIubGF5b3V0QXJyYXlSZWdleGVzLGVbbl0pfX1mdW5jdGlvbiB5KHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhY2VzKXt2YXIgaT1uLnRyYWNlc1tlXTtpJiZoKHIubW9kdWxlc1tlXS5fbW9kdWxlLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIHgodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFuc2Zvcm1zKXt2YXIgaT1uLnRyYW5zZm9ybXNbZV07aSYmaChyLnRyYW5zZm9ybXNSZWdpc3RyeVtlXS5hdHRyaWJ1dGVzLGkpfX1mdW5jdGlvbiBiKHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4uc3VicGxvdHMpe3ZhciBpPXIuc3VicGxvdHNSZWdpc3RyeVtlXSxhPWkubGF5b3V0QXR0cmlidXRlcyxvPSJzdWJwbG90Ij09PWkuYXR0cj9pLm5hbWU6aS5hdHRyO0FycmF5LmlzQXJyYXkobykmJihvPW9bMF0pO3ZhciBzPW4uc3VicGxvdHNbb107YSYmcyYmaChhLHMpfX1mdW5jdGlvbiBfKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9dC50eXBlKSx0fXIubW9kdWxlcz17fSxyLmFsbENhdGVnb3JpZXM9e30sci5hbGxUeXBlcz1bXSxyLnN1YnBsb3RzUmVnaXN0cnk9e30sci50cmFuc2Zvcm1zUmVnaXN0cnk9e30sci5jb21wb25lbnRzUmVnaXN0cnk9e30sci5sYXlvdXRBcnJheUNvbnRhaW5lcnM9W10sci5sYXlvdXRBcnJheVJlZ2V4ZXM9W10sci50cmFjZUxheW91dEF0dHJpYnV0ZXM9e30sci5sb2NhbGVSZWdpc3RyeT17fSxyLmFwaU1ldGhvZFJlZ2lzdHJ5PXt9LHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe2lmKHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCwhdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuIik7dCYmIUFycmF5LmlzQXJyYXkodCkmJih0PVt0XSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIik7c3dpdGNoKG4ubW9kdWxlVHlwZSl7Y2FzZSJ0cmFjZSI6cChuKTticmVhaztjYXNlInRyYW5zZm9ybSI6bShuKTticmVhaztjYXNlImNvbXBvbmVudCI6ZChuKTticmVhaztjYXNlImxvY2FsZSI6ZyhuKTticmVhaztjYXNlImFwaU1ldGhvZCI6dmFyIGk9bi5uYW1lO3IuYXBpTWV0aG9kUmVnaXN0cnlbaV09bi5mbjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpfX19LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXIubW9kdWxlc1tfKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoInZhcmlvdXMiPT09KHQ9Xyh0KSkpcmV0dXJuITE7dmFyIGk9ci5tb2R1bGVzW3RdO3JldHVybiBpfHwodCYmbi5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlICIrdCsiLiIpLGk9ci5tb2R1bGVzW2MudHlwZS5kZmx0XSksISFpLmNhdGVnb3JpZXNbZV19LHIuZ2V0VHJhbnNmb3JtSW5kaWNlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudHJhbnNmb3Jtc3x8W10saT0wO2k8bi5sZW5ndGg7aSsrKW5baV0udHlwZT09PWUmJnIucHVzaChpKTtyZXR1cm4gcn0sci5oYXNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50cmFuc2Zvcm1zfHxbXSxuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sci5nZXRDb21wb25lbnRNZXRob2Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XTtyZXR1cm4gbiYmbltlXXx8aX0sci5jYWxsPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHIuYXBpTWV0aG9kUmVnaXN0cnlbdF0uYXBwbHkobnVsbCxlKX19LHsiLi9saWIvZG9tIjo0OTEsIi4vbGliL2V4dGVuZCI6NDkzLCIuL2xpYi9pc19wbGFpbl9vYmplY3QiOjUwNCwiLi9saWIvbG9nZ2VycyI6NTA3LCIuL2xpYi9ub29wIjo1MTIsIi4vbGliL3B1c2hfdW5pcXVlIjo1MTgsIi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo2MTB9XSw2Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4uL2xpYiIpLGE9aS5leHRlbmRGbGF0LG89aS5leHRlbmREZWVwO2Z1bmN0aW9uIHModCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UidGhlbWVzX190aHVtYiI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6e3RleHQ6IiJ9LHNob3dsZWdlbmQ6ITEsbWFyZ2luOntsOjUscjo1LHQ6NSxiOjUscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztjYXNlInRodW1ibmFpbCI6ZT17dGl0bGU6e3RleHQ6IiJ9LGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjoiIixtYXJnaW46e2w6MSxyOjEsdDoxLGI6MSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2RlZmF1bHQ6ZT17fX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGw9dC5kYXRhLGM9dC5sYXlvdXQsdT1vKFtdLGwpLGY9byh7fSxjLHMoZS50aWxlQ2xhc3MpKSxoPXQuX2NvbnRleHR8fHt9O2lmKGUud2lkdGgmJihmLndpZHRoPWUud2lkdGgpLGUuaGVpZ2h0JiYoZi5oZWlnaHQ9ZS5oZWlnaHQpLCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3N8fCJ0aGVtZXNfX3RodW1iIj09PWUudGlsZUNsYXNzKXtmLmFubm90YXRpb25zPVtdO3ZhciBwPU9iamVjdC5rZXlzKGYpO2ZvcihyPTA7cjxwLmxlbmd0aDtyKyspaT1wW3JdLFsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0uaW5kZXhPZihpLnNsaWNlKDAsNSkpPi0xJiYoZltwW3JdXS50aXRsZT17dGV4dDoiIn0pO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe3ZhciBkPXVbcl07ZC5zaG93c2NhbGU9ITEsZC5tYXJrZXImJihkLm1hcmtlci5zaG93c2NhbGU9ITEpLG4udHJhY2VJcyhkLCJwaWUtbGlrZSIpJiYoZC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWYuYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgbT1PYmplY3Qua2V5cyhmKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hdGNoKC9ec2NlbmVcZCokLyl9KSk7aWYobS5sZW5ndGgpe3ZhciBnPXt9O2ZvcigidGh1bWJuYWlsIj09PWUudGlsZUNsYXNzJiYoZz17dGl0bGU6e3RleHQ6IiJ9LHNob3dheGVzbGFiZWxzOiExLHNob3d0aWNrbGFiZWxzOiExLGxpbmV0aWNrZW5hYmxlOiExfSkscj0wO3I8bS5sZW5ndGg7cisrKXt2YXIgdj1mW21bcl1dO3YueGF4aXN8fCh2LnhheGlzPXt9KSx2LnlheGlzfHwodi55YXhpcz17fSksdi56YXhpc3x8KHYuemF4aXM9e30pLGEodi54YXhpcyxnKSxhKHYueWF4aXMsZyksYSh2LnpheGlzLGcpLHYuX3NjZW5lPW51bGx9fXZhciB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UudGlsZUNsYXNzJiYoeS5jbGFzc05hbWU9ZS50aWxlQ2xhc3MpO3ZhciB4PXtnZDp5LHRkOnksbGF5b3V0OmYsZGF0YTp1LGNvbmZpZzp7c3RhdGljUGxvdDp2b2lkIDA9PT1lLnN0YXRpY1Bsb3R8fGUuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnZvaWQgMD09PWUucGxvdEdsUGl4ZWxSYXRpbz8yOmUucGxvdEdsUGl4ZWxSYXRpbyxkaXNwbGF5bG9nbzplLmRpc3BsYXlsb2dvfHwhMSxzaG93TGluazplLnNob3dMaW5rfHwhMSxzaG93VGlwczplLnNob3dUaXBzfHwhMSxtYXBib3hBY2Nlc3NUb2tlbjpoLm1hcGJveEFjY2Vzc1Rva2VufX07cmV0dXJuInRyYW5zcGFyZW50IiE9PWUuc2V0QmFja2dyb3VuZCYmKHguY29uZmlnLnNldEJhY2tncm91bmQ9ZS5zZXRCYWNrZ3JvdW5kfHwib3BhcXVlIikseC5nZC5kZWZhdWx0TGF5b3V0PXMoZS50aWxlQ2xhc3MpLHh9fSx7Ii4uL2xpYiI6NTAzLCIuLi9yZWdpc3RyeSI6NjM4fV0sNjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvdG9faW1hZ2UiKSxhPXQoIi4vZmlsZXNhdmVyIiksbz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQpfHwocj1uLmdldEdyYXBoRGl2KHQpKSwoZT1lfHx7fSkuZm9ybWF0PWUuZm9ybWF0fHwicG5nIixlLndpZHRoPWUud2lkdGh8fG51bGwsZS5oZWlnaHQ9ZS5oZWlnaHR8fG51bGwsZS5pbWFnZURhdGFPbmx5PSEwLG5ldyBQcm9taXNlKChmdW5jdGlvbihzLGwpe3ImJnIuX3NuYXBzaG90SW5Qcm9ncmVzcyYmbChuZXcgRXJyb3IoIlNuYXBzaG90dGluZyBhbHJlYWR5IGluIHByb2dyZXNzLiIpKSxuLmlzSUUoKSYmInN2ZyIhPT1lLmZvcm1hdCYmbChuZXcgRXJyb3Ioby5NU0dfSUVfQkFEX0ZPUk1BVCkpLHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITApO3ZhciBjPWkodCxlKSx1PWUuZmlsZW5hbWV8fHQuZm58fCJuZXdwbG90Ijt1Kz0iLiIrZS5mb3JtYXQucmVwbGFjZSgiLSIsIi4iKSxjLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiByJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxhKHQsdSxlLmZvcm1hdCl9KSkudGhlbigoZnVuY3Rpb24odCl7cyh0KX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMSksbCh0KX0pKX0pKX19LHsiLi4vbGliIjo1MDMsIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIjo1NDYsIi4vZmlsZXNhdmVyIjo2NDEsIi4vaGVscGVycyI6NjQyfV0sNjQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbz0iZG93bmxvYWQiaW4gYTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHMsbCl7dmFyIGMsdTtpZihuLmlzSUUoKSlyZXR1cm4gYz1pLmNyZWF0ZUJsb2IodCwic3ZnIiksd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGMsZSksYz1udWxsLHMoZSk7aWYobylyZXR1cm4gYz1pLmNyZWF0ZUJsb2IodCxyKSx1PWkuY3JlYXRlT2JqZWN0VVJMKGMpLGEuaHJlZj11LGEuZG93bmxvYWQ9ZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpLGkucmV2b2tlT2JqZWN0VVJMKHUpLGM9bnVsbCxzKGUpO2lmKG4uaXNTYWZhcmkoKSl7dmFyIGY9InN2ZyI9PT1yPyIsIjoiO2Jhc2U2NCwiO3JldHVybiBpLm9jdGV0U3RyZWFtKGYrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxzKGUpfWwobmV3IEVycm9yKCJkb3dubG9hZCBlcnJvciIpKX0pKX19LHsiLi4vbGliIjo1MDMsIi4vaGVscGVycyI6NjQyfV0sNjQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ci5nZXREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdC5faGFzJiYodC5faGFzKCJnbDNkIil8fHQuX2hhcygiZ2wyZCIpfHx0Ll9oYXMoIm1hcGJveCIpKT81MDA6MH0sci5nZXRSZWRyYXdGdW5jPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe24uZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KX19LHIuZW5jb2RlU1ZHPWZ1bmN0aW9uKHQpe3JldHVybiJkYXRhOmltYWdlL3N2Zyt4bWwsIitlbmNvZGVVUklDb21wb25lbnQodCl9LHIuZW5jb2RlSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4iZGF0YTphcHBsaWNhdGlvbi9qc29uLCIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTt2YXIgaT13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMO3IuY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNyZWF0ZU9iamVjdFVSTCh0KX0sci5yZXZva2VPYmplY3RVUkw9ZnVuY3Rpb24odCl7cmV0dXJuIGkucmV2b2tlT2JqZWN0VVJMKHQpfSxyLmNyZWF0ZUJsb2I9ZnVuY3Rpb24odCxlKXtpZigic3ZnIj09PWUpcmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbdF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtpZigiZnVsbC1qc29uIj09PWUpcmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbdF0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCJ9KTt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXlCdWZmZXIoZSksbj1uZXcgVWludDhBcnJheShyKSxpPTA7aTxlO2krKyluW2ldPXQuY2hhckNvZGVBdChpKTtyZXR1cm4gcn0od2luZG93LmF0b2IodCkpO3JldHVybiBuZXcgd2luZG93LkJsb2IoW3JdLHt0eXBlOiJpbWFnZS8iK2V9KX0sci5vY3RldFN0cmVhbT1mdW5jdGlvbih0KXtkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIrdH0sci5JTUFHRV9VUkxfUFJFRklYPS9eZGF0YTppbWFnZVwvXHcrO2Jhc2U2NCwvLHIuTVNHX0lFX0JBRF9GT1JNQVQ9IlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLiJ9LHsiLi4vcmVnaXN0cnkiOjYzOH1dLDY0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hlbHBlcnMiKSxpPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOnQoIi4vY2xvbmVwbG90IiksdG9TVkc6dCgiLi90b3N2ZyIpLHN2Z1RvSW1nOnQoIi4vc3ZndG9pbWciKSx0b0ltYWdlOnQoIi4vdG9pbWFnZSIpLGRvd25sb2FkSW1hZ2U6dCgiLi9kb3dubG9hZCIpfTtlLmV4cG9ydHM9aX0seyIuL2Nsb25lcGxvdCI6NjM5LCIuL2Rvd25sb2FkIjo2NDAsIi4vaGVscGVycyI6NjQyLCIuL3N2Z3RvaW1nIjo2NDQsIi4vdG9pbWFnZSI6NjQ1LCIuL3Rvc3ZnIjo2NDZ9XSw2NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsYT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lbWl0dGVyfHxuZXcgaSxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihpLG8pe3ZhciBzPXdpbmRvdy5JbWFnZSxsPXQuc3ZnLGM9dC5mb3JtYXR8fCJwbmciO2lmKG4uaXNJRSgpJiYic3ZnIiE9PWMpe3ZhciB1PW5ldyBFcnJvcihhLk1TR19JRV9CQURfRk9STUFUKTtyZXR1cm4gbyh1KSx0LnByb21pc2U/cjplLmVtaXQoImVycm9yIix1KX12YXIgZixoLHA9dC5jYW52YXMsZD10LnNjYWxlfHwxLG09dC53aWR0aHx8MzAwLGc9dC5oZWlnaHR8fDE1MCx2PWQqbSx5PWQqZyx4PXAuZ2V0Q29udGV4dCgiMmQiKSxiPW5ldyBzOyJzdmciPT09Y3x8bi5pc1NhZmFyaSgpP2g9YS5lbmNvZGVTVkcobCk6KGY9YS5jcmVhdGVCbG9iKGwsInN2ZyIpLGg9YS5jcmVhdGVPYmplY3RVUkwoZikpLHAud2lkdGg9dixwLmhlaWdodD15LGIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHI7c3dpdGNoKGY9bnVsbCxhLnJldm9rZU9iamVjdFVSTChoKSwic3ZnIiE9PWMmJnguZHJhd0ltYWdlKGIsMCwwLHYseSksYyl7Y2FzZSJqcGVnIjpyPXAudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJwbmciOnI9cC50b0RhdGFVUkwoImltYWdlL3BuZyIpO2JyZWFrO2Nhc2Uid2VicCI6cj1wLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2Nhc2Uic3ZnIjpyPWg7YnJlYWs7ZGVmYXVsdDp2YXIgbj0iSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcsIHN2ZyBvciB3ZWJwLiI7aWYobyhuZXcgRXJyb3IobikpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLG4pfWkociksdC5wcm9taXNlfHxlLmVtaXQoInN1Y2Nlc3MiLHIpfSxiLm9uZXJyb3I9ZnVuY3Rpb24ocil7aWYoZj1udWxsLGEucmV2b2tlT2JqZWN0VVJMKGgpLG8ociksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIscil9LGIuc3JjPWh9KSk7cmV0dXJuIHQucHJvbWlzZT9yOmV9fSx7Ii4uL2xpYiI6NTAzLCIuL2hlbHBlcnMiOjY0MixldmVudHM6ODR9XSw2NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL2xpYiIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2Nsb25lcGxvdCIpLGw9dCgiLi90b3N2ZyIpLGM9dCgiLi9zdmd0b2ltZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6InBuZyJ9KSxmPXUuZ2Q7Zi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKTt2YXIgaD1vLmdldFJlZHJhd0Z1bmMoZik7cmV0dXJuIGkuY2FsbCgiX2RvUGxvdCIsZix1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oaCkudGhlbigoZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGYuX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9bChmKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uaWQ9YS5yYW5kc3RyKCksKHI9Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmYuX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmYuX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpuLGVtaXR0ZXI6cixzdmc6dH0pKS5jbGVhbj1mdW5jdGlvbigpe2YmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZil9fSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3IuZW1pdCgiZXJyb3IiLHQpfSkpLHJ9fSx7Ii4uL2xpYiI6NTAzLCIuLi9yZWdpc3RyeSI6NjM4LCIuL2Nsb25lcGxvdCI6NjM5LCIuL2hlbHBlcnMiOjY0MiwiLi9zdmd0b2ltZyI6NjQ0LCIuL3Rvc3ZnIjo2NDYsZXZlbnRzOjg0fV0sNjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGw9LyIvZyxjPW5ldyBSZWdFeHAoJygiVE9CRVNUUklQUEVEKXwoVE9CRVNUUklQUEVEIiknLCJnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxmLGg9dC5fZnVsbExheW91dCxwPWguX3BhcGVyLGQ9aC5fdG9wcGFwZXIsbT1oLndpZHRoLGc9aC5oZWlnaHQ7cC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5jYWxsKGEuc2V0UmVjdCwwLDAsbSxnKS5jYWxsKG8uZmlsbCxoLnBhcGVyX2JnY29sb3IpO3ZhciB2PWguX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKyl7dmFyIHk9dlt1XTt5LnRvU1ZHJiZ5LnRvU1ZHKHQpfWlmKGQpe3ZhciB4PWQubm9kZSgpLmNoaWxkTm9kZXMsYj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4KTtmb3IodT0wO3U8Yi5sZW5ndGg7dSsrKXt2YXIgXz1iW3VdO18uY2hpbGROb2Rlcy5sZW5ndGgmJnAubm9kZSgpLmFwcGVuZENoaWxkKF8pfX1oLl9kcmFnZ2VycyYmaC5fZHJhZ2dlcnMucmVtb3ZlKCkscC5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixwLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJoaWRkZW4iIT09dGhpcy5zdHlsZS52aXNpYmlsaXR5JiYibm9uZSIhPT10aGlzLnN0eWxlLmRpc3BsYXkpe3Quc3R5bGUoe3Zpc2liaWxpdHk6bnVsbCxkaXNwbGF5Om51bGx9KTt2YXIgZT10aGlzLnN0eWxlLmZvbnRGYW1pbHk7ZSYmLTEhPT1lLmluZGV4T2YoJyInKSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSl9ZWxzZSB0LnJlbW92ZSgpfSkpO3ZhciB3PVtdO2lmKGguX2dyYWRpZW50VXJsUXVlcnlQYXJ0cylmb3IoZiBpbiBoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpdy5wdXNoKGYpO2lmKGguX3BhdHRlcm5VcmxRdWVyeVBhcnRzKWZvcihmIGluIGguX3BhdHRlcm5VcmxRdWVyeVBhcnRzKXcucHVzaChmKTt3Lmxlbmd0aCYmcC5zZWxlY3RBbGwody5qb2luKCIsIikpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10aGlzLnN0eWxlLmZpbGw7ZSYmLTEhPT1lLmluZGV4T2YoInVybCgiKSYmdC5zdHlsZSgiZmlsbCIsZS5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKTt2YXIgcj10aGlzLnN0eWxlLnN0cm9rZTtyJiYtMSE9PXIuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJzdHJva2UiLHIucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSl9KSksInBkZiIhPT1lJiYiZXBzIiE9PWV8fHAuc2VsZWN0QWxsKCIjTWF0aEpheF9TVkdfZ2x5cGhzIHBhdGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDApLHAubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsInhtbG5zIixzLnN2ZykscC5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucywieG1sbnM6eGxpbmsiLHMueGxpbmspLCJzdmciPT09ZSYmciYmKHAuYXR0cigid2lkdGgiLHIqbSkscC5hdHRyKCJoZWlnaHQiLHIqZykscC5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrbSsiICIrZykpO3ZhciBUPShuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKHAubm9kZSgpKTtyZXR1cm4gVD1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2Iikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSkuaHRtbCgiIikscj10LnJlcGxhY2UoLygmW147XSo7KS9naSwoZnVuY3Rpb24odCl7cmV0dXJuIiZsdDsiPT09dD8iJiM2MDsiOiImcnQ7Ij09PXQ/IiYjNjI7IjotMSE9PXQuaW5kZXhPZigiPCIpfHwtMSE9PXQuaW5kZXhPZigiPiIpPyIiOmUuaHRtbCh0KS50ZXh0KCl9KSk7cmV0dXJuIGUucmVtb3ZlKCkscn0oVCksVD0oVD1ULnJlcGxhY2UoLyYoPyFcdys7fFwjWzAtOV0rO3wgXCN4WzAtOUEtRl0rOykvZywiJmFtcDsiKSkucmVwbGFjZShjLCInIiksaS5pc0lFKCkmJihUPShUPShUPVQucmVwbGFjZSgvIi9naSwiJyIpKS5yZXBsYWNlKC8oXCgnIykoW14nXSopKCdcKSkvZ2ksJygiIyQyIiknKSkucmVwbGFjZSgvKFxcJykvZ2ksJyInKSksVH19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjQ4MCwiLi4vbGliIjo1MDMsIkBwbG90bHkvZDMiOjU4fV0sNjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIsITApLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS53aWR0aCx0LCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjUwM31dLDY0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLnBhdHRlcm4sZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxoPWwoe2VkaXRUeXBlOiJjYWxjIixhcnJheU9rOiEwLGNvbG9yRWRpdFR5cGU6InN0eWxlIn0pLHA9Zih7fSxuLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjB9KSxkPWYoe3dpZHRoOnAsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxtPWYoe2xpbmU6ZCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlciIpLHtvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LHBhdHRlcm46dX0pO2UuZXhwb3J0cz17eDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDpuLnhwZXJpb2QwLHlwZXJpb2QwOm4ueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHRleHQ6bi50ZXh0LHRleHR0ZW1wbGF0ZTpvKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6Yy5ldmVudERhdGFLZXlzfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYXV0byIsIm5vbmUiXSxkZmx0OiJhdXRvIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saW5zaWRldGV4dGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZW5kIiwibWlkZGxlIiwic3RhcnQiXSxkZmx0OiJlbmQiLGVkaXRUeXBlOiJwbG90In0sdGV4dGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDpmKHt9LGgse30pLGluc2lkZXRleHRmb250OmYoe30saCx7fSksb3V0c2lkZXRleHRmb250OmYoe30saCx7fSksY29uc3RyYWludGV4dDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImJvdGgiLCJub25lIl0sZGZsdDoiYm90aCIsZWRpdFR5cGU6ImNhbGMifSxjbGlwb25heGlzOmYoe30sbi5jbGlwb25heGlzLHt9KSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGJhc2U6e3ZhbFR5cGU6ImFueSIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjptLG9mZnNldGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxhbGlnbm1lbnRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4uc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Om4uc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4udW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnVuc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Om4udW5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSxfZGVwcmVjYXRlZDp7YmFyZGlyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidiIsImgiXX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6Mzg3LCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2LCIuL2NvbnN0YW50cyI6NjUwfV0sNjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLHM9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLHUsZixoLHAsZD1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksbT1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksZz17bXNVVEM6ISghZS5iYXNlJiYwIT09ZS5iYXNlKX07ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1kLm1ha2VDYWxjZGF0YShlLCJ4IixnKSx1PW0ubWFrZUNhbGNkYXRhKGUsInkiKSxmPWkoZSxtLCJ5Iix1KSxoPSEhZS55cGVyaW9kYWxpZ25tZW50LHA9InkiKToocj1tLm1ha2VDYWxjZGF0YShlLCJ5IixnKSx1PWQubWFrZUNhbGNkYXRhKGUsIngiKSxmPWkoZSxkLCJ4Iix1KSxoPSEhZS54cGVyaW9kYWxpZ25tZW50LHA9IngiKSxjPWYudmFscztmb3IodmFyIHY9TWF0aC5taW4oYy5sZW5ndGgsci5sZW5ndGgpLHk9bmV3IEFycmF5KHYpLHg9MDt4PHY7eCsrKXlbeF09e3A6Y1t4XSxzOnJbeF19LGgmJih5W3hdLm9yaWdfcD11W3hdLHlbeF1bcCsiRW5kIl09Zi5lbmRzW3hdLHlbeF1bcCsiU3RhcnQiXT1mLnN0YXJ0c1t4XSksZS5pZHMmJih5W3hdLmlkPVN0cmluZyhlLmlkc1t4XSkpO3JldHVybiBhKGUsIm1hcmtlciIpJiZvKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxhKGUsIm1hcmtlci5saW5lIikmJm8odCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSxzKHksZSksbCh5LGUpLHl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNzQsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjozNzcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU1MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6OTI4LCIuL2FycmF5c190b19jYWxjZGF0YSI6NjQ3fV0sNjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17VEVYVFBBRDozLGV2ZW50RGF0YUtleXM6WyJ2YWx1ZSIsImxhYmVsIl19fSx7fV0sNjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9zaWV2ZS5qcyIpO2Z1bmN0aW9uIHUodCxlLHIsbyx1KXtpZihvLmxlbmd0aCl7dmFyIGIsXyx3LFQ7c3dpdGNoKGZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbyxzPWVbcl0sbD1zWzBdLnRyYWNlLGM9ImZ1bm5lbCI9PT1sLnR5cGU/bC5fYmFzZTpsLmJhc2UsdT0iaCI9PT1sLm9yaWVudGF0aW9uP2wueGNhbGVuZGFyOmwueWNhbGVuZGFyLGY9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP2Z1bmN0aW9uKCl7cmV0dXJuIG51bGx9OnQuZDJjO2lmKGkoYykpe2ZvcihhPTA7YTxNYXRoLm1pbihjLmxlbmd0aCxzLmxlbmd0aCk7YSsrKW89ZihjW2FdLDAsdSksbihvKT8oc1thXS5iPStvLHNbYV0uaGFzQj0xKTpzW2FdLmI9MDtmb3IoO2E8cy5sZW5ndGg7YSsrKXNbYV0uYj0wfWVsc2V7bz1mKGMsMCx1KTt2YXIgaD1uKG8pO2ZvcihvPWg/bzowLGE9MDthPHMubGVuZ3RoO2ErKylzW2FdLmI9byxoJiYoc1thXS5oYXNCPTEpfX19KHIsbyksdS5tb2RlKXtjYXNlIm92ZXJsYXkiOmYoZSxyLG8sdSk7YnJlYWs7Y2FzZSJncm91cCI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2Uub2Zmc2V0P18ucHVzaChUKTpiLnB1c2goVCk7Xy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89bmV3IGMobix7cG9zQXhpczplLHNlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohaS5ub3JtfSk7KGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Ll9mdWxsTGF5b3V0LGE9ci5wb3NpdGlvbnMsbz1yLmRpc3RpbmN0UG9zaXRpb25zLHM9ci5taW5EaWZmLGM9ci50cmFjZXMsdT1jLmxlbmd0aCxmPWEubGVuZ3RoIT09by5sZW5ndGgsaD1zKigxLW4uZ2FwKSxnPWwoaSxlLl9pZCkrY1swXVswXS50cmFjZS5vcmllbnRhdGlvbix2PWkuX2FsaWdubWVudE9wdHNbZ118fHt9LHk9MDt5PHU7eSsrKXt2YXIgeCxiLF89Y1t5XSx3PV9bMF0udHJhY2UsVD12W3cuYWxpZ25tZW50Z3JvdXBdfHx7fSxrPU9iamVjdC5rZXlzKFQub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLEE9KHg9az9oL2s6Zj9oL3U6aCkqKDEtKG4uZ3JvdXBnYXB8fDApKTtiPWs/KCgyKncuX29mZnNldEluZGV4KzEtaykqeC1BKS8yOmY/KCgyKnkrMS11KSp4LUEpLzI6LUEvMjt2YXIgTT1fWzBdLnQ7TS5iYXJ3aWR0aD1BLE0ucG9mZnNldD1iLE0uYmFyZ3JvdXB3aWR0aD1oLE0uYmFyZGVsdGE9c31yLmJpbldpZHRoPWNbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChyKSxkKGUsciksbShlLHIsZil9KSh0LGUsbyxpKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYWNlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYodm9pZCAwPT09aVswXS50cmFjZS5iYXNlKWZvcih2YXIgbz1uZXcgYyhbaV0se3Bvc0F4aXM6ZSxzZXBOZWdWYWw6ITAsb3ZlcmxhcE5vTWVyZ2U6ITB9KSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107aWYobC5wIT09YSl7dmFyIHU9by5wdXQobC5wLGwuYitsLnMpO3UmJihsLmI9dSl9fX19KG8sZSksaS5ub3JtPyh2KG8pLHkocixvLGkpKTpnKHIsbyl9KHQsZSxyLF8sdSksYi5sZW5ndGgmJmYoZSxyLGIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2UuYmFzZT9fLnB1c2goVCk6Yi5wdXNoKFQpO18ubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPW5ldyBjKG4se3Bvc0F4aXM6ZSxzZXBOZWdWYWw6InJlbGF0aXZlIj09PWkubW9kZSxvdmVybGFwTm9NZXJnZTohKGkubm9ybXx8InN0YWNrIj09PWkubW9kZXx8InJlbGF0aXZlIj09PWkubW9kZSl9KTtoKGUsbyxpKSxmdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGwsYyx1LGY9eCh0KSxoPWUudHJhY2VzO2ZvcihsPTA7bDxoLmxlbmd0aDtsKyspaWYobj1oW2xdLCJmdW5uZWwiPT09KGk9blswXS50cmFjZSkudHlwZSlmb3IoYz0wO2M8bi5sZW5ndGg7YysrKSh1PW5bY10pLnMhPT1hJiZlLnB1dCh1LnAsLS41KnUucyk7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKyl7bj1oW2xdLGk9blswXS50cmFjZSxvPSJmdW5uZWwiPT09aS50eXBlO3ZhciBwPVtdO2ZvcihjPTA7YzxuLmxlbmd0aDtjKyspaWYoKHU9bltjXSkucyE9PWEpe3ZhciBkO2Q9bz91LnM6dS5zK3UuYjt2YXIgbT1lLnB1dCh1LnAsZCksZz1tK2Q7dS5iPW0sdVtmXT1nLHIubm9ybXx8KHAucHVzaChnKSx1Lmhhc0ImJnAucHVzaChtKSl9ci5ub3JtfHwoaS5fZXh0cmVtZXNbdC5faWRdPXMuZmluZEV4dHJlbWVzKHQscCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pKX19KHIsbyxpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKylmb3IodmFyIHU9bltsXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBwPXVbZl07aWYocC5zIT09YSlwLmIrcC5zPT09by5nZXQocC5wLHAucykmJihwLl9vdXRtb3N0PSEwKX1pLm5vcm0mJnkocixvLGkpfSgwLGUscixfLHUpLGIubGVuZ3RoJiZmKGUscixiLHUpfSFmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXgoZSkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoYT10W3JdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgZj0xZTQvKGMtbCksaD1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChmKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspeyhhPXRbcl0pWzBdLnQuZXh0ZW50cz1zO3ZhciBwPWFbMF0udC5wb2Zmc2V0LGQ9QXJyYXkuaXNBcnJheShwKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbT1hW2ldLGc9bVtvXS1tLncvMjtpZihuKGcpKXt2YXIgdj1tW29dK20udy8yLHk9aChtLnApO3NbeV0/c1t5XT1bTWF0aC5taW4oZyxzW3ldWzBdKSxNYXRoLm1heCh2LHNbeV1bMV0pXTpzW3ldPVtnLHZdfW0ucDA9bS5wKyhkP3BbaV06cCksbS5wMT1tLnAwK20udyxtLnMwPW0uYixtLnMxPW0uczArbS5zfX19KG8sZSl9fWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1uZXcgYyhbYV0se3Bvc0F4aXM6dCxzZXBOZWdWYWw6ITEsb3ZlcmxhcE5vTWVyZ2U6IW4ubm9ybX0pO2godCxvLG4pLG4ubm9ybT8odihvKSx5KGUsbyxuKSk6ZyhlLG8pfX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49ZS5taW5EaWZmLGk9ZS50cmFjZXMsYT1uKigxLXIuZ2FwKSxvPWEqKDEtKHIuZ3JvdXBnYXB8fDApKSxzPS1vLzIsbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgYz1pW2xdWzBdLnQ7Yy5iYXJ3aWR0aD1vLGMucG9mZnNldD1zLGMuYmFyZ3JvdXB3aWR0aD1hLGMuYmFyZGVsdGE9bn1lLmJpbldpZHRoPWlbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChlKSxkKHQsZSksbSh0LGUpfWZ1bmN0aW9uIHAodCl7dmFyIGUscixhPXQudHJhY2VzO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBvLHM9YVtlXSxsPXNbMF0sYz1sLnRyYWNlLHU9bC50LGY9Yy5fb2Zmc2V0fHxjLm9mZnNldCxoPXUucG9mZnNldDtpZihpKGYpKXtmb3Iobz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmLDAscy5sZW5ndGgpLHI9MDtyPG8ubGVuZ3RoO3IrKyluKG9bcl0pfHwob1tyXT1oKTtmb3Iocj1vLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylvLnB1c2goaCk7dS5wb2Zmc2V0PW99ZWxzZSB2b2lkIDAhPT1mJiYodS5wb2Zmc2V0PWYpO3ZhciBwPWMuX3dpZHRofHxjLndpZHRoLGQ9dS5iYXJ3aWR0aDtpZihpKHApKXt2YXIgbT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwLDAscy5sZW5ndGgpO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspbihtW3JdKXx8KG1bcl09ZCk7Zm9yKHI9bS5sZW5ndGg7cjxzLmxlbmd0aDtyKyspbS5wdXNoKGQpO2lmKHUuYmFyd2lkdGg9bSx2b2lkIDA9PT1mKXtmb3Iobz1bXSxyPTA7cjxzLmxlbmd0aDtyKyspby5wdXNoKGgrKGQtbVtyXSkvMik7dS5wb2Zmc2V0PW99fWVsc2Ugdm9pZCAwIT09cCYmKHUuYmFyd2lkdGg9cCx2b2lkIDA9PT1mJiYodS5wb2Zmc2V0PWgrKGQtcCkvMikpfX1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPWUudHJhY2VzLG49eCh0KSxpPTA7aTxyLmxlbmd0aDtpKyspZm9yKHZhciBhPXJbaV0sbz1hWzBdLnQscz1vLnBvZmZzZXQsbD1BcnJheS5pc0FycmF5KHMpLGM9by5iYXJ3aWR0aCx1PUFycmF5LmlzQXJyYXkoYyksZj0wO2Y8YS5sZW5ndGg7ZisrKXt2YXIgaD1hW2ZdLHA9aC53PXU/Y1tmXTpjO2hbbl09aC5wKyhsP3NbZl06cykrcC8yfX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1lLnRyYWNlcyxpPWUubWluRGlmZi8yO3MubWluRHRpY2sodCxlLm1pbkRpZmYsZS5kaXN0aW5jdFBvc2l0aW9uc1swXSxyKTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG8sbCxjLHUsZj1uW2FdLGg9ZlswXSxwPWgudHJhY2UsZD1bXTtmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKWw9KG89Zlt1XSkucC1pLGM9by5wK2ksZC5wdXNoKGwsYyk7aWYocC53aWR0aHx8cC5vZmZzZXQpe3ZhciBtPWgudCxnPW0ucG9mZnNldCx2PW0uYmFyd2lkdGgseT1BcnJheS5pc0FycmF5KGcpLHg9QXJyYXkuaXNBcnJheSh2KTtmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKXtvPWZbdV07dmFyIGI9eT9nW3VdOmcsXz14P3ZbdV06djtjPShsPW8ucCtiKStfLGQucHVzaChsLGMpfX1wLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxkLHtwYWRkZWQ6ITF9KX19ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1lLnRyYWNlcyxuPXgodCksaT0wO2k8ci5sZW5ndGg7aSsrKXtmb3IodmFyIGE9cltpXSxvPWFbMF0udHJhY2UsbD1bXSxjPSExLHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGY9YVt1XSxoPWYuYixwPWgrZi5zO2Zbbl09cCxsLnB1c2gocCksZi5oYXNCJiZsLnB1c2goaCksZi5oYXNCJiZmLmJ8fChjPSEwKX1vLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxsLHt0b3plcm86YyxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9dC50cmFjZXMscj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtvLnMhPT1hJiZ0LnB1dChvLnAsby5iK28ucyl9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBpPWUudHJhY2VzLG89eCh0KSxsPSJmcmFjdGlvbiI9PT1yLm5vcm0/MToxMDAsYz1sLzFlOSx1PXQubDJjKHQuYzJsKDApKSxmPSJzdGFjayI9PT1yLm1vZGU/bDp1O2Z1bmN0aW9uIGgoZSl7cmV0dXJuIG4odC5jMmwoZSkpJiYoZTx1LWN8fGU+ZitjfHwhbih1KSl9Zm9yKHZhciBwPTA7cDxpLmxlbmd0aDtwKyspe2Zvcih2YXIgZD1pW3BdLG09ZFswXS50cmFjZSxnPVtdLHY9ITEseT0hMSxiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPWRbYl07aWYoXy5zIT09YSl7dmFyIHc9TWF0aC5hYnMobC9lLmdldChfLnAsXy5zKSk7Xy5iKj13LF8ucyo9dzt2YXIgVD1fLmIsaz1UK18ucztfW29dPWssZy5wdXNoKGspLHk9eXx8aChrKSxfLmhhc0ImJihnLnB1c2goVCkseT15fHxoKFQpKSxfLmhhc0ImJl8uYnx8KHY9ITApfX1tLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxnLHt0b3plcm86dixwYWRkZWQ6eX0pfX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Ll9pZC5jaGFyQXQoMCl9ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1bXSxjPVtdLGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGg9YVtmXTtpZighMD09PWgudmlzaWJsZSYmby50cmFjZUlzKGgsImJhciIpJiZoLnhheGlzPT09ci5faWQmJmgueWF4aXM9PT1uLl9pZCYmKCJoIj09PWgub3JpZW50YXRpb24/bC5wdXNoKHNbZl0pOmMucHVzaChzW2ZdKSxoLl9jb21wdXRlUGgpKWZvcih2YXIgcD10LmNhbGNkYXRhW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKykiZnVuY3Rpb24iPT10eXBlb2YgcFtkXS5waDAmJihwW2RdLnBoMD1wW2RdLnBoMCgpKSwiZnVuY3Rpb24iPT10eXBlb2YgcFtkXS5waDEmJihwW2RdLnBoMT1wW2RdLnBoMSgpKX12YXIgbT17eENhdDoiY2F0ZWdvcnkiPT09ci50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1yLnR5cGUseUNhdDoiY2F0ZWdvcnkiPT09bi50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1uLnR5cGUsbW9kZTppLmJhcm1vZGUsbm9ybTppLmJhcm5vcm0sZ2FwOmkuYmFyZ2FwLGdyb3VwZ2FwOmkuYmFyZ3JvdXBnYXB9O3UodCxyLG4sYyxtKSx1KHQsbixyLGwsbSl9LHNldEdyb3VwUG9zaXRpb25zOnV9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NTYyLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuL3NpZXZlLmpzIjo2NjEsImZhc3QtaXNudW1lcmljIjoxOTB9XSw2NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxsPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCx1PXQoIi4vYXR0cmlidXRlcyIpLGY9bi5jb2VyY2VGb250O2Z1bmN0aW9uIGgodCxlLHIsbil7dmFyIGk9ZS5vcmllbnRhdGlvbixhPWVbe3Y6IngiLGg6InkifVtpXSsiYXhpcyJdLG89YyhyLGEpK2kscz1yLl9hbGlnbm1lbnRPcHRzfHx7fSxsPW4oImFsaWdubWVudGdyb3VwIiksdT1zW29dO3V8fCh1PXNbb109e30pO3ZhciBmPXVbbF07Zj9mLnRyYWNlcy5wdXNoKGUpOmY9dVtsXT17dHJhY2VzOltlXSxhbGlnbm1lbnRJbmRleDpPYmplY3Qua2V5cyh1KS5sZW5ndGgsb2Zmc2V0R3JvdXBzOnt9fTt2YXIgaD1uKCJvZmZzZXRncm91cCIpLHA9Zi5vZmZzZXRHcm91cHMsZD1wW2hdO2gmJihkfHwoZD1wW2hdPXtvZmZzZXRJbmRleDpPYmplY3Qua2V5cyhwKS5sZW5ndGh9KSxlLl9vZmZzZXRJbmRleD1kLm9mZnNldEluZGV4KX1mdW5jdGlvbiBwKHQsZSxyLGksYSxvKXt2YXIgcz0hKCExPT09KG89b3x8e30pLm1vZHVsZUhhc1NlbGVjdGVkKSxsPSEoITE9PT1vLm1vZHVsZUhhc1Vuc2VsZWN0ZWQpLGM9ISghMT09PW8ubW9kdWxlSGFzQ29uc3RyYWluKSx1PSEoITE9PT1vLm1vZHVsZUhhc0NsaXBvbmF4aXMpLGg9ISghMT09PW8ubW9kdWxlSGFzVGV4dGFuZ2xlKSxwPSEoITE9PT1vLm1vZHVsZUhhc0luc2lkZWFuY2hvciksZD0hIW8uaGFzUGF0aGJhcixtPUFycmF5LmlzQXJyYXkoYSl8fCJhdXRvIj09PWEsZz1tfHwiaW5zaWRlIj09PWEsdj1tfHwib3V0c2lkZSI9PT1hO2lmKGd8fHYpe3ZhciB5PWYoaSwidGV4dGZvbnQiLHIuZm9udCkseD1uLmV4dGVuZEZsYXQoe30seSksYj0hKHQudGV4dGZvbnQmJnQudGV4dGZvbnQuY29sb3IpO2lmKGImJmRlbGV0ZSB4LmNvbG9yLGYoaSwiaW5zaWRldGV4dGZvbnQiLHgpLGQpe3ZhciBfPW4uZXh0ZW5kRmxhdCh7fSx5KTtiJiZkZWxldGUgXy5jb2xvcixmKGksInBhdGhiYXIudGV4dGZvbnQiLF8pfXYmJmYoaSwib3V0c2lkZXRleHRmb250Iix5KSxzJiZpKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGwmJmkoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxjJiZpKCJjb25zdHJhaW50ZXh0IiksdSYmaSgiY2xpcG9uYXhpcyIpLGgmJmkoInRleHRhbmdsZSIpLGkoInRleHR0ZW1wbGF0ZSIpfWcmJnAmJmkoImluc2lkZXRleHRhbmNob3IiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHUscixpKX1pZihvKHQsZSxjLGYpKXtzKHQsZSxjLGYpLGYoInhob3ZlcmZvcm1hdCIpLGYoInlob3ZlcmZvcm1hdCIpLGYoIm9yaWVudGF0aW9uIixlLngmJiFlLnk/ImgiOiJ2IiksZigiYmFzZSIpLGYoIm9mZnNldCIpLGYoIndpZHRoIiksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKTt2YXIgaD1mKCJ0ZXh0cG9zaXRpb24iKTtwKHQsZSxjLGYsaCx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITAsbW9kdWxlSGFzVW5zZWxlY3RlZDohMCxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSksbCh0LGUsZixyLGMpO3ZhciBkPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3IsbT1hLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTttKHQsZSxkfHxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLG0odCxlLGR8fGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZil9ZWxzZSBlLnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsdSx0KX1pZigiZ3JvdXAiPT09ZS5iYXJtb2RlKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKSJiYXIiPT09KHI9dFthXSkudHlwZSYmKHIuX2lucHV0LGgoMCxyLGUsaSkpfSxoYW5kbGVHcm91cGluZ0RlZmF1bHRzOmgsaGFuZGxlVGV4dDpwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjU2MiwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjk0NiwiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6OTUzLCIuL2F0dHJpYnV0ZXMiOjY0OCwiLi9zdHlsZV9kZWZhdWx0cyI6NjYzfV0sNjUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSwiaCI9PT1yLm9yaWVudGF0aW9uPyh0LmxhYmVsPXQueSx0LnZhbHVlPXQueCk6KHQubGFiZWw9dC54LHQudmFsdWU9dC55KSx0fX0se31dLDY1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmNvZXJjZVN0cmluZz1mdW5jdGlvbih0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihlfHwhdC5ub0JsYW5rKXJldHVybiBlfWVsc2UgaWYoKCJudW1iZXIiPT10eXBlb2YgZXx8ITA9PT1lKSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXtlPStlO3ZhciBpPXQubWluLGE9dC5tYXg7aWYoISh2b2lkIDAhPT1pJiZlPGl8fHZvaWQgMCE9PWEmJmU+YSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpKGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfSxyLmdldExpbmVXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiAwPGUubWx3P2UubWx3OmEodC5tYXJrZXIubGluZS53aWR0aCk/MDp0Lm1hcmtlci5saW5lLndpZHRofX0seyIuLi8uLi9saWIiOjUwMywiZmFzdC1pc251bWVyaWMiOjE5MCx0aW55Y29sb3IyOjMxMn1dLDY1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vbGliIikuZmlsbFRleHQscz10KCIuL2hlbHBlcnMiKS5nZXRMaW5lV2lkdGgsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0LGM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiB1KHQsZSxyLGksYSl7dmFyIHMsdSxmLGgscCxkLG0sZz10LmNkLHY9Z1swXS50cmFjZSx5PWdbMF0udCx4PSJjbG9zZXN0Ij09PWksYj0id2F0ZXJmYWxsIj09PXYudHlwZSxfPXQubWF4SG92ZXJEaXN0YW5jZSx3PXQubWF4U3Bpa2VEaXN0YW5jZTsiaCI9PT12Lm9yaWVudGF0aW9uPyhzPXIsdT1lLGY9InkiLGg9IngiLHA9eixkPUkpOihzPWUsdT1yLGY9IngiLGg9InkiLGQ9eixwPUkpO3ZhciBUPXZbZisicGVyaW9kIl0saz14fHxUO2Z1bmN0aW9uIEEodCl7cmV0dXJuIFModCwtMSl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gUyh0LDEpfWZ1bmN0aW9uIFModCxlKXt2YXIgcj10Lnc7cmV0dXJuIHRbZl0rZSpyLzJ9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdFtmKyJFbmQiXS10W2YrIlN0YXJ0Il19dmFyIEw9eD9BOlQ/ZnVuY3Rpb24odCl7cmV0dXJuIHQucC1FKHQpLzJ9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbihBKHQpLHQucC15LmJhcmRlbHRhLzIpfSxDPXg/TTpUP2Z1bmN0aW9uKHQpe3JldHVybiB0LnArRSh0KS8yfTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTSh0KSx0LnAreS5iYXJkZWx0YS8yKX07ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGEuZmluaXRlUmFuZ2UmJihyPTApLG4uaW5ib3godC1zLGUtcyxyK01hdGgubWluKDEsTWF0aC5hYnMoZS10KS9tKS0xKX1mdW5jdGlvbiBJKHQpe3JldHVybiBQKEwodCksQyh0KSxfKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXRbaF07aWYoYil7dmFyIHI9TWF0aC5hYnModC5yYXdTKXx8MDt1PjA/ZSs9cjp1PDAmJihlLT1yKX1yZXR1cm4gZX1mdW5jdGlvbiB6KHQpe3ZhciBlPXUscj10LmIsaT1PKHQpO3JldHVybiBuLmluYm94KHItZSxpLWUsXysoaS1lKS8oaS1yKS0xKX12YXIgRD10W2YrImEiXSxSPXRbaCsiYSJdO209TWF0aC5hYnMoRC5yMmMoRC5yYW5nZVsxXSktRC5yMmMoRC5yYW5nZVswXSkpO3ZhciBGPW4uZ2V0RGlzdGFuY2VGdW5jdGlvbihpLHAsZCwoZnVuY3Rpb24odCl7cmV0dXJuKHAodCkrZCh0KSkvMn0pKTtpZihuLmdldENsb3Nlc3QoZyxGLHQpLCExIT09dC5pbmRleCYmZ1t0LmluZGV4XS5wIT09Yyl7a3x8KEw9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKEEodCksdC5wLXkuYmFyZ3JvdXB3aWR0aC8yKX0sQz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTSh0KSx0LnAreS5iYXJncm91cHdpZHRoLzIpfSk7dmFyIEI9Z1t0LmluZGV4XSxOPXYuYmFzZT9CLmIrQi5zOkIuczt0W2grIjAiXT10W2grIjEiXT1SLmMycChCW2hdLCEwKSx0W2grIkxhYmVsVmFsIl09Tjt2YXIgaj15LmV4dGVudHNbeS5leHRlbnRzLnJvdW5kKEIucCldO3RbZisiMCJdPUQuYzJwKHg/TChCKTpqWzBdLCEwKSx0W2YrIjEiXT1ELmMycCh4P0MoQik6alsxXSwhMCk7dmFyIFU9dm9pZCAwIT09Qi5vcmlnX3A7cmV0dXJuIHRbZisiTGFiZWxWYWwiXT1VP0Iub3JpZ19wOkIucCx0LmxhYmVsTGFiZWw9bChELHRbZisiTGFiZWxWYWwiXSx2W2YrImhvdmVyZm9ybWF0Il0pLHQudmFsdWVMYWJlbD1sKFIsdFtoKyJMYWJlbFZhbCJdLHZbaCsiaG92ZXJmb3JtYXQiXSksdC5iYXNlTGFiZWw9bChSLEIuYix2W2grImhvdmVyZm9ybWF0Il0pLHQuc3Bpa2VEaXN0YW5jZT0oZnVuY3Rpb24odCl7dmFyIGU9dSxyPXQuYixpPU8odCk7cmV0dXJuIG4uaW5ib3goci1lLGktZSx3KyhpLWUpLyhpLXIpLTEpfShCKStmdW5jdGlvbih0KXtyZXR1cm4gUChBKHQpLE0odCksdyl9KEIpKS8yLHRbZisiU3Bpa2UiXT1ELmMycChCLnAsITApLG8oQix2LHQpLHQuaG92ZXJ0ZW1wbGF0ZT12LmhvdmVydGVtcGxhdGUsdH19ZnVuY3Rpb24gZih0LGUpe3ZhciByPWUubWNjfHx0Lm1hcmtlci5jb2xvcixuPWUubWxjY3x8dC5tYXJrZXIubGluZS5jb2xvcixpPXModCxlKTtyZXR1cm4gYS5vcGFjaXR5KHIpP3I6YS5vcGFjaXR5KG4pJiZpP246dm9pZCAwfWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz11KHQsZSxyLG4sYSk7aWYobyl7dmFyIHM9by5jZCxsPXNbMF0udHJhY2UsYz1zW28uaW5kZXhdO3JldHVybiBvLmNvbG9yPWYobCxjKSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoYyxsLG8pLFtvXX19LGhvdmVyT25CYXJzOnUsZ2V0VHJhY2VDb2xvcjpmfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9oZWxwZXJzIjo2NTR9XSw2NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxhcnJheXNUb0NhbGNkYXRhOnQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJhciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImJhci1saWtlIiwiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxhbmltYXRhYmxlOiEwLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTY4LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6OTQ0LCIuL2FycmF5c190b19jYWxjZGF0YSI6NjQ3LCIuL2F0dHJpYnV0ZXMiOjY0OCwiLi9jYWxjIjo2NDksIi4vY3Jvc3NfdHJhY2VfY2FsYyI6NjUxLCIuL2RlZmF1bHRzIjo2NTIsIi4vZXZlbnRfZGF0YSI6NjUzLCIuL2hvdmVyIjo2NTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY1NywiLi9sYXlvdXRfZGVmYXVsdHMiOjY1OCwiLi9wbG90Ijo2NTksIi4vc2VsZWN0Ijo2NjAsIi4vc3R5bGUiOjY2Mn1dLDY1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2Jhcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YWNrIiwiZ3JvdXAiLCJvdmVybGF5IiwicmVsYXRpdmUiXSxkZmx0OiJncm91cCIsZWRpdFR5cGU6ImNhbGMifSxiYXJub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJmcmFjdGlvbiIsInBlcmNlbnQiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sNjU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxvLHIsbil9Zm9yKHZhciBsPSExLGM9ITEsdT0hMSxmPXt9LGg9cygiYmFybW9kZSIpLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtpZihuLnRyYWNlSXMoZCwiYmFyIikmJmQudmlzaWJsZSl7aWYobD0hMCwiZ3JvdXAiPT09aCl7dmFyIG09ZC54YXhpcytkLnlheGlzO2ZbbV0mJih1PSEwKSxmW21dPSEwfWlmKGQudmlzaWJsZSYmImhpc3RvZ3JhbSI9PT1kLnR5cGUpImNhdGVnb3J5IiE9PWkuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSxkWyJ2Ij09PWQub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSkudHlwZSYmKGM9ITApfX1sPygib3ZlcmxheSIhPT1oJiZzKCJiYXJub3JtIikscygiYmFyZ2FwIixjJiYhdT8wOi4yKSxzKCJiYXJncm91cGdhcCIpKTpkZWxldGUgZS5iYXJtb2RlfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjU3fV0sNjU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9yZWdpc3RyeSIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrVGV4dCxmPXQoIi4vdW5pZm9ybV90ZXh0IiksaD1mLnJlY29yZE1pblRleHRTaXplLHA9Zi5jbGVhck1pblRleHRTaXplLGQ9dCgiLi9zdHlsZSIpLG09dCgiLi9oZWxwZXJzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9hdHRyaWJ1dGVzIikseT12LnRleHQseD12LnRleHRwb3NpdGlvbixiPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxfPWcuVEVYVFBBRDtmdW5jdGlvbiB3KHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFQodCl7aWYodC5pZHMpcmV0dXJuIHd9ZnVuY3Rpb24gayh0LGUpe3JldHVybiB0PGU/MTotMX1mdW5jdGlvbiBBKHQsZSxyLG4pe3ZhciBpO3JldHVybiFlLnVuaWZvcm10ZXh0Lm1vZGUmJk0ocik/KG4mJihpPW4oKSksdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkpOnR9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdCYmdC5kdXJhdGlvbj4wfWZ1bmN0aW9uIFModCl7cmV0dXJuImF1dG8iPT09dD8wOnR9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPU1hdGguUEkvMTgwKmUsbj1NYXRoLmFicyhNYXRoLnNpbihyKSksaT1NYXRoLmFicyhNYXRoLmNvcyhyKSk7cmV0dXJue3g6dC53aWR0aCppK3QuaGVpZ2h0Km4seTp0LndpZHRoKm4rdC5oZWlnaHQqaX19ZnVuY3Rpb24gTCh0LGUscixuLGksYSl7dmFyIG89ISFhLmlzSG9yaXpvbnRhbCxzPSEhYS5jb25zdHJhaW5lZCxsPWEuYW5nbGV8fDAsYz1hLmFuY2hvcnx8ImVuZCIsdT0iZW5kIj09PWMsZj0ic3RhcnQiPT09YyxoPSgoYS5sZWZ0VG9SaWdodHx8MCkrMSkvMixwPTEtaCxkPWkud2lkdGgsbT1pLmhlaWdodCxnPU1hdGguYWJzKGUtdCksdj1NYXRoLmFicyhuLXIpLHk9Zz4yKl8mJnY+MipfP186MDtnLT0yKnksdi09Mip5O3ZhciB4PVMobCk7ImF1dG8iIT09bHx8ZDw9ZyYmbTw9dnx8IShkPmd8fG0+dil8fChkPnZ8fG0+ZykmJmQ8bT09Zzx2fHwoeCs9OTApO3ZhciBiPUUoaSx4KSx3PTE7cyYmKHc9TWF0aC5taW4oMSxnL2IueCx2L2IueSkpO3ZhciBUPWkubGVmdCpwK2kucmlnaHQqaCxBPShpLnRvcCtpLmJvdHRvbSkvMixNPSh0K18pKnArKGUtXykqaCxMPShyK24pLzIsQz0wLFA9MDtpZihmfHx1KXt2YXIgST0obz9iLng6Yi55KS8yLE89bz9rKHQsZSk6ayhyLG4pO28/Zj8oTT10K08qeSxDPS1PKkkpOihNPWUtTyp5LEM9TypJKTpmPyhMPXIrTyp5LFA9LU8qSSk6KEw9bi1PKnksUD1PKkkpfXJldHVybnt0ZXh0WDpULHRleHRZOkEsdGFyZ2V0WDpNLHRhcmdldFk6TCxhbmNob3JYOkMsYW5jaG9yWTpQLHNjYWxlOncscm90YXRlOnh9fWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixmLGcsdil7dmFyIHc9ZS54YXhpcyxDPWUueWF4aXMsUD10Ll9mdWxsTGF5b3V0O2d8fChnPXttb2RlOlAuYmFybW9kZSxub3JtOlAuYmFybW9kZSxnYXA6UC5iYXJnYXAsZ3JvdXBnYXA6UC5iYXJncm91cGdhcH0scCgiYmFyIixQKSk7dmFyIEk9YS5tYWtlVHJhY2VHcm91cHMoZixyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGM9bi5zZWxlY3QodGhpcyksZj1yWzBdLnRyYWNlLHA9IndhdGVyZmFsbCI9PT1mLnR5cGUsST0iZnVubmVsIj09PWYudHlwZSxPPSJiYXIiPT09Zi50eXBlfHxJLHo9MDtwJiZmLmNvbm5lY3Rvci52aXNpYmxlJiYiYmV0d2VlbiI9PT1mLmNvbm5lY3Rvci5tb2RlJiYoej1mLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBEPSJoIj09PWYub3JpZW50YXRpb24sUj1NKGcpLEY9YS5lbnN1cmVTaW5nbGUoYywiZyIsInBvaW50cyIpLEI9VChmKSxOPUYuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShhLmlkZW50aXR5LEIpO04uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLE4uZXhpdCgpLnJlbW92ZSgpLE4uZWFjaCgoZnVuY3Rpb24oYyxwKXt2YXIgVCxNLEk9bi5zZWxlY3QodGhpcyksRj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxuP1tpLGFdOlthLGldfShjLHcsQyxEKSxCPUZbMF1bMF0sTj1GWzBdWzFdLGo9RlsxXVswXSxVPUZbMV1bMV0sVj0wPT0oRD9OLUI6VS1qKTtpZihWJiZPJiZtLmdldExpbmVXaWR0aChmLGMpJiYoVj0hMSksVnx8KFY9IShpKEIpJiZpKE4pJiZpKGopJiZpKFUpKSksYy5pc0JsYW5rPVYsViYmKEQ/Tj1COlU9aikseiYmIVYmJihEPyhCLT1rKEIsTikqeixOKz1rKEIsTikqeik6KGotPWsoaixVKSp6LFUrPWsoaixVKSp6KSksIndhdGVyZmFsbCI9PT1mLnR5cGUpe2lmKCFWKXt2YXIgSD1mW2MuZGlyXS5tYXJrZXI7VD1ILmxpbmUud2lkdGgsTT1ILmNvbG9yfX1lbHNlIFQ9bS5nZXRMaW5lV2lkdGgoZixjKSxNPWMubWN8fGYubWFya2VyLmNvbG9yO2Z1bmN0aW9uIHEodCl7dmFyIGU9bi5yb3VuZChULzIlMSwyKTtyZXR1cm4gMD09PWcuZ2FwJiYwPT09Zy5ncm91cGdhcD9uLnJvdW5kKE1hdGgucm91bmQodCktZSwyKTp0fWlmKCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBHPXMub3BhY2l0eShNKTwxfHxUPi4wMT9xOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gciYmdD09PWU/dDpNYXRoLmFicyh0LWUpPj0yP3EodCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfTtCPUcoQixOLEQpLE49RyhOLEIsRCksaj1HKGosVSwhRCksVT1HKFUsaiwhRCl9dmFyIFk9QShhLmVuc3VyZVNpbmdsZShJLCJwYXRoIiksUCxnLHYpO2lmKFkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixpc05hTigoTi1CKSooVS1qKSl8fFYmJnQuX2NvbnRleHQuc3RhdGljUGxvdD8iTTAsMFoiOiJNIitCKyIsIitqKyJWIitVKyJIIitOKyJWIitqKyJaIikuY2FsbChsLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KSwhUC51bmlmb3JtdGV4dC5tb2RlJiZSKXt2YXIgVz1sLm1ha2VQb2ludFN0eWxlRm5zKGYpO2wuc2luZ2xlUG9pbnRTdHlsZShjLFksZixXLHQpfSFmdW5jdGlvbih0LGUscixuLGkscyxjLGYscCxnLHYpe3ZhciB3LFQ9ZS54YXhpcyxNPWUueWF4aXMsQz10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIFAoZSxyLG4pe3JldHVybiBhLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCBiYXJ0ZXh0LSIrdywidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChsLmZvbnQsbikuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KX12YXIgST1uWzBdLnRyYWNlLE89ImgiPT09SS5vcmllbnRhdGlvbix6PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8scz1lWzBdLnRyYWNlO289cy50ZXh0dGVtcGxhdGU/ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1lWzBdLnRyYWNlLHM9YS5jYXN0T3B0aW9uKG8sciwidGV4dHRlbXBsYXRlIik7aWYoIXMpcmV0dXJuIiI7dmFyIGwsYyxmLGgscD0id2F0ZXJmYWxsIj09PW8udHlwZSxkPSJmdW5uZWwiPT09by50eXBlOyJoIj09PW8ub3JpZW50YXRpb24/KGw9InkiLGM9aSxmPSJ4IixoPW4pOihsPSJ4IixjPW4sZj0ieSIsaD1pKTtmdW5jdGlvbiBtKHQpe3JldHVybiB1KGgsaC5jMmwodCksITApLnRleHR9dmFyIGc9ZVtyXSx2PXt9O3YubGFiZWw9Zy5wLHYubGFiZWxMYWJlbD12W2wrIkxhYmVsIl09KHk9Zy5wLHUoYyxjLmMybCh5KSwhMCkudGV4dCk7dmFyIHk7dmFyIHg9YS5jYXN0T3B0aW9uKG8sZy5pLCJ0ZXh0Iik7KDA9PT14fHx4KSYmKHYudGV4dD14KTt2LnZhbHVlPWcucyx2LnZhbHVlTGFiZWw9dltmKyJMYWJlbCJdPW0oZy5zKTt2YXIgXz17fTtiKF8sbyxnLmkpLHAmJih2LmRlbHRhPStnLnJhd1N8fGcucyx2LmRlbHRhTGFiZWw9bSh2LmRlbHRhKSx2LmZpbmFsPWcudix2LmZpbmFsTGFiZWw9bSh2LmZpbmFsKSx2LmluaXRpYWw9di5maW5hbC12LmRlbHRhLHYuaW5pdGlhbExhYmVsPW0odi5pbml0aWFsKSk7ZCYmKHYudmFsdWU9Zy5zLHYudmFsdWVMYWJlbD1tKHYudmFsdWUpLHYucGVyY2VudEluaXRpYWw9Zy5iZWdSLHYucGVyY2VudEluaXRpYWxMYWJlbD1hLmZvcm1hdFBlcmNlbnQoZy5iZWdSKSx2LnBlcmNlbnRQcmV2aW91cz1nLmRpZlIsdi5wZXJjZW50UHJldmlvdXNMYWJlbD1hLmZvcm1hdFBlcmNlbnQoZy5kaWZSKSx2LnBlcmNlbnRUb3RhbD1nLnN1bVIsdi5wZXJjZW5Ub3RhbExhYmVsPWEuZm9ybWF0UGVyY2VudChnLnN1bVIpKTt2YXIgdz1hLmNhc3RPcHRpb24obyxnLmksImN1c3RvbWRhdGEiKTt3JiYodi5jdXN0b21kYXRhPXcpO3JldHVybiBhLnRleHR0ZW1wbGF0ZVN0cmluZyhzLHYsdC5fZDNsb2NhbGUsXyx2LG8uX21ldGF8fHt9KX0odCxlLHIsbixpKTpzLnRleHRpbmZvP2Z1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0udHJhY2Usbz0iaCI9PT1pLm9yaWVudGF0aW9uLHM9IndhdGVyZmFsbCI9PT1pLnR5cGUsbD0iZnVubmVsIj09PWkudHlwZTtmdW5jdGlvbiBjKHQpe3JldHVybiB1KG8/cjpuLCt0LCEwKS50ZXh0fXZhciBmLGg9aS50ZXh0aW5mbyxwPXRbZV0sZD1oLnNwbGl0KCIrIiksbT1bXSxnPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09ZC5pbmRleE9mKHQpfTtnKCJsYWJlbCIpJiZtLnB1c2goKHY9dFtlXS5wLHUobz9uOnIsdiwhMCkudGV4dCkpO3ZhciB2O2coInRleHQiKSYmKDA9PT0oZj1hLmNhc3RPcHRpb24oaSxwLmksInRleHQiKSl8fGYpJiZtLnB1c2goZik7aWYocyl7dmFyIHk9K3AucmF3U3x8cC5zLHg9cC52LGI9eC15O2coImluaXRpYWwiKSYmbS5wdXNoKGMoYikpLGcoImRlbHRhIikmJm0ucHVzaChjKHkpKSxnKCJmaW5hbCIpJiZtLnB1c2goYyh4KSl9aWYobCl7ZygidmFsdWUiKSYmbS5wdXNoKGMocC5zKSk7dmFyIF89MDtnKCJwZXJjZW50IGluaXRpYWwiKSYmXysrLGcoInBlcmNlbnQgcHJldmlvdXMiKSYmXysrLGcoInBlcmNlbnQgdG90YWwiKSYmXysrO3ZhciB3PV8+MTtnKCJwZXJjZW50IGluaXRpYWwiKSYmKGY9YS5mb3JtYXRQZXJjZW50KHAuYmVnUiksdyYmKGYrPSIgb2YgaW5pdGlhbCIpLG0ucHVzaChmKSksZygicGVyY2VudCBwcmV2aW91cyIpJiYoZj1hLmZvcm1hdFBlcmNlbnQocC5kaWZSKSx3JiYoZis9IiBvZiBwcmV2aW91cyIpLG0ucHVzaChmKSksZygicGVyY2VudCB0b3RhbCIpJiYoZj1hLmZvcm1hdFBlcmNlbnQocC5zdW1SKSx3JiYoZis9IiBvZiB0b3RhbCIpLG0ucHVzaChmKSl9cmV0dXJuIG0uam9pbigiPGJyPiIpfShlLHIsbixpKTptLmdldFZhbHVlKHMudGV4dCxyKTtyZXR1cm4gbS5jb2VyY2VTdHJpbmcoeSxvKX0oQyxuLGksVCxNKTt3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bS5nZXRWYWx1ZSh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gbS5jb2VyY2VFbnVtZXJhdGVkKHgscil9KEksaSk7dmFyIEQ9InN0YWNrIj09PWcubW9kZXx8InJlbGF0aXZlIj09PWcubW9kZSxSPW5baV0sRj0hRHx8Ui5fb3V0bW9zdDtpZighenx8Im5vbmUiPT09d3x8KFIuaXNCbGFua3x8cz09PWN8fGY9PT1wKSYmKCJhdXRvIj09PXd8fCJpbnNpZGUiPT09dykpcmV0dXJuIHZvaWQgci5zZWxlY3QoInRleHQiKS5yZW1vdmUoKTt2YXIgQj1DLmZvbnQsTj1kLmdldEJhckNvbG9yKG5baV0sSSksaj1kLmdldEluc2lkZVRleHRGb250KEksaSxCLE4pLFU9ZC5nZXRPdXRzaWRlVGV4dEZvbnQoSSxpLEIpLFY9ci5kYXR1bSgpO08/ImxvZyI9PT1ULnR5cGUmJlYuczA8PTAmJihzPVQucmFuZ2VbMF08VC5yYW5nZVsxXT8wOlQuX2xlbmd0aCk6ImxvZyI9PT1NLnR5cGUmJlYuczA8PTAmJihmPU0ucmFuZ2VbMF08TS5yYW5nZVsxXT9NLl9sZW5ndGg6MCk7dmFyIEgscSxHLFksVyxYPU1hdGguYWJzKGMtcyktMipfLFo9TWF0aC5hYnMocC1mKS0yKl87Im91dHNpZGUiPT09dyYmKEZ8fFIuaGFzQnx8KHc9Imluc2lkZSIpKTtpZigiYXV0byI9PT13KWlmKEYpe3c9Imluc2lkZSIsVz1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGopLEg9UChyLHosVykscT1sLmJCb3goSC5ub2RlKCkpLEc9cS53aWR0aCxZPXEuaGVpZ2h0O3ZhciBKPUc8PVgmJlk8PVosSz1HPD1aJiZZPD1YLFE9Tz9YPj1HKihaL1kpOlo+PVkqKFgvRyk7Rz4wJiZZPjAmJihKfHxLfHxRKT93PSJpbnNpZGUiOih3PSJvdXRzaWRlIixILnJlbW92ZSgpLEg9bnVsbCl9ZWxzZSB3PSJpbnNpZGUiO2lmKCFIKXtXPWEuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsIm91dHNpZGUiPT09dz9VOmopO3ZhciAkPShIPVAocix6LFcpKS5hdHRyKCJ0cmFuc2Zvcm0iKTtpZihILmF0dHIoInRyYW5zZm9ybSIsIiIpLHE9bC5iQm94KEgubm9kZSgpKSxHPXEud2lkdGgsWT1xLmhlaWdodCxILmF0dHIoInRyYW5zZm9ybSIsJCksRzw9MHx8WTw9MClyZXR1cm4gdm9pZCBILnJlbW92ZSgpfXZhciB0dCxldCxydD1JLnRleHRhbmdsZTsib3V0c2lkZSI9PT13PyhldD0iYm90aCI9PT1JLmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scz0hIWEuaXNIb3Jpem9udGFsLGw9ISFhLmNvbnN0cmFpbmVkLGM9YS5hbmdsZXx8MCx1PWkud2lkdGgsZj1pLmhlaWdodCxoPU1hdGguYWJzKGUtdCkscD1NYXRoLmFicyhuLXIpO289cz9wPjIqXz9fOjA6aD4yKl8/XzowO3ZhciBkPTE7bCYmKGQ9cz9NYXRoLm1pbigxLHAvZik6TWF0aC5taW4oMSxoL3UpKTt2YXIgbT1TKGMpLGc9RShpLG0pLHY9KHM/Zy54OmcueSkvMix5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPSh0K2UpLzIsdz0ocituKS8yLFQ9MCxBPTAsTT1zP2soZSx0KTprKHIsbik7cz8oYj1lLU0qbyxUPU0qdik6KHc9bitNKm8sQT0tTSp2KTtyZXR1cm57dGV4dFg6eSx0ZXh0WTp4LHRhcmdldFg6Yix0YXJnZXRZOncsYW5jaG9yWDpULGFuY2hvclk6QSxzY2FsZTpkLHJvdGF0ZTptfX0ocyxjLGYscCxxLHtpc0hvcml6b250YWw6Tyxjb25zdHJhaW5lZDpldCxhbmdsZTpydH0pKTooZXQ9ImJvdGgiPT09SS5jb25zdHJhaW50ZXh0fHwiaW5zaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1MKHMsYyxmLHAscSx7aXNIb3Jpem9udGFsOk8sY29uc3RyYWluZWQ6ZXQsYW5nbGU6cnQsYW5jaG9yOkkuaW5zaWRldGV4dGFuY2hvcn0pKTt0dC5mb250U2l6ZT1XLnNpemUsaCgiaGlzdG9ncmFtIj09PUkudHlwZT8iYmFyIjpJLnR5cGUsdHQsQyksUi50cmFuc2Zvcm09dHQsQShILEMsZyx2KS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybSh0dCkpfSh0LGUsSSxyLHAsQixOLGosVSxnLHYpLGUubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGMsSS5zZWxlY3QoInRleHQiKSx3LEMsZi54Y2FsZW5kYXIsZi55Y2FsZW5kYXIpfSkpO3ZhciBqPSExPT09Zi5jbGlwb25heGlzO2wuc2V0Q2xpcFVybChjLGo/bnVsbDplLmxheWVyQ2xpcElkLHQpfSkpO2MuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxJLGUsZyl9LHRvTW92ZUluc2lkZUJhcjpMfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjQwMiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuL2F0dHJpYnV0ZXMiOjY0OCwiLi9jb25zdGFudHMiOjY1MCwiLi9oZWxwZXJzIjo2NTQsIi4vc3R5bGUiOjY2MiwiLi91bmlmb3JtX3RleHQiOjY2NCwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoxOTB9XSw2NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPWUuYzJwKG4/dC5zMDp0LnAwLCEwKSxvPWUuYzJwKG4/dC5zMTp0LnAxLCEwKSxzPXIuYzJwKG4/dC5wMDp0LnMwLCEwKSxsPXIuYzJwKG4/dC5wMTp0LnMxLCEwKTtyZXR1cm4gaT9bKGErbykvMiwocytsKS8yXTpuP1tvLChzK2wpLzJdOlsoYStvKS8yLGxdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9aVswXS50cmFjZSxsPSJmdW5uZWwiPT09cy50eXBlLGM9ImgiPT09cy5vcmllbnRhdGlvbix1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBmPWlbcl0saD0iY3QiaW4gZj9mLmN0Om4oZixhLG8sYyxsKTtlLmNvbnRhaW5zKGgsITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6YS5jMmQoZi54KSx5Om8uYzJkKGYueSl9KSxmLnNlbGVjdGVkPTEpOmYuc2VsZWN0ZWQ9MH1yZXR1cm4gdX19LHt9XSw2NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49dCgiLi4vLi4vbGliIikuZGlzdGluY3RWYWxzLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBhKHQsZSl7dGhpcy50cmFjZXM9dCx0aGlzLnNlcE5lZ1ZhbD1lLnNlcE5lZ1ZhbCx0aGlzLm92ZXJsYXBOb01lcmdlPWUub3ZlcmxhcE5vTWVyZ2U7Zm9yKHZhciByPTEvMCxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdO2MucCE9PWkmJmEucHVzaChjLnApfXNbMF0mJnNbMF0ud2lkdGgxJiYocj1NYXRoLm1pbihzWzBdLndpZHRoMSxyKSl9dGhpcy5wb3NpdGlvbnM9YTt2YXIgdT1uKGEpO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9dS52YWxzLDE9PT11LnZhbHMubGVuZ3RoJiZyIT09MS8wP3RoaXMubWluRGlmZj1yOnRoaXMubWluRGlmZj1NYXRoLm1pbih1Lm1pbkRpZmYscik7dmFyIGY9KGUucG9zQXhpc3x8e30pLnR5cGU7ImNhdGVnb3J5IiE9PWYmJiJtdWx0aWNhdGVnb3J5IiE9PWZ8fCh0aGlzLm1pbkRpZmY9MSksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWEucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sYS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcE5lZ1ZhbD8idiI6Il4iKSsodGhpcy5vdmVybGFwTm9NZXJnZT90Ok1hdGgucm91bmQodC90aGlzLmJpbldpZHRoKSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDN9XSw2NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz10KCIuL2F0dHJpYnV0ZXMiKSx1PWMudGV4dGZvbnQsZj1jLmluc2lkZXRleHRmb250LGg9Yy5vdXRzaWRldGV4dGZvbnQscD10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBkKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlLHIpLG0odCxlLHIpfWZ1bmN0aW9uIG0odCxlLHIpe3Quc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcykscz1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShyLGcoaSx0LGUscikpO2EuZm9udChpLHMpfSkpfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9bi5fZnVsbExheW91dC5mb250LGE9ci50ZXh0Zm9udDtpZih0LmNsYXNzZWQoImJhcnRleHQtaW5zaWRlIikpe3ZhciBvPV8oZSxyKTthPXkocixlLmksaSxvKX1lbHNlIHQuY2xhc3NlZCgiYmFydGV4dC1vdXRzaWRlIikmJihhPXgocixlLmksaSkpO3JldHVybiBhfWZ1bmN0aW9uIHYodCxlLHIpe3JldHVybiBiKHUsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9dih0LGUscik7cmV0dXJuKHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250fHx2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcnx8QXJyYXkuaXNBcnJheSh0LnRleHRmb250LmNvbG9yKSYmdm9pZCAwPT09dC50ZXh0Zm9udC5jb2xvcltlXSkmJihhPXtjb2xvcjppLmNvbnRyYXN0KG4pLGZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZX0pLGIoZix0Lmluc2lkZXRleHRmb250LGUsYSl9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dih0LGUscik7cmV0dXJuIGIoaCx0Lm91dHNpZGV0ZXh0Zm9udCxlLG4pfWZ1bmN0aW9uIGIodCxlLHIsbil7ZT1lfHx7fTt2YXIgaT1wLmdldFZhbHVlKGUuZmFtaWx5LHIpLGE9cC5nZXRWYWx1ZShlLnNpemUsciksbz1wLmdldFZhbHVlKGUuY29sb3Iscik7cmV0dXJue2ZhbWlseTpwLmNvZXJjZVN0cmluZyh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOnAuY29lcmNlTnVtYmVyKHQuc2l6ZSxhLG4uc2l6ZSksY29sb3I6cC5jb2VyY2VDb2xvcih0LmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4id2F0ZXJmYWxsIj09PWUudHlwZT9lW3QuZGlyXS5tYXJrZXIuY29sb3I6dC5tY2N8fHQubWN8fGUubWFya2VyLmNvbG9yfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmJhcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LGUsImJhciIpO3ZhciByPWUuc2l6ZSgpLGk9dC5fZnVsbExheW91dDtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKS5lYWNoKChmdW5jdGlvbih0KXsoInN0YWNrIj09PWkuYmFybW9kZSYmcj4xfHwwPT09aS5iYXJnYXAmJjA9PT1pLmJhcmdyb3VwZ2FwJiYhdFswXS50cmFjZS5tYXJrZXIubGluZS53aWR0aCkmJm4uc2VsZWN0KHRoaXMpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtkKG4uc2VsZWN0KHRoaXMpLGVbMF0udHJhY2UsdCl9KSkscy5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlVGV4dFBvaW50czptLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWVbMF0udHJhY2U7aS5zZWxlY3RlZHBvaW50cz9mdW5jdGlvbih0LGUscil7YS5zZWxlY3RlZFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlKSxmdW5jdGlvbih0LGUscil7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgaSxzPW4uc2VsZWN0KHRoaXMpO2lmKHQuc2VsZWN0ZWQpe2k9by5lbnN1cmVVbmlmb3JtRm9udFNpemUocixnKHMsdCxlLHIpKTt2YXIgbD1lLnNlbGVjdGVkLnRleHRmb250JiZlLnNlbGVjdGVkLnRleHRmb250LmNvbG9yO2wmJihpLmNvbG9yPWwpLGEuZm9udChzLGkpfWVsc2UgYS5zZWxlY3RlZFRleHRTdHlsZShzLGUpfSkpfSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9KHIsaSx0KTooZChyLGksdCkscy5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikocikpfSxnZXRJbnNpZGVUZXh0Rm9udDp5LGdldE91dHNpZGVUZXh0Rm9udDp4LGdldEJhckNvbG9yOl8scmVzaXplVGV4dDpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9hdHRyaWJ1dGVzIjo2NDgsIi4vaGVscGVycyI6NjU0LCIuL3VuaWZvcm1fdGV4dCI6NjY0LCJAcGxvdGx5L2QzIjo1OH1dLDY2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2xpYiIpLmNvZXJjZVBhdHRlcm47ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGM9cigibWFya2VyLmNvbG9yIixzKSx1PWkodCwibWFya2VyIik7dSYmYSh0LGUsbCxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUsbCxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpLHIoIm1hcmtlci5vcGFjaXR5IiksbyhyLCJtYXJrZXIucGF0dGVybiIsYyx1KSxyKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6Mzc2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6Mzc3LCIuLi8uLi9saWIiOjUwM31dLDY2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBhKHQpe3JldHVybiJfIit0KyJUZXh0X21pbnNpemUifWUuZXhwb3J0cz17cmVjb3JkTWluVGV4dFNpemU6ZnVuY3Rpb24odCxlLHIpe2lmKHIudW5pZm9ybXRleHQubW9kZSl7dmFyIG49YSh0KSxpPXIudW5pZm9ybXRleHQubWluc2l6ZSxvPWUuc2NhbGUqZS5mb250U2l6ZTtlLmhpZGU9bzxpLHJbbl09cltuXXx8MS8wLGUuaGlkZXx8KHJbbl09TWF0aC5taW4ocltuXSxNYXRoLm1heChvLGkpKSl9fSxjbGVhck1pblRleHRTaXplOmZ1bmN0aW9uKHQsZSl7ZVthKHQpXT12b2lkIDB9LHJlc2l6ZVRleHQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hWyJfIityKyJUZXh0X21pbnNpemUiXTtpZihvKXt2YXIgcyxsPSJoaWRlIj09PWEudW5pZm9ybXRleHQubW9kZTtzd2l0Y2gocil7Y2FzZSJmdW5uZWxhcmVhIjpjYXNlInBpZSI6Y2FzZSJzdW5idXJzdCI6cz0iZy5zbGljZSI7YnJlYWs7Y2FzZSJ0cmVlbWFwIjpjYXNlImljaWNsZSI6cz0iZy5zbGljZSwgZy5wYXRoYmFyIjticmVhaztkZWZhdWx0OnM9ImcucG9pbnRzID4gZy5wb2ludCJ9ZS5zZWxlY3RBbGwocykuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFuc2Zvcm07ZSYmKGUuc2NhbGU9bCYmZS5oaWRlPzA6by9lLmZvbnRTaXplLG4uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsaS5nZXRUZXh0VHJhbnNmb3JtKGUpKSl9KSl9fX19LHsiLi4vLi4vbGliIjo1MDMsIkBwbG90bHkvZDMiOjU4fV0sNjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksbz10KCIuLi9iYXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17cjphLnIsdGhldGE6YS50aGV0YSxyMDphLnIwLGRyOmEuZHIsdGhldGEwOmEudGhldGEwLGR0aGV0YTphLmR0aGV0YSx0aGV0YXVuaXQ6YS50aGV0YXVuaXQsYmFzZTppKHt9LG8uYmFzZSx7fSksb2Zmc2V0Omkoe30sby5vZmZzZXQse30pLHdpZHRoOmkoe30sby53aWR0aCx7fSksdGV4dDppKHt9LG8udGV4dCx7fSksaG92ZXJ0ZXh0Omkoe30sby5ob3ZlcnRleHQse30pLG1hcmtlcjpvLm1hcmtlcixob3ZlcmluZm86YS5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDgsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxZTN9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnMscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi8uLi9yZWdpc3RyeSIpLnRyYWNlSXMsYz10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LG89ZS5zdWJwbG90LGw9cltvXS5yYWRpYWxheGlzLGM9cltvXS5hbmd1bGFyYXhpcyx1PWwubWFrZUNhbGNkYXRhKGUsInIiKSxmPWMubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksaD1lLl9sZW5ndGgscD1uZXcgQXJyYXkoaCksZD11LG09ZixnPTA7ZzxoO2crKylwW2ddPXtwOm1bZ10sczpkW2ddfTtmdW5jdGlvbiB2KHQpe3ZhciByPWVbdF07dm9pZCAwIT09ciYmKGVbIl8iK3RdPUFycmF5LmlzQXJyYXkocik/Yy5tYWtlQ2FsY2RhdGEoZSx0KTpjLmQyYyhyLGUudGhldGF1bml0KSl9cmV0dXJuImxpbmVhciI9PT1jLnR5cGUmJih2KCJ3aWR0aCIpLHYoIm9mZnNldCIpKSxuKGUsIm1hcmtlciIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxuKGUsIm1hcmtlci5saW5lIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSxhKHAsZSkscyhwLGUpLHB9LGNyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5jYWxjZGF0YSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXSx1PXNbMF0udHJhY2U7ITA9PT11LnZpc2libGUmJmwodSwiYmFyIikmJnUuc3VicGxvdD09PXImJmkucHVzaChzKX12YXIgZj1jKHt9LGUucmFkaWFsYXhpcyx7X2lkOiJ4In0pLGg9ZS5hbmd1bGFyYXhpcztvKHQsaCxmLGkse21vZGU6ZS5iYXJtb2RlLG5vcm06ZS5iYXJub3JtLGdhcDplLmJhcmdhcCxncm91cGdhcDplLmJhcmdyb3VwZ2FwfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6Mzc0LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6Mzc3LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSI6NjQ3LCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6NjUxLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5Mjh9XSw2Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHMiKS5oYW5kbGVSVGhldGFEZWZhdWx0cyxhPXQoIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pKHQsZSxzLGwpPyhsKCJ0aGV0YXVuaXQiKSxsKCJiYXNlIiksbCgib2Zmc2V0IiksbCgid2lkdGgiKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGEodCxlLGwscixzKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxsKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjUwMywiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIjo2NjMsIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyI6MTAwMiwiLi9hdHRyaWJ1dGVzIjo2NjV9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9iYXIvaG92ZXIiKS5nZXRUcmFjZUNvbG9yLG89aS5maWxsVGV4dCxzPXQoIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciIpLm1ha2VIb3ZlclBvaW50VGV4dCxsPXQoIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiKS5pc1B0SW5zaWRlUG9seWdvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPXQuY2QsdT1jWzBdLnRyYWNlLGY9dC5zdWJwbG90LGg9Zi5yYWRpYWxBeGlzLHA9Zi5hbmd1bGFyQXhpcyxkPWYudmFuZ2xlcyxtPWQ/bDppLmlzUHRJbnNpZGVTZWN0b3IsZz10Lm1heEhvdmVyRGlzdGFuY2Usdj1wLl9wZXJpb2R8fDIqTWF0aC5QSSx5PU1hdGguYWJzKGguZzJwKE1hdGguc3FydChlKmUrcipyKSkpLHg9TWF0aC5hdGFuMihyLGUpO2gucmFuZ2VbMF0+aC5yYW5nZVsxXSYmKHgrPU1hdGguUEkpO2lmKG4uZ2V0Q2xvc2VzdChjLChmdW5jdGlvbih0KXtyZXR1cm4gbSh5LHgsW3QucnAwLHQucnAxXSxbdC50aGV0YWcwLHQudGhldGFnMV0sZCk/ZytNYXRoLm1pbigxLE1hdGguYWJzKHQudGhldGFnMS10LnRoZXRhZzApL3YpLTErKHQucnAxLXkpLyh0LnJwMS10LnJwMCktMToxLzB9KSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBiPWNbdC5pbmRleF07dC54MD10LngxPWIuY3RbMF0sdC55MD10LnkxPWIuY3RbMV07dmFyIF89aS5leHRlbmRGbGF0KHt9LGIse3I6Yi5zLHRoZXRhOmIucH0pO3JldHVybiBvKGIsdSx0KSxzKF8sdSxmLHQpLHQuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsdC5jb2xvcj1hKHUsYiksdC54TGFiZWxWYWw9dC55TGFiZWxWYWw9dm9pZCAwLGIuczwwJiYodC5pZGVhbEFsaWduPSJsZWZ0IiksW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NDA2LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyI6NjIxLCIuLi9iYXIvaG92ZXIiOjY1NSwiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIjoxMDA0fV0sNjY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJhcnBvbGFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJwb2xhciIsImJhciIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIiksc3R5bGU6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo2MjIsIi4uL2Jhci9zZWxlY3QiOjY2MCwiLi4vYmFyL3N0eWxlIjo2NjIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIjoxMDAzLCIuL2F0dHJpYnV0ZXMiOjY2NSwiLi9jYWxjIjo2NjYsIi4vZGVmYXVsdHMiOjY2NywiLi9ob3ZlciI6NjY4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NzAsIi4vbGF5b3V0X2RlZmF1bHRzIjo2NzEsIi4vcGxvdCI6NjcyfV0sNjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw2NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMocixvKXtyZXR1cm4gbi5jb2VyY2UodFthXXx8e30sZVthXSxpLHIsbyl9Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07ImJhcnBvbGFyIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoImJhcm1vZGUiKSxzKCJiYXJnYXAiKSxvW2FdPTEpKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NzB9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcyx1PWUucmFkaWFsQXhpcyxmPWUuYW5ndWxhckF4aXMsaD1mdW5jdGlvbih0KXt2YXIgZT10LmN4eCxyPXQuY3l5O2lmKHQudmFuZ2xlcylyZXR1cm4gZnVuY3Rpb24obixpLG8sbCl7dmFyIGMsdTthLmFuZ2xlRGVsdGEobyxsKT4wPyhjPW8sdT1sKTooYz1sLHU9byk7dmFyIGY9W3MuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0sKGMrdSkvMixzLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxmLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuYmFybGF5ZXIiKTthLm1ha2VUcmFjZUdyb3VwcyhwLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9YS5lbnN1cmVTaW5nbGUociwiZyIsInBvaW50cyIpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoYS5pZGVudGl0eSk7cy5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKS5jbGFzc2VkKCJwb2ludCIsITApLHMuZXhpdCgpLnJlbW92ZSgpLHMuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxvPXQucnAwPXUuYzJwKHQuczApLHM9dC5ycDE9dS5jMnAodC5zMSkscD10LnRoZXRhZzA9Zi5jMmcodC5wMCksZD10LnRoZXRhZzE9Zi5jMmcodC5wMSk7aWYoaShvKSYmaShzKSYmaShwKSYmaShkKSYmbyE9PXMmJnAhPT1kKXt2YXIgbT11LmMyZyh0LnMxKSxnPShwK2QpLzI7dC5jdD1bbC5jMnAobSpNYXRoLmNvcyhnKSksYy5jMnAobSpNYXRoLnNpbihnKSldLGU9aChvLHMscCxkKX1lbHNlIGU9Ik0wLDBaIjthLmVuc3VyZVNpbmdsZShyLCJwYXRoIikuYXR0cigiZCIsZSl9KSksby5zZXRDbGlwVXJsKHIsZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbCx0KX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIjo2MjEsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1uLm1hcmtlcix1PWMubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSxkeTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6bygieCIpLHlob3ZlcmZvcm1hdDpvKCJ5IiksbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHExOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1lZGlhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxxMzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxsb3dlcmZlbmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVwcGVyZmVuY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hlZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsYyJ9LG5vdGNoc3Bhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxlZGl0VHlwZToiY2FsYyJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHBvaW50cG9zOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MixlZGl0VHlwZToiY2FsYyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZWRpdFR5cGU6ImNhbGMifSxtZWFuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNkOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scXVhcnRpbGVtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImV4Y2x1c2l2ZSIsImluY2x1c2l2ZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6ImNhbGMifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwgMCwgMCwgMCkiLGVkaXRUeXBlOiJzdHlsZSJ9LHN5bWJvbDpsKHt9LGMuc3ltYm9sLHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90In0pLG9wYWNpdHk6bCh7fSxjLm9wYWNpdHkse2FycmF5T2s6ITEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9KSxzaXplOmwoe30sYy5zaXplLHthcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0pLGNvbG9yOmwoe30sYy5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6bCh7fSx1LmNvbG9yLHthcnJheU9rOiExLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToic3R5bGUifSksd2lkdGg6bCh7fSx1LndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Z3JvdXA6aS5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDppLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOnttYXJrZXI6bi5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOm4udW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6cyh7fSksaG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiYm94ZXMiLCJwb2ludHMiXSxkZmx0OiJib3hlcytwb2ludHMiLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2NSwiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2fV0sNjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGw9by5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMseSx4LGIsXyx3LFQ9dC5fZnVsbExheW91dCxrPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxBPWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxNPVtdLFM9InZpb2xpbiI9PT1lLnR5cGU/Il9udW1WaW9saW5zIjoiX251bUJveGVzIjsiaCI9PT1lLm9yaWVudGF0aW9uPyh5PWsseD0ieCIsYj1BLF89InkiLHc9ISFlLnlwZXJpb2RhbGlnbm1lbnQpOih5PUEseD0ieSIsYj1rLF89IngiLHc9ISFlLnhwZXJpb2RhbGlnbm1lbnQpO3ZhciBFLEwsQyxQLEksTyx6PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBzLGw9ZSsiMCJpbiB0LGM9ImQiK2UgaW4gdDtpZihlIGluIHR8fGwmJmMpe3ZhciB1PXIubWFrZUNhbGNkYXRhKHQsZSk7cmV0dXJuW2EodCxyLGUsdSkudmFscyx1XX1zPWw/dFtlKyIwIl06Im5hbWUiaW4gdCYmKCJjYXRlZ29yeSI9PT1yLnR5cGV8fG4odC5uYW1lKSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKXx8by5pc0RhdGVUaW1lKHQubmFtZSkmJiJkYXRlIj09PXIudHlwZSk/dC5uYW1lOmk7Zm9yKHZhciBmPSJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT9yLnIyY19qdXN0X2luZGljZXMocyk6ci5kMmMocywwLHRbZSsiY2FsZW5kYXIiXSksaD10Ll9sZW5ndGgscD1uZXcgQXJyYXkoaCksZD0wO2Q8aDtkKyspcFtkXT1mO3JldHVybltwXX0oZSxfLGIsVFtTXSksRD16WzBdLFI9elsxXSxGPW8uZGlzdGluY3RWYWxzKEQsYiksQj1GLnZhbHMsTj1GLm1pbkRpZmYvMixqPSJhbGwiPT09KGUuYm94cG9pbnRzfHxlLnBvaW50cyk/by5pZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdC52PEUubGZ8fHQudj5FLnVmfTtpZihlLl9oYXNQcmVDb21wU3RhdHMpe3ZhciBVPWVbeF0sVj1mdW5jdGlvbih0KXtyZXR1cm4geS5kMmMoKGVbdF18fFtdKVtyXSl9LEg9MS8wLHE9LTEvMDtmb3Iocj0wO3I8ZS5fbGVuZ3RoO3IrKyl7dmFyIEc9RFtyXTtpZihuKEcpKXtpZigoRT17fSkucG9zPUVbX109Ryx3JiZSJiYoRS5vcmlnX3A9UltyXSksRS5xMT1WKCJxMSIpLEUubWVkPVYoIm1lZGlhbiIpLEUucTM9VigicTMiKSxMPVtdLFUmJm8uaXNBcnJheU9yVHlwZWRBcnJheShVW3JdKSlmb3IoYz0wO2M8VVtyXS5sZW5ndGg7YysrKShPPXkuZDJjKFVbcl1bY10pKSE9PXMmJih1KEk9e3Y6TyxpOltyLGNdfSxlLFtyLGNdKSxMLnB1c2goSSkpO2lmKEUucHRzPUwuc29ydChmKSxQPShDPUVbeF09TC5tYXAoaCkpLmxlbmd0aCxFLm1lZCE9PXMmJkUucTEhPT1zJiZFLnEzIT09cyYmRS5tZWQ+PUUucTEmJkUucTM+PUUubWVkKXt2YXIgWT1WKCJsb3dlcmZlbmNlIik7RS5sZj1ZIT09cyYmWTw9RS5xMT9ZOnAoRSxDLFApO3ZhciBXPVYoInVwcGVyZmVuY2UiKTtFLnVmPVchPT1zJiZXPj1FLnEzP1c6ZChFLEMsUCk7dmFyIFg9VigibWVhbiIpO0UubWVhbj1YIT09cz9YOlA/by5tZWFuKEMsUCk6KEUucTErRS5xMykvMjt2YXIgWj1WKCJzZCIpO0Uuc2Q9WCE9PXMmJlo+PTA/WjpQP28uc3RkZXYoQyxQLEUubWVhbik6RS5xMy1FLnExLEUubG89bShFKSxFLnVvPWcoRSk7dmFyIEo9Vigibm90Y2hzcGFuIik7Sj1KIT09cyYmSj4wP0o6dihFLFApLEUubG49RS5tZWQtSixFLnVuPUUubWVkK0o7dmFyIEs9RS5sZixRPUUudWY7ZS5ib3hwb2ludHMmJkMubGVuZ3RoJiYoSz1NYXRoLm1pbihLLENbMF0pLFE9TWF0aC5tYXgoUSxDW1AtMV0pKSxlLm5vdGNoZWQmJihLPU1hdGgubWluKEssRS5sbiksUT1NYXRoLm1heChRLEUudW4pKSxFLm1pbj1LLEUubWF4PVF9ZWxzZXt2YXIgJDtvLndhcm4oWyJJbnZhbGlkIGlucHV0IC0gbWFrZSBzdXJlIHRoYXQgcTEgPD0gbWVkaWFuIDw9IHEzIiwicTEgPSAiK0UucTEsIm1lZGlhbiA9ICIrRS5tZWQsInEzID0gIitFLnEzXS5qb2luKCJcbiIpKSwkPUUubWVkIT09cz9FLm1lZDpFLnExIT09cz9FLnEzIT09cz8oRS5xMStFLnEzKS8yOkUucTE6RS5xMyE9PXM/RS5xMzowLEUubWVkPSQsRS5xMT1FLnEzPSQsRS5sZj1FLnVmPSQsRS5tZWFuPUUuc2Q9JCxFLmxuPUUudW49JCxFLm1pbj1FLm1heD0kfUg9TWF0aC5taW4oSCxFLm1pbikscT1NYXRoLm1heChxLEUubWF4KSxFLnB0czI9TC5maWx0ZXIoaiksTS5wdXNoKEUpfX1lLl9leHRyZW1lc1t5Ll9pZF09aS5maW5kRXh0cmVtZXMoeSxbSCxxXSx7cGFkZGVkOiEwfSl9ZWxzZXt2YXIgdHQ9eS5tYWtlQ2FsY2RhdGEoZSx4KSxldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKzEpLGk9MDtpPHI7aSsrKW5baV09dFtpXS1lO3JldHVybiBuW3JdPXRbci0xXStlLG59KEIsTikscnQ9Qi5sZW5ndGgsbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfShydCk7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspaWYoTz10dFtyXSxuKE8pKXt2YXIgaXQ9by5maW5kQmluKERbcl0sZXQpO2l0Pj0wJiZpdDxydCYmKHUoST17djpPLGk6cn0sZSxyKSxudFtpdF0ucHVzaChJKSl9dmFyIGF0PTEvMCxvdD0tMS8wLHN0PWUucXVhcnRpbGVtZXRob2QsbHQ9ImV4Y2x1c2l2ZSI9PT1zdCxjdD0iaW5jbHVzaXZlIj09PXN0O2ZvcihyPTA7cjxydDtyKyspaWYobnRbcl0ubGVuZ3RoPjApe3ZhciB1dCxmdDtpZigoRT17fSkucG9zPUVbX109QltyXSxMPUUucHRzPW50W3JdLnNvcnQoZiksUD0oQz1FW3hdPUwubWFwKGgpKS5sZW5ndGgsRS5taW49Q1swXSxFLm1heD1DW1AtMV0sRS5tZWFuPW8ubWVhbihDLFApLEUuc2Q9by5zdGRldihDLFAsRS5tZWFuKSxFLm1lZD1vLmludGVycChDLC41KSxQJTImJihsdHx8Y3QpKWx0Pyh1dD1DLnNsaWNlKDAsUC8yKSxmdD1DLnNsaWNlKFAvMisxKSk6Y3QmJih1dD1DLnNsaWNlKDAsUC8yKzEpLGZ0PUMuc2xpY2UoUC8yKSksRS5xMT1vLmludGVycCh1dCwuNSksRS5xMz1vLmludGVycChmdCwuNSk7ZWxzZSBFLnExPW8uaW50ZXJwKEMsLjI1KSxFLnEzPW8uaW50ZXJwKEMsLjc1KTtFLmxmPXAoRSxDLFApLEUudWY9ZChFLEMsUCksRS5sbz1tKEUpLEUudW89ZyhFKTt2YXIgaHQ9dihFLFApO0UubG49RS5tZWQtaHQsRS51bj1FLm1lZCtodCxhdD1NYXRoLm1pbihhdCxFLmxuKSxvdD1NYXRoLm1heChvdCxFLnVuKSxFLnB0czI9TC5maWx0ZXIoaiksTS5wdXNoKEUpfWUuX2V4dHJlbWVzW3kuX2lkXT1pLmZpbmRFeHRyZW1lcyh5LGUubm90Y2hlZD90dC5jb25jYXQoW2F0LG90XSk6dHQse3BhZGRlZDohMH0pfXJldHVybiBmdW5jdGlvbih0LGUpe2lmKG8uaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPXRbcl0ucHRzfHxbXSxpPXt9LGE9MDthPG4ubGVuZ3RoO2ErKylpW25bYV0uaV09YTtvLnRhZ1NlbGVjdGVkKG4sZSxpKX19KE0sZSksTS5sZW5ndGg+MD8oTVswXS50PXtudW06VFtTXSxkUG9zOk4scG9zTGV0dGVyOl8sdmFsTGV0dGVyOngsbGFiZWxzOnttZWQ6bCh0LCJtZWRpYW46IiksbWluOmwodCwibWluOiIpLHExOmwodCwicTE6IikscTM6bCh0LCJxMzoiKSxtYXg6bCh0LCJtYXg6IiksbWVhbjoic2QiPT09ZS5ib3htZWFuP2wodCwibWVhbiBceGIxIFx1MDNjMzoiKTpsKHQsIm1lYW46IiksbGY6bCh0LCJsb3dlciBmZW5jZToiKSx1ZjpsKHQsInVwcGVyIGZlbmNlOiIpfX0sVFtTXSsrLE0pOlt7dDp7ZW1wdHk6ITB9fV19O3ZhciBjPXt0ZXh0OiJ0eCIsaG92ZXJ0ZXh0OiJodHgifTtmdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIG4gaW4gYylvLmlzQXJyYXlPclR5cGVkQXJyYXkoZVtuXSkmJihBcnJheS5pc0FycmF5KHIpP28uaXNBcnJheU9yVHlwZWRBcnJheShlW25dW3JbMF1dKSYmKHRbY1tuXV09ZVtuXVtyWzBdXVtyWzFdXSk6dFtjW25dXT1lW25dW3JdKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC52fWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiAwPT09cj90LnExOk1hdGgubWluKHQucTEsZVtNYXRoLm1pbihvLmZpbmRCaW4oMi41KnQucTEtMS41KnQucTMsZSwhMCkrMSxyLTEpXSl9ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuIDA9PT1yP3QucTM6TWF0aC5tYXgodC5xMyxlW01hdGgubWF4KG8uZmluZEJpbigyLjUqdC5xMy0xLjUqdC5xMSxlKSwwKV0pfWZ1bmN0aW9uIG0odCl7cmV0dXJuIDQqdC5xMS0zKnQucTN9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gNCp0LnEzLTMqdC5xMX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIDA9PT1lPzA6MS41NyoodC5xMy10LnExKS9NYXRoLnNxcnQoZSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU1MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDY3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKS5nZXRBeGlzR3JvdXAsbz1bInYiLCJoIl07ZnVuY3Rpb24gcyh0LGUscixvKXt2YXIgcyxsLGMsdT1lLmNhbGNkYXRhLGY9ZS5fZnVsbExheW91dCxoPW8uX2lkLHA9aC5jaGFyQXQoMCksZD1bXSxtPTA7Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKylmb3IoYz11W3Jbc11dLGw9MDtsPGMubGVuZ3RoO2wrKylkLnB1c2goby5jMmwoY1tsXS5wb3MsITApKSxtKz0oY1tsXS5wdHMyfHxbXSkubGVuZ3RoO2lmKGQubGVuZ3RoKXt2YXIgZz1pLmRpc3RpbmN0VmFscyhkKTsiY2F0ZWdvcnkiIT09by50eXBlJiYibXVsdGljYXRlZ29yeSIhPT1vLnR5cGV8fChnLm1pbkRpZmY9MSk7dmFyIHY9Zy5taW5EaWZmLzI7bi5taW5EdGljayhvLGcubWluRGlmZixnLnZhbHNbMF0sITApO3ZhciB5PWZbInZpb2xpbiI9PT10PyJfbnVtVmlvbGlucyI6Il9udW1Cb3hlcyJdLHg9Imdyb3VwIj09PWZbdCsibW9kZSJdJiZ5PjEsYj0xLWZbdCsiZ2FwIl0sXz0xLWZbdCsiZ3JvdXBnYXAiXTtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgdyxULGssQSxNLFMsRT0oYz11W3Jbc11dKVswXS50cmFjZSxMPWNbMF0udCxDPUUud2lkdGgsUD1FLnNpZGU7aWYoQyl3PVQ9QT1DLzIsaz0wO2Vsc2UgaWYodz12LHgpe3ZhciBJPWEoZixvLl9pZCkrRS5vcmllbnRhdGlvbixPPShmLl9hbGlnbm1lbnRPcHRzW0ldfHx7fSlbRS5hbGlnbm1lbnRncm91cF18fHt9LHo9T2JqZWN0LmtleXMoTy5vZmZzZXRHcm91cHN8fHt9KS5sZW5ndGgsRD16fHx5O1Q9dypiKl8vRCxrPTIqdyooKCh6P0UuX29mZnNldEluZGV4OkwubnVtKSsuNSkvRC0uNSkqYixBPXcqYi9EfWVsc2UgVD13KmIqXyxrPTAsQT13O0wuZFBvcz13LEwuYlBvcz1rLEwuYmRQb3M9VCxMLndIb3Zlcj1BO3ZhciBSLEYsQixOLGosVSxWPWsrVCxIPUJvb2xlYW4oQyk7aWYoInBvc2l0aXZlIj09PVA/KE09dyooQz8xOi41KSxSPVYsUz1SPWspOiJuZWdhdGl2ZSI9PT1QPyhNPVI9ayxTPXcqKEM/MTouNSksRj1WKTooTT1TPXcsUj1GPVYpLChFLmJveHBvaW50c3x8RS5wb2ludHMpJiZtPjApe3ZhciBxPUUucG9pbnRwb3MsRz1FLmppdHRlcixZPUUubWFya2VyLnNpemUvMixXPTA7cStHPj0wJiYoKFc9VioocStHKSk+TT8oSD0hMCxqPVksQj1XKTpXPlImJihqPVksQj1NKSksVzw9TSYmKEI9TSk7dmFyIFg9MDtxLUc8PTAmJigoWD0tVioocS1HKSk+Uz8oSD0hMCxVPVksTj1YKTpYPkYmJihVPVksTj1TKSksWDw9UyYmKE49Uyl9ZWxzZSBCPU0sTj1TO3ZhciBaPW5ldyBBcnJheShjLmxlbmd0aCk7Zm9yKGw9MDtsPGMubGVuZ3RoO2wrKylaW2xdPWNbbF0ucG9zO0UuX2V4dHJlbWVzW2hdPW4uZmluZEV4dHJlbWVzKG8sWix7cGFkZGVkOkgsdnBhZG1pbnVzOk4sdnBhZHBsdXM6Qix2cGFkTGluZWFyaXplZDohMCxwcGFkbWludXM6e3g6VSx5Omp9W3BdLHBwYWRwbHVzOnt4OmoseTpVfVtwXX0pfX19ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNhbGNkYXRhLG49ZS54YXhpcyxpPWUueWF4aXMsYT0wO2E8by5sZW5ndGg7YSsrKXtmb3IodmFyIGw9b1thXSxjPSJoIj09PWw/aTpuLHU9W10sZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgaD1yW2ZdLHA9aFswXS50LGQ9aFswXS50cmFjZTshMCE9PWQudmlzaWJsZXx8ImJveCIhPT1kLnR5cGUmJiJjYW5kbGVzdGljayIhPT1kLnR5cGV8fHAuZW1wdHl8fChkLm9yaWVudGF0aW9ufHwidiIpIT09bHx8ZC54YXhpcyE9PW4uX2lkfHxkLnlheGlzIT09aS5faWR8fHUucHVzaChmKX1zKCJib3giLHQsdSxjKX19LHNldFBvc2l0aW9uT2Zmc2V0OnN9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjU2Mn1dLDY3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiB1KHQsZSxyLGEpe2Z1bmN0aW9uIG8odCl7dmFyIGU9MDtyZXR1cm4gdCYmdC5sZW5ndGgmJihlKz0xLG4uaXNBcnJheU9yVHlwZWRBcnJheSh0WzBdKSYmdFswXS5sZW5ndGgmJihlKz0xKSksZX1mdW5jdGlvbiBzKGUpe3JldHVybiBuLnZhbGlkYXRlKHRbZV0sY1tlXSl9dmFyIHUsZj1yKCJ5IiksaD1yKCJ4Iik7aWYoImJveCI9PT1lLnR5cGUpe3ZhciBwPXIoInExIiksZD1yKCJtZWRpYW4iKSxtPXIoInEzIik7ZS5faGFzUHJlQ29tcFN0YXRzPXAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCYmbSYmbS5sZW5ndGgsdT1NYXRoLm1pbihuLm1pblJvd0xlbmd0aChwKSxuLm1pblJvd0xlbmd0aChkKSxuLm1pblJvd0xlbmd0aChtKSl9dmFyIGcsdix5PW8oZikseD1vKGgpLGI9eSYmbi5taW5Sb3dMZW5ndGgoZiksXz14JiZuLm1pblJvd0xlbmd0aChoKSx3PWEuY2FsZW5kYXIsVD17YXV0b3R5cGVudW1iZXJzOmEuYXV0b3R5cGVudW1iZXJzfTtpZihlLl9oYXNQcmVDb21wU3RhdHMpc3dpdGNoKFN0cmluZyh4KStTdHJpbmcoeSkpe2Nhc2UiMDAiOnZhciBrPXMoIngwIil8fHMoImR4Iik7Zz0ocygieTAiKXx8cygiZHkiKSkmJiFrPyJoIjoidiIsdj11O2JyZWFrO2Nhc2UiMTAiOmc9InYiLHY9TWF0aC5taW4odSxfKTticmVhaztjYXNlIjIwIjpnPSJoIix2PU1hdGgubWluKHUsaC5sZW5ndGgpO2JyZWFrO2Nhc2UiMDEiOmc9ImgiLHY9TWF0aC5taW4odSxiKTticmVhaztjYXNlIjAyIjpnPSJ2Iix2PU1hdGgubWluKHUsZi5sZW5ndGgpO2JyZWFrO2Nhc2UiMTIiOmc9InYiLHY9TWF0aC5taW4odSxfLGYubGVuZ3RoKTticmVhaztjYXNlIjIxIjpnPSJoIix2PU1hdGgubWluKHUsaC5sZW5ndGgsYik7YnJlYWs7Y2FzZSIxMSI6dj0wO2JyZWFrO2Nhc2UiMjIiOnZhciBBLE09ITE7Zm9yKEE9MDtBPGgubGVuZ3RoO0ErKylpZigiY2F0ZWdvcnkiPT09bChoW0FdLHcsVCkpe009ITA7YnJlYWt9aWYoTSlnPSJ2Iix2PU1hdGgubWluKHUsXyxmLmxlbmd0aCk7ZWxzZXtmb3IoQT0wO0E8Zi5sZW5ndGg7QSsrKWlmKCJjYXRlZ29yeSI9PT1sKGZbQV0sdyxUKSl7TT0hMDticmVha31NPyhnPSJoIix2PU1hdGgubWluKHUsaC5sZW5ndGgsYikpOihnPSJ2Iix2PU1hdGgubWluKHUsXyxmLmxlbmd0aCkpfX1lbHNlIHk+MD8oZz0idiIsdj14PjA/TWF0aC5taW4oXyxiKTpNYXRoLm1pbihiKSk6eD4wPyhnPSJoIix2PU1hdGgubWluKF8pKTp2PTA7aWYodil7ZS5fbGVuZ3RoPXY7dmFyIFM9cigib3JpZW50YXRpb24iLGcpO2UuX2hhc1ByZUNvbXBTdGF0cz8idiI9PT1TJiYwPT09eD8ocigieDAiLDApLHIoImR4IiwxKSk6ImgiPT09UyYmMD09PXkmJihyKCJ5MCIsMCkscigiZHkiLDEpKToidiI9PT1TJiYwPT09eD9yKCJ4MCIpOiJoIj09PVMmJjA9PT15JiZyKCJ5MCIpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxhKX1lbHNlIGUudmlzaWJsZT0hMX1mdW5jdGlvbiBmKHQsZSxyLGkpe3ZhciBhPWkucHJlZml4LG89bi5jb2VyY2UyKHQsZSxjLCJtYXJrZXIub3V0bGllcmNvbG9yIikscz1yKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiKSxsPSJvdXRsaWVycyI7ZS5faGFzUHJlQ29tcFN0YXRzP2w9ImFsbCI6KG98fHMpJiYobD0ic3VzcGVjdGVkb3V0bGllcnMiKTt2YXIgdT1yKGErInBvaW50cyIsbCk7dT8ocigiaml0dGVyIiwiYWxsIj09PXU/LjM6MCkscigicG9pbnRwb3MiLCJhbGwiPT09dT8tMS41OjApLHIoIm1hcmtlci5zeW1ib2wiKSxyKCJtYXJrZXIub3BhY2l0eSIpLHIoIm1hcmtlci5zaXplIikscigibWFya2VyLmNvbG9yIixlLmxpbmUuY29sb3IpLHIoIm1hcmtlci5saW5lLmNvbG9yIikscigibWFya2VyLmxpbmUud2lkdGgiKSwic3VzcGVjdGVkb3V0bGllcnMiPT09dSYmKHIoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIsZS5tYXJrZXIuY29sb3IpLHIoIm1hcmtlci5saW5lLm91dGxpZXJ3aWR0aCIpKSxyKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInNlbGVjdGVkLm1hcmtlci5zaXplIikscigidW5zZWxlY3RlZC5tYXJrZXIuc2l6ZSIpLHIoInRleHQiKSxyKCJob3ZlcnRleHQiKSk6ZGVsZXRlIGUubWFya2VyO3ZhciBmPXIoImhvdmVyb24iKTsiYWxsIiE9PWYmJi0xPT09Zi5pbmRleE9mKCJwb2ludHMiKXx8cigiaG92ZXJ0ZW1wbGF0ZSIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHIpfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKHUodCxlLHMsaSksITEhPT1lLnZpc2libGUpe28odCxlLGkscykscygieGhvdmVyZm9ybWF0IikscygieWhvdmVyZm9ybWF0Iik7dmFyIGw9ZS5faGFzUHJlQ29tcFN0YXRzO2wmJihzKCJsb3dlcmZlbmNlIikscygidXBwZXJmZW5jZSIpKSxzKCJsaW5lLmNvbG9yIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8cikscygibGluZS53aWR0aCIpLHMoImZpbGxjb2xvciIsYS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO3ZhciBoPSExO2lmKGwpe3ZhciBwPXMoIm1lYW4iKSxkPXMoInNkIik7cCYmcC5sZW5ndGgmJihoPSEwLGQmJmQubGVuZ3RoJiYoaD0ic2QiKSl9cygiYm94bWVhbiIsaCkscygid2hpc2tlcndpZHRoIikscygid2lkdGgiKSxzKCJxdWFydGlsZW1ldGhvZCIpO3ZhciBtPSExO2lmKGwpe3ZhciBnPXMoIm5vdGNoc3BhbiIpO2cmJmcubGVuZ3RoJiYobT0hMCl9ZWxzZSBuLnZhbGlkYXRlKHQubm90Y2h3aWR0aCxjLm5vdGNod2lkdGgpJiYobT0hMCk7cygibm90Y2hlZCIsbSkmJnMoIm5vdGNod2lkdGgiKSxmKHQsZSxzLHtwcmVmaXg6ImJveCJ9KX19LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByLGk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbi5jb2VyY2UoaS5faW5wdXQsaSxjLHQpfWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgbD0oaT10W29dKS50eXBlOyJib3giIT09bCYmInZpb2xpbiIhPT1sfHwocj1pLl9pbnB1dCwiZ3JvdXAiPT09ZVtsKyJtb2RlIl0mJnMocixpLGUsYSkpfX0saGFuZGxlU2FtcGxlRGVmYXVsdHM6dSxoYW5kbGVQb2ludHNEZWZhdWx0czpmfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSI6NTU1LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9iYXIvZGVmYXVsdHMiOjY1MiwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjk0NiwiLi9hdHRyaWJ1dGVzIjo2NzN9XSw2Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaG92ZXJPbkJveCYmKHQuaG92ZXJPbkJveD1lLmhvdmVyT25Cb3gpLCJ4VmFsImluIGUmJih0Lng9ZS54VmFsKSwieVZhbCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSw2Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9aS5maWxsVGV4dDtmdW5jdGlvbiBsKHQsZSxyLHMpe3ZhciBsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdz10LmNkLFQ9dC54YSxrPXQueWEsQT13WzBdLnRyYWNlLE09d1swXS50LFM9InZpb2xpbiI9PT1BLnR5cGUsRT1bXSxMPU0uYmRQb3MsQz1NLndIb3ZlcixQPWZ1bmN0aW9uKHQpe3JldHVybiB1LmMybCh0LnBvcykrTS5iUG9zLXUuYzJsKHApfTtTJiYiYm90aCIhPT1BLnNpZGU/KCJwb3NpdGl2ZSI9PT1BLnNpZGUmJihnPWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGEuaW5ib3goZSxlK0Msdil9LHg9TCxiPTApLCJuZWdhdGl2ZSI9PT1BLnNpZGUmJihnPWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGEuaW5ib3goZS1DLGUsdil9LHg9MCxiPUwpKTooZz1mdW5jdGlvbih0KXt2YXIgZT1QKHQpO3JldHVybiBhLmluYm94KGUtQyxlK0Msdil9LHg9Yj1MKSxfPVM/ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5zcGFuWzBdLWgsdC5zcGFuWzFdLWgsdil9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmluYm94KHQubWluLWgsdC5tYXgtaCx2KX0sImgiPT09QS5vcmllbnRhdGlvbj8oaD1lLHA9cixkPV8sbT1nLGw9InkiLHU9ayxjPSJ4IixmPVQpOihoPXIscD1lLGQ9ZyxtPV8sbD0ieCIsdT1ULGM9InkiLGY9ayk7dmFyIEk9TWF0aC5taW4oMSxML01hdGguYWJzKHUucjJjKHUucmFuZ2VbMV0pLXUucjJjKHUucmFuZ2VbMF0pKSk7ZnVuY3Rpb24gTyh0KXtyZXR1cm4oZCh0KSttKHQpKS8yfXY9dC5tYXhIb3ZlckRpc3RhbmNlLUkseT10Lm1heFNwaWtlRGlzdGFuY2UtSTt2YXIgej1hLmdldERpc3RhbmNlRnVuY3Rpb24ocyxkLG0sTyk7aWYoYS5nZXRDbG9zZXN0KHcseix0KSwhMT09PXQuaW5kZXgpcmV0dXJuW107dmFyIEQ9d1t0LmluZGV4XSxSPUEubGluZS5jb2xvcixGPShBLm1hcmtlcnx8e30pLmNvbG9yO28ub3BhY2l0eShSKSYmQS5saW5lLndpZHRoP3QuY29sb3I9UjpvLm9wYWNpdHkoRikmJkEuYm94cG9pbnRzP3QuY29sb3I9Rjp0LmNvbG9yPUEuZmlsbGNvbG9yLHRbbCsiMCJdPXUuYzJwKEQucG9zK00uYlBvcy1iLCEwKSx0W2wrIjEiXT11LmMycChELnBvcytNLmJQb3MreCwhMCksdFtsKyJMYWJlbFZhbCJdPXZvaWQgMCE9PUQub3JpZ19wP0Qub3JpZ19wOkQucG9zO3ZhciBCPWwrIlNwaWtlIjt0LnNwaWtlRGlzdGFuY2U9TyhEKSp5L3YsdFtCXT11LmMycChELnBvcywhMCk7dmFyIE49e30saj1bIm1lZCIsInExIiwicTMiLCJtaW4iLCJtYXgiXTsoQS5ib3htZWFufHwoQS5tZWFubGluZXx8e30pLnZpc2libGUpJiZqLnB1c2goIm1lYW4iKSwoQS5ib3hwb2ludHN8fEEucG9pbnRzKSYmai5wdXNoKCJsZiIsInVmIik7Zm9yKHZhciBVPTA7VTxqLmxlbmd0aDtVKyspe3ZhciBWPWpbVV07aWYoViBpbiBEJiYhKERbVl1pbiBOKSl7TltEW1ZdXT0hMDt2YXIgSD1EW1ZdLHE9Zi5jMnAoSCwhMCksRz1pLmV4dGVuZEZsYXQoe30sdCk7Ry5hdHRyPVYsR1tjKyIwIl09R1tjKyIxIl09cSxHW2MrIkxhYmVsVmFsIl09SCxHW2MrIkxhYmVsIl09KE0ubGFiZWxzP00ubGFiZWxzW1ZdKyIgIjoiIikrbi5ob3ZlckxhYmVsVGV4dChmLEgsQVtjKyJob3ZlcmZvcm1hdCJdKSxHLmhvdmVyT25Cb3g9ITAsIm1lYW4iPT09ViYmInNkImluIEQmJiJzZCI9PT1BLmJveG1lYW4mJihHW2MrImVyciJdPUQuc2QpLHQubmFtZT0iIix0LnNwaWtlRGlzdGFuY2U9dm9pZCAwLHRbQl09dm9pZCAwLEcuaG92ZXJ0ZW1wbGF0ZT0hMSxFLnB1c2goRyl9fXJldHVybiBFfWZ1bmN0aW9uIGModCxlLHIpe2Zvcih2YXIgbixvLGwsYz10LmNkLHU9dC54YSxmPXQueWEsaD1jWzBdLnRyYWNlLHA9dS5jMnAoZSksZD1mLmMycChyKSxtPWEucXVhZHJhdHVyZSgoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHUuYzJwKHQueCktcCktZSwxLTMvZSl9KSwoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKGYuYzJwKHQueSktZCktZSwxLTMvZSl9KSksZz0hMSx2PTA7djxjLmxlbmd0aDt2Kyspe289Y1t2XTtmb3IodmFyIHk9MDt5PChvLnB0c3x8W10pLmxlbmd0aDt5Kyspe3ZhciB4PW0obD1vLnB0c1t5XSk7eDw9dC5kaXN0YW5jZSYmKHQuZGlzdGFuY2U9eCxnPVt2LHldKX19aWYoIWcpcmV0dXJuITE7bD0obz1jW2dbMF1dKS5wdHNbZ1sxXV07dmFyIGI9dS5jMnAobC54LCEwKSxfPWYuYzJwKGwueSwhMCksdz1sLm1yY3x8MTtuPWkuZXh0ZW5kRmxhdCh7fSx0LHtpbmRleDpsLmksY29sb3I6KGgubWFya2VyfHx7fSkuY29sb3IsbmFtZTpoLm5hbWUseDA6Yi13LHgxOmIrdyx5MDpfLXcseTE6Xyt3LHNwaWtlRGlzdGFuY2U6dC5kaXN0YW5jZSxob3ZlcnRlbXBsYXRlOmguaG92ZXJ0ZW1wbGF0ZX0pO3ZhciBULGs9by5vcmlnX3AsQT12b2lkIDAhPT1rP2s6by5wb3M7cmV0dXJuImgiPT09aC5vcmllbnRhdGlvbj8oVD1mLG4ueExhYmVsVmFsPWwueCxuLnlMYWJlbFZhbD1BKTooVD11LG4ueExhYmVsVmFsPUEsbi55TGFiZWxWYWw9bC55KSxuW1QuX2lkLmNoYXJBdCgwKSsiU3Bpa2UiXT1ULmMycChvLnBvcywhMCkscyhsLGgsbiksbn1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5jZFswXS50cmFjZS5ob3Zlcm9uLG89W107cmV0dXJuLTEhPT1hLmluZGV4T2YoImJveGVzIikmJihvPW8uY29uY2F0KGwodCxlLHIsbikpKSwtMSE9PWEuaW5kZXhPZigicG9pbnRzIikmJihpPWModCxlLHIpKSwiY2xvc2VzdCI9PT1uP2k/W2ldOm86aT8oby5wdXNoKGkpLG8pOm99LGhvdmVyT25Cb3hlczpsLGhvdmVyT25Qb2ludHM6Y319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sNjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKS5zdXBwbHlMYXlvdXREZWZhdWx0cyxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3gtdmlvbGluIiwic2hvd0xlZ2VuZCIsImJveExheW91dCIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTY4LCIuL2F0dHJpYnV0ZXMiOjY3MywiLi9jYWxjIjo2NzQsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6Njc1LCIuL2RlZmF1bHRzIjo2NzYsIi4vZXZlbnRfZGF0YSI6Njc3LCIuL2hvdmVyIjo2NzgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MCwiLi9sYXlvdXRfZGVmYXVsdHMiOjY4MSwiLi9wbG90Ijo2ODIsIi4vc2VsZWN0Ijo2ODMsIi4vc3R5bGUiOjY4NH1dLDY4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2JveG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdyb3VwIiwib3ZlcmxheSJdLGRmbHQ6Im92ZXJsYXkiLGVkaXRUeXBlOiJjYWxjIn0sYm94Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifSxib3hncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sNjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBvKHQsZSxyLGksYSl7Zm9yKHZhciBvPWErIkxheW91dCIscz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07aWYobi50cmFjZUlzKGMsbykpe3M9ITA7YnJlYWt9fXMmJihpKGErIm1vZGUiKSxpKGErImdhcCIpLGkoYSsiZ3JvdXBnYXAiKSl9ZS5leHBvcnRzPXtzdXBwbHlMYXlvdXREZWZhdWx0czpmdW5jdGlvbih0LGUscil7bygwLDAsciwoZnVuY3Rpb24ocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX0pLCJib3giKX0sX3N1cHBseTpvfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjgwfV0sNjgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZnVuY3Rpb24gbyh0LGUscixhKXt2YXIgbyxzLGw9ImgiPT09ci5vcmllbnRhdGlvbixjPWUudmFsLHU9ZS5wb3MsZj0hIXUucmFuZ2VicmVha3MsaD1hLmJQb3MscD1hLndkUG9zfHwwLGQ9YS5iUG9zUHhPZmZzZXR8fDAsbT1yLndoaXNrZXJ3aWR0aHx8MCxnPXIubm90Y2hlZHx8ITEsdj1nPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGEuYmRQb3MpPyhvPWEuYmRQb3NbMF0scz1hLmJkUG9zWzFdKToobz1hLmJkUG9zLHM9YS5iZFBvcyk7dmFyIHk9dC5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YSgidmlvbGluIiE9PXIudHlwZXx8ci5ib3gudmlzaWJsZT9pLmlkZW50aXR5OltdKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsImJveCIpLHkuZXhpdCgpLnJlbW92ZSgpLHkuZWFjaCgoZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm4iTTAsMFoiO3ZhciBlPXUuYzJsKHQucG9zK2gsITApLGE9dS5sMnAoZS1vKStkLHk9dS5sMnAoZStzKStkLHg9Zj8oYSt5KS8yOnUubDJwKGUpK2QsYj1yLndoaXNrZXJ3aWR0aCxfPWY/YSpiKygxLWIpKng6dS5sMnAoZS1wKStkLHc9Zj95KmIrKDEtYikqeDp1LmwycChlK3ApK2QsVD11LmwycChlLW8qdikrZCxrPXUubDJwKGUrcyp2KStkLEE9Yy5jMnAodC5xMSwhMCksTT1jLmMycCh0LnEzLCEwKSxTPWkuY29uc3RyYWluKGMuYzJwKHQubWVkLCEwKSxNYXRoLm1pbihBLE0pKzEsTWF0aC5tYXgoQSxNKS0xKSxFPXZvaWQgMD09PXQubGZ8fCExPT09ci5ib3hwb2ludHMsTD1jLmMycChFP3QubWluOnQubGYsITApLEM9Yy5jMnAoRT90Lm1heDp0LnVmLCEwKSxQPWMuYzJwKHQubG4sITApLEk9Yy5jMnAodC51biwhMCk7bD9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrUysiLCIrVCsiViIraysiTSIrQSsiLCIrYSsiViIreSsoZz8iSCIrUCsiTCIrUysiLCIraysiTCIrSSsiLCIreToiIikrIkgiK00rIlYiK2ErKGc/IkgiK0krIkwiK1MrIiwiK1QrIkwiK1ArIiwiK2E6IiIpKyJaTSIrQSsiLCIreCsiSCIrTCsiTSIrTSsiLCIreCsiSCIrQysoMD09PW0/IiI6Ik0iK0wrIiwiK18rIlYiK3crIk0iK0MrIiwiK18rIlYiK3cpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVCsiLCIrUysiSCIraysiTSIrYSsiLCIrQSsiSCIreSsoZz8iViIrUCsiTCIraysiLCIrUysiTCIreSsiLCIrSToiIikrIlYiK00rIkgiK2ErKGc/IlYiK0krIkwiK1QrIiwiK1MrIkwiK2ErIiwiK1A6IiIpKyJaTSIreCsiLCIrQSsiViIrTCsiTSIreCsiLCIrTSsiViIrQysoMD09PW0/IiI6Ik0iK18rIiwiK0wrIkgiK3crIk0iK18rIiwiK0MrIkgiK3cpKX0pKX1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBvPWUueCxzPWUueSxsPW4uYmRQb3MsYz1uLmJQb3MsdT1yLmJveHBvaW50c3x8ci5wb2ludHM7aS5zZWVkUHNldWRvUmFuZG9tKCk7dmFyIGY9dC5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YSh1P2Z1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudD1uLHQudHJhY2U9cn0pKSx0fTpbXSk7Zi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIiksZi5leGl0KCkucmVtb3ZlKCk7dmFyIGg9Zi5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKChmdW5jdGlvbih0KXt2YXIgZSxuLGE9dC5wdHMyLG89TWF0aC5tYXgoKHQubWF4LXQubWluKS8xMCx0LnEzLXQucTEpLHM9MWUtOSpvLGY9LjAxKm8saD1bXSxwPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1vKWZvcihwPTEsaD1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKyloW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZD1NYXRoLm1heCgwLGUtNSksbT1hW2RdLnYsZz1NYXRoLm1pbihhLmxlbmd0aC0xLGUrNSksdj1hW2ddLnY7ImFsbCIhPT11JiYoYVtlXS52PHQubGY/dj1NYXRoLm1pbih2LHQubGYpOm09TWF0aC5tYXgobSx0LnVmKSk7dmFyIHk9TWF0aC5zcXJ0KGYqKGctZCkvKHYtbStzKSl8fDA7eT1pLmNvbnN0cmFpbihNYXRoLmFicyh5KSwwLDEpLGgucHVzaCh5KSxwPU1hdGgubWF4KHkscCl9bj0yKnIuaml0dGVyLyhwfHwxKX1mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgeD1hW2VdLGI9eC52LF89ci5qaXR0ZXI/bipoW2VdKihpLnBzZXVkb1JhbmRvbSgpLS41KTowLHc9dC5wb3MrYytsKihyLnBvaW50cG9zK18pOyJoIj09PXIub3JpZW50YXRpb24/KHgueT13LHgueD1iKTooeC54PXcseC55PWIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT11JiZiPHQudW8mJmI+dC5sbyYmKHguc289ITApfXJldHVybiBhfSkpO2guZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLGguZXhpdCgpLnJlbW92ZSgpLGguY2FsbChhLnRyYW5zbGF0ZVBvaW50cyxvLHMpfWZ1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPWUudmFsLGM9ZS5wb3MsdT0hIWMucmFuZ2VicmVha3MsZj1hLmJQb3MsaD1hLmJQb3NQeE9mZnNldHx8MCxwPXIuYm94bWVhbnx8KHIubWVhbmxpbmV8fHt9KS52aXNpYmxlO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgZD10LnNlbGVjdEFsbCgicGF0aC5tZWFuIikuZGF0YSgiYm94Ij09PXIudHlwZSYmci5ib3htZWFufHwidmlvbGluIj09PXIudHlwZSYmci5ib3gudmlzaWJsZSYmci5tZWFubGluZS52aXNpYmxlP2kuaWRlbnRpdHk6W10pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsInZlY3Rvci1lZmZlY3QiOiJub24tc2NhbGluZy1zdHJva2UifSksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1jLmMybCh0LnBvcytmLCEwKSxpPWMubDJwKGUtbykraCxhPWMubDJwKGUrcykraCxkPXU/KGkrYSkvMjpjLmwycChlKStoLG09bC5jMnAodC5tZWFuLCEwKSxnPWwuYzJwKHQubWVhbi10LnNkLCEwKSx2PWwuYzJwKHQubWVhbit0LnNkLCEwKTsiaCI9PT1yLm9yaWVudGF0aW9uP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIittKyIsIitpKyJWIithKygic2QiPT09cD8ibTAsMEwiK2crIiwiK2QrIkwiK20rIiwiK2krIkwiK3YrIiwiK2QrIloiOiIiKSk6bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK2krIiwiK20rIkgiK2ErKCJzZCI9PT1wPyJtMCwwTCIrZCsiLCIrZysiTCIraSsiLCIrbSsiTCIrZCsiLCIrdisiWiI6IiIpKX0pKX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGM9ZS54YXhpcyx1PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBib3hlcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1uLnNlbGVjdCh0aGlzKSxhPXRbMF0sZj1hLnQsaD1hLnRyYWNlOyhmLndkUG9zPWYuYmRQb3MqaC53aGlza2Vyd2lkdGgsITAhPT1oLnZpc2libGV8fGYuZW1wdHkpP2kucmVtb3ZlKCk6KCJoIj09PWgub3JpZW50YXRpb24/KGU9dSxyPWMpOihlPWMscj11KSxvKGkse3BvczplLHZhbDpyfSxoLGYpLHMoaSx7eDpjLHk6dX0saCxmKSxsKGkse3BvczplLHZhbDpyfSxoLGYpKX0pKX0scGxvdEJveEFuZFdoaXNrZXJzOm8scGxvdFBvaW50czpzLHBsb3RCb3hNZWFuOmx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9saWIiOjUwMywiQHBsb3RseS9kMyI6NTh9XSw2ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKWlbcl0ucHRzW25dLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKXt2YXIgbD1pW3JdLnB0c1tuXSxjPWEuYzJwKGwueCksdT1vLmMycChsLnkpO2UuY29udGFpbnMoW2MsdV0sbnVsbCxsLmksdCk/KHMucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6YS5jMmQobC54KSx5Om8uYzJkKGwueSl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gc319LHt9XSw2ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIG89cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLmJveGVzIik7by5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSksby5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWVbMF0udHJhY2Uscz1vLmxpbmUud2lkdGg7ZnVuY3Rpb24gbCh0LGUscixuKXt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGUrInB4IikuY2FsbChpLnN0cm9rZSxyKS5jYWxsKGkuZmlsbCxuKX12YXIgYz1yLnNlbGVjdEFsbCgicGF0aC5ib3giKTtpZigiY2FuZGxlc3RpY2siPT09by50eXBlKWMuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuZW1wdHkpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9b1t0LmRpcl07bChlLHIubGluZS53aWR0aCxyLmxpbmUuY29sb3Isci5maWxsY29sb3IpLGUuc3R5bGUoIm9wYWNpdHkiLG8uc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pKTtlbHNle2woYyxzLG8ubGluZS5jb2xvcixvLmZpbGxjb2xvciksci5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjpzLCJzdHJva2UtZGFzaGFycmF5IjoyKnMrInB4LCIrcysicHgifSkuY2FsbChpLnN0cm9rZSxvLmxpbmUuY29sb3IpO3ZhciB1PXIuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iik7YS5wb2ludFN0eWxlKHUsbyx0KX19KSl9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0udHJhY2UsaT1yLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpO24uc2VsZWN0ZWRwb2ludHM/YS5zZWxlY3RlZFBvaW50U3R5bGUoaSxuKTphLnBvaW50U3R5bGUoaSxuLHQpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiQHBsb3RseS9kMyI6NTh9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vb2hsYy9hdHRyaWJ1dGVzIiksbz10KCIuLi9ib3gvYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCl7cmV0dXJue2xpbmU6e2NvbG9yOm4oe30sby5saW5lLmNvbG9yLHtkZmx0OnR9KSx3aWR0aDpvLmxpbmUud2lkdGgsZWRpdFR5cGU6InN0eWxlIn0sZmlsbGNvbG9yOm8uZmlsbGNvbG9yLGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17eHBlcmlvZDphLnhwZXJpb2QseHBlcmlvZDA6YS54cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50OmEueHBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6aSgieCIpLHlob3ZlcmZvcm1hdDppKCJ5IikseDphLngsb3BlbjphLm9wZW4saGlnaDphLmhpZ2gsbG93OmEubG93LGNsb3NlOmEuY2xvc2UsbGluZTp7d2lkdGg6bih7fSxvLmxpbmUud2lkdGgse30pLGVkaXRUeXBlOiJzdHlsZSJ9LGluY3JlYXNpbmc6cyhhLmluY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSxkZWNyZWFzaW5nOnMoYS5kZWNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksdGV4dDphLnRleHQsaG92ZXJ0ZXh0OmEuaG92ZXJ0ZXh0LHdoaXNrZXJ3aWR0aDpuKHt9LG8ud2hpc2tlcndpZHRoLHtkZmx0OjB9KSxob3ZlcmxhYmVsOmEuaG92ZXJsYWJlbH19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uL2JveC9hdHRyaWJ1dGVzIjo2NzMsIi4uL29obGMvYXR0cmlidXRlcyI6ODcyfV0sNjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxvPXQoIi4uL29obGMvY2FsYyIpLmNhbGNDb21tb247ZnVuY3Rpb24gcyh0LGUscixuKXtyZXR1cm57bWluOnIscTE6TWF0aC5taW4odCxuKSxtZWQ6bixxMzpNYXRoLm1heCh0LG4pLG1heDplfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGw9aS5nZXRGcm9tSWQodCxlLnhheGlzKSxjPWkuZ2V0RnJvbUlkKHQsZS55YXhpcyksdT1sLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1hKGUsbCwieCIsdSkudmFscyxoPW8odCxlLHUsZixjLHMpO3JldHVybiBoLmxlbmd0aD8obi5leHRlbmRGbGF0KGhbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoZikubWluRGlmZi8yLHBvc0xldHRlcjoieCIsdmFsTGV0dGVyOiJ5In0pLHIuX251bUJveGVzKyssaCk6W3t0OntlbXB0eTohMH19XX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU1MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vb2hsYy9jYWxjIjo4NzN9XSw2ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi9vaGxjL29obGNfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBhPXIobisiLmxpbmUuY29sb3IiKTtyKG4rIi5saW5lLndpZHRoIixlLmxpbmUud2lkdGgpLHIobisiLmZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGEsLjUpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWEodCxlLGMsaSk/KG8odCxlLGksYyx7eDohMH0pLGMoInhob3ZlcmZvcm1hdCIpLGMoInlob3ZlcmZvcm1hdCIpLGMoImxpbmUud2lkdGgiKSxsKHQsZSxjLCJpbmNyZWFzaW5nIiksbCh0LGUsYywiZGVjcmVhc2luZyIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJ3aGlza2Vyd2lkdGgiKSxpLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9saWIiOjUwMywiLi4vb2hsYy9vaGxjX2RlZmF1bHRzIjo4NzcsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjo5NDYsIi4vYXR0cmlidXRlcyI6Njg1fV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhbmRsZXN0aWNrIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCIsImNhbmRsZXN0aWNrIiwiYm94TGF5b3V0Il0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoIi4uL2JveC9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuLi9ib3gvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJib3hsYXllciIsc3R5bGU6dCgiLi4vYm94L3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi4vb2hsYy9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9vaGxjL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiOjY3NSwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIjo2ODAsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjY4MSwiLi4vYm94L3Bsb3QiOjY4MiwiLi4vYm94L3N0eWxlIjo2ODQsIi4uL29obGMvaG92ZXIiOjg3NSwiLi4vb2hsYy9zZWxlY3QiOjg3OSwiLi9hdHRyaWJ1dGVzIjo2ODUsIi4vY2FsYyI6Njg2LCIuL2RlZmF1bHRzIjo2ODd9XSw2ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9heGlzX2RlZmF1bHRzIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7YSgiYSIpfHwoYSgiZGEiKSxhKCJhMCIpKSxhKCJiIil8fChhKCJkYiIpLGEoImIwIikpLGZ1bmN0aW9uKHQsZSxyLGEpe1siYWF4aXMiLCJiYXhpcyJdLmZvckVhY2goKGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2hhckF0KDApLGw9dFtvXXx8e30sYz1pLm5ld0NvbnRhaW5lcihlLG8pLHU9e3RpY2tmb250OiJ4IixpZDpzKyJheGlzIixsZXR0ZXI6cyxmb250OmUuZm9udCxuYW1lOm8sZGF0YTp0W3NdLGNhbGVuZGFyOmUuY2FsZW5kYXIsZGZsdENvbG9yOmEsYmdDb2xvcjpyLnBhcGVyX2JnY29sb3IsYXV0b3R5cGVudW1iZXJzRGZsdDpyLmF1dG90eXBlbnVtYmVycyxmdWxsTGF5b3V0OnJ9O24obCxjLHUpLGMuX2NhdGVnb3JpZXM9Yy5fY2F0ZWdvcmllc3x8W10sdFtvXXx8Ii0iPT09bC50eXBlfHwodFtvXT17dHlwZTpsLnR5cGV9KX0pKX0odCxlLHIsbyl9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi9heGlzX2RlZmF1bHRzIjo2OTR9XSw2OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighbihlKXx8cj49MTApcmV0dXJuIG51bGw7Zm9yKHZhciBpPTEvMCxhPS0xLzAsbz1lLmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGw9ZVtzXTtpZihuKGwpKXt2YXIgYz10KGwscisxKTtjJiYoaT1NYXRoLm1pbihjWzBdLGkpLGE9TWF0aC5tYXgoY1sxXSxhKSl9ZWxzZSBpPU1hdGgubWluKGwsaSksYT1NYXRoLm1heChsLGEpfXJldHVybltpLGFdfSh0LDApfX0seyIuLi8uLi9saWIiOjUwM31dLDY5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPW4oe2VkaXRUeXBlOiJjYWxjIn0pO28uZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsby5zaXplLmRmbHQ9MTIsby5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJzbG9wZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4NSwiLi9heGlzX2F0dHJpYnV0ZXMiOjY5M31dLDY5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5PW4ocik/ImEiOiJiIix4PSgiYSI9PT15P3QuYWF4aXM6dC5iYXhpcykuc21vb3RoaW5nLGI9ImEiPT09eT90LmEyaTp0LmIyaixfPSJhIj09PXk/cjppLHc9ImEiPT09eT9pOnIsVD0iYSI9PT15P2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxrPSJhIj09PXk/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLEE9TWF0aC5mbG9vcigiYSI9PT15P3QuYjJqKHcpOnQuYTJpKHcpKSxNPSJhIj09PXk/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsQSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxBLGUpfTt4JiYocz1NYXRoLm1heCgwLE1hdGgubWluKGstMixBKSksbD1BLXMsbz0iYSI9PT15P2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxzLHIsbCl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10scyxlLGwscil9KTt2YXIgUz1iKF9bMF0pLEU9YihfWzFdKSxMPVM8RT8xOi0xLEM9MWUtOCooRS1TKSxQPUw+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxJPUw+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixPPUw+MD9NYXRoLm1pbjpNYXRoLm1heCx6PUw+MD9NYXRoLm1heDpNYXRoLm1pbixEPVAoUytDKSxSPUkoRS1DKSxGPVtbZj1NKFMpXV07Zm9yKGE9RDthKkw8UipMO2ErPUwpYz1bXSxtPXooUyxhKSx2PShnPU8oRSxhK0wpKS1tLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihULTIsTWF0aC5mbG9vciguNSoobStnKSkpKSxoPU0oZykseCYmKHA9byh1LG0tdSksZD1vKHUsZy11KSxjLnB1c2goW2ZbMF0rcFswXS8zKnYsZlsxXStwWzFdLzMqdl0pLGMucHVzaChbaFswXS1kWzBdLzMqdixoWzFdLWRbMV0vMyp2XSkpLGMucHVzaChoKSxGLnB1c2goYyksZj1oO3JldHVybiBGfX0seyIuLi8uLi9saWIiOjUwM31dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmRlc2NyaXB0aW9uV2l0aERhdGVzLHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz17Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjAsbWF4OjEuMyxlZGl0VHlwZToiY2FsYyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiZGF0ZSIsImNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMifSxhdXRvdHlwZW51bWJlcnM6YS5hdXRvdHlwZW51bWJlcnMsYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToiY2FsYyIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifV19LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjaGVhdGVydHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5kZXgiLCJ2YWx1ZSJdLGRmbHQ6InZhbHVlIixlZGl0VHlwZToiY2FsYyJ9LHRpY2ttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJhcnJheSJdLGRmbHQ6ImFycmF5IixlZGl0VHlwZToiY2FsYyJ9LG50aWNrczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sdGlja3ZhbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YXJ0IiwiZW5kIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJzdGFydCIsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9udDpuKHtlZGl0VHlwZToiY2FsYyJ9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYyJ9LHRpY2twcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrcHJlZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dleHBvbmVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIixlZGl0VHlwZToiY2FsYyJ9LG1pbmV4cG9uZW50Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LHNlcGFyYXRldGhvdXNhbmRzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIixkZXNjcmlwdGlvbjpvKCJ0aWNrIGxhYmVsIil9LHRpY2tmb3JtYXRzdG9wczpzKGEudGlja2Zvcm1hdHN0b3BzLCJjYWxjIiwiZnJvbS1yb290IiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkdGljazp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxhcnJheWR0aWNrOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9fSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NTY5LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4NX1dLDY5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5LGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcD1yLmxldHRlcixkPXIuZm9udHx8e30sbT1uW3ArImF4aXMiXTtmdW5jdGlvbiBnKHIsbil7cmV0dXJuIG8uY29lcmNlKHQsZSxtLHIsbil9ZnVuY3Rpb24gdihyLG4pe3JldHVybiBvLmNvZXJjZTIodCxlLG0scixuKX1yLm5hbWUmJihlLl9uYW1lPXIubmFtZSxlLl9pZD1yLm5hbWUpLGcoImF1dG90eXBlbnVtYmVycyIsci5hdXRvdHlwZW51bWJlcnNEZmx0KTt2YXIgeT1nKCJ0eXBlIik7KCItIj09PXkmJihyLmRhdGEmJmZ1bmN0aW9uKHQsZSl7aWYoIi0iIT09dC50eXBlKXJldHVybjt2YXIgcj10Ll9pZC5jaGFyQXQoMCksbj10W3IrImNhbGVuZGFyIl07dC50eXBlPWgoZSxuLHthdXRvdHlwZW51bWJlcnM6dC5hdXRvdHlwZW51bWJlcnN9KX0oZSxyLmRhdGEpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6eT10LnR5cGU9ZS50eXBlKSxnKCJzbW9vdGhpbmciKSxnKCJjaGVhdGVydHlwZSIpLGcoInNob3d0aWNrbGFiZWxzIiksZygibGFiZWxwcmVmaXgiLHArIiA9ICIpLGcoImxhYmVsc3VmZml4IiksZygic2hvd3RpY2twcmVmaXgiKSxnKCJzaG93dGlja3N1ZmZpeCIpLGcoInNlcGFyYXRldGhvdXNhbmRzIiksZygidGlja2Zvcm1hdCIpLGcoImV4cG9uZW50Zm9ybWF0IiksZygibWluZXhwb25lbnQiKSxnKCJzaG93ZXhwb25lbnQiKSxnKCJjYXRlZ29yeW9yZGVyIiksZygidGlja21vZGUiKSxnKCJ0aWNrdmFscyIpLGcoInRpY2t0ZXh0IiksZygidGljazAiKSxnKCJkdGljayIpLCJhcnJheSI9PT1lLnRpY2ttb2RlJiYoZygiYXJyYXl0aWNrMCIpLGcoImFycmF5ZHRpY2siKSksZygibGFiZWxwYWRkaW5nIiksZS5faG92ZXJ0aXRsZT1wLCJkYXRlIj09PXkpJiZhLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixyLmNhbGVuZGFyKTtmKGUsci5mdWxsTGF5b3V0KSxlLmMycD1vLmlkZW50aXR5O3ZhciB4PWcoImNvbG9yIixyLmRmbHRDb2xvciksYj14PT09dC5jb2xvcj94OmQuY29sb3I7ZygidGl0bGUudGV4dCIpJiYoby5jb2VyY2VGb250KGcsInRpdGxlLmZvbnQiLHtmYW1pbHk6ZC5mYW1pbHksc2l6ZTpvLmJpZ0ZvbnQoZC5zaXplKSxjb2xvcjpifSksZygidGl0bGUub2Zmc2V0IikpLGcoInRpY2thbmdsZSIpLGcoImF1dG9yYW5nZSIsIWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpKSYmZygicmFuZ2Vtb2RlIiksZygicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxnKCJmaXhlZHJhbmdlIikscyh0LGUsZyx5KSxjKHQsZSxnLHksciksbCh0LGUsZyx5LHIpLHUodCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOnB9KTt2YXIgXz12KCJncmlkY29sb3IiLGkoeCwuMykpLHc9digiZ3JpZHdpZHRoIiksVD1nKCJzaG93Z3JpZCIpO1R8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz12KCJzdGFydGxpbmVjb2xvciIseCksQT12KCJzdGFydGxpbmV3aWR0aCIsdyk7Zygic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIWt8fCEhQSl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIE09digiZW5kbGluZWNvbG9yIix4KSxTPXYoImVuZGxpbmV3aWR0aCIsdyk7cmV0dXJuIGcoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhTXx8ISFTKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLFQ/KGcoIm1pbm9yZ3JpZGNvdW50IiksZygibWlub3Jncmlkd2lkdGgiLHcpLGcoIm1pbm9yZ3JpZGNvbG9yIixpKF8sLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLm1pbmV4cG9uZW50LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKCJ0aWNrbW9kZSIpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo1NTUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NTU5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyI6NTczLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjU3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjU3OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjU4MCwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9hdHRyaWJ1dGVzIjo2OTF9XSw2OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRCxhPXQoIi4vY2hlYXRlcl9iYXNpcyIpLG89dCgiLi9hcnJheV9taW5tYXgiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSxjPXQoIi4vY2FsY19jbGlwcGF0aCIpLHU9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpLGg9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmdldEZyb21JZCh0LGUueGF4aXMpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzKSxtPWUuYWF4aXMsZz1lLmJheGlzLHY9ZS54LHk9ZS55LHg9W107diYmaSh2KSYmeC5wdXNoKCJ4IikseSYmaSh5KSYmeC5wdXNoKCJ5IikseC5sZW5ndGgmJmgoZSxtLGcsImEiLCJiIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO3Y9ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBUPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsaz0iaW5kZXgiPT09Zy5jaGVhdGVydHlwZT9fLmxlbmd0aDpfO3Y9YShULGssZS5jaGVhdGVyc2xvcGUpfWUuX3g9dj11KHYpLGUuX3k9eT11KHkpLGYodixiLF8pLGYoeSxiLF8pLHAoZSksZS5zZXRTY2FsZSgpO3ZhciBBPW8odiksTT1vKHkpLFM9LjUqKEFbMV0tQVswXSksRT0uNSooQVsxXStBWzBdKSxMPS41KihNWzFdLU1bMF0pLEM9LjUqKE1bMV0rTVswXSk7cmV0dXJuIEE9W0UtMS4zKlMsRSsxLjMqU10sTT1bQy0xLjMqTCxDKzEuMypMXSxlLl9leHRyZW1lc1tyLl9pZF09bi5maW5kRXh0cmVtZXMocixBLHtwYWRkZWQ6ITB9KSxlLl9leHRyZW1lc1tkLl9pZF09bi5maW5kRXh0cmVtZXMoZCxNLHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxtKSxsKGUsZyksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxtLGcpLHcueD12LHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjc5NCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjc5NiwiLi9hcnJheV9taW5tYXgiOjY5MCwiLi9jYWxjX2NsaXBwYXRoIjo2OTYsIi4vY2FsY19ncmlkbGluZXMiOjY5NywiLi9jYWxjX2xhYmVscyI6Njk4LCIuL2NoZWF0ZXJfYmFzaXMiOjcwMCwiLi9zZXRfY29udmVydCI6NzEzLCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo3MTR9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGY9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD11O2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1mO2krKylhW2ldPXRbaV1bdV0sb1tpXT1lW2ldW3VdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksaT11LGE9W10sbz1bXTtpPj0wO2ktLSlhW3UtaV09dFtmXVtpXSxvW3UtaV09ZVtmXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9ZixhPVtdLG89W107aT49MDtpLS0pYVtmLWldPXRbaV1bMF0sb1tmLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDY5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcsdix5LHg9dFsiXyIrZV0sYj10W2UrImF4aXMiXSxfPWIuX2dyaWRsaW5lcz1bXSx3PWIuX21pbm9yZ3JpZGxpbmVzPVtdLFQ9Yi5fYm91bmRhcnlsaW5lcz1bXSxrPXRbIl8iK3JdLEE9dFtyKyJheGlzIl07ImFycmF5Ij09PWIudGlja21vZGUmJihiLnRpY2t2YWxzPXguc2xpY2UoKSk7dmFyIE09dC5feGN0cmwsUz10Ll95Y3RybCxFPU1bMF0ubGVuZ3RoLEw9TS5sZW5ndGgsQz10Ll9hLmxlbmd0aCxQPXQuX2IubGVuZ3RoO24ucHJlcFRpY2tzKGIpLCJhcnJheSI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgST1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24gTyhuKXt2YXIgaSxhLG8scyxsLGMsdSxmLHAsZCxtLGcsdj1bXSx5PVtdLHg9e307aWYoImIiPT09ZSlmb3IoYT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihQLTIsYSkpKSxzPWEtbyx4Lmxlbmd0aD1QLHguY3Jvc3NMZW5ndGg9Qyx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGEpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxpPTA7aTxDO2krKyljPU1hdGgubWluKEMtMixpKSx1PWktYyxmPXQuZXZhbHh5KFtdLGksYSksQS5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaShbXSxpLTEsbywwLHMpLHYucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10saS0xLG8sMSxzKSx2LnB1c2goZlswXS1kWzBdLzMpLHkucHVzaChmWzFdLWRbMV0vMykpLHYucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO2Vsc2UgZm9yKGk9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oQy0yLGkpKSksdT1pLWMseC5sZW5ndGg9Qyx4LmNyb3NzTGVuZ3RoPVAseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10saSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0sYT0wO2E8UDthKyspbz1NYXRoLm1pbihQLTIsYSkscz1hLW8sZj10LmV2YWx4eShbXSxpLGEpLEEuc21vb3RoaW5nJiZhPjAmJihtPXQuZHh5ZGooW10sYyxhLTEsdSwwKSx2LnB1c2gobFswXSttWzBdLzMpLHkucHVzaChsWzFdK21bMV0vMyksZz10LmR4eWRqKFtdLGMsYS0xLHUsMSksdi5wdXNoKGZbMF0tZ1swXS8zKSx5LnB1c2goZlsxXS1nWzFdLzMpKSx2LnB1c2goZlswXSkseS5wdXNoKGZbMV0pLGw9ZjtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9QSx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9aCx4Lng9dix4Lnk9eSx4LnNtb290aGluZz1BLnNtb290aGluZyx4fWZ1bmN0aW9uIHoobil7dmFyIGksYSxvLHMsbCxjPVtdLHU9W10sZj17fTtpZihmLmxlbmd0aD14Lmxlbmd0aCxmLmNyb3NzTGVuZ3RoPWsubGVuZ3RoLCJiIj09PWUpZm9yKG89TWF0aC5tYXgoMCxNYXRoLm1pbihQLTIsbikpLGw9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tbykpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsbil9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIsbCl9LGk9MDtpPEU7aSsrKWNbaV09TVtuKkldW2ldLHVbaV09U1tuKkldW2ldO2Vsc2UgZm9yKGE9TWF0aC5tYXgoMCxNYXRoLm1pbihDLTIsbikpLHM9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tYSkpLGYueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGYuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sYSxlLHMscil9LGk9MDtpPEw7aSsrKWNbaV09TVtpXVtuKkldLHVbaV09U1tpXVtuKkldO3JldHVybiBmLmF4aXNMZXR0ZXI9ZSxmLmF4aXM9YixmLmNyb3NzQXhpcz1BLGYudmFsdWU9eFtuXSxmLmNvbnN0dmFyPXIsZi5pbmRleD1uLGYueD1jLGYueT11LGYuc21vb3RoaW5nPUEuc21vb3RoaW5nLGZ9aWYoImFycmF5Ij09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSlbMF0tMSxmPWNbMV0rMSxoPXU7aDxmO2grKykobz1iLmFycmF5dGljazArYi5hcnJheWR0aWNrKmgpPDB8fG8+eC5sZW5ndGgtMXx8Xy5wdXNoKGkoeihvKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGg9dTtoPGY7aCsrKWlmKHM9Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypoLG09TWF0aC5taW4ocytiLmFycmF5ZHRpY2sseC5sZW5ndGgtMSksIShzPDB8fHM+eC5sZW5ndGgtMXx8bTwwfHxtPngubGVuZ3RoLTEpKWZvcihnPXhbc10sdj14W21dLGE9MDthPGIubWlub3JncmlkY291bnQ7YSsrKSh5PW0tcyk8PTB8fChkPWcrKHYtZykqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkqKGIuYXJyYXlkdGljay95KSk8eFswXXx8ZD54W3gubGVuZ3RoLTFdfHx3LnB1c2goaShPKGQpLHtjb2xvcjpiLm1pbm9yZ3JpZGNvbG9yLHdpZHRoOmIubWlub3Jncmlkd2lkdGh9KSk7Yi5zdGFydGxpbmUmJlQucHVzaChpKHooMCkse2NvbG9yOmIuc3RhcnRsaW5lY29sb3Isd2lkdGg6Yi5zdGFydGxpbmV3aWR0aH0pKSxiLmVuZGxpbmUmJlQucHVzaChpKHooeC5sZW5ndGgtMSkse2NvbG9yOmIuZW5kbGluZWNvbG9yLHdpZHRoOmIuZW5kbGluZXdpZHRofSkpfWVsc2V7Zm9yKGw9NWUtMTUsdT0oYz1bTWF0aC5mbG9vcigoeFt4Lmxlbmd0aC0xXS1iLnRpY2swKS9iLmR0aWNrKigxK2wpKSxNYXRoLmNlaWwoKHhbMF0tYi50aWNrMCkvYi5kdGljay8oMStsKSldLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSlbMF0sZj1jWzFdLGg9dTtoPD1mO2grKylwPWIudGljazArYi5kdGljaypoLF8ucHVzaChpKE8ocCkse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihoPXUtMTtoPGYrMTtoKyspZm9yKHA9Yi50aWNrMCtiLmR0aWNrKmgsYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKGQ9cCtiLmR0aWNrKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKE8oZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmVC5wdXNoKGkoTyh4WzBdKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmVC5wdXNoKGkoTyh4W3gubGVuZ3RoLTFdKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTR9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWUuX2xhYmVscz1bXSxsPWUuX2dyaWRsaW5lcztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKW89bFtyXSwtMSE9PVsic3RhcnQiLCJib3RoIl0uaW5kZXhPZihlLnNob3d0aWNrbGFiZWxzKSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7cHJlZml4OnZvaWQgMCxzdWZmaXg6dm9pZCAwLGVuZEFuY2hvcjohMCx4eTpvLnh5KDApLGR4eTpvLmR4eSgwLDApLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpLC0xIT09WyJlbmQiLCJib3RoIl0uaW5kZXhPZihlLnNob3d0aWNrbGFiZWxzKSYmKGE9bi50aWNrVGV4dChlLG8udmFsdWUpLGkoYSx7ZW5kQW5jaG9yOiExLHh5Om8ueHkoby5jcm9zc0xlbmd0aC0xKSxkeHk6by5keHkoby5jcm9zc0xlbmd0aC0yLDEpLGF4aXM6by5heGlzLGxlbmd0aDpvLmNyb3NzQXhpcy5sZW5ndGgsZm9udDpvLmF4aXMudGlja2ZvbnQsaXNGaXJzdDowPT09cixpc0xhc3Q6cj09PWwubGVuZ3RoLTF9KSxzLnB1c2goYSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTR9XSw2OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tZVswXSxhPXRbMV0tZVsxXSxvPXJbMF0tZVswXSxzPXJbMV0tZVsxXSxsPU1hdGgucG93KGkqaSthKmEsLjI1KSxjPU1hdGgucG93KG8qbytzKnMsLjI1KSx1PShjKmMqaS1sKmwqbykqbixmPShjKmMqYS1sKmwqcykqbixoPWMqKGwrYykqMyxwPWwqKGwrYykqMztyZXR1cm5bW2VbMF0rKGgmJnUvaCksZVsxXSsoaCYmZi9oKV0sW2VbMF0tKHAmJnUvcCksZVsxXS0ocCYmZi9wKV1dfX0se31dLDcwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjLHU9W10sZj1uKHQpP3QubGVuZ3RoOnQsaD1uKGUpP2UubGVuZ3RoOmUscD1uKHQpP3Q6bnVsbCxkPW4oZSk/ZTpudWxsO3AmJihvPShwLmxlbmd0aC0xKS8ocFtwLmxlbmd0aC0xXS1wWzBdKS8oZi0xKSksZCYmKHM9KGQubGVuZ3RoLTEpLyhkW2QubGVuZ3RoLTFdLWRbMF0pLyhoLTEpKTt2YXIgbT0xLzAsZz0tMS8wO2ZvcihhPTA7YTxoO2ErKylmb3IodVthXT1bXSxsPWQ/KGRbYV0tZFswXSkqczphLyhoLTEpLGk9MDtpPGY7aSsrKWM9KHA/KHBbaV0tcFswXSkqbzppLyhmLTEpKS1sKnIsbT1NYXRoLm1pbihjLG0pLGc9TWF0aC5tYXgoYyxnKSx1W2FdW2ldPWM7dmFyIHY9MS8oZy1tKSx5PS1tKnY7Zm9yKGE9MDthPGg7YSsrKWZvcihpPTA7aTxmO2krKyl1W2FdW2ldPXYqdVthXVtpXSt5O3JldHVybiB1fX0seyIuLi8uLi9saWIiOjUwM31dLDcwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhdG11bGxfcm9tIiksaT10KCIuLi8uLi9saWIiKS5lbnN1cmVBcnJheTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj0tLjUqclswXSsxLjUqZVswXSxpPS0uNSpyWzFdKzEuNSplWzFdO3JldHVyblsoMipuK3RbMF0pLzMsKDIqaSt0WzFdKS8zXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjLHUsZixoLHAsZCxtLGcsdix5LHg9clswXS5sZW5ndGgsYj1yLmxlbmd0aCxfPXM/Myp4LTI6eCx3PWw/MypiLTI6Yjtmb3IodD1pKHQsdyksZT1pKGUsdyksZj0wO2Y8dztmKyspdFtmXT1pKHRbZl0sXyksZVtmXT1pKGVbZl0sXyk7Zm9yKHU9MCxoPTA7dTxiO3UrKyxoKz1sPzM6MSlmb3IocD10W2hdLGQ9ZVtoXSxtPXJbdV0sZz1vW3VdLGM9MCxmPTA7Yzx4O2MrKyxmKz1zPzM6MSlwW2ZdPW1bY10sZFtmXT1nW2NdO2lmKHMpZm9yKHU9MCxoPTA7dTxiO3UrKyxoKz1sPzM6MSl7Zm9yKGM9MSxmPTM7Yzx4LTE7YysrLGYrPTMpdj1uKFtyW3VdW2MtMV0sb1t1XVtjLTFdXSxbclt1XVtjXSxvW3VdW2NdXSxbclt1XVtjKzFdLG9bdV1bYysxXV0scyksdFtoXVtmLTFdPXZbMF1bMF0sZVtoXVtmLTFdPXZbMF1bMV0sdFtoXVtmKzFdPXZbMV1bMF0sZVtoXVtmKzFdPXZbMV1bMV07eT1hKFt0W2hdWzBdLGVbaF1bMF1dLFt0W2hdWzJdLGVbaF1bMl1dLFt0W2hdWzNdLGVbaF1bM11dKSx0W2hdWzFdPXlbMF0sZVtoXVsxXT15WzFdLHk9YShbdFtoXVtfLTFdLGVbaF1bXy0xXV0sW3RbaF1bXy0zXSxlW2hdW18tM11dLFt0W2hdW18tNF0sZVtoXVtfLTRdXSksdFtoXVtfLTJdPXlbMF0sZVtoXVtfLTJdPXlbMV19aWYobClmb3IoZj0wO2Y8XztmKyspe2ZvcihoPTM7aDx3LTM7aCs9Myl2PW4oW3RbaC0zXVtmXSxlW2gtM11bZl1dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2grM11bZl0sZVtoKzNdW2ZdXSxsKSx0W2gtMV1bZl09dlswXVswXSxlW2gtMV1bZl09dlswXVsxXSx0W2grMV1bZl09dlsxXVswXSxlW2grMV1bZl09dlsxXVsxXTt5PWEoW3RbMF1bZl0sZVswXVtmXV0sW3RbMl1bZl0sZVsyXVtmXV0sW3RbM11bZl0sZVszXVtmXV0pLHRbMV1bZl09eVswXSxlWzFdW2ZdPXlbMV0seT1hKFt0W3ctMV1bZl0sZVt3LTFdW2ZdXSxbdFt3LTNdW2ZdLGVbdy0zXVtmXV0sW3Rbdy00XVtmXSxlW3ctNF1bZl1dKSx0W3ctMl1bZl09eVswXSxlW3ctMl1bZl09eVsxXX1pZihzJiZsKWZvcihoPTE7aDx3O2grPShoKzEpJTM9PTA/MjoxKXtmb3IoZj0zO2Y8Xy0zO2YrPTMpdj1uKFt0W2hdW2YtM10sZVtoXVtmLTNdXSxbdFtoXVtmXSxlW2hdW2ZdXSxbdFtoXVtmKzNdLGVbaF1bZiszXV0scyksdFtoXVtmLTFdPS41Kih0W2hdW2YtMV0rdlswXVswXSksZVtoXVtmLTFdPS41KihlW2hdW2YtMV0rdlswXVsxXSksdFtoXVtmKzFdPS41Kih0W2hdW2YrMV0rdlsxXVswXSksZVtoXVtmKzFdPS41KihlW2hdW2YrMV0rdlsxXVsxXSk7eT1hKFt0W2hdWzBdLGVbaF1bMF1dLFt0W2hdWzJdLGVbaF1bMl1dLFt0W2hdWzNdLGVbaF1bM11dKSx0W2hdWzFdPS41Kih0W2hdWzFdK3lbMF0pLGVbaF1bMV09LjUqKGVbaF1bMV0reVsxXSkseT1hKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09LjUqKHRbaF1bXy0yXSt5WzBdKSxlW2hdW18tMl09LjUqKGVbaF1bXy0yXSt5WzFdKX1yZXR1cm5bdCxlXX19LHsiLi4vLi4vbGliIjo1MDMsIi4vY2F0bXVsbF9yb20iOjY5OX1dLDcwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1JFTEFUSVZFX0NVTExfVE9MRVJBTkNFOjFlLTZ9fSx7fV0sNzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGY7ZXx8KGU9W10pLHIqPTMsbio9Mzt2YXIgaD1pKmkscD0xLWksZD1wKnAsbT1wKmkqMixnPS0zKmQsdj0zKihkLW0pLHk9MyoobS1oKSx4PTMqaCxiPWEqYSxfPWIqYSx3PTEtYSxUPXcqdyxrPVQqdztmb3IoZj0wO2Y8dC5sZW5ndGg7ZisrKW89ZyoodT10W2ZdKVtuXVtyXSt2KnVbbl1bcisxXSt5KnVbbl1bcisyXSt4KnVbbl1bciszXSxzPWcqdVtuKzFdW3JdK3YqdVtuKzFdW3IrMV0reSp1W24rMV1bcisyXSt4KnVbbisxXVtyKzNdLGw9Zyp1W24rMl1bcl0rdip1W24rMl1bcisxXSt5KnVbbisyXVtyKzJdK3gqdVtuKzJdW3IrM10sYz1nKnVbbiszXVtyXSt2KnVbbiszXVtyKzFdK3kqdVtuKzNdW3IrMl0reCp1W24rM11bciszXSxlW2ZdPWsqbyszKihUKmEqcyt3KmIqbCkrXypjO3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLHIqPTM7dmFyIHU9aSppLGY9MS1pLGg9ZipmLHA9ZippKjIsZD0tMypoLG09MyooaC1wKSxnPTMqKHAtdSksdj0zKnUseT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPWQqKGM9dFtsXSlbbl1bcl0rbSpjW25dW3IrMV0rZypjW25dW3IrMl0rdipjW25dW3IrM10scz1kKmNbbisxXVtyXSttKmNbbisxXVtyKzFdK2cqY1tuKzFdW3IrMl0rdipjW24rMV1bciszXSxlW2xdPXkqbythKnM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGY7ZXx8KGU9W10pLG4qPTM7dmFyIGg9YSphLHA9aCphLGQ9MS1hLG09ZCpkLGc9bSpkO2Zvcih1PTA7dTx0Lmxlbmd0aDt1Kyspbz0oZj10W3VdKVtuXVtyKzFdLWZbbl1bcl0scz1mW24rMV1bcisxXS1mW24rMV1bcl0sbD1mW24rMl1bcisxXS1mW24rMl1bcl0sYz1mW24rM11bcisxXS1mW24rM11bcl0sZVt1XT1nKm8rMyoobSphKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSk7dmFyIHU9MS1hO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz0oYz10W2xdKVtuXVtyKzFdLWNbbl1bcl0scz1jW24rMV1bcisxXS1jW24rMV1bcl0sZVtsXT11Km8rYSpzO3JldHVybiBlfX19LHt9XSw3MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBoPWkqaSxwPWgqaSxkPTEtaSxtPWQqZCxnPW0qZCx2PWEqYSx5PTEtYSx4PXkqeSxiPXkqYSoyLF89LTMqeCx3PTMqKHgtYiksVD0zKihiLXYpLGs9Myp2O2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspbz1fKih1PXRbZl0pW25dW3JdK3cqdVtuKzFdW3JdK1QqdVtuKzJdW3JdK2sqdVtuKzNdW3JdLHM9Xyp1W25dW3IrMV0rdyp1W24rMV1bcisxXStUKnVbbisyXVtyKzFdK2sqdVtuKzNdW3IrMV0sbD1fKnVbbl1bcisyXSt3KnVbbisxXVtyKzJdK1QqdVtuKzJdW3IrMl0rayp1W24rM11bcisyXSxjPV8qdVtuXVtyKzNdK3cqdVtuKzFdW3IrM10rVCp1W24rMl1bciszXStrKnVbbiszXVtyKzNdLGVbZl09ZypvKzMqKG0qaSpzK2QqaCpsKStwKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGY7ZXx8KGU9W10pLHIqPTM7dmFyIGg9YSphLHA9aCphLGQ9MS1hLG09ZCpkLGc9bSpkO2Zvcih1PTA7dTx0Lmxlbmd0aDt1Kyspbz0oZj10W3VdKVtuKzFdW3JdLWZbbl1bcl0scz1mW24rMV1bcisxXS1mW25dW3IrMV0sbD1mW24rMV1bcisyXS1mW25dW3IrMl0sYz1mW24rMV1bciszXS1mW25dW3IrM10sZVt1XT1nKm8rMyoobSphKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKSxuKj0zO3ZhciB1PTEtaSxmPWEqYSxoPTEtYSxwPWgqaCxkPWgqYSoyLG09LTMqcCxnPTMqKHAtZCksdj0zKihkLWYpLHk9MypmO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz1tKihjPXRbbF0pW25dW3JdK2cqY1tuKzFdW3JdK3YqY1tuKzJdW3JdK3kqY1tuKzNdW3JdLHM9bSpjW25dW3IrMV0rZypjW24rMV1bcisxXSt2KmNbbisyXVtyKzFdK3kqY1tuKzNdW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWk7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW24rMV1bcl0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbl1bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9fX0se31dLDcwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1lLTIsbz1yLTI7cmV0dXJuIG4mJmk/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLHMsbCxjLHUsZjtlfHwoZT1bXSk7dmFyIGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1oKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7aCo9MyxwKj0zO3ZhciBnPWQqZCx2PWcqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPW0qbSx3PV8qbSxUPTEtbSxrPVQqVCxBPWsqVDtmb3IoZj0wO2Y8dC5sZW5ndGg7ZisrKWk9YioodT10W2ZdKVtwXVtoXSszKih4KmQqdVtwXVtoKzFdK3kqZyp1W3BdW2grMl0pK3YqdVtwXVtoKzNdLHM9Yip1W3ArMV1baF0rMyooeCpkKnVbcCsxXVtoKzFdK3kqZyp1W3ArMV1baCsyXSkrdip1W3ArMV1baCszXSxsPWIqdVtwKzJdW2hdKzMqKHgqZCp1W3ArMl1baCsxXSt5KmcqdVtwKzJdW2grMl0pK3YqdVtwKzJdW2grM10sYz1iKnVbcCszXVtoXSszKih4KmQqdVtwKzNdW2grMV0reSpnKnVbcCszXVtoKzJdKSt2KnVbcCszXVtoKzNdLGVbZl09QSppKzMqKGsqbSpzK1QqXypsKSt3KmM7cmV0dXJuIGV9Om4/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtoKj0zO3ZhciBnPWQqZCx2PWcqZCx5PTEtZCx4PXkqeSxiPXgqeSxfPTEtbTtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooZj10W3VdKVtwXVtoXSttKmZbcCsxXVtoXSxzPV8qZltwXVtoKzFdK20qZltwKzFdW2grMV0sbD1fKmZbcF1baCsyXSttKmZbcCsxXVtoKzFdLGM9XypmW3BdW2grM10rbSpmW3ArMV1baCsxXSxlW3VdPWIqaSszKih4KmQqcyt5KmcqbCkrdipjO3JldHVybiBlfTppP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdSxmLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1oKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7cCo9Mzt2YXIgZz1tKm0sdj1nKm0seT0xLW0seD15KnksYj14KnksXz0xLWQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylpPV8qKGY9dFt1XSlbcF1baF0rZCpmW3BdW2grMV0scz1fKmZbcCsxXVtoXStkKmZbcCsxXVtoKzFdLGw9XypmW3ArMl1baF0rZCpmW3ArMl1baCsxXSxjPV8qZltwKzNdW2hdK2QqZltwKzNdW2grMV0sZVt1XT1iKmkrMyooeCptKnMreSpnKmwpK3YqYztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1PU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSksZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItdSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tZikpLGQ9MS1wLG09MS1oO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspaT1tKihjPXRbbF0pW2ZdW3VdK2gqY1tmXVt1KzFdLHM9bSpjW2YrMV1bdV0raCpjW2YrMV1bdSsxXSxlW2xdPWQqaStwKnM7cmV0dXJuIGV9fX0se31dLDcwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHlfZGVmYXVsdHMiKSxhPXQoIi4vYWJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1lLl9jbGlwUGF0aElkPSJjbGlwIitlLnVpZCsiY2FycGV0Ijt2YXIgdT1jKCJjb2xvciIscy5kZWZhdWx0TGluZSk7KG4uY29lcmNlRm9udChjLCJmb250IiksYygiY2FycGV0IiksYSh0LGUsbCxjLHUpLGUuYSYmZS5iKT8oZS5hLmxlbmd0aDwzJiYoZS5hYXhpcy5zbW9vdGhpbmc9MCksZS5iLmxlbmd0aDwzJiYoZS5iYXhpcy5zbW9vdGhpbmc9MCksaSh0LGUsYyl8fChlLnZpc2libGU9ITEpLGUuX2NoZWF0ZXImJmMoImNoZWF0ZXJzbG9wZSIpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9saWIiOjUwMywiLi9hYl9kZWZhdWx0cyI6Njg5LCIuL2F0dHJpYnV0ZXMiOjY5MSwiLi94eV9kZWZhdWx0cyI6NzE1fV0sNzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikscGxvdDp0KCIuL3Bsb3QiKSxjYWxjOnQoIi4vY2FsYyIpLGFuaW1hdGFibGU6ITAsaXNDb250YWluZXI6ITAsbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhcnBldCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNhcnBldEF4aXMiLCJub3RMZWdlbmRJc29sYXRhYmxlIiwibm9NdWx0aUNhdGVnb3J5Iiwibm9Ib3ZlciIsIm5vU29ydGluZ0J5VmFsdWUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi9hdHRyaWJ1dGVzIjo2OTEsIi4vY2FsYyI6Njk1LCIuL2RlZmF1bHRzIjo3MDYsIi4vcGxvdCI6NzEyfV0sNzA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQuX2Z1bGxEYXRhLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dC5fZnVsbERhdGFbaV07aWYoYS5pbmRleCE9PWUuaW5kZXgmJigiY2FycGV0Ij09PWEudHlwZSYmKHJ8fChyPWEpLGEuY2FycGV0PT09ZS5jYXJwZXQpKSlyZXR1cm4gYX1yZXR1cm4gcn19LHt9XSw3MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIiI7dmFyIG4saT1bXSxhPXI/MzoxO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKz1hKWkucHVzaCh0W25dKyIsIitlW25dKSxyJiZuPHQubGVuZ3RoLWEmJihpLnB1c2goIkMiKSxpLnB1c2goW3RbbisxXSsiLCIrZVtuKzFdLHRbbisyXSsiLCIrZVtuKzJdKyIgIl0uam9pbigiICIpKSk7cmV0dXJuIGkuam9pbihyPyIiOiJMIil9fSx7fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtmb3Iobih0KT90Lmxlbmd0aD5lLmxlbmd0aCYmKHQ9dC5zbGljZSgwLGUubGVuZ3RoKSk6dD1bXSxpPTA7aTxlLmxlbmd0aDtpKyspdFtpXT1yKGVbaV0pO3JldHVybiB0fX0seyIuLi8uLi9saWIiOjUwM31dLDcxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWlbMF0qdC5kcGR4KGUpLHM9aVsxXSp0LmRwZHkociksbD0xLGM9MTtpZihhKXt2YXIgdT1NYXRoLnNxcnQoaVswXSppWzBdK2lbMV0qaVsxXSksZj1NYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSksaD0oaVswXSphWzBdK2lbMV0qYVsxXSkvdS9mO2M9TWF0aC5tYXgoMCxoKX12YXIgcD0xODAqTWF0aC5hdGFuMihzLG8pL01hdGguUEk7cmV0dXJuIHA8LTkwPyhwKz0xODAsbD0tbCk6cD45MCYmKHAtPTE4MCxsPS1sKSx7YW5nbGU6cCxmbGlwOmwscDp0LmMycChuLGUsciksb2Zmc2V0TXVsdHBsaWVyOmN9fX0se31dLDcxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4vbWFwXzFkX2FycmF5Iiksbz10KCIuL21ha2VwYXRoIikscz10KCIuL29yaWVudF90ZXh0IiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2xpYiIpLHU9Yy5zdHJSb3RhdGUsZj1jLnN0clRyYW5zbGF0ZSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKTtmdW5jdGlvbiBwKHQsZSxyLGkscyxsKXt2YXIgYz0iY29uc3QtIitzKyItbGluZXMiLHU9ci5zZWxlY3RBbGwoIi4iK2MpLmRhdGEobCk7dS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoYywhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKSx1LmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPXIscz1pLngsbD1pLnksYz1hKFtdLHMsdC5jMnApLHU9YShbXSxsLGUuYzJwKSxmPSJNIitvKGMsdSxpLnNtb290aGluZyk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZikuc3R5bGUoInN0cm9rZS13aWR0aCIsaS53aWR0aCkuc3R5bGUoInN0cm9rZSIsaS5jb2xvcikuc3R5bGUoImZpbGwiLCJub25lIil9KSksdS5leGl0KCkucmVtb3ZlKCl9ZnVuY3Rpb24gZCh0LGUscixhLG8sYyxoLHApe3ZhciBkPWMuc2VsZWN0QWxsKCJ0ZXh0LiIrcCkuZGF0YShoKTtkLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChwLCEwKTt2YXIgbT0wLGc9e307cmV0dXJuIGQuZWFjaCgoZnVuY3Rpb24obyxjKXt2YXIgaDtpZigiYXV0byI9PT1vLmF4aXMudGlja2FuZ2xlKWg9cyhhLGUscixvLnh5LG8uZHh5KTtlbHNle3ZhciBwPShvLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7aD1zKGEsZSxyLG8ueHksW01hdGguY29zKHApLE1hdGguc2luKHApXSl9Y3x8KGc9e2FuZ2xlOmguYW5nbGUsZmxpcDpoLmZsaXB9KTt2YXIgZD0oby5lbmRBbmNob3I/LTE6MSkqaC5mbGlwLHY9bi5zZWxlY3QodGhpcykuYXR0cih7InRleHQtYW5jaG9yIjpkPjA/InN0YXJ0IjoiZW5kIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwoaS5mb250LG8uZm9udCkudGV4dChvLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCkseT1pLmJCb3godGhpcyk7di5hdHRyKCJ0cmFuc2Zvcm0iLGYoaC5wWzBdLGgucFsxXSkrdShoLmFuZ2xlKStmKG8uYXhpcy5sYWJlbHBhZGRpbmcqZCwuMyp5LmhlaWdodCkpLG09TWF0aC5tYXgobSx5LndpZHRoK28uYXhpcy5sYWJlbHBhZGRpbmcpfSkpLGQuZXhpdCgpLnJlbW92ZSgpLGcubWF4RXh0ZW50PW0sZ31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXMsZj10Ll9mdWxsTGF5b3V0Ll9jbGlwcztjLm1ha2VUcmFjZUdyb3VwcyhpLHIsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT1lWzBdLGg9aS50cmFjZSxtPWguYWF4aXMsZz1oLmJheGlzLHk9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1pbm9ybGF5ZXIiKSx4PWMuZW5zdXJlU2luZ2xlKHIsImciLCJtYWpvcmxheWVyIiksYj1jLmVuc3VyZVNpbmdsZShyLCJnIiwiYm91bmRhcnlsYXllciIpLF89Yy5lbnN1cmVTaW5nbGUociwiZyIsImxhYmVsbGF5ZXIiKTtyLnN0eWxlKCJvcGFjaXR5IixoLm9wYWNpdHkpLHAobCx1LHgsbSwiYSIsbS5fZ3JpZGxpbmVzKSxwKGwsdSx4LGcsImIiLGcuX2dyaWRsaW5lcykscChsLHUseSxtLCJhIixtLl9taW5vcmdyaWRsaW5lcykscChsLHUseSxnLCJiIixnLl9taW5vcmdyaWRsaW5lcykscChsLHUsYixtLCJhLWJvdW5kYXJ5IixtLl9ib3VuZGFyeWxpbmVzKSxwKGwsdSxiLGcsImItYm91bmRhcnkiLGcuX2JvdW5kYXJ5bGluZXMpO3ZhciB3PWQodCxsLHUsaCxpLF8sbS5fbGFiZWxzLCJhLWxhYmVsIiksVD1kKHQsbCx1LGgsaSxfLGcuX2xhYmVscywiYi1sYWJlbCIpOyFmdW5jdGlvbih0LGUscixuLGksYSxvLGwpe3ZhciB1LGYsaCxwLGQ9Yy5hZ2dOdW1zKE1hdGgubWluLG51bGwsci5hKSxtPWMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHIuYSksZz1jLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLmIpLHk9Yy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsci5iKTt1PS41KihkK20pLGY9ZyxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxmKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGgsci5keHlkYl9yb3VnaCh1LGYpKSk7dih0LGUscixuLGgscCxyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksdT1kLGY9LjUqKGcreSksaD1yLmFiMnh5KHUsZiwhMCkscD1yLmR4eWRiX3JvdWdoKHUsZiksdm9pZCAwPT09bC5hbmdsZSYmYy5leHRlbmRGbGF0KGwscyhyLGksYSxoLHIuZHh5ZGFfcm91Z2godSxmKSkpO3YodCxlLHIsbixoLHAsci5iYXhpcyxpLGEsbCwiYi10aXRsZSIpfSh0LF8saCxpLGwsdSx3LFQpLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIHMsbCx1LGYsaD1yLnNlbGVjdCgiIyIrdC5fY2xpcFBhdGhJZCk7aC5zaXplKCl8fChoPXIuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNhcnBldGNsaXAiLCEwKSk7dmFyIHA9Yy5lbnN1cmVTaW5nbGUoaCwicGF0aCIsImNhcnBldGJvdW5kYXJ5IiksZD1lLmNsaXBzZWdtZW50cyxtPVtdO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspcz1kW2ZdLGw9YShbXSxzLngsbi5jMnApLHU9YShbXSxzLnksaS5jMnApLG0ucHVzaChvKGwsdSxzLmJpY3ViaWMpKTt2YXIgZz0iTSIrbS5qb2luKCJMIikrIloiO2guYXR0cigiaWQiLHQuX2NsaXBQYXRoSWQpLHAuYXR0cigiZCIsZyl9KGgsaSxmLGwsdSl9KSl9O3ZhciBtPWguTElORV9TUEFDSU5HLGc9KDEtaC5NSURfU0hJRlQpL20rMTtmdW5jdGlvbiB2KHQsZSxyLGEsbyxjLGgscCxkLHYseSl7dmFyIHg9W107aC50aXRsZS50ZXh0JiZ4LnB1c2goaC50aXRsZS50ZXh0KTt2YXIgYj1lLnNlbGVjdEFsbCgidGV4dC4iK3kpLmRhdGEoeCksXz12Lm1heEV4dGVudDtiLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh5LCEwKSxiLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9cyhyLHAsZCxvLGMpOy0xPT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGguc2hvd3RpY2tsYWJlbHMpJiYoXz0wKTt2YXIgYT1oLnRpdGxlLmZvbnQuc2l6ZTtfKz1hK2gudGl0bGUub2Zmc2V0O3ZhciB5PSh2LmFuZ2xlKyh2LmZsaXA8MD8xODA6MCktZS5hbmdsZSs0NTApJTM2MCx4PXk+OTAmJnk8MjcwLGI9bi5zZWxlY3QodGhpcyk7Yi50ZXh0KGgudGl0bGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx4JiYoXz0oLWwubGluZUNvdW50KGIpK2cpKm0qYS1fKSxiLmF0dHIoInRyYW5zZm9ybSIsZihlLnBbMF0sZS5wWzFdKSt1KGUuYW5nbGUpK2YoMCxfKSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGkuZm9udCxoLnRpdGxlLmZvbnQpfSkpLGIuZXhpdCgpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4vbWFrZXBhdGgiOjcwOSwiLi9tYXBfMWRfYXJyYXkiOjcxMCwiLi9vcmllbnRfdGV4dCI6NzExLCJAcGxvdGx5L2QzIjo1OH1dLDcxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliL3NlYXJjaCIpLmZpbmRCaW4sYT10KCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiKSxvPXQoIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiKSxzPXQoIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKSxsPXQoIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYSxyPXQuX2IsYz1lLmxlbmd0aCx1PXIubGVuZ3RoLGY9dC5hYXhpcyxoPXQuYmF4aXMscD1lWzBdLGQ9ZVtjLTFdLG09clswXSxnPXJbdS0xXSx2PWVbZS5sZW5ndGgtMV0tZVswXSx5PXJbci5sZW5ndGgtMV0tclswXSx4PXYqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRSxiPXkqbi5SRUxBVElWRV9DVUxMX1RPTEVSQU5DRTtwLT14LGQrPXgsbS09YixnKz1iLHQuaXNWaXNpYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+cCYmdDxkJiZlPm0mJmU8Z30sdC5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8cHx8dD5kfHxlPG18fGU+Z30sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQuX3gscj10Ll95LG49YSh0Ll94Y3RybCx0Ll95Y3RybCxlLHIsZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpO3QuX3hjdHJsPW5bMF0sdC5feWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0Ll94Y3RybCx0Ll95Y3RybF0sYyx1LGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRpPXMoW3QuX3hjdHJsLHQuX3ljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyksdC5keHlkaj1sKFt0Ll94Y3RybCx0Ll95Y3RybF0sZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksYy0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksYy0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLGMtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihjLTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSx1LTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odS0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW2MtMV18aTxyWzBdfHxpPnJbdS0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgZixoLHAsZCxtPTAsZz0wLHY9W107bjxlWzBdPyhmPTAsaD0wLG09KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVtjLTFdPyhmPWMtMixoPTEsbT0obi1lW2MtMV0pLyhlW2MtMV0tZVtjLTJdKSk6aD1vLShmPU1hdGgubWF4KDAsTWF0aC5taW4oYy0yLE1hdGguZmxvb3IobykpKSksaTxyWzBdPyhwPTAsZD0wLGc9KGktclswXSkvKHJbMV0tclswXSkpOmk+clt1LTFdPyhwPXUtMixkPTEsZz0oaS1yW3UtMV0pLyhyW3UtMV0tclt1LTJdKSk6ZD1zLShwPU1hdGgubWF4KDAsTWF0aC5taW4odS0yLE1hdGguZmxvb3IocykpKSksbSYmKHQuZHh5ZGkodixmLHAsaCxkKSxsWzBdKz12WzBdKm0sbFsxXSs9dlsxXSptKSxnJiYodC5keHlkaih2LGYscCxoLGQpLGxbMF0rPXZbMF0qZyxsWzFdKz12WzFdKmcpfXJldHVybiBsfSx0LmMycD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UuYzJwKHRbMF0pLHIuYzJwKHRbMV0pXX0sdC5wMng9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLnAyYyh0WzBdKSxyLnAyYyh0WzFdKV19LHQuZGFkaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGUubGVuZ3RoLTIsdCkpO3JldHVybiBlW3IrMV0tZVtyXX0sdC5kYmRqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMix0KSk7cmV0dXJuIHJbZSsxXS1yW2VdfSx0LmR4eWRhPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGkobnVsbCxlLHIsbixpKSxvPXQuZGFkaShlLG4pO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRqKG51bGwsZSxyLG4saSksbz10LmRiZGoocixpKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGFfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXYqKG58fC4xKSxhPXQuYWIyeHkoZStpLHIsITApLG89dC5hYjJ4eShlLWksciwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHh5ZGJfcm91Z2g9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXkqKG58fC4xKSxhPXQuYWIyeHkoZSxyK2ksITApLG89dC5hYjJ4eShlLHItaSwhMCk7cmV0dXJuWy41KihhWzBdLW9bMF0pL2ksLjUqKGFbMV0tb1sxXSkvaV19LHQuZHBkeD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX0sdC5kcGR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfX19LHsiLi4vLi4vbGliL3NlYXJjaCI6NTIzLCIuL2NvbXB1dGVfY29udHJvbF9wb2ludHMiOjcwMSwiLi9jb25zdGFudHMiOjcwMiwiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciI6NzAzLCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo3MDQsIi4vY3JlYXRlX3NwbGluZV9ldmFsdWF0b3IiOjcwNX1dLDcxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPVtdLGw9W10sYz10WzBdLmxlbmd0aCx1PXQubGVuZ3RoO2Z1bmN0aW9uIGYoZSxyKXt2YXIgbixpPTAsYT0wO3JldHVybiBlPjAmJnZvaWQgMCE9PShuPXRbcl1bZS0xXSkmJihhKyssaSs9biksZTxjLTEmJnZvaWQgMCE9PShuPXRbcl1bZSsxXSkmJihhKyssaSs9bikscj4wJiZ2b2lkIDAhPT0obj10W3ItMV1bZV0pJiYoYSsrLGkrPW4pLHI8dS0xJiZ2b2lkIDAhPT0obj10W3IrMV1bZV0pJiYoYSsrLGkrPW4pLGkvTWF0aC5tYXgoMSxhKX12YXIgaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQ9MDtmb3IoaT0wO2k8YztpKyspZm9yKGE9MDthPHU7YSsrKXZvaWQgMD09PXRbYV1baV0mJihzLnB1c2goaSksbC5wdXNoKGEpLHRbYV1baV09ZihpLGEpKSxUPU1hdGgubWF4KFQsTWF0aC5hYnModFthXVtpXSkpO2lmKCFzLmxlbmd0aClyZXR1cm4gdDt2YXIgaz0wLEE9MCxNPXMubGVuZ3RoO2Rve2ZvcihrPTAsbz0wO288TTtvKyspe2k9c1tvXSxhPWxbb107dmFyIFMsRSxMLEMsUCxJLE89MCx6PTA7MD09PWk/KEw9ZVtQPU1hdGgubWluKGMtMSwyKV0sQz1lWzFdLFM9dFthXVtQXSx6Kz0oRT10W2FdWzFdKSsoRS1TKSooZVswXS1DKS8oQy1MKSxPKyspOmk9PT1jLTEmJihMPWVbUD1NYXRoLm1heCgwLGMtMyldLEM9ZVtjLTJdLFM9dFthXVtQXSx6Kz0oRT10W2FdW2MtMl0pKyhFLVMpKihlW2MtMV0tQykvKEMtTCksTysrKSwoMD09PWl8fGk9PT1jLTEpJiZhPjAmJmE8dS0xJiYoaD1yW2ErMV0tclthXSx6Kz0oKHA9clthXS1yW2EtMV0pKnRbYSsxXVtpXStoKnRbYS0xXVtpXSkvKHAraCksTysrKSwwPT09YT8oTD1yW0k9TWF0aC5taW4odS0xLDIpXSxDPXJbMV0sUz10W0ldW2ldLHorPShFPXRbMV1baV0pKyhFLVMpKihyWzBdLUMpLyhDLUwpLE8rKyk6YT09PXUtMSYmKEw9cltJPU1hdGgubWF4KDAsdS0zKV0sQz1yW3UtMl0sUz10W0ldW2ldLHorPShFPXRbdS0yXVtpXSkrKEUtUykqKHJbdS0xXS1DKS8oQy1MKSxPKyspLCgwPT09YXx8YT09PXUtMSkmJmk+MCYmaTxjLTEmJihoPWVbaSsxXS1lW2ldLHorPSgocD1lW2ldLWVbaS0xXSkqdFthXVtpKzFdK2gqdFthXVtpLTFdKS8ocCtoKSxPKyspLE8/ei89TzooZD1lW2krMV0tZVtpXSxtPWVbaV0tZVtpLTFdLHg9KGc9clthKzFdLXJbYV0pKih2PXJbYV0tclthLTFdKSooZyt2KSx6PSgoeT1kKm0qKGQrbSkpKih2KnRbYSsxXVtpXStnKnRbYS0xXVtpXSkreCoobSp0W2FdW2krMV0rZCp0W2FdW2ktMV0pKS8oeCoobStkKSt5Kih2K2cpKSksays9KF89KGI9ei10W2FdW2ldKS9UKSpfLHc9Tz8wOi44NSx0W2FdW2ldKz1iKigxK3cpfWs9TWF0aC5zcXJ0KGspfXdoaWxlKEErKzwxMDAmJms+MWUtNSk7cmV0dXJuIG4ubG9nKCJTbW9vdGhlciBjb252ZXJnZWQgdG8iLGssImFmdGVyIixBLCJpdGVyYXRpb25zIiksdH19LHsiLi4vLi4vbGliIjo1MDN9XSw3MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheTFEO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9cigieCIpLGE9aSYmaS5sZW5ndGgsbz1yKCJ5Iikscz1vJiZvLmxlbmd0aDtpZighYSYmIXMpcmV0dXJuITE7aWYoZS5fY2hlYXRlcj0haSxhJiYhbihpKXx8cyYmIW4obykpZS5fbGVuZ3RoPW51bGw7ZWxzZXt2YXIgbD1hP2kubGVuZ3RoOjEvMDtzJiYobD1NYXRoLm1pbihsLG8ubGVuZ3RoKSksZS5hJiZlLmEubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYS5sZW5ndGgpKSxlLmImJmUuYi5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5iLmxlbmd0aCkpLGUuX2xlbmd0aD1sfXJldHVybiEwfX0seyIuLi8uLi9saWIiOjUwM31dLDcxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdExpbmUsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPWkubWFya2VyLmxpbmU7ZS5leHBvcnRzPWwoe2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb2NhdGlvbm1vZGU6aS5sb2NhdGlvbm1vZGUsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxnZW9qc29uOmwoe30saS5nZW9qc29uLHt9KSxmZWF0dXJlaWRrZXk6aS5mZWF0dXJlaWRrZXksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLG1hcmtlcjp7bGluZTp7Y29sb3I6bCh7fSxjLmNvbG9yLHtkZmx0OnN9KSx3aWR0aDpsKHt9LGMud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OmkudW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOmwoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbImxvY2F0aW9uIiwieiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKSxzaG93bGVnZW5kOmwoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9LGEoIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjMzLCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjk2OH1dLDcxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjPWUuX2xlbmd0aCx1PW5ldyBBcnJheShjKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gbCh0KXx8bih0KX06bDtmb3IodmFyIGY9MDtmPGM7ZisrKXt2YXIgaD11W2ZdPXt9LHA9ZS5sb2NhdGlvbnNbZl0sZD1lLnpbZl07cihwKSYmbihkKT8oaC5sb2M9cCxoLno9ZCk6KGgubG9jPW51bGwsaC56PWkpLGguaW5kZXg9Zn1yZXR1cm4gbyh1LGUpLGEodCxlLHt2YWxzOmUueixjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KSxzKHUsZSksdX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM3NCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6OTI1LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjgsImZhc3QtaXNudW1lcmljIjoxOTB9XSw3MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6Iik7aWYobCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGgpe2UuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk7dmFyIHUsZj1zKCJnZW9qc29uIik7KCJzdHJpbmciPT10eXBlb2YgZiYmIiIhPT1mfHxuLmlzUGxhaW5PYmplY3QoZikpJiYodT0iZ2VvanNvbi1pZCIpLCJnZW9qc29uLWlkIj09PXMoImxvY2F0aW9ubW9kZSIsdSkmJnMoImZlYXR1cmVpZGtleSIpLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIikscygibWFya2VyLmxpbmUud2lkdGgiKSYmcygibWFya2VyLmxpbmUuY29sb3IiKSxzKCJtYXJrZXIub3BhY2l0eSIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscyl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6Mzc2LCIuLi8uLi9saWIiOjUwMywiLi9hdHRyaWJ1dGVzIjo3MTZ9XSw3MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLno7dmFyIGE9bltpXTtyZXR1cm4gYS5mSW4mJmEuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9YS5mSW4ucHJvcGVydGllcyksdC5jdD1hLmN0LHR9fSx7fV0sNzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10LmNkLGY9dVswXS50cmFjZSxoPXQuc3VicGxvdCxwPVtlLHJdLGQ9W2UrMzYwLHJdO2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoYz0hMSwobz11W3NdKS5fcG9seWdvbnMpe2ZvcihsPTA7bDxvLl9wb2x5Z29ucy5sZW5ndGg7bCsrKW8uX3BvbHlnb25zW2xdLmNvbnRhaW5zKHApJiYoYz0hYyksby5fcG9seWdvbnNbbF0uY29udGFpbnMoZCkmJihjPSFjKTtpZihjKWJyZWFrfWlmKGMmJm8pcmV0dXJuIHQueDA9dC54MT10LnhhLmMycChvLmN0KSx0LnkwPXQueTE9dC55YS5jMnAoby5jdCksdC5pbmRleD1vLmluZGV4LHQubG9jYXRpb249by5sb2MsdC56PW8ueix0LnpMYWJlbD1uLnRpY2tUZXh0KGgubW9ja0F4aXMsaC5tb2NrQXhpcy5jMmwoby56KSwiaG92ZXIiKS50ZXh0LHQuaG92ZXJ0ZW1wbGF0ZT1vLmhvdmVydGVtcGxhdGUsZnVuY3Rpb24odCxlLHIpe2lmKGUuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIG49ci5oaXx8ZS5ob3ZlcmluZm8sbz1TdHJpbmcoci5sb2MpLHM9ImFsbCI9PT1uP2kuaG92ZXJpbmZvLmZsYWdzOm4uc3BsaXQoIisiKSxsPS0xIT09cy5pbmRleE9mKCJuYW1lIiksYz0tMSE9PXMuaW5kZXhPZigibG9jYXRpb24iKSx1PS0xIT09cy5pbmRleE9mKCJ6IiksZj0tMSE9PXMuaW5kZXhPZigidGV4dCIpLGg9W107IWwmJmM/dC5uYW1lT3ZlcnJpZGU9bzoobCYmKHQubmFtZU92ZXJyaWRlPWUubmFtZSksYyYmaC5wdXNoKG8pKTt1JiZoLnB1c2godC56TGFiZWwpO2YmJmEocixlLGgpO3QuZXh0cmFUZXh0PWguam9pbigiPGJyPiIpfSh0LGYsbyksW3RdfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi9hdHRyaWJ1dGVzIjo3MTZ9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksY2FsYzp0KCIuL2NhbGMiKSxjYWxjR2VvSlNPTjp0KCIuL3Bsb3QiKS5jYWxjR2VvSlNPTixwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2VvIiksY2F0ZWdvcmllczpbImdlbyIsIm5vT3BhY2l0eSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nZW8iOjU4OSwiLi4vaGVhdG1hcC9jb2xvcmJhciI6Nzk1LCIuL2F0dHJpYnV0ZXMiOjcxNiwiLi9jYWxjIjo3MTcsIi4vZGVmYXVsdHMiOjcxOCwiLi9ldmVudF9kYXRhIjo3MTksIi4vaG92ZXIiOjcyMCwiLi9wbG90Ijo3MjIsIi4vc2VsZWN0Ijo3MjMsIi4vc3R5bGUiOjcyNH1dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPWVbci5nZW9dLGk9bi5fc3VicGxvdCxsPXIubG9jYXRpb25tb2RlLGM9ci5fbGVuZ3RoLHU9Imdlb2pzb24taWQiPT09bD9hLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6byhyLGkudG9wb2pzb24pLGY9W10saD1bXSxwPTA7cDxjO3ArKyl7dmFyIGQ9dFtwXSxtPSJnZW9qc29uLWlkIj09PWw/ZC5mT3V0OmEubG9jYXRpb25Ub0ZlYXR1cmUobCxkLmxvYyx1KTtpZihtKXtkLmdlb2pzb249bSxkLmN0PW0ucHJvcGVydGllcy5jdCxkLl9wb2x5Z29ucz1hLmZlYXR1cmUycG9seWdvbnMobSk7dmFyIGc9YS5jb21wdXRlQmJveChtKTtmLnB1c2goZ1swXSxnWzJdKSxoLnB1c2goZ1sxXSxnWzNdKX1lbHNlIGQuZ2VvanNvbj1udWxsfWlmKCJnZW9qc29uIj09PW4uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1sKXt2YXIgdj1hLmNvbXB1dGVCYm94KGEuZ2V0VHJhY2VHZW9qc29uKHIpKTtmPVt2WzBdLHZbMl1dLGg9W3ZbMV0sdlszXV19dmFyIHk9e3BhZGRlZDohMH07ci5fZXh0cmVtZXMubG9uPXMobi5sb25heGlzLl9heCxmLHkpLHIuX2V4dHJlbWVzLmxhdD1zKG4ubGF0YXhpcy5fYXgsaCx5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGE9ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBjaG9yb3BsZXRoIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmNob3JvcGxldGhsb2NhdGlvbiIpLmRhdGEoaS5pZGVudGl0eSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNob3JvcGxldGhsb2NhdGlvbiIsITApLHIuZXhpdCgpLnJlbW92ZSgpLGwodCxlKX0pKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTYsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NTMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo1NTMsIi4vc3R5bGUiOjcyNCwiQHBsb3RseS9kMyI6NTh9XSw3MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sNzI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWVbMF0udHJhY2Uscz1lWzBdLm5vZGUzLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLGw9ci5tYXJrZXJ8fHt9LGM9bC5saW5lfHx7fSx1PW8ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpO3MuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSkpLGEuc2VsZWN0ZWRQb2ludFN0eWxlKHMscix0KX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmcyh0LGUpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLG4sdCk6cyh0LGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIkBwbG90bHkvZDMiOjU4fV0sNzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Nob3JvcGxldGgvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTpzKHt9LG4uZmVhdHVyZWlka2V5LHt9KSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxtYXJrZXI6e2xpbmU6e2NvbG9yOnMoe30sbi5tYXJrZXIubGluZS5jb2xvcix7ZWRpdFR5cGU6InBsb3QifSksd2lkdGg6cyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cyh7fSxuLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6cyh7fSxuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OnMoe30sbi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOm4uaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpbInByb3BlcnRpZXMiXX0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0saSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vY2hvcm9wbGV0aC9hdHRyaWJ1dGVzIjo3MTZ9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rLGw9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10WzBdLnRyYWNlLG49ci5fb3B0cztpZihyLnNlbGVjdGVkcG9pbnRzKXtmb3IodmFyIGE9by5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHIpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsLmZPdXQmJihsLmZPdXQucHJvcGVydGllcy5tbzI9YS5zZWxlY3RlZE9wYWNpdHlGbihsKSl9ZT17dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbzIifX1lbHNlIGU9aS5pc0FycmF5T3JUeXBlZEFycmF5KHIubWFya2VyLm9wYWNpdHkpP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ci5tYXJrZXIub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG4uZmlsbC5wYWludCx7ImZpbGwtb3BhY2l0eSI6ZX0pLGkuZXh0ZW5kRmxhdChuLmxpbmUucGFpbnQseyJsaW5lLW9wYWNpdHkiOmV9KSxufWUuZXhwb3J0cz17Y29udmVydDpmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsbz17bGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319LHU9e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxmPWUuX29wdHM9e2ZpbGw6byxsaW5lOnUsZ2VvanNvbjpzKCl9O2lmKCFyKXJldHVybiBmO3ZhciBoPWwuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTtpZighaClyZXR1cm4gZjt2YXIgcCxkLG0sZz1hLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShlKSx2PWUubWFya2VyLHk9di5saW5lfHx7fTtpLmlzQXJyYXlPclR5cGVkQXJyYXkodi5vcGFjaXR5KSYmKHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tbztyZXR1cm4gbihlKT8raS5jb25zdHJhaW4oZSwwLDEpOjB9KSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcikmJihkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1sY30pLGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LndpZHRoKSYmKG09ZnVuY3Rpb24odCl7cmV0dXJuIHQubWx3fSk7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF0sXz1iLmZPdXQ7aWYoXyl7dmFyIHc9Xy5wcm9wZXJ0aWVzO3cuZmM9ZyhiLnopLHAmJih3Lm1vPXAoYikpLGQmJih3Lm1sYz1kKGIpKSxtJiYody5tbHc9bShiKSksYi5jdD13LmN0LGIuX3BvbHlnb25zPWwuZmVhdHVyZTJwb2x5Z29ucyhfKX19dmFyIFQ9cD97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OnYub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG8ucGFpbnQseyJmaWxsLWNvbG9yIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJmYyJ9LCJmaWxsLW9wYWNpdHkiOlR9KSxpLmV4dGVuZEZsYXQodS5wYWludCx7ImxpbmUtY29sb3IiOmQ/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWxjIn06eS5jb2xvciwibGluZS13aWR0aCI6bT97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbHcifTp5LndpZHRoLCJsaW5lLW9wYWNpdHkiOlR9KSxvLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIix1LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixmLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpofSxjKHQpLGZ9LGNvbnZlcnRPblNlbGVjdDpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo0OTYsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo0OTcsImZhc3QtaXNudW1lcmljIjoxOTB9XSw3Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6IiksdT1zKCJnZW9qc29uIik7bi5pc0FycmF5T3JUeXBlZEFycmF5KGwpJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCYmKCJzdHJpbmciPT10eXBlb2YgdSYmIiIhPT11fHxuLmlzUGxhaW5PYmplY3QodSkpPyhzKCJmZWF0dXJlaWRrZXkiKSxlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3NiwiLi4vLi4vbGliIjo1MDMsIi4vYXR0cmlidXRlcyI6NzI1fV0sNzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vY2hvcm9wbGV0aC9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuLi9jaG9yb3BsZXRoL2hvdmVyIiksZXZlbnREYXRhOnQoIi4uL2Nob3JvcGxldGgvZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuLi9jaG9yb3BsZXRoL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZU9uU2VsZWN0KGUpfSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49ci5sZW5ndGgtMjtuPj0wO24tLSl7dmFyIGk9cltuXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIGkmJjA9PT1pLmluZGV4T2YoIndhdGVyIikpZm9yKHZhciBhPW4rMTthPHIubGVuZ3RoO2ErKylpZigic3RyaW5nIj09dHlwZW9mKGk9clthXS5pZCkmJi0xPT09aS5pbmRleE9mKCJwbG90bHktIikpcmV0dXJuIGl9fSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aG1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwibm9PcGFjaXR5Iiwic2hvd0xlZ2VuZCJdLG1ldGE6e2hyX25hbWU6ImNob3JvcGxldGhfbWFwYm94In19fSx7Ii4uLy4uL3Bsb3RzL21hcGJveCI6NjEzLCIuLi9jaG9yb3BsZXRoL2NhbGMiOjcxNywiLi4vY2hvcm9wbGV0aC9ldmVudF9kYXRhIjo3MTksIi4uL2Nob3JvcGxldGgvaG92ZXIiOjcyMCwiLi4vY2hvcm9wbGV0aC9zZWxlY3QiOjcyMywiLi4vaGVhdG1hcC9jb2xvcmJhciI6Nzk1LCIuL2F0dHJpYnV0ZXMiOjcyNSwiLi9kZWZhdWx0cyI6NzI3LCIuL3Bsb3QiOjcyOX1dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnZlcnQiKS5jb252ZXJ0LGk9dCgiLi9jb252ZXJ0IikuY29udmVydE9uU2VsZWN0LGE9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXg7ZnVuY3Rpb24gbyh0LGUpe3RoaXMudHlwZT0iY2hvcm9wbGV0aG1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkPSJzb3VyY2UtIitlLHRoaXMubGF5ZXJMaXN0PVtbImZpbGwiLGErZSsiLWZpbGwiXSxbImxpbmUiLGErZSsiLWxpbmUiXV0sdGhpcy5iZWxvdz1udWxsfXZhciBzPW8ucHJvdG90eXBlO3MudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZShuKHQpKX0scy51cGRhdGVPblNlbGVjdD1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUoaSh0KSl9LHMuX3VwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj10aGlzLmxheWVyTGlzdCxuPWUuYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2UubWFwLmdldFNvdXJjZSh0aGlzLnNvdXJjZUlkKS5zZXREYXRhKHQuZ2VvanNvbiksbiE9PXRoaXMuYmVsb3cmJih0aGlzLl9yZW1vdmVMYXllcnMoKSx0aGlzLl9hZGRMYXllcnModCxuKSx0aGlzLmJlbG93PW4pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89YVswXSxzPWFbMV0sbD10W29dO2Uuc2V0T3B0aW9ucyhzLCJzZXRMYXlvdXRQcm9wZXJ0eSIsbC5sYXlvdXQpLCJ2aXNpYmxlIj09PWwubGF5b3V0LnZpc2liaWxpdHkmJmUuc2V0T3B0aW9ucyhzLCJzZXRQYWludFByb3BlcnR5IixsLnBhaW50KX19LHMuX2FkZExheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN1YnBsb3Qsbj10aGlzLmxheWVyTGlzdCxpPXRoaXMuc291cmNlSWQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9b1swXSxsPXRbc107ci5hZGRMYXllcih7dHlwZTpzLGlkOm9bMV0sc291cmNlOmksbGF5b3V0OmwubGF5b3V0LHBhaW50OmwucGFpbnR9LGUpfX0scy5fcmVtb3ZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT10aGlzLmxheWVyTGlzdCxyPWUubGVuZ3RoLTE7cj49MDtyLS0pdC5yZW1vdmVMYXllcihlW3JdWzFdKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0aGlzLl9yZW1vdmVMYXllcnMoKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxpPW5ldyBvKHQsci51aWQpLGE9aS5zb3VyY2VJZCxzPW4oZSksbD1pLmJlbG93PXQuYmVsb3dMb29rdXBbInRyYWNlLSIrci51aWRdO3JldHVybiB0Lm1hcC5hZGRTb3VyY2UoYSx7dHlwZToiZ2VvanNvbiIsZGF0YTpzLmdlb2pzb259KSxpLl9hZGRMYXllcnMocyxsKSxlWzBdLnRyYWNlLl9nbFRyYWNlPWksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6NjExLCIuL2NvbnZlcnQiOjcyNn1dLDczMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJhYnNvbHV0ZSJdLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJzY2FsZWQifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidGlwIiwidGFpbCIsImNtIiwiY2VudGVyIl0sZGZsdDoiY20ifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJub3JtIl19KSx1aG92ZXJmb3JtYXQ6aSgidSIsMSksdmhvdmVyZm9ybWF0OmkoInYiLDEpLHdob3ZlcmZvcm1hdDppKCJ3IiwxKSx4aG92ZXJmb3JtYXQ6aSgieCIpLHlob3ZlcmZvcm1hdDppKCJ5IiksemhvdmVyZm9ybWF0OmkoInoiKSxzaG93bGVnZW5kOmwoe30scy5zaG93bGVnZW5kLHtkZmx0OiExfSl9O2woYyxuKCIiLHtjb2xvckF0dHI6InUvdi93IG5vcm0iLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSk7WyJvcGFjaXR5IiwibGlnaHRwb3NpdGlvbiIsImxpZ2h0aW5nIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Y1t0XT1vW3RdfSkpLGMuaG92ZXJpbmZvPWwoe30scy5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJ0ZXh0IiwibmFtZSJdLGRmbHQ6IngreSt6K25vcm0rdGV4dCtuYW1lIn0pLGMudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWN9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjg2N31dLDczMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnUsaT1lLnYsYT1lLncsbz1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxyLmxlbmd0aCxpLmxlbmd0aCxhLmxlbmd0aCkscz0tMS8wLGw9MS8wLGM9MDtjPG87YysrKXt2YXIgdT1yW2NdLGY9aVtjXSxoPWFbY10scD1NYXRoLnNxcnQodSp1K2YqZitoKmgpO3M9TWF0aC5tYXgocyxwKSxsPU1hdGgubWluKGwscCl9ZS5fbGVuPW8sZS5fbm9ybU1heD1zLG4odCxlLHt2YWxzOltsLHNdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6Mzc0fV0sNzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2NvbmUzZCxpPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2NvbmUzZC5jcmVhdGVDb25lTWVzaCxhPXQoIi4uLy4uL2xpYiIpLnNpbXBsZU1hcCxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxsPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIGModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLm1lc2g9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLnhbZV0sbj10aGlzLmRhdGEueVtlXSxpPXRoaXMuZGF0YS56W2VdLGE9dGhpcy5kYXRhLnVbZV0sbz10aGlzLmRhdGEudltlXSxzPXRoaXMuZGF0YS53W2VdO3QudHJhY2VDb29yZGluYXRlPVtyLG4saSxhLG8scyxNYXRoLnNxcnQoYSphK28qbytzKnMpXTt2YXIgbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmdm9pZCAwIT09bFtlXT90LnRleHRMYWJlbD1sW2VdOmwmJih0LnRleHRMYWJlbD1sKSwhMH19O3ZhciBmPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn0saD17dGlwOjEsdGFpbDowLGNtOi4yNSxjZW50ZXI6LjV9LHA9e3RpcDoxLHRhaWw6MSxjbTouNzUsY2VudGVyOi41fTtmdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPXt9O2Z1bmN0aW9uIHUodCxlKXt2YXIgbj1yW2VdLG89aVtmW2VdXTtyZXR1cm4gYSh0LChmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pKX1jLnZlY3RvcnM9bCh1KGUudSwieGF4aXMiKSx1KGUudiwieWF4aXMiKSx1KGUudywiemF4aXMiKSxlLl9sZW4pLGMucG9zaXRpb25zPWwodShlLngsInhheGlzIiksdShlLnksInlheGlzIiksdShlLnosInpheGlzIiksZS5fbGVuKTt2YXIgZD1zKGUpO2MuY29sb3JtYXA9byhlKSxjLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZC5taW4vZS5fbm9ybU1heCxkLm1heC9lLl9ub3JtTWF4XSxjLmNvbmVPZmZzZXQ9aFtlLmFuY2hvcl0sInNjYWxlZCI9PT1lLnNpemVtb2RlP2MuY29uZVNpemU9ZS5zaXplcmVmfHwuNTpjLmNvbmVTaXplPWUuc2l6ZXJlZiYmZS5fbm9ybU1heD9lLnNpemVyZWYvZS5fbm9ybU1heDouNTt2YXIgbT1uKGMpLGc9ZS5saWdodHBvc2l0aW9uO3JldHVybiBtLmxpZ2h0UG9zaXRpb249W2cueCxnLnksZy56XSxtLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LG0uZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsbS5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLG0ucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLG0uZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsbS5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9cFtlLmFuY2hvcl0qbS52ZWN0b3JTY2FsZSptLmNvbmVTY2FsZSplLl9ub3JtTWF4LG19dS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5kYXRhPXQ7dmFyIGU9ZCh0aGlzLnNjZW5lLHQpO3RoaXMubWVzaC51cGRhdGUoZSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLG49ZCh0LGUpLGE9aShyLG4pLG89bmV3IGModCxlLnVpZCk7cmV0dXJuIG8ubWVzaD1hLG8uZGF0YT1lLGEuX3RyYWNlPW8sdC5nbHBsb3QuYWRkKGEpLG99fSx7Ii4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyI6MTEyMCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo0OTksIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6NjA5fV0sNzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoInUiKSxjPXMoInYiKSx1PXMoInciKSxmPXMoIngiKSxoPXMoInkiKSxwPXMoInoiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKCJzaXplcmVmIikscygic2l6ZW1vZGUiKSxzKCJhbmNob3IiKSxzKCJsaWdodGluZy5hbWJpZW50IikscygibGlnaHRpbmcuZGlmZnVzZSIpLHMoImxpZ2h0aW5nLnNwZWN1bGFyIikscygibGlnaHRpbmcucm91Z2huZXNzIikscygibGlnaHRpbmcuZnJlc25lbCIpLHMoImxpZ2h0cG9zaXRpb24ueCIpLHMoImxpZ2h0cG9zaXRpb24ueSIpLHMoImxpZ2h0cG9zaXRpb24ueiIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJ1aG92ZXJmb3JtYXQiKSxzKCJ2aG92ZXJmb3JtYXQiKSxzKCJ3aG92ZXJmb3JtYXQiKSxzKCJ4aG92ZXJmb3JtYXQiKSxzKCJ5aG92ZXJmb3JtYXQiKSxzKCJ6aG92ZXJmb3JtYXQiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3NiwiLi4vLi4vbGliIjo1MDMsIi4vYXR0cmlidXRlcyI6NzMwfV0sNzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbmUiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0fSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo1OTgsIi4vYXR0cmlidXRlcyI6NzMwLCIuL2NhbGMiOjczMSwiLi9jb252ZXJ0Ijo3MzIsIi4vZGVmYXVsdHMiOjczM31dLDczNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKSxvPWEuYXhpc0hvdmVyRm9ybWF0LHM9YS5kZXNjcmlwdGlvbk9ubHlOdW1iZXJzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCx1PXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLHA9aC5DT01QQVJJU09OX09QUzIsZD1oLklOVEVSVkFMX09QUyxtPWkubGluZTtlLmV4cG9ydHM9Zih7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSx4dHlwZTpuLnh0eXBlLHl0eXBlOm4ueXR5cGUseGhvdmVyZm9ybWF0Om8oIngiKSx5aG92ZXJmb3JtYXQ6bygieSIpLHpob3ZlcmZvcm1hdDpvKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSx0ZXh0dGVtcGxhdGU6Zih7fSxuLnRleHR0ZW1wbGF0ZSx7fSksdGV4dGZvbnQ6Zih7fSxuLnRleHRmb250LHt9KSxob3Zlcm9uZ2FwczpuLmhvdmVyb25nYXBzLGNvbm5lY3RnYXBzOmYoe30sbi5jb25uZWN0Z2Fwcyx7fSksZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxhdXRvY29udG91cjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiY29udG91cnMuc3RhcnQiOnZvaWQgMCwiY29udG91cnMuZW5kIjp2b2lkIDAsImNvbnRvdXJzLnNpemUiOnZvaWQgMH19LG5jb250b3Vyczp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXJzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZXZlbHMiLCJjb25zdHJhaW50Il0sZGZsdDoibGV2ZWxzIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGVuZDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiaGVhdG1hcCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc2hvd2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDp1KHtlZGl0VHlwZToicGxvdCIsY29sb3JFZGl0VHlwZToic3R5bGUifSksbGFiZWxmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246cygiY29udG91ciBsYWJlbCIpfSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQocCkuY29uY2F0KGQpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpmKHt9LG0uY29sb3Ise2VkaXRUeXBlOiJzdHlsZStjb2xvcmJhcnMifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9LGRhc2g6YyxzbW9vdGhpbmc6Zih7fSxtLnNtb290aGluZyx7fSksZWRpdFR5cGU6InBsb3QifX0sbCgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6Mzg3LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDc1LCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjc5MiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjZ9XSw3MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksaT10KCIuLi9oZWF0bWFwL2NhbGMiKSxhPXQoIi4vc2V0X2NvbnRvdXJzIiksbz10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0LGUpLHM9clswXS56O2EoZSxzKTt2YXIgbCxjPWUuY29udG91cnMsdT1uLmV4dHJhY3RPcHRzKGUpO2lmKCJoZWF0bWFwIj09PWMuY29sb3JpbmcmJnUuYXV0byYmITE9PT1lLmF1dG9jb250b3VyKXt2YXIgZj1jLnN0YXJ0LGg9byhjKSxwPWMuc2l6ZXx8MSxkPU1hdGguZmxvb3IoKGgtZikvcCkrMTtpc0Zpbml0ZShwKXx8KHA9MSxkPTEpO3ZhciBtPWYtcC8yO2w9W20sbStkKnBdfWVsc2UgbD1zO3JldHVybiBuLmNhbGModCxlLHt2YWxzOmwsY0xldHRlcjoieiJ9KSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vaGVhdG1hcC9jYWxjIjo3OTMsIi4vZW5kX3BsdXMiOjc0NiwiLi9zZXRfY29udG91cnMiOjc1NH1dLDczNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0saT1uLno7c3dpdGNoKGUudHlwZSl7Y2FzZSJsZXZlbHMiOnZhciBhPU1hdGgubWluKGlbMF1bMF0saVswXVsxXSk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTtvLnByZWZpeEJvdW5kYXJ5PSFvLmVkZ2VwYXRocy5sZW5ndGgmJihhPm8ubGV2ZWx8fG8uc3RhcnRzLmxlbmd0aCYmYT09PW8ubGV2ZWwpfWJyZWFrO2Nhc2UiY29uc3RyYWludCI6aWYobi5wcmVmaXhCb3VuZGFyeT0hMSxuLmVkZ2VwYXRocy5sZW5ndGgpcmV0dXJuO3ZhciBzPW4ueC5sZW5ndGgsbD1uLnkubGVuZ3RoLGM9LTEvMCx1PTEvMDtmb3Iocj0wO3I8bDtyKyspdT1NYXRoLm1pbih1LGlbcl1bMF0pLHU9TWF0aC5taW4odSxpW3JdW3MtMV0pLGM9TWF0aC5tYXgoYyxpW3JdWzBdKSxjPU1hdGgubWF4KGMsaVtyXVtzLTFdKTtmb3Iocj0xO3I8cy0xO3IrKyl1PU1hdGgubWluKHUsaVswXVtyXSksdT1NYXRoLm1pbih1LGlbbC0xXVtyXSksYz1NYXRoLm1heChjLGlbMF1bcl0pLGM9TWF0aC5tYXgoYyxpW2wtMV1bcl0pO3ZhciBmLGgscD1lLnZhbHVlO3N3aXRjaChlLl9vcGVyYXRpb24pe2Nhc2UiPiI6cD5jJiYobi5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSI8IjoocDx1fHxuLnN0YXJ0cy5sZW5ndGgmJnA9PT11KSYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiW10iOmY9TWF0aC5taW4ocFswXSxwWzFdKSwoKGg9TWF0aC5tYXgocFswXSxwWzFdKSk8dXx8Zj5jfHxuLnN0YXJ0cy5sZW5ndGgmJmg9PT11KSYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmY9TWF0aC5taW4ocFswXSxwWzFdKSxoPU1hdGgubWF4KHBbMF0scFsxXSksZjx1JiZoPmMmJihuLnByZWZpeEJvdW5kYXJ5PSEwKX19fX0se31dLDczODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxpPXQoIi4vbWFrZV9jb2xvcl9tYXAiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9e21pbjoiem1pbiIsbWF4OiJ6bWF4IixjYWxjOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1lLmNvbnRvdXJzLHM9ZS5saW5lLGw9by5zaXplfHwxLGM9by5jb2xvcmluZyx1PWkoZSx7aXNDb2xvcmJhcjohMH0pO2lmKCJoZWF0bWFwIj09PWMpe3ZhciBmPW4uZXh0cmFjdE9wdHMoZSk7ci5fZmlsbGdyYWRpZW50PWYucmV2ZXJzZXNjYWxlP24uZmxpcFNjYWxlKGYuY29sb3JzY2FsZSk6Zi5jb2xvcnNjYWxlLHIuX3pyYW5nZT1bZi5taW4sZi5tYXhdfWVsc2UiZmlsbCI9PT1jJiYoci5fZmlsbGNvbG9yPXUpO3IuX2xpbmU9e2NvbG9yOiJsaW5lcyI9PT1jP3U6cy5jb2xvcix3aWR0aDohMSE9PW8uc2hvd2xpbmVzP3Mud2lkdGg6MCxkYXNoOnMuZGFzaH0sci5fbGV2ZWxzPXtzdGFydDpvLnN0YXJ0LGVuZDphKG8pLHNpemU6bH19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi9lbmRfcGx1cyI6NzQ2LCIuL21ha2VfY29sb3JfbWFwIjo3NTF9XSw3Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCT1RUT01TVEFSVDpbMSw5LDEzLDEwNCw3MTNdLFRPUFNUQVJUOls0LDYsNywxMDQsNzEzXSxMRUZUU1RBUlQ6WzgsMTIsMTQsMjA4LDExMTRdLFJJR0hUU1RBUlQ6WzIsMywxMSwyMDgsMTExNF0sTkVXREVMVEE6W251bGwsWy0xLDBdLFswLC0xXSxbLTEsMF0sWzEsMF0sbnVsbCxbMCwtMV0sWy0xLDBdLFswLDFdLFswLDFdLG51bGwsWzAsMV0sWzEsMF0sWzEsMF0sWzAsLTFdXSxDSE9PU0VTQURETEU6ezEwNDpbNCwxXSwyMDg6WzIsOF0sNzEzOls3LDEzXSwxMTE0OlsxMSwxNF19LFNBRERMRVJFTUFJTkRFUjp7MTo0LDI6OCw0OjEsNzoxMyw4OjIsMTE6MTQsMTM6NywxNDoxMX0sTEFCRUxESVNUQU5DRToyLExBQkVMSU5DUkVBU0U6MTAsTEFCRUxNSU46MyxMQUJFTE1BWDoxMCxMQUJFTE9QVElNSVpFUjp7RURHRUNPU1Q6MSxBTkdMRUNPU1Q6MSxORUlHSEJPUkNPU1Q6NSxTQU1FTEVWRUxGQUNUT1I6MTAsU0FNRUxFVkVMRElTVEFOQ0U6NSxNQVhDT1NUOjEwMCxJTklUSUFMU0VBUkNIUE9JTlRTOjEwLElURVJBVElPTlM6NX19fSx7fV0sNzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xhYmVsX2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz1hLmFkZE9wYWNpdHkscz1hLm9wYWNpdHksbD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGM9bC5DT05TVFJBSU5UX1JFRFVDVElPTix1PWwuQ09NUEFSSVNPTl9PUFMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsZil7dmFyIGgscCxkLG09ZS5jb250b3VycyxnPXIoImNvbnRvdXJzLm9wZXJhdGlvbiIpOyhtLl9vcGVyYXRpb249Y1tnXSxmdW5jdGlvbih0LGUpe3ZhciByOy0xPT09dS5pbmRleE9mKGUub3BlcmF0aW9uKT8odCgiY29udG91cnMudmFsdWUiLFswLDFdKSxBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWUubGVuZ3RoPjI/ZS52YWx1ZT1lLnZhbHVlLnNsaWNlKDIpOjA9PT1lLmxlbmd0aD9lLnZhbHVlPVswLDFdOmUubGVuZ3RoPDI/KHI9cGFyc2VGbG9hdChlLnZhbHVlWzBdKSxlLnZhbHVlPVtyLHIrMV0pOmUudmFsdWU9W3BhcnNlRmxvYXQoZS52YWx1ZVswXSkscGFyc2VGbG9hdChlLnZhbHVlWzFdKV06bihlLnZhbHVlKSYmKHI9cGFyc2VGbG9hdChlLnZhbHVlKSxlLnZhbHVlPVtyLHIrMV0pKToodCgiY29udG91cnMudmFsdWUiLDApLG4oZS52YWx1ZSl8fChBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWU9cGFyc2VGbG9hdChlLnZhbHVlWzBdKTplLnZhbHVlPTApKX0ocixtKSwiPSI9PT1nP2g9bS5zaG93bGluZXM9ITA6KGg9cigiY29udG91cnMuc2hvd2xpbmVzIiksZD1yKCJmaWxsY29sb3IiLG8oKHQubGluZXx8e30pLmNvbG9yfHxsLC41KSkpLGgpJiYocD1yKCJsaW5lLmNvbG9yIixkJiZzKGQpP28oZS5maWxsY29sb3IsMSk6bCkscigibGluZS53aWR0aCIsMikscigibGluZS5kYXNoIikpO3IoImxpbmUuc21vb3RoaW5nIiksaShyLGEscCxmKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDc1LCIuL2xhYmVsX2RlZmF1bHRzIjo3NTAsImZhc3QtaXNudW1lcmljIjoxOTB9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxpPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByLGE9QXJyYXkuaXNBcnJheShlKTtmdW5jdGlvbiBvKHQpe3JldHVybiBpKHQpPyt0Om51bGx9cmV0dXJuLTEhPT1uLkNPTVBBUklTT05fT1BTMi5pbmRleE9mKHQpP3I9byhhP2VbMF06ZSk6LTEhPT1uLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP3I9YT9bbyhlWzBdKSxvKGVbMV0pXTpbbyhlKSxvKGUpXTotMSE9PW4uU0VUX09QUy5pbmRleE9mKHQpJiYocj1hP2UubWFwKG8pOltvKGUpXSkscn1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPWEodCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLG49TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6bixzaXplOm4tcn19fWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybntzdGFydDplPWEodCxlKSxlbmQ6MS8wLHNpemU6MS8wfX19ZS5leHBvcnRzPXsiW10iOm8oIltdIiksIl1bIjpvKCJdWyIpLCI+IjpzKCI+IiksIjwiOnMoIjwiKSwiPSI6cygiPSIpfX0seyIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDc1LCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNzQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uKCJjb250b3Vycy5zdGFydCIpLGE9bigiY29udG91cnMuZW5kIiksbz0hMT09PWl8fCExPT09YSxzPXIoImNvbnRvdXJzLnNpemUiKTshKG8/ZS5hdXRvY29udG91cj0hMDpyKCJhdXRvY29udG91ciIsITEpKSYmc3x8cigibmNvbnRvdXJzIil9fSx7fV0sNzQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG4uZXh0ZW5kRmxhdCh7fSx0LHtlZGdlcGF0aHM6bi5leHRlbmREZWVwKFtdLHQuZWRnZXBhdGhzKSxwYXRoczpuLmV4dGVuZERlZXAoW10sdC5wYXRocyksc3RhcnRzOm4uZXh0ZW5kRGVlcChbXSx0LnN0YXJ0cyl9KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scz1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXZlcnNlKCl9LGw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3N3aXRjaChlKXtjYXNlIj0iOmNhc2UiPCI6cmV0dXJuIHQ7Y2FzZSI+Ijpmb3IoMSE9PXQubGVuZ3RoJiZuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgb3BlcmF0aW9uLiIpLGE9dFswXSxyPTA7cjxhLmVkZ2VwYXRocy5sZW5ndGg7cisrKWEuZWRnZXBhdGhzW3JdPXMoYS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxhLnBhdGhzLmxlbmd0aDtyKyspYS5wYXRoc1tyXT1zKGEucGF0aHNbcl0pO2ZvcihyPTA7cjxhLnN0YXJ0cy5sZW5ndGg7cisrKWEuc3RhcnRzW3JdPXMoYS5zdGFydHNbcl0pO3JldHVybiB0O2Nhc2UiXVsiOnZhciBjPXM7cz1sLGw9YztjYXNlIltdIjpmb3IoMiE9PXQubGVuZ3RoJiZuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgcmFuZ2Ugb3BlcmF0aW9uLiIpLGE9aSh0WzBdKSxvPWkodFsxXSkscj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtmb3Iocj0wO3I8YS5zdGFydHMubGVuZ3RoO3IrKylhLnN0YXJ0c1tyXT1zKGEuc3RhcnRzW3JdKTtmb3IoO28uZWRnZXBhdGhzLmxlbmd0aDspYS5lZGdlcGF0aHMucHVzaChsKG8uZWRnZXBhdGhzLnNoaWZ0KCkpKTtmb3IoO28ucGF0aHMubGVuZ3RoOylhLnBhdGhzLnB1c2gobChvLnBhdGhzLnNoaWZ0KCkpKTtmb3IoO28uc3RhcnRzLmxlbmd0aDspYS5zdGFydHMucHVzaChsKG8uc3RhcnRzLnNoaWZ0KCkpKTtyZXR1cm5bYV19fX0seyIuLi8uLi9saWIiOjUwM31dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLG89dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuL3N0eWxlX2RlZmF1bHRzIiksYz10KCIuLi9oZWF0bWFwL2xhYmVsX2RlZmF1bHRzIiksdT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsdSxyLGkpfWlmKGkodCxlLGgsZikpe2EodCxlLGYsaCksaCgieGhvdmVyZm9ybWF0IiksaCgieWhvdmVyZm9ybWF0IiksaCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVyb25nYXBzIiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBwPSJjb25zdHJhaW50Ij09PWgoImNvbnRvdXJzLnR5cGUiKTtoKCJjb25uZWN0Z2FwcyIsbi5pc0FycmF5MUQoZS56KSkscD9vKHQsZSxoLGYscik6KHModCxlLGgsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLHUscil9KSksbCh0LGUsaCxmKSksZS5jb250b3VycyYmImhlYXRtYXAiPT09ZS5jb250b3Vycy5jb2xvcmluZyYmYyhoLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjUwMywiLi4vaGVhdG1hcC9sYWJlbF9kZWZhdWx0cyI6ODAyLCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6ODA3LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQ2LCIuL2F0dHJpYnV0ZXMiOjczNSwiLi9jb25zdHJhaW50X2RlZmF1bHRzIjo3NDAsIi4vY29udG91cnNfZGVmYXVsdHMiOjc0MiwiLi9zdHlsZV9kZWZhdWx0cyI6NzU2fV0sNzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdHJhaW50X21hcHBpbmciKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0iY29uc3RyYWludCI9PT10LnR5cGU/aVt0Ll9vcGVyYXRpb25dKHQudmFsdWUpOnQscz1vLnNpemUsbD1bXSxjPWEobyksdT1yLnRyYWNlLl9jYXJwZXRUcmFjZSxmPXU/e3hheGlzOnUuYWF4aXMseWF4aXM6dS5iYXhpcyx4OnIuYSx5OnIuYn06e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4OnIueCx5OnIueX0saD1vLnN0YXJ0O2g8YztoKz1zKWlmKGwucHVzaChuLmV4dGVuZEZsYXQoe2xldmVsOmgsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10sejpyLnosc21vb3RoaW5nOnIudHJhY2UubGluZS5zbW9vdGhpbmd9LGYpKSxsLmxlbmd0aD4xZTMpe24ud2FybigiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDAiLHQpO2JyZWFrfXJldHVybiBsfX0seyIuLi8uLi9saWIiOjUwMywiLi9jb25zdHJhaW50X21hcHBpbmciOjc0MSwiLi9lbmRfcGx1cyI6NzQ2fV0sNzQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSw3NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIG8odCxlLHIsbyxsKXt2YXIgYyx1PWUuam9pbigiLCIpLGY9dC5jcm9zc2luZ3NbdV0saD1mdW5jdGlvbih0LGUscil7dmFyIG49MCxhPTA7dD4yMCYmZT8yMDg9PT10fHwxMTE0PT09dD9uPTA9PT1yWzBdPzE6LTE6YT0wPT09clsxXT8xOi0xOi0xIT09aS5CT1RUT01TVEFSVC5pbmRleE9mKHQpP2E9MTotMSE9PWkuTEVGVFNUQVJULmluZGV4T2YodCk/bj0xOi0xIT09aS5UT1BTVEFSVC5pbmRleE9mKHQpP2E9LTE6bj0tMTtyZXR1cm5bbixhXX0oZixyLGUpLHA9W3ModCxlLFstaFswXSwtaFsxXV0pXSxkPXQuei5sZW5ndGgsbT10LnpbMF0ubGVuZ3RoLGc9ZS5zbGljZSgpLHY9aC5zbGljZSgpO2ZvcihjPTA7YzwxZTQ7YysrKXtpZihmPjIwPyhmPWkuQ0hPT1NFU0FERExFW2ZdWyhoWzBdfHxoWzFdKTwwPzA6MV0sdC5jcm9zc2luZ3NbdV09aS5TQURETEVSRU1BSU5ERVJbZl0pOmRlbGV0ZSB0LmNyb3NzaW5nc1t1XSwhKGg9aS5ORVdERUxUQVtmXSkpe24ubG9nKCJGb3VuZCBiYWQgbWFyY2hpbmcgaW5kZXg6IixmLGUsdC5sZXZlbCk7YnJlYWt9cC5wdXNoKHModCxlLGgpKSxlWzBdKz1oWzBdLGVbMV0rPWhbMV0sdT1lLmpvaW4oIiwiKSxhKHBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0yXSxvLGwpJiZwLnBvcCgpO3ZhciB5PWhbMF0mJihlWzBdPDB8fGVbMF0+bS0yKXx8aFsxXSYmKGVbMV08MHx8ZVsxXT5kLTIpO2lmKGVbMF09PT1nWzBdJiZlWzFdPT09Z1sxXSYmaFswXT09PXZbMF0mJmhbMV09PT12WzFdfHxyJiZ5KWJyZWFrO2Y9dC5jcm9zc2luZ3NbdV19MWU0PT09YyYmbi5sb2coIkluZmluaXRlIGxvb3AgaW4gY29udG91cj8iKTt2YXIgeCxiLF8sdyxULGssQSxNLFMsRSxMLEMsUCxJLE8sej1hKHBbMF0scFtwLmxlbmd0aC0xXSxvLGwpLEQ9MCxSPS4yKnQuc21vb3RoaW5nLEY9W10sQj0wO2ZvcihjPTE7YzxwLmxlbmd0aDtjKyspQz1wW2NdLFA9cFtjLTFdLEk9dm9pZCAwLE89dm9pZCAwLEk9Q1syXS1QWzJdLE89Q1szXS1QWzNdLEQrPUE9TWF0aC5zcXJ0KEkqSStPKk8pLEYucHVzaChBKTt2YXIgTj1EL0YubGVuZ3RoKlI7ZnVuY3Rpb24gaih0KXtyZXR1cm4gcFt0JXAubGVuZ3RoXX1mb3IoYz1wLmxlbmd0aC0yO2M+PUI7Yy0tKWlmKCh4PUZbY10pPE4pe2ZvcihfPTAsYj1jLTE7Yj49QiYmeCtGW2JdPE47Yi0tKXgrPUZbYl07aWYoeiYmYz09PXAubGVuZ3RoLTIpZm9yKF89MDtfPGImJngrRltfXTxOO18rKyl4Kz1GW19dO1Q9Yy1iK18rMSxrPU1hdGguZmxvb3IoKGMrYitfKzIpLzIpLHc9enx8YyE9PXAubGVuZ3RoLTI/enx8LTEhPT1iP1QlMj9qKGspOlsoaihrKVswXStqKGsrMSlbMF0pLzIsKGooaylbMV0raihrKzEpWzFdKS8yXTpwWzBdOnBbcC5sZW5ndGgtMV0scC5zcGxpY2UoYisxLGMtYisxLHcpLGM9YisxLF8mJihCPV8pLHomJihjPT09cC5sZW5ndGgtMj9wW19dPXBbcC5sZW5ndGgtMV06MD09PWMmJihwW3AubGVuZ3RoLTFdPXBbMF0pKX1mb3IocC5zcGxpY2UoMCxCKSxjPTA7YzxwLmxlbmd0aDtjKyspcFtjXS5sZW5ndGg9MjtpZighKHAubGVuZ3RoPDIpKWlmKHopcC5wb3AoKSx0LnBhdGhzLnB1c2gocCk7ZWxzZXtyfHxuLmxvZygiVW5jbG9zZWQgaW50ZXJpb3IgY29udG91cj8iLHQubGV2ZWwsZy5qb2luKCIsIikscC5qb2luKCJMIikpO3ZhciBVPSExO2ZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGg7TSsrKWlmKEU9dC5lZGdlcGF0aHNbTV0sIVUmJmEoRVswXSxwW3AubGVuZ3RoLTFdLG8sbCkpe3AucG9wKCksVT0hMDt2YXIgVj0hMTtmb3IoUz0wO1M8dC5lZGdlcGF0aHMubGVuZ3RoO1MrKylpZihhKChMPXQuZWRnZXBhdGhzW1NdKVtMLmxlbmd0aC0xXSxwWzBdLG8sbCkpe1Y9ITAscC5zaGlmdCgpLHQuZWRnZXBhdGhzLnNwbGljZShNLDEpLFM9PT1NP3QucGF0aHMucHVzaChwLmNvbmNhdChMKSk6KFM+TSYmUy0tLHQuZWRnZXBhdGhzW1NdPUwuY29uY2F0KHAsRSkpO2JyZWFrfVZ8fCh0LmVkZ2VwYXRoc1tNXT1wLmNvbmNhdChFKSl9Zm9yKE09MDtNPHQuZWRnZXBhdGhzLmxlbmd0aCYmIVU7TSsrKWEoKEU9dC5lZGdlcGF0aHNbTV0pW0UubGVuZ3RoLTFdLHBbMF0sbyxsKSYmKHAuc2hpZnQoKSx0LmVkZ2VwYXRoc1tNXT1FLmNvbmNhdChwKSxVPSEwKTtVfHx0LmVkZ2VwYXRocy5wdXNoKHApfX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lWzBdK01hdGgubWF4KHJbMF0sMCksaT1lWzFdK01hdGgubWF4KHJbMV0sMCksYT10LnpbaV1bbl0sbz10LnhheGlzLHM9dC55YXhpcztpZihyWzFdKXt2YXIgbD0odC5sZXZlbC1hKS8odC56W2ldW24rMV0tYSksYz0oMSE9PWw/KDEtbCkqby5jMmwodC54W25dKTowKSsoMCE9PWw/bCpvLmMybCh0LnhbbisxXSk6MCk7cmV0dXJuW28uYzJwKG8ubDJjKGMpLCEwKSxzLmMycCh0LnlbaV0sITApLG4rbCxpXX12YXIgdT0odC5sZXZlbC1hKS8odC56W2krMV1bbl0tYSksZj0oMSE9PXU/KDEtdSkqcy5jMmwodC55W2ldKTowKSsoMCE9PXU/dSpzLmMybCh0LnlbaSsxXSk6MCk7cmV0dXJuW28uYzJwKHQueFtuXSwhMCkscy5jMnAocy5sMmMoZiksITApLG4saSt1XX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEscyxsO2ZvcihlPWV8fC4wMSxyPXJ8fC4wMSxhPTA7YTx0Lmxlbmd0aDthKyspe2ZvcihzPXRbYV0sbD0wO2w8cy5zdGFydHMubGVuZ3RoO2wrKylvKHMscy5zdGFydHNbbF0sImVkZ2UiLGUscik7Zm9yKGk9MDtPYmplY3Qua2V5cyhzLmNyb3NzaW5ncykubGVuZ3RoJiZpPDFlNDspaSsrLG8ocyxPYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoIiwiKS5tYXAoTnVtYmVyKSx2b2lkIDAsZSxyKTsxZTQ9PT1pJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpfX19LHsiLi4vLi4vbGliIjo1MDMsIi4vY29uc3RhbnRzIjo3Mzl9XSw3NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe298fChvPXt9KSxvLmlzQ29udG91cj0hMDt2YXIgcz1pKHQsZSxyLGEsbyk7cmV0dXJuIHMmJnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTsiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGUmJihlLmZpbGxjb2xvciYmbi5vcGFjaXR5KGUuZmlsbGNvbG9yKT90LmNvbG9yPW4uYWRkT3BhY2l0eShlLmZpbGxjb2xvciwxKTplLmNvbnRvdXJzLnNob3dsaW5lcyYmbi5vcGFjaXR5KGUubGluZS5jb2xvcikmJih0LmNvbG9yPW4uYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsMSkpKX0pKSxzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uL2hlYXRtYXAvaG92ZXIiOjc5OX1dLDc0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxjb2xvcmJhcjp0KCIuL2NvbG9yYmFyIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjb250b3VyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJjb250b3VyIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTY4LCIuL2F0dHJpYnV0ZXMiOjczNSwiLi9jYWxjIjo3MzYsIi4vY29sb3JiYXIiOjczOCwiLi9kZWZhdWx0cyI6NzQ0LCIuL2hvdmVyIjo3NDgsIi4vcGxvdCI6NzUzLCIuL3N0eWxlIjo3NTV9XSw3NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2lmKGl8fChpPXt9KSx0KCJjb250b3Vycy5zaG93bGFiZWxzIikpe3ZhciBhPWUuZm9udDtuLmNvZXJjZUZvbnQodCwiY29udG91cnMubGFiZWxmb250Iix7ZmFtaWx5OmEuZmFtaWx5LHNpemU6YS5zaXplLGNvbG9yOnJ9KSx0KCJjb250b3Vycy5sYWJlbGZvcm1hdCIpfSExIT09aS5oYXNIb3ZlciYmdCgiemhvdmVyZm9ybWF0Iil9fSx7Ii4uLy4uL2xpYiI6NTAzfV0sNzUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWEoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz0ibGluZXMiPT09ZS5jb2xvcmluZz8wOjEsdT1pLmV4dHJhY3RPcHRzKHQpO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIGYsaCxwPXUucmV2ZXJzZXNjYWxlP2kuZmxpcFNjYWxlKHUuY29sb3JzY2FsZSk6dS5jb2xvcnNjYWxlLGQ9cC5sZW5ndGgsbT1uZXcgQXJyYXkoZCksZz1uZXcgQXJyYXkoZCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7dmFyIHY9dS5taW4seT11Lm1heDtmb3IoaD0wO2g8ZDtoKyspZj1wW2hdLG1baF09ZlswXSooeS12KSt2LGdbaF09ZlsxXTt2YXIgeD1uLmV4dGVudChbdix5LGUuc3RhcnQsZS5zdGFydCtzKihsLTEpXSksYj14W3Y8eT8wOjFdLF89eFt2PHk/MTowXTtiIT09diYmKG0uc3BsaWNlKDAsMCxiKSxnLnNwbGljZSgwLDAsZ1swXSkpLF8hPT15JiYobS5wdXNoKF8pLGcucHVzaChnW2cubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoaD0wO2g8ZDtoKyspZj1wW2hdLG1baF09KGZbMF0qKGwrYy0xKS1jLzIpKnMrcixnW2hdPWZbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46bSxyYW5nZTpnfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4vZW5kX3BsdXMiOjc0NiwiQHBsb3RseS9kMyI6NTh9XSw3NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHI9KGVbMF1bMF0+dD8wOjEpKyhlWzBdWzFdPnQ/MDoyKSsoZVsxXVsxXT50PzA6NCkrKGVbMV1bMF0+dD8wOjgpO3JldHVybiA1PT09cnx8MTA9PT1yP3Q+KGVbMF1bMF0rZVswXVsxXStlWzFdWzBdK2VbMV1bMV0pLzQ/NT09PXI/NzEzOjExMTQ6NT09PXI/MTA0OjIwODoxNT09PXI/MDpyfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyxzLGwsYyx1LGYsaD10WzBdLnoscD1oLmxlbmd0aCxkPWhbMF0ubGVuZ3RoLG09Mj09PXB8fDI9PT1kO2ZvcihyPTA7cjxwLTE7cisrKWZvcihvPVtdLDA9PT1yJiYobz1vLmNvbmNhdChuLkJPVFRPTVNUQVJUKSkscj09PXAtMiYmKG89by5jb25jYXQobi5UT1BTVEFSVCkpLGU9MDtlPGQtMTtlKyspZm9yKGE9by5zbGljZSgpLDA9PT1lJiYoYT1hLmNvbmNhdChuLkxFRlRTVEFSVCkpLGU9PT1kLTImJihhPWEuY29uY2F0KG4uUklHSFRTVEFSVCkpLHM9ZSsiLCIrcixsPVtbaFtyXVtlXSxoW3JdW2UrMV1dLFtoW3IrMV1bZV0saFtyKzFdW2UrMV1dXSxmPTA7Zjx0Lmxlbmd0aDtmKyspKGM9aSgodT10W2ZdKS5sZXZlbCxsKSkmJih1LmNyb3NzaW5nc1tzXT1jLC0xIT09YS5pbmRleE9mKGMpJiYodS5zdGFydHMucHVzaChbZSxyXSksbSYmLTEhPT1hLmluZGV4T2YoYyxhLmluZGV4T2YoYykrMSkmJnUuc3RhcnRzLnB1c2goW2Uscl0pKSl9fSx7Ii4vY29uc3RhbnRzIjo3Mzl9XSw3NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksdT10KCIuLi9oZWF0bWFwL3Bsb3QiKSxmPXQoIi4vbWFrZV9jcm9zc2luZ3MiKSxoPXQoIi4vZmluZF9hbGxfcGF0aHMiKSxwPXQoIi4vZW1wdHlfcGF0aGluZm8iKSxkPXQoIi4vY29udmVydF90b19jb25zdHJhaW50cyIpLG09dCgiLi9jbG9zZV9ib3VuZGFyaWVzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9Zy5MQUJFTE9QVElNSVpFUjtmdW5jdGlvbiB5KHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsZj0iIixoPTAscD10LmVkZ2VwYXRocy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSksZD0hMDtmdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX1mdW5jdGlvbiBnKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX1mdW5jdGlvbiB2KHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IoO3AubGVuZ3RoOyl7Zm9yKGM9YS5zbW9vdGhvcGVuKHQuZWRnZXBhdGhzW2hdLHQuc21vb3RoaW5nKSxmKz1kP2M6Yy5yZXBsYWNlKC9eTS8sIkwiKSxwLnNwbGljZShwLmluZGV4T2YoaCksMSkscj10LmVkZ2VwYXRoc1toXVt0LmVkZ2VwYXRoc1toXS5sZW5ndGgtMV0scz0tMSxvPTA7bzw0O28rKyl7aWYoIXIpe2kubG9nKCJNaXNzaW5nIGVuZD8iLGgsdCk7YnJlYWt9Zm9yKHU9cixNYXRoLmFicyh1WzFdLWVbMF1bMV0pPC4wMSYmIXYocik/bj1lWzFdOmcocik/bj1lWzBdOm0ocik/bj1lWzNdOnYocikmJihuPWVbMl0pLGw9MDtsPHQuZWRnZXBhdGhzLmxlbmd0aDtsKyspe3ZhciB5PXQuZWRnZXBhdGhzW2xdWzBdO01hdGguYWJzKHJbMF0tblswXSk8LjAxP01hdGguYWJzKHJbMF0teVswXSk8LjAxJiYoeVsxXS1yWzFdKSooblsxXS15WzFdKT49MCYmKG49eSxzPWwpOk1hdGguYWJzKHJbMV0tblsxXSk8LjAxP01hdGguYWJzKHJbMV0teVsxXSk8LjAxJiYoeVswXS1yWzBdKSooblswXS15WzBdKT49MCYmKG49eSxzPWwpOmkubG9nKCJlbmRwdCB0byBuZXdlbmRwdCBpcyBub3QgdmVydC4gb3IgaG9yei4iLHIsbix5KX1pZihyPW4scz49MClicmVhaztmKz0iTCIrbn1pZihzPT09dC5lZGdlcGF0aHMubGVuZ3RoKXtpLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha31oPXMsKGQ9LTE9PT1wLmluZGV4T2YoaCkpJiYoaD1wWzBdLGYrPSJaIil9Zm9yKGg9MDtoPHQucGF0aHMubGVuZ3RoO2grKylmKz1hLnNtb290aGNsb3NlZCh0LnBhdGhzW2hdLHQuc21vb3RoaW5nKTtyZXR1cm4gZn1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBhPWUud2lkdGgvMixvPWUuaGVpZ2h0LzIscz10LngsbD10LnksYz10LnRoZXRhLHU9TWF0aC5jb3MoYykqYSxmPU1hdGguc2luKGMpKmEsaD0ocz5uLmNlbnRlcj9uLnJpZ2h0LXM6cy1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGMpKm8pKSxwPShsPm4ubWlkZGxlP24uYm90dG9tLWw6bC1uLnRvcCkvKE1hdGguYWJzKGYpK01hdGguY29zKGMpKm8pO2lmKGg8MXx8cDwxKXJldHVybiAxLzA7dmFyIGQ9di5FREdFQ09TVCooMS8oaC0xKSsxLyhwLTEpKTtkKz12LkFOR0xFQ09TVCpjKmM7Zm9yKHZhciBtPXMtdSxnPWwtZix5PXMrdSx4PWwrZixiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciBfPXJbYl0sdz1NYXRoLmNvcyhfLnRoZXRhKSpfLndpZHRoLzIsVD1NYXRoLnNpbihfLnRoZXRhKSpfLndpZHRoLzIsaz0yKmkuc2VnbWVudERpc3RhbmNlKG0sZyx5LHgsXy54LXcsXy55LVQsXy54K3csXy55K1QpLyhlLmhlaWdodCtfLmhlaWdodCksQT1fLmxldmVsPT09ZS5sZXZlbCxNPUE/di5TQU1FTEVWRUxESVNUQU5DRToxO2lmKGs8PU0pcmV0dXJuIDEvMDtkKz12Lk5FSUdIQk9SQ09TVCooQT92LlNBTUVMRVZFTEZBQ1RPUjoxKS8oay1NKX1yZXR1cm4gZH1mdW5jdGlvbiBiKHQpe3ZhciBlLHIsbj10LnRyYWNlLl9lbXB0eXBvaW50cyxpPVtdLGE9dC56Lmxlbmd0aCxvPXQuelswXS5sZW5ndGgscz1bXTtmb3IoZT0wO2U8bztlKyspcy5wdXNoKDEpO2ZvcihlPTA7ZTxhO2UrKylpLnB1c2gocy5zbGljZSgpKTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKWlbKHI9bltlXSlbMF1dW3JbMV1dPTA7cmV0dXJuIHQuem1hc2s9aSxpfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sImNvbnRvdXIiKS5lYWNoKChmdW5jdGlvbihvKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx2PW9bMF0seD12LnRyYWNlLF89di54LHc9di55LFQ9eC5jb250b3VycyxrPXAoVCxlLHYpLEE9aS5lbnN1cmVTaW5nbGUocywiZyIsImhlYXRtYXBjb2xvcmluZyIpLE09W107ImhlYXRtYXAiPT09VC5jb2xvcmluZyYmKE09W29dKSx1KHQsZSxNLEEpLGYoayksaChrKTt2YXIgUz1sLmMycChfWzBdLCEwKSxFPWwuYzJwKF9bXy5sZW5ndGgtMV0sITApLEw9Yy5jMnAod1swXSwhMCksQz1jLmMycCh3W3cubGVuZ3RoLTFdLCEwKSxQPVtbUyxDXSxbRSxDXSxbRSxMXSxbUyxMXV0sST1rOyJjb25zdHJhaW50Ij09PVQudHlwZSYmKEk9ZChrLFQuX29wZXJhdGlvbikpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG4uZXhpdCgpLnJlbW92ZSgpLG4uYXR0cigiZCIsIk0iK2Uuam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0ocyxQLFQpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSJmaWxsIj09PWEuY29sb3Jpbmd8fCJjb25zdHJhaW50Ij09PWEudHlwZSYmIj0iIT09YS5fb3BlcmF0aW9uLHM9Ik0iK3Iuam9pbigiTCIpKyJaIjtvJiZtKGUsYSk7dmFyIGw9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShvP2U6W10pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxsLmV4aXQoKS5yZW1vdmUoKSxsLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnByZWZpeEJvdW5kYXJ5P3M6IiIpK3kodCxyKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSl9KHMsSSxQLFQpLGZ1bmN0aW9uKHQsZSxvLHMsbCl7dmFyIGM9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJsaW5lcyIpLHU9ITEhPT1sLnNob3dsaW5lcyxmPWwuc2hvd2xhYmVscyxoPXUmJmYscD1yLmNyZWF0ZUxpbmVzKGMsdXx8ZixlKSxkPXIuY3JlYXRlTGluZUNsaXAoYyxoLG8scy50cmFjZS51aWQpLG09dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZj9bMF06W10pO2lmKG0uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZil7dmFyIHY9W10seT1bXTtpLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciB4PXIubGFiZWxGb3JtYXR0ZXIobyxzKSxiPWEudGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoYS5mb250LGwubGFiZWxmb250KSxfPWVbMF0ueGF4aXMsdz1lWzBdLnlheGlzLFQ9Xy5fbGVuZ3RoLGs9dy5fbGVuZ3RoLEE9Xy5yYW5nZSxNPXcucmFuZ2UsUz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxzLngpLEU9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwscy54KSxMPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHMueSksQz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxzLnkpLFA9TWF0aC5tYXgoXy5jMnAoUywhMCksMCksST1NYXRoLm1pbihfLmMycChFLCEwKSxUKSxPPU1hdGgubWF4KHcuYzJwKEMsITApLDApLHo9TWF0aC5taW4ody5jMnAoTCwhMCksayksRD17fTtBWzBdPEFbMV0/KEQubGVmdD1QLEQucmlnaHQ9SSk6KEQubGVmdD1JLEQucmlnaHQ9UCksTVswXTxNWzFdPyhELnRvcD1PLEQuYm90dG9tPXopOihELnRvcD16LEQuYm90dG9tPU8pLEQubWlkZGxlPShELnRvcCtELmJvdHRvbSkvMixELmNlbnRlcj0oRC5sZWZ0K0QucmlnaHQpLzIsdi5wdXNoKFtbRC5sZWZ0LEQudG9wXSxbRC5yaWdodCxELnRvcF0sW0QucmlnaHQsRC5ib3R0b21dLFtELmxlZnQsRC5ib3R0b21dXSk7dmFyIFI9TWF0aC5zcXJ0KFQqVCtrKmspLEY9Zy5MQUJFTERJU1RBTkNFKlIvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO3AuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCx4LGIsbyk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1pLmdldFZpc2libGVTZWdtZW50KHRoaXMsRCxlLmhlaWdodC8yKTtpZih0JiYhKHQubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpnLkxBQkVMTUlOKSlmb3IodmFyIG49TWF0aC5taW4oTWF0aC5jZWlsKHQubGVuL0YpLGcuTEFCRUxNQVgpLGE9MDthPG47YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsdCxlLHksRCk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksdil9fSkpfSkpLGIucmVtb3ZlKCksci5kcmF3TGFiZWxzKG0seSxvLGQsaD92Om51bGwpfWYmJiF1JiZwLnJlbW92ZSgpfShzLGssdCx2LFQpLGZ1bmN0aW9uKHQsZSxyLG4sbyl7dmFyIHM9bi50cmFjZSxsPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGM9ImNsaXAiK3MudWlkLHU9bC5zZWxlY3RBbGwoIiMiK2MpLmRhdGEocy5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKHUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmNsaXAiLCEwKS5hdHRyKCJpZCIsYyksdS5leGl0KCkucmVtb3ZlKCksITE9PT1zLmNvbm5lY3RnYXBzKXt2YXIgcD17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6YihuKSxzbW9vdGhpbmc6MH07ZihbcF0pLGgoW3BdKSxtKFtwXSx7dHlwZToibGV2ZWxzIn0pLGkuZW5zdXJlU2luZ2xlKHUsInBhdGgiLCIiKS5hdHRyKCJkIiwocC5wcmVmaXhCb3VuZGFyeT8iTSIrby5qb2luKCJMIikrIloiOiIiKSt5KHAsbykpfWVsc2UgYz1udWxsO2Euc2V0Q2xpcFVybCh0LGMscil9KHMsZSx0LHYsUCl9KSl9LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZGF0YShlP3I6W10pO2lmKGkuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGV2ZWwiLCEwKSxlKXt2YXIgbz1pLnNlbGVjdEFsbCgicGF0aC5vcGVubGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSkpO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJvcGVubGluZSIsITApLG8uYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aG9wZW4odCxuKX0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIik7dmFyIHM9aS5zZWxlY3RBbGwoInBhdGguY2xvc2VkbGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBwYXRoc3x8dC5wYXRoc30pKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2xvc2VkbGluZSIsITApLHMuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aGNsb3NlZCh0LG4pfSkpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKX1yZXR1cm4gaX0sci5jcmVhdGVMaW5lQ2xpcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lPyJjbGlwbGluZSIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKCIjIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VybGluZWNsaXAiLCEwKS5hdHRyKCJpZCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUudHJhY2UsaT1uLmNvbnRvdXJzLGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ5Y29udG91ciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn07aWYoaS5sYWJlbGZvcm1hdClhLnRpY2tmb3JtYXQ9aS5sYWJlbGZvcm1hdCxjKGEscik7ZWxzZXt2YXIgcz1vLmV4dHJhY3RPcHRzKG4pO2lmKHMmJnMuY29sb3JiYXImJnMuY29sb3JiYXIuX2F4aXMpYT1zLmNvbG9yYmFyLl9heGlzO2Vsc2V7aWYoImNvbnN0cmFpbnQiPT09aS50eXBlKXt2YXIgdT1pLnZhbHVlO0FycmF5LmlzQXJyYXkodSk/YS5yYW5nZT1bdVswXSx1W3UubGVuZ3RoLTFdXTphLnJhbmdlPVt1LHVdfWVsc2UgYS5yYW5nZT1baS5zdGFydCxpLmVuZF0sYS5udGlja3M9KGkuZW5kLWkuc3RhcnQpL2kuc2l6ZTthLnJhbmdlWzBdPT09YS5yYW5nZVsxXSYmKGEucmFuZ2VbMV0rPWEucmFuZ2VbMF18fDEpLGEubnRpY2tzfHwoYS5udGlja3M9MWUzKSxjKGEsciksbC5wcmVwVGlja3MoYSksYS5fdG1pbj1udWxsLGEuX3RtYXg9bnVsbH19cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBsLnRpY2tUZXh0KGEsdCkudGV4dH19LHIuY2FsY1RleHRPcHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUodCk7ci50ZXh0KGkpLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMsbik7dmFyIG89ci5ub2RlKCksbD1hLmJCb3gobywhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCxmb250U2l6ZTorby5zdHlsZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHgiLCIiKSxsZXZlbDp0LGR5OihsLnRvcCtsLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYyx1LGY9ci53aWR0aDtlLmlzQ2xvc2VkPyhzPWUubGVuL3YuSU5JVElBTFNFQVJDSFBPSU5UUyxvPWUubWluK3MvMixsPWUubWF4KToocz0oZS5sZW4tZikvKHYuSU5JVElBTFNFQVJDSFBPSU5UUysxKSxvPWUubWluK3MrZi8yLGw9ZS5tYXgtKHMrZikvMik7Zm9yKHZhciBoPTEvMCxwPTA7cDx2LklURVJBVElPTlM7cCsrKXtmb3IodmFyIGQ9bztkPGw7ZCs9cyl7dmFyIG09aS5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLGQsZiksZz14KG0scixuLGEpO2c8aCYmKGg9Zyx1PW0sYz1kKX1pZihoPjIqdi5NQVhDT1NUKWJyZWFrO3AmJihzLz0yKSxsPShvPWMtcy8yKSsxLjUqc31pZihoPD12Lk1BWENPU1QpcmV0dXJuIHV9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUuZm9udFNpemUsYT1lLndpZHRoK2kvMyxvPU1hdGgubWF4KDAsZS5oZWlnaHQtaS8zKSxzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLnNpbihjKSxmPU1hdGguY29zKGMpLGg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bcyt0KmYtZSp1LGwrdCp1K2UqZl19LHA9W2goLWEvMiwtby8yKSxoKC1hLzIsby8yKSxoKGEvMixvLzIpLGgoYS8yLC1vLzIpXTtyLnB1c2goe3RleHQ6ZS50ZXh0LHg6cyx5OmwsZHk6ZS5keSx0aGV0YTpjLGxldmVsOmUubGV2ZWwsd2lkdGg6YSxoZWlnaHQ6b30pLG4ucHVzaChwKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIGw9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQrIiwiK3QueCsiLCIrdC55KyIsIit0LnRoZXRhfSkpO2lmKGwuZXhpdCgpLnJlbW92ZSgpLGwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC54K01hdGguc2luKHQudGhldGEpKnQuZHksaT10LnktTWF0aC5jb3ModC50aGV0YSkqdC5keTtuLnNlbGVjdCh0aGlzKS50ZXh0KHQudGV4dCkuYXR0cih7eDplLHk6aSx0cmFuc2Zvcm06InJvdGF0ZSgiKzE4MCp0LnRoZXRhL01hdGguUEkrIiAiK2UrIiAiK2krIikifSkuY2FsbChzLmNvbnZlcnRUb1RzcGFucyxyKX0pKSxvKXtmb3IodmFyIGM9IiIsdT0wO3U8by5sZW5ndGg7dSsrKWMrPSJNIitvW3VdLmpvaW4oIkwiKSsiWiI7aS5lbnN1cmVTaW5nbGUoYSwicGF0aCIsIiIpLmF0dHIoImQiLGMpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NTc2LCIuLi9oZWF0bWFwL3Bsb3QiOjgwNCwiLi9jbG9zZV9ib3VuZGFyaWVzIjo3MzcsIi4vY29uc3RhbnRzIjo3MzksIi4vY29udmVydF90b19jb25zdHJhaW50cyI6NzQzLCIuL2VtcHR5X3BhdGhpbmZvIjo3NDUsIi4vZmluZF9hbGxfcGF0aHMiOjc0NywiLi9tYWtlX2Nyb3NzaW5ncyI6NzUyLCJAcGxvdGx5L2QzIjo1OH1dLDc1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3QsZV19O3JldHVybiBuLmF1dG9UaWNrcyhpLChlLXQpLyhyfHwxNSkpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jb250b3VycztpZih0LmF1dG9jb250b3VyKXt2YXIgbz10LnptaW4scz10LnptYXg7KHQuemF1dG98fHZvaWQgMD09PW8pJiYobz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxlKSksKHQuemF1dG98fHZvaWQgMD09PXMpJiYocz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxlKSk7dmFyIGw9YShvLHMsdC5uY29udG91cnMpO3Iuc2l6ZT1sLmR0aWNrLHIuc3RhcnQ9bi50aWNrRmlyc3QobCksbC5yYW5nZS5yZXZlcnNlKCksci5lbmQ9bi50aWNrRmlyc3QobCksci5zdGFydD09PW8mJihyLnN0YXJ0Kz1yLnNpemUpLHIuZW5kPT09cyYmKHIuZW5kLT1yLnNpemUpLHIuc3RhcnQ+ci5lbmQmJihyLnN0YXJ0PXIuZW5kPShyLnN0YXJ0K3IuZW5kKS8yKSx0Ll9pbnB1dC5jb250b3Vyc3x8KHQuX2lucHV0LmNvbnRvdXJzPXt9KSxpLmV4dGVuZEZsYXQodC5faW5wdXQuY29udG91cnMse3N0YXJ0OnIuc3RhcnQsZW5kOnIuZW5kLHNpemU6ci5zaXplfSksdC5faW5wdXQuYXV0b2NvbnRvdXI9ITB9ZWxzZSBpZigiY29uc3RyYWludCIhPT1yLnR5cGUpe3ZhciBjLHU9ci5zdGFydCxmPXIuZW5kLGg9dC5faW5wdXQuY29udG91cnM7aWYodT5mJiYoci5zdGFydD1oLnN0YXJ0PWYsZj1yLmVuZD1oLmVuZD11LHU9ci5zdGFydCksIShyLnNpemU+MCkpYz11PT09Zj8xOmEodSxmLHQubmNvbnRvdXJzKS5kdGljayxoLnNpemU9ci5zaXplPWN9fX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NH1dLDc1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGY9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGg9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1mfHxoP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxmP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSkpO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChmP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pKSx1KWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoaCl7dmFyIG07ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PW0mJihtPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pKSx2b2lkIDA9PT1tJiYobT1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKG0tLjUqbCkpfX0pKSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vaGVhdG1hcC9zdHlsZSI6ODA1LCIuL21ha2VfY29sb3JfbWFwIjo3NTEsIkBwbG90bHkvZDMiOjU4fV0sNzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzLGw9cigiY29udG91cnMuY29sb3JpbmciKSxjPSIiOyJmaWxsIj09PWwmJihzPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpKSwhMSE9PXMmJigibGluZXMiIT09bCYmKGM9cigibGluZS5jb2xvciIsIiMwMDAiKSkscigibGluZS53aWR0aCIsLjUpLHIoImxpbmUuZGFzaCIpKSwibm9uZSIhPT1sJiYoITAhPT10LnNob3dsZWdlbmQmJihlLnNob3dsZWdlbmQ9ITEpLGUuX2RmbHRTaG93TGVnZW5kPSExLG4odCxlLGEscix7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpLHIoImxpbmUuc21vb3RoaW5nIiksaShyLGEsYyxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjozNzYsIi4vbGFiZWxfZGVmYXVsdHMiOjc1MH1dLDc1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnRvdXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9aS5jb250b3VycztlLmV4cG9ydHM9byh7Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLGF0eXBlOm4ueHR5cGUsYnR5cGU6bi55dHlwZSxmaWxsY29sb3I6aS5maWxsY29sb3IsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6cy50eXBlLHN0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kLHNpemU6cy5zaXplLGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6cy5zaG93bGluZXMsc2hvd2xhYmVsczpzLnNob3dsYWJlbHMsbGFiZWxmb250OnMubGFiZWxmb250LGxhYmVsZm9ybWF0OnMubGFiZWxmb3JtYXQsb3BlcmF0aW9uOnMub3BlcmF0aW9uLHZhbHVlOnMudmFsdWUsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjppLmxpbmUuY29sb3Isd2lkdGg6aS5saW5lLndpZHRoLGRhc2g6aS5saW5lLmRhc2gsc21vb3RoaW5nOmkubGluZS5zbW9vdGhpbmcsZWRpdFR5cGU6InBsb3QifSx0cmFuc2Zvcm1zOnZvaWQgMH0sYSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6NzM1LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjc5Mn1dLDc1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiIpLG89dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLHM9dCgiLi4vaGVhdG1hcC9pbnRlcnAyZCIpLGw9dCgiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiKSxjPXQoIi4uL2hlYXRtYXAvbWFrZV9ib3VuZF9hcnJheSIpLHU9dCgiLi9kZWZhdWx0cyIpLGY9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpLGg9dCgiLi4vY29udG91ci9zZXRfY29udG91cnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9jYXJwZXRUcmFjZT1mKHQsZSk7aWYociYmci52aXNpYmxlJiYibGVnZW5kb25seSIhPT1yLnZpc2libGUpe2lmKCFlLmF8fCFlLmIpe3ZhciBwPXQuZGF0YVtyLmluZGV4XSxkPXQuZGF0YVtlLmluZGV4XTtkLmF8fChkLmE9cC5hKSxkLmJ8fChkLmI9cC5iKSx1KGQsZSxlLl9kZWZhdWx0Q29sb3IsdC5fZnVsbExheW91dCl9dmFyIG09ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsbSxnPWUuX2NhcnBldFRyYWNlLHY9Zy5hYXhpcyx5PWcuYmF4aXM7di5fbWluRHRpY2s9MCx5Ll9taW5EdGljaz0wLGkuaXNBcnJheTFEKGUueikmJmEoZSx2LHksImEiLCJiIixbInoiXSk7cj1lLl9hPWUuX2F8fGUuYSxoPWUuX2I9ZS5fYnx8ZS5iLHI9cj92Lm1ha2VDYWxjZGF0YShlLCJfYSIpOltdLGg9aD95Lm1ha2VDYWxjZGF0YShlLCJfYiIpOltdLHU9ZS5hMHx8MCxmPWUuZGF8fDEscD1lLmIwfHwwLGQ9ZS5kYnx8MSxtPWUuX3o9byhlLl96fHxlLnosZS50cmFuc3Bvc2UpLGUuX2VtcHR5cG9pbnRzPWwobSkscyhtLGUuX2VtcHR5cG9pbnRzKTt2YXIgeD1pLm1heFJvd0xlbmd0aChtKSxiPSJzY2FsZWQiPT09ZS54dHlwZT8iIjpyLF89YyhlLGIsdSxmLHgsdiksdz0ic2NhbGVkIj09PWUueXR5cGU/IiI6aCxUPWMoZSx3LHAsZCxtLmxlbmd0aCx5KSxrPXthOl8sYjpULHo6bX07ImxldmVscyI9PT1lLmNvbnRvdXJzLnR5cGUmJiJub25lIiE9PWUuY29udG91cnMuY29sb3JpbmcmJm4odCxlLHt2YWxzOm0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSk7cmV0dXJuW2tdfSh0LGUpO3JldHVybiBoKGUsZS5feiksbX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNzQsIi4uLy4uL2xpYiI6NTAzLCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo3MDgsIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzIjo3NTQsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjc5NCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjc5NiwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjc5OCwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6ODAxLCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiOjgwMywiLi9kZWZhdWx0cyI6NzU5fV0sNzU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pZih1KCJjYXJwZXQiKSx0LmEmJnQuYil7aWYoIWkodCxlLHUsYywiYSIsImIiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoInRleHQiKSwiY29uc3RyYWludCI9PT11KCJjb250b3Vycy50eXBlIik/byh0LGUsdSxjLHIse2hhc0hvdmVyOiExfSk6KHModCxlLHUsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLGEscil9KSksbCh0LGUsdSxjLHtoYXNIb3ZlcjohMX0pKX1lbHNlIGUuX2RlZmF1bHRDb2xvcj1yLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjUwMywiLi4vY29udG91ci9jb25zdHJhaW50X2RlZmF1bHRzIjo3NDAsIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiOjc0MiwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6NzU2LCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6ODA3LCIuL2F0dHJpYnV0ZXMiOjc1N31dLDc2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2NvbnRvdXIvY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vY29udG91ci9zdHlsZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjb250b3VyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY29udG91ciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwiaGFzTGluZXMiLCJjYXJwZXREZXBlbmRlbnQiLCJub0hvdmVyIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NTY4LCIuLi9jb250b3VyL2NvbG9yYmFyIjo3MzgsIi4uL2NvbnRvdXIvc3R5bGUiOjc1NSwiLi9hdHRyaWJ1dGVzIjo3NTcsIi4vY2FsYyI6NzU4LCIuL2RlZmF1bHRzIjo3NTksIi4vcGxvdCI6NzYxfV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2NhcnBldC9tYXBfMWRfYXJyYXkiKSxhPXQoIi4uL2NhcnBldC9tYWtlcGF0aCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3MiKSxjPXQoIi4uL2NvbnRvdXIvZmluZF9hbGxfcGF0aHMiKSx1PXQoIi4uL2NvbnRvdXIvcGxvdCIpLGY9dCgiLi4vY29udG91ci9jb25zdGFudHMiKSxoPXQoIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50cyIpLHA9dCgiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyIpLGQ9dCgiLi4vY29udG91ci9jbG9zZV9ib3VuZGFyaWVzIiksbT10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksZz10KCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiKTtmdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24geSh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixiKXt2YXIgXz1lLnhheGlzLHc9ZS55YXhpcztzLm1ha2VUcmFjZUdyb3VwcyhiLHIsImNvbnRvdXIiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgYj1uLnNlbGVjdCh0aGlzKSxUPXJbMF0saz1ULnRyYWNlLEE9ay5fY2FycGV0VHJhY2U9bSh0LGspLE09dC5jYWxjZGF0YVtBLmluZGV4XVswXTtpZihBLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PUEudmlzaWJsZSl7dmFyIFM9VC5hLEU9VC5iLEw9ay5jb250b3VycyxDPXAoTCxlLFQpLFA9ImNvbnN0cmFpbnQiPT09TC50eXBlLEk9TC5fb3BlcmF0aW9uLE89UD8iPSI9PT1JPyJsaW5lcyI6ImZpbGwiOkwuY29sb3Jpbmcsej1bW1NbMF0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVswXV0sW1NbMF0sRVswXV1dO2woQyk7dmFyIEQ9MWUtOCooU1tTLmxlbmd0aC0xXS1TWzBdKSxSPTFlLTgqKEVbRS5sZW5ndGgtMV0tRVswXSk7YyhDLEQsUik7dmFyIEYsQixOLGosVT1DOyJjb25zdHJhaW50Ij09PUwudHlwZSYmKFU9aChDLEkpKSxmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3IoYT10W3JdLG89YS5wZWRnZXBhdGhzPVtdLHM9YS5wcGF0aHM9W10sbj0wO248YS5lZGdlcGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5lZGdlcGF0aHNbbl0sbD1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspbFtpXT1lKHVbaV0pO28ucHVzaChsKX1mb3Iobj0wO248YS5wYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLnBhdGhzW25dLGM9W10saT0wO2k8dS5sZW5ndGg7aSsrKWNbaV09ZSh1W2ldKTtzLnB1c2goYyl9fX0oQyxxKTt2YXIgVj1bXTtmb3Ioaj1NLmNsaXBzZWdtZW50cy5sZW5ndGgtMTtqPj0wO2otLSlGPU0uY2xpcHNlZ21lbnRzW2pdLEI9aShbXSxGLngsXy5jMnApLE49aShbXSxGLnksdy5jMnApLEIucmV2ZXJzZSgpLE4ucmV2ZXJzZSgpLFYucHVzaChhKEIsTixGLmJpY3ViaWMpKTt2YXIgSD0iTSIrVi5qb2luKCJMIikrIloiOyFmdW5jdGlvbih0LGUscixuLG8sbCl7dmFyIGMsdSxmLGgscD1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCIhPT1sfHxvP1tdOlswXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPVtdO2ZvcihoPTA7aDxlLmxlbmd0aDtoKyspYz1lW2hdLHU9aShbXSxjLngsci5jMnApLGY9aShbXSxjLnksbi5jMnApLGQucHVzaChhKHUsZixjLmJpY3ViaWMpKTtwLmF0dHIoImQiLCJNIitkLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9KGIsTS5jbGlwc2VnbWVudHMsXyx3LFAsTyksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyx1LGYsaCxwKXt2YXIgbT0iZmlsbCI9PT1oO20mJmQoYSx0LmNvbnRvdXJzKTt2YXIgdj1zLmVuc3VyZVNpbmdsZShlLCJnIiwiY29udG91cmZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKG0/YTpbXSk7di5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9KHQucHJlZml4Qm91bmRhcnk/cDoiIikrZnVuY3Rpb24odCxlLHIsbixpLGEsbCxjKXt2YXIgdSxmLGgscCxkLG0sdix5PSIiLHg9ZS5lZGdlcGF0aHMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpLGI9ITAsXz0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksdz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzBdWzFdKTx3fWZ1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclsyXVsxXSk8d31mdW5jdGlvbiBBKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMF1bMF0pPF99ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzJdWzBdKTxffWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLG8scyx1PSIiO2ZvcihUKHQpJiYhTSh0KXx8ayh0KSYmIUEodCk/KHM9aS5hYXhpcyxvPWcoaSxhLFt0WzBdLGVbMF1dLC41Kih0WzFdK2VbMV0pKSk6KHM9aS5iYXhpcyxvPWcoaSxhLC41Kih0WzBdK2VbMF0pLFt0WzFdLGVbMV1dKSkscj0xO3I8by5sZW5ndGg7cisrKWZvcih1Kz1zLnNtb290aGluZz8iQyI6IkwiLG49MDtuPG9bcl0ubGVuZ3RoO24rKyl7dmFyIGY9b1tyXVtuXTt1Kz1bbC5jMnAoZlswXSksYy5jMnAoZlsxXSldKyIgIn1yZXR1cm4gdX11PTAsZj1udWxsO2Zvcig7eC5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1t1XVswXTtmb3IoZiYmKHkrPVMoZixFKSksdj1vLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKSx5Kz1iP3Y6di5yZXBsYWNlKC9eTS8sIkwiKSx4LnNwbGljZSh4LmluZGV4T2YodSksMSksZj1lLmVkZ2VwYXRoc1t1XVtlLmVkZ2VwYXRoc1t1XS5sZW5ndGgtMV0sZD0tMSxwPTA7cDw0O3ArKyl7aWYoIWYpe3MubG9nKCJNaXNzaW5nIGVuZD8iLHUsZSk7YnJlYWt9Zm9yKFQoZikmJiFNKGYpP2g9clsxXTpBKGYpP2g9clswXTprKGYpP2g9clszXTpNKGYpJiYoaD1yWzJdKSxtPTA7bTxlLmVkZ2VwYXRocy5sZW5ndGg7bSsrKXt2YXIgTD1lLmVkZ2VwYXRoc1ttXVswXTtNYXRoLmFicyhmWzBdLWhbMF0pPF8/TWF0aC5hYnMoZlswXS1MWzBdKTxfJiYoTFsxXS1mWzFdKSooaFsxXS1MWzFdKT49MCYmKGg9TCxkPW0pOk1hdGguYWJzKGZbMV0taFsxXSk8dz9NYXRoLmFicyhmWzFdLUxbMV0pPHcmJihMWzBdLWZbMF0pKihoWzBdLUxbMF0pPj0wJiYoaD1MLGQ9bSk6cy5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsZixoLEwpfWlmKGQ+PTApYnJlYWs7eSs9UyhmLGgpLGY9aH1pZihkPT09ZS5lZGdlcGF0aHMubGVuZ3RoKXtzLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha311PWQsKGI9LTE9PT14LmluZGV4T2YodSkpJiYodT14WzBdLHkrPVMoZixoKSsiWiIsZj1udWxsKX1mb3IodT0wO3U8ZS5wYXRocy5sZW5ndGg7dSsrKXkrPW8uc21vb3RoY2xvc2VkKGUucGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKTtyZXR1cm4geX0oMCx0LGwsYyx1LGYscixpKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSl9KGssYixfLHcsVSx6LHEsQSxNLE8sSCksZnVuY3Rpb24odCxlLHIsaSxhLGwsYyl7dmFyIGg9cy5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJsaW5lcyIpLHA9ITEhPT1hLnNob3dsaW5lcyxkPWEuc2hvd2xhYmVscyxtPXAmJmQsZz11LmNyZWF0ZUxpbmVzKGgscHx8ZCxlKSxiPXUuY3JlYXRlTGluZUNsaXAoaCxtLHIsaS50cmFjZS51aWQpLF89dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZD9bMF06W10pO2lmKF8uZXhpdCgpLnJlbW92ZSgpLF8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZCl7dmFyIHc9bC54YXhpcyxUPWwueWF4aXMsaz13Ll9sZW5ndGgsQT1ULl9sZW5ndGgsTT1bW1swLDBdLFtrLDBdLFtrLEFdLFswLEFdXV0sUz1bXTtzLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBFPXUubGFiZWxGb3JtYXR0ZXIocixpKSxMPW8udGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoby5mb250LGEubGFiZWxmb250KSxDPXtsZWZ0OjAscmlnaHQ6ayxjZW50ZXI6ay8yLHRvcDowLGJvdHRvbTpBLG1pZGRsZTpBLzJ9LFA9TWF0aC5zcXJ0KGsqaytBKkEpLEk9Zi5MQUJFTERJU1RBTkNFKlAvTWF0aC5tYXgoMSxlLmxlbmd0aC9mLkxBQkVMSU5DUkVBU0UpO2cuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dS5jYWxjVGV4dE9wdHModC5sZXZlbCxFLEwscik7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEMsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1pLmFbMF0sYz1pLmFbaS5hLmxlbmd0aC0xXSx1PWkuYlswXSxmPWkuYltpLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj15KGkuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqeChlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1mKTwuMSkmJihyPXkoaS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSp4KGUscikvMikpLG59dmFyIHA9dih0LDAsMSksZD12KHQsbi50b3RhbCxuLnRvdGFsLTEpLG09aChvWzBdLHApLGc9bi50b3RhbC1oKG9bby5sZW5ndGgtMV0sZCk7bi5taW48bSYmKG4ubWluPW0pO24ubWF4PmcmJihuLm1heD1nKTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpmLkxBQkVMTUlOKSkpZm9yKHZhciBpPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9JKSxmLkxBQkVMTUFYKSxhPTA7YTxpO2ErKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEMpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLE0pfX0pKX0pKSxMLnJlbW92ZSgpLHUuZHJhd0xhYmVscyhfLFMscixiLG0/TTpudWxsKX1kJiYhcCYmZy5yZW1vdmUoKX0oYixDLHQsVCxMLGUsQSksby5zZXRDbGlwVXJsKGIsQS5fY2xpcFBhdGhJZCx0KX1mdW5jdGlvbiBxKHQpe3ZhciBlPUEuYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bXy5jMnAoZVswXSksdy5jMnAoZVsxXSldfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2xpYiI6NTAzLCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjY5MiwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6NzA4LCIuLi9jYXJwZXQvbWFrZXBhdGgiOjcwOSwiLi4vY2FycGV0L21hcF8xZF9hcnJheSI6NzEwLCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiOjczNywiLi4vY29udG91ci9jb25zdGFudHMiOjczOSwiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjo3NDMsIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iOjc0NSwiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6NzQ3LCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIjo3NTIsIi4uL2NvbnRvdXIvcGxvdCI6NzUzLCJAcGxvdGx5L2QzIjo1OH1dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe2xvbjpvLmxvbixsYXQ6by5sYXQsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsbWluOjEsZGZsdDozMH0sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Om8udGV4dCxob3ZlcnRleHQ6by5ob3ZlcnRleHQsaG92ZXJpbmZvOnMoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwieiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOmkoKSxzaG93bGVnZW5kOnMoe30sYS5zaG93bGVnZW5kLHtkZmx0OiExfSl9LG4oIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyI6OTkxfV0sNzYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuLi8uLi9saWIiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9sZW5ndGgsbD1uZXcgQXJyYXkociksYz1lLnosdT1pKGMpJiZjLmxlbmd0aCxmPTA7ZjxyO2YrKyl7dmFyIGg9bFtmXT17fSxwPWUubG9uW2ZdLGQ9ZS5sYXRbZl07aWYoaC5sb25sYXQ9bihwKSYmbihkKT9bK3AsK2RdOlthLGFdLHUpe3ZhciBtPWNbZl07aC56PW4obSk/bTphfX1yZXR1cm4gbyh0LGUse3ZhbHM6dT9jOlswLDFdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJ6In0pLHImJihsWzBdLnQ9e2xhYmVsczp7bGF0OnModCwibGF0OiIpKyIgIixsb246cyh0LCJsb246IikrIiAifX0pLGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNzQsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsImZhc3QtaXNudW1lcmljIjoxOTB9XSw3NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGw9dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKS5tYWtlQmxhbms7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj0hMD09PWUudmlzaWJsZSYmMCE9PWUuX2xlbmd0aCxjPWUuX29wdHM9e2hlYXRtYXA6e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxnZW9qc29uOmwoKX07aWYoIXIpcmV0dXJuIGM7dmFyIHUsZj1bXSxoPWUueixwPWUucmFkaXVzLGQ9aS5pc0FycmF5T3JUeXBlZEFycmF5KGgpJiZoLmxlbmd0aCxtPWkuaXNBcnJheU9yVHlwZWRBcnJheShwKTtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgZz10W3VdLHY9Zy5sb25sYXQ7aWYodlswXSE9PXMpe3ZhciB5PXt9O2lmKGQpe3ZhciB4PWcuejt5Lno9eCE9PXM/eDowfW0mJih5LnI9bihwW3VdKSYmcFt1XT4wPytwW3VdOjApLGYucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczp2fSxwcm9wZXJ0aWVzOnl9KX19dmFyIGI9by5leHRyYWN0T3B0cyhlKSxfPWIucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKGIuY29sb3JzY2FsZSk6Yi5jb2xvcnNjYWxlLHc9X1swXVsxXSxUPVsiaW50ZXJwb2xhdGUiLFsibGluZWFyIl0sWyJoZWF0bWFwLWRlbnNpdHkiXSwwLGEub3BhY2l0eSh3KTwxP3c6YS5hZGRPcGFjaXR5KHcsMCldO2Zvcih1PTE7dTxfLmxlbmd0aDt1KyspVC5wdXNoKF9bdV1bMF0sX1t1XVsxXSk7dmFyIGs9WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImdldCIsInoiXSxiLm1pbiwwLGIubWF4LDFdO3JldHVybiBpLmV4dGVuZEZsYXQoYy5oZWF0bWFwLnBhaW50LHsiaGVhdG1hcC13ZWlnaHQiOmQ/azoxLyhiLm1heC1iLm1pbiksImhlYXRtYXAtY29sb3IiOlQsImhlYXRtYXAtcmFkaXVzIjptP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6InIifTplLnJhZGl1cywiaGVhdG1hcC1vcGFjaXR5IjplLm9wYWNpdHl9KSxjLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpmfSxjLmhlYXRtYXAubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo0OTcsImZhc3QtaXNudW1lcmljIjoxOTB9XSw3NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9uIil8fFtdLGM9cygibGF0Iil8fFtdLHU9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpO3U/KGUuX2xlbmd0aD11LHMoInoiKSxzKCJyYWRpdXMiKSxzKCJiZWxvdyIpLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3NiwiLi4vLi4vbGliIjo1MDMsIi4vYXR0cmlidXRlcyI6NzYyfV0sNzY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0Lno9ZS56LHR9fSx7fV0sNzY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIikuaG92ZXJQb2ludHMsYT10KCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIikuZ2V0RXh0cmFUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89aSh0LGUscik7aWYobyl7dmFyIHM9b1swXSxsPXMuY2QsYz1sWzBdLnRyYWNlLHU9bFtzLmluZGV4XTtpZihkZWxldGUgcy5jb2xvciwieiJpbiB1KXt2YXIgZj1zLnN1YnBsb3QubW9ja0F4aXM7cy56PXUueixzLnpMYWJlbD1uLnRpY2tUZXh0KGYsZi5jMmwodS56KSwiaG92ZXIiKS50ZXh0fXJldHVybiBzLmV4dHJhVGV4dD1hKGMsdSxsWzBdLnQubGFiZWxzKSxbc119fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIjo5OTZ9XSw3Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4uL3NjYXR0ZXJtYXBib3gvZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLGdldEJlbG93OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuZ2V0TWFwTGF5ZXJzKCksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLGE9aS5pZDtpZigic3ltYm9sIj09PWkudHlwZSYmInN0cmluZyI9PXR5cGVvZiBhJiYtMT09PWEuaW5kZXhPZigicGxvdGx5LSIpKXJldHVybiBhfX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImRlbnNpdHltYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInNob3dMZWdlbmQiXSxtZXRhOntocl9uYW1lOiJkZW5zaXR5X21hcGJveCJ9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjYxMywiLi4vaGVhdG1hcC9jb2xvcmJhciI6Nzk1LCIuLi9zY2F0dGVybWFwYm94L2Zvcm1hdF9sYWJlbHMiOjk5NSwiLi9hdHRyaWJ1dGVzIjo3NjIsIi4vY2FsYyI6NzYzLCIuL2RlZmF1bHRzIjo3NjUsIi4vZXZlbnRfZGF0YSI6NzY2LCIuL2hvdmVyIjo3NjcsIi4vcGxvdCI6NzY5fV0sNzY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpLGk9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXg7ZnVuY3Rpb24gYSh0LGUpe3RoaXMudHlwZT0iZGVuc2l0eW1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkPSJzb3VyY2UtIitlLHRoaXMubGF5ZXJMaXN0PVtbImhlYXRtYXAiLGkrZSsiLWhlYXRtYXAiXV0sdGhpcy5iZWxvdz1udWxsfXZhciBvPWEucHJvdG90eXBlO28udXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3VicGxvdCxyPXRoaXMubGF5ZXJMaXN0LGk9bih0KSxhPWUuYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2UubWFwLmdldFNvdXJjZSh0aGlzLnNvdXJjZUlkKS5zZXREYXRhKGkuZ2VvanNvbiksYSE9PXRoaXMuYmVsb3cmJih0aGlzLl9yZW1vdmVMYXllcnMoKSx0aGlzLl9hZGRMYXllcnMoaSxhKSx0aGlzLmJlbG93PWEpO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dLGw9c1swXSxjPXNbMV0sdT1pW2xdO2Uuc2V0T3B0aW9ucyhjLCJzZXRMYXlvdXRQcm9wZXJ0eSIsdS5sYXlvdXQpLCJ2aXNpYmxlIj09PXUubGF5b3V0LnZpc2liaWxpdHkmJmUuc2V0T3B0aW9ucyhjLCJzZXRQYWludFByb3BlcnR5Iix1LnBhaW50KX19LG8uX2FkZExheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN1YnBsb3Qsbj10aGlzLmxheWVyTGlzdCxpPXRoaXMuc291cmNlSWQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9b1swXSxsPXRbc107ci5hZGRMYXllcih7dHlwZTpzLGlkOm9bMV0sc291cmNlOmksbGF5b3V0OmwubGF5b3V0LHBhaW50OmwucGFpbnR9LGUpfX0sby5fcmVtb3ZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT10aGlzLmxheWVyTGlzdCxyPWUubGVuZ3RoLTE7cj49MDtyLS0pdC5yZW1vdmVMYXllcihlW3JdWzFdKX0sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0aGlzLl9yZW1vdmVMYXllcnMoKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxpPW5ldyBhKHQsci51aWQpLG89aS5zb3VyY2VJZCxzPW4oZSksbD1pLmJlbG93PXQuYmVsb3dMb29rdXBbInRyYWNlLSIrci51aWRdO3JldHVybiB0Lm1hcC5hZGRTb3VyY2Uobyx7dHlwZToiZ2VvanNvbiIsZGF0YTpzLmdlb2pzb259KSxpLl9hZGRMYXllcnMocyxsKSxpfX0seyIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIjo2MTEsIi4vY29udmVydCI6NzY0fV0sNzcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS53aWR0aCx0LCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjUwM31dLDc3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLHU9dCgiLi9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz17eDppLngseDA6aS54MCxkeDppLmR4LHk6aS55LHkwOmkueTAsZHk6aS5keSx4cGVyaW9kOmkueHBlcmlvZCx5cGVyaW9kOmkueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDppLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDppLnlwZXJpb2RhbGlnbm1lbnQseGhvdmVyZm9ybWF0OnMoIngiKSx5aG92ZXJmb3JtYXQ6cygieSIpLGhvdmVydGV4dDppLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksaG92ZXJpbmZvOmYoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsibmFtZSIsIngiLCJ5IiwidGV4dCIsInBlcmNlbnQgaW5pdGlhbCIsInBlcmNlbnQgcHJldmlvdXMiLCJwZXJjZW50IHRvdGFsIl19KSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwicGVyY2VudCBpbml0aWFsIiwicGVyY2VudCBwcmV2aW91cyIsInBlcmNlbnQgdG90YWwiLCJ2YWx1ZSJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0sdGV4dHRlbXBsYXRlOmMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6dS5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIiwidmFsdWUiXSl9KSx0ZXh0OmkudGV4dCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24saW5zaWRldGV4dGFuY2hvcjpmKHt9LGkuaW5zaWRldGV4dGFuY2hvcix7ZGZsdDoibWlkZGxlIn0pLHRleHRhbmdsZTpmKHt9LGkudGV4dGFuZ2xlLHtkZmx0OjB9KSx0ZXh0Zm9udDppLnRleHRmb250LGluc2lkZXRleHRmb250OmkuaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250Omkub3V0c2lkZXRleHRmb250LGNvbnN0cmFpbnRleHQ6aS5jb25zdHJhaW50ZXh0LGNsaXBvbmF4aXM6aS5jbGlwb25heGlzLG9yaWVudGF0aW9uOmYoe30saS5vcmllbnRhdGlvbix7fSksb2Zmc2V0OmYoe30saS5vZmZzZXQse2FycmF5T2s6ITF9KSx3aWR0aDpmKHt9LGkud2lkdGgse2FycmF5T2s6ITF9KSxtYXJrZXI6KG49Zih7fSxpLm1hcmtlciksZGVsZXRlIG4ucGF0dGVybixuKSxjb25uZWN0b3I6e2ZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6e2NvbG9yOmYoe30sYS5jb2xvcix7ZGZsdDpoLmRlZmF1bHRMaW5lfSksd2lkdGg6Zih7fSxhLndpZHRoLHtkZmx0OjAsZWRpdFR5cGU6InBsb3QifSksZGFzaDphLmRhc2gsZWRpdFR5cGU6InN0eWxlIn0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sb2Zmc2V0Z3JvdXA6aS5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDppLmFsaWdubWVudGdyb3VwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2LCIuL2NvbnN0YW50cyI6NzczfV0sNzcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIiksYT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQpe3JldHVybiB0PT09cz8wOnR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1LGYsaCxwLGQsbSxnPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx2PW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPWcubWFrZUNhbGNkYXRhKGUsIngiKSx1PXYubWFrZUNhbGNkYXRhKGUsInkiKSxmPWkoZSx2LCJ5Iix1KSxoPSEhZS55cGVyaW9kYWxpZ25tZW50LHA9InkiKToocj12Lm1ha2VDYWxjZGF0YShlLCJ5IiksdT1nLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1pKGUsZywieCIsdSksaD0hIWUueHBlcmlvZGFsaWdubWVudCxwPSJ4IiksYz1mLnZhbHM7dmFyIHkseD1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCksYj1uZXcgQXJyYXkoeCk7Zm9yKGUuX2Jhc2U9W10sZD0wO2Q8eDtkKyspe3JbZF08MCYmKHJbZF09cyk7dmFyIF89ITE7cltkXSE9PXMmJmQrMTx4JiZyW2QrMV0hPT1zJiYoXz0hMCksbT1iW2RdPXtwOmNbZF0sczpyW2RdLGNOZXh0Ol99LGUuX2Jhc2VbZF09LS41Km0ucyxoJiYoYltkXS5vcmlnX3A9dVtkXSxiW2RdW3ArIkVuZCJdPWYuZW5kc1tkXSxiW2RdW3ArIlN0YXJ0Il09Zi5zdGFydHNbZF0pLGUuaWRzJiYobS5pZD1TdHJpbmcoZS5pZHNbZF0pKSwwPT09ZCYmKGJbMF0udlRvdGFsPTApLGJbMF0udlRvdGFsKz1sKG0ucyksbS5iZWdSPWwobS5zKS9sKGJbMF0ucyl9Zm9yKGQ9MDtkPHg7ZCsrKShtPWJbZF0pLnMhPT1zJiYobS5zdW1SPW0ucy9iWzBdLnZUb3RhbCxtLmRpZlI9dm9pZCAwIT09eT9tLnMveToxLHk9bS5zKTtyZXR1cm4gYShiLGUpLG8oYixlKSxifX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU1MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6OTI4LCIuL2FycmF5c190b19jYWxjZGF0YSI6NzcwfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbInBlcmNlbnRJbml0aWFsIiwicGVyY2VudFByZXZpb3VzIiwicGVyY2VudFRvdGFsIl19fSx7fV0sNzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldLGQ9ImgiPT09cC5vcmllbnRhdGlvbjshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJiJmdW5uZWwiPT09cC50eXBlJiYocj1zW2ldLGQ/aC5wdXNoKHIpOmYucHVzaChyKSx1LnB1c2gocikpfXZhciBtPXttb2RlOmEuZnVubmVsbW9kZSxub3JtOmEuZnVubmVsbm9ybSxnYXA6YS5mdW5uZWxnYXAsZ3JvdXBnYXA6YS5mdW5uZWxncm91cGdhcH07Zm9yKG4odCxsLGMsZixtKSxuKHQsYyxsLGgsbSksaT0wO2k8dS5sZW5ndGg7aSsrKXtyPXVbaV07Zm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspZysxPHIubGVuZ3RoJiYocltnXS5uZXh0UDA9cltnKzFdLnAwLHJbZ10ubmV4dFMwPXJbZysxXS5zMCxyW2ddLm5leHRQMT1yW2crMV0ucDEscltnXS5uZXh0UzE9cltnKzFdLnMxKX19fSx7Ii4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo2NTF9XSw3NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihvKHQsZSxpLHUpKXtzKHQsZSxpLHUpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpLHUoIm9yaWVudGF0aW9uIixlLnkmJiFlLng/InYiOiJoIiksdSgib2Zmc2V0IiksdSgid2lkdGgiKTt2YXIgZj11KCJ0ZXh0Iik7dSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBoPXUoInRleHRwb3NpdGlvbiIpO2EodCxlLGksdSxoLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSI9PT1lLnRleHRwb3NpdGlvbnx8ZS50ZXh0dGVtcGxhdGV8fHUoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGYpPyJ0ZXh0K3ZhbHVlIjoidmFsdWUiKTt2YXIgcD11KCJtYXJrZXIuY29sb3IiLHIpO2lmKHUoIm1hcmtlci5saW5lLmNvbG9yIixjLmRlZmF1bHRMaW5lKSx1KCJtYXJrZXIubGluZS53aWR0aCIpLHUoImNvbm5lY3Rvci52aXNpYmxlIikpdSgiY29ubmVjdG9yLmZpbGxjb2xvciIsZnVuY3Rpb24odCl7dmFyIGU9bi5pc0FycmF5T3JUeXBlZEFycmF5KHQpPyIjMDAwIjp0O3JldHVybiBjLmFkZE9wYWNpdHkoZSwuNSpjLm9wYWNpdHkoZSkpfShwKSksdSgiY29ubmVjdG9yLmxpbmUud2lkdGgiKSYmKHUoImNvbm5lY3Rvci5saW5lLmNvbG9yIiksdSgiY29ubmVjdG9yLmxpbmUuZGFzaCIpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLGwsdCl9aWYoImdyb3VwIj09PWUuZnVubmVsbW9kZSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyPShhPXRbc10pLl9pbnB1dCxpKHIsYSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9saWIiOjUwMywiLi4vYmFyL2RlZmF1bHRzIjo2NTIsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjo5NDYsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjk1MywiLi9hdHRyaWJ1dGVzIjo3NzF9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwicGVyY2VudEluaXRpYWwiaW4gZSYmKHQucGVyY2VudEluaXRpYWw9ZS5wZXJjZW50SW5pdGlhbCksInBlcmNlbnRQcmV2aW91cyJpbiBlJiYodC5wZXJjZW50UHJldmlvdXM9ZS5wZXJjZW50UHJldmlvdXMpLCJwZXJjZW50VG90YWwiaW4gZSYmKHQucGVyY2VudFRvdGFsPWUucGVyY2VudFRvdGFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDc3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikub3BhY2l0eSxpPXQoIi4uL2Jhci9ob3ZlciIpLmhvdmVyT25CYXJzLGE9dCgiLi4vLi4vbGliIikuZm9ybWF0UGVyY2VudDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1pKHQsZSxyLG8scyk7aWYobCl7dmFyIGM9bC5jZCx1PWNbMF0udHJhY2UsZj0iaCI9PT11Lm9yaWVudGF0aW9uLGg9Y1tsLmluZGV4XTtsWyhmPyJ4IjoieSIpKyJMYWJlbFZhbCJdPWgucyxsLnBlcmNlbnRJbml0aWFsPWguYmVnUixsLnBlcmNlbnRJbml0aWFsTGFiZWw9YShoLmJlZ1IsMSksbC5wZXJjZW50UHJldmlvdXM9aC5kaWZSLGwucGVyY2VudFByZXZpb3VzTGFiZWw9YShoLmRpZlIsMSksbC5wZXJjZW50VG90YWw9aC5zdW1SLGwucGVyY2VudFRvdGFsTGFiZWw9YShoLnN1bVIsMSk7dmFyIHA9aC5oaXx8dS5ob3ZlcmluZm8sZD1bXTtpZihwJiYibm9uZSIhPT1wJiYic2tpcCIhPT1wKXt2YXIgbT0iYWxsIj09PXAsZz1wLnNwbGl0KCIrIiksdj1mdW5jdGlvbih0KXtyZXR1cm4gbXx8LTEhPT1nLmluZGV4T2YodCl9O3YoInBlcmNlbnQgaW5pdGlhbCIpJiZkLnB1c2gobC5wZXJjZW50SW5pdGlhbExhYmVsKyIgb2YgaW5pdGlhbCIpLHYoInBlcmNlbnQgcHJldmlvdXMiKSYmZC5wdXNoKGwucGVyY2VudFByZXZpb3VzTGFiZWwrIiBvZiBwcmV2aW91cyIpLHYoInBlcmNlbnQgdG90YWwiKSYmZC5wdXNoKGwucGVyY2VudFRvdGFsTGFiZWwrIiBvZiB0b3RhbCIpfXJldHVybiBsLmV4dHJhVGV4dD1kLmpvaW4oIjxicj4iKSxsLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXJrZXIsaT1lLm1jfHxyLmNvbG9yLGE9ZS5tbGN8fHIubGluZS5jb2xvcixvPWUubWx3fHxyLmxpbmUud2lkdGg7aWYobihpKSlyZXR1cm4gaTtpZihuKGEpJiZvKXJldHVybiBhfSh1LGgpLFtsXX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vbGliIjo1MDMsIi4uL2Jhci9ob3ZlciI6NjU1fV0sNzc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiZnVubmVsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi4vYmFyL3NlbGVjdCI6NjYwLCIuL2F0dHJpYnV0ZXMiOjc3MSwiLi9jYWxjIjo3NzIsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6Nzc0LCIuL2RlZmF1bHRzIjo3NzUsIi4vZXZlbnRfZGF0YSI6Nzc2LCIuL2hvdmVyIjo3NzcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3OSwiLi9sYXlvdXRfZGVmYXVsdHMiOjc4MCwiLi9wbG90Ijo3ODEsIi4vc3R5bGUiOjc4Mn1dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2Z1bm5lbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YWNrIiwiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sNzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmImZ1bm5lbCI9PT1sLnR5cGUpe2E9ITA7YnJlYWt9fWEmJihvKCJmdW5uZWxtb2RlIiksbygiZnVubmVsZ2FwIiwuMiksbygiZnVubmVsZ3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3Nzl9XSw3ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxpWzNdPW8uYzJwKHQubmV4dFMxLCEwKSxhWzNdPXMuYzJwKHQubmV4dFAxLCEwKSxuP1tpLGFdOlthLGldfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXt2YXIgZj10Ll9mdWxsTGF5b3V0O2woImZ1bm5lbCIsZiksZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ZS54YXhpcyx1PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMocyxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIHM9bi5zZWxlY3QodGhpcyksZj1yWzBdLnRyYWNlLGg9aS5lbnN1cmVTaW5nbGUocywiZyIsInJlZ2lvbnMiKTtpZihmLmNvbm5lY3RvciYmZi5jb25uZWN0b3IudmlzaWJsZSl7dmFyIHA9ImgiPT09Zi5vcmllbnRhdGlvbixkPWguc2VsZWN0QWxsKCJnLnJlZ2lvbiIpLmRhdGEoaS5pZGVudGl0eSk7ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlZ2lvbiIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBtPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09bS0xfHxyLmNOZXh0KXt2YXIgZj1jKHIsbCx1LHApLGg9ZlswXSxkPWZbMV0sZz0iIjtoWzBdIT09byYmZFswXSE9PW8mJmhbMV0hPT1vJiZkWzFdIT09byYmaFsyXSE9PW8mJmRbMl0hPT1vJiZoWzNdIT09byYmZFszXSE9PW8mJihnKz1wPyJNIitoWzBdKyIsIitkWzFdKyJMIitoWzJdKyIsIitkWzJdKyJIIitoWzNdKyJMIitoWzFdKyIsIitkWzFdKyJaIjoiTSIraFsxXSsiLCIrZFsxXSsiTCIraFsyXSsiLCIrZFszXSsiViIrZFsyXSsiTCIraFsxXSsiLCIrZFswXSsiWiIpLCIiPT09ZyYmKGc9Ik0wLDBaIiksaS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixnKS5jYWxsKGEuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pKX1lbHNlIGgucmVtb3ZlKCl9KSl9KHQsZSxyLHUpLGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWUueGF4aXMsbD1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKG8sciwidHJhY2UgYmFycyIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLHU9clswXS50cmFjZSxmPWkuZW5zdXJlU2luZ2xlKG8sImciLCJsaW5lcyIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlJiZ1LmNvbm5lY3Rvci5saW5lLndpZHRoKXt2YXIgaD0iaCI9PT11Lm9yaWVudGF0aW9uLHA9Zi5zZWxlY3RBbGwoImcubGluZSIpLmRhdGEoaS5pZGVudGl0eSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxpbmUiLCEwKSxwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLnNpemUoKTtwLmVhY2goKGZ1bmN0aW9uKHIsbyl7aWYobz09PWQtMXx8ci5jTmV4dCl7dmFyIHU9YyhyLHMsbCxoKSxmPXVbMF0scD11WzFdLG09IiI7dm9pZCAwIT09ZlszXSYmdm9pZCAwIT09cFszXSYmKGg/KG0rPSJNIitmWzBdKyIsIitwWzFdKyJMIitmWzJdKyIsIitwWzJdLG0rPSJNIitmWzFdKyIsIitwWzFdKyJMIitmWzNdKyIsIitwWzJdKToobSs9Ik0iK2ZbMV0rIiwiK3BbMV0rIkwiK2ZbMl0rIiwiK3BbM10sbSs9Ik0iK2ZbMV0rIiwiK3BbMF0rIkwiK2ZbMl0rIiwiK3BbMl0pKSwiIj09PW0mJihtPSJNMCwwWiIpLGkuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJwYXRoIikuYXR0cigiZCIsbSkuY2FsbChhLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KX19KSl9ZWxzZSBmLnJlbW92ZSgpfSkpfSh0LGUscix1KSxzLnBsb3QodCxlLHIsdSx7bW9kZTpmLmZ1bm5lbG1vZGUsbm9ybTpmLmZ1bm5lbG1vZGUsZ2FwOmYuZnVubmVsZ2FwLGdyb3VwZ2FwOmYuZnVubmVsZ3JvdXBnYXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uL2Jhci9wbG90Ijo2NTksIi4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiQHBsb3RseS9kMyI6NTh9XSw3ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0scz10KCIuLi9iYXIvc3R5bGUiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9cy5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIHM9cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmZ1bm5lbGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LHMsImZ1bm5lbCIpLHMuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykscz1lWzBdLnRyYWNlO3Iuc2VsZWN0QWxsKCIucG9pbnQgPiBwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9cy5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsdC5tY3x8ZS5jb2xvcikuY2FsbChhLnN0cm9rZSx0Lm1sY3x8ZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsdC5tbHd8fGUubGluZS53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkP286MSl9fSkpLGMocixzLHQpLHIuc2VsZWN0QWxsKCIucmVnaW9ucyIpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuY2FsbChhLmZpbGwscy5jb25uZWN0b3IuZmlsbGNvbG9yKX0pKSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzgsIi4uL2Jhci9zdHlsZSI6NjYyLCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NjQsIkBwbG90bHkvZDMiOjU4fV0sNzgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOm4ubGFiZWxzLGxhYmVsMDpuLmxhYmVsMCxkbGFiZWw6bi5kbGFiZWwsdmFsdWVzOm4udmFsdWVzLG1hcmtlcjp7Y29sb3JzOm4ubWFya2VyLmNvbG9ycyxsaW5lOntjb2xvcjpsKHt9LG4ubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOmwoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxzY2FsZWdyb3VwOmwoe30sbi5zY2FsZWdyb3VwLHt9KSx0ZXh0aW5mbzpsKHt9LG4udGV4dGluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il19KSx0ZXh0dGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInRleHQiLCJwZXJjZW50Il19KSxob3ZlcmluZm86bCh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm8oe30se2tleXM6WyJsYWJlbCIsImNvbG9yIiwidmFsdWUiLCJ0ZXh0IiwicGVyY2VudCJdfSksdGV4dHBvc2l0aW9uOmwoe30sbi50ZXh0cG9zaXRpb24se3ZhbHVlczpbImluc2lkZSIsIm5vbmUiXSxkZmx0OiJpbnNpZGUifSksdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LHRpdGxlOnt0ZXh0Om4udGl0bGUudGV4dCxmb250Om4udGl0bGUuZm9udCxwb3NpdGlvbjpsKHt9LG4udGl0bGUucG9zaXRpb24se3ZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCJdLGRmbHQ6InRvcCBjZW50ZXIifSksZWRpdFR5cGU6InBsb3QifSxkb21haW46YSh7bmFtZToiZnVubmVsYXJlYSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksYXNwZWN0cmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sYmFzZXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMzMyxlZGl0VHlwZToicGxvdCJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vcGllL2F0dHJpYnV0ZXMiOjkwMH1dLDc4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iZnVubmVsYXJlYSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6NjE5fV0sNzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9jYWxjIik7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uY2FsYyh0LGUpfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0KXtuLmNyb3NzVHJhY2VDYWxjKHQse3R5cGU6ImZ1bm5lbGFyZWEifSl9fX0seyIuLi9waWUvY2FsYyI6OTAyfV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi9waWUvZGVmYXVsdHMiKS5oYW5kbGVMYWJlbHNBbmRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgdT1jKCJsYWJlbHMiKSxmPWMoInZhbHVlcyIpLGg9cyh1LGYpLHA9aC5sZW47aWYoZS5faGFzTGFiZWxzPWguaGFzTGFiZWxzLGUuX2hhc1ZhbHVlcz1oLmhhc1ZhbHVlcywhZS5faGFzTGFiZWxzJiZlLl9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSkscCl7ZS5fbGVuZ3RoPXAsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiLGwucGFwZXJfYmdjb2xvciksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgZCxtPWMoInRleHQiKSxnPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGd8fChkPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KG0pPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxnfHxkJiYibm9uZSIhPT1kKXt2YXIgdj1jKCJ0ZXh0cG9zaXRpb24iKTtvKHQsZSxsLGMsdix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSl9YShlLGwsYyksYygidGl0bGUudGV4dCIpJiYoYygidGl0bGUucG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbC5mb250KSksYygiYXNwZWN0cmF0aW8iKSxjKCJiYXNlcmF0aW8iKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTg0LCIuLi9iYXIvZGVmYXVsdHMiOjY1MiwiLi4vcGllL2RlZmF1bHRzIjo5MDMsIi4vYXR0cmlidXRlcyI6NzgzfV0sNzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImZ1bm5lbGFyZWEiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwiZnVubmVsYXJlYSIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuLi9waWUvc3R5bGVfb25lIiksbWV0YTp7fX19LHsiLi4vcGllL3N0eWxlX29uZSI6OTExLCIuL2F0dHJpYnV0ZXMiOjc4MywiLi9iYXNlX3Bsb3QiOjc4NCwiLi9jYWxjIjo3ODUsIi4vZGVmYXVsdHMiOjc4NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzg4LCIuL2xheW91dF9kZWZhdWx0cyI6Nzg5LCIuL3Bsb3QiOjc5MCwiLi9zdHlsZSI6NzkxfV0sNzg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3BpZS9sYXlvdXRfYXR0cmlidXRlcyIpLmhpZGRlbmxhYmVscztlLmV4cG9ydHM9e2hpZGRlbmxhYmVsczpuLGZ1bm5lbGFyZWFjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZGZ1bm5lbGFyZWFjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vcGllL2xheW91dF9hdHRyaWJ1dGVzIjo5MDd9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoImhpZGRlbmxhYmVscyIpLHIoImZ1bm5lbGFyZWFjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kZnVubmVsYXJlYWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjUwMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzg4fV0sNzkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vbGliIiksbz1hLnN0clNjYWxlLHM9YS5zdHJUcmFuc2xhdGUsbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uL2Jhci9wbG90IikudG9Nb3ZlSW5zaWRlQmFyLHU9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLGY9dS5yZWNvcmRNaW5UZXh0U2l6ZSxoPXUuY2xlYXJNaW5UZXh0U2l6ZSxwPXQoIi4uL3BpZS9oZWxwZXJzIiksZD10KCIuLi9waWUvcGxvdCIpLG09ZC5hdHRhY2hGeEhhbmRsZXJzLGc9ZC5kZXRlcm1pbmVJbnNpZGVUZXh0Rm9udCx2PWQubGF5b3V0QXJlYXMseT1kLnByZXJlbmRlclRpdGxlcyx4PWQucG9zaXRpb25UaXRsZU91dHNpZGUsYj1kLmZvcm1hdFNsaWNlTGFiZWw7ZnVuY3Rpb24gXyh0LGUpe3JldHVybiJsIisoZVswXS10WzBdKSsiLCIrKGVbMV0tdFsxXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtoKCJmdW5uZWxhcmVhIixyKSx5KGUsdCksdihlLHIuX3NpemUpLGEubWFrZVRyYWNlR3JvdXBzKHIuX2Z1bm5lbGFyZWFsYXllcixlLCJ0cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB1PW4uc2VsZWN0KHRoaXMpLGg9ZVswXSxkPWgudHJhY2U7IWZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm47dmFyIGU9dFswXSxyPWUudHJhY2Usbj1yLmFzcGVjdHJhdGlvLGk9ci5iYXNlcmF0aW87aT4uOTk5JiYoaT0uOTk5KTt2YXIgYSxvPU1hdGgucG93KGksMikscz1lLnZUb3RhbCxsPXMsYz1zKm8vKDEtbykvcztmdW5jdGlvbiB1KCl7dmFyIHQsZT17eDp0PU1hdGguc3FydChjKSx5Oi10fTtyZXR1cm5bZS54LGUueV19dmFyIGYsaCxwPVtdO2ZvcihwLnB1c2godSgpKSxmPXQubGVuZ3RoLTE7Zj4tMTtmLS0paWYoIShoPXRbZl0pLmhpZGRlbil7dmFyIGQ9aC52L2w7Yys9ZCxwLnB1c2godSgpKX12YXIgbT0xLzAsZz0tMS8wO2ZvcihmPTA7ZjxwLmxlbmd0aDtmKyspYT1wW2ZdLG09TWF0aC5taW4obSxhWzFdKSxnPU1hdGgubWF4KGcsYVsxXSk7Zm9yKGY9MDtmPHAubGVuZ3RoO2YrKylwW2ZdWzFdLT0oZyttKS8yO3ZhciB2PXBbcC5sZW5ndGgtMV1bMF0seT1lLnIseD0oZy1tKS8yLGI9eS92LF89eS94Km47Zm9yKGUucj1fKngsZj0wO2Y8cC5sZW5ndGg7ZisrKXBbZl1bMF0qPWIscFtmXVsxXSo9Xzt2YXIgdz1bLShhPXBbMF0pWzBdLGFbMV1dLFQ9W2FbMF0sYVsxXV0saz0wO2ZvcihmPXQubGVuZ3RoLTE7Zj4tMTtmLS0paWYoIShoPXRbZl0pLmhpZGRlbil7dmFyIEE9cFtrKz0xXVswXSxNPXBba11bMV07aC5UTD1bLUEsTV0saC5UUj1bQSxNXSxoLkJMPXcsaC5CUj1ULGgucHhtaWQ9KFM9aC5UUixFPWguQlIsWy41KihTWzBdK0VbMF0pLC41KihTWzFdK0VbMV0pXSksdz1oLlRMLFQ9aC5UUn12YXIgUyxFfShlKSx1LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YShlKTt1LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKG8scyl7aWYoby5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle28ucG9pbnROdW1iZXI9by5pLG8uY3VydmVOdW1iZXI9ZC5pbmRleDt2YXIgdT1oLmN4LHY9aC5jeSx5PW4uc2VsZWN0KHRoaXMpLHg9eS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW29dKTt4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic3VyZmFjZSIsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJhbGwifSkseS5jYWxsKG0sdCxlKTt2YXIgdz0iTSIrKHUrby5UUlswXSkrIiwiKyh2K28uVFJbMV0pK18oby5UUixvLkJSKStfKG8uQlIsby5CTCkrXyhvLkJMLG8uVEwpKyJaIjt4LmF0dHIoImQiLHcpLGIodCxvLGgpO3ZhciBUPXAuY2FzdE9wdGlvbihkLnRleHRwb3NpdGlvbixvLnB0cyksaz15LnNlbGVjdEFsbCgiZy5zbGljZXRleHQiKS5kYXRhKG8udGV4dCYmIm5vbmUiIT09VD9bMF06W10pO2suZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKSxrLmV4aXQoKS5yZW1vdmUoKSxrLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGg9YS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLHA9YS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxnKGQsbyxyLmZvbnQpKTtoLnRleHQoby50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoaS5mb250LHApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIG0seSx4LGI9aS5iQm94KGgubm9kZSgpKSxfPU1hdGgubWluKG8uQkxbMV0sby5CUlsxXSkrdix3PU1hdGgubWF4KG8uVExbMV0sby5UUlsxXSkrdjt5PU1hdGgubWF4KG8uVExbMF0sby5CTFswXSkrdSx4PU1hdGgubWluKG8uVFJbMF0sby5CUlswXSkrdSwobT1jKHkseCxfLHcsYix7aXNIb3Jpem9udGFsOiEwLGNvbnN0cmFpbmVkOiEwLGFuZ2xlOjAsYW5jaG9yOiJtaWRkbGUifSkpLmZvbnRTaXplPXAuc2l6ZSxmKGQudHlwZSxtLHIpLGVbc10udHJhbnNmb3JtPW0saC5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybShtKSl9KSl9fSkpO3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50aXRsZXRleHQiKS5kYXRhKGQudGl0bGUudGV4dD9bMF06W10pO3YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aXRsZXRleHQiLCEwKSx2LmV4aXQoKS5yZW1vdmUoKSx2LmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9YS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLGM9ZC50aXRsZS50ZXh0O2QuX21ldGEmJihjPWEudGVtcGxhdGVTdHJpbmcoYyxkLl9tZXRhKSksZS50ZXh0KGMpLmF0dHIoe2NsYXNzOiJ0aXRsZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChpLmZvbnQsZC50aXRsZS5mb250KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpO3ZhciB1PXgoaCxyLl9zaXplKTtlLmF0dHIoInRyYW5zZm9ybSIscyh1LngsdS55KStvKE1hdGgubWluKDEsdS5zY2FsZSkpK3ModS50eCx1LnR5KSl9KSl9KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4uL2Jhci9wbG90Ijo2NTksIi4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiLi4vcGllL2hlbHBlcnMiOjkwNSwiLi4vcGllL3Bsb3QiOjkwOSwiQHBsb3RseS9kMyI6NTh9XSw3OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vcGllL3N0eWxlX29uZSIpLGE9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2Z1bm5lbGFyZWFsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpO2EodCxlLCJmdW5uZWxhcmVhIiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KSl9KSl9fSx7Ii4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiLi4vcGllL3N0eWxlX29uZSI6OTExLCJAcGxvdGx5L2QzIjo1OH1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz11KHt6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHg6dSh7fSxuLngse2ltcGxpZWRFZGl0czp7eHR5cGU6ImFycmF5In19KSx4MDp1KHt9LG4ueDAse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSksZHg6dSh7fSxuLmR4LHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLHk6dSh7fSxuLnkse2ltcGxpZWRFZGl0czp7eXR5cGU6ImFycmF5In19KSx5MDp1KHt9LG4ueTAse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSksZHk6dSh7fSxuLmR5LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHhwZXJpb2Q6dSh7fSxuLnhwZXJpb2Qse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseXBlcmlvZDp1KHt9LG4ueXBlcmlvZCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx4cGVyaW9kMDp1KHt9LG4ueHBlcmlvZDAse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseXBlcmlvZDA6dSh7fSxuLnlwZXJpb2QwLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHhwZXJpb2RhbGlnbm1lbnQ6dSh7fSxuLnhwZXJpb2RhbGlnbm1lbnQse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseXBlcmlvZGFsaWdubWVudDp1KHt9LG4ueXBlcmlvZGFsaWdubWVudCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc3Bvc2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx4dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHl0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0senNtb290aDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmFzdCIsImJlc3QiLCExXSxkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbmdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6Im5vbmUifSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0seGhvdmVyZm9ybWF0Om8oIngiKSx5aG92ZXJmb3JtYXQ6bygieSIpLHpob3ZlcmZvcm1hdDpvKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOnMoKSx0ZXh0dGVtcGxhdGU6bCh7YXJyYXlPazohMSxlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsieCIsInkiLCJ6IiwidGV4dCJdfSksdGV4dGZvbnQ6YSh7ZWRpdFR5cGU6InBsb3QiLGF1dG9TaXplOiEwLGF1dG9Db2xvcjohMCxjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxzaG93bGVnZW5kOnUoe30saS5zaG93bGVnZW5kLHtkZmx0OiExfSl9LHt0cmFuc2Zvcm1zOnZvaWQgMH0sYygiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjZ9XSw3OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxzPXQoIi4uL2hpc3RvZ3JhbTJkL2NhbGMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYz10KCIuL2NvbnZlcnRfY29sdW1uX3h5eiIpLHU9dCgiLi9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9pbnRlcnAyZCIpLGg9dCgiLi9maW5kX2VtcHRpZXMiKSxwPXQoIi4vbWFrZV9ib3VuZF9hcnJheSIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT10W25dO2khPT1kJiZlLnB1c2goaSl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsZyx2LHkseCxiLF8sdyxULGssQSxNPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxTPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxFPW4udHJhY2VJcyhlLCJjb250b3VyIiksTD1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksQz1uLnRyYWNlSXMoZSwiZ2wyZCIpLFA9RT8iYmVzdCI6ZS56c21vb3RoO2lmKE0uX21pbkR0aWNrPTAsUy5fbWluRHRpY2s9MCxMKXk9KEE9cyh0LGUpKS5vcmlnX3gscj1BLngsZz1BLngwLHY9QS5keCx3PUEub3JpZ195LHg9QS55LGI9QS55MCxfPUEuZHksVD1BLno7ZWxzZXt2YXIgST1lLno7aS5pc0FycmF5MUQoSSk/KGMoZSxNLFMsIngiLCJ5IixbInoiXSkscj1lLl94LHg9ZS5feSxJPWUuX3opOih5PWUueD9NLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sdz1lLnk/Uy5tYWtlQ2FsY2RhdGEoZSwieSIpOltdLHI9byhlLE0sIngiLHkpLnZhbHMseD1vKGUsUywieSIsdykudmFscyxlLl94PXIsZS5feT14KSxnPWUueDAsdj1lLmR4LGI9ZS55MCxfPWUuZHksVD11KEksZSxNLFMpfWZ1bmN0aW9uIE8odCl7UD1lLl9pbnB1dC56c21vb3RoPWUuenNtb290aD0hMSxpLndhcm4oJ2Nhbm5vdCB1c2UgenNtb290aDogImZhc3QiOiAnK3QpfWlmKChNLnJhbmdlYnJlYWtzfHxTLnJhbmdlYnJlYWtzKSYmKFQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPS0xLGE9MDthPHIubGVuZ3RoO2ErKylpZihlW2FdIT09ZCl7aSsrLG5baV09W107Zm9yKHZhciBvPTA7bzxyW2FdLmxlbmd0aDtvKyspdFtvXSE9PWQmJm5baV0ucHVzaChyW2FdW29dKX1yZXR1cm4gbn0ocix4LFQpLEx8fChyPW0ocikseD1tKHgpLGUuX3g9cixlLl95PXgpKSxMfHwhRSYmIWUuY29ubmVjdGdhcHN8fChlLl9lbXB0eXBvaW50cz1oKFQpLGYoVCxlLl9lbXB0eXBvaW50cykpLCJmYXN0Ij09PVApaWYoImxvZyI9PT1NLnR5cGV8fCJsb2ciPT09Uy50eXBlKU8oImxvZyBheGlzIGZvdW5kIik7ZWxzZSBpZighTCl7aWYoci5sZW5ndGgpe3ZhciB6PShyW3IubGVuZ3RoLTFdLXJbMF0pLyhyLmxlbmd0aC0xKSxEPU1hdGguYWJzKHovMTAwKTtmb3Ioaz0wO2s8ci5sZW5ndGgtMTtrKyspaWYoTWF0aC5hYnMocltrKzFdLXJba10teik+RCl7TygieCBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fWlmKHgubGVuZ3RoJiYiZmFzdCI9PT1QKXt2YXIgUj0oeFt4Lmxlbmd0aC0xXS14WzBdKS8oeC5sZW5ndGgtMSksRj1NYXRoLmFicyhSLzEwMCk7Zm9yKGs9MDtrPHgubGVuZ3RoLTE7aysrKWlmKE1hdGguYWJzKHhbaysxXS14W2tdLVIpPkYpe08oInkgc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX19dmFyIEI9aS5tYXhSb3dMZW5ndGgoVCksTj0ic2NhbGVkIj09PWUueHR5cGU/IiI6cixqPXAoZSxOLGcsdixCLE0pLFU9InNjYWxlZCI9PT1lLnl0eXBlPyIiOngsVj1wKGUsVSxiLF8sVC5sZW5ndGgsUyk7Q3x8KGUuX2V4dHJlbWVzW00uX2lkXT1hLmZpbmRFeHRyZW1lcyhNLGopLGUuX2V4dHJlbWVzW1MuX2lkXT1hLmZpbmRFeHRyZW1lcyhTLFYpKTt2YXIgSD17eDpqLHk6Vix6OlQsdGV4dDplLl90ZXh0fHxlLnRleHQsaG92ZXJ0ZXh0OmUuX2hvdmVydGV4dHx8ZS5ob3ZlcnRleHR9O2lmKGUueHBlcmlvZGFsaWdubWVudCYmeSYmKEgub3JpZ194PXkpLGUueXBlcmlvZGFsaWdubWVudCYmdyYmKEgub3JpZ195PXcpLE4mJk4ubGVuZ3RoPT09ai5sZW5ndGgtMSYmKEgueENlbnRlcj1OKSxVJiZVLmxlbmd0aD09PVYubGVuZ3RoLTEmJihILnlDZW50ZXI9VSksTCYmKEgueFJhbmdlcz1BLnhSYW5nZXMsSC55UmFuZ2VzPUEueVJhbmdlcyxILnB0cz1BLnB0cyksRXx8bCh0LGUse3ZhbHM6VCxjTGV0dGVyOiJ6In0pLEUmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBxPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtILnhmaWxsPXAocSxOLGcsdixCLE0pLEgueWZpbGw9cChxLFUsYixfLFQubGVuZ3RoLFMpfXJldHVybltIXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjM3NCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6NTUxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9oaXN0b2dyYW0yZC9jYWxjIjo4MjYsIi4vY2xlYW5fMmRfYXJyYXkiOjc5NCwiLi9jb252ZXJ0X2NvbHVtbl94eXoiOjc5NiwiLi9maW5kX2VtcHRpZXMiOjc5OCwiLi9pbnRlcnAyZCI6ODAxLCIuL21ha2VfYm91bmRfYXJyYXkiOjgwM31dLDc5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGMsdSxmLGg7ZnVuY3Rpb24gcCh0KXtpZihuKHQpKXJldHVybit0fWlmKGUmJmUudHJhbnNwb3NlKXtmb3Iocz0wLGY9MDtmPHQubGVuZ3RoO2YrKylzPU1hdGgubWF4KHMsdFtmXS5sZW5ndGgpO2lmKDA9PT1zKXJldHVybiExO2M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSx1PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odFtyXXx8W10pW2VdfX1lbHNlIHM9dC5sZW5ndGgsYz1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdLmxlbmd0aH0sdT1mdW5jdGlvbih0LGUscil7cmV0dXJuKHRbZV18fFtdKVtyXX07dmFyIGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPT09YXx8cj09PWE/YTp1KHQsZSxyKX07ZnVuY3Rpb24gbSh0KXtpZihlJiYiY2FycGV0IiE9PWUudHlwZSYmImNvbnRvdXJjYXJwZXQiIT09ZS50eXBlJiZ0JiYiY2F0ZWdvcnkiPT09dC50eXBlJiZlWyJfIit0Ll9pZC5jaGFyQXQoMCldLmxlbmd0aCl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49e30sbz1lWyJfIityKyJDYXRlZ29yeU1hcCJdfHxlW3JdO2ZvcihmPTA7ZjxvLmxlbmd0aDtmKyspbltvW2ZdXT1mO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1uW3QuX2NhdGVnb3JpZXNbZV1dO3JldHVybiByKzE/cjphfX1yZXR1cm4gaS5pZGVudGl0eX12YXIgZz1tKHIpLHY9bShvKTtvJiYiY2F0ZWdvcnkiPT09by50eXBlJiYocz1vLl9jYXRlZ29yaWVzLmxlbmd0aCk7dmFyIHk9bmV3IEFycmF5KHMpO2ZvcihmPTA7ZjxzO2YrKylmb3IobD1yJiYiY2F0ZWdvcnkiPT09ci50eXBlP3IuX2NhdGVnb3JpZXMubGVuZ3RoOmModCxmKSx5W2ZdPW5ldyBBcnJheShsKSxoPTA7aDxsO2grKyl5W2ZdW2hdPXAoZCh0LHYoZiksZyhoKSkpO3JldHVybiB5fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCJmYXN0LWlzbnVtZXJpYyI6MTkwfV0sNzk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bWluOiJ6bWluIixtYXg6InptYXgifX0se31dLDc5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz10Ll9sZW5ndGgsdT1lLm1ha2VDYWxjZGF0YSh0LG8pLGY9ci5tYWtlQ2FsY2RhdGEodCxzKTt1PWEodCxlLG8sdSkudmFscyxmPWEodCxyLHMsZikudmFsczt2YXIgaCxwLGQsbSxnPXQudGV4dCx2PXZvaWQgMCE9PWcmJm4uaXNBcnJheTFEKGcpLHk9dC5ob3ZlcnRleHQseD12b2lkIDAhPT15JiZuLmlzQXJyYXkxRCh5KSxiPW4uZGlzdGluY3RWYWxzKHUpLF89Yi52YWxzLHc9bi5kaXN0aW5jdFZhbHMoZiksVD13LnZhbHMsaz1bXSxBPVQubGVuZ3RoLE09Xy5sZW5ndGg7Zm9yKGg9MDtoPGwubGVuZ3RoO2grKylrW2hdPW4uaW5pdDJkQXJyYXkoQSxNKTt2JiYoZD1uLmluaXQyZEFycmF5KEEsTSkpLHgmJihtPW4uaW5pdDJkQXJyYXkoQSxNKSk7dmFyIFM9bi5pbml0MmRBcnJheShBLE0pO2ZvcihoPTA7aDxjO2grKylpZih1W2hdIT09aSYmZltoXSE9PWkpe3ZhciBFPW4uZmluZEJpbih1W2hdK2IubWluRGlmZi8yLF8pLEw9bi5maW5kQmluKGZbaF0rdy5taW5EaWZmLzIsVCk7Zm9yKHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIEM9dFtsW3BdXTtrW3BdW0xdW0VdPUNbaF0sU1tMXVtFXT1ofXYmJihkW0xdW0VdPWdbaF0pLHgmJihtW0xdW0VdPXlbaF0pfWZvcih0WyJfIitvXT1fLHRbIl8iK3NdPVQscD0wO3A8bC5sZW5ndGg7cCsrKXRbIl8iK2xbcF1dPWtbcF07diYmKHQuX3RleHQ9ZCkseCYmKHQuX2hvdmVydGV4dD1tKSxlJiYiY2F0ZWdvcnkiPT09ZS50eXBlJiYodFsiXyIrbysiQ2F0ZWdvcnlNYXAiXT1fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhdGVnb3JpZXNbdF19KSkpLHImJiJjYXRlZ29yeSI9PT1yLnR5cGUmJih0WyJfIitzKyJDYXRlZ29yeU1hcCJdPVQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gci5fY2F0ZWdvcmllc1t0XX0pKSksdC5fYWZ0ZXIyYmVmb3JlPVN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU1MX1dLDc5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHl6X2RlZmF1bHRzIiksYT10KCIuL2xhYmVsX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLHM9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWkodCxlLGYsdSk/KG8odCxlLHUsZiksZigieGhvdmVyZm9ybWF0IiksZigieWhvdmVyZm9ybWF0IiksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxhKGYsdSkscyh0LGUsZix1KSxmKCJob3Zlcm9uZ2FwcyIpLGYoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopJiYhMSE9PWUuenNtb290aCksbCh0LGUsdSxmLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3NiwiLi4vLi4vbGliIjo1MDMsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjo5NDYsIi4vYXR0cmlidXRlcyI6NzkyLCIuL2xhYmVsX2RlZmF1bHRzIjo4MDIsIi4vc3R5bGVfZGVmYXVsdHMiOjgwNiwiLi94eXpfZGVmYXVsdHMiOjgwN31dLDc5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxmPXt9LGg9W10scD10WzBdLGQ9W10sbT1bMCwwLDBdLGc9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTxnO2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGZbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6aC5wdXNoKFtyLGldKSk7Zm9yKDtoLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1oLmxlbmd0aC0xO28+PTA7by0tKShzPSgoZltbKHI9KGE9aFtvXSlbMF0pLTEsaT1hWzFdXV18fG0pWzJdKyhmW1tyKzEsaV1dfHxtKVsyXSsoZltbcixpLTFdXXx8bSlbMl0rKGZbW3IsaSsxXV18fG0pWzJdKS8yMCkmJihsW2FdPVtyLGksc10saC5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpZlthXT1sW2FdLHUucHVzaChsW2FdKX1yZXR1cm4gdS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlWzJdLXRbMl19KSl9fSx7Ii4uLy4uL2xpYiI6NTAzfV0sNzk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe2x8fChsPXt9KTt2YXIgYyx1LGYsaCxwPWwuaXNDb250b3VyLGQ9dC5jZFswXSxtPWQudHJhY2UsZz10LnhhLHY9dC55YSx5PWQueCx4PWQueSxiPWQueixfPWQueENlbnRlcix3PWQueUNlbnRlcixUPWQuem1hc2ssaz1tLnpob3ZlcmZvcm1hdCxBPXksTT14O2lmKCExIT09dC5pbmRleCl7dHJ5e2Y9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxoPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcigiRXJyb3IgaG92ZXJpbmcgb24gaGVhdG1hcCwgcG9pbnROdW1iZXIgbXVzdCBiZSBbcm93LGNvbF0sIGZvdW5kOiIsdC5pbmRleCl9aWYoZjwwfHxmPj1iWzBdLmxlbmd0aHx8aDwwfHxoPmIubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS15WzBdLGUteVt5Lmxlbmd0aC0xXSwwKT4wfHxuLmluYm94KHIteFswXSxyLXhbeC5sZW5ndGgtMV0sMCk+MClyZXR1cm47aWYocCl7dmFyIFM7Zm9yKEE9WzIqeVswXS15WzFdXSxTPTE7Uzx5Lmxlbmd0aDtTKyspQS5wdXNoKCh5W1NdK3lbUy0xXSkvMik7Zm9yKEEucHVzaChbMip5W3kubGVuZ3RoLTFdLXlbeS5sZW5ndGgtMl1dKSxNPVsyKnhbMF0teFsxXV0sUz0xO1M8eC5sZW5ndGg7UysrKU0ucHVzaCgoeFtTXSt4W1MtMV0pLzIpO00ucHVzaChbMip4W3gubGVuZ3RoLTFdLXhbeC5sZW5ndGgtMl1dKX1mPU1hdGgubWF4KDAsTWF0aC5taW4oQS5sZW5ndGgtMixpLmZpbmRCaW4oZSxBKSkpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNLmxlbmd0aC0yLGkuZmluZEJpbihyLE0pKSl9dmFyIEUsTCxDPWcuYzJwKHlbZl0pLFA9Zy5jMnAoeVtmKzFdKSxJPXYuYzJwKHhbaF0pLE89di5jMnAoeFtoKzFdKTtwPyhFPWQub3JpZ194fHx5LEw9ZC5vcmlnX3l8fHgsUD1DLGM9RVtmXSxPPUksdT1MW2hdKTooRT1kLm9yaWdfeHx8X3x8eSxMPWQub3JpZ195fHx3fHx4LGM9Xz9FW2ZdOihFW2ZdK0VbZisxXSkvMix1PXc/TFtoXTooTFtoXStMW2grMV0pLzIsZyYmImNhdGVnb3J5Ij09PWcudHlwZSYmKGM9eVtmXSksdiYmImNhdGVnb3J5Ij09PXYudHlwZSYmKHU9eFtoXSksbS56c21vb3RoJiYoQz1QPWcuYzJwKGMpLEk9Tz12LmMycCh1KSkpO3ZhciB6PWJbaF1bZl07aWYoVCYmIVRbaF1bZl0mJih6PXZvaWQgMCksdm9pZCAwIT09enx8bS5ob3Zlcm9uZ2Fwcyl7dmFyIEQ7QXJyYXkuaXNBcnJheShkLmhvdmVydGV4dCkmJkFycmF5LmlzQXJyYXkoZC5ob3ZlcnRleHRbaF0pP0Q9ZC5ob3ZlcnRleHRbaF1bZl06QXJyYXkuaXNBcnJheShkLnRleHQpJiZBcnJheS5pc0FycmF5KGQudGV4dFtoXSkmJihEPWQudGV4dFtoXVtmXSk7dmFyIFI9byhtKSxGPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltSLm1pbixSLm1heF0saG92ZXJmb3JtYXQ6ayxfc2VwYXJhdG9yczpnLl9zZXBhcmF0b3JzLF9udW1Gb3JtYXQ6Zy5fbnVtRm9ybWF0fSxCPWEudGlja1RleHQoRix6LCJob3ZlciIpLnRleHQ7cmV0dXJuW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDptLl9hZnRlcjJiZWZvcmU/bS5fYWZ0ZXIyYmVmb3JlW2hdW2ZdOltoLGZdLGRpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQubWF4U3Bpa2VEaXN0YW5jZSx4MDpDLHgxOlAseTA6SSx5MTpPLHhMYWJlbFZhbDpjLHlMYWJlbFZhbDp1LHpMYWJlbFZhbDp6LHpMYWJlbDpCLHRleHQ6RH0pXX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6Mzc4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOnQoIi4vY29sb3JiYXIiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoZWF0bWFwIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjgsIi4vYXR0cmlidXRlcyI6NzkyLCIuL2NhbGMiOjc5MywiLi9jb2xvcmJhciI6Nzk1LCIuL2RlZmF1bHRzIjo3OTcsIi4vaG92ZXIiOjc5OSwiLi9wbG90Ijo4MDQsIi4vc3R5bGUiOjgwNX1dLDgwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtmdW5jdGlvbiBhKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHY9MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3IoYT0obj1lW3NdKVswXSxvPW5bMV0sZD10W2FdW29dLHA9MCxoPTAsbD0wO2w8NDtsKyspKHU9dFthKyhjPWlbbF0pWzBdXSkmJnZvaWQgMCE9PShmPXVbbytjWzFdXSkmJigwPT09cD9tPWc9ZjoobT1NYXRoLm1pbihtLGYpLGc9TWF0aC5tYXgoZyxmKSksaCsrLHArPWYpO2lmKDA9PT1oKXRocm93Iml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnMiO3RbYV1bb109cC9oLHZvaWQgMD09PWQ/aDw0JiYodj0xKToodFthXVtvXT0oMStyKSp0W2FdW29dLXIqZCxnPm0mJih2PU1hdGgubWF4KHYsTWF0aC5hYnModFthXVtvXS1kKS8oZy1tKSkpKX1yZXR1cm4gdn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPTE7Zm9yKG8odCxlKSxyPTA7cjxlLmxlbmd0aCYmIShlW3JdWzJdPDQpO3IrKyk7Zm9yKGU9ZS5zbGljZShyKSxyPTA7cjwxMDAmJmk+LjAxO3IrKylpPW8odCxlLGEoaSkpO3JldHVybiBpPi4wMSYmbi5sb2coImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5IixpKSx0fX0seyIuLi8uLi9saWIiOjUwM31dLDgwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0KCJ0ZXh0dGVtcGxhdGUiKTt2YXIgcj1uLmV4dGVuZEZsYXQoe30sZS5mb250LHtjb2xvcjoiYXV0byIsc2l6ZToiYXV0byJ9KTtuLmNvZXJjZUZvbnQodCwidGV4dGZvbnQiLHIpfX0seyIuLi8uLi9saWIiOjUwM31dLDgwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsLGMsdSxmPVtdLGg9bi50cmFjZUlzKHQsImNvbnRvdXIiKSxwPW4udHJhY2VJcyh0LCJoaXN0b2dyYW0iKSxkPW4udHJhY2VJcyh0LCJnbDJkIik7aWYoaShlKSYmZS5sZW5ndGg+MSYmIXAmJiJjYXRlZ29yeSIhPT1zLnR5cGUpe3ZhciBtPWUubGVuZ3RoO2lmKCEobTw9bykpcmV0dXJuIGg/ZS5zbGljZSgwLG8pOmUuc2xpY2UoMCxvKzEpO2lmKGh8fGQpZj1lLnNsaWNlKDAsbyk7ZWxzZSBpZigxPT09bylmPVtlWzBdLS41LGVbMF0rLjVdO2Vsc2V7Zm9yKGY9WzEuNSplWzBdLS41KmVbMV1dLHU9MTt1PG07dSsrKWYucHVzaCguNSooZVt1LTFdK2VbdV0pKTtmLnB1c2goMS41KmVbbS0xXS0uNSplW20tMl0pfWlmKG08byl7dmFyIGc9ZltmLmxlbmd0aC0xXSx2PWctZltmLmxlbmd0aC0yXTtmb3IodT1tO3U8bzt1KyspZys9dixmLnB1c2goZyl9fWVsc2V7dmFyIHk9dFtzLl9pZC5jaGFyQXQoMCkrImNhbGVuZGFyIl07aWYocClsPXMucjJjKHIsMCx5KTtlbHNlIGlmKGkoZSkmJjE9PT1lLmxlbmd0aClsPWVbMF07ZWxzZSBpZih2b2lkIDA9PT1yKWw9MDtlbHNle2w9KCJsb2ciPT09cy50eXBlP3MuZDJjOnMucjJjKShyLDAseSl9Zm9yKGM9YXx8MSx1PWh8fGQ/MDotLjU7dTxvO3UrKylmLnB1c2gobCtjKnUpfXJldHVybiBmfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOH1dLDgwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uL3NjYXR0ZXIvZm9ybWF0X2xhYmVscyIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMscD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UsZD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLG09dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztmdW5jdGlvbiBnKHQpe3JldHVybiB0LnNlbGVjdEFsbCgiZy5oZWF0bWFwLWxhYmVsIil9ZnVuY3Rpb24gdih0KXtnKHQpLnJlbW92ZSgpfWZ1bmN0aW9uIHkodCxlKXt2YXIgcj1lLmxlbmd0aC0yLG49bC5jb25zdHJhaW4obC5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT1lW24rMV0sbz1sLmNvbnN0cmFpbihuKyh0LWkpLyhhLWkpLS41LDAscikscz1NYXRoLnJvdW5kKG8pLGM9TWF0aC5hYnMoby1zKTtyZXR1cm4gbyYmbyE9PXImJmM/e2JpbjA6cyxmcmFjOmMsYmluMTpNYXRoLnJvdW5kKHMrYy8oby1zKSl9OntiaW4wOnMsYmluMTpzLGZyYWM6MH19ZnVuY3Rpb24geCh0LGUpe3ZhciByPWUubGVuZ3RoLTEsbj1sLmNvbnN0cmFpbihsLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPSh0LWkpLyhlW24rMV0taSl8fDA7cmV0dXJuIGE8PTA/e2JpbjA6bixiaW4xOm4sZnJhYzowfTphPC41P3tiaW4wOm4sYmluMTpuKzEsZnJhYzphfTp7YmluMDpuKzEsYmluMTpuLGZyYWM6MS1hfX1mdW5jdGlvbiBiKHQsZSxyKXt0W2VdPXJbMF0sdFtlKzFdPXJbMV0sdFtlKzJdPXJbMl0sdFtlKzNdPU1hdGgucm91bmQoMjU1KnJbM10pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixfKXt2YXIgdz1lLnhheGlzLFQ9ZS55YXhpcztsLm1ha2VUcmFjZUdyb3VwcyhfLHIsImhtIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsXyxrLEEsTSxTLEUsTCxDPW4uc2VsZWN0KHRoaXMpLFA9ZVswXSxJPVAudHJhY2UsTz1JLnhnYXB8fDAsej1JLnlnYXB8fDAsRD1QLnosUj1QLngsRj1QLnksQj1QLnhDZW50ZXIsTj1QLnlDZW50ZXIsaj1hLnRyYWNlSXMoSSwiY29udG91ciIpLFU9aj8iYmVzdCI6SS56c21vb3RoLFY9RC5sZW5ndGgsSD1sLm1heFJvd0xlbmd0aChEKSxxPSExLEc9ITE7Zm9yKFM9MDt2b2lkIDA9PT1yJiZTPFIubGVuZ3RoLTE7KXI9dy5jMnAoUltTXSksUysrO2ZvcihTPVIubGVuZ3RoLTE7dm9pZCAwPT09XyYmUz4wOylfPXcuYzJwKFJbU10pLFMtLTtmb3IoXzxyJiYoaz1fLF89cixyPWsscT0hMCksUz0wO3ZvaWQgMD09PUEmJlM8Ri5sZW5ndGgtMTspQT1ULmMycChGW1NdKSxTKys7Zm9yKFM9Ri5sZW5ndGgtMTt2b2lkIDA9PT1NJiZTPjA7KU09VC5jMnAoRltTXSksUy0tO2lmKE08QSYmKGs9QSxBPU0sTT1rLEc9ITApLGomJihCPVIsTj1GLFI9UC54ZmlsbCxGPVAueWZpbGwpLCJmYXN0IiE9PVUpe3ZhciBZPSJiZXN0Ij09PVU/MDouNTtyPU1hdGgubWF4KC1ZKncuX2xlbmd0aCxyKSxfPU1hdGgubWluKCgxK1kpKncuX2xlbmd0aCxfKSxBPU1hdGgubWF4KC1ZKlQuX2xlbmd0aCxBKSxNPU1hdGgubWluKCgxK1kpKlQuX2xlbmd0aCxNKX12YXIgVyxYLFo9TWF0aC5yb3VuZChfLXIpLEo9TWF0aC5yb3VuZChNLUEpO2lmKFo8PTB8fEo8PTApcmV0dXJuIEMuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoW10pLmV4aXQoKS5yZW1vdmUoKSx2b2lkIHYoQyk7ImZhc3QiPT09VT8oVz1ILFg9Vik6KFc9WixYPUopO3ZhciBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO0sud2lkdGg9VyxLLmhlaWdodD1YO3ZhciBRLCQsdHQ9Sy5nZXRDb250ZXh0KCIyZCIpLGV0PXAoSSx7bm9OdW1lcmljQ2hlY2s6ITAscmV0dXJuQXJyYXk6ITB9KTsiZmFzdCI9PT1VPyhRPXE/ZnVuY3Rpb24odCl7cmV0dXJuIEgtMS10fTpsLmlkZW50aXR5LCQ9Rz9mdW5jdGlvbih0KXtyZXR1cm4gVi0xLXR9OmwuaWRlbnRpdHkpOihRPWZ1bmN0aW9uKHQpe3JldHVybiBsLmNvbnN0cmFpbihNYXRoLnJvdW5kKHcuYzJwKFJbdF0pLXIpLDAsWil9LCQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwuY29uc3RyYWluKE1hdGgucm91bmQoVC5jMnAoRlt0XSktQSksMCxKKX0pO3ZhciBydCxudCxpdCxhdCxvdD0kKDApLHN0PVtvdCxvdF0sbHQ9cT8wOjEsY3Q9Rz8wOjEsdXQ9MCxmdD0wLGh0PTAscHQ9MDtmdW5jdGlvbiBkdCh0LGUpe2lmKHZvaWQgMCE9PXQpe3ZhciByPWV0KHQpO3JldHVybiByWzBdPU1hdGgucm91bmQoclswXSksclsxXT1NYXRoLnJvdW5kKHJbMV0pLHJbMl09TWF0aC5yb3VuZChyWzJdKSx1dCs9ZSxmdCs9clswXSplLGh0Kz1yWzFdKmUscHQrPXJbMl0qZSxyfXJldHVyblswLDAsMCwwXX1mdW5jdGlvbiBtdCh0LGUscixuKXt2YXIgaT10W3IuYmluMF07aWYodm9pZCAwPT09aSlyZXR1cm4gZHQodm9pZCAwLDEpO3ZhciBhLG89dFtyLmJpbjFdLHM9ZVtyLmJpbjBdLGw9ZVtyLmJpbjFdLGM9by1pfHwwLHU9cy1pfHwwO3JldHVybiBhPXZvaWQgMD09PW8/dm9pZCAwPT09bD8wOnZvaWQgMD09PXM/MioobC1pKToyKigyKmwtcy1pKS8zOnZvaWQgMD09PWw/dm9pZCAwPT09cz8wOjIqKDIqaS1vLXMpLzM6dm9pZCAwPT09cz8yKigyKmwtby1pKS8zOmwraS1vLXMsZHQoaStyLmZyYWMqYytuLmZyYWMqKHUrci5mcmFjKmEpKX1pZihVKXt2YXIgZ3QsdnQ9MDt0cnl7Z3Q9bmV3IFVpbnQ4QXJyYXkoWipKKjQpfWNhdGNoKHQpe2d0PW5ldyBBcnJheShaKkoqNCl9aWYoImJlc3QiPT09VSl7dmFyIHl0LHh0LGJ0LF90PUJ8fFIsd3Q9Tnx8RixUdD1uZXcgQXJyYXkoX3QubGVuZ3RoKSxrdD1uZXcgQXJyYXkod3QubGVuZ3RoKSxBdD1uZXcgQXJyYXkoWiksTXQ9Qj94OnksU3Q9Tj94Onk7Zm9yKFM9MDtTPF90Lmxlbmd0aDtTKyspVHRbU109TWF0aC5yb3VuZCh3LmMycChfdFtTXSktcik7Zm9yKFM9MDtTPHd0Lmxlbmd0aDtTKyspa3RbU109TWF0aC5yb3VuZChULmMycCh3dFtTXSktQSk7Zm9yKFM9MDtTPFo7UysrKUF0W1NdPU10KFMsVHQpO2ZvcihFPTA7RTxKO0UrKylmb3IoeHQ9RFsoeXQ9U3QoRSxrdCkpLmJpbjBdLGJ0PURbeXQuYmluMV0sUz0wO1M8WjtTKyssdnQrPTQpYihndCx2dCxhdD1tdCh4dCxidCxBdFtTXSx5dCkpfWVsc2UgZm9yKEU9MDtFPFY7RSsrKWZvcihpdD1EW0VdLHN0PSQoRSksUz0wO1M8WjtTKyspYXQ9ZHQoaXRbU10sMSksYihndCx2dD00KihzdCpaK1EoUykpLGF0KTt2YXIgRXQ9dHQuY3JlYXRlSW1hZ2VEYXRhKFosSik7dHJ5e0V0LmRhdGEuc2V0KGd0KX1jYXRjaCh0KXt2YXIgTHQ9RXQuZGF0YSxDdD1MdC5sZW5ndGg7Zm9yKEU9MDtFPEN0O0UrKylMdFtFXT1ndFtFXX10dC5wdXRJbWFnZURhdGEoRXQsMCwwKX1lbHNle3ZhciBQdD1NYXRoLmZsb29yKE8vMiksSXQ9TWF0aC5mbG9vcih6LzIpO2ZvcihFPTA7RTxWO0UrKylpZihpdD1EW0VdLHN0LnJldmVyc2UoKSxzdFtjdF09JChFKzEpLHN0WzBdIT09c3RbMV0mJnZvaWQgMCE9PXN0WzBdJiZ2b2lkIDAhPT1zdFsxXSlmb3IocnQ9W250PVEoMCksbnRdLFM9MDtTPEg7UysrKXJ0LnJldmVyc2UoKSxydFtsdF09UShTKzEpLHJ0WzBdIT09cnRbMV0mJnZvaWQgMCE9PXJ0WzBdJiZ2b2lkIDAhPT1ydFsxXSYmKGF0PWR0KGl0W1NdLChydFsxXS1ydFswXSkqKHN0WzFdLXN0WzBdKSksdHQuZmlsbFN0eWxlPSJyZ2JhKCIrYXQuam9pbigiLCIpKyIpIix0dC5maWxsUmVjdChydFswXStQdCxzdFswXStJdCxydFsxXS1ydFswXS1PLHN0WzFdLXN0WzBdLXopKX1mdD1NYXRoLnJvdW5kKGZ0L3V0KSxodD1NYXRoLnJvdW5kKGh0L3V0KSxwdD1NYXRoLnJvdW5kKHB0L3V0KTt2YXIgT3Q9aSgicmdiKCIrZnQrIiwiK2h0KyIsIitwdCsiKSIpO3QuX2htcGl4Y291bnQ9KHQuX2htcGl4Y291bnR8fDApK3V0LHQuX2htbHVtY291bnQ9KHQuX2htbHVtY291bnR8fDApK3V0Kk90LmdldEx1bWluYW5jZSgpO3ZhciB6dD1DLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGUpO3p0LmVudGVyKCkuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpkLnN2ZyxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHp0LmF0dHIoe2hlaWdodDpKLHdpZHRoOloseDpyLHk6QSwieGxpbms6aHJlZiI6Sy50b0RhdGFVUkwoImltYWdlL3BuZyIpfSksdihDKTt2YXIgRHQ9SS50ZXh0dGVtcGxhdGU7aWYoRHQpe3ZhciBSdD1oKEkpLEZ0PXt0eXBlOiJsaW5lYXIiLHJhbmdlOltSdC5taW4sUnQubWF4XSxfc2VwYXJhdG9yczp3Ll9zZXBhcmF0b3JzLF9udW1Gb3JtYXQ6dy5fbnVtRm9ybWF0fSxCdD0iaGlzdG9ncmFtMmRjb250b3VyIj09PUkudHlwZSxOdD0iY29udG91ciI9PT1JLnR5cGUsanQ9TnQ/Vi0xOlYsVXQ9TnQ/MTowLFZ0PU50P0gtMTpILEh0PVtdO2ZvcihTPU50PzE6MDtTPGp0O1MrKyl7dmFyIHF0O2lmKE50KXF0PVAueVtTXTtlbHNlIGlmKEJ0KXtpZigwPT09U3x8Uz09PVYtMSljb250aW51ZTtxdD1QLnlbU119ZWxzZSBpZihQLnlDZW50ZXIpcXQ9UC55Q2VudGVyW1NdO2Vsc2V7aWYoUysxPT09ViYmdm9pZCAwPT09UC55W1MrMV0pY29udGludWU7cXQ9KFAueVtTXStQLnlbUysxXSkvMn12YXIgR3Q9TWF0aC5yb3VuZChULmMycChxdCkpO2lmKCEoMD5HdHx8R3Q+VC5fbGVuZ3RoKSlmb3IoRT1VdDtFPFZ0O0UrKyl7dmFyIFl0O2lmKE50KVl0PVAueFtFXTtlbHNlIGlmKEJ0KXtpZigwPT09RXx8RT09PUgtMSljb250aW51ZTtZdD1QLnhbRV19ZWxzZSBpZihQLnhDZW50ZXIpWXQ9UC54Q2VudGVyW0VdO2Vsc2V7aWYoRSsxPT09SCYmdm9pZCAwPT09UC54W0UrMV0pY29udGludWU7WXQ9KFAueFtFXStQLnhbRSsxXSkvMn12YXIgV3Q9TWF0aC5yb3VuZCh3LmMycChZdCkpO2lmKCEoMD5XdHx8V3Q+dy5fbGVuZ3RoKSl7dmFyIFh0PXUoe3g6WXQseTpxdH0sSSx0Ll9mdWxsTGF5b3V0KTtYdC54PVl0LFh0Lnk9cXQ7dmFyIFp0PVAueltTXVtFXTt2b2lkIDA9PT1adD8oWHQuej0iIixYdC56TGFiZWw9IiIpOihYdC56PVp0LFh0LnpMYWJlbD1zLnRpY2tUZXh0KEZ0LFp0LCJob3ZlciIpLnRleHQpO3ZhciBKdD1QLnRleHQmJlAudGV4dFtTXSYmUC50ZXh0W1NdW0VdO3ZvaWQgMCE9PUp0JiYhMSE9PUp0fHwoSnQ9IiIpLFh0LnRleHQ9SnQ7dmFyIEt0PWwudGV4dHRlbXBsYXRlU3RyaW5nKER0LFh0LHQuX2Z1bGxMYXlvdXQuX2QzbG9jYWxlLFh0LEkuX21ldGF8fHt9KTtpZihLdCl7dmFyIFF0PUt0LnNwbGl0KCI8YnI+IiksJHQ9UXQubGVuZ3RoLHRlPTA7Zm9yKEw9MDtMPCR0O0wrKyl0ZT1NYXRoLm1heCh0ZSxRdFtMXS5sZW5ndGgpO0h0LnB1c2goe2w6JHQsYzp0ZSx0Okt0LHg6V3QseTpHdCx6Olp0fSl9fX19dmFyIGVlPUkudGV4dGZvbnQscmU9ZWUuZmFtaWx5LG5lPWVlLnNpemUsaWU9dC5fZnVsbExheW91dC5mb250LnNpemU7aWYoIW5lfHwiYXV0byI9PT1uZSl7dmFyIGFlPTEvMCxvZT0xLzAsc2U9MCxsZT0wO2ZvcihMPTA7TDxIdC5sZW5ndGg7TCsrKXt2YXIgY2U9SHRbTF07aWYoc2U9TWF0aC5tYXgoc2UsY2UubCksbGU9TWF0aC5tYXgobGUsY2UuYyksTDxIdC5sZW5ndGgtMSl7dmFyIHVlPUh0W0wrMV0sZmU9TWF0aC5hYnModWUueC1jZS54KSxoZT1NYXRoLmFicyh1ZS55LWNlLnkpO2ZlJiYoYWU9TWF0aC5taW4oYWUsZmUpKSxoZSYmKG9lPU1hdGgubWluKG9lLGhlKSl9fWlzRmluaXRlKGFlKSYmaXNGaW5pdGUob2UpPyhhZS09TyxvZS09eixhZS89bGUsb2UvPXNlLGFlLz1tLzIsb2UvPW0sbmU9TWF0aC5taW4oTWF0aC5mbG9vcihhZSksTWF0aC5mbG9vcihvZSksaWUpKTpuZT1pZX1pZihuZTw9MHx8IWlzRmluaXRlKG5lKSlyZXR1cm47ZyhDKS5kYXRhKEh0KS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhlYXRtYXAtbGFiZWwiLDEpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT1lZS5jb2xvcjtpJiYiYXV0byIhPT1pfHwoaT1mLmNvbnRyYXN0KCJyZ2JhKCIrZXQoZS56KS5qb2luKCkrIikiKSksci5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGMucG9zaXRpb25UZXh0LGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnktbmUqKHQubCptLzItMSl9KGUpKS5jYWxsKG8uZm9udCxyZSxuZSxpKS50ZXh0KGUudCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KX0pKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo0NzEsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIjo5MzUsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6MzEyfV0sODA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaG0gaW1hZ2UiKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KSl9fSx7IkBwbG90bHkvZDMiOjU4fV0sODA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ITE9PT1yKCJ6c21vb3RoIikmJihyKCJ4Z2FwIikscigieWdhcCIpKSxyKCJ6aG92ZXJmb3JtYXQiKX19LHt9XSw4MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9ZSh0KTtyZXR1cm4ic2NhbGVkIj09PShyP2UodCsidHlwZSIsImFycmF5Iik6InNjYWxlZCIpJiYoZSh0KyIwIiksZSgiZCIrdCkpLHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxmLGg9cigieiIpO2lmKGw9bHx8IngiLGM9Y3x8InkiLHZvaWQgMD09PWh8fCFoLmxlbmd0aClyZXR1cm4gMDtpZihpLmlzQXJyYXkxRCh0LnopKXt1PXIobCksZj1yKGMpO3ZhciBwPWkubWluUm93TGVuZ3RoKHUpLGQ9aS5taW5Sb3dMZW5ndGgoZik7aWYoMD09PXB8fDA9PT1kKXJldHVybiAwO2UuX2xlbmd0aD1NYXRoLm1pbihwLGQsaC5sZW5ndGgpfWVsc2V7aWYodT1vKGwsciksZj1vKGMsciksIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPSEwLGE9ITEsbz0hMSxzPTA7czx0Lmxlbmd0aDtzKyspe2lmKGU9dFtzXSwhaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpKXtyPSExO2JyZWFrfWUubGVuZ3RoPjAmJihhPSEwKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihuKGVbbF0pKXtvPSEwO2JyZWFrfX1yZXR1cm4gciYmYSYmb30oaCkpcmV0dXJuIDA7cigidHJhbnNwb3NlIiksZS5fbGVuZ3RoPW51bGx9cmV0dXJuImhlYXRtYXBnbCI9PT10LnR5cGV8fGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFtsLGNdLHMpLCEwfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDgwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsW3VdPW5bdV19bC56c21vb3RoPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwhMV0sZGZsdDoiZmFzdCIsZWRpdFR5cGU6ImNhbGMifSxhKGwsaSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKSxlLmV4cG9ydHM9byhsLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6NzkyfV0sODA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX2hlYXRtYXAyZCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0iaGVhdG1hcGdsIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3pzbW9vdGg6ImZhc3QiLHo6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55LHRoaXMub3B0aW9ucy56c21vb3RoPXQuenNtb290aDt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jb2xvcnNjYWxlLHI9dC56bWluLG49dC56bWF4LGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoNCppKSxsPTA7bDxpO2wrKyl7dmFyIGM9ZVtsXSx1PWEoY1sxXSk7b1tsXT1yK2NbMF0qKG4tcik7Zm9yKHZhciBmPTA7Zjw0O2YrKylzWzQqbCtmXT11W2ZdfXJldHVybntjb2xvckxldmVsczpvLGNvbG9yVmFsdWVzOnN9fSh0KTt0aGlzLm9wdGlvbnMuY29sb3JMZXZlbHM9bC5jb2xvckxldmVscyx0aGlzLm9wdGlvbnMuY29sb3JWYWx1ZXM9bC5jb2xvclZhbHVlcyx0aGlzLnRleHRMYWJlbHM9W10uY29uY2F0LmFwcGx5KFtdLHQudGV4dCksdGhpcy5oZWF0bWFwLnVwZGF0ZSh0aGlzLm9wdGlvbnMpO3ZhciBjLHUsZj10aGlzLnNjZW5lLnhheGlzLGg9dGhpcy5zY2VuZS55YXhpczshMT09PXQuenNtb290aCYmKGM9e3BwYWQ6ci54WzFdLXIueFswXX0sdT17cHBhZDpyLnlbMV0tci55WzBdfSksdC5fZXh0cmVtZXNbZi5faWRdPWkuZmluZEV4dHJlbWVzKGYsci54LGMpLHQuX2V4dHJlbWVzW2guX2lkXT1pLmZpbmRFeHRyZW1lcyhoLHIueSx1KX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgbyh0LGUudWlkKTtyZXR1cm4gbi51cGRhdGUoZSxyKSxufX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMjAsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NH1dLDgxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aSh0LGUsbCxzKT8obCgidGV4dCIpLGwoInpzbW9vdGgiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6Mzc2LCIuLi8uLi9saWIiOjUwMywiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjgwNywiLi9hdHRyaWJ1dGVzIjo4MDh9XSw4MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7WyIqaGVhdG1hcGdsKiB0cmFjZSBpcyBkZXByZWNhdGVkISIsIlBsZWFzZSBjb25zaWRlciBzd2l0Y2hpbmcgdG8gdGhlICpoZWF0bWFwKiBvciAqaW1hZ2UqIHRyYWNlIHR5cGVzLiIsIkFsdGVybmF0aXZlbHkgeW91IGNvdWxkIGNvbnRyaWJ1dGUvc3BvbnNvciByZXdyaXRpbmcgdGhpcyB0cmFjZSB0eXBlIiwiYmFzZWQgb24gY2FydGVzaWFuIGZlYXR1cmVzIGFuZCB1c2luZyByZWdsIGZyYW1ld29yay4iXS5qb2luKCIgIik7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksY2FsYzp0KCIuLi9oZWF0bWFwL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoZWF0bWFwZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxjYXRlZ29yaWVzOlsiZ2wiLCJnbDJkIiwiMmRNYXAiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDJkIjo1OTYsIi4uL2hlYXRtYXAvY2FsYyI6NzkzLCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo3OTUsIi4vYXR0cmlidXRlcyI6ODA4LCIuL2NvbnZlcnQiOjgwOSwiLi9kZWZhdWx0cyI6ODEwfV0sODEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxsPXQoIi4vYmluX2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4aG92ZXJmb3JtYXQ6aSgieCIpLHlob3ZlcmZvcm1hdDppKCJ5IiksdGV4dDp1KHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnUoe30sbi5ob3ZlcnRleHQse30pLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQiLGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsInBlcmNlbnQiLCJwcm9iYWJpbGl0eSIsImRlbnNpdHkiLCJwcm9iYWJpbGl0eSBkZW5zaXR5Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGN1bXVsYXRpdmU6e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyIsZWRpdFR5cGU6ImNhbGMifSxjdXJyZW50YmluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNsdWRlIiwiZXhjbHVkZSIsImhhbGYiXSxkZmx0OiJpbmNsdWRlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbmJpbnN4Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx4YmluczpsKCJ4IiwhMCksbmJpbnN5Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5YmluczpsKCJ5IiwhMCksYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGF1dG9iaW55Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxiaW5ncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZW1wbGF0ZTphKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHR0ZW1wbGF0ZTpvKHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYWJlbCIsInZhbHVlIl19KSx0ZXh0cG9zaXRpb246dSh7fSxuLnRleHRwb3NpdGlvbix7YXJyYXlPazohMX0pLHRleHRmb250OnMoe2FycmF5T2s6ITEsZWRpdFR5cGU6InBsb3QiLGNvbG9yRWRpdFR5cGU6InN0eWxlIn0pLG91dHNpZGV0ZXh0Zm9udDpzKHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxpbnNpZGV0ZXh0Zm9udDpzKHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxpbnNpZGV0ZXh0YW5jaG9yOm4uaW5zaWRldGV4dGFuY2hvcix0ZXh0YW5nbGU6bi50ZXh0YW5nbGUsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsY29uc3RyYWludGV4dDpuLmNvbnN0cmFpbnRleHQsbWFya2VyOm4ubWFya2VyLG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLF9kZXByZWNhdGVkOntiYXJkaXI6bi5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDgsIi4vYmluX2F0dHJpYnV0ZXMiOjgxNCwiLi9jb25zdGFudHMiOjgxOH1dLDgxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKWVbaV0/KHRbaV0vPWVbaV0sbis9dFtpXSk6dFtpXT1udWxsO3JldHVybiBufX0se31dLDgxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlbmQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxzaXplOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHt9XSw4MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHsiZmFzdC1pc251bWVyaWMiOjE5MH1dLDgxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLk9ORUFWR1lFQVIsYT1uLk9ORUFWR01PTlRILG89bi5PTkVEQVkscz1uLk9ORUhPVVIsbD1uLk9ORU1JTixjPW4uT05FU0VDLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrSW5jcmVtZW50O2Z1bmN0aW9uIGYodCxlLHIsbil7aWYodCplPD0wKXJldHVybiAxLzA7Zm9yKHZhciBpPU1hdGguYWJzKGUtdCksYT0iZGF0ZSI9PT1yLnR5cGUsbz1oKGksYSkscz0wO3M8MTA7cysrKXt2YXIgbD1oKDgwKm8sYSk7aWYobz09PWwpYnJlYWs7aWYoIXAobCx0LGUsYSxyLG4pKWJyZWFrO289bH1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGUmJnQ+Yz90Pm8/dD4xLjEqaT9pOnQ+MS4xKmE/YTpvOnQ+cz9zOnQ+bD9sOmM6TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTApKX1mdW5jdGlvbiBwKHQsZSxyLG4sYSxzKXtpZihuJiZ0Pm8pe3ZhciBsPWQoZSxhLHMpLGM9ZChyLGEscyksdT10PT09aT8wOjE7cmV0dXJuIGxbdV0hPT1jW3VdfXJldHVybiBNYXRoLmZsb29yKHIvdCktTWF0aC5mbG9vcihlL3QpPi4xfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPWUuYzJkKHQsaSxyKS5zcGxpdCgiLSIpO3JldHVybiIiPT09blswXSYmKG4udW5zaGlmdCgpLG5bMF09Ii0iK25bMF0pLG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbCxjPS0xLjEqZSxoPS0uMSplLHA9dC1oLGQ9clswXSxtPXJbMV0sZz1NYXRoLm1pbihmKGQraCxkK3AsbixhKSxmKG0raCxtK3AsbixhKSksdj1NYXRoLm1pbihmKGQrYyxkK2gsbixhKSxmKG0rYyxtK2gsbixhKSk7aWYoZz52JiZ2PE1hdGguYWJzKG0tZCkvNGUzPyhzPWcsbD0hMSk6KHM9TWF0aC5taW4oZyx2KSxsPSEwKSwiZGF0ZSI9PT1uLnR5cGUmJnM+byl7dmFyIHk9cz09PWk/MTo2LHg9cz09PWk/Ik0xMiI6Ik0xIjtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbz1uLmMyZChlLGksYSkscz1vLmluZGV4T2YoIi0iLHkpO3M+MCYmKG89by5zdWJzdHIoMCxzKSk7dmFyIGM9bi5kMmMobywwLGEpO2lmKGM8ZSl7dmFyIGY9dShjLHgsITEsYSk7KGMrZikvMjxlK3QmJihjPWYpfXJldHVybiByJiZsP3UoYyx4LCEwLGEpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXMqTWF0aC5yb3VuZChlL3MpO3JldHVybiBuK3MvMTA8ZSYmbisuOSpzPGUrdCYmKG4rPXMpLHImJmwmJihuLT1zKSxufX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sODE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi9iaW5fZnVuY3Rpb25zIiksYz10KCIuL25vcm1fZnVuY3Rpb25zIiksdT10KCIuL2F2ZXJhZ2UiKSxmPXQoIi4vYmluX2xhYmVsX3ZhbHMiKTtmdW5jdGlvbiBoKHQsZSxyLHMsbCl7dmFyIGMsdSxmLHAsZCxtLGcsdj1zKyJiaW5zIix5PXQuX2Z1bGxMYXlvdXQseD1lWyJfIitzKyJiaW5ncm91cCJdLGI9eS5faGlzdG9ncmFtQmluT3B0c1t4XSxfPSJvdmVybGF5Ij09PXkuYmFybW9kZSx3PWZ1bmN0aW9uKHQpe3JldHVybiByLnIyYyh0LDAscCl9LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuYzJyKHQsMCxwKX0saz0iZGF0ZSI9PT1yLnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kuY2xlYW5EYXRlKHQsbnVsbCxwKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07ZnVuY3Rpb24gQSh0LGUscil7ZVt0KyJGb3VuZCJdPyhlW3RdPWsoZVt0XSksbnVsbD09PWVbdF0mJihlW3RdPXJbdF0pKToobVt0XT1lW3RdPXJbdF0saS5uZXN0ZWRQcm9wZXJ0eSh1WzBdLHYrIi4iK3QpLnNldChyW3RdKSl9aWYoZVsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0pZGVsZXRlIGVbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdO2Vsc2V7dT1iLnRyYWNlczt2YXIgTT1bXSxTPSEwLEU9ITEsTD0hMTtmb3IoYz0wO2M8dS5sZW5ndGg7YysrKWlmKChmPXVbY10pLnZpc2libGUpe3ZhciBDPWIuZGlyc1tjXTtkPWZbIl8iK0MrInBvczAiXT1yLm1ha2VDYWxjZGF0YShmLEMpLE09aS5jb25jYXQoTSxkKSxkZWxldGUgZlsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0sITA9PT1lLnZpc2libGUmJihTP1M9ITE6KGRlbGV0ZSBmLl9hdXRvQmluLGZbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdPTEpLGEudHJhY2VJcyhmLCIyZE1hcCIpJiYoRT0hMCksImhpc3RvZ3JhbTJkY29udG91ciI9PT1mLnR5cGUmJihMPSEwKSl9cD11WzBdW3MrImNhbGVuZGFyIl07dmFyIFA9by5hdXRvQmluKE0scixiLm5iaW5zLEUscCxiLnNpemVGb3VuZCYmYi5zaXplKSxJPXVbMF0uX2F1dG9CaW49e307aWYobT1JW2IuZGlyc1swXV09e30sTCYmKGIuc2l6ZXx8KFAuc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpKSx2b2lkIDA9PT1iLmVuZCYmKFAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpKSxfJiYhYS50cmFjZUlzKGUsIjJkTWFwIikmJjA9PT1QLl9kYXRhU3BhbiYmImNhdGVnb3J5IiE9PXIudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ci50eXBlKXtpZihsKXJldHVybltQLGQsITBdO1A9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYz10Ll9mdWxsTGF5b3V0LHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9KHQsZSksZj0hMSxwPTEvMCxkPVtlXTtmb3Iobz0wO288dS5sZW5ndGg7bysrKWlmKChzPXVbb10pPT09ZSlmPSEwO2Vsc2UgaWYoZil7dmFyIG09aCh0LHMscixuLCEwKSxnPW1bMF0sdj1tWzJdO3NbIl8iK24rImF1dG9CaW5GaW5pc2hlZCJdPTEsc1siXyIrbisicG9zMCJdPW1bMV0sdj9kLnB1c2gocyk6cD1NYXRoLm1pbihwLGcuc2l6ZSl9ZWxzZSBsPWMuX2hpc3RvZ3JhbUJpbk9wdHNbc1siXyIrbisiYmluZ3JvdXAiXV0scD1NYXRoLm1pbihwLGwuc2l6ZXx8c1thXS5zaXplKTt2YXIgeT1uZXcgQXJyYXkoZC5sZW5ndGgpO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspZm9yKHZhciB4PWRbb11bIl8iK24rInBvczAiXSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYodm9pZCAwIT09eFtiXSl7eVtvXT14W2JdO2JyZWFrfWlzRmluaXRlKHApfHwocD1pLmRpc3RpbmN0VmFscyh5KS5taW5EaWZmKTtmb3Iobz0wO288ZC5sZW5ndGg7bysrKXt2YXIgXz0ocz1kW29dKVtuKyJjYWxlbmRhciJdLHc9e3N0YXJ0OnIuYzJyKHlbb10tcC8yLDAsXyksZW5kOnIuYzJyKHlbb10rcC8yLDAsXyksc2l6ZTpwfTtzLl9pbnB1dFthXT1zW2FdPXcsKGw9Yy5faGlzdG9ncmFtQmluT3B0c1tzWyJfIituKyJiaW5ncm91cCJdXSkmJmkuZXh0ZW5kRmxhdChsLHcpfXJldHVybiBlW2FdfSh0LGUscixzLHYpfShnPWYuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQmJiJpbmNsdWRlIiE9PWcuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PWcuZGlyZWN0aW9uP1Auc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpOlAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpLGIuc2l6ZT1QLnNpemUsYi5zaXplRm91bmR8fChtLnNpemU9UC5zaXplLGkubmVzdGVkUHJvcGVydHkodVswXSx2KyIuc2l6ZSIpLnNldChQLnNpemUpKSxBKCJzdGFydCIsYixQKSxBKCJlbmQiLGIsUCl9ZD1lWyJfIitzKyJwb3MwIl0sZGVsZXRlIGVbIl8iK3MrInBvczAiXTt2YXIgTz1lLl9pbnB1dFt2XXx8e30sej1pLmV4dGVuZEZsYXQoe30sYiksRD1iLnN0YXJ0LFI9ci5yMmwoTy5zdGFydCksRj12b2lkIDAhPT1SO2lmKChiLnN0YXJ0Rm91bmR8fEYpJiZSIT09ci5yMmwoRCkpe3ZhciBCPUY/UjppLmFnZ051bXMoTWF0aC5taW4sbnVsbCxkKSxOPXt0eXBlOiJjYXRlZ29yeSI9PT1yLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT8ibGluZWFyIjpyLnR5cGUscjJsOnIucjJsLGR0aWNrOmIuc2l6ZSx0aWNrMDpELGNhbGVuZGFyOnAscmFuZ2U6W0Isby50aWNrSW5jcmVtZW50KEIsYi5zaXplLCExLHApXS5tYXAoci5sMnIpfSxqPW8udGlja0ZpcnN0KE4pO2o+ci5yMmwoQikmJihqPW8udGlja0luY3JlbWVudChqLGIuc2l6ZSwhMCxwKSksei5zdGFydD1yLmwycihqKSxGfHxpLm5lc3RlZFByb3BlcnR5KGUsdisiLnN0YXJ0Iikuc2V0KHouc3RhcnQpfXZhciBVPWIuZW5kLFY9ci5yMmwoTy5lbmQpLEg9dm9pZCAwIT09VjtpZigoYi5lbmRGb3VuZHx8SCkmJlYhPT1yLnIybChVKSl7dmFyIHE9SD9WOmkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGQpO3ouZW5kPXIubDJyKHEpLEh8fGkubmVzdGVkUHJvcGVydHkoZSx2KyIuc3RhcnQiKS5zZXQoei5lbmQpfXZhciBHPSJhdXRvYmluIitzO3JldHVybiExPT09ZS5faW5wdXRbR10mJihlLl9pbnB1dFt2XT1pLmV4dGVuZEZsYXQoe30sZVt2XXx8e30pLGRlbGV0ZSBlLl9pbnB1dFtHXSxkZWxldGUgZVtHXSksW3osZF19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxwLGQsbT1bXSxnPVtdLHY9by5nZXRGcm9tSWQodCwiaCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXM6ZS54YXhpcykseT0iaCI9PT1lLm9yaWVudGF0aW9uPyJ5IjoieCIseD17eDoieSIseToieCJ9W3ldLGI9ZVt5KyJjYWxlbmRhciJdLF89ZS5jdW11bGF0aXZlLHc9aCh0LGUsdix5KSxUPXdbMF0saz13WzFdLEE9InN0cmluZyI9PXR5cGVvZiBULnNpemUsTT1bXSxTPUE/TTpULEU9W10sTD1bXSxDPVtdLFA9MCxJPWUuaGlzdG5vcm0sTz1lLmhpc3RmdW5jLHo9LTEhPT1JLmluZGV4T2YoImRlbnNpdHkiKTtfLmVuYWJsZWQmJnomJihJPUkucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLHo9ITEpO3ZhciBELFI9Im1heCI9PT1PfHwibWluIj09PU8/bnVsbDowLEY9bC5jb3VudCxCPWNbSV0sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiB2LnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJiJjb3VudCIhPT1PJiYoRD1lW3hdLE49ImF2ZyI9PT1PLEY9bFtPXSkscj1qKFQuc3RhcnQpLHA9aihULmVuZCkrKHItby50aWNrSW5jcmVtZW50KHIsVC5zaXplLCExLGIpKS8xZTY7cjxwJiZtLmxlbmd0aDwxZTYmJihhPW8udGlja0luY3JlbWVudChyLFQuc2l6ZSwhMSxiKSxtLnB1c2goKHIrYSkvMiksZy5wdXNoKFIpLEMucHVzaChbXSksTS5wdXNoKHIpLHomJkUucHVzaCgxLyhhLXIpKSxOJiZMLnB1c2goMCksIShhPD1yKSk7KXI9YTtNLnB1c2gociksQXx8ImRhdGUiIT09di50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KSx0Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c3x8KHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzPXt9KTt2YXIgVT1lWyJfIit5KyJiaW5ncm91cCJdLFY9e2xlZnRHYXA6MS8wLHJpZ2h0R2FwOjEvMH07VSYmKHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzW1VdfHwodC5fZnVsbExheW91dC5fcm91bmRGbk9wdHNbVV09ViksVj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXSk7dmFyIEgscT1nLmxlbmd0aCxHPSEwLFk9Vi5sZWZ0R2FwLFc9Vi5yaWdodEdhcCxYPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspe3ZhciBaPWtbcl07KGQ9aS5maW5kQmluKFosUykpPj0wJiZkPHEmJihQKz1GKGQscixnLEQsTCksRyYmQ1tkXS5sZW5ndGgmJlohPT1rW0NbZF1bMF1dJiYoRz0hMSksQ1tkXS5wdXNoKHIpLFhbcl09ZCxZPU1hdGgubWluKFksWi1NW2RdKSxXPU1hdGgubWluKFcsTVtkKzFdLVopKX1WLmxlZnRHYXA9WSxWLnJpZ2h0R2FwPVcsR3x8KEg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXTtyZXR1cm4gZihuLmxlZnRHYXAsbi5yaWdodEdhcCxNLHYsYikoZSxyKX19KSxOJiYoUD11KGcsTCkpLEImJkIoZyxQLEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3Iobj10Lmxlbmd0aC0yO24+PTA7bi0tKXRbbl0rPXRbbisxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fShnLF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIEo9TWF0aC5taW4obS5sZW5ndGgsZy5sZW5ndGgpLEs9W10sUT0wLCQ9Si0xO2ZvcihyPTA7cjxKO3IrKylpZihnW3JdKXtRPXI7YnJlYWt9Zm9yKHI9Si0xO3I+PVE7ci0tKWlmKGdbcl0peyQ9cjticmVha31mb3Iocj1RO3I8PSQ7cisrKWlmKG4obVtyXSkmJm4oZ1tyXSkpe3ZhciB0dD17cDptW3JdLHM6Z1tyXSxiOjB9O18uZW5hYmxlZHx8KHR0LnB0cz1DW3JdLEc/dHQucGgwPXR0LnBoMT1DW3JdLmxlbmd0aD9rW0Nbcl1bMF1dOm1bcl06KGUuX2NvbXB1dGVQaD0hMCx0dC5waDA9SChNW3JdKSx0dC5waDE9SChNW3IrMV0sITApKSksSy5wdXNoKHR0KX1yZXR1cm4gMT09PUsubGVuZ3RoJiYoS1swXS53aWR0aDE9by50aWNrSW5jcmVtZW50KEtbMF0ucCxULnNpemUsITEsYiktS1swXS5wKSxzKEssZSksaS5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpJiZpLnRhZ1NlbGVjdGVkKEssZSxYKSxLfSxjYWxjQWxsQXV0b0JpbnM6aH19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjY0NywiLi9hdmVyYWdlIjo4MTMsIi4vYmluX2Z1bmN0aW9ucyI6ODE1LCIuL2Jpbl9sYWJlbF92YWxzIjo4MTYsIi4vbm9ybV9mdW5jdGlvbnMiOjgyNCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDgxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6WyJiaW5OdW1iZXIiXX19LHt9XSw4MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz1uLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9W3thU3RyOnt4OiJ4Ymlucy5zdGFydCIseToieWJpbnMuc3RhcnQifSxuYW1lOiJzdGFydCJ9LHthU3RyOnt4OiJ4Ymlucy5lbmQiLHk6InliaW5zLmVuZCJ9LG5hbWU6ImVuZCJ9LHthU3RyOnt4OiJ4Ymlucy5zaXplIix5OiJ5Ymlucy5zaXplIn0sbmFtZToic2l6ZSJ9LHthU3RyOnt4OiJuYmluc3giLHk6Im5iaW5zeSJ9LG5hbWU6Im5iaW5zIn1dLHU9WyJ4IiwieSJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGYsaCxwLGQsbSxnLHY9ZS5faGlzdG9ncmFtQmluT3B0cz17fSx5PVtdLHg9e30sYj1bXTtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsci5fbW9kdWxlLmF0dHJpYnV0ZXMsdCxlKX1mdW5jdGlvbiB3KHQpe3JldHVybiJ2Ij09PXQub3JpZW50YXRpb24/IngiOiJ5In1mdW5jdGlvbiBUKHQscixhKXt2YXIgbz10LnVpZCsiX18iK2E7cnx8KHI9byk7dmFyIHM9ZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5nZXRGcm9tVHJhY2Uoe19mdWxsTGF5b3V0OmV9LHQscikudHlwZX0odCxhKSxsPXRbYSsiY2FsZW5kYXIiXXx8IiIsYz12W3JdLHU9ITA7YyYmKHM9PT1jLmF4VHlwZSYmbD09PWMuY2FsZW5kYXI/KHU9ITEsYy50cmFjZXMucHVzaCh0KSxjLmRpcnMucHVzaChhKSk6KHI9byxzIT09Yy5heFR5cGUmJm4ud2FybihbIkF0dGVtcHRlZCB0byBncm91cCB0aGUgYmlucyBvZiB0cmFjZSIsdC5pbmRleCwic2V0IG9uIGEiLCJ0eXBlOiIrcywiYXhpcyIsIndpdGggYmlucyBvbiIsInR5cGU6IitjLmF4VHlwZSwiYXhpcy4iXS5qb2luKCIgIikpLGwhPT1jLmNhbGVuZGFyJiZuLndhcm4oWyJBdHRlbXB0ZWQgdG8gZ3JvdXAgdGhlIGJpbnMgb2YgdHJhY2UiLHQuaW5kZXgsInNldCB3aXRoIGEiLGwsImNhbGVuZGFyIiwid2l0aCBiaW5zIixjLmNhbGVuZGFyPyJvbiBhICIrYy5jYWxlbmRhcisiIGNhbGVuZGFyIjoidy9vIGEgc2V0IGNhbGVuZGFyIl0uam9pbigiICIpKSkpLHUmJih2W3JdPXt0cmFjZXM6W3RdLGRpcnM6W2FdLGF4VHlwZTpzLGNhbGVuZGFyOnRbYSsiY2FsZW5kYXIiXXx8IiJ9KSx0WyJfIithKyJiaW5ncm91cCJdPXJ9Zm9yKGQ9MDtkPHQubGVuZ3RoO2QrKylyPXRbZF0sYShyLCJoaXN0b2dyYW0iKSYmKHkucHVzaChyKSxkZWxldGUgci5feGF1dG9CaW5GaW5pc2hlZCxkZWxldGUgci5feWF1dG9CaW5GaW5pc2hlZCxhKHIsIjJkTWFwIil8fG8oci5faW5wdXQscixlLF8pKTt2YXIgaz1lLl9hbGlnbm1lbnRPcHRzfHx7fTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKXtpZihyPXlbZF0saD0iIiwhYShyLCIyZE1hcCIpKXtpZihwPXcociksImdyb3VwIj09PWUuYmFybW9kZSYmci5hbGlnbm1lbnRncm91cCl7dmFyIEE9cltwKyJheGlzIl0sTT1sKGUsQSkrci5vcmllbnRhdGlvbjsoa1tNXXx8e30pW3IuYWxpZ25tZW50Z3JvdXBdJiYoaD1NKX1ofHwib3ZlcmxheSI9PT1lLmJhcm1vZGV8fChoPWwoZSxyLnhheGlzKStsKGUsci55YXhpcykrdyhyKSl9aD8oeFtoXXx8KHhbaF09W10pLHhbaF0ucHVzaChyKSk6Yi5wdXNoKHIpfWZvcihoIGluIHgpaWYoMSE9PShmPXhbaF0pLmxlbmd0aCl7dmFyIFM9ITE7Zm9yKGYubGVuZ3RoJiYocj1mWzBdLFM9XygiYmluZ3JvdXAiKSksaD1TfHxoLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIEU9KHI9ZltkXSkuX2lucHV0LmJpbmdyb3VwO0UmJkUhPT1oJiZuLndhcm4oWyJUcmFjZSIsci5pbmRleCwibXVzdCBtYXRjaCIsIndpdGhpbiBiaW5ncm91cCIsaCsiLiIsIklnbm9yaW5nIGl0cyBiaW5ncm91cDoiLEUsInNldHRpbmcuIl0uam9pbigiICIpKSxyLmJpbmdyb3VwPWgsVChyLGgsdyhyKSl9fWVsc2UgYi5wdXNoKGZbMF0pO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspe3I9YltkXTt2YXIgTD1fKCJiaW5ncm91cCIpO2lmKGEociwiMmRNYXAiKSlmb3IoZz0wO2c8MjtnKyspe3ZhciBDPV8oKHA9dVtnXSkrImJpbmdyb3VwIixMP0wrIl9fIitwOm51bGwpO1QocixDLHApfWVsc2UgVChyLEwsdyhyKSl9Zm9yKGggaW4gdil7dmFyIFA9dltoXTtmb3IoZj1QLnRyYWNlcyxtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBJLE8sej1jW21dLEQ9ei5uYW1lO2lmKCJuYmlucyIhPT1EfHwhUC5zaXplRm91bmQpe2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspe2lmKHI9ZltkXSxwPVAuZGlyc1tkXSxJPXouYVN0cltwXSx2b2lkIDAhPT1zKHIuX2lucHV0LEkpLmdldCgpKXtQW0RdPV8oSSksUFtEKyJGb3VuZCJdPSEwO2JyZWFrfShPPShyLl9hdXRvQmlufHx7fSlbcF18fHt9KVtEXSYmcyhyLEkpLnNldChPW0RdKX1pZigic3RhcnQiPT09RHx8ImVuZCI9PT1EKWZvcig7ZDxmLmxlbmd0aDtkKyspKHI9ZltkXSlbIl8iK3ArImJpbmdyb3VwIl0mJl8oSSwoTz0oci5fYXV0b0Jpbnx8e30pW3BdfHx7fSlbRF0pOyJuYmlucyIhPT1EfHxQLnNpemVGb3VuZHx8UC5uYmluc0ZvdW5kfHwocj1mWzBdLFBbRF09XyhJKSl9fX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjU1OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo1NjIsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL2Jhci9kZWZhdWx0cyI6NjUyfV0sODIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiB1KHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxsLHIsbil9dmFyIGY9dSgieCIpLGg9dSgieSIpO3UoImN1bXVsYXRpdmUuZW5hYmxlZCIpJiYodSgiY3VtdWxhdGl2ZS5kaXJlY3Rpb24iKSx1KCJjdW11bGF0aXZlLmN1cnJlbnRiaW4iKSksdSgidGV4dCIpO3ZhciBwPXUoInRleHRwb3NpdGlvbiIpO28odCxlLGMsdSxwLHttb2R1bGVIYXNTZWxlY3RlZDohMCxtb2R1bGVIYXNVbnNlbGVjdGVkOiEwLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIiksdSgieGhvdmVyZm9ybWF0IiksdSgieWhvdmVyZm9ybWF0Iik7dmFyIGQ9dSgib3JpZW50YXRpb24iLGgmJiFmPyJoIjoidiIpLG09InYiPT09ZD8ieCI6InkiLGc9InYiPT09ZD8ieSI6IngiLHY9ZiYmaD9NYXRoLm1pbihpLm1pblJvd0xlbmd0aChmKSYmaS5taW5Sb3dMZW5ndGgoaCkpOmkubWluUm93TGVuZ3RoKGVbbV18fFtdKTtpZih2KXtlLl9sZW5ndGg9dixuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0sYyksZVtnXSYmdSgiaGlzdGZ1bmMiKSx1KCJoaXN0bm9ybSIpLHUoImF1dG9iaW4iK20pLHModCxlLHUscixjKSxpLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx1KTt2YXIgeT0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yLHg9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7eCh0LGUseXx8YS5kZWZhdWx0TGluZSx7YXhpczoieSJ9KSx4KHQsZSx5fHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9iYXIvZGVmYXVsdHMiOjY1MiwiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIjo2NjMsIi4vYXR0cmlidXRlcyI6ODEyfV0sODIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiekxhYmVsVmFsImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGEsbz1BcnJheS5pc0FycmF5KGkpP25bMF0ucHRzW2lbMF1dW2lbMV1dOm5baV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2E9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspYT1hLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGE9bzt0LnBvaW50SW5kaWNlcz1hfXJldHVybiB0fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvaG92ZXIiKS5ob3ZlclBvaW50cyxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9bih0LGUscixhLG8pO2lmKHMpe3ZhciBsPSh0PXNbMF0pLmNkW3QuaW5kZXhdLGM9dC5jZFswXS50cmFjZTtpZighYy5jdW11bGF0aXZlLmVuYWJsZWQpe3ZhciB1PSJoIj09PWMub3JpZW50YXRpb24/InkiOiJ4Ijt0W3UrIkxhYmVsIl09aSh0W3UrImEiXSxbbC5waDAsbC5waDFdLGNbdSsiaG92ZXJmb3JtYXQiXSl9cmV0dXJuIHN9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi9iYXIvaG92ZXIiOjY1NX1dLDgyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuLi9iYXIvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJiYXJsYXllciIsc3R5bGU6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuLi9iYXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoaXN0b2dyYW0iLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJiYXItbGlrZSIsImNhcnRlc2lhbiIsInN2ZyIsImJhciIsImhpc3RvZ3JhbSIsIm9yaWVudGVkIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjgsIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo2NTEsIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyI6NjU3LCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzIjo2NTgsIi4uL2Jhci9wbG90Ijo2NTksIi4uL2Jhci9zZWxlY3QiOjY2MCwiLi4vYmFyL3N0eWxlIjo2NjIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4vYXR0cmlidXRlcyI6ODEyLCIuL2NhbGMiOjgxNywiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6ODE5LCIuL2RlZmF1bHRzIjo4MjAsIi4vZXZlbnRfZGF0YSI6ODIxLCIuL2hvdmVyIjo4MjJ9XSw4MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwZXJjZW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MTAwL2UsaT0wO2k8cjtpKyspdFtpXSo9bn0scHJvYmFiaWxpdHk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspdFtuXS89ZX0sZGVuc2l0eTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuPW58fDE7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdKm59LCJwcm9iYWJpbGl0eSBkZW5zaXR5IjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuJiYoZS89bik7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdL2V9fX0se31dLDgyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlcyIpLGk9dCgiLi4vaGlzdG9ncmFtL2Jpbl9hdHRyaWJ1dGVzIiksYT10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxjPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9Zih7eDpuLngseTpuLnksejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczppKCJ4IiksbmJpbnN5Om4ubmJpbnN5LHliaW5zOmkoInkiKSxhdXRvYmlueDpuLmF1dG9iaW54LGF1dG9iaW55Om4uYXV0b2JpbnksYmluZ3JvdXA6Zih7fSxuLmJpbmdyb3VwLHt9KSx4YmluZ3JvdXA6Zih7fSxuLmJpbmdyb3VwLHt9KSx5YmluZ3JvdXA6Zih7fSxuLmJpbmdyb3VwLHt9KSx4Z2FwOmEueGdhcCx5Z2FwOmEueWdhcCx6c21vb3RoOmEuenNtb290aCx4aG92ZXJmb3JtYXQ6cygieCIpLHlob3ZlcmZvcm1hdDpzKCJ5IiksemhvdmVyZm9ybWF0OnMoInoiLDEpLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czoieiJ9KSx0ZXh0dGVtcGxhdGU6Yyh7YXJyYXlPazohMSxlZGl0VHlwZToicGxvdCJ9LHtrZXlzOiJ6In0pLHRleHRmb250OmEudGV4dGZvbnQsc2hvd2xlZ2VuZDpmKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSx1KCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6NzkyLCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlcyI6ODEyLCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiOjgxNH1dLDgyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyIpLG89dCgiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIikscz10KCIuLi9oaXN0b2dyYW0vYXZlcmFnZSIpLGw9dCgiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzIiksYz10KCIuLi9oaXN0b2dyYW0vY2FsYyIpLmNhbGNBbGxBdXRvQmlucztmdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KHQpO2lmKG4pZm9yKGk9MDtpPHQ7aSsrKWFbaV09MS8oZVtpKzFdLWVbaV0pO2Vsc2V7dmFyIG89MS9yO2ZvcihpPTA7aTx0O2krKylhW2ldPW99cmV0dXJuIGF9ZnVuY3Rpb24gZih0LGUpe3JldHVybntzdGFydDp0KGUuc3RhcnQpLGVuZDp0KGUuZW5kKSxzaXplOmUuc2l6ZX19ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG8scz10Lmxlbmd0aC0xLGM9bmV3IEFycmF5KHMpLHU9bChyLG4sdCxpLGEpO2ZvcihvPTA7bzxzO28rKyl7dmFyIGY9KGV8fFtdKVtvXTtjW29dPXZvaWQgMD09PWY/W3UodFtvXSksdSh0W28rMV0sITApXTpbZixmXX1yZXR1cm4gY31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLHAsZCxtPWkuZ2V0RnJvbUlkKHQsZS54YXhpcyksZz1pLmdldEZyb21JZCh0LGUueWF4aXMpLHY9ZS54Y2FsZW5kYXIseT1lLnljYWxlbmRhcix4PWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAsdil9LGI9ZnVuY3Rpb24odCl7cmV0dXJuIGcucjJjKHQsMCx5KX0sXz1jKHQsZSxtLCJ4Iiksdz1fWzBdLFQ9X1sxXSxrPWModCxlLGcsInkiKSxBPWtbMF0sTT1rWzFdLFM9ZS5fbGVuZ3RoO1QubGVuZ3RoPlMmJlQuc3BsaWNlKFMsVC5sZW5ndGgtUyksTS5sZW5ndGg+UyYmTS5zcGxpY2UoUyxNLmxlbmd0aC1TKTt2YXIgRT1bXSxMPVtdLEM9W10sUD0ic3RyaW5nIj09dHlwZW9mIHcuc2l6ZSxJPSJzdHJpbmciPT10eXBlb2YgQS5zaXplLE89W10sej1bXSxEPVA/Tzp3LFI9ST96OkEsRj0wLEI9W10sTj1bXSxqPWUuaGlzdG5vcm0sVT1lLmhpc3RmdW5jLFY9LTEhPT1qLmluZGV4T2YoImRlbnNpdHkiKSxIPSJtYXgiPT09VXx8Im1pbiI9PT1VP251bGw6MCxxPWEuY291bnQsRz1vW2pdLFk9ITEsVz1bXSxYPVtdLFo9InoiaW4gZT9lLno6Im1hcmtlciJpbiBlJiZBcnJheS5pc0FycmF5KGUubWFya2VyLmNvbG9yKT9lLm1hcmtlci5jb2xvcjoiIjtaJiYiY291bnQiIT09VSYmKFk9ImF2ZyI9PT1VLHE9YVtVXSk7dmFyIEo9dy5zaXplLEs9eCh3LnN0YXJ0KSxRPXgody5lbmQpKyhLLWkudGlja0luY3JlbWVudChLLEosITEsdikpLzFlNjtmb3Iocj1LO3I8UTtyPWkudGlja0luY3JlbWVudChyLEosITEsdikpTC5wdXNoKEgpLE8ucHVzaChyKSxZJiZDLnB1c2goMCk7Ty5wdXNoKHIpO3ZhciAkLHR0PUwubGVuZ3RoLGV0PShyLUspL3R0LHJ0PSgkPUsrZXQvMixtLmMycigkLDAsdikpLG50PUEuc2l6ZSxpdD1iKEEuc3RhcnQpLGF0PWIoQS5lbmQpKyhpdC1pLnRpY2tJbmNyZW1lbnQoaXQsbnQsITEseSkpLzFlNjtmb3Iocj1pdDtyPGF0O3I9aS50aWNrSW5jcmVtZW50KHIsbnQsITEseSkpe0UucHVzaChMLnNsaWNlKCkpLHoucHVzaChyKTt2YXIgb3Q9bmV3IEFycmF5KHR0KTtmb3IobD0wO2w8dHQ7bCsrKW90W2xdPVtdO04ucHVzaChvdCksWSYmQi5wdXNoKEMuc2xpY2UoKSl9ei5wdXNoKHIpO3ZhciBzdD1FLmxlbmd0aCxsdD0oci1pdCkvc3QsY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGcuYzJyKHQsMCx5KX0oaXQrbHQvMik7ViYmKFc9dShMLmxlbmd0aCxELGV0LFApLFg9dShFLmxlbmd0aCxSLGx0LEkpKSxQfHwiZGF0ZSIhPT1tLnR5cGV8fChEPWYoeCxEKSksSXx8ImRhdGUiIT09Zy50eXBlfHwoUj1mKGIsUikpO3ZhciB1dD0hMCxmdD0hMCxodD1uZXcgQXJyYXkodHQpLHB0PW5ldyBBcnJheShzdCksZHQ9MS8wLG10PTEvMCxndD0xLzAsdnQ9MS8wO2ZvcihyPTA7cjxTO3IrKyl7dmFyIHl0PVRbcl0seHQ9TVtyXTtwPW4uZmluZEJpbih5dCxEKSxkPW4uZmluZEJpbih4dCxSKSxwPj0wJiZwPHR0JiZkPj0wJiZkPHN0JiYoRis9cShwLHIsRVtkXSxaLEJbZF0pLE5bZF1bcF0ucHVzaChyKSx1dCYmKHZvaWQgMD09PWh0W3BdP2h0W3BdPXl0Omh0W3BdIT09eXQmJih1dD0hMSkpLGZ0JiYodm9pZCAwPT09cHRbZF0/cHRbZF09eHQ6cHRbZF0hPT14dCYmKGZ0PSExKSksZHQ9TWF0aC5taW4oZHQseXQtT1twXSksbXQ9TWF0aC5taW4obXQsT1twKzFdLXl0KSxndD1NYXRoLm1pbihndCx4dC16W2RdKSx2dD1NYXRoLm1pbih2dCx6W2QrMV0teHQpKX1pZihZKWZvcihkPTA7ZDxzdDtkKyspRis9cyhFW2RdLEJbZF0pO2lmKEcpZm9yKGQ9MDtkPHN0O2QrKylHKEVbZF0sRixXLFhbZF0pO3JldHVybnt4OlQseFJhbmdlczpoKE8sdXQmJmh0LGR0LG10LG0sdikseDA6cnQsZHg6ZXQseTpNLHlSYW5nZXM6aCh6LGZ0JiZwdCxndCx2dCxnLHkpLHkwOmN0LGR5Omx0LHo6RSxwdHM6Tn19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi9oaXN0b2dyYW0vYXZlcmFnZSI6ODEzLCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyI6ODE1LCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiOjgxNiwiLi4vaGlzdG9ncmFtL2NhbGMiOjgxNywiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIjo4MjR9XSw4Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIikscz10KCIuLi9oZWF0bWFwL2xhYmVsX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWkodCxlLHUsYyksITEhPT1lLnZpc2libGUmJihhKHQsZSx1LGMpLG8odCxlLGMsdSx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksdSgiaG92ZXJ0ZW1wbGF0ZSIpLHModSxjKSx1KCJ4aG92ZXJmb3JtYXQiKSx1KCJ5aG92ZXJmb3JtYXQiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6Mzc2LCIuLi8uLi9saWIiOjUwMywiLi4vaGVhdG1hcC9sYWJlbF9kZWZhdWx0cyI6ODAyLCIuLi9oZWF0bWFwL3N0eWxlX2RlZmF1bHRzIjo4MDYsIi4vYXR0cmlidXRlcyI6ODI1LCIuL3NhbXBsZV9kZWZhdWx0cyI6ODMwfV0sODI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9bih0LGUscixhLG8pO2lmKHMpe3ZhciBsPSh0PXNbMF0pLmluZGV4LGM9bFswXSx1PWxbMV0sZj10LmNkWzBdLGg9Zi50cmFjZSxwPWYueFJhbmdlc1t1XSxkPWYueVJhbmdlc1tjXTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLFtwWzBdLHBbMV1dLGgueGhvdmVyZm9ybWF0KSx0LnlMYWJlbD1pKHQueWEsW2RbMF0sZFsxXV0saC55aG92ZXJmb3JtYXQpLHN9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuLi9oZWF0bWFwL2hvdmVyIjo3OTl9XSw4Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuLi9oZWF0bWFwL2NhbGMiKSxwbG90OnQoIi4uL2hlYXRtYXAvcGxvdCIpLGxheWVyTmFtZToiaGVhdG1hcGxheWVyIixjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksc3R5bGU6dCgiLi4vaGVhdG1hcC9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtMmQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImhpc3RvZ3JhbSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi4vaGVhdG1hcC9jYWxjIjo3OTMsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjc5NSwiLi4vaGVhdG1hcC9wbG90Ijo4MDQsIi4uL2hlYXRtYXAvc3R5bGUiOjgwNSwiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjo4MTksIi4uL2hpc3RvZ3JhbS9ldmVudF9kYXRhIjo4MjEsIi4vYXR0cmlidXRlcyI6ODI1LCIuL2RlZmF1bHRzIjo4MjcsIi4vaG92ZXIiOjgyOH1dLDgzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoIngiKSxzPXIoInkiKSxsPWkubWluUm93TGVuZ3RoKG8pLGM9aS5taW5Sb3dMZW5ndGgocyk7bCYmYz8oZS5fbGVuZ3RoPU1hdGgubWluKGwsYyksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxyKCJoaXN0bm9ybSIpLHIoImF1dG9iaW54IikscigiYXV0b2JpbnkiKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOH1dLDgzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczpuLnhiaW5zLG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDpuLmJpbmdyb3VwLHhiaW5ncm91cDpuLnhiaW5ncm91cCx5YmluZ3JvdXA6bi55YmluZ3JvdXAsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6aS5jb250b3VycyxsaW5lOntjb2xvcjppLmxpbmUuY29sb3Isd2lkdGg6cyh7fSxpLmxpbmUud2lkdGgse2RmbHQ6LjV9KSxkYXNoOmkubGluZS5kYXNoLHNtb290aGluZzppLmxpbmUuc21vb3RoaW5nLGVkaXRUeXBlOiJwbG90In0seGhvdmVyZm9ybWF0Om8oIngiKSx5aG92ZXJmb3JtYXQ6bygieSIpLHpob3ZlcmZvcm1hdDpvKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSx0ZXh0dGVtcGxhdGU6aS50ZXh0dGVtcGxhdGUsdGV4dGZvbnQ6aS50ZXh0Zm9udH0sYSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiOjczNSwiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlcyI6ODI1fV0sODMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIiksYT10KCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIiksbz10KCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIikscz10KCIuLi9oZWF0bWFwL2xhYmVsX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWkodCxlLHUsYyksITEhPT1lLnZpc2libGUmJihhKHQsZSx1LChmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxsLHIpfSkpLG8odCxlLHUsYyksdSgieGhvdmVyZm9ybWF0IiksdSgieWhvdmVyZm9ybWF0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpLGUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3JpbmcmJnModSxjKSl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo3NDIsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjc1NiwiLi4vaGVhdG1hcC9sYWJlbF9kZWZhdWx0cyI6ODAyLCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiOjgzMCwiLi9hdHRyaWJ1dGVzIjo4MzF9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuLi9jb250b3VyL2NhbGMiKSxwbG90OnQoIi4uL2NvbnRvdXIvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJjb250b3VybGF5ZXIiLHN0eWxlOnQoIi4uL2NvbnRvdXIvc3R5bGUiKSxjb2xvcmJhcjp0KCIuLi9jb250b3VyL2NvbG9yYmFyIiksaG92ZXJQb2ludHM6dCgiLi4vY29udG91ci9ob3ZlciIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoaXN0b2dyYW0yZGNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJoaXN0b2dyYW0iLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjgsIi4uL2NvbnRvdXIvY2FsYyI6NzM2LCIuLi9jb250b3VyL2NvbG9yYmFyIjo3MzgsIi4uL2NvbnRvdXIvaG92ZXIiOjc0OCwiLi4vY29udG91ci9wbG90Ijo3NTMsIi4uL2NvbnRvdXIvc3R5bGUiOjc1NSwiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjo4MTksIi4vYXR0cmlidXRlcyI6ODMxLCIuL2RlZmF1bHRzIjo4MzJ9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxsPXQoIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3RyZWVtYXAvYXR0cmlidXRlcyIpLHU9dCgiLi4vdHJlZW1hcC9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOmwubGFiZWxzLHBhcmVudHM6bC5wYXJlbnRzLHZhbHVlczpsLnZhbHVlcyxicmFuY2h2YWx1ZXM6bC5icmFuY2h2YWx1ZXMsY291bnQ6bC5jb3VudCxsZXZlbDpsLmxldmVsLG1heGRlcHRoOmwubWF4ZGVwdGgsdGlsaW5nOntvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToicGxvdCJ9LGZsaXA6Yy50aWxpbmcuZmxpcCxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6Zih7Y29sb3JzOmwubWFya2VyLmNvbG9ycyxsaW5lOmwubWFya2VyLmxpbmUsZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIiLHtjb2xvckF0dHI6ImNvbG9ycyIsYW5pbTohMX0pKSxsZWFmOmwubGVhZixwYXRoYmFyOmMucGF0aGJhcix0ZXh0OnMudGV4dCx0ZXh0aW5mbzpsLnRleHRpbmZvLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOnUuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OnMuaG92ZXJ0ZXh0LGhvdmVyaW5mbzpsLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6cy50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpzLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpjLm91dHNpZGV0ZXh0Zm9udCx0ZXh0cG9zaXRpb246Yy50ZXh0cG9zaXRpb24sc29ydDpzLnNvcnQscm9vdDpsLnJvb3QsZG9tYWluOm8oe25hbWU6ImljaWNsZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vcGllL2F0dHJpYnV0ZXMiOjkwMCwiLi4vc3VuYnVyc3QvYXR0cmlidXRlcyI6MTA0NSwiLi4vdHJlZW1hcC9hdHRyaWJ1dGVzIjoxMDcxLCIuLi90cmVlbWFwL2NvbnN0YW50cyI6MTA3NH1dLDgzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iaWNpY2xlIixyLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7bi5wbG90QmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxpLGEpe24uY2xlYW5CYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo2MTl9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3VuYnVyc3QvY2FsYyIpO3IuY2FsYz1mdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcnVuQ3Jvc3NUcmFjZUNhbGMoImljaWNsZSIsdCl9fSx7Ii4uL3N1bmJ1cnN0L2NhbGMiOjEwNDd9XSw4Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxsPXQoIi4uL2Jhci9jb25zdGFudHMiKS5URVhUUEFELGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksdT1jLmhhc0NvbG9yc2NhbGUsZj1jLmhhbmRsZURlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiBoKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIHA9aCgibGFiZWxzIiksZD1oKCJwYXJlbnRzIik7aWYocCYmcC5sZW5ndGgmJmQmJmQubGVuZ3RoKXt2YXIgbT1oKCJ2YWx1ZXMiKTttJiZtLmxlbmd0aD9oKCJicmFuY2h2YWx1ZXMiKTpoKCJjb3VudCIpLGgoImxldmVsIiksaCgibWF4ZGVwdGgiKSxoKCJ0aWxpbmcub3JpZW50YXRpb24iKSxoKCJ0aWxpbmcuZmxpcCIpLGgoInRpbGluZy5wYWQiKTt2YXIgZz1oKCJ0ZXh0Iik7aCgidGV4dHRlbXBsYXRlIiksZS50ZXh0dGVtcGxhdGV8fGgoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGcpPyJ0ZXh0K2xhYmVsIjoibGFiZWwiKSxoKCJob3ZlcnRleHQiKSxoKCJob3ZlcnRlbXBsYXRlIik7dmFyIHY9aCgicGF0aGJhci52aXNpYmxlIik7cyh0LGUsYyxoLCJhdXRvIix7aGFzUGF0aGJhcjp2LG1vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiExLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITEsbW9kdWxlSGFzVGV4dGFuZ2xlOiExLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMX0pLGgoInRleHRwb3NpdGlvbiIpLGgoIm1hcmtlci5saW5lLndpZHRoIikmJmgoIm1hcmtlci5saW5lLmNvbG9yIixjLnBhcGVyX2JnY29sb3IpLGgoIm1hcmtlci5jb2xvcnMiKTt2YXIgeT1lLl9oYXNDb2xvcnNjYWxlPXUodCwibWFya2VyIiwiY29sb3JzIil8fCh0Lm1hcmtlcnx8e30pLmNvbG9yYXhpczt5JiZmKHQsZSxjLGgse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSxoKCJsZWFmLm9wYWNpdHkiLHk/MTouNyksZS5faG92ZXJlZD17bWFya2VyOntsaW5lOnt3aWR0aDoyLGNvbG9yOmEuY29udHJhc3QoYy5wYXBlcl9iZ2NvbG9yKX19fSx2JiYoaCgicGF0aGJhci50aGlja25lc3MiLGUucGF0aGJhci50ZXh0Zm9udC5zaXplKzIqbCksaCgicGF0aGJhci5zaWRlIiksaCgicGF0aGJhci5lZGdlc2hhcGUiKSksaCgic29ydCIpLGgoInJvb3QuY29sb3IiKSxvKGUsYyxoKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTg0LCIuLi9iYXIvY29uc3RhbnRzIjo2NTAsIi4uL2Jhci9kZWZhdWx0cyI6NjUyLCIuL2F0dHJpYnV0ZXMiOjgzNH1dLDgzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi4vdHJlZW1hcC9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxmPXQoIi4uL3N1bmJ1cnN0L2Z4IiksaD10KCIuLi9zdW5idXJzdC9wbG90IikuZm9ybWF0U2xpY2VMYWJlbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgbT1kLndpZHRoLGc9ZC5oZWlnaHQsdj1kLnZpZXdYLHk9ZC52aWV3WSx4PWQucGF0aFNsaWNlLGI9ZC50b01vdmVJbnNpZGVTbGljZSxfPWQuc3RyVHJhbnNmb3JtLHc9ZC5oYXNUcmFuc2l0aW9uLFQ9ZC5oYW5kbGVTbGljZXNFeGl0LGs9ZC5tYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3IsQT1kLm1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yLE09ZC5wcmV2RW50cnksUz10Ll9mdWxsTGF5b3V0LEU9ZVswXS50cmFjZSxMPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigibGVmdCIpLEM9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpLFA9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSxJPXMocixbbSxnXSx7ZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTEsb3JpZW50YXRpb246RS50aWxpbmcub3JpZW50YXRpb24scGFkOntpbm5lcjpFLnRpbGluZy5wYWR9LG1heERlcHRoOkUuX21heERlcHRofSkuZGVzY2VuZGFudHMoKSxPPTEvMCx6PS0xLzA7SS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LmRlcHRoO2U+PUUuX21heERlcHRoPyh0LngwPXQueDE9KHQueDArdC54MSkvMix0LnkwPXQueTE9KHQueTArdC55MSkvMik6KE89TWF0aC5taW4oTyxlKSx6PU1hdGgubWF4KHosZSkpfSkpLHA9cC5kYXRhKEksdS5nZXRQdElkKSxFLl9tYXhWaXNpYmxlTGF5ZXJzPWlzRmluaXRlKHopP3otTysxOjAscC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksVChwLCExLHt9LFttLGddLHgpLHAub3JkZXIoKTt2YXIgRD1udWxsO2lmKHcmJk0pe3ZhciBSPXUuZ2V0UHRJZChNKTtwLmVhY2goKGZ1bmN0aW9uKHQpe251bGw9PT1EJiZ1LmdldFB0SWQodCk9PT1SJiYoRD17eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSkpfXZhciBGPWZ1bmN0aW9uKCl7cmV0dXJuIER8fHt4MDowLHgxOm0seTA6MCx5MTpnfX0sQj1wO3JldHVybiB3JiYoQj1CLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3Uuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksQi5lYWNoKChmdW5jdGlvbihzKXtzLl94MD12KHMueDApLHMuX3gxPXYocy54MSkscy5feTA9eShzLnkwKSxzLl95MT15KHMueTEpLHMuX2hvdmVyWD12KHMueDEtRS50aWxpbmcucGFkKSxzLl9ob3Zlclk9eShQP3MueTEtRS50aWxpbmcucGFkLzI6cy55MCtFLnRpbGluZy5wYWQvMik7dmFyIHA9bi5zZWxlY3QodGhpcyksZD1pLmVuc3VyZVNpbmdsZShwLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9kLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITEsRigpLFttLGddLHtvcmllbnRhdGlvbjpFLnRpbGluZy5vcmllbnRhdGlvbixmbGlwWDpFLnRpbGluZy5mbGlwLmluZGV4T2YoIngiKT4tMSxmbGlwWTpFLnRpbGluZy5mbGlwLmluZGV4T2YoInkiKT4tMX0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KSk6ZC5hdHRyKCJkIix4KSxwLmNhbGwoZixyLHQsZSx7c3R5bGVPbmU6bCxldmVudERhdGFLZXlzOmMuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTpjLkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOmMuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHUuc2V0U2xpY2VDdXJzb3IsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxkLmNhbGwobCxzLEUse2hvdmVyZWQ6ITF9KSxzLngwPT09cy54MXx8cy55MD09PXMueTE/cy5fdGV4dD0iIjpzLl90ZXh0PWgocyxyLEUsZSxTKXx8IiI7dmFyIFQ9aS5lbnN1cmVTaW5nbGUocCwiZyIsInNsaWNldGV4dCIpLE09aS5lbnN1cmVTaW5nbGUoVCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksST1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoRSxzLFMuZm9udCkpO00udGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIixDPyJlbmQiOkw/InN0YXJ0IjoibWlkZGxlIikuY2FsbChhLmZvbnQsSSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goTS5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6SS5zaXplfSkscy50cmFuc2Zvcm0uZm9udFNpemU9SS5zaXplLHc/TS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1BKHQsITEsRigpLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOk0uYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKSxEfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi9zdW5idXJzdC9meCI6MTA1MCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTA1MSwiLi4vc3VuYnVyc3QvcGxvdCI6MTA1NSwiLi4vdHJlZW1hcC9jb25zdGFudHMiOjEwNzQsIi4vcGFydGl0aW9uIjo4NDIsIi4vc3R5bGUiOjg0NCwiQHBsb3RseS9kMyI6NTh9XSw4Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaWNpY2xlIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG1ldGE6e319fSx7Ii4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4vYXR0cmlidXRlcyI6ODM0LCIuL2Jhc2VfcGxvdCI6ODM1LCIuL2NhbGMiOjgzNiwiLi9kZWZhdWx0cyI6ODM3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDAsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NDEsIi4vcGxvdCI6ODQzLCIuL3N0eWxlIjo4NDR9XSw4NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtpY2ljbGVjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZGljaWNsZWNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaWNpY2xlY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZGljaWNsZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjUwMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODQwfV0sODQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpLGk9dCgiLi4vdHJlZW1hcC9mbGlwX3RyZWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXIuZmxpcFgsbz1yLmZsaXBZLHM9ImgiPT09ci5vcmllbnRhdGlvbixsPXIubWF4RGVwdGgsYz1lWzBdLHU9ZVsxXTtsJiYoYz0odC5oZWlnaHQrMSkqZVswXS9NYXRoLm1pbih0LmhlaWdodCsxLGwpLHU9KHQuaGVpZ2h0KzEpKmVbMV0vTWF0aC5taW4odC5oZWlnaHQrMSxsKSk7dmFyIGY9bi5wYXJ0aXRpb24oKS5wYWRkaW5nKHIucGFkLmlubmVyKS5zaXplKHM/W2VbMV0sY106W2VbMF0sdV0pKHQpO3JldHVybihzfHxhfHxvKSYmaShmLGUse3N3YXBYWTpzLGZsaXBYOmEsZmxpcFk6b30pLGZ9fSx7Ii4uL3RyZWVtYXAvZmxpcF90cmVlIjoxMDc5LCJkMy1oaWVyYXJjaHkiOjExNX1dLDg0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi90cmVlbWFwL2RyYXciKSxpPXQoIi4vZHJhd19kZXNjZW5kYW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtyZXR1cm4gbih0LGUscixhLHt0eXBlOiJpY2ljbGUiLGRyYXdEZXNjZW5kYW50czppfSl9fSx7Ii4uL3RyZWVtYXAvZHJhdyI6MTA3NiwiLi9kcmF3X2Rlc2NlbmRhbnRzIjo4Mzh9XSw4NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtmdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1lLmRhdGEuZGF0YSxvPSFlLmNoaWxkcmVuLHM9bi5pLGw9YS5jYXN0T3B0aW9uKHIscywibWFya2VyLmxpbmUuY29sb3IiKXx8aS5kZWZhdWx0TGluZSxjPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLndpZHRoIil8fDA7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixjKS5jYWxsKGkuZmlsbCxuLmNvbG9yKS5jYWxsKGkuc3Ryb2tlLGwpLnN0eWxlKCJvcGFjaXR5IixvP3IubGVhZi5vcGFjaXR5Om51bGwpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faWNpY2xlbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtvKHQsZSwiaWNpY2xlIiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZSgib3BhY2l0eSIsci5vcGFjaXR5KSxlLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChzLHQscil9KSl9KSl9LHN0eWxlT25lOnN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vbGliIjo1MDMsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiQHBsb3RseS9kMyI6NTh9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4vY29uc3RhbnRzIikuY29sb3Jtb2RlbCxzPVsicmdiIiwicmdiYSIsInJnYmEyNTYiLCJoc2wiLCJoc2xhIl0sbD1bXSxjPVtdLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGY9b1tzW3VdXTtsLnB1c2goIkZvciB0aGUgYCIrc1t1XSsiYCBjb2xvcm1vZGVsLCBpdCBpcyBbIisoZi56bWluRGZsdHx8Zi5taW4pLmpvaW4oIiwgIikrIl0uIiksYy5wdXNoKCJGb3IgdGhlIGAiK3NbdV0rImAgY29sb3Jtb2RlbCwgaXQgaXMgWyIrKGYuem1heERmbHR8fGYubWF4KS5qb2luKCIsICIpKyJdLiIpfWUuZXhwb3J0cz1hKHtzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGNvbG9ybW9kZWw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLGVkaXRUeXBlOiJjYWxjIn0senNtb290aDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmFzdCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSx6bWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSx6bWF4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSx4MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxkeTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSxob3ZlcmluZm86YSh7fSxuLmhvdmVyaW5mbyx7ZmxhZ3M6WyJ4IiwieSIsInoiLCJjb2xvciIsIm5hbWUiLCJ0ZXh0Il0sZGZsdDoieCt5K3ordGV4dCtuYW1lIn0pLGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpbInoiLCJjb2xvciIsImNvbG9ybW9kZWwiXX0pLHRyYW5zZm9ybXM6dm9pZCAwfSl9LHsiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi9jb25zdGFudHMiOjg0N31dLDg0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vY29uc3RhbnRzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2xpYiIpLm1heFJvd0xlbmd0aCxsPXQoIi4vaGVscGVycyIpLmdldEltYWdlU2l6ZTtmdW5jdGlvbiBjKHQsZSxyLGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbi5jb25zdHJhaW4oKGEtdCkqZSxyLGkpfX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvbnN0cmFpbihyLHQsZSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG47aWYoZS5faGFzWilyPWUuei5sZW5ndGgsbj1zKGUueik7ZWxzZSBpZihlLl9oYXNTb3VyY2Upe3ZhciBmPWwoZS5zb3VyY2UpO3I9Zi5oZWlnaHQsbj1mLndpZHRofXZhciBoLHA9by5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLGQ9by5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLG09cC5kMmMoZS54MCktZS5keC8yLGc9ZC5kMmMoZS55MCktZS5keS8yLHY9W20sbStuKmUuZHhdLHk9W2csZytyKmUuZHldO2lmKHAmJiJsb2ciPT09cC50eXBlKWZvcihoPTA7aDxuO2grKyl2LnB1c2gobStoKmUuZHgpO2lmKGQmJiJsb2ciPT09ZC50eXBlKWZvcihoPTA7aDxyO2grKyl5LnB1c2goZytoKmUuZHkpO3JldHVybiBlLl9leHRyZW1lc1twLl9pZF09by5maW5kRXh0cmVtZXMocCx2KSxlLl9leHRyZW1lc1tkLl9pZF09by5maW5kRXh0cmVtZXMoZCx5KSxlLl9zY2FsZXI9ZnVuY3Rpb24odCl7dmFyIGU9aS5jb2xvcm1vZGVsW3QuY29sb3Jtb2RlbF0scj0oZS5jb2xvcm1vZGVsfHx0LmNvbG9ybW9kZWwpLmxlbmd0aDt0Ll9zQXJyYXk9W107Zm9yKHZhciBuPTA7bjxyO24rKyllLm1pbltuXSE9PXQuem1pbltuXXx8ZS5tYXhbbl0hPT10LnptYXhbbl0/dC5fc0FycmF5LnB1c2goYyh0LnptaW5bbl0sKGUubWF4W25dLWUubWluW25dKS8odC56bWF4W25dLXQuem1pbltuXSksZS5taW5bbl0sZS5tYXhbbl0pKTp0Ll9zQXJyYXkucHVzaCh1KGUubWluW25dLGUubWF4W25dKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1lLnNsaWNlKDAsciksaT0wO2k8cjtpKyspe3ZhciBvPW5baV07aWYoIWEobykpcmV0dXJuITE7bltpXT10Ll9zQXJyYXlbaV0obyl9cmV0dXJuIG59fShlKSxbe3gwOm0seTA6Zyx6OmUueix3Om4saDpyfV19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuL2NvbnN0YW50cyI6ODQ3LCIuL2hlbHBlcnMiOjg1MCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDg0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NvbG9ybW9kZWw6e3JnYjp7bWluOlswLDAsMF0sbWF4OlsyNTUsMjU1LDI1NV0sZm10OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDAsMyl9LHN1ZmZpeDpbIiIsIiIsIiJdfSxyZ2JhOnttaW46WzAsMCwwLDBdLG1heDpbMjU1LDI1NSwyNTUsMV0sZm10OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDAsNCl9LHN1ZmZpeDpbIiIsIiIsIiIsIiJdfSxyZ2JhMjU2Ontjb2xvcm1vZGVsOiJyZ2JhIix6bWluRGZsdDpbMCwwLDAsMF0sem1heERmbHQ6WzI1NSwyNTUsMjU1LDI1NV0sbWluOlswLDAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1LDFdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDQpfSxzdWZmaXg6WyIiLCIiLCIiLCIiXX0saHNsOnttaW46WzAsMCwwXSxtYXg6WzM2MCwxMDAsMTAwXSxmbXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgwLDMpO3JldHVybiBlWzFdPWVbMV0rIiUiLGVbMl09ZVsyXSsiJSIsZX0sc3VmZml4OlsiXHhiMCIsIiUiLCIlIl19LGhzbGE6e21pbjpbMCwwLDAsMF0sbWF4OlszNjAsMTAwLDEwMCwxXSxmbXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgwLDQpO3JldHVybiBlWzFdPWVbMV0rIiUiLGVbMl09ZVsyXSsiJSIsZX0sc3VmZml4OlsiXHhiMCIsIiUiLCIlIiwiIl19fSxwaXhlbGF0ZWRTdHlsZTpbImltYWdlLXJlbmRlcmluZzogb3B0aW1pemVTcGVlZCIsImltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlcyIsImltYWdlLXJlbmRlcmluZzogLW8tY3Jpc3AtZWRnZXMiLCJpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3QiLCJpbWFnZS1yZW5kZXJpbmc6IG9wdGltaXplLWNvbnRyYXN0IiwiaW1hZ2UtcmVuZGVyaW5nOiBjcmlzcC1lZGdlcyIsImltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkIiwiIl0uam9pbigiOyAiKX19LHt9XSw4NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIikuSU1BR0VfVVJMX1BSRUZJWDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigic291cmNlIiksZS5zb3VyY2UmJiFlLnNvdXJjZS5tYXRjaChvKSYmZGVsZXRlIGUuc291cmNlLGUuX2hhc1NvdXJjZT0hIWUuc291cmNlO3ZhciBzLGw9cigieiIpOyhlLl9oYXNaPSEodm9pZCAwPT09bHx8IWwubGVuZ3RofHwhbFswXXx8IWxbMF0ubGVuZ3RoKSxlLl9oYXNafHxlLl9oYXNTb3VyY2UpPyhyKCJ4MCIpLHIoInkwIikscigiZHgiKSxyKCJkeSIpLGUuX2hhc1o/KHIoImNvbG9ybW9kZWwiLCJyZ2IiKSxyKCJ6bWluIiwocz1hLmNvbG9ybW9kZWxbZS5jb2xvcm1vZGVsXSkuem1pbkRmbHR8fHMubWluKSxyKCJ6bWF4IixzLnptYXhEZmx0fHxzLm1heCkpOmUuX2hhc1NvdXJjZSYmKGUuY29sb3Jtb2RlbD0icmdiYTI1NiIscz1hLmNvbG9ybW9kZWxbZS5jb2xvcm1vZGVsXSxlLnptaW49cy56bWluRGZsdCxlLnptYXg9cy56bWF4RGZsdCkscigienNtb290aCIpLHIoInRleHQiKSxyKCJob3ZlcnRleHQiKSxyKCJob3ZlcnRlbXBsYXRlIiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3NuYXBzaG90L2hlbHBlcnMiOjY0MiwiLi9hdHRyaWJ1dGVzIjo4NDUsIi4vY29uc3RhbnRzIjo4NDd9XSw4NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuInhWYWwiaW4gZSYmKHQueD1lLnhWYWwpLCJ5VmFsImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0LmNvbG9yPWUuY29sb3IsdC5jb2xvcm1vZGVsPWUudHJhY2UuY29sb3Jtb2RlbCx0Lnp8fCh0Lno9ZS5jb2xvciksdH19LHt9XSw4NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicHJvYmUtaW1hZ2Utc2l6ZS9zeW5jIiksaT10KCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIikuSU1BR0VfVVJMX1BSRUZJWCxhPXQoImJ1ZmZlci8iKS5CdWZmZXI7ci5nZXRJbWFnZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKGksIiIpLHI9bmV3IGEoZSwiYmFzZTY0Iik7cmV0dXJuIG4ocil9fSx7Ii4uLy4uL3NuYXBzaG90L2hlbHBlcnMiOjY0MiwiYnVmZmVyLyI6ODUsInByb2JlLWltYWdlLXNpemUvc3luYyI6Mjc2fV0sODUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXQuY2RbMF0scz1vLnRyYWNlLGw9dC54YSxjPXQueWE7aWYoIShuLmluYm94KGUtby54MCxlLShvLngwK28udypzLmR4KSwwKT4wfHxuLmluYm94KHItby55MCxyLShvLnkwK28uaCpzLmR5KSwwKT4wKSl7dmFyIHUsZj1NYXRoLmZsb29yKChlLW8ueDApL3MuZHgpLGg9TWF0aC5mbG9vcihNYXRoLmFicyhyLW8ueTApL3MuZHkpO2lmKHMuX2hhc1o/dT1vLnpbaF1bZl06cy5faGFzU291cmNlJiYodT1zLl9jYW52YXMuZWwuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoZixoLDEsMSkuZGF0YSksdSl7dmFyIHAsZD1vLmhpfHxzLmhvdmVyaW5mbztpZihkKXt2YXIgbT1kLnNwbGl0KCIrIik7LTEhPT1tLmluZGV4T2YoImFsbCIpJiYobT1bImNvbG9yIl0pLC0xIT09bS5pbmRleE9mKCJjb2xvciIpJiYocD0hMCl9dmFyIGcsdj1hLmNvbG9ybW9kZWxbcy5jb2xvcm1vZGVsXSx5PXYuY29sb3Jtb2RlbHx8cy5jb2xvcm1vZGVsLHg9eS5sZW5ndGgsYj1zLl9zY2FsZXIodSksXz12LnN1ZmZpeCx3PVtdOyhzLmhvdmVydGVtcGxhdGV8fHApJiYody5wdXNoKCJbIitbYlswXStfWzBdLGJbMV0rX1sxXSxiWzJdK19bMl1dLmpvaW4oIiwgIikpLDQ9PT14JiZ3LnB1c2goIiwgIitiWzNdK19bM10pLHcucHVzaCgiXSIpLHc9dy5qb2luKCIiKSx0LmV4dHJhVGV4dD15LnRvVXBwZXJDYXNlKCkrIjogIit3KSxBcnJheS5pc0FycmF5KHMuaG92ZXJ0ZXh0KSYmQXJyYXkuaXNBcnJheShzLmhvdmVydGV4dFtoXSk/Zz1zLmhvdmVydGV4dFtoXVtmXTpBcnJheS5pc0FycmF5KHMudGV4dCkmJkFycmF5LmlzQXJyYXkocy50ZXh0W2hdKSYmKGc9cy50ZXh0W2hdW2ZdKTt2YXIgVD1jLmMycChvLnkwKyhoKy41KSpzLmR5KSxrPW8ueDArKGYrLjUpKnMuZHgsQT1vLnkwKyhoKy41KSpzLmR5LE09IlsiK3Uuc2xpY2UoMCxzLmNvbG9ybW9kZWwubGVuZ3RoKS5qb2luKCIsICIpKyJdIjtyZXR1cm5baS5leHRlbmRGbGF0KHQse2luZGV4OltoLGZdLHgwOmwuYzJwKG8ueDArZipzLmR4KSx4MTpsLmMycChvLngwKyhmKzEpKnMuZHgpLHkwOlQseTE6VCxjb2xvcjpiLHhWYWw6ayx4TGFiZWxWYWw6ayx5VmFsOkEseUxhYmVsVmFsOkEsekxhYmVsVmFsOk0sdGV4dDpnLGhvdmVydGVtcGxhdGVMYWJlbHM6e3pMYWJlbDpNLGNvbG9yTGFiZWw6dywiY29sb3JbMF1MYWJlbCI6YlswXStfWzBdLCJjb2xvclsxXUxhYmVsIjpiWzFdK19bMV0sImNvbG9yWzJdTGFiZWwiOmJbMl0rX1syXSwiY29sb3JbM11MYWJlbCI6YlszXStfWzNdfX0pXX19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDYsIi4uLy4uL2xpYiI6NTAzLCIuL2NvbnN0YW50cyI6ODQ3fV0sODUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpbWFnZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLGFuaW1hdGFibGU6ITEsbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjgsIi4vYXR0cmlidXRlcyI6ODQ1LCIuL2NhbGMiOjg0NiwiLi9kZWZhdWx0cyI6ODQ4LCIuL2V2ZW50X2RhdGEiOjg0OSwiLi9ob3ZlciI6ODUxLCIuL3Bsb3QiOjg1MywiLi9zdHlsZSI6ODU0fV0sODUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5zdHJUcmFuc2xhdGUsbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi9jb25zdGFudHMiKSxsPWkuaXNJT1MoKXx8aS5pc1NhZmFyaSgpfHxpLmlzSUUoKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9ZS54YXhpcyxmPWUueWF4aXMsaD0hKGx8fHQuX2NvbnRleHQuX2V4cG9ydGVkUGxvdCk7aS5tYWtlVHJhY2VHcm91cHMoYyxyLCJpbSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGw9ZVswXSxjPWwudHJhY2UscD0oImZhc3QiPT09Yy56c21vb3RofHwhMT09PWMuenNtb290aCYmaCkmJiFjLl9oYXNaJiZjLl9oYXNTb3VyY2UmJiJsaW5lYXIiPT09dS50eXBlJiYibGluZWFyIj09PWYudHlwZTtjLl9yZWFsSW1hZ2U9cDt2YXIgZCxtLGcsdix5LHgsYj1sLnosXz1sLngwLHc9bC55MCxUPWwudyxrPWwuaCxBPWMuZHgsTT1jLmR5O2Zvcih4PTA7dm9pZCAwPT09ZCYmeDxUOylkPXUuYzJwKF8reCpBKSx4Kys7Zm9yKHg9VDt2b2lkIDA9PT1tJiZ4PjA7KW09dS5jMnAoXyt4KkEpLHgtLTtmb3IoeD0wO3ZvaWQgMD09PXYmJng8azspdj1mLmMycCh3K3gqTSkseCsrO2Zvcih4PWs7dm9pZCAwPT09eSYmeD4wOyl5PWYuYzJwKHcreCpNKSx4LS07aWYobTxkJiYoZz1tLG09ZCxkPWcpLHk8diYmKGc9dix2PXkseT1nKSwhcCl7ZD1NYXRoLm1heCgtLjUqdS5fbGVuZ3RoLGQpLG09TWF0aC5taW4oMS41KnUuX2xlbmd0aCxtKSx2PU1hdGgubWF4KC0uNSpmLl9sZW5ndGgsdikseT1NYXRoLm1pbigxLjUqZi5fbGVuZ3RoLHkpfXZhciBTPU1hdGgucm91bmQobS1kKSxFPU1hdGgucm91bmQoeS12KTtpZihTPD0wfHxFPD0wKXtyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgTD1yLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtlXSk7TC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxMLmV4aXQoKS5yZW1vdmUoKTt2YXIgQz0hMT09PWMuenNtb290aD9zLnBpeGVsYXRlZFN0eWxlOiIiO2lmKHApe3ZhciBQPWkuc2ltcGxlTWFwKHUucmFuZ2UsdS5yMmwpLEk9aS5zaW1wbGVNYXAoZi5yYW5nZSxmLnIybCksTz1QWzFdPFBbMF0sej1JWzFdPklbMF07aWYoT3x8eil7dmFyIEQ9ZCtTLzIsUj12K0UvMjtDKz0idHJhbnNmb3JtOiIrYShEKyJweCIsUisicHgiKSsic2NhbGUoIisoTz8tMToxKSsiLCIrKHo/LTE6MSkrIikiK2EoLUQrInB4IiwtUisicHgiKSsiOyJ9fUwuYXR0cigic3R5bGUiLEMpO3ZhciBGPW5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtpZihjLl9oYXNaKXQoKTtlbHNlIGlmKGMuX2hhc1NvdXJjZSlpZihjLl9jYW52YXMmJmMuX2NhbnZhcy5lbC53aWR0aD09PVQmJmMuX2NhbnZhcy5lbC5oZWlnaHQ9PT1rJiZjLl9jYW52YXMuc291cmNlPT09Yy5zb3VyY2UpdCgpO2Vsc2V7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS53aWR0aD1ULGUuaGVpZ2h0PWs7dmFyIHI9ZS5nZXRDb250ZXh0KCIyZCIpO2MuX2ltYWdlPWMuX2ltYWdlfHxuZXcgSW1hZ2U7dmFyIG49Yy5faW1hZ2U7bi5vbmxvYWQ9ZnVuY3Rpb24oKXtyLmRyYXdJbWFnZShuLDAsMCksYy5fY2FudmFzPXtlbDplLHNvdXJjZTpjLnNvdXJjZX0sdCgpfSxuLnNldEF0dHJpYnV0ZSgic3JjIixjLnNvdXJjZSl9fSkpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ7aWYoYy5faGFzWil0PUIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbZV1bdF19KSkudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtlbHNlIGlmKGMuX2hhc1NvdXJjZSlpZihwKXQ9Yy5zb3VyY2U7ZWxzZXt2YXIgZT1jLl9jYW52YXMuZWwuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoMCwwLFQsaykuZGF0YTt0PUIoKGZ1bmN0aW9uKHQscil7dmFyIG49NCoocipUK3QpO3JldHVybltlW25dLGVbbisxXSxlW24rMl0sZVtuKzNdXX0pKS50b0RhdGFVUkwoImltYWdlL3BuZyIpfUwuYXR0cih7InhsaW5rOmhyZWYiOnQsaGVpZ2h0OkUsd2lkdGg6Uyx4OmQseTp2fSl9KSk7dC5fcHJvbWlzZXMucHVzaChGKX1mdW5jdGlvbiBCKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9UyxlLmhlaWdodD1FO3ZhciByLG49ZS5nZXRDb250ZXh0KCIyZCIpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGkuY29uc3RyYWluKE1hdGgucm91bmQodS5jMnAoXyt0KkEpLWQpLDAsUyl9LG89ZnVuY3Rpb24odCl7cmV0dXJuIGkuY29uc3RyYWluKE1hdGgucm91bmQoZi5jMnAodyt0Kk0pLXYpLDAsRSl9LGg9cy5jb2xvcm1vZGVsW2MuY29sb3Jtb2RlbF0scD1oLmNvbG9ybW9kZWx8fGMuY29sb3Jtb2RlbCxtPWguZm10O2Zvcih4PTA7eDxsLnc7eCsrKXt2YXIgZz1hKHgpLHk9YSh4KzEpO2lmKHkhPT1nJiYhaXNOYU4oeSkmJiFpc05hTihnKSlmb3IodmFyIGI9MDtiPGwuaDtiKyspe3ZhciBUPW8oYiksaz1vKGIrMSk7az09PVR8fGlzTmFOKGspfHxpc05hTihUKXx8IXQoeCxiKXx8KHI9Yy5fc2NhbGVyKHQoeCxiKSksbi5maWxsU3R5bGU9cj9wKyIoIittKHIpLmpvaW4oIiwiKSsiKSI6InJnYmEoMCwwLDAsMCkiLG4uZmlsbFJlY3QoZyxULHktZyxrLVQpKX19cmV0dXJuIGV9fSkpfX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NDgwLCIuLi8uLi9saWIiOjUwMywiLi9jb25zdGFudHMiOjg0NywiQHBsb3RseS9kMyI6NTh9XSw4NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5pbSBpbWFnZSIpLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKX19LHsiQHBsb3RseS9kMyI6NTh9XSw4NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksZj10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVycyxwPW8oe2VkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJwbG90In0pLGQ9e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6cy5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sbT17dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxnPXUoInN0ZXAiLGkoe30sZCx7cmFuZ2U6bX0pKTtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJudW1iZXIiLCJkZWx0YSIsImdhdWdlIl0sZGZsdDoibnVtYmVyIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjpsKHtuYW1lOiJpbmRpY2F0b3IiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LHAse30pLGVkaXRUeXBlOiJwbG90In0sbnVtYmVyOnt2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90IixkZXNjcmlwdGlvbjpoKCJ2YWx1ZSIpfSxmb250Om4oe30scCx7fSkscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZGVsdGE6e3JlZmVyZW5jZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0scmVsYXRpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90IixkZmx0OiExfSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246aCgidmFsdWUiKX0saW5jcmVhc2luZzp7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Zi5JTkNSRUFTSU5HLlNZTUJPTCxlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpmLklOQ1JFQVNJTkcuQ09MT1IsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRlY3JlYXNpbmc6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OmYuREVDUkVBU0lORy5TWU1CT0wsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Zi5ERUNSRUFTSU5HLkNPTE9SLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxmb250Om4oe30scCx7fSksZWRpdFR5cGU6ImNhbGMifSxnYXVnZTp7c2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJwbG90IixkZmx0OiJhbmd1bGFyIix2YWx1ZXM6WyJhbmd1bGFyIiwiYnVsbGV0Il19LGJhcjppKHt9LGQse2NvbG9yOntkZmx0OiJncmVlbiJ9fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OnMuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxheGlzOmEoe3JhbmdlOm0sdmlzaWJsZTpuKHt9LGMudmlzaWJsZSx7ZGZsdDohMH0pLHRpY2ttb2RlOmMudGlja21vZGUsbnRpY2tzOmMubnRpY2tzLHRpY2swOmMudGljazAsZHRpY2s6Yy5kdGljayx0aWNrdmFsczpjLnRpY2t2YWxzLHRpY2t0ZXh0OmMudGlja3RleHQsdGlja3M6bih7fSxjLnRpY2tzLHtkZmx0OiJvdXRzaWRlIn0pLHRpY2tsZW46Yy50aWNrbGVuLHRpY2t3aWR0aDpjLnRpY2t3aWR0aCx0aWNrY29sb3I6Yy50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6Yy5zaG93dGlja2xhYmVscyx0aWNrZm9udDpvKHt9KSx0aWNrYW5nbGU6Yy50aWNrYW5nbGUsdGlja2Zvcm1hdDpjLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmMudGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6Yy50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4OmMuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpjLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6Yy5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpjLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0OmMuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6Yy5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6Yy5zaG93ZXhwb25lbnQsZWRpdFR5cGU6InBsb3QifSwicGxvdCIpLHN0ZXBzOmcsdGhyZXNob2xkOntsaW5lOntjb2xvcjpuKHt9LGQubGluZS5jb2xvcix7fSksd2lkdGg6bih7fSxkLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJwbG90In0sdGhpY2tuZXNzOm4oe30sZC50aGlja25lc3Mse2RmbHQ6Ljg1fSksdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6ITF9LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjozNjUsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NDczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OSwiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1fV0sODU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJpbmRpY2F0b3IiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjYxOX1dLDg1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1bXSxuPWUudmFsdWU7Im51bWJlciIhPXR5cGVvZiBlLl9sYXN0VmFsdWUmJihlLl9sYXN0VmFsdWU9ZS52YWx1ZSk7dmFyIGk9ZS5fbGFzdFZhbHVlLGE9aTtyZXR1cm4gZS5faGFzRGVsdGEmJiJudW1iZXIiPT10eXBlb2YgZS5kZWx0YS5yZWZlcmVuY2UmJihhPWUuZGVsdGEucmVmZXJlbmNlKSxyWzBdPXt5Om4sbGFzdFk6aSxkZWx0YTpuLWEscmVsYXRpdmVEZWx0YToobi1hKS9hfSxyfX19LHt9XSw4NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtkZWZhdWx0TnVtYmVyRm9udFNpemU6ODAsYnVsbGV0TnVtYmVyRG9tYWluU2l6ZTouMjUsYnVsbGV0UGFkZGluZzouMDI1LGlubmVyUmFkaXVzOi43NSx2YWx1ZVRoaWNrbmVzczouNSx0aXRsZVBhZGRpbmc6NSxob3Jpem9udGFsUGFkZGluZzoxMH19LHt9XSw4NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2NvbnN0YW50cy5qcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcHJlZml4X3N1ZmZpeF9kZWZhdWx0cyIpO2Z1bmN0aW9uIHAodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmdhdWdlLnN0ZXBzLHIsYSl9cigiY29sb3IiKSxyKCJsaW5lLmNvbG9yIikscigibGluZS53aWR0aCIpLHIoInJhbmdlIikscigidGhpY2tuZXNzIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixkKXtmdW5jdGlvbiBtKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YShlLGQsbSksbSgibW9kZSIpLGUuX2hhc051bWJlcj0tMSE9PWUubW9kZS5pbmRleE9mKCJudW1iZXIiKSxlLl9oYXNEZWx0YT0tMSE9PWUubW9kZS5pbmRleE9mKCJkZWx0YSIpLGUuX2hhc0dhdWdlPS0xIT09ZS5tb2RlLmluZGV4T2YoImdhdWdlIik7dmFyIGc9bSgidmFsdWUiKTtlLl9yYW5nZT1bMCwibnVtYmVyIj09dHlwZW9mIGc/MS41Kmc6MV07dmFyIHYseSx4LGIsXyx3LFQ9bmV3IEFycmF5KDIpO2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5jb2VyY2UoeCxiLGkuZ2F1Z2UsdCxlKX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIG4uY29lcmNlKF8sdyxpLmdhdWdlLmF4aXMsdCxlKX1pZihlLl9oYXNOdW1iZXImJihtKCJudW1iZXIudmFsdWVmb3JtYXQiKSxtKCJudW1iZXIuZm9udC5jb2xvciIsZC5mb250LmNvbG9yKSxtKCJudW1iZXIuZm9udC5mYW1pbHkiLGQuZm9udC5mYW1pbHkpLG0oIm51bWJlci5mb250LnNpemUiKSx2b2lkIDA9PT1lLm51bWJlci5mb250LnNpemUmJihlLm51bWJlci5mb250LnNpemU9bC5kZWZhdWx0TnVtYmVyRm9udFNpemUsVFswXT0hMCksbSgibnVtYmVyLnByZWZpeCIpLG0oIm51bWJlci5zdWZmaXgiKSx2PWUubnVtYmVyLmZvbnQuc2l6ZSksZS5faGFzRGVsdGEmJihtKCJkZWx0YS5mb250LmNvbG9yIixkLmZvbnQuY29sb3IpLG0oImRlbHRhLmZvbnQuZmFtaWx5IixkLmZvbnQuZmFtaWx5KSxtKCJkZWx0YS5mb250LnNpemUiKSx2b2lkIDA9PT1lLmRlbHRhLmZvbnQuc2l6ZSYmKGUuZGVsdGEuZm9udC5zaXplPShlLl9oYXNOdW1iZXI/LjU6MSkqKHZ8fGwuZGVmYXVsdE51bWJlckZvbnRTaXplKSxUWzFdPSEwKSxtKCJkZWx0YS5yZWZlcmVuY2UiLGUudmFsdWUpLG0oImRlbHRhLnJlbGF0aXZlIiksbSgiZGVsdGEudmFsdWVmb3JtYXQiLGUuZGVsdGEucmVsYXRpdmU/IjIlIjoiIiksbSgiZGVsdGEuaW5jcmVhc2luZy5zeW1ib2wiKSxtKCJkZWx0YS5pbmNyZWFzaW5nLmNvbG9yIiksbSgiZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wiKSxtKCJkZWx0YS5kZWNyZWFzaW5nLmNvbG9yIiksbSgiZGVsdGEucG9zaXRpb24iKSx5PWUuZGVsdGEuZm9udC5zaXplKSxlLl9zY2FsZU51bWJlcnM9KCFlLl9oYXNOdW1iZXJ8fFRbMF0pJiYoIWUuX2hhc0RlbHRhfHxUWzFdKXx8ITEsbSgidGl0bGUuZm9udC5jb2xvciIsZC5mb250LmNvbG9yKSxtKCJ0aXRsZS5mb250LmZhbWlseSIsZC5mb250LmZhbWlseSksbSgidGl0bGUuZm9udC5zaXplIiwuMjUqKHZ8fHl8fGwuZGVmYXVsdE51bWJlckZvbnRTaXplKSksbSgidGl0bGUudGV4dCIpLGUuX2hhc0dhdWdlKXsoeD10LmdhdWdlKXx8KHg9e30pLGI9by5uZXdDb250YWluZXIoZSwiZ2F1Z2UiKSxrKCJzaGFwZSIpLChlLl9pc0J1bGxldD0iYnVsbGV0Ij09PWUuZ2F1Z2Uuc2hhcGUpfHxtKCJ0aXRsZS5hbGlnbiIsImNlbnRlciIpLChlLl9pc0FuZ3VsYXI9ImFuZ3VsYXIiPT09ZS5nYXVnZS5zaGFwZSl8fG0oImFsaWduIiwiY2VudGVyIiksaygiYmdjb2xvciIsZC5wYXBlcl9iZ2NvbG9yKSxrKCJib3JkZXJ3aWR0aCIpLGsoImJvcmRlcmNvbG9yIiksaygiYmFyLmNvbG9yIiksaygiYmFyLmxpbmUuY29sb3IiKSxrKCJiYXIubGluZS53aWR0aCIpLGsoImJhci50aGlja25lc3MiLGwudmFsdWVUaGlja25lc3MqKCJidWxsZXQiPT09ZS5nYXVnZS5zaGFwZT8uNToxKSkscyh4LGIse25hbWU6InN0ZXBzIixoYW5kbGVJdGVtRGVmYXVsdHM6cH0pLGsoInRocmVzaG9sZC52YWx1ZSIpLGsoInRocmVzaG9sZC50aGlja25lc3MiKSxrKCJ0aHJlc2hvbGQubGluZS53aWR0aCIpLGsoInRocmVzaG9sZC5saW5lLmNvbG9yIiksXz17fSx4JiYoXz14LmF4aXN8fHt9KSx3PW8ubmV3Q29udGFpbmVyKGIsImF4aXMiKSxBKCJ2aXNpYmxlIiksZS5fcmFuZ2U9QSgicmFuZ2UiLGUuX3JhbmdlKTt2YXIgTT17b3V0ZXJUaWNrczohMH07YyhfLHcsQSwibGluZWFyIiksaChfLHcsQSwibGluZWFyIixNKSxmKF8sdyxBLCJsaW5lYXIiLE0pLHUoXyx3LEEsTSl9ZWxzZSBtKCJ0aXRsZS5hbGlnbiIsImNlbnRlciIpLG0oImFsaWduIiwiY2VudGVyIiksZS5faXNBbmd1bGFyPWUuX2lzQnVsbGV0PSExO2UuX2xlbmd0aD1udWxsfX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wcmVmaXhfc3VmZml4X2RlZmF1bHRzIjo1NzMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo1NzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjU3OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjU4MCwiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4vYXR0cmlidXRlcyI6ODU1LCIuL2NvbnN0YW50cy5qcyI6ODU4fV0sODYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImluZGljYXRvciIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsic3ZnIiwibm9PcGFjaXR5Iiwibm9Ib3ZlciJdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90IiksbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjo4NTUsIi4vYmFzZV9wbG90Ijo4NTYsIi4vY2FsYyI6ODU3LCIuL2RlZmF1bHRzIjo4NTksIi4vcGxvdCI6ODYxfV0sODYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGUsYT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLG89dCgiLi4vLi4vbGliIikscz1vLnN0clNjYWxlLGw9by5zdHJUcmFuc2xhdGUsYz1vLnJhZDJkZWcsdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULGY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaD10KCIuL2NvbnN0YW50cyIpLHA9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG09dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSxnPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyIpLHY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIikseT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikseD17bGVmdDoic3RhcnQiLGNlbnRlcjoibWlkZGxlIixyaWdodDoiZW5kIn0sYj17bGVmdDowLGNlbnRlcjouNSxyaWdodDoxfSxfPS9beXphZnBuXHhiNW1rTUdUUEVaWV0vO2Z1bmN0aW9uIHcodCl7cmV0dXJuIHQmJnQuZHVyYXRpb24+MH1mdW5jdGlvbiBUKHQpe3QuZWFjaCgoZnVuY3Rpb24odCl7eS5zdHJva2Uobi5zZWxlY3QodGhpcyksdC5saW5lLmNvbG9yKX0pKS5lYWNoKChmdW5jdGlvbih0KXt5LmZpbGwobi5zZWxlY3QodGhpcyksdC5jb2xvcil9KSkuc3R5bGUoInN0cm9rZS13aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmUud2lkdGh9KSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW8uZXh0ZW5kRmxhdCh7dHlwZToibGluZWFyIix0aWNrczoib3V0c2lkZSIscmFuZ2U6cixzaG93bGluZTohMH0sZSksYT17dHlwZToibGluZWFyIixfaWQ6IngiK2UuX2lkfSxzPXtsZXR0ZXI6IngiLGZvbnQ6bi5mb250LG5vSG92ZXI6ITAsbm9UaWNrc29uOiEwfTtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIG8uY29lcmNlKGksYSx2LHQsZSl9cmV0dXJuIG0oaSxhLGwscyxuKSxnKGksYSxsLHMpLGF9ZnVuY3Rpb24gQSh0LGUscil7cmV0dXJuW01hdGgubWluKGUvdC53aWR0aCxyL3QuaGVpZ2h0KSx0LGUrIngiK3JdfWZ1bmN0aW9uIE0odCxlLHIsaSl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKSxvPW4uc2VsZWN0KGEpO3JldHVybiBvLnRleHQodCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigidGV4dC1hbmNob3IiLHIpLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiLHQpLmNhbGwocC5jb252ZXJ0VG9Uc3BhbnMsaSkuY2FsbChmLmZvbnQsZSksZi5iQm94KG8ubm9kZSgpKX1mdW5jdGlvbiBTKHQsZSxyLG4saSxhKXt2YXIgcz0iX2NhY2hlIitlO3Rbc10mJnRbc10ua2V5PT09aXx8KHRbc109e2tleTppLHZhbHVlOnJ9KTt2YXIgbD1vLmFnZ051bXMoYSxudWxsLFt0W3NdLnZhbHVlLG5dLDIpO3JldHVybiB0W3NdLnZhbHVlPWwsbH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbSl7dmFyIGcsdj10Ll9mdWxsTGF5b3V0O3cocikmJm0mJihnPW0oKSksby5tYWtlVHJhY2VHcm91cHModi5faW5kaWNhdG9ybGF5ZXIsZSwidHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgbSxFLEwsQyxQLEk9ZVswXS50cmFjZSxPPW4uc2VsZWN0KHRoaXMpLHo9SS5faGFzR2F1Z2UsRD1JLl9pc0FuZ3VsYXIsUj1JLl9pc0J1bGxldCxGPUkuZG9tYWluLEI9e3c6di5fc2l6ZS53KihGLnhbMV0tRi54WzBdKSxoOnYuX3NpemUuaCooRi55WzFdLUYueVswXSksbDp2Ll9zaXplLmwrdi5fc2l6ZS53KkYueFswXSxyOnYuX3NpemUucit2Ll9zaXplLncqKDEtRi54WzFdKSx0OnYuX3NpemUudCt2Ll9zaXplLmgqKDEtRi55WzFdKSxiOnYuX3NpemUuYit2Ll9zaXplLmgqRi55WzBdfSxOPUIubCtCLncvMixqPUIudCtCLmgvMixVPU1hdGgubWluKEIudy8yLEIuaCksVj1oLmlubmVyUmFkaXVzKlUsSD1JLmFsaWdufHwiY2VudGVyIjtpZihFPWoseil7aWYoRCYmKG09TixFPWorVS8yLEw9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KHQud2lkdGgvMioodC53aWR0aC8yKSt0LmhlaWdodCp0LmhlaWdodCk7cmV0dXJuW2Uvcix0LGVdfSh0LC45KlYpfSksUil7dmFyIHE9aC5idWxsZXRQYWRkaW5nLEc9MS1oLmJ1bGxldE51bWJlckRvbWFpblNpemUrcTttPUIubCsoRysoMS1HKSpiW0hdKSpCLncsTD1mdW5jdGlvbih0KXtyZXR1cm4gQSh0LChoLmJ1bGxldE51bWJlckRvbWFpblNpemUtcSkqQi53LEIuaCl9fX1lbHNlIG09Qi5sK2JbSF0qQi53LEw9ZnVuY3Rpb24odCl7cmV0dXJuIEEodCxCLncsQi5oKX07IWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBjLHUsaCxtPXJbMF0udHJhY2UsZz1pLm51bWJlcnNYLHY9aS5udW1iZXJzWSxUPW0uYWxpZ258fCJjZW50ZXIiLEE9eFtUXSxFPWkudHJhbnNpdGlvbk9wdHMsTD1pLm9uQ29tcGxldGUsQz1vLmVuc3VyZVNpbmdsZShlLCJnIiwibnVtYmVycyIpLFA9W107bS5faGFzTnVtYmVyJiZQLnB1c2goIm51bWJlciIpO20uX2hhc0RlbHRhJiYoUC5wdXNoKCJkZWx0YSIpLCJsZWZ0Ij09PW0uZGVsdGEucG9zaXRpb24mJlAucmV2ZXJzZSgpKTt2YXIgST1DLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoUCk7ZnVuY3Rpb24gTyhlLHIsbixpKXtpZighZS5tYXRjaCgicyIpfHxuPj0wPT1pPj0wfHxyKG4pLnNsaWNlKC0xKS5tYXRjaChfKXx8cihpKS5zbGljZSgtMSkubWF0Y2goXykpcmV0dXJuIHI7dmFyIGE9ZS5zbGljZSgpLnJlcGxhY2UoInMiLCJmIikucmVwbGFjZSgvXGQrLywoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQpLTF9KSksbz1rKHQse3RpY2tmb3JtYXQ6YX0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModCk8MT9kLnRpY2tUZXh0KG8sdCkudGV4dDpyKHQpfX1JLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IiksSS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJkeCIsbnVsbCkuYXR0cigiZHkiLG51bGwpLEkuZXhpdCgpLnJlbW92ZSgpO3ZhciB6LEQ9bS5tb2RlK20uYWxpZ247bS5faGFzRGVsdGEmJih6PWZ1bmN0aW9uKCl7dmFyIGU9ayh0LHt0aWNrZm9ybWF0Om0uZGVsdGEudmFsdWVmb3JtYXR9LG0uX3JhbmdlKTtlLnNldFNjYWxlKCksZC5wcmVwVGlja3MoZSk7dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIGQudGlja1RleHQoZSx0KS50ZXh0fSxvPWZ1bmN0aW9uKHQpe3JldHVybiBtLmRlbHRhLnJlbGF0aXZlP3QucmVsYXRpdmVEZWx0YTp0LmRlbHRhfSxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10fHwibnVtYmVyIiE9dHlwZW9mIHR8fGlzTmFOKHQpPyItIjoodD4wP20uZGVsdGEuaW5jcmVhc2luZy5zeW1ib2w6bS5kZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCkrZSh0KX0sbD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZWx0YT49MD9tLmRlbHRhLmluY3JlYXNpbmcuY29sb3I6bS5kZWx0YS5kZWNyZWFzaW5nLmNvbG9yfTt2b2lkIDA9PT1tLl9kZWx0YUxhc3RWYWx1ZSYmKG0uX2RlbHRhTGFzdFZhbHVlPW8oclswXSkpO3ZhciBjPUMuc2VsZWN0KCJ0ZXh0LmRlbHRhIik7ZnVuY3Rpb24gaCgpe2MudGV4dChzKG8oclswXSksaSkpLmNhbGwoeS5maWxsLGwoclswXSkpLmNhbGwocC5jb252ZXJ0VG9Uc3BhbnMsdCl9cmV0dXJuIGMuY2FsbChmLmZvbnQsbS5kZWx0YS5mb250KS5jYWxsKHkuZmlsbCxsKHtkZWx0YTptLl9kZWx0YUxhc3RWYWx1ZX0pKSx3KEUpP2MudHJhbnNpdGlvbigpLmR1cmF0aW9uKEUuZHVyYXRpb24pLmVhc2UoRS5lYXNpbmcpLnR3ZWVuKCJ0ZXh0IiwoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPW8oclswXSksYz1tLl9kZWx0YUxhc3RWYWx1ZSx1PU8obS5kZWx0YS52YWx1ZWZvcm1hdCxpLGMsZSksZj1hKGMsZSk7cmV0dXJuIG0uX2RlbHRhTGFzdFZhbHVlPWUsZnVuY3Rpb24oZSl7dC50ZXh0KHMoZihlKSx1KSksdC5jYWxsKHkuZmlsbCxsKHtkZWx0YTpmKGUpfSkpfX0pKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe2goKSxMJiZMKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtoKCksTCYmTCgpfSkpOmgoKSx1PU0ocyhvKHJbMF0pLGkpLG0uZGVsdGEuZm9udCxBLHQpLGN9KCksRCs9bS5kZWx0YS5wb3NpdGlvbittLmRlbHRhLmZvbnQuc2l6ZSttLmRlbHRhLmZvbnQuZmFtaWx5K20uZGVsdGEudmFsdWVmb3JtYXQsRCs9bS5kZWx0YS5pbmNyZWFzaW5nLnN5bWJvbCttLmRlbHRhLmRlY3JlYXNpbmcuc3ltYm9sLGg9dSk7bS5faGFzTnVtYmVyJiYoIWZ1bmN0aW9uKCl7dmFyIGU9ayh0LHt0aWNrZm9ybWF0Om0ubnVtYmVyLnZhbHVlZm9ybWF0fSxtLl9yYW5nZSk7ZS5zZXRTY2FsZSgpLGQucHJlcFRpY2tzKGUpO3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiBkLnRpY2tUZXh0KGUsdCkudGV4dH0sbz1tLm51bWJlci5zdWZmaXgscz1tLm51bWJlci5wcmVmaXgsbD1DLnNlbGVjdCgidGV4dC5udW1iZXIiKTtmdW5jdGlvbiB1KCl7dmFyIGU9Im51bWJlciI9PXR5cGVvZiByWzBdLnk/cytpKHJbMF0ueSkrbzoiLSI7bC50ZXh0KGUpLmNhbGwoZi5mb250LG0ubnVtYmVyLmZvbnQpLmNhbGwocC5jb252ZXJ0VG9Uc3BhbnMsdCl9dyhFKT9sLnRyYW5zaXRpb24oKS5kdXJhdGlvbihFLmR1cmF0aW9uKS5lYXNlKEUuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3UoKSxMJiZMKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXt1KCksTCYmTCgpfSkpLmF0dHJUd2VlbigidGV4dCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1hKHJbMF0ubGFzdFksclswXS55KTttLl9sYXN0VmFsdWU9clswXS55O3ZhciBsPU8obS5udW1iZXIudmFsdWVmb3JtYXQsaSxyWzBdLmxhc3RZLHJbMF0ueSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudGV4dChzK2woZShyKSkrbyl9fSkpOnUoKSxjPU0ocytpKHJbMF0ueSkrbyxtLm51bWJlci5mb250LEEsdCl9KCksRCs9bS5udW1iZXIuZm9udC5zaXplK20ubnVtYmVyLmZvbnQuZmFtaWx5K20ubnVtYmVyLnZhbHVlZm9ybWF0K20ubnVtYmVyLnN1ZmZpeCttLm51bWJlci5wcmVmaXgsaD1jKTtpZihtLl9oYXNEZWx0YSYmbS5faGFzTnVtYmVyKXt2YXIgUixGLEI9WyhjLmxlZnQrYy5yaWdodCkvMiwoYy50b3ArYy5ib3R0b20pLzJdLE49Wyh1LmxlZnQrdS5yaWdodCkvMiwodS50b3ArdS5ib3R0b20pLzJdLGo9Ljc1Km0uZGVsdGEuZm9udC5zaXplOyJsZWZ0Ij09PW0uZGVsdGEucG9zaXRpb24mJihSPVMobSwiZGVsdGFQb3MiLDAsLTEqKGMud2lkdGgqYlttLmFsaWduXSt1LndpZHRoKigxLWJbbS5hbGlnbl0pK2opLEQsTWF0aC5taW4pLEY9QlsxXS1OWzFdLGg9e3dpZHRoOmMud2lkdGgrdS53aWR0aCtqLGhlaWdodDpNYXRoLm1heChjLmhlaWdodCx1LmhlaWdodCksbGVmdDp1LmxlZnQrUixyaWdodDpjLnJpZ2h0LHRvcDpNYXRoLm1pbihjLnRvcCx1LnRvcCtGKSxib3R0b206TWF0aC5tYXgoYy5ib3R0b20sdS5ib3R0b20rRil9KSwicmlnaHQiPT09bS5kZWx0YS5wb3NpdGlvbiYmKFI9UyhtLCJkZWx0YVBvcyIsMCxjLndpZHRoKigxLWJbbS5hbGlnbl0pK3Uud2lkdGgqYlttLmFsaWduXStqLEQsTWF0aC5tYXgpLEY9QlsxXS1OWzFdLGg9e3dpZHRoOmMud2lkdGgrdS53aWR0aCtqLGhlaWdodDpNYXRoLm1heChjLmhlaWdodCx1LmhlaWdodCksbGVmdDpjLmxlZnQscmlnaHQ6dS5yaWdodCtSLHRvcDpNYXRoLm1pbihjLnRvcCx1LnRvcCtGKSxib3R0b206TWF0aC5tYXgoYy5ib3R0b20sdS5ib3R0b20rRil9KSwiYm90dG9tIj09PW0uZGVsdGEucG9zaXRpb24mJihSPW51bGwsRj11LmhlaWdodCxoPXt3aWR0aDpNYXRoLm1heChjLndpZHRoLHUud2lkdGgpLGhlaWdodDpjLmhlaWdodCt1LmhlaWdodCxsZWZ0Ok1hdGgubWluKGMubGVmdCx1LmxlZnQpLHJpZ2h0Ok1hdGgubWF4KGMucmlnaHQsdS5yaWdodCksdG9wOmMuYm90dG9tLWMuaGVpZ2h0LGJvdHRvbTpjLmJvdHRvbSt1LmhlaWdodH0pLCJ0b3AiPT09bS5kZWx0YS5wb3NpdGlvbiYmKFI9bnVsbCxGPWMudG9wLGg9e3dpZHRoOk1hdGgubWF4KGMud2lkdGgsdS53aWR0aCksaGVpZ2h0OmMuaGVpZ2h0K3UuaGVpZ2h0LGxlZnQ6TWF0aC5taW4oYy5sZWZ0LHUubGVmdCkscmlnaHQ6TWF0aC5tYXgoYy5yaWdodCx1LnJpZ2h0KSx0b3A6Yy5ib3R0b20tYy5oZWlnaHQtdS5oZWlnaHQsYm90dG9tOmMuYm90dG9tfSksei5hdHRyKHtkeDpSLGR5OkZ9KX0obS5faGFzTnVtYmVyfHxtLl9oYXNEZWx0YSkmJkMuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oKXt2YXIgdD1pLm51bWJlcnNTY2FsZXIoaCk7RCs9dFsyXTt2YXIgZSxyPVMobSwibnVtYmVyc1NjYWxlIiwxLHRbMF0sRCxNYXRoLm1pbik7bS5fc2NhbGVOdW1iZXJzfHwocj0xKSxlPW0uX2lzQW5ndWxhcj92LXIqaC5ib3R0b206di1yKihoLnRvcCtoLmJvdHRvbSkvMixtLl9udW1iZXJzVG9wPXIqaC50b3ArZTt2YXIgbj1oW1RdOyJjZW50ZXIiPT09VCYmKG49KGgubGVmdCtoLnJpZ2h0KS8yKTt2YXIgYT1nLXIqbjtyZXR1cm4gYT1TKG0sIm51bWJlcnNUcmFuc2xhdGUiLDAsYSxELE1hdGgubWF4KSxsKGEsZSkrcyhyKX0pKX0odCxPLGUse251bWJlcnNYOm0sbnVtYmVyc1k6RSxudW1iZXJzU2NhbGVyOkwsdHJhbnNpdGlvbk9wdHM6cixvbkNvbXBsZXRlOmd9KSx6JiYoQz17cmFuZ2U6SS5nYXVnZS5heGlzLnJhbmdlLGNvbG9yOkkuZ2F1Z2UuYmdjb2xvcixsaW5lOntjb2xvcjpJLmdhdWdlLmJvcmRlcmNvbG9yLHdpZHRoOjB9LHRoaWNrbmVzczoxfSxQPXtyYW5nZTpJLmdhdWdlLmF4aXMucmFuZ2UsY29sb3I6InJnYmEoMCwgMCwgMCwgMCkiLGxpbmU6e2NvbG9yOkkuZ2F1Z2UuYm9yZGVyY29sb3Isd2lkdGg6SS5nYXVnZS5ib3JkZXJ3aWR0aH0sdGhpY2tuZXNzOjF9KTt2YXIgWT1PLnNlbGVjdEFsbCgiZy5hbmd1bGFyIikuZGF0YShEP2U6W10pO1kuZXhpdCgpLnJlbW92ZSgpO3ZhciBXPU8uc2VsZWN0QWxsKCJnLmFuZ3VsYXJheGlzIikuZGF0YShEP2U6W10pO1cuZXhpdCgpLnJlbW92ZSgpLEQmJmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsZixoLHA9clswXS50cmFjZSxtPWEuc2l6ZSxnPWEucmFkaXVzLHY9YS5pbm5lclJhZGl1cyx5PWEuZ2F1Z2VCZyx4PWEuZ2F1Z2VPdXRsaW5lLGI9W20ubCttLncvMixtLnQrbS5oLzIrZy8yXSxfPWEuZ2F1Z2UsQT1hLmxheWVyLE09YS50cmFuc2l0aW9uT3B0cyxTPWEub25Db21wbGV0ZSxFPU1hdGguUEkvMjtmdW5jdGlvbiBMKHQpe3ZhciBlPXAuZ2F1Z2UuYXhpcy5yYW5nZVswXSxyPSh0LWUpLyhwLmdhdWdlLmF4aXMucmFuZ2VbMV0tZSkqTWF0aC5QSS1FO3JldHVybiByPC1FPy1FOnI+RT9FOnJ9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gbi5zdmcuYXJjKCkuaW5uZXJSYWRpdXMoKHYrZykvMi10LzIqKGctdikpLm91dGVyUmFkaXVzKCh2K2cpLzIrdC8yKihnLXYpKS5zdGFydEFuZ2xlKC1FKX1mdW5jdGlvbiBQKHQpe3QuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBDKHQudGhpY2tuZXNzKS5zdGFydEFuZ2xlKEwodC5yYW5nZVswXSkpLmVuZEFuZ2xlKEwodC5yYW5nZVsxXSkpKCl9KSl9Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXIiLCEwKSxfLmF0dHIoInRyYW5zZm9ybSIsbChiWzBdLGJbMV0pKSxBLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ndWxhcmF4aXMiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLEEuc2VsZWN0QWxsKCJnLnhhbmd1bGFyYXhpc3RpY2sscGF0aCx0ZXh0IikucmVtb3ZlKCksKG89ayh0LHAuZ2F1Z2UuYXhpcykpLnR5cGU9ImxpbmVhciIsby5yYW5nZT1wLmdhdWdlLmF4aXMucmFuZ2Usby5faWQ9Inhhbmd1bGFyYXhpcyIsby50aWNrbGFiZWxvdmVyZmxvdz0iYWxsb3ciLG8uc2V0U2NhbGUoKTt2YXIgST1mdW5jdGlvbih0KXtyZXR1cm4oby5yYW5nZVswXS10LngpLyhvLnJhbmdlWzFdLW8ucmFuZ2VbMF0pKk1hdGguUEkrTWF0aC5QSX0sTz17fSx6PWQubWFrZUxhYmVsRm5zKG8sMCkubGFiZWxTdGFuZG9mZjtPLnhGbj1mdW5jdGlvbih0KXt2YXIgZT1JKHQpO3JldHVybiBNYXRoLmNvcyhlKSp6fSxPLnlGbj1mdW5jdGlvbih0KXt2YXIgZT1JKHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSooeit0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSp1KX0sTy5hbmNob3JGbj1mdW5jdGlvbih0KXt2YXIgZT1JKHQpLHI9TWF0aC5jb3MoZSk7cmV0dXJuIE1hdGguYWJzKHIpPC4xPyJtaWRkbGUiOnI+MD8ic3RhcnQiOiJlbmQifSxPLmhlaWdodEZuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1JKHQpO3JldHVybi0uNSooMStNYXRoLnNpbihuKSkqcn07dmFyIEQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwoYlswXStnKk1hdGguY29zKHQpLGJbMV0tZypNYXRoLnNpbih0KSl9O2Y9ZnVuY3Rpb24odCl7cmV0dXJuIEQoSSh0KSl9O2lmKHM9ZC5jYWxjVGlja3MobyksaD1kLmdldFRpY2tTaWducyhvKVsyXSxvLnZpc2libGUpe2g9Imluc2lkZSI9PT1vLnRpY2tzPy0xOjE7dmFyIFI9KG8ubGluZXdpZHRofHwxKS8yO2QuZHJhd1RpY2tzKHQsbyx7dmFsczpzLGxheWVyOkEscGF0aDoiTSIraCpSKyIsMGgiK2gqby50aWNrbGVuLHRyYW5zRm46ZnVuY3Rpb24odCl7dmFyIGU9SSh0KTtyZXR1cm4gRChlKSsicm90YXRlKCIrLWMoZSkrIikifX0pLGQuZHJhd0xhYmVscyh0LG8se3ZhbHM6cyxsYXllcjpBLHRyYW5zRm46ZixsYWJlbEZuczpPfSl9dmFyIEY9W3ldLmNvbmNhdChwLmdhdWdlLnN0ZXBzKSxCPV8uc2VsZWN0QWxsKCJnLmJnLWFyYyIpLmRhdGEoRik7Qi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnLWFyYyIsITApLmFwcGVuZCgicGF0aCIpLEIuc2VsZWN0KCJwYXRoIikuY2FsbChQKS5jYWxsKFQpLEIuZXhpdCgpLnJlbW92ZSgpO3ZhciBOPUMocC5nYXVnZS5iYXIudGhpY2tuZXNzKSxqPV8uc2VsZWN0QWxsKCJnLnZhbHVlLWFyYyIpLmRhdGEoW3AuZ2F1Z2UuYmFyXSk7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInZhbHVlLWFyYyIsITApLmFwcGVuZCgicGF0aCIpO3ZhciBVPWouc2VsZWN0KCJwYXRoIik7dyhNKT8oVS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTS5kdXJhdGlvbikuZWFzZShNLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtTJiZTKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtTJiZTKCl9KSkuYXR0clR3ZWVuKCJkIiwoVj1OLEg9TChyWzBdLmxhc3RZKSxxPUwoclswXS55KSxmdW5jdGlvbigpe3ZhciB0PWkoSCxxKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFYuZW5kQW5nbGUodChlKSkoKX19KSkscC5fbGFzdFZhbHVlPXJbMF0ueSk6VS5hdHRyKCJkIiwibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9OLmVuZEFuZ2xlKEwoclswXS55KSk6Ik0wLDBaIik7dmFyIFYsSCxxO1UuY2FsbChUKSxqLmV4aXQoKS5yZW1vdmUoKSxGPVtdO3ZhciBHPXAuZ2F1Z2UudGhyZXNob2xkLnZhbHVlOyhHfHwwPT09RykmJkYucHVzaCh7cmFuZ2U6W0csR10sY29sb3I6cC5nYXVnZS50aHJlc2hvbGQuY29sb3IsbGluZTp7Y29sb3I6cC5nYXVnZS50aHJlc2hvbGQubGluZS5jb2xvcix3aWR0aDpwLmdhdWdlLnRocmVzaG9sZC5saW5lLndpZHRofSx0aGlja25lc3M6cC5nYXVnZS50aHJlc2hvbGQudGhpY2tuZXNzfSk7dmFyIFk9Xy5zZWxlY3RBbGwoImcudGhyZXNob2xkLWFyYyIpLmRhdGEoRik7WS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRocmVzaG9sZC1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxZLnNlbGVjdCgicGF0aCIpLmNhbGwoUCkuY2FsbChUKSxZLmV4aXQoKS5yZW1vdmUoKTt2YXIgVz1fLnNlbGVjdEFsbCgiZy5nYXVnZS1vdXRsaW5lIikuZGF0YShbeF0pO1cuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnYXVnZS1vdXRsaW5lIiwhMCkuYXBwZW5kKCJwYXRoIiksVy5zZWxlY3QoInBhdGgiKS5jYWxsKFApLmNhbGwoVCksVy5leGl0KCkucmVtb3ZlKCl9KHQsMCxlLHtyYWRpdXM6VSxpbm5lclJhZGl1czpWLGdhdWdlOlksbGF5ZXI6VyxzaXplOkIsZ2F1Z2VCZzpDLGdhdWdlT3V0bGluZTpQLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpnfSk7dmFyIFg9Ty5zZWxlY3RBbGwoImcuYnVsbGV0IikuZGF0YShSP2U6W10pO1guZXhpdCgpLnJlbW92ZSgpO3ZhciBaPU8uc2VsZWN0QWxsKCJnLmJ1bGxldGF4aXMiKS5kYXRhKFI/ZTpbXSk7Wi5leGl0KCkucmVtb3ZlKCksUiYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsYyx1PXJbMF0udHJhY2UsZj1uLmdhdWdlLHA9bi5sYXllcixtPW4uZ2F1Z2VCZyxnPW4uZ2F1Z2VPdXRsaW5lLHY9bi5zaXplLHg9dS5kb21haW4sYj1uLnRyYW5zaXRpb25PcHRzLF89bi5vbkNvbXBsZXRlO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXQiLCEwKSxmLmF0dHIoInRyYW5zZm9ybSIsbCh2Lmwsdi50KSkscC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJ1bGxldGF4aXMiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLHAuc2VsZWN0QWxsKCJnLnhidWxsZXRheGlzdGljayxwYXRoLHRleHQiKS5yZW1vdmUoKTt2YXIgQT12LmgsTT11LmdhdWdlLmJhci50aGlja25lc3MqQSxTPXgueFswXSxFPXgueFswXSsoeC54WzFdLXgueFswXSkqKHUuX2hhc051bWJlcnx8dS5faGFzRGVsdGE/MS1oLmJ1bGxldE51bWJlckRvbWFpblNpemU6MSk7KGk9ayh0LHUuZ2F1Z2UuYXhpcykpLl9pZD0ieGJ1bGxldGF4aXMiLGkuZG9tYWluPVtTLEVdLGkuc2V0U2NhbGUoKSxhPWQuY2FsY1RpY2tzKGkpLG89ZC5tYWtlVHJhbnNUaWNrRm4oaSkscz1kLmdldFRpY2tTaWducyhpKVsyXSxjPXYudCt2LmgsaS52aXNpYmxlJiYoZC5kcmF3VGlja3ModCxpLHt2YWxzOiJpbnNpZGUiPT09aS50aWNrcz9kLmNsaXBFbmRzKGksYSk6YSxsYXllcjpwLHBhdGg6ZC5tYWtlVGlja1BhdGgoaSxjLHMpLHRyYW5zRm46b30pLGQuZHJhd0xhYmVscyh0LGkse3ZhbHM6YSxsYXllcjpwLHRyYW5zRm46byxsYWJlbEZuczpkLm1ha2VMYWJlbEZucyhpLGMpfSkpO2Z1bmN0aW9uIEwodCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLGkuYzJwKHQucmFuZ2VbMV0pLWkuYzJwKHQucmFuZ2VbMF0pKX0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGkuYzJwKHQucmFuZ2VbMF0pfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4uNSooMS10LnRoaWNrbmVzcykqQX0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aGlja25lc3MqQX0pKX12YXIgQz1bbV0uY29uY2F0KHUuZ2F1Z2Uuc3RlcHMpLFA9Zi5zZWxlY3RBbGwoImcuYmctYnVsbGV0IikuZGF0YShDKTtQLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmctYnVsbGV0IiwhMCkuYXBwZW5kKCJyZWN0IiksUC5zZWxlY3QoInJlY3QiKS5jYWxsKEwpLmNhbGwoVCksUC5leGl0KCkucmVtb3ZlKCk7dmFyIEk9Zi5zZWxlY3RBbGwoImcudmFsdWUtYnVsbGV0IikuZGF0YShbdS5nYXVnZS5iYXJdKTtJLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidmFsdWUtYnVsbGV0IiwhMCkuYXBwZW5kKCJyZWN0IiksSS5zZWxlY3QoInJlY3QiKS5hdHRyKCJoZWlnaHQiLE0pLmF0dHIoInkiLChBLU0pLzIpLmNhbGwoVCksdyhiKT9JLnNlbGVjdCgicmVjdCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihiLmR1cmF0aW9uKS5lYXNlKGIuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe18mJl8oKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe18mJl8oKX0pKS5hdHRyKCJ3aWR0aCIsTWF0aC5tYXgoMCxpLmMycChNYXRoLm1pbih1LmdhdWdlLmF4aXMucmFuZ2VbMV0sclswXS55KSkpKTpJLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIiwibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9NYXRoLm1heCgwLGkuYzJwKE1hdGgubWluKHUuZ2F1Z2UuYXhpcy5yYW5nZVsxXSxyWzBdLnkpKSk6MCk7SS5leGl0KCkucmVtb3ZlKCk7dmFyIE89ci5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIHUuZ2F1Z2UudGhyZXNob2xkLnZhbHVlfHwwPT09dS5nYXVnZS50aHJlc2hvbGQudmFsdWV9KSksej1mLnNlbGVjdEFsbCgiZy50aHJlc2hvbGQtYnVsbGV0IikuZGF0YShPKTt6LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidGhyZXNob2xkLWJ1bGxldCIsITApLmFwcGVuZCgibGluZSIpLHouc2VsZWN0KCJsaW5lIikuYXR0cigieDEiLGkuYzJwKHUuZ2F1Z2UudGhyZXNob2xkLnZhbHVlKSkuYXR0cigieDIiLGkuYzJwKHUuZ2F1Z2UudGhyZXNob2xkLnZhbHVlKSkuYXR0cigieTEiLCgxLXUuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzcykvMipBKS5hdHRyKCJ5MiIsKDEtKDEtdS5nYXVnZS50aHJlc2hvbGQudGhpY2tuZXNzKS8yKSpBKS5jYWxsKHkuc3Ryb2tlLHUuZ2F1Z2UudGhyZXNob2xkLmxpbmUuY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHUuZ2F1Z2UudGhyZXNob2xkLmxpbmUud2lkdGgpLHouZXhpdCgpLnJlbW92ZSgpO3ZhciBEPWYuc2VsZWN0QWxsKCJnLmdhdWdlLW91dGxpbmUiKS5kYXRhKFtnXSk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdhdWdlLW91dGxpbmUiLCEwKS5hcHBlbmQoInJlY3QiKSxELnNlbGVjdCgicmVjdCIpLmNhbGwoTCkuY2FsbChUKSxELmV4aXQoKS5yZW1vdmUoKX0odCwwLGUse2dhdWdlOlgsbGF5ZXI6WixzaXplOkIsZ2F1Z2VCZzpDLGdhdWdlT3V0bGluZTpQLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpnfSk7dmFyIEo9Ty5zZWxlY3RBbGwoInRleHQudGl0bGUiKS5kYXRhKGUpO0ouZXhpdCgpLnJlbW92ZSgpLEouZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJ0aXRsZSIsITApLEouYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbigpe3JldHVybiBSP3gucmlnaHQ6eFtJLnRpdGxlLmFsaWduXX0pKS50ZXh0KEkudGl0bGUudGV4dCkuY2FsbChmLmZvbnQsSS50aXRsZS5mb250KS5jYWxsKHAuY29udmVydFRvVHNwYW5zLHQpLEouYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oKXt2YXIgdCxlPUIubCtCLncqYltJLnRpdGxlLmFsaWduXSxyPWgudGl0bGVQYWRkaW5nLG49Zi5iQm94KEoubm9kZSgpKTtpZih6KXtpZihEKWlmKEkuZ2F1Z2UuYXhpcy52aXNpYmxlKXQ9Zi5iQm94KFcubm9kZSgpKS50b3Atci1uLmJvdHRvbTtlbHNlIHQ9Qi50K0IuaC8yLVUvMi1uLmJvdHRvbS1yO1ImJih0PUUtKG4udG9wK24uYm90dG9tKS8yLGU9Qi5sLWguYnVsbGV0UGFkZGluZypCLncpfWVsc2UgdD1JLl9udW1iZXJzVG9wLXItbi5ib3R0b207cmV0dXJuIGwoZSx0KX0pKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NDcxLCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo1NTYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NTY5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjU3MiwiLi9jb25zdGFudHMiOjg1OCwiQHBsb3RseS9kMyI6NTgsImQzLWludGVycG9sYXRlIjoxMTZ9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDt2YXIgdT1lLmV4cG9ydHM9YyhsKHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGlzb21pbjp7dmFsVHlwZToibnVtYmVyIn0saXNvbWF4Ont2YWxUeXBlOiJudW1iZXIifSxzdXJmYWNlOntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb3VudDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoyLG1pbjoxfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0scGF0dGVybjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiQSIsIkIiLCJDIiwiRCIsIkUiXSxleHRyYXM6WyJhbGwiLCJvZGQiLCJldmVuIl0sZGZsdDoiYWxsIn19LHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMTV9fSxzbGljZXM6e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19fSxjYXBzOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6YSgpLHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx6aG92ZXJmb3JtYXQ6aSgieiIpLHZhbHVlaG92ZXJmb3JtYXQ6aSgidmFsdWUiLDEpLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse29wYWNpdHk6by5vcGFjaXR5LGxpZ2h0cG9zaXRpb246by5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOm8ubGlnaHRpbmcsZmxhdHNoYWRpbmc6by5mbGF0c2hhZGluZyxjb250b3VyOm8uY29udG91cixob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO3UuZmxhdHNoYWRpbmcuZGZsdD0hMCx1LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsdS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9dS52YWx1ZS5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsdS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjo4Njd9XSw4NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxpPXQoIi4uL3N0cmVhbXR1YmUvY2FsYyIpLnByb2Nlc3NHcmlkLGE9dCgiLi4vc3RyZWFtdHViZS9jYWxjIikuZmlsdGVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuX2xlbj1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxlLnZhbHVlLmxlbmd0aCksZS5feD1hKGUueCxlLl9sZW4pLGUuX3k9YShlLnksZS5fbGVuKSxlLl96PWEoZS56LGUuX2xlbiksZS5fdmFsdWU9YShlLnZhbHVlLGUuX2xlbik7dmFyIHI9aShlKTtlLl9ncmlkRmlsbD1yLmZpbGwsZS5fWHM9ci5YcyxlLl9Zcz1yLllzLGUuX1pzPXIuWnMsZS5fbGVuPXIubGVuO2Zvcih2YXIgbz0xLzAscz0tMS8wLGw9MDtsPGUuX2xlbjtsKyspe3ZhciBjPWUuX3ZhbHVlW2xdO289TWF0aC5taW4obyxjKSxzPU1hdGgubWF4KHMsYyl9ZS5fbWluVmFsdWVzPW8sZS5fbWF4VmFsdWVzPXMsZS5fdk1pbj12b2lkIDA9PT1lLmlzb21pbnx8bnVsbD09PWUuaXNvbWluP286ZS5pc29taW4sZS5fdk1heD12b2lkIDA9PT1lLmlzb21heHx8bnVsbD09PWUuaXNvbWluP3M6ZS5pc29tYXgsbih0LGUse3ZhbHM6W2UuX3ZNaW4sZS5fdk1heF0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNzQsIi4uL3N0cmVhbXR1YmUvY2FsYyI6MTA0MX1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9tZXNoM2QsaT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMscz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLTE7cj4wO3ItLSl7dmFyIG49TWF0aC5taW4oZVtyXSxlW3ItMV0pLGk9TWF0aC5tYXgoZVtyXSxlW3ItMV0pO2lmKGk+biYmbjx0JiZ0PD1pKXJldHVybntpZDpyLGRpc3RSYXRpbzooaS10KS8oaS1uKX19cmV0dXJue2lkOjAsZGlzdFJhdGlvOjB9fTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGk9dGhpcy5kYXRhLl9tZXNoWltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGksdGhpcy5kYXRhLl9acykuaWQsZj10LmluZGV4PXUrbypjK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2ZdLHRoaXMuZGF0YS5fbWVzaFlbZl0sdGhpcy5kYXRhLl9tZXNoWltmXSx0aGlzLmRhdGEuX3ZhbHVlW2ZdXTt2YXIgaD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShoKSYmdm9pZCAwIT09aFtmXT90LnRleHRMYWJlbD1oW2ZdOmgmJih0LnRleHRMYWJlbD1oKSwhMH19LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSkpfXRoaXMuZGF0YT1oKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmEodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9LGM9byh0KTtsLnZlcnRleEludGVuc2l0eT10Ll9tZXNoSW50ZW5zaXR5LGwudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtjLm1pbixjLm1heF0sbC5jb2xvcm1hcD1pKHQpLHRoaXMubWVzaC51cGRhdGUobCl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9O3ZhciBmPVsieHl6IiwieHp5IiwieXh6IiwieXp4Iiwienh5Iiwienl4Il07ZnVuY3Rpb24gaCh0KXt0Ll9tZXNoST1bXSx0Ll9tZXNoSj1bXSx0Ll9tZXNoSz1bXTt2YXIgZSxyLG4saSxhLG8scyxjPXQuc3VyZmFjZS5zaG93LHU9dC5zcGFjZWZyYW1lLnNob3csaD10LnN1cmZhY2UuZmlsbCxwPXQuc3BhY2VmcmFtZS5maWxsLGQ9ITEsbT0hMSxnPTAsdj10Ll9Ycyx5PXQuX1lzLHg9dC5fWnMsYj12Lmxlbmd0aCxfPXkubGVuZ3RoLHc9eC5sZW5ndGgsVD1mLmluZGV4T2YodC5fZ3JpZEZpbGwucmVwbGFjZSgvLS9nLCIiKS5yZXBsYWNlKC9cKy9nLCIiKSksaz1mdW5jdGlvbih0LGUscil7c3dpdGNoKFQpe2Nhc2UgNTpyZXR1cm4gcit3KmUrdypfKnQ7Y2FzZSA0OnJldHVybiByK3cqdCt3KmIqZTtjYXNlIDM6cmV0dXJuIGUrXypyK18qdyp0O2Nhc2UgMjpyZXR1cm4gZStfKnQrXypiKnI7Y2FzZSAxOnJldHVybiB0K2IqcitiKncqZTtkZWZhdWx0OnJldHVybiB0K2IqZStiKl8qcn19LEE9dC5fbWluVmFsdWVzLE09dC5fbWF4VmFsdWVzLFM9dC5fdk1pbixFPXQuX3ZNYXg7ZnVuY3Rpb24gTCh0LGUscyl7Zm9yKHZhciBsPW8ubGVuZ3RoLGM9cjtjPGw7YysrKWlmKHQ9PT1uW2NdJiZlPT09aVtjXSYmcz09PWFbY10pcmV0dXJuIGM7cmV0dXJuLTF9ZnVuY3Rpb24gQygpe3I9ZX1mdW5jdGlvbiBQKCl7bj1bXSxpPVtdLGE9W10sbz1bXSxlPTAsQygpfWZ1bmN0aW9uIEkodCxyLHMsbCl7cmV0dXJuIG4ucHVzaCh0KSxpLnB1c2gociksYS5wdXNoKHMpLG8ucHVzaChsKSwrK2UtMX1mdW5jdGlvbiBPKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09dFtpXSooMS1yKStyKmVbaV07cmV0dXJuIG59ZnVuY3Rpb24geih0KXtzPXR9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiJhbGwiPT09dHx8bnVsbD09PXR8fHQuaW5kZXhPZihlKT4tMX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIG51bGw9PT10P2U6dH1mdW5jdGlvbiBGKGUscixuKXtDKCk7dmFyIGksYSxvLGw9W3JdLGM9W25dO2lmKHM+PTEpbD1bcl0sYz1bbl07ZWxzZSBpZihzPjApe3ZhciB1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT0odFtpXStlW2ldK3JbaV0pLzM7cmV0dXJuIG59KHIsbixpKSxvPU1hdGguc3FydCgxLXMpLGw9TyhhLHIsbyksYz1PKGEsbixvKSx1PU8oYSxpLG8pLGY9ZVswXSxoPWVbMV0scD1lWzJdO3JldHVybnt4eXp2OltbcixuLGNdLFtjLGwscl0sW24saSx1XSxbdSxjLG5dLFtpLHIsbF0sW2wsdSxpXV0sYWJjOltbZixoLC0xXSxbLTEsLTEsZl0sW2gscCwtMV0sWy0xLC0xLGhdLFtwLGYsLTFdLFstMSwtMSxwXV19fShyLG4pO2w9dS54eXp2LGM9dS5hYmN9Zm9yKHZhciBmPTA7ZjxsLmxlbmd0aDtmKyspe3I9bFtmXSxuPWNbZl07Zm9yKHZhciBoPVtdLHA9MDtwPDM7cCsrKXt2YXIgZD1yW3BdWzBdLG09cltwXVsxXSx2PXJbcF1bMl0seT1yW3BdWzNdLHg9bltwXT4tMT9uW3BdOkwoZCxtLHYpO2hbcF09eD4tMT94OkkoZCxtLHYsUihlLHkpKX1pPWhbMF0sYT1oWzFdLG89aFsyXSx0Ll9tZXNoSS5wdXNoKGkpLHQuX21lc2hKLnB1c2goYSksdC5fbWVzaEsucHVzaChvKSwrK2d9fWZ1bmN0aW9uIEIodCxlLHIsbil7dmFyIGk9dFszXTtpPHImJihpPXIpLGk+biYmKGk9bik7Zm9yKHZhciBhPSh0WzNdLWkpLyh0WzNdLWVbM10rMWUtOSksbz1bXSxzPTA7czw0O3MrKylvW3NdPSgxLWEpKnRbc10rYSplW3NdO3JldHVybiBvfWZ1bmN0aW9uIE4odCxlLHIpe3JldHVybiB0Pj1lJiZ0PD1yfWZ1bmN0aW9uIGoodCl7dmFyIGU9LjAwMSooRS1TKTtyZXR1cm4gdD49Uy1lJiZ0PD1FK2V9ZnVuY3Rpb24gVShlKXtmb3IodmFyIHI9W10sbj0wO248NDtuKyspe3ZhciBpPWVbbl07ci5wdXNoKFt0Ll94W2ldLHQuX3lbaV0sdC5feltpXSx0Ll92YWx1ZVtpXV0pfXJldHVybiByfWZ1bmN0aW9uIFYodCxlLHIsbixpLGEpe2F8fChhPTEpLHI9Wy0xLC0xLC0xXTt2YXIgbz0hMSxzPVtOKGVbMF1bM10sbixpKSxOKGVbMV1bM10sbixpKSxOKGVbMl1bM10sbixpKV07aWYoIXNbMF0mJiFzWzFdJiYhc1syXSlyZXR1cm4hMTt2YXIgbD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGooZVswXVszXSkmJmooZVsxXVszXSkmJmooZVsyXVszXSk/KEYodCxlLHIpLCEwKTphPDMmJlYodCxlLHIsUyxFLCsrYSl9O2lmKHNbMF0mJnNbMV0mJnNbMl0pcmV0dXJuIGwodCxlLHIpfHxvO3ZhciBjPSExO3JldHVybltbMCwxLDJdLFsyLDAsMV0sWzEsMiwwXV0uZm9yRWFjaCgoZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0sZj1lW2FbMV1dLGg9ZVthWzJdXSxwPUIoaCx1LG4saSksZD1CKGgsZixuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxvPWwodCxbdSxmLGRdLFtyW2FbMF1dLHJbYVsxXV0sLTFdKXx8byxjPSEwfX0pKSxjfHxbWzAsMSwyXSxbMSwyLDBdLFsyLDAsMV1dLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJiFzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxmPWVbYVsxXV0saD1lW2FbMl1dLHA9QihmLHUsbixpKSxkPUIoaCx1LG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLGM9ITB9fSkpLG99ZnVuY3Rpb24gSCh0LGUscixuKXt2YXIgaT0hMSxhPVUoZSksbz1bTihhWzBdWzNdLHIsbiksTihhWzFdWzNdLHIsbiksTihhWzJdWzNdLHIsbiksTihhWzNdWzNdLHIsbildO2lmKCEob1swXXx8b1sxXXx8b1syXXx8b1szXSkpcmV0dXJuIGk7aWYob1swXSYmb1sxXSYmb1syXSYmb1szXSlyZXR1cm4gbSYmKGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtGKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigzLDAsMSksbigyLDMsMCksbigxLDIsMyl9KHQsYSxlKXx8aSksaTt2YXIgcz0hMTtyZXR1cm5bWzAsMSwyLDNdLFszLDAsMSwyXSxbMiwzLDAsMV0sWzEsMiwzLDBdXS5mb3JFYWNoKChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiZvW2xbMV1dJiZvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSx1PWFbbFsxXV0sZj1hW2xbMl1dLGg9YVtsWzNdXTtpZihtKWk9Rih0LFtjLHUsZl0sW2VbbFswXV0sZVtsWzFdXSxlW2xbMl1dXSl8fGk7ZWxzZXt2YXIgcD1CKGgsYyxyLG4pLGQ9QihoLHUscixuKSxnPUIoaCxmLHIsbik7aT1GKG51bGwsW3AsZCxnXSxbLTEsLTEsLTFdKXx8aX1zPSEwfX0pKSxzP2k6KFtbMCwxLDIsM10sWzEsMiwzLDBdLFsyLDMsMCwxXSxbMywwLDEsMl0sWzAsMiwzLDFdLFsxLDMsMiwwXV0uZm9yRWFjaCgoZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLHU9YVtsWzFdXSxmPWFbbFsyXV0saD1hW2xbM11dLHA9QihmLGMscixuKSxkPUIoZix1LHIsbiksZz1CKGgsdSxyLG4pLHY9QihoLGMscixuKTttPyhpPUYodCxbYyx2LHBdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW3UsZCxnXSxbZVtsWzFdXSwtMSwtMV0pfHxpKTppPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Rih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMiwzLDApfShudWxsLFtwLGQsZyx2XSxbLTEsLTEsLTEsLTFdKXx8aSxzPSEwfX0pKSxzfHxbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdXS5mb3JFYWNoKChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiYhb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLHU9YVtsWzFdXSxmPWFbbFsyXV0saD1hW2xbM11dLHA9Qih1LGMscixuKSxkPUIoZixjLHIsbiksZz1CKGgsYyxyLG4pO20/KGk9Rih0LFtjLHAsZF0sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbYyxkLGddLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW2MsZyxwXSxbZVtsWzBdXSwtMSwtMV0pfHxpKTppPUYobnVsbCxbcCxkLGddLFstMSwtMSwtMV0pfHxpLHM9ITB9fSkpLGkpfWZ1bmN0aW9uIHEodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj0hMTtyZXR1cm4gZCYmKEQodCwiQSIpJiYoZj1IKG51bGwsW2UscixuLGFdLGMsdSl8fGYpLEQodCwiQiIpJiYoZj1IKG51bGwsW3IsbixpLGxdLGMsdSl8fGYpLEQodCwiQyIpJiYoZj1IKG51bGwsW3IsYSxvLGxdLGMsdSl8fGYpLEQodCwiRCIpJiYoZj1IKG51bGwsW24sYSxzLGxdLGMsdSl8fGYpLEQodCwiRSIpJiYoZj1IKG51bGwsW3IsbixhLGxdLGMsdSl8fGYpKSxtJiYoZj1IKHQsW3IsbixhLGxdLGMsdSl8fGYpLGZ9ZnVuY3Rpb24gRyh0LGUscixuLGksYSxvLHMpe3JldHVyblshMD09PXNbMF18fFYodCxVKFtlLHIsbl0pLFtlLHIsbl0sYSxvKSwhMD09PXNbMV18fFYodCxVKFtuLGksZV0pLFtuLGksZV0sYSxvKV19ZnVuY3Rpb24gWSh0LGUscixuLGksYSxvLHMsbCl7cmV0dXJuIHM/Ryh0LGUscixpLG4sYSxvLGwpOkcodCxyLGksbixlLGEsbyxsKX1mdW5jdGlvbiBXKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGY9ITEsaD1mdW5jdGlvbigpe2Y9Vih0LFtzLGwsY10sWy0xLC0xLC0xXSxpLGEpfHxmLGY9Vih0LFtjLHUsc10sWy0xLC0xLC0xXSxpLGEpfHxmfSxwPW9bMF0sZD1vWzFdLG09b1syXTtyZXR1cm4gcCYmKHM9TyhVKFtrKGUsci0wLG4tMCldKVswXSxVKFtrKGUtMSxyLTAsbi0wKV0pWzBdLHApLGw9TyhVKFtrKGUsci0wLG4tMSldKVswXSxVKFtrKGUtMSxyLTAsbi0xKV0pWzBdLHApLGM9TyhVKFtrKGUsci0xLG4tMSldKVswXSxVKFtrKGUtMSxyLTEsbi0xKV0pWzBdLHApLHU9TyhVKFtrKGUsci0xLG4tMCldKVswXSxVKFtrKGUtMSxyLTEsbi0wKV0pWzBdLHApLGgoKSksZCYmKHM9TyhVKFtrKGUtMCxyLG4tMCldKVswXSxVKFtrKGUtMCxyLTEsbi0wKV0pWzBdLGQpLGw9TyhVKFtrKGUtMCxyLG4tMSldKVswXSxVKFtrKGUtMCxyLTEsbi0xKV0pWzBdLGQpLGM9TyhVKFtrKGUtMSxyLG4tMSldKVswXSxVKFtrKGUtMSxyLTEsbi0xKV0pWzBdLGQpLHU9TyhVKFtrKGUtMSxyLG4tMCldKVswXSxVKFtrKGUtMSxyLTEsbi0wKV0pWzBdLGQpLGgoKSksbSYmKHM9TyhVKFtrKGUtMCxyLTAsbildKVswXSxVKFtrKGUtMCxyLTAsbi0xKV0pWzBdLG0pLGw9TyhVKFtrKGUtMCxyLTEsbildKVswXSxVKFtrKGUtMCxyLTEsbi0xKV0pWzBdLG0pLGM9TyhVKFtrKGUtMSxyLTEsbildKVswXSxVKFtrKGUtMSxyLTEsbi0xKV0pWzBdLG0pLHU9TyhVKFtrKGUtMSxyLTAsbildKVswXSxVKFtrKGUtMSxyLTAsbi0xKV0pWzBdLG0pLGgoKSksZn1mdW5jdGlvbiBYKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXt2YXIgaD10O3JldHVybiBmPyhkJiYiZXZlbiI9PT10JiYoaD1udWxsKSxxKGgsZSxyLG4saSxhLG8scyxsLGMsdSkpOihkJiYib2RkIj09PXQmJihoPW51bGwpLHEoaCxsLHMsbyxhLGksbixyLGUsYyx1KSl9ZnVuY3Rpb24gWih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPHc7YysrKWZvcih2YXIgdT0xO3U8Xzt1KyspYS5wdXNoKFkodCxrKGwsdS0xLGMtMSksayhsLHUtMSxjKSxrKGwsdSxjLTEpLGsobCx1LGMpLHIsbiwobCt1K2MpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxiO2MrKylmb3IodmFyIHU9MTt1PHc7dSsrKWEucHVzaChZKHQsayhjLTEsbCx1LTEpLGsoYyxsLHUtMSksayhjLTEsbCx1KSxrKGMsbCx1KSxyLG4sKGMrbCt1KSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBLKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8XztjKyspZm9yKHZhciB1PTE7dTxiO3UrKylhLnB1c2goWSh0LGsodS0xLGMtMSxsKSxrKHUtMSxjLGwpLGsodSxjLTEsbCksayh1LGMsbCkscixuLCh1K2MrbCklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gUSh0LGUscil7Zm9yKHZhciBuPTE7bjx3O24rKylmb3IodmFyIGk9MTtpPF87aSsrKWZvcih2YXIgYT0xO2E8YjthKyspWCh0LGsoYS0xLGktMSxuLTEpLGsoYS0xLGktMSxuKSxrKGEtMSxpLG4tMSksayhhLTEsaSxuKSxrKGEsaS0xLG4tMSksayhhLGktMSxuKSxrKGEsaSxuLTEpLGsoYSxpLG4pLGUsciwoYStpK24pJTIpfWZ1bmN0aW9uICQodCxlLHIpe2Q9ITAsUSh0LGUsciksZD0hMX1mdW5jdGlvbiB0dCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8dzt1KyspZm9yKHZhciBmPTE7ZjxfO2YrKylvLnB1c2goVyh0LGMsZix1LHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gZXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PGI7dSsrKWZvcih2YXIgZj0xO2Y8dztmKyspby5wdXNoKFcodCx1LGMsZixyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIHJ0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxfO3UrKylmb3IodmFyIGY9MTtmPGI7ZisrKW8ucHVzaChXKHQsZix1LGMscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgcj1bXSxuPXQ7bjxlO24rKylyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIGZ1bmN0aW9uKCl7aWYoUCgpLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxiO2UrKylmb3IodmFyIHI9MDtyPF87cisrKWZvcih2YXIgbj0wO248dztuKyspe3ZhciBpPWsoZSxyLG4pO0kodC5feFtpXSx0Ll95W2ldLHQuX3pbaV0sdC5fdmFsdWVbaV0pfX0oKSx1JiZwJiYoeihwKSxtPSEwLFEobnVsbCxTLEUpLG09ITEpLGMmJmgpe3ooaCk7Zm9yKHZhciBlPXQuc3VyZmFjZS5wYXR0ZXJuLHI9dC5zdXJmYWNlLmNvdW50LHM9MDtzPHI7cysrKXt2YXIgZj0xPT09cj8uNTpzLyhyLTEpLGQ9KDEtZikqUytmKkUsVD1NYXRoLmFicyhkLUEpPk1hdGguYWJzKGQtTSk/W0EsZF06W2QsTV07JChlLFRbMF0sVFsxXSl9fXZhciBMPVtbTWF0aC5taW4oUyxNKSxNYXRoLm1heChTLE0pXSxbTWF0aC5taW4oQSxFKSxNYXRoLm1heChBLEUpXV07WyJ4IiwieSIsInoiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtmb3IodmFyIHI9W10sbj0wO248TC5sZW5ndGg7bisrKXt2YXIgaT0wLGE9TFtuXVswXSxvPUxbbl1bMV0scz10LnNsaWNlc1tlXTtpZihzLnNob3cmJnMuZmlsbCl7eihzLmZpbGwpO3ZhciBjPVtdLHU9W10sZj1bXTtpZihzLmxvY2F0aW9ucy5sZW5ndGgpZm9yKHZhciBoPTA7aDxzLmxvY2F0aW9ucy5sZW5ndGg7aCsrKXt2YXIgcD1sKHMubG9jYXRpb25zW2hdLCJ4Ij09PWU/djoieSI9PT1lP3k6eCk7MD09PXAuZGlzdFJhdGlvP2MucHVzaChwLmlkKTpwLmlkPjAmJih1LnB1c2gocC5pZCksIngiPT09ZT9mLnB1c2goW3AuZGlzdFJhdGlvLDAsMF0pOiJ5Ij09PWU/Zi5wdXNoKFswLHAuZGlzdFJhdGlvLDBdKTpmLnB1c2goWzAsMCxwLmRpc3RSYXRpb10pKX1lbHNlIGM9bnQoMSwieCI9PT1lP2ItMToieSI9PT1lP18tMTp3LTEpO3UubGVuZ3RoPjAmJihyW2ldPSJ4Ij09PWU/dHQobnVsbCx1LGEsbyxmLHJbaV0pOiJ5Ij09PWU/ZXQobnVsbCx1LGEsbyxmLHJbaV0pOnJ0KG51bGwsdSxhLG8sZixyW2ldKSxpKyspLGMubGVuZ3RoPjAmJihyW2ldPSJ4Ij09PWU/WihudWxsLGMsYSxvLHJbaV0pOiJ5Ij09PWU/SihudWxsLGMsYSxvLHJbaV0pOksobnVsbCxjLGEsbyxyW2ldKSxpKyspfXZhciBkPXQuY2Fwc1tlXTtkLnNob3cmJmQuZmlsbCYmKHooZC5maWxsKSxyW2ldPSJ4Ij09PWU/WihudWxsLFswLGItMV0sYSxvLHJbaV0pOiJ5Ij09PWU/SihudWxsLFswLF8tMV0sYSxvLHJbaV0pOksobnVsbCxbMCx3LTFdLGEsbyxyW2ldKSxpKyspfX0pKSwwPT09ZyYmUCgpLHQuX21lc2hYPW4sdC5fbWVzaFk9aSx0Ll9tZXNoWj1hLHQuX21lc2hJbnRlbnNpdHk9byx0Ll9Ycz12LHQuX1lzPXksdC5fWnM9eH0oKSx0fWUuZXhwb3J0cz17ZmluZE5lYXJlc3RPbkF4aXM6bCxnZW5lcmF0ZUlzb01lc2hlczpoLGNyZWF0ZUlzb3N1cmZhY2VUcmFjZTpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IGModCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19fSx7Ii4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyI6MTEyMCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5OSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NTI4LCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjYwOX1dLDg2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2Z1bmN0aW9uIHModCxlLHIsbixhKXt2YXIgcz1hKCJpc29taW4iKSxsPWEoImlzb21heCIpO251bGwhPWwmJm51bGwhPXMmJnM+bCYmKGUuaXNvbWluPW51bGwsZS5pc29tYXg9bnVsbCk7dmFyIGM9YSgieCIpLHU9YSgieSIpLGY9YSgieiIpLGg9YSgidmFsdWUiKTtjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aD8oaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxuKSxhKCJ2YWx1ZWhvdmVyZm9ybWF0IiksWyJ4IiwieSIsInoiXS5mb3JFYWNoKChmdW5jdGlvbih0KXthKHQrImhvdmVyZm9ybWF0Iik7dmFyIGU9ImNhcHMuIit0O2EoZSsiLnNob3ciKSYmYShlKyIuZmlsbCIpO3ZhciByPSJzbGljZXMuIit0O2EocisiLnNob3ciKSYmKGEocisiLmZpbGwiKSxhKHIrIi5sb2NhdGlvbnMiKSl9KSksYSgic3BhY2VmcmFtZS5zaG93IikmJmEoInNwYWNlZnJhbWUuZmlsbCIpLGEoInN1cmZhY2Uuc2hvdyIpJiYoYSgic3VyZmFjZS5jb3VudCIpLGEoInN1cmZhY2UuZmlsbCIpLGEoInN1cmZhY2UucGF0dGVybiIpKSxhKCJjb250b3VyLnNob3ciKSYmKGEoImNvbnRvdXIuY29sb3IiKSxhKCJjb250b3VyLndpZHRoIikpLFsidGV4dCIsImhvdmVydGV4dCIsImhvdmVydGVtcGxhdGUiLCJsaWdodGluZy5hbWJpZW50IiwibGlnaHRpbmcuZGlmZnVzZSIsImxpZ2h0aW5nLnNwZWN1bGFyIiwibGlnaHRpbmcucm91Z2huZXNzIiwibGlnaHRpbmcuZnJlc25lbCIsImxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uIiwibGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uIiwibGlnaHRwb3NpdGlvbi54IiwibGlnaHRwb3NpdGlvbi55IiwibGlnaHRwb3NpdGlvbi56IiwiZmxhdHNoYWRpbmciLCJvcGFjaXR5Il0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YSh0KX0pKSxvKHQsZSxuLGEse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtzKHQsZSxyLGksKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9KSl9LHN1cHBseUlzb0RlZmF1bHRzOnN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6Mzc2LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9hdHRyaWJ1dGVzIjo4NjJ9XSw4NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjYWxjOnQoIi4vY2FsYyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LHBsb3Q6dCgiLi9jb252ZXJ0IikuY3JlYXRlSXNvc3VyZmFjZVRyYWNlLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpc29zdXJmYWNlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6NTk4LCIuL2F0dHJpYnV0ZXMiOjg2MiwiLi9jYWxjIjo4NjMsIi4vY29udmVydCI6ODY0LCIuL2RlZmF1bHRzIjo4NjV9XSw4Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL3N1cmZhY2UvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWwoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sajp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxrOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6IiksZGVsYXVuYXlheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsInoiXSxkZmx0OiJ6IixlZGl0VHlwZToiY2FsYyJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xLGVkaXRUeXBlOiJjYWxjIn0saW50ZW5zaXR5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGludGVuc2l0eW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInZlcnRleCIsImNlbGwiXSxkZmx0OiJ2ZXJ0ZXgiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHZlcnRleGNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOnZvaWQgMH0sbigiIix7Y29sb3JBdHRyOiJgaW50ZW5zaXR5YCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXI6e3Nob3c6bCh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0cG9zaXRpb246e3g6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Omwoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpsKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0aW5nOmwoe3ZlcnRleG5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6ImNhbGMifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS02LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvLmxpZ2h0aW5nKSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMifSksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMDU3fV0sODY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5pbnRlbnNpdHkmJm4odCxlLHt2YWxzOmUuaW50ZW5zaXR5LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6Mzc0fV0sODY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX21lc2gzZCxpPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmRlbGF1bmF5X3RyaWFuZ3VsYXRlLGE9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuYWxwaGFfc2hhcGUsbz10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5jb252ZXhfaHVsbCxzPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyx1PXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIGYodCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMubWVzaD1lLHRoaXMubmFtZT0iIix0aGlzLmNvbG9yPSIjZmZmIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciBoPWYucHJvdG90eXBlO2Z1bmN0aW9uIHAodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspZVtuXT1sKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIsbil7Zm9yKHZhciBpPVtdLGE9ZS5sZW5ndGgsbz0wO288YTtvKyspaVtvXT10LmQybChlW29dLDAsbikqcjtyZXR1cm4gaX1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09TWF0aC5yb3VuZCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKHRbbl08PS0uNXx8dFtuXT49ZS0uNSlyZXR1cm4hMTtyZXR1cm4hMH1oLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3QuZGF0YS5fY2VsbENlbnRlcj90LnRyYWNlQ29vcmRpbmF0ZT10LmRhdGEuZGF0YUNvb3JkaW5hdGU6dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXTt2YXIgcj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmdm9pZCAwIT09cltlXT90LnRleHRMYWJlbD1yW2VdOnImJih0LnRleHRMYWJlbD1yKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDt0aGlzLmRhdGE9dDt2YXIgbixmPXQueC5sZW5ndGgsaD11KGQoci54YXhpcyx0LngsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLGQoci55YXhpcyx0LnksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLGQoci56YXhpcyx0LnosZS5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKTtpZih0LmkmJnQuaiYmdC5rKXtpZih0LmkubGVuZ3RoIT09dC5qLmxlbmd0aHx8dC5qLmxlbmd0aCE9PXQuay5sZW5ndGh8fCFnKHQuaSxmKXx8IWcodC5qLGYpfHwhZyh0LmssZikpcmV0dXJuO249dShtKHQuaSksbSh0LmopLG0odC5rKSl9ZWxzZSBuPTA9PT10LmFscGhhaHVsbD9vKGgpOnQuYWxwaGFodWxsPjA/YSh0LmFscGhhaHVsbCxoKTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bIngiLCJ5IiwieiJdLmluZGV4T2YodCksbj1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKW5bb109W2Vbb11bKHIrMSklM10sZVtvXVsocisyKSUzXV07cmV0dXJuIGkobil9KHQuZGVsYXVuYXlheGlzLGgpO3ZhciB2PXtwb3NpdGlvbnM6aCxjZWxsczpuLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjpsKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTtpZih0LmludGVuc2l0eSl7dmFyIHk9Yyh0KTt0aGlzLmNvbG9yPSIjZmZmIjt2YXIgeD10LmludGVuc2l0eW1vZGU7dlt4KyJJbnRlbnNpdHkiXT10LmludGVuc2l0eSx2W3grIkludGVuc2l0eUJvdW5kcyJdPVt5Lm1pbix5Lm1heF0sdi5jb2xvcm1hcD1zKHQpfWVsc2UgdC52ZXJ0ZXhjb2xvcj8odGhpcy5jb2xvcj10LnZlcnRleGNvbG9yWzBdLHYudmVydGV4Q29sb3JzPXAodC52ZXJ0ZXhjb2xvcikpOnQuZmFjZWNvbG9yPyh0aGlzLmNvbG9yPXQuZmFjZWNvbG9yWzBdLHYuY2VsbENvbG9ycz1wKHQuZmFjZWNvbG9yKSk6KHRoaXMuY29sb3I9dC5jb2xvcix2Lm1lc2hDb2xvcj1sKHQuY29sb3IpKTt0aGlzLm1lc2gudXBkYXRlKHYpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBmKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyI6MTEyMCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5OSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NTI4LCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjYwOX1dLDg3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9bCh0KTtyZXR1cm4gZSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpP2U6bnVsbH0pKTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSkmJmV9YyhbIngiLCJ5IiwieiJdKT8oYyhbImkiLCJqIiwiayJdKSwoIWUuaXx8ZS5qJiZlLmspJiYoIWUuanx8ZS5rJiZlLmkpJiYoIWUua3x8ZS5pJiZlLmopPyhuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLHMpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbiIsImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbiIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImZsYXRzaGFkaW5nIiwiYWxwaGFodWxsIiwiZGVsYXVuYXlheGlzIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2wodCl9KSksbCgiY29udG91ci5zaG93IikmJihsKCJjb250b3VyLmNvbG9yIiksbCgiY29udG91ci53aWR0aCIpKSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGwoImludGVuc2l0eW1vZGUiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pKTooZS5zaG93c2NhbGU9ITEsImZhY2Vjb2xvciJpbiB0P2woImZhY2Vjb2xvciIpOiJ2ZXJ0ZXhjb2xvciJpbiB0P2woInZlcnRleGNvbG9yIik6bCgiY29sb3IiLHIpKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGwoInhob3ZlcmZvcm1hdCIpLGwoInlob3ZlcmZvcm1hdCIpLGwoInpob3ZlcmZvcm1hdCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITEpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjozNzYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuL2F0dHJpYnV0ZXMiOjg2N31dLDg3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0scGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToibWVzaDNkIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6NTk4LCIuL2F0dHJpYnV0ZXMiOjg2NywiLi9jYWxjIjo4NjgsIi4vY29udmVydCI6ODY5LCIuL2RlZmF1bHRzIjo4NzB9XSw4NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGM9bC5JTkNSRUFTSU5HLkNPTE9SLHU9bC5ERUNSRUFTSU5HLkNPTE9SLGY9aS5saW5lO2Z1bmN0aW9uIGgodCl7cmV0dXJue2xpbmU6e2NvbG9yOm4oe30sZi5jb2xvcix7ZGZsdDp0fSksd2lkdGg6Zi53aWR0aCxkYXNoOm8sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4cGVyaW9kOmkueHBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG9wZW46e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saGlnaDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb3c6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY2xvc2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7d2lkdGg6bih7fSxmLndpZHRoLHt9KSxkYXNoOm4oe30sbyx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpoKGMpLGRlY3JlYXNpbmc6aCh1KSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4Oi41LGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmxhYmVsOm4oe30scy5ob3ZlcmxhYmVsLHtzcGxpdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToic3R5bGUifX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6Mzg3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjM5NywiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo0NzMsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyNn1dLDg3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPW4uXyxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJue286dCxoOmUsbDpyLGM6bn19ZnVuY3Rpb24gYyh0LGUscixvLGwsYyl7Zm9yKHZhciB1PWwubWFrZUNhbGNkYXRhKGUsIm9wZW4iKSxmPWwubWFrZUNhbGNkYXRhKGUsImhpZ2giKSxoPWwubWFrZUNhbGNkYXRhKGUsImxvdyIpLHA9bC5tYWtlQ2FsY2RhdGEoZSwiY2xvc2UiKSxkPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxtPUFycmF5LmlzQXJyYXkoZS5ob3ZlcnRleHQpLGc9ITAsdj1udWxsLHk9ISFlLnhwZXJpb2RhbGlnbm1lbnQseD1bXSxiPTA7YjxvLmxlbmd0aDtiKyspe3ZhciBfPW9bYl0sdz11W2JdLFQ9ZltiXSxrPWhbYl0sQT1wW2JdO2lmKF8hPT1zJiZ3IT09cyYmVCE9PXMmJmshPT1zJiZBIT09cyl7QT09PXc/bnVsbCE9PXYmJkEhPT12JiYoZz1BPnYpOmc9QT53LHY9QTt2YXIgTT1jKHcsVCxrLEEpO00ucG9zPV8sTS55Yz0odytBKS8yLE0uaT1iLE0uZGlyPWc/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIixNLng9TS5wb3MsTS55PVtrLFRdLHkmJihNLm9yaWdfcD1yW2JdKSxkJiYoTS50eD1lLnRleHRbYl0pLG0mJihNLmh0eD1lLmhvdmVydGV4dFtiXSkseC5wdXNoKE0pfWVsc2UgeC5wdXNoKHtwb3M6XyxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tsLl9pZF09YS5maW5kRXh0cmVtZXMobCxuLmNvbmNhdChoLGYpLHtwYWRkZWQ6ITB9KSx4Lmxlbmd0aCYmKHhbMF0udD17bGFiZWxzOntvcGVuOmkodCwib3BlbjoiKSsiICIsaGlnaDppKHQsImhpZ2g6IikrIiAiLGxvdzppKHQsImxvdzoiKSsiICIsY2xvc2U6aSh0LCJjbG9zZToiKSsiICJ9fSkseH1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxzPXQuX2Z1bGxEYXRhLGw9W107Zm9yKGk9MS8wLGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXTtpZigib2hsYyI9PT1jLnR5cGUmJiEwPT09Yy52aXNpYmxlJiZjLnhheGlzPT09ZS5faWQpe2wucHVzaChjKTt2YXIgdT1lLm1ha2VDYWxjZGF0YShjLCJ4Iik7Yy5fb3JpZ1g9dTt2YXIgZj1vKHIsZSwieCIsdSkudmFscztjLl94Y2FsYz1mO3ZhciBoPW4uZGlzdGluY3RWYWxzKGYpLm1pbkRpZmY7aCYmaXNGaW5pdGUoaCkmJihpPU1hdGgubWluKGksaCkpfX1mb3IoaT09PTEvMCYmKGk9MSksYT0wO2E8bC5sZW5ndGg7YSsrKWxbYV0uX21pbkRpZmY9aX1yZXR1cm4gaSpyLnRpY2t3aWR0aH0odCxyLGUpLHU9ZS5fbWluRGlmZjtlLl9taW5EaWZmPW51bGw7dmFyIGY9ZS5fb3JpZ1g7ZS5fb3JpZ1g9bnVsbDt2YXIgaD1lLl94Y2FsYztlLl94Y2FsYz1udWxsO3ZhciBwPWModCxlLGYsaCxpLGwpO3JldHVybiBlLl9leHRyZW1lc1tyLl9pZF09YS5maW5kRXh0cmVtZXMocixoLHt2cGFkOnUvMn0pLHAubGVuZ3RoPyhuLmV4dGVuZEZsYXQocFswXS50LHt3SG92ZXI6dS8yLHRpY2tMZW46c30pLHApOlt7dDp7ZW1wdHk6ITB9fV19LGNhbGNDb21tb246Y319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6NTUxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sODc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9vaGxjX2RlZmF1bHRzIiksYT10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKG4rIi5saW5lLmNvbG9yIikscihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5saW5lLmRhc2giLGUubGluZS5kYXNoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLGMsbCk/KGEodCxlLGwsYyx7eDohMH0pLGMoInhob3ZlcmZvcm1hdCIpLGMoInlob3ZlcmZvcm1hdCIpLGMoImxpbmUud2lkdGgiKSxjKCJsaW5lLmRhc2giKSxzKHQsZSxjLCJpbmNyZWFzaW5nIikscyh0LGUsYywiZGVjcmVhc2luZyIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJ0aWNrd2lkdGgiKSxsLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjo5NDYsIi4vYXR0cmlidXRlcyI6ODcyLCIuL29obGNfZGVmYXVsdHMiOjg3N31dLDg3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9saWIiKS5maWxsVGV4dCxsPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGM9e2luY3JlYXNpbmc6bC5JTkNSRUFTSU5HLlNZTUJPTCxkZWNyZWFzaW5nOmwuREVDUkVBU0lORy5TWU1CT0x9O2Z1bmN0aW9uIHUodCxlLHIsbil7dmFyIGkscyxsPXQuY2QsYz10LnhhLHU9bFswXS50cmFjZSxmPWxbMF0udCxoPXUudHlwZSxwPSJvaGxjIj09PWg/ImwiOiJtaW4iLGQ9Im9obGMiPT09aD8iaCI6Im1heCIsbT1mLmJQb3N8fDAsZz1mLmJkUG9zfHxmLnRpY2tMZW4sdj1mLndIb3Zlcix5PU1hdGgubWluKDEsZy9NYXRoLmFicyhjLnIyYyhjLnJhbmdlWzFdKS1jLnIyYyhjLnJhbmdlWzBdKSkpO2Z1bmN0aW9uIHgodCl7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zK20tZX0odCk7cmV0dXJuIGEuaW5ib3goci12LHIrdixpKX1mdW5jdGlvbiBiKHQpe3ZhciBlPXRbcF0sbj10W2RdO3JldHVybiBlPT09bnx8YS5pbmJveChlLXIsbi1yLGkpfWZ1bmN0aW9uIF8odCl7cmV0dXJuKHgodCkrYih0KSkvMn1pPXQubWF4SG92ZXJEaXN0YW5jZS15LHM9dC5tYXhTcGlrZURpc3RhbmNlLXk7dmFyIHc9YS5nZXREaXN0YW5jZUZ1bmN0aW9uKG4seCxiLF8pO2lmKGEuZ2V0Q2xvc2VzdChsLHcsdCksITE9PT10LmluZGV4KXJldHVybiBudWxsO3ZhciBUPWxbdC5pbmRleF07aWYoVC5lbXB0eSlyZXR1cm4gbnVsbDt2YXIgaz11W1QuZGlyXSxBPWsubGluZS5jb2xvcjtyZXR1cm4gby5vcGFjaXR5KEEpJiZrLmxpbmUud2lkdGg/dC5jb2xvcj1BOnQuY29sb3I9ay5maWxsY29sb3IsdC54MD1jLmMycChULnBvcyttLWcsITApLHQueDE9Yy5jMnAoVC5wb3MrbStnLCEwKSx0LnhMYWJlbFZhbD12b2lkIDAhPT1ULm9yaWdfcD9ULm9yaWdfcDpULnBvcyx0LnNwaWtlRGlzdGFuY2U9XyhUKSpzL2ksdC54U3Bpa2U9Yy5jMnAoVC5wb3MsITApLHR9ZnVuY3Rpb24gZih0LGUscixhKXt2YXIgbz10LmNkLHM9dC55YSxsPW9bMF0udHJhY2UsYz1vWzBdLnQsZj1bXSxoPXUodCxlLHIsYSk7aWYoIWgpcmV0dXJuW107dmFyIHA9b1toLmluZGV4XS5oaXx8bC5ob3ZlcmluZm8sZD1wLnNwbGl0KCIrIik7aWYoISgiYWxsIj09PXB8fC0xIT09ZC5pbmRleE9mKCJ5IikpKXJldHVybltdO2Zvcih2YXIgbT1bImhpZ2giLCJvcGVuIiwiY2xvc2UiLCJsb3ciXSxnPXt9LHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIHkseD1tW3ZdLGI9bFt4XVtoLmluZGV4XSxfPXMuYzJwKGIsITApO2IgaW4gZz8oeT1nW2JdKS55TGFiZWwrPSI8YnI+IitjLmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYixsLnlob3ZlcmZvcm1hdCk6KCh5PWkuZXh0ZW5kRmxhdCh7fSxoKSkueTA9eS55MT1fLHkueUxhYmVsVmFsPWIseS55TGFiZWw9Yy5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIsbC55aG92ZXJmb3JtYXQpLHkubmFtZT0iIixmLnB1c2goeSksZ1tiXT15KX1yZXR1cm4gZn1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBhPXQuY2Qsbz10LnlhLGw9YVswXS50cmFjZSxmPWFbMF0udCxoPXUodCxlLHIsaSk7aWYoIWgpcmV0dXJuW107dmFyIHA9YVtoLmluZGV4XSxkPWguaW5kZXg9cC5pLG09cC5kaXI7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZi5sYWJlbHNbdF0rbi5ob3ZlckxhYmVsVGV4dChvLGxbdF1bZF0sbC55aG92ZXJmb3JtYXQpfXZhciB2PXAuaGl8fGwuaG92ZXJpbmZvLHk9di5zcGxpdCgiKyIpLHg9ImFsbCI9PT12LGI9eHx8LTEhPT15LmluZGV4T2YoInkiKSxfPXh8fC0xIT09eS5pbmRleE9mKCJ0ZXh0Iiksdz1iP1tnKCJvcGVuIiksZygiaGlnaCIpLGcoImxvdyIpLGcoImNsb3NlIikrIiAgIitjW21dXTpbXTtyZXR1cm4gXyYmcyhwLGwsdyksaC5leHRyYVRleHQ9dy5qb2luKCI8YnI+IiksaC55MD1oLnkxPW8uYzJwKHAueWMsITApLFtoXX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmNkWzBdLnRyYWNlLmhvdmVybGFiZWwuc3BsaXQ/Zih0LGUscixuKTpoKHQsZSxyLG4pfSxob3ZlclNwbGl0OmYsaG92ZXJPblBvaW50czpofX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo0NzMsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sODc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Im9obGMiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi9hdHRyaWJ1dGVzIjo4NzIsIi4vY2FsYyI6ODczLCIuL2RlZmF1bHRzIjo4NzQsIi4vaG92ZXIiOjg3NSwiLi9wbG90Ijo4NzgsIi4vc2VsZWN0Ijo4NzksIi4vc3R5bGUiOjg4MH1dLDg3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoIngiKSxzPXIoIm9wZW4iKSxsPXIoImhpZ2giKSxjPXIoImxvdyIpLHU9cigiY2xvc2UiKTtpZihyKCJob3ZlcmxhYmVsLnNwbGl0Iiksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4Il0sYSkscyYmbCYmYyYmdSl7dmFyIGY9TWF0aC5taW4ocy5sZW5ndGgsbC5sZW5ndGgsYy5sZW5ndGgsdS5sZW5ndGgpO3JldHVybiBvJiYoZj1NYXRoLm1pbihmLGkubWluUm93TGVuZ3RoKG8pKSksZS5fbGVuZ3RoPWYsZn19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4fV0sODc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnlheGlzLHM9ZS54YXhpcyxsPSEhcy5yYW5nZWJyZWFrcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIG9obGMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0sYT1yLnQ7aWYoITAhPT1yLnRyYWNlLnZpc2libGV8fGEuZW1wdHkpZS5yZW1vdmUoKTtlbHNle3ZhciBjPWEudGlja0xlbix1PWUuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpLmlkZW50aXR5KTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdS5leGl0KCkucmVtb3ZlKCksdS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm4iTTAsMFoiO3ZhciBlPXMuYzJwKHQucG9zLWMsITApLHI9cy5jMnAodC5wb3MrYywhMCksbj1sPyhlK3IpLzI6cy5jMnAodC5wb3MsITApO3JldHVybiJNIitlKyIsIitvLmMycCh0Lm8sITApKyJIIituKyJNIituKyIsIitvLmMycCh0LmgsITApKyJWIitvLmMycCh0LmwsITApKyJNIityKyIsIitvLmMycCh0LmMsITApKyJIIitufSkpfX0pKX19LHsiLi4vLi4vbGliIjo1MDMsIkBwbG90bHkvZDMiOjU4fV0sODc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxpPXQueGF4aXMsYT10LnlheGlzLG89W10scz1uWzBdLnQuYlBvc3x8MDtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbD1uW3JdO2UuY29udGFpbnMoW2kuYzJwKGwucG9zK3MpLGEuYzJwKGwueWMpXSxudWxsLGwuaSx0KT8oby5wdXNoKHtwb2ludE51bWJlcjpsLmkseDppLmMyZChsLnBvcykseTphLmMyZChsLnljKX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDg4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXJ8fG4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5vaGxjbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtvLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuZW1wdHkpe3ZhciByPWVbdC5kaXJdLmxpbmU7bi5zZWxlY3QodGhpcykuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsci5kYXNoLHIud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixlLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIkBwbG90bHkvZDMiOjU4fV0sODgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYz1uKHtlZGl0VHlwZToiY2FsYyJ9LG8oImxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHNwbGluZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiXX0pfSk7ZS5leHBvcnRzPXtkb21haW46bCh7bmFtZToicGFyY2F0cyIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiY291bnQiLCJwcm9iYWJpbGl0eSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2F0ZWdvcnkiLCJjb2xvciIsImRpbWVuc2lvbiJdLGRmbHQ6ImNhdGVnb3J5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHtrZXlzOlsiY291bnQiLCJwcm9iYWJpbGl0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcnljb3VudCIsImNvbG9yY291bnQiLCJiYW5kY29sb3Jjb3VudCJdfSksYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoicGVycGVuZGljdWxhciIsZWRpdFR5cGU6InBsb3QifSxidW5kbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzb3J0cGF0aHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJiYWNrd2FyZCJdLGRmbHQ6ImZvcndhcmQiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19LGxpbmU6Yyxjb3VudHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxsZWdlbmRyYW5rOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy9kb21haW4iOjU4NCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo1ODUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzM31dLDg4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGk9dCgiLi9wbG90Iik7ci5uYW1lPSJwYXJjYXRzIixyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LmNhbGNkYXRhLCJwYXJjYXRzIik7aWYoby5sZW5ndGgpe3ZhciBzPW9bMF07aSh0LHMscixhKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBhcmNhdHMiKSxhPWUuX2hhcyYmZS5faGFzKCJwYXJjYXRzIik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNhdHMiKS5yZW1vdmUoKX19LHsiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjU5MywiLi9wbG90Ijo4ODd9XSw4ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCJmYXN0LWlzbnVtZXJpYyIpO2Z1bmN0aW9uIHUodCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm57Y2F0ZWdvcnlJbmRzOnQsY29sb3I6ZSxyYXdDb2xvcjpyLHZhbHVlSW5kczpbXSxjb3VudDowfX1mdW5jdGlvbiBoKHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bC5maWx0ZXJWaXNpYmxlKGUuZGltZW5zaW9ucyk7aWYoMD09PXIubGVuZ3RoKXJldHVybltdO3ZhciBwLGQsbSxnPXIubWFwKChmdW5jdGlvbih0KXt2YXIgZTtpZigidHJhY2UiPT09dC5jYXRlZ29yeW9yZGVyKWU9bnVsbDtlbHNlIGlmKCJhcnJheSI9PT10LmNhdGVnb3J5b3JkZXIpZT10LmNhdGVnb3J5YXJyYXk7ZWxzZXtlPW8odC52YWx1ZXMpO2Zvcih2YXIgcj0hMCxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWMoZVtuXSkpe3I9ITE7YnJlYWt9ZS5zb3J0KHI/bC5zb3J0ZXJBc2M6dm9pZCAwKSwiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT10LmNhdGVnb3J5b3JkZXImJihlPWUucmV2ZXJzZSgpKX1yZXR1cm4gZnVuY3Rpb24odCxlKXtlPW51bGw9PWU/W106ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3ZhciByPXt9LG49e30saT1bXTtlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7clt0XT0wLG5bdF09ZX0pKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG8scz10W2FdO3ZvaWQgMD09PXJbc10/KHJbc109MSxvPWUucHVzaChzKS0xLG5bc109byk6KHJbc10rKyxvPW5bc10pLGkucHVzaChvKX12YXIgbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSk7cmV0dXJue3VuaXF1ZVZhbHVlczplLHVuaXF1ZUNvdW50czpsLGluZHM6aX19KHQudmFsdWVzLGUpfSkpO3A9bC5pc0FycmF5T3JUeXBlZEFycmF5KGUuY291bnRzKT9lLmNvdW50czpbZS5jb3VudHNdLGZ1bmN0aW9uKHQpe3ZhciBlO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYodFtyXTwwfHx0W3JdPj10Lmxlbmd0aClyZXR1cm4hMTtpZih2b2lkIDAhPT1lW3Rbcl1dKXJldHVybiExO2VbdFtyXV09ITB9cmV0dXJuITB9KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5aW5kZXh9KSkpKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PXRbZV0uZGlzcGxheWluZGV4O2Vsc2UgZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9ZX0ociksci5mb3JFYWNoKChmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0LGUpe3QuX2NhdGVnb3J5YXJyYXk9ZS51bmlxdWVWYWx1ZXMsbnVsbD09PXQudGlja3RleHR8fHZvaWQgMD09PXQudGlja3RleHQ/dC5fdGlja3RleHQ9W106dC5fdGlja3RleHQ9dC50aWNrdGV4dC5zbGljZSgpO2Zvcih2YXIgcj10Ll90aWNrdGV4dC5sZW5ndGg7cjxlLnVuaXF1ZVZhbHVlcy5sZW5ndGg7cisrKXQuX3RpY2t0ZXh0LnB1c2goZS51bmlxdWVWYWx1ZXNbcl0pfSh0LGdbZV0pfSkpO3ZhciB2LHk9ZS5saW5lO3k/KGkoZSwibGluZSIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pLHY9cy50cnlDb2xvcnNjYWxlKHkpKTp2PWwuaWRlbnRpdHk7dmFyIHgsYixfLHcsVCxrPXJbMF0udmFsdWVzLmxlbmd0aCxBPXt9LE09Zy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZHN9KSk7Zm9yKG09MCx4PTA7eDxrO3grKyl7dmFyIFM9W107Zm9yKGI9MDtiPE0ubGVuZ3RoO2IrKylTLnB1c2goTVtiXVt4XSk7ZD1wW3glcC5sZW5ndGhdLG0rPWQ7dmFyIEU9KF89eCx3PXZvaWQgMCxUPXZvaWQgMCxsLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcik/VD13PXkuY29sb3JbXyV5LmNvbG9yLmxlbmd0aF06dz15LmNvbG9yLHtjb2xvcjp2KHcpLHJhd0NvbG9yOlR9KSxMPVMrIi0iK0UucmF3Q29sb3I7dm9pZCAwPT09QVtMXSYmKEFbTF09ZihTLEUuY29sb3IsRS5yYXdDb2xvcikpLGgoQVtMXSx4LGQpfXZhciBDLFA9ci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJue2RpbWVuc2lvbkluZDp0LGNvbnRhaW5lckluZDplLGRpc3BsYXlJbmQ6cixkaW1lbnNpb25MYWJlbDpuLGNvdW50OmksY2F0ZWdvcmllczpbXSxkcmFnWDpudWxsfX0oZSx0Ll9pbmRleCx0Ll9kaXNwbGF5aW5kZXgsdC5sYWJlbCxtKX0pKTtmb3IoeD0wO3g8azt4KyspZm9yKGQ9cFt4JXAubGVuZ3RoXSxiPTA7YjxQLmxlbmd0aDtiKyspe3ZhciBJPVBbYl0uY29udGFpbmVySW5kLE89Z1tiXS5pbmRzW3hdLHo9UFtiXS5jYXRlZ29yaWVzO2lmKHZvaWQgMD09PXpbT10pe3ZhciBEPWUuZGltZW5zaW9uc1tJXS5fY2F0ZWdvcnlhcnJheVtPXSxSPWUuZGltZW5zaW9uc1tJXS5fdGlja3RleHRbT107eltPXT17ZGltZW5zaW9uSW5kOmIsY2F0ZWdvcnlJbmQ6Qz1PLGNhdGVnb3J5VmFsdWU6RCxkaXNwbGF5SW5kOkMsY2F0ZWdvcnlMYWJlbDpSLHZhbHVlSW5kczpbXSxjb3VudDowLGRyYWdZOm51bGx9fXUoeltPXSx4LGQpfXJldHVybiBuKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSkpO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShQLEEsbSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6Mzc0LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6Mzc3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIjo0OTQsIi4uLy4uL2xpYi9ndXAiOjUwMCwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDg4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpLGM9dCgiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCIpO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLmRpbWVuc2lvbnMscixpKX12YXIgaT1yKCJ2YWx1ZXMiKSxhPXIoInZpc2libGUiKTtpZihpJiZpLmxlbmd0aHx8KGE9ZS52aXNpYmxlPSExKSxhKXtyKCJsYWJlbCIpLHIoImRpc3BsYXlpbmRleCIsZS5faW5kZXgpO3ZhciBvLHM9dC5jYXRlZ29yeWFycmF5LGM9QXJyYXkuaXNBcnJheShzKSYmcy5sZW5ndGg+MDtjJiYobz0iYXJyYXkiKTt2YXIgdT1yKCJjYXRlZ29yeW9yZGVyIixvKTsiYXJyYXkiPT09dT8ocigiY2F0ZWdvcnlhcnJheSIpLHIoInRpY2t0ZXh0IikpOihkZWxldGUgdC5jYXRlZ29yeWFycmF5LGRlbGV0ZSB0LnRpY2t0ZXh0KSxjfHwiYXJyYXkiIT09dXx8KGUuY2F0ZWdvcnlvcmRlcj0idHJhY2UiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgcD1zKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWZ1bmN0aW9uKHQsZSxyLG8scyl7cygibGluZS5zaGFwZSIpLHMoImxpbmUuaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBsPXMoImxpbmUuY29sb3IiLG8uY29sb3J3YXlbMF0pO2lmKGkodCwibGluZSIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpe2lmKGwubGVuZ3RoKXJldHVybiBzKCJsaW5lLmNvbG9yc2NhbGUiKSxhKHQsZSxvLHMse3ByZWZpeDoibGluZS4iLGNMZXR0ZXI6ImMifSksbC5sZW5ndGg7ZS5saW5lLmNvbG9yPXJ9cmV0dXJuIDEvMH0odCxlLHIsZixoKTtvKGUsZixoKSxBcnJheS5pc0FycmF5KHApJiZwLmxlbmd0aHx8KGUudmlzaWJsZT0hMSksYyhlLHAsInZhbHVlcyIsZCksaCgiaG92ZXJvbiIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJhcnJhbmdlbWVudCIpLGgoImJ1bmRsZWNvbG9ycyIpLGgoInNvcnRwYXRocyIpLGgoImNvdW50cyIpO3ZhciBtPXtmYW1pbHk6Zi5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoZi5mb250LnNpemUpLGNvbG9yOmYuZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGgsImxhYmVsZm9udCIsbSk7dmFyIGc9e2ZhbWlseTpmLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChmLmZvbnQuc2l6ZS8xLjIpLGNvbG9yOmYuZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGgsInRpY2tmb250IixnKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjozNzYsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjozNzcsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0OSwiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiOjg5NywiLi9hdHRyaWJ1dGVzIjo4ODF9XSw4ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicGFyY2F0cyIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjo4ODEsIi4vYmFzZV9wbG90Ijo4ODIsIi4vY2FsYyI6ODgzLCIuL2RlZmF1bHRzIjo4ODQsIi4vcGxvdCI6ODg3fV0sODg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGVOdW1iZXIsYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHM9dCgiLi4vLi4vbGliIiksbD1zLnN0clRyYW5zbGF0ZSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHU9dCgidGlueWNvbG9yMiIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIik7ZnVuY3Rpb24gaCh0LGUscixpKXt2YXIgYT10Lm1hcChGLmJpbmQoMCxlLHIpKSxvPWkuc2VsZWN0QWxsKCJnLnBhcmNhdHNsYXllciIpLmRhdGEoW251bGxdKTtvLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXJjYXRzbGF5ZXIiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgdT1vLnNlbGVjdEFsbCgiZy50cmFjZS5wYXJjYXRzIikuZGF0YShhLHApLGg9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgcGFyY2F0cyIpO3UuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodC54LHQueSl9KSksaC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBhdGhzIik7dmFyIHk9dS5zZWxlY3QoImcucGF0aHMiKS5zZWxlY3RBbGwoInBhdGgucGF0aCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSkscCk7eS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KSk7dmFyIHg9eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtfKHgpLHkuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSkseC5lbXB0eSgpfHx5LnNvcnQobSkseS5leGl0KCkucmVtb3ZlKCkseS5vbigibW91c2VvdmVyIixnKS5vbigibW91c2VvdXQiLHYpLm9uKCJjbGljayIsYiksaC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRpbWVuc2lvbnMiKTt2YXIgdz11LnNlbGVjdCgiZy5kaW1lbnNpb25zIikuc2VsZWN0QWxsKCJnLmRpbWVuc2lvbiIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9KSxwKTt3LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkaW1lbnNpb24iKSx3LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQueCwwKX0pKSx3LmV4aXQoKS5yZW1vdmUoKTt2YXIgQT13LnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9KSxwKSxNPUEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhdGVnb3J5Iik7QS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCgwLHQueSl9KSksTS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImNhdHJlY3QiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxBLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKSxUKE0pO3ZhciBTPUEuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9KSxwKTtTLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpLFMuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpO3ZhciBFPVMuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhbmRyZWN0IikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO1MuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiJmaXhlZCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/ImRlZmF1bHQiOiJwZXJwZW5kaWN1bGFyIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudD8ibnMtcmVzaXplIjoibW92ZSJ9KSksayhFKSxTLmV4aXQoKS5yZW1vdmUoKSxNLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY2F0bGFiZWwiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2YXIgej1lLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7QS5zZWxlY3QoInRleHQuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBkKHQpPyJzdGFydCI6ImVuZCJ9KSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtc2hhZG93IixmLm1ha2VUZXh0U2hhZG93KHopKS5zdHlsZSgiZmlsbCIsInJnYigwLCAwLCAwKSIpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT90LndpZHRoKzU6LTV9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodC8yfSkpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhdGVnb3J5TGFiZWx9KSkuZWFjaCgoZnVuY3Rpb24odCl7Yy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5jYXRlZ29yeWxhYmVsZm9udCksZi5jb252ZXJ0VG9Uc3BhbnMobi5zZWxlY3QodGhpcyksZSl9KSksTS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImRpbWxhYmVsIiksQS5zZWxlY3QoInRleHQuZGltbGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImJhc2VsaW5lIikuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuImZpeGVkIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudD8iZGVmYXVsdCI6ImV3LXJlc2l6ZSJ9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoLzJ9KSkuYXR0cigieSIsLTUpLnRleHQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lP3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW3QubW9kZWwuZGltZW5zaW9uSW5kXS5kaW1lbnNpb25MYWJlbDpudWxsfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwubGFiZWxmb250KX0pKSxBLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLm9uKCJtb3VzZW92ZXIiLEwpLm9uKCJtb3VzZW91dCIsQyksQS5leGl0KCkucmVtb3ZlKCksdy5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6MH19KSkub24oImRyYWdzdGFydCIsUCkub24oImRyYWciLEkpLm9uKCJkcmFnZW5kIixPKSksdS5lYWNoKChmdW5jdGlvbih0KXt0LnRyYWNlU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLHQucGF0aFNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcucGF0aHMiKS5zZWxlY3RBbGwoInBhdGgucGF0aCIpLHQuZGltZW5zaW9uU2VsZWN0aW9uPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb25zIikuc2VsZWN0QWxsKCJnLmRpbWVuc2lvbiIpfSkpLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQua2V5fWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLHI9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZS0xXS5tb2RlbC5kaW1lbnNpb25JbmQ7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kPT09cn1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHQubW9kZWwucmF3Q29sb3I+ZS5tb2RlbC5yYXdDb2xvcj8xOnQubW9kZWwucmF3Q29sb3I8ZS5tb2RlbC5yYXdDb2xvcj8tMTowfWZ1bmN0aW9uIGcodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe3MucmFpc2VUb1RvcCh0aGlzKSx3KG4uc2VsZWN0KHRoaXMpKTt2YXIgZT15KHQpLHI9eCh0KTtpZih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigibm9uZSIpKXt2YXIgaSxhLGwsYz1uLm1vdXNlKHRoaXMpWzBdLGY9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGg9dC5wYXJjYXRzVmlld01vZGVsLnRyYWNlLHA9Zi5fZnVsbExheW91dCxkPXAuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3IobD0wO2w8dC5sZWZ0WHMubGVuZ3RoLTE7bCsrKWlmKHQubGVmdFhzW2xdK3QuZGltV2lkdGhzW2xdLTI8PWMmJmM8PXQubGVmdFhzW2wrMV0rMil7dmFyIGc9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbbF0sdj10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tsKzFdO2k9KGcueCtnLndpZHRoK3YueCkvMixhPSh0LnRvcFlzW2xdK3QudG9wWXNbbCsxXSt0LmhlaWdodCkvMjticmVha312YXIgYj10LnBhcmNhdHNWaWV3TW9kZWwueCtpLF89dC5wYXJjYXRzVmlld01vZGVsLnkrYSxUPXUubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pLGs9dC5tb2RlbC5jb3VudCxBPWsvdC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LE09e2NvdW50TGFiZWw6ayxwcm9iYWJpbGl0eUxhYmVsOkEudG9GaXhlZCgzKX0sUz1bXTstMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZTLnB1c2goWyJDb3VudDoiLE0uY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZTLnB1c2goWyJQOiIsTS5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBFPVMuam9pbigiPGJyPiIpLEw9bi5tb3VzZShmKVswXTtvLmxvbmVIb3Zlcih7dHJhY2U6aCx4OmItZC5sZWZ0K20ubGVmdCx5Ol8tZC50b3ArbS50b3AsdGV4dDpFLGNvbG9yOnQubW9kZWwuY29sb3IsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTAsZm9udENvbG9yOlQsaWRlYWxBbGlnbjpMPGI/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTooaC5saW5lfHx7fSkuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOk0sZXZlbnREYXRhOlt7ZGF0YTpoLl9pbnB1dCxmdWxsRGF0YTpoLGNvdW50OmsscHJvYmFiaWxpdHk6QX1dfSx7Y29udGFpbmVyOnAuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnAuX3BhcGVyLm5vZGUoKSxnZDpmfSl9fX1mdW5jdGlvbiB2KHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmKF8obi5zZWxlY3QodGhpcykpLG8ubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksdC5wYXJjYXRzVmlld01vZGVsLnBhdGhTZWxlY3Rpb24uc29ydChtKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXt2YXIgZT15KHQpLHI9eCh0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6ZSxldmVudDpuLmV2ZW50LGNvbnN0cmFpbnRzOnJ9KX19ZnVuY3Rpb24geSh0KXtmb3IodmFyIGU9W10scj16KHQucGFyY2F0c1ZpZXdNb2RlbCksbj0wO248dC5tb2RlbC52YWx1ZUluZHMubGVuZ3RoO24rKyl7dmFyIGk9dC5tb2RlbC52YWx1ZUluZHNbbl07ZS5wdXNoKHtjdXJ2ZU51bWJlcjpyLHBvaW50TnVtYmVyOml9KX1yZXR1cm4gZX1mdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT17fSxyPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxhPWkuY2F0ZWdvcmllc1t0Lm1vZGVsLmNhdGVnb3J5SW5kc1tuXV07ZVtpLmNvbnRhaW5lckluZF09YS5jYXRlZ29yeVZhbHVlfXJldHVybiB2b2lkIDAhPT10Lm1vZGVsLnJhd0NvbG9yJiYoZS5jb2xvcj10Lm1vZGVsLnJhd0NvbG9yKSxlfWZ1bmN0aW9uIGIodCl7aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXt2YXIgZT15KHQpLHI9eCh0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSl9fWZ1bmN0aW9uIF8odCl7dC5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY29sb3J9KSkuYXR0cigiZmlsbC1vcGFjaXR5IiwuNikuYXR0cigic3Ryb2tlIiwibGlnaHRncmF5IikuYXR0cigic3Ryb2tlLXdpZHRoIiwuMikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpfWZ1bmN0aW9uIHcodCl7dC5hdHRyKCJmaWxsLW9wYWNpdHkiLC44KS5hdHRyKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4gdS5tb3N0UmVhZGFibGUodC5tb2RlbC5jb2xvcixbImJsYWNrIiwid2hpdGUiXSl9KSkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMyl9ZnVuY3Rpb24gVCh0KXt0LnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiBrKHQpe3QuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSkuYXR0cigiZmlsbC1vcGFjaXR5IiwxKX1mdW5jdGlvbiBBKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLHI9dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25JbmQsbj10LmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLmNhdGVnb3J5SW5kO3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubW9kZWwuY2F0ZWdvcnlJbmRzW3JdPT09biYmZS5tb2RlbC5jb2xvcj09PXQuY29sb3J9KSl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwsbz1pLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYscz1uLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLGw9W107cy5lYWNoKChmdW5jdGlvbih0KXtBKHQpLmVhY2goKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGwseSh0KSl9KSl9KSk7dmFyIGM9e307Y1thLmRpbWVuc2lvbkluZF09YS5jYXRlZ29yeVZhbHVlLG8uZW1pdChlLHtwb2ludHM6bCxldmVudDpyLGNvbnN0cmFpbnRzOmN9KX1mdW5jdGlvbiBTKHQsZSxyKXt2YXIgaT1uLnNlbGVjdCh0KS5kYXR1bSgpLGE9aS5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbCxvPWkucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixzPUEoaSksbD1bXTtzLmVhY2goKGZ1bmN0aW9uKHQpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGwseSh0KSl9KSk7dmFyIGM9e307Y1thLmRpbWVuc2lvbkluZF09YS5jYXRlZ29yeVZhbHVlLHZvaWQgMCE9PWkucmF3Q29sb3ImJihjLmNvbG9yPWkucmF3Q29sb3IpLG8uZW1pdChlLHtwb2ludHM6bCxldmVudDpyLGNvbnN0cmFpbnRzOmN9KX1mdW5jdGlvbiBFKHQsZSxyKXt0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgaSxhLG89dC5fZnVsbExheW91dC5faW52U2NhbGVYLHM9dC5fZnVsbExheW91dC5faW52U2NhbGVZLGw9bi5zZWxlY3Qoci5wYXJlbnROb2RlKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLGM9bC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdT1sLmRhdHVtKCksZj11LnBhcmNhdHNWaWV3TW9kZWwsaD1mLm1vZGVsLmRpbWVuc2lvbnNbdS5tb2RlbC5kaW1lbnNpb25JbmRdLHA9Zi50cmFjZSxkPWMudG9wK2MuaGVpZ2h0LzI7Zi5kaW1lbnNpb25zLmxlbmd0aD4xJiZoLmRpc3BsYXlJbmQ9PT1mLmRpbWVuc2lvbnMubGVuZ3RoLTE/KGk9Yy5sZWZ0LGE9ImxlZnQiKTooaT1jLmxlZnQrYy53aWR0aCxhPSJyaWdodCIpO3ZhciBtPXUubW9kZWwuY291bnQsZz11Lm1vZGVsLmNhdGVnb3J5TGFiZWwsdj1tL3UucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCx5PXtjb3VudExhYmVsOm0sY2F0ZWdvcnlMYWJlbDpnLHByb2JhYmlsaXR5TGFiZWw6di50b0ZpeGVkKDMpfSx4PVtdOy0xIT09dS5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoImNvdW50IikmJngucHVzaChbIkNvdW50OiIseS5jb3VudExhYmVsXS5qb2luKCIgIikpLC0xIT09dS5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInByb2JhYmlsaXR5IikmJngucHVzaChbIlAoIit5LmNhdGVnb3J5TGFiZWwrIik6Iix5LnByb2JhYmlsaXR5TGFiZWxdLmpvaW4oIiAiKSk7dmFyIGI9eC5qb2luKCI8YnI+Iik7cmV0dXJue3RyYWNlOnAseDpvKihpLWUubGVmdCkseTpzKihkLWUudG9wKSx0ZXh0OmIsY29sb3I6ImxpZ2h0Z3JheSIsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTIsZm9udENvbG9yOiJibGFjayIsaWRlYWxBbGlnbjphLGhvdmVydGVtcGxhdGU6cC5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6eSxldmVudERhdGE6W3tkYXRhOnAuX2lucHV0LGZ1bGxEYXRhOnAsY291bnQ6bSxjYXRlZ29yeTpnLHByb2JhYmlsaXR5OnZ9XX19ZnVuY3Rpb24gTCh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7aWYobi5tb3VzZSh0aGlzKVsxXTwtMSlyZXR1cm47dmFyIGUscj10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsaT1yLl9mdWxsTGF5b3V0LGE9aS5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb247aWYoImNvbG9yIj09PWw/KCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5kYXR1bSgpLHI9QShlKTt3KHIpLHIuZWFjaCgoZnVuY3Rpb24oKXtzLnJhaXNlVG9Ub3AodGhpcyl9KSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yPT09ZS5jb2xvcn0pKS5lYWNoKChmdW5jdGlvbigpe3MucmFpc2VUb1RvcCh0aGlzKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KX0pKX0odGhpcyksUyh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKTooIWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9QSh0KTt3KGUpLGUuZWFjaCgoZnVuY3Rpb24oKXtzLnJhaXNlVG9Ub3AodGhpcyl9KSl9KSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwyLjUpfSh0aGlzKSxNKHRoaXMsInBsb3RseV9ob3ZlciIsbi5ldmVudCkpLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoIm5vbmUiKSkiY2F0ZWdvcnkiPT09bD9lPUUocixhLHRoaXMpOiJjb2xvciI9PT1sP2U9ZnVuY3Rpb24odCxlLHIpe3QuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpO3ZhciBpLGEsbz10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgscz10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksbD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9bi5zZWxlY3QocikuZGF0dW0oKSxmPWMuY2F0ZWdvcnlWaWV3TW9kZWwsaD1mLnBhcmNhdHNWaWV3TW9kZWwscD1oLm1vZGVsLmRpbWVuc2lvbnNbZi5tb2RlbC5kaW1lbnNpb25JbmRdLGQ9aC50cmFjZSxtPWwueStsLmhlaWdodC8yO2guZGltZW5zaW9ucy5sZW5ndGg+MSYmcC5kaXNwbGF5SW5kPT09aC5kaW1lbnNpb25zLmxlbmd0aC0xPyhpPWwubGVmdCxhPSJsZWZ0Iik6KGk9bC5sZWZ0K2wud2lkdGgsYT0icmlnaHQiKTt2YXIgZz1mLm1vZGVsLmNhdGVnb3J5TGFiZWwsdj1jLnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQseT0wO2MuY2F0ZWdvcnlWaWV3TW9kZWwuYmFuZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2xvcj09PWMuY29sb3ImJih5Kz10LmNvdW50KX0pKTt2YXIgeD1mLm1vZGVsLmNvdW50LGI9MDtoLnBhdGhTZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24odCl7dC5tb2RlbC5jb2xvcj09PWMuY29sb3ImJihiKz10Lm1vZGVsLmNvdW50KX0pKTt2YXIgXz15L3Ysdz15L2IsVD15L3gsaz17Y291bnRMYWJlbDp2LGNhdGVnb3J5TGFiZWw6Zyxwcm9iYWJpbGl0eUxhYmVsOl8udG9GaXhlZCgzKX0sQT1bXTstMSE9PWYucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZBLnB1c2goWyJDb3VudDoiLGsuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PWYucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiYoQS5wdXNoKCJQKGNvbG9yIFx1MjIyOSAiK2crIik6ICIray5wcm9iYWJpbGl0eUxhYmVsKSxBLnB1c2goIlAoIitnKyIgfCBjb2xvcik6ICIrdy50b0ZpeGVkKDMpKSxBLnB1c2goIlAoY29sb3IgfCAiK2crIik6ICIrVC50b0ZpeGVkKDMpKSk7dmFyIE09QS5qb2luKCI8YnI+IiksUz11Lm1vc3RSZWFkYWJsZShjLmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKTtyZXR1cm57dHJhY2U6ZCx4Om8qKGktZS5sZWZ0KSx5OnMqKG0tZS50b3ApLHRleHQ6TSxjb2xvcjpjLmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRDb2xvcjpTLGZvbnRTaXplOjEwLGlkZWFsQWxpZ246YSxob3ZlcnRlbXBsYXRlOmQuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOmssZXZlbnREYXRhOlt7ZGF0YTpkLl9pbnB1dCxmdWxsRGF0YTpkLGNhdGVnb3J5OmcsY291bnQ6dixwcm9iYWJpbGl0eTpfLGNhdGVnb3J5Y291bnQ6eCxjb2xvcmNvdW50OmIsYmFuZGNvbG9yY291bnQ6eX1dfX0ocixhLHRoaXMpOiJkaW1lbnNpb24iPT09bCYmKGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPVtdO3JldHVybiBuLnNlbGVjdChyLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJnLmNhdGVnb3J5Iikuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5lYWNoKChmdW5jdGlvbigpe2kucHVzaChFKHQsZSx0aGlzKSl9KSksaX0ocixhLHRoaXMpKSxlJiZvLmxvbmVIb3ZlcihlLHtjb250YWluZXI6aS5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6aS5fcGFwZXIubm9kZSgpLGdkOnJ9KX19ZnVuY3Rpb24gQyh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWw7aWYoIWUuZHJhZ0RpbWVuc2lvbiYmKF8oZS5wYXRoU2VsZWN0aW9uKSxUKGUuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpKSxrKGUuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpKSxvLmxvbmVVbmhvdmVyKGUuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSxlLnBhdGhTZWxlY3Rpb24uc29ydChtKSwtMT09PWUuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKSl7ImNvbG9yIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP1ModGhpcywicGxvdGx5X3VuaG92ZXIiLG4uZXZlbnQpOk0odGhpcywicGxvdGx5X3VuaG92ZXIiLG4uZXZlbnQpfX1mdW5jdGlvbiBQKHQpeyJmaXhlZCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJih0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPXQubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLHQuZHJhZ0hhc01vdmVkPSExLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5tb3VzZSh0aGlzKVswXSxpPW4ubW91c2UodGhpcylbMV07LTI8PXImJnI8PWUud2lkdGgrMiYmLTI8PWkmJmk8PWUuaGVpZ2h0KzImJih0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9ZS5tb2RlbC5kaXNwbGF5SW5kLHQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzPXQubW9kZWwuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSksZS5tb2RlbC5kcmFnWT1lLnkscy5yYWlzZVRvVG9wKHRoaXMucGFyZW50Tm9kZSksbi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5lYWNoKChmdW5jdGlvbihlKXtlLnk8aSYmaTw9ZS55K2UuaGVpZ2h0JiYodC5wb3RlbnRpYWxDbGlja0JhbmQ9dGhpcyl9KSkpfSkpLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPXQsby5sb25lVW5ob3Zlcih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSl9ZnVuY3Rpb24gSSh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnSGFzTW92ZWQ9ITAsbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpKXt2YXIgZT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kLHI9ZS0xLGk9ZSsxLGE9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZV07aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIG89YS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF07by5tb2RlbC5kcmFnWSs9bi5ldmVudC5keTt2YXIgcz1vLm1vZGVsLmRyYWdZLGw9by5tb2RlbC5kaXNwbGF5SW5kLGM9YS5jYXRlZ29yaWVzLHU9Y1tsLTFdLGY9Y1tsKzFdO3ZvaWQgMCE9PXUmJnM8dS55K3UuaGVpZ2h0LzImJihvLm1vZGVsLmRpc3BsYXlJbmQ9dS5tb2RlbC5kaXNwbGF5SW5kLHUubW9kZWwuZGlzcGxheUluZD1sKSx2b2lkIDAhPT1mJiZzK28uaGVpZ2h0PmYueStmLmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPWYubW9kZWwuZGlzcGxheUluZCxmLm1vZGVsLmRpc3BsYXlJbmQ9bCksdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW8ubW9kZWwuZGlzcGxheUluZH1pZihudWxsPT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kfHwiZnJlZWZvcm0iPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50KXthLm1vZGVsLmRyYWdYPW4uZXZlbnQueDt2YXIgaD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tyXSxwPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2ldO3ZvaWQgMCE9PWgmJmEubW9kZWwuZHJhZ1g8aC54K2gud2lkdGgmJihhLm1vZGVsLmRpc3BsYXlJbmQ9aC5tb2RlbC5kaXNwbGF5SW5kLGgubW9kZWwuZGlzcGxheUluZD1lKSx2b2lkIDAhPT1wJiZhLm1vZGVsLmRyYWdYK2Eud2lkdGg+cC54JiYoYS5tb2RlbC5kaXNwbGF5SW5kPXAubW9kZWwuZGlzcGxheUluZCxwLm1vZGVsLmRpc3BsYXlJbmQ9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCksdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1hLm1vZGVsLmRpc3BsYXlJbmR9aih0LnBhcmNhdHNWaWV3TW9kZWwpLE4odC5wYXJjYXRzVmlld01vZGVsKSxSKHQucGFyY2F0c1ZpZXdNb2RlbCksRCh0LnBhcmNhdHNWaWV3TW9kZWwpfX1mdW5jdGlvbiBPKHQpe2lmKCJmaXhlZCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJm51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJmb250LXdlaWdodCIsIm5vcm1hbCIpO3ZhciBlPXt9LHI9eih0LnBhcmNhdHNWaWV3TW9kZWwpLGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLG89dC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzLnNvbWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1pW2VdfSkpO28mJmkuZm9yRWFjaCgoZnVuY3Rpb24ocixuKXt2YXIgaT10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1tuXS5jb250YWluZXJJbmQ7ZVsiZGltZW5zaW9uc1siK2krIl0uZGlzcGxheWluZGV4Il09cn0pKTt2YXIgcz0hMTtpZihudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXt2YXIgbD10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpO2lmKHM9dC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHMuc29tZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWxbZV19KSkpe3ZhciBjPXQubW9kZWwuY2F0ZWdvcmllcy5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSksdT1jLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcnlWYWx1ZX0pKSxmPWMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeUxhYmVsfSkpO2VbImRpbWVuc2lvbnNbIit0Lm1vZGVsLmNvbnRhaW5lckluZCsiXS5jYXRlZ29yeWFycmF5Il09W3VdLGVbImRpbWVuc2lvbnNbIit0Lm1vZGVsLmNvbnRhaW5lckluZCsiXS50aWNrdGV4dCJdPVtmXSxlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0uY2F0ZWdvcnlvcmRlciJdPSJhcnJheSJ9fWlmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSYmIXQuZHJhZ0hhc01vdmVkJiZ0LnBvdGVudGlhbENsaWNrQmFuZCYmKCJjb2xvciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9TKHQucG90ZW50aWFsQ2xpY2tCYW5kLCJwbG90bHlfY2xpY2siLG4uZXZlbnQuc291cmNlRXZlbnQpOk0odC5wb3RlbnRpYWxDbGlja0JhbmQsInBsb3RseV9jbGljayIsbi5ldmVudC5zb3VyY2VFdmVudCkpLHQubW9kZWwuZHJhZ1g9bnVsbCxudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRdLmNhdGVnb3JpZXNbdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kXS5tb2RlbC5kcmFnWT1udWxsLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsO3QuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9bnVsbCx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj1udWxsLHQuZHJhZ0hhc01vdmVkPW51bGwsdC5wb3RlbnRpYWxDbGlja0JhbmQ9bnVsbCxqKHQucGFyY2F0c1ZpZXdNb2RlbCksTih0LnBhcmNhdHNWaWV3TW9kZWwpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKDMwMCkuZWFzZSgiY3ViaWMtaW4tb3V0IikuZWFjaCgoZnVuY3Rpb24oKXtSKHQucGFyY2F0c1ZpZXdNb2RlbCwhMCksRCh0LnBhcmNhdHNWaWV3TW9kZWwsITApfSkpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7KG98fHMpJiZhLnJlc3R5bGUodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGUsW3JdKX0pKX19ZnVuY3Rpb24geih0KXtmb3IodmFyIGUscj10LmdyYXBoRGl2Ll9mdWxsRGF0YSxuPTA7bjxyLmxlbmd0aDtuKyspaWYodC5rZXk9PT1yW25dLnVpZCl7ZT1uO2JyZWFrfXJldHVybiBlfWZ1bmN0aW9uIEQodCxlKXt2YXIgcjt2b2lkIDA9PT1lJiYoZT0hMSksdC5wYXRoU2VsZWN0aW9uLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSkscCksKHI9dC5wYXRoU2VsZWN0aW9uLGU/ci50cmFuc2l0aW9uKCk6cikuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSl9ZnVuY3Rpb24gUih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/dC50cmFuc2l0aW9uKCk6dH12b2lkIDA9PT1lJiYoZT0hMSksdC5kaW1lbnNpb25TZWxlY3Rpb24uZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30pLHApO3ZhciBpPXQuZGltZW5zaW9uU2VsZWN0aW9uLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9KSxwKTtyKHQuZGltZW5zaW9uU2VsZWN0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngsMCl9KSkscihpKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCgwLHQueSl9KSksaS5zZWxlY3QoIi5kaW1sYWJlbCIpLnRleHQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lP3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zW3QubW9kZWwuZGltZW5zaW9uSW5kXS5kaW1lbnNpb25MYWJlbDpudWxsfSkpLGkuc2VsZWN0KCIuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBkKHQpPyJzdGFydCI6ImVuZCJ9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiBkKHQpP3Qud2lkdGgrNTotNX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyO2QodCk/KGU9dC53aWR0aCs1LHI9InN0YXJ0Iik6KGU9LTUscj0iZW5kIiksbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3BhbiIpLmF0dHIoIngiLGUpLmF0dHIoInRleHQtYW5jaG9yIixyKX0pKTt2YXIgYT1pLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJhbmRzfSkscCksbz1hLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYW5kcmVjdCIpLmF0dHIoImN1cnNvciIsIm1vdmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7YS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSksayhvKSxhLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpLGEuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIEYodCxlLHIpe3ZhciBuLGk9clswXSxhPWUubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LG89aS50cmFjZSxzPW8uZG9tYWluLGw9ZS53aWR0aCxjPWUuaGVpZ2h0LHU9TWF0aC5mbG9vcihsKihzLnhbMV0tcy54WzBdKSksZj1NYXRoLmZsb29yKGMqKHMueVsxXS1zLnlbMF0pKSxoPXMueFswXSpsK2EubCxwPWUuaGVpZ2h0LXMueVsxXSplLmhlaWdodCthLnQsZD1vLmxpbmUuc2hhcGU7bj0iYWxsIj09PW8uaG92ZXJpbmZvP1siY291bnQiLCJwcm9iYWJpbGl0eSJdOihvLmhvdmVyaW5mb3x8IiIpLnNwbGl0KCIrIik7dmFyIG09e3RyYWNlOm8sa2V5Om8udWlkLG1vZGVsOmkseDpoLHk6cCx3aWR0aDp1LGhlaWdodDpmLGhvdmVyb246by5ob3Zlcm9uLGhvdmVyaW5mb0l0ZW1zOm4sYXJyYW5nZW1lbnQ6by5hcnJhbmdlbWVudCxidW5kbGVjb2xvcnM6by5idW5kbGVjb2xvcnMsc29ydHBhdGhzOm8uc29ydHBhdGhzLGxhYmVsZm9udDpvLmxhYmVsZm9udCxjYXRlZ29yeWxhYmVsZm9udDpvLnRpY2tmb250LHBhdGhTaGFwZTpkLGRyYWdEaW1lbnNpb246bnVsbCxtYXJnaW46YSxwYXRoczpbXSxkaW1lbnNpb25zOltdLGdyYXBoRGl2OnQsdHJhY2VTZWxlY3Rpb246bnVsbCxwYXRoU2VsZWN0aW9uOm51bGwsZGltZW5zaW9uU2VsZWN0aW9uOm51bGx9O3JldHVybiBpLmRpbWVuc2lvbnMmJihqKG0pLE4obSkpLG19ZnVuY3Rpb24gQih0LGUscixuLGEpe3ZhciBvLHMsbD1bXSxjPVtdO2ZvcihzPTA7czxyLmxlbmd0aC0xO3MrKylvPWkocltzXSt0W3NdLHRbcysxXSksbC5wdXNoKG8oYSkpLGMucHVzaChvKDEtYSkpO3ZhciB1PSJNICIrdFswXSsiLCIrZVswXTtmb3IodSs9ImwiK3JbMF0rIiwwICIscz0xO3M8ci5sZW5ndGg7cysrKXUrPSJDIitsW3MtMV0rIiwiK2Vbcy0xXSsiICIrY1tzLTFdKyIsIitlW3NdKyIgIit0W3NdKyIsIitlW3NdLHUrPSJsIityW3NdKyIsMCAiO2Zvcih1Kz0ibDAsIituKyIgIix1Kz0ibCAtIityW3IubGVuZ3RoLTFdKyIsMCAiLHM9ci5sZW5ndGgtMjtzPj0wO3MtLSl1Kz0iQyIrY1tzXSsiLCIrKGVbcysxXStuKSsiICIrbFtzXSsiLCIrKGVbc10rbikrIiAiKyh0W3NdK3Jbc10pKyIsIisoZVtzXStuKSx1Kz0ibC0iK3Jbc10rIiwwICI7cmV0dXJuIHUrPSJaIn1mdW5jdGlvbiBOKHQpe3ZhciBlPXQuZGltZW5zaW9ucyxyPXQubW9kZWwsbj1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSl9KSksaT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKX0pKSxhPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSksbz10LmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5kaW1lbnNpb25JbmR9KSkscz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKSxsPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKSxjPVtdO2Zvcih2YXIgdSBpbiByLnBhdGhzKXIucGF0aHMuaGFzT3duUHJvcGVydHkodSkmJmMucHVzaChyLnBhdGhzW3VdKTtmdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2F0ZWdvcnlJbmRzLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaVtlXVt0XX0pKTtyZXR1cm4gby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWMuc29ydCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1mKGUpLGk9ZihyKTtyZXR1cm4iYmFja3dhcmQiPT09dC5zb3J0cGF0aHMmJihuLnJldmVyc2UoKSxpLnJldmVyc2UoKSksbi5wdXNoKGUudmFsdWVJbmRzWzBdKSxpLnB1c2goci52YWx1ZUluZHNbMF0pLHQuYnVuZGxlY29sb3JzJiYobi51bnNoaWZ0KGUucmF3Q29sb3IpLGkudW5zaGlmdChyLnJhd0NvbG9yKSksbjxpPy0xOm4+aT8xOjB9KSk7Zm9yKHZhciBoPW5ldyBBcnJheShjLmxlbmd0aCkscD1lWzBdLm1vZGVsLmNvdW50LGQ9ZVswXS5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpLG09MDttPGMubGVuZ3RoO20rKyl7dmFyIGcsdj1jW21dO2c9cD4wP2QqKHYuY291bnQvcCk6MDtmb3IodmFyIHkseD1uZXcgQXJyYXkobi5sZW5ndGgpLGI9MDtiPHYuY2F0ZWdvcnlJbmRzLmxlbmd0aDtiKyspe3ZhciBfPXYuY2F0ZWdvcnlJbmRzW2JdLHc9aVtiXVtfXSxUPWFbYl07eFtUXT1uW1RdW3ddLG5bVF1bd10rPWc7dmFyIGs9dC5kaW1lbnNpb25zW1RdLmNhdGVnb3JpZXNbd10sQT1rLmJhbmRzLmxlbmd0aCxNPWsuYmFuZHNbQS0xXTtpZih2b2lkIDA9PT1NfHx2LnJhd0NvbG9yIT09TS5yYXdDb2xvcil7dmFyIFM9dm9pZCAwPT09TT8wOk0ueStNLmhlaWdodDtrLmJhbmRzLnB1c2goe2tleTpTLGNvbG9yOnYuY29sb3IscmF3Q29sb3I6di5yYXdDb2xvcixoZWlnaHQ6Zyx3aWR0aDprLndpZHRoLGNvdW50OnYuY291bnQseTpTLGNhdGVnb3J5Vmlld01vZGVsOmsscGFyY2F0c1ZpZXdNb2RlbDp0fSl9ZWxzZXt2YXIgRT1rLmJhbmRzW0EtMV07RS5oZWlnaHQrPWcsRS5jb3VudCs9di5jb3VudH19eT0iaHNwbGluZSI9PT10LnBhdGhTaGFwZT9CKHMseCxsLGcsLjUpOkIocyx4LGwsZywwKSxoW21dPXtrZXk6di52YWx1ZUluZHNbMF0sbW9kZWw6dixoZWlnaHQ6ZyxsZWZ0WHM6cyx0b3BZczp4LGRpbVdpZHRoczpsLHN2Z0Q6eSxwYXJjYXRzVmlld01vZGVsOnR9fXQucGF0aHM9aH1mdW5jdGlvbiBqKHQpe3ZhciBlPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxkaW1lbnNpb25JbmQ6dC5kaW1lbnNpb25JbmR9fSkpO2Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pKTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXS5kaW1lbnNpb25JbmQsYT10Lm1vZGVsLmRpbWVuc2lvbnNbaV07ci5wdXNoKFUodCxhKSl9dC5kaW1lbnNpb25zPXJ9ZnVuY3Rpb24gVSh0LGUpe3ZhciByLG49dC5tb2RlbC5kaW1lbnNpb25zLmxlbmd0aCxpPWUuZGlzcGxheUluZDtyPTQwKyhuPjE/KHQud2lkdGgtODAtMTYpLyhuLTEpOjApKmk7dmFyIGEsbyxzLGwsYyx1PVtdLGY9dC5tb2RlbC5tYXhDYXRzLGg9ZS5jYXRlZ29yaWVzLmxlbmd0aCxwPWUuY291bnQsZD10LmhlaWdodC04KihmLTEpLG09OCooZi1oKS8yLGc9ZS5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGNhdGVnb3J5SW5kOnQuY2F0ZWdvcnlJbmR9fSkpO2ZvcihnLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSksYz0wO2M8aDtjKyspbD1nW2NdLmNhdGVnb3J5SW5kLG89ZS5jYXRlZ29yaWVzW2xdLGE9cD4wP28uY291bnQvcCpkOjAscz17a2V5Om8udmFsdWVJbmRzWzBdLG1vZGVsOm8sd2lkdGg6MTYsaGVpZ2h0OmEseTpudWxsIT09by5kcmFnWT9vLmRyYWdZOm0sYmFuZHM6W10scGFyY2F0c1ZpZXdNb2RlbDp0fSxtPW0rYSs4LHUucHVzaChzKTtyZXR1cm57a2V5OmUuZGltZW5zaW9uSW5kLHg6bnVsbCE9PWUuZHJhZ1g/ZS5kcmFnWDpyLHk6MCx3aWR0aDoxNixtb2RlbDplLGNhdGVnb3JpZXM6dSxwYXJjYXRzVmlld01vZGVsOnQsZHJhZ0NhdGVnb3J5RGlzcGxheUluZDpudWxsLGRyYWdEaW1lbnNpb25EaXNwbGF5SW5kOm51bGwsaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kczpudWxsLGluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kczpudWxsLGRyYWdIYXNNb3ZlZDpudWxsLHBvdGVudGlhbENsaWNrQmFuZDpudWxsfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aChyLHQsbixlKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaSI6NTQwLCJAcGxvdGx5L2QzIjo1OCwiZDMtaW50ZXJwb2xhdGUiOjExNix0aW55Y29sb3IyOjMxMn1dLDg4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNhdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dC5fZnVsbExheW91dCxvPWEuX3BhcGVyLHM9YS5fc2l6ZTtuKHQsbyxlLHt3aWR0aDpzLncsaGVpZ2h0OnMuaCxtYXJnaW46e3Q6cy50LHI6cy5yLGI6cy5iLGw6cy5sfX0scixpKX19LHsiLi9wYXJjYXRzIjo4ODZ9XSw4ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXtkb21haW46byh7bmFtZToicGFyY29vcmRzIix0cmFjZTohMCxlZGl0VHlwZToicGxvdCJ9KSxsYWJlbGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sbGFiZWxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJwbG90In0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJwbG90In0pLHJhbmdlZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSxkaW1lbnNpb25zOmwoImRpbWVuc2lvbiIse2xhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sdGlja3ZhbHM6cyh7fSxpLnRpY2t2YWxzLHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrdGV4dDpzKHt9LGkudGlja3RleHQse2VkaXRUeXBlOiJwbG90In0pLHRpY2tmb3JtYXQ6cyh7fSxpLnRpY2tmb3JtYXQse2VkaXRUeXBlOiJwbG90In0pLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZGltZW5zaW9uczoiMS0yIixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LG11bHRpc2VsZWN0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0pLGxpbmU6cyh7ZWRpdFR5cGU6ImNhbGMifSxuKCJsaW5lIix7Y29sb3JzY2FsZURmbHQ6IlZpcmlkaXMiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NTQzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjU2OSwiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1fV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJAcGxvdGx5L2QzIiksYT10KCIuLi8uLi9saWIvZ3VwIikua2V5RnVuLG89dCgiLi4vLi4vbGliL2d1cCIpLnJlcGVhdCxzPXQoIi4uLy4uL2xpYiIpLnNvcnRlckFzYyxsPXQoIi4uLy4uL2xpYiIpLnN0clRyYW5zbGF0ZSxjPW4uYmFyLnNuYXBSYXRpbztmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQqKDEtYykrZSpjfXZhciBmPW4uYmFyLnNuYXBDbG9zZTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQqKDEtZikrZSpmfWZ1bmN0aW9uIHAodCxlLHIsbil7aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZih0Pj1lW3JdWzBdJiZ0PD1lW3JdWzFdKXJldHVybiEwO3JldHVybiExfShyLG4pKXJldHVybiByO3ZhciBpPXQ/LTE6MSxhPTAsbz1lLmxlbmd0aC0xO2lmKGk8MCl7dmFyIHM9YTthPW8sbz1zfWZvcih2YXIgbD1lW2FdLGM9bCxmPWE7aSpmPGkqbztmKz1pKXt2YXIgcD1mK2ksZD1lW3BdO2lmKGkqcjxpKmgobCxkKSlyZXR1cm4gdShsLGMpO2lmKGkqcjxpKmR8fHA9PT1vKXJldHVybiB1KGQsbCk7Yz1sLGw9ZH19ZnVuY3Rpb24gZCh0KXt0LmF0dHIoIngiLC1uLmJhci5jYXB0dXJlV2lkdGgvMikuYXR0cigid2lkdGgiLG4uYmFyLmNhcHR1cmVXaWR0aCl9ZnVuY3Rpb24gbSh0KXt0LmF0dHIoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikuYXR0cigiZmlsbCIsInllbGxvdyIpLmF0dHIoIm9wYWNpdHkiLDApfWZ1bmN0aW9uIGcodCl7aWYoIXQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkKXJldHVybiIwLCIrdC5oZWlnaHQ7Zm9yKHZhciBlLHIsbixpPXYodC5icnVzaC5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksdC5oZWlnaHQpLGE9WzBdLG89aS5sZW5ndGg/aVswXVswXTpudWxsLHM9MDtzPGkubGVuZ3RoO3MrKylyPShlPWlbc10pWzFdLWVbMF0sYS5wdXNoKG8pLGEucHVzaChyKSwobj1zKzEpPGkubGVuZ3RoJiYobz1pW25dWzBdLWVbMV0pO3JldHVybiBhLnB1c2godC5oZWlnaHQpLGF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCx0KmUpfSkpLnNvcnQocyl9KSl9ZnVuY3Rpb24geSgpe2kuc2VsZWN0KGRvY3VtZW50LmJvZHkpLnN0eWxlKCJjdXJzb3IiLG51bGwpfWZ1bmN0aW9uIHgodCl7dC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixnKX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9aS5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LCAuaGlnaGxpZ2h0LXNoYWRvdyIpO3goZT9yLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLmJhci5zbmFwRHVyYXRpb24pLmVhY2goImVuZCIsZSk6cil9ZnVuY3Rpb24gXyh0LGUpe3ZhciByLGk9dC5icnVzaCxhPU5hTixvPXt9O2lmKGkuZmlsdGVyU3BlY2lmaWVkKXt2YXIgcz10LmhlaWdodCxsPWkuZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLGM9dihsLHMpLHU9TmFOLGY9TmFOLGg9TmFOO2ZvcihyPTA7cjw9Yy5sZW5ndGg7cisrKXt2YXIgcD1jW3JdO2lmKHAmJnBbMF08PWUmJmU8PXBbMV0pe3U9cjticmVha31pZihmPXI/ci0xOk5hTixwJiZwWzBdPmUpe2g9cjticmVha319aWYoYT11LGlzTmFOKGEpJiYoYT1pc05hTihmKXx8aXNOYU4oaCk/aXNOYU4oZik/aDpmOmUtY1tmXVsxXTxjW2hdWzBdLWU/ZjpoKSwhaXNOYU4oYSkpe3ZhciBkPWNbYV0sbT1mdW5jdGlvbih0LGUpe3ZhciByPW4uYmFyLmhhbmRsZUhlaWdodDtpZighKGU+dFsxXStyfHxlPHRbMF0tcikpcmV0dXJuIGU+PS45KnRbMV0rLjEqdFswXT8ibiI6ZTw9LjkqdFswXSsuMSp0WzFdPyJzIjoibnMifShkLGUpO20mJihvLmludGVydmFsPWxbYV0sby5pbnRlcnZhbFBpeD1kLG8ucmVnaW9uPW0pfX1pZih0Lm9yZGluYWwmJiFvLnJlZ2lvbil7dmFyIGc9dC51bml0VGlja3ZhbHMseT10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKTtmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKXt2YXIgeD1bLjI1KmdbTWF0aC5tYXgoci0xLDApXSsuNzUqZ1tyXSwuMjUqZ1tNYXRoLm1pbihyKzEsZy5sZW5ndGgtMSldKy43NSpnW3JdXTtpZih5Pj14WzBdJiZ5PD14WzFdKXtvLmNsaWNrYWJsZU9yZGluYWxSYW5nZT14O2JyZWFrfX19cmV0dXJuIG99ZnVuY3Rpb24gdyh0LGUpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIHI9ZS5oZWlnaHQtaS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nLGE9ZS5icnVzaC5zdmdCcnVzaDthLndhc0RyYWdnZWQ9ITAsYS5fZHJhZ2dpbmc9ITAsYS5ncmFiYmluZ0Jhcj9hLm5ld0V4dGVudD1bci1hLmdyYWJQb2ludCxyK2EuYmFyTGVuZ3RoLWEuZ3JhYlBvaW50XS5tYXAoZS51bml0VG9QYWRkZWRQeC5pbnZlcnQpOmEubmV3RXh0ZW50PVthLnN0YXJ0RXh0ZW50LGUudW5pdFRvUGFkZGVkUHguaW52ZXJ0KHIpXS5zb3J0KHMpLGUuYnJ1c2guZmlsdGVyU3BlY2lmaWVkPSEwLGEuZXh0ZW50PWEuc3RheWluZ0ludGVydmFscy5jb25jYXQoW2EubmV3RXh0ZW50XSksYS5icnVzaENhbGxiYWNrKGUpLGIodC5wYXJlbnROb2RlKX1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9XyhlLGUuaGVpZ2h0LWkubW91c2UodClbMV0tMipuLnZlcnRpY2FsUGFkZGluZyksYT0iY3Jvc3NoYWlyIjtyLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9hPSJwb2ludGVyIjpyLnJlZ2lvbiYmKGE9ci5yZWdpb24rIi1yZXNpemUiKSxpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZSgiY3Vyc29yIixhKX1mdW5jdGlvbiBrKHQpe3Qub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKHQpe2kuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LnBhcmVudC5pbkJydXNoRHJhZ3x8VCh0aGlzLHQpfSkpLm9uKCJtb3VzZWxlYXZlIiwoZnVuY3Rpb24odCl7dC5wYXJlbnQuaW5CcnVzaERyYWd8fHkoKX0pKS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciByPWUuaGVpZ2h0LWkubW91c2UodClbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxhPWUudW5pdFRvUGFkZGVkUHguaW52ZXJ0KHIpLG89ZS5icnVzaCxzPV8oZSxyKSxsPXMuaW50ZXJ2YWwsYz1vLnN2Z0JydXNoO2lmKGMud2FzRHJhZ2dlZD0hMSxjLmdyYWJiaW5nQmFyPSJucyI9PT1zLnJlZ2lvbixjLmdyYWJiaW5nQmFyKXt2YXIgdT1sLm1hcChlLnVuaXRUb1BhZGRlZFB4KTtjLmdyYWJQb2ludD1yLXVbMF0tbi52ZXJ0aWNhbFBhZGRpbmcsYy5iYXJMZW5ndGg9dVsxXS11WzBdfWMuY2xpY2thYmxlT3JkaW5hbFJhbmdlPXMuY2xpY2thYmxlT3JkaW5hbFJhbmdlLGMuc3RheWluZ0ludGVydmFscz1lLm11bHRpc2VsZWN0JiZvLmZpbHRlclNwZWNpZmllZD9vLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKTpbXSxsJiYoYy5zdGF5aW5nSW50ZXJ2YWxzPWMuc3RheWluZ0ludGVydmFscy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdIT09bFswXSYmdFsxXSE9PWxbMV19KSkpLGMuc3RhcnRFeHRlbnQ9cy5yZWdpb24/bFsicyI9PT1zLnJlZ2lvbj8xOjBdOmEsZS5wYXJlbnQuaW5CcnVzaERyYWc9ITAsYy5icnVzaFN0YXJ0Q2FsbGJhY2soKX0odGhpcyx0KX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKHQpe3codGhpcyx0KX0pKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe3ZhciByPWUuYnJ1c2gsbj1yLmZpbHRlcixhPXIuc3ZnQnJ1c2g7YS5fZHJhZ2dpbmd8fChUKHQsZSksdyh0LGUpLGUuYnJ1c2guc3ZnQnJ1c2gud2FzRHJhZ2dlZD0hMSksYS5fZHJhZ2dpbmc9ITEsaS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgbz1hLmdyYWJiaW5nQmFyO2lmKGEuZ3JhYmJpbmdCYXI9ITEsYS5ncmFiTG9jYXRpb249dm9pZCAwLGUucGFyZW50LmluQnJ1c2hEcmFnPSExLHkoKSwhYS53YXNEcmFnZ2VkKXJldHVybiBhLndhc0RyYWdnZWQ9dm9pZCAwLGEuY2xpY2thYmxlT3JkaW5hbFJhbmdlP3IuZmlsdGVyU3BlY2lmaWVkJiZlLm11bHRpc2VsZWN0P2EuZXh0ZW50LnB1c2goYS5jbGlja2FibGVPcmRpbmFsUmFuZ2UpOihhLmV4dGVudD1bYS5jbGlja2FibGVPcmRpbmFsUmFuZ2VdLHIuZmlsdGVyU3BlY2lmaWVkPSEwKTpvPyhhLmV4dGVudD1hLnN0YXlpbmdJbnRlcnZhbHMsMD09PWEuZXh0ZW50Lmxlbmd0aCYmTShyKSk6TShyKSxhLmJydXNoQ2FsbGJhY2soZSksYih0LnBhcmVudE5vZGUpLHZvaWQgYS5icnVzaEVuZENhbGxiYWNrKHIuZmlsdGVyU3BlY2lmaWVkP24uZ2V0Q29uc29saWRhdGVkKCk6W10pO3ZhciBzPWZ1bmN0aW9uKCl7bi5zZXQobi5nZXRDb25zb2xpZGF0ZWQoKSl9O2lmKGUub3JkaW5hbCl7dmFyIGw9ZS51bml0VGlja3ZhbHM7bFtsLmxlbmd0aC0xXTxsWzBdJiZsLnJldmVyc2UoKSxhLm5ld0V4dGVudD1bcCgwLGwsYS5uZXdFeHRlbnRbMF0sYS5zdGF5aW5nSW50ZXJ2YWxzKSxwKDEsbCxhLm5ld0V4dGVudFsxXSxhLnN0YXlpbmdJbnRlcnZhbHMpXTt2YXIgYz1hLm5ld0V4dGVudFsxXT5hLm5ld0V4dGVudFswXTthLmV4dGVudD1hLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KGM/W2EubmV3RXh0ZW50XTpbXSksYS5leHRlbnQubGVuZ3RofHxNKHIpLGEuYnJ1c2hDYWxsYmFjayhlKSxjP2IodC5wYXJlbnROb2RlLHMpOihzKCksYih0LnBhcmVudE5vZGUpKX1lbHNlIHMoKTthLmJydXNoRW5kQ2FsbGJhY2soci5maWx0ZXJTcGVjaWZpZWQ/bi5nZXRDb25zb2xpZGF0ZWQoKTpbXSl9KHRoaXMsdCl9KSkpfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIE0odCl7dC5maWx0ZXJTcGVjaWZpZWQ9ITEsdC5zdmdCcnVzaC5leHRlbnQ9W1stMS8wLDEvMF1dfWZ1bmN0aW9uIFModCl7Zm9yKHZhciBlLHI9dC5zbGljZSgpLG49W10saT1yLnNoaWZ0KCk7aTspe2ZvcihlPWkuc2xpY2UoKTsoaT1yLnNoaWZ0KCkpJiZpWzBdPD1lWzFdOyllWzFdPU1hdGgubWF4KGVbMV0saVsxXSk7bi5wdXNoKGUpfXJldHVybiAxPT09bi5sZW5ndGgmJm5bMF1bMF0+blswXVsxXSYmKG49W10pLG59ZS5leHBvcnRzPXttYWtlQnJ1c2g6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLGw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9W107cmV0dXJue3NldDpmdW5jdGlvbihuKXsxPT09KHI9bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCkuc29ydChzKX0pKS5zb3J0KEEpKS5sZW5ndGgmJnJbMF1bMF09PT0tMS8wJiZyWzBdWzFdPT09MS8wJiYocj1bWzAsLTFdXSksdD1TKHIpLGU9ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW01hdGgubWluKHRbMF0sZVswXSksTWF0aC5tYXgodFsxXSxlWzFdKV19KSxbMS8wLC0xLzBdKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sZ2V0Q29uc29saWRhdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHR9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiBlfX19KCk7cmV0dXJuIGwuc2V0KHIpLHtmaWx0ZXI6bCxmaWx0ZXJTcGVjaWZpZWQ6ZSxzdmdCcnVzaDp7ZXh0ZW50OltdLGJydXNoU3RhcnRDYWxsYmFjazpuLGJydXNoQ2FsbGJhY2s6KG89aSxmdW5jdGlvbih0KXt2YXIgZT10LmJydXNoLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnQnJ1c2guZXh0ZW50Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pKX0oZSkuc2xpY2UoKTtlLmZpbHRlci5zZXQociksbygpfSksYnJ1c2hFbmRDYWxsYmFjazphfX19LGVuc3VyZUF4aXNCcnVzaDpmdW5jdGlvbih0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCIuIituLmNuLmF4aXNCcnVzaCkuZGF0YShvLGEpO3IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uYXhpc0JydXNoLCEwKSxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEobyk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5jYWxsKGQpLmNhbGwobSkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsbCgwLG4udmVydGljYWxQYWRkaW5nKSksci5jYWxsKGspLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodC1uLnZlcnRpY2FsUGFkZGluZ30pKTt2YXIgaT10LnNlbGVjdEFsbCgiLmhpZ2hsaWdodC1zaGFkb3ciKS5kYXRhKG8pO2kuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQtc2hhZG93IiwhMCkuYXR0cigieCIsLW4uYmFyLndpZHRoLzIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5iYXIud2lkdGgrbi5iYXIuc3Ryb2tlV2lkdGgpLmF0dHIoInN0cm9rZSIsZSkuYXR0cigib3BhY2l0eSIsbi5iYXIuc3Ryb2tlT3BhY2l0eSkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0IiksaS5hdHRyKCJ5MSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5jYWxsKHgpO3ZhciBhPXQuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0IikuZGF0YShvKTthLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiaGlnaGxpZ2h0IiwhMCkuYXR0cigieCIsLW4uYmFyLndpZHRoLzIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5iYXIud2lkdGgtbi5iYXIuc3Ryb2tlV2lkdGgpLmF0dHIoInN0cm9rZSIsbi5iYXIuZmlsbENvbG9yKS5hdHRyKCJvcGFjaXR5IixuLmJhci5maWxsT3BhY2l0eSkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0IiksYS5hdHRyKCJ5MSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5jYWxsKHgpfShyLGUpfSxjbGVhblJhbmdlczpmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodFswXSk/KHQ9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvcnQocyl9KSksdD1lLm11bHRpc2VsZWN0P1ModC5zb3J0KEEpKTpbdFswXV0pOnQ9W3Quc29ydChzKV0sZS50aWNrdmFscyl7dmFyIHI9ZS50aWNrdmFscy5zbGljZSgpLnNvcnQocyk7aWYoISh0PXQubWFwKChmdW5jdGlvbih0KXt2YXIgZT1bcCgwLHIsdFswXSxbXSkscCgxLHIsdFsxXSxbXSldO2lmKGVbMV0+ZVswXSlyZXR1cm4gZX0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKS5sZW5ndGgpcmV0dXJufXJldHVybiB0Lmxlbmd0aD4xP3Q6dFswXX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ3VwIjo1MDAsIi4vY29uc3RhbnRzIjo4OTIsIkBwbG90bHkvZDMiOjU4fV0sODkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ci5uYW1lPSJwYXJjb29yZHMiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInBhcmNvb3JkcyIpWzBdO2UubGVuZ3RoJiZhKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBhcmNvb3JkcyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNvb3JkcyIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY29vcmRzIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pKS5zZWxlY3RBbGwoIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1cyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMuc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuc3R5bGUuaGVpZ2h0fSl9KSksd2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5zZWxlY3RBbGwoIiNmaWx0ZXJCYXJQYXR0ZXJuIikuYXR0cigiaWQiLCJmaWx0ZXJCYXJQYXR0ZXJuIil9KSw2MCl9fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo0ODAsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo1OTMsIi4vcGxvdCI6ODk5LCJAcGxvdGx5L2QzIjo1OH1dLDg5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvO3JldHVybiBpLmhhc0NvbG9yc2NhbGUoZSwibGluZSIpJiZuKGUubGluZS5jb2xvcik/KHI9ZS5saW5lLmNvbG9yLG89aS5leHRyYWN0T3B0cyhlLmxpbmUpLmNvbG9yc2NhbGUsaS5jYWxjKHQsZSx7dmFsczpyLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSk6KHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPS41O3JldHVybiBlfShlLl9sZW5ndGgpLG89W1swLGUubGluZS5jb2xvcl0sWzEsZS5saW5lLmNvbG9yXV0pLGEoe2xpbmVDb2xvcjpyLGNzY2FsZTpvfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6Mzc4LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2d1cCI6NTAwfV0sODkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUsdmVydGljYWxQYWRkaW5nOjIsdGlja0Rpc3RhbmNlOjUwLGNhbnZhc1BpeGVsUmF0aW86MSxibG9ja0xpbmVDb3VudDo1ZTMsbGF5ZXJzOlsiY29udGV4dExpbmVMYXllciIsImZvY3VzTGluZUxheWVyIiwicGlja0xpbmVMYXllciJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGRlc2VsZWN0ZWRMaW5lQ29sb3I6IiM3NzciLGJhcjp7d2lkdGg6NCxjYXB0dXJlV2lkdGg6MTAsZmlsbENvbG9yOiJtYWdlbnRhIixmaWxsT3BhY2l0eToxLHNuYXBEdXJhdGlvbjoxNTAsc25hcFJhdGlvOi4yNSxzbmFwQ2xvc2U6LjAxLHN0cm9rZU9wYWNpdHk6MSxzdHJva2VXaWR0aDoxLGhhbmRsZUhlaWdodDo4LGhhbmRsZU9wYWNpdHk6MSxoYW5kbGVPdmVybGFwOjB9LGNuOntheGlzRXh0ZW50VGV4dDoiYXhpcy1leHRlbnQtdGV4dCIscGFyY29vcmRzTGluZUxheWVyczoicGFyY29vcmRzLWxpbmUtbGF5ZXJzIixwYXJjb29yZHNMaW5lTGF5ZXI6InBhcmNvb3Jkcy1saW5lcyIscGFyY29vcmRzOiJwYXJjb29yZHMiLHBhcmNvb3Jkc0NvbnRyb2xWaWV3OiJwYXJjb29yZHMtY29udHJvbC12aWV3Iix5QXhpczoieS1heGlzIixheGlzT3ZlcmxheXM6ImF4aXMtb3ZlcmxheXMiLGF4aXM6ImF4aXMiLGF4aXNIZWFkaW5nOiJheGlzLWhlYWRpbmciLGF4aXNUaXRsZToiYXhpcy10aXRsZSIsYXhpc0V4dGVudDoiYXhpcy1leHRlbnQiLGF4aXNFeHRlbnRUb3A6ImF4aXMtZXh0ZW50LXRvcCIsYXhpc0V4dGVudFRvcFRleHQ6ImF4aXMtZXh0ZW50LXRvcC10ZXh0IixheGlzRXh0ZW50Qm90dG9tOiJheGlzLWV4dGVudC1ib3R0b20iLGF4aXNFeHRlbnRCb3R0b21UZXh0OiJheGlzLWV4dGVudC1ib3R0b20tdGV4dCIsYXhpc0JydXNoOiJheGlzLWJydXNoIn0saWQ6e2ZpbHRlckJhclBhdHRlcm46ImZpbHRlci1iYXItcGF0dGVybiJ9fX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuL2F0dHJpYnV0ZXMiKSx1PXQoIi4vYXhpc2JydXNoIiksZj10KCIuL2NvbnN0YW50cyIpLm1heERpbWVuc2lvbkNvdW50LGg9dCgiLi9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiBwKHQsZSxyLGkpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMuZGltZW5zaW9ucyxyLGkpfXZhciBvPWEoInZhbHVlcyIpLHM9YSgidmlzaWJsZSIpO2lmKG8mJm8ubGVuZ3RofHwocz1lLnZpc2libGU9ITEpLHMpe2EoImxhYmVsIiksYSgidGlja3ZhbHMiKSxhKCJ0aWNrdGV4dCIpLGEoInRpY2tmb3JtYXQiKTt2YXIgZj1hKCJyYW5nZSIpO2UuX2F4PXtfaWQ6InkiLHR5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIixyYW5nZTpmfSxsLnNldENvbnZlcnQoZS5fYXgsaS5sYXlvdXQpLGEoIm11bHRpc2VsZWN0Iik7dmFyIGg9YSgiY29uc3RyYWludHJhbmdlIik7aCYmKGUuY29uc3RyYWludHJhbmdlPXUuY2xlYW5SYW5nZXMoaCxlKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9dmFyIGQ9dC5kaW1lbnNpb25zO0FycmF5LmlzQXJyYXkoZCkmJmQubGVuZ3RoPmYmJihuLmxvZygicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvICIrZisiIGRpbWVuc2lvbnMgYXQgdGhlIG1vbWVudCIpLGQuc3BsaWNlKGYpKTt2YXIgbT1zKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsbGF5b3V0OmwsaGFuZGxlSXRlbURlZmF1bHRzOnB9KSxnPWZ1bmN0aW9uKHQsZSxyLG8scyl7dmFyIGw9cygibGluZS5jb2xvciIscik7aWYoaSh0LCJsaW5lIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoImxpbmUuY29sb3JzY2FsZSIpLGEodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixsLHUpO28oZSxsLHUpLEFycmF5LmlzQXJyYXkobSkmJm0ubGVuZ3RofHwoZS52aXNpYmxlPSExKSxoKGUsbSwidmFsdWVzIixnKTt2YXIgdj17ZmFtaWx5OmwuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGwuZm9udC5zaXplLzEuMiksY29sb3I6bC5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQodSwibGFiZWxmb250Iix2KSxuLmNvZXJjZUZvbnQodSwidGlja2ZvbnQiLHYpLG4uY29lcmNlRm9udCh1LCJyYW5nZWZvbnQiLHYpLHUoImxhYmVsYW5nbGUiKSx1KCJsYWJlbHNpZGUiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjozNzYsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjozNzcsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjU0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4vYXR0cmlidXRlcyI6ODg4LCIuL2F4aXNicnVzaCI6ODg5LCIuL2NvbnN0YW50cyI6ODkyLCIuL21lcmdlX2xlbmd0aCI6ODk3fV0sODk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzVHlwZWRBcnJheTtyLmNvbnZlcnRUeXBlZEFycmF5PWZ1bmN0aW9uKHQpe3JldHVybiBuKHQpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpOnR9LHIuaXNPcmRpbmFsPWZ1bmN0aW9uKHQpe3JldHVybiEhdC50aWNrdmFsc30sci5pc1Zpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZXx8ISgidmlzaWJsZSJpbiB0KX19LHsiLi4vLi4vbGliIjo1MDN9XSw4OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicGFyY29vcmRzIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJub09wYWNpdHkiLCJub0hvdmVyIl0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjo4ODgsIi4vYmFzZV9wbG90Ijo4OTAsIi4vY2FsYyI6ODkxLCIuL2RlZmF1bHRzIjo4OTMsIi4vcGxvdCI6ODk5fV0sODk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5hdHRyaWJ1dGUgdmVjNCBwMDFfMDQsIHAwNV8wOCwgcDA5XzEyLCBwMTNfMTYsXG4gICAgICAgICAgICAgICBwMTdfMjAsIHAyMV8yNCwgcDI1XzI4LCBwMjlfMzIsXG4gICAgICAgICAgICAgICBwMzNfMzYsIHAzN180MCwgcDQxXzQ0LCBwNDVfNDgsXG4gICAgICAgICAgICAgICBwNDlfNTIsIHA1M181NiwgcDU3XzYwLCBjb2xvcnM7XG5cbnVuaWZvcm0gbWF0NCBkaW0wQSwgZGltMUEsIGRpbTBCLCBkaW0xQiwgZGltMEMsIGRpbTFDLCBkaW0wRCwgZGltMUQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLCB2aWV3Qm94UG9zLCB2aWV3Qm94U2l6ZTtcbnVuaWZvcm0gZmxvYXQgbWFza0hlaWdodDtcbnVuaWZvcm0gZmxvYXQgZHJ3TGF5ZXI7IC8vIDA6IGNvbnRleHQsIDE6IGZvY3VzLCAyOiBwaWNrXG51bmlmb3JtIHZlYzQgY29udGV4dENvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgbWFza1RleHR1cmUsIHBhbGV0dGU7XG5cbmJvb2wgaXNQaWNrICAgID0gKGRyd0xheWVyID4gMS41KTtcbmJvb2wgaXNDb250ZXh0ID0gKGRyd0xheWVyIDwgMC41KTtcblxuY29uc3QgdmVjNCBaRVJPUyA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbmNvbnN0IHZlYzQgVU5JVFMgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiBVTklUUywgVU5JVFMpO1xufVxuXG5mbG9hdCBheGlzWShmbG9hdCByYXRpbywgbWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgZmxvYXQgeTEgPSB2YWwoQSwgZGltMEEpICsgdmFsKEIsIGRpbTBCKSArIHZhbChDLCBkaW0wQykgKyB2YWwoRCwgZGltMEQpO1xuICAgIGZsb2F0IHkyID0gdmFsKEEsIGRpbTFBKSArIHZhbChCLCBkaW0xQikgKyB2YWwoQywgZGltMUMpICsgdmFsKEQsIGRpbTFEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0gcmF0aW8pICsgeTIgKiByYXRpbztcbn1cblxuaW50IGlNb2QoaW50IGEsIGludCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiICogKGEgLyBiKTtcbn1cblxuYm9vbCBmT3V0c2lkZShmbG9hdCBwLCBmbG9hdCBsbywgZmxvYXQgaGkpIHtcbiAgICByZXR1cm4gKGxvIDwgaGkpICYmIChsbyA+IHAgfHwgcCA+IGhpKTtcbn1cblxuYm9vbCB2T3V0c2lkZSh2ZWM0IHAsIHZlYzQgbG8sIHZlYzQgaGkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBmT3V0c2lkZShwWzBdLCBsb1swXSwgaGlbMF0pIHx8XG4gICAgICAgIGZPdXRzaWRlKHBbMV0sIGxvWzFdLCBoaVsxXSkgfHxcbiAgICAgICAgZk91dHNpZGUocFsyXSwgbG9bMl0sIGhpWzJdKSB8fFxuICAgICAgICBmT3V0c2lkZShwWzNdLCBsb1szXSwgaGlbM10pXG4gICAgKTtcbn1cblxuYm9vbCBtT3V0c2lkZShtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB2T3V0c2lkZShwWzBdLCBsb1swXSwgaGlbMF0pIHx8XG4gICAgICAgIHZPdXRzaWRlKHBbMV0sIGxvWzFdLCBoaVsxXSkgfHxcbiAgICAgICAgdk91dHNpZGUocFsyXSwgbG9bMl0sIGhpWzJdKSB8fFxuICAgICAgICB2T3V0c2lkZShwWzNdLCBsb1szXSwgaGlbM10pXG4gICAgKTtcbn1cblxuYm9vbCBvdXRzaWRlQm91bmRpbmdCb3gobWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgcmV0dXJuIG1PdXRzaWRlKEEsIGxvQSwgaGlBKSB8fFxuICAgICAgICAgICBtT3V0c2lkZShCLCBsb0IsIGhpQikgfHxcbiAgICAgICAgICAgbU91dHNpZGUoQywgbG9DLCBoaUMpIHx8XG4gICAgICAgICAgIG1PdXRzaWRlKEQsIGxvRCwgaGlEKTtcbn1cblxuYm9vbCBvdXRzaWRlUmFzdGVyTWFzayhtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBtYXQ0IHBudHNbNF07XG4gICAgcG50c1swXSA9IEE7XG4gICAgcG50c1sxXSA9IEI7XG4gICAgcG50c1syXSA9IEM7XG4gICAgcG50c1szXSA9IEQ7XG5cbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyArK2opIHtcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyArK2spIHtcbiAgICAgICAgICAgICAgICBpZigwID09IGlNb2QoXG4gICAgICAgICAgICAgICAgICAgIGludCgyNTUuMCAqIHRleHR1cmUyRChtYXNrVGV4dHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KGkgKiAyICsgaiAvIDIpICsgMC41KSAvIDguMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG50c1tpXVtqXVtrXSAqIChtYXNrSGVpZ2h0IC0gMS4wKSArIDEuMCkgLyBtYXNrSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICApKVszXVxuICAgICAgICAgICAgICAgICAgICApIC8gaW50KHBvdygyLjAsIGZsb2F0KGlNb2QoaiAqIDQgKyBrLCA4KSkpKSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmVjNCBwb3NpdGlvbihib29sIGlzQ29udGV4dCwgZmxvYXQgdiwgbWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ24odikgKyAwLjU7XG4gICAgZmxvYXQgeSA9IGF4aXNZKHgsIEEsIEIsIEMsIEQpO1xuICAgIGZsb2F0IHogPSAxLjAgLSBhYnModik7XG5cbiAgICB6ICs9IGlzQ29udGV4dCA/IDAuMCA6IDIuMCAqIGZsb2F0KFxuICAgICAgICBvdXRzaWRlQm91bmRpbmdCb3goQSwgQiwgQywgRCkgfHxcbiAgICAgICAgb3V0c2lkZVJhc3Rlck1hc2soQSwgQiwgQywgRClcbiAgICApO1xuXG4gICAgcmV0dXJuIHZlYzQoXG4gICAgICAgIDIuMCAqICh2ZWMyKHgsIHkpICogdmlld0JveFNpemUgKyB2aWV3Qm94UG9zKSAvIHJlc29sdXRpb24gLSAxLjAsXG4gICAgICAgIHosXG4gICAgICAgIDEuMFxuICAgICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgICBtYXQ0IEEgPSBtYXQ0KHAwMV8wNCwgcDA1XzA4LCBwMDlfMTIsIHAxM18xNik7XG4gICAgbWF0NCBCID0gbWF0NChwMTdfMjAsIHAyMV8yNCwgcDI1XzI4LCBwMjlfMzIpO1xuICAgIG1hdDQgQyA9IG1hdDQocDMzXzM2LCBwMzdfNDAsIHA0MV80NCwgcDQ1XzQ4KTtcbiAgICBtYXQ0IEQgPSBtYXQ0KHA0OV81MiwgcDUzXzU2LCBwNTdfNjAsIFpFUk9TKTtcblxuICAgIGZsb2F0IHYgPSBjb2xvcnNbM107XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKGlzQ29udGV4dCwgdiwgQSwgQiwgQywgRCk7XG5cbiAgICBmcmFnQ29sb3IgPVxuICAgICAgICBpc0NvbnRleHQgPyB2ZWM0KGNvbnRleHRDb2xvcikgOlxuICAgICAgICBpc1BpY2sgPyB2ZWM0KGNvbG9ycy5yZ2IsIDEuMCkgOiB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMihhYnModiksIDAuNSkpO1xufVxuIl0pLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iXSksbz10KCIuL2NvbnN0YW50cyIpLm1heERpbWVuc2lvbkNvdW50LHM9dCgiLi4vLi4vbGliIiksbD1uZXcgVWludDhBcnJheSg0KSxjPW5ldyBVaW50OEFycmF5KDQpLHU9e3NoYXBlOlsyNTYsMV0sZm9ybWF0OiJyZ2JhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QifTtmdW5jdGlvbiBmKHQsZSxyLG4saSl7dmFyIGE9dC5fZ2w7YS5lbmFibGUoYS5TQ0lTU09SX1RFU1QpLGEuc2Npc3NvcihlLHIsbixpKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBvPWEua2V5O3IuZHJhd0NvbXBsZXRlZHx8KCFmdW5jdGlvbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOmx9KX0odCksci5kcmF3Q29tcGxldGVkPSEwKSxmdW5jdGlvbiBzKGwpe3ZhciBjPU1hdGgubWluKG4saS1sKm4pOzA9PT1sJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIuY3VycmVudFJhZnNbb10pLGRlbGV0ZSByLmN1cnJlbnRSYWZzW29dLGYodCxhLnNjaXNzb3JYLGEuc2Npc3NvclksYS5zY2lzc29yV2lkdGgsYS52aWV3Qm94U2l6ZVsxXSkpLHIuY2xlYXJPbmx5fHwoYS5jb3VudD0yKmMsYS5vZmZzZXQ9MipsKm4sZShhKSxsKm4rYzxpJiYoci5jdXJyZW50UmFmc1tvXT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3MobCsxKX0pKSksci5kcmF3Q29tcGxldGVkPSExKX0oMCl9ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoMjU2KSxuPTA7bjwyNTY7bisrKXJbbl09dChuLzI1NSkuY29uY2F0KGUpO3JldHVybiByfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4odD4+PjgqZSklMjU2LzI1NX1mdW5jdGlvbiBtKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KDgqZSksaT0wLGE9MDthPGU7YSsrKWZvcih2YXIgbz0wO288MjtvKyspZm9yKHZhciBzPTA7czw0O3MrKyl7dmFyIGw9NCp0K3MsYz1yWzY0KmErbF07NjM9PT1sJiYwPT09byYmKGMqPS0xKSxuW2krK109Y31yZXR1cm4gbn1mdW5jdGlvbiBnKHQpe3ZhciBlPSIwIit0O3JldHVybiBlLnN1YnN0cihlLmxlbmd0aC0yKX1mdW5jdGlvbiB2KHQpe3JldHVybiB0PG8/InAiK2codCsxKSsiXyIrZyh0KzQpOiJjb2xvcnMifWZ1bmN0aW9uIHkodCxlLHIsbixpLGEsbyxsLGMsdSxmLGgscCxkKXtmb3IodmFyIG09W1tdLFtdXSxnPTA7Zzw2NDtnKyspbVswXVtnXT1nPT09aT8xOjAsbVsxXVtnXT1nPT09YT8xOjA7byo9ZCxsKj1kLGMqPWQsdSo9ZDt2YXIgdj10LmxpbmVzLmNhbnZhc092ZXJkcmFnKmQseT10LmRvbWFpbix4PXQuY2FudmFzV2lkdGgqZCxiPXQuY2FudmFzSGVpZ2h0KmQsXz10LnBhZC5sKmQsdz10LnBhZC5iKmQsVD10LmxheW91dEhlaWdodCpkLGs9dC5sYXlvdXRXaWR0aCpkLEE9dC5kZXNlbGVjdGVkTGluZXMuY29sb3I7cmV0dXJuIHMuZXh0ZW5kRmxhdCh7a2V5OmYscmVzb2x1dGlvbjpbeCxiXSx2aWV3Qm94UG9zOltvK3YsbF0sdmlld0JveFNpemU6W2MsdV0saTA6aSxpMTphLGRpbTBBOm1bMF0uc2xpY2UoMCwxNiksZGltMEI6bVswXS5zbGljZSgxNiwzMiksZGltMEM6bVswXS5zbGljZSgzMiw0OCksZGltMEQ6bVswXS5zbGljZSg0OCw2NCksZGltMUE6bVsxXS5zbGljZSgwLDE2KSxkaW0xQjptWzFdLnNsaWNlKDE2LDMyKSxkaW0xQzptWzFdLnNsaWNlKDMyLDQ4KSxkaW0xRDptWzFdLnNsaWNlKDQ4LDY0KSxkcndMYXllcjpoLGNvbnRleHRDb2xvcjpbQVswXS8yNTUsQVsxXS8yNTUsQVsyXS8yNTUsQVszXTwxP0FbM106TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS90LmxpbmVzLmNvbG9yLmxlbmd0aCwxLzMpKV0sc2Npc3Nvclg6KG49PT1lPzA6byt2KSsoXy12KStrKnkueFswXSxzY2lzc29yV2lkdGg6KG49PT1yP3gtbyt2OmMrLjUpKyhuPT09ZT9vK3Y6MCksc2Npc3Nvclk6bCt3K1QqeS55WzBdLHNjaXNzb3JIZWlnaHQ6dSx2aWV3cG9ydFg6Xy12K2sqeS54WzBdLHZpZXdwb3J0WTp3K1QqeS55WzBdLHZpZXdwb3J0V2lkdGg6eCx2aWV3cG9ydEhlaWdodDpifSxwKX1mdW5jdGlvbiB4KHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5mbG9vcigyMDQ3KnRbMF0pLDApLHI9TWF0aC5taW4oMjA0NyxNYXRoLmNlaWwoMjA0Nyp0WzFdKSwyMDQ3KTtyZXR1cm5bTWF0aC5taW4oZSxyKSxNYXRoLm1heChlLHIpXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGwsZyxiLF89ZS5jb250ZXh0LHc9ZS5waWNrLFQ9ZS5yZWdsLGs9VC5fZ2wsQT1rLmdldFBhcmFtZXRlcihrLkFMSUFTRURfTElORV9XSURUSF9SQU5HRSksTT1NYXRoLm1heChBWzBdLE1hdGgubWluKEFbMV0sZS52aWV3TW9kZWwucGxvdEdsUGl4ZWxSYXRpbykpLFM9e2N1cnJlbnRSYWZzOnt9LGRyYXdDb21wbGV0ZWQ6ITAsY2xlYXJPbmx5OiExfSxFPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxyPTA7cjw9bztyKz00KWVbdihyKV09dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pO3JldHVybiBlfShUKSxMPVQudGV4dHVyZSh1KSxDPVtdO0koZSk7dmFyIFA9VCh7cHJvZmlsZTohMSxibGVuZDp7ZW5hYmxlOl8sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6MSxkc3RBbHBoYToxfSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxjb2xvcjpbMCwwLDAsMF19LGRlcHRoOntlbmFibGU6IV8sbWFzazohMCxmdW5jOiJsZXNzIixyYW5nZTpbMCwxXX0sY3VsbDp7ZW5hYmxlOiEwLGZhY2U6ImJhY2sifSxzY2lzc29yOntlbmFibGU6ITAsYm94Ont4OlQucHJvcCgic2Npc3NvclgiKSx5OlQucHJvcCgic2Npc3NvclkiKSx3aWR0aDpULnByb3AoInNjaXNzb3JXaWR0aCIpLGhlaWdodDpULnByb3AoInNjaXNzb3JIZWlnaHQiKX19LHZpZXdwb3J0Ont4OlQucHJvcCgidmlld3BvcnRYIikseTpULnByb3AoInZpZXdwb3J0WSIpLHdpZHRoOlQucHJvcCgidmlld3BvcnRXaWR0aCIpLGhlaWdodDpULnByb3AoInZpZXdwb3J0SGVpZ2h0Iil9LGRpdGhlcjohMSx2ZXJ0OmksZnJhZzphLHByaW1pdGl2ZToibGluZXMiLGxpbmVXaWR0aDpNLGF0dHJpYnV0ZXM6RSx1bmlmb3Jtczp7cmVzb2x1dGlvbjpULnByb3AoInJlc29sdXRpb24iKSx2aWV3Qm94UG9zOlQucHJvcCgidmlld0JveFBvcyIpLHZpZXdCb3hTaXplOlQucHJvcCgidmlld0JveFNpemUiKSxkaW0wQTpULnByb3AoImRpbTBBIiksZGltMUE6VC5wcm9wKCJkaW0xQSIpLGRpbTBCOlQucHJvcCgiZGltMEIiKSxkaW0xQjpULnByb3AoImRpbTFCIiksZGltMEM6VC5wcm9wKCJkaW0wQyIpLGRpbTFDOlQucHJvcCgiZGltMUMiKSxkaW0wRDpULnByb3AoImRpbTBEIiksZGltMUQ6VC5wcm9wKCJkaW0xRCIpLGxvQTpULnByb3AoImxvQSIpLGhpQTpULnByb3AoImhpQSIpLGxvQjpULnByb3AoImxvQiIpLGhpQjpULnByb3AoImhpQiIpLGxvQzpULnByb3AoImxvQyIpLGhpQzpULnByb3AoImhpQyIpLGxvRDpULnByb3AoImxvRCIpLGhpRDpULnByb3AoImhpRCIpLHBhbGV0dGU6TCxjb250ZXh0Q29sb3I6VC5wcm9wKCJjb250ZXh0Q29sb3IiKSxtYXNrVGV4dHVyZTpULnByb3AoIm1hc2tUZXh0dXJlIiksZHJ3TGF5ZXI6VC5wcm9wKCJkcndMYXllciIpLG1hc2tIZWlnaHQ6VC5wcm9wKCJtYXNrSGVpZ2h0Iil9LG9mZnNldDpULnByb3AoIm9mZnNldCIpLGNvdW50OlQucHJvcCgiY291bnQiKX0pO2Z1bmN0aW9uIEkodCl7cj10Lm1vZGVsLG49dC52aWV3TW9kZWwsbD1uLmRpbWVuc2lvbnMuc2xpY2UoKSxnPWxbMF0/bFswXS52YWx1ZXMubGVuZ3RoOjA7dmFyIGU9ci5saW5lcyxpPXc/ZS5jb2xvci5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KSk6ZS5jb2xvcixhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1uZXcgQXJyYXkodCoobys0KSksYT0wLHM9MDtzPHQ7cysrKXtmb3IodmFyIGw9MDtsPG87bCsrKWlbYSsrXT1sPGUubGVuZ3RoP2VbbF0ucGFkZGVkVW5pdFZhbHVlc1tzXTouNTtpW2ErK109ZChzLDIpLGlbYSsrXT1kKHMsMSksaVthKytdPWQocywwKSxpW2ErK109KG49cltzXSxNYXRoLm1heCgxZS02LE1hdGgubWluKC45OTk5OTksbikpKX1yZXR1cm4gaX0oZyxsLGkpOyFmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjw9bztuKz00KXRbdihuKV0obShuLzQsZSxyKSl9KEUsZyxhKSxffHx3fHwoTD1ULnRleHR1cmUocy5leHRlbmRGbGF0KHtkYXRhOnAoci51bml0VG9Db2xvciwyNTUpfSx1KSkpfXJldHVybntyZW5kZXI6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzPXQubGVuZ3RoLGM9MS8wLHU9LTEvMDtmb3IoaT0wO2k8cztpKyspdFtpXS5kaW0wLmNhbnZhc1g8YyYmKGM9dFtpXS5kaW0wLmNhbnZhc1gsYT1pKSx0W2ldLmRpbTEuY2FudmFzWD51JiYodT10W2ldLmRpbTEuY2FudmFzWCxvPWkpOzA9PT1zJiZmKFQsMCwwLHIuY2FudmFzV2lkdGgsci5jYW52YXNIZWlnaHQpO3ZhciBwPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtbXSxbXV07Zm9yKG49MDtuPDY0O24rKyl7dmFyIGE9IXQmJm48bC5sZW5ndGg/bFtuXS5icnVzaC5maWx0ZXIuZ2V0Qm91bmRzKCk6Wy0xLzAsMS8wXTtpWzBdW25dPWFbMF0saVsxXVtuXT1hWzFdfXZhciBvPW5ldyBBcnJheSgxNjM4NCk7Zm9yKGU9MDtlPDE2Mzg0O2UrKylvW2VdPTI1NTtpZighdClmb3IoZT0wO2U8bC5sZW5ndGg7ZSsrKXt2YXIgcz1lJTgsYz0oZS1zKS84LHU9TWF0aC5wb3coMixzKSxmPWxbZV0uYnJ1c2guZmlsdGVyLmdldCgpO2lmKCEoZi5sZW5ndGg8Mikpe3ZhciBoPXgoZlswXSlbMV07Zm9yKHI9MTtyPGYubGVuZ3RoO3IrKyl7dmFyIHA9eChmW3JdKTtmb3Iobj1oKzE7bjxwWzBdO24rKylvWzgqbitjXSY9fnU7aD1NYXRoLm1heChoLHBbMV0pfX19dmFyIGQ9e3NoYXBlOls4LDIwNDhdLGZvcm1hdDoiYWxwaGEiLHR5cGU6InVpbnQ4IixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCIsZGF0YTpvfTtyZXR1cm4gYj9iKGQpOmI9VC50ZXh0dXJlKGQpLHttYXNrVGV4dHVyZTpiLG1hc2tIZWlnaHQ6MjA0OCxsb0E6aVswXS5zbGljZSgwLDE2KSxsb0I6aVswXS5zbGljZSgxNiwzMiksbG9DOmlbMF0uc2xpY2UoMzIsNDgpLGxvRDppWzBdLnNsaWNlKDQ4LDY0KSxoaUE6aVsxXS5zbGljZSgwLDE2KSxoaUI6aVsxXS5zbGljZSgxNiwzMiksaGlDOmlbMV0uc2xpY2UoMzIsNDgpLGhpRDppWzFdLnNsaWNlKDQ4LDY0KX19KF8pO2ZvcihpPTA7aTxzO2krKyl7dmFyIGQ9dFtpXSxtPWQuZGltMC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHY9ZC5kaW0xLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaz1kLmNhbnZhc1gsQT1kLmNhbnZhc1ksTT1rK2QucGFuZWxTaXplWCxFPWQucGxvdEdsUGl4ZWxSYXRpbztpZihlfHwhQ1ttXXx8Q1ttXVswXSE9PWt8fENbbV1bMV0hPT1NKXtDW21dPVtrLE1dO3ZhciBMPXkocixhLG8saSxtLHYsayxBLGQucGFuZWxTaXplWCxkLnBhbmVsU2l6ZVksZC5kaW0wLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsXz8wOnc/MjoxLHAsRSk7Uy5jbGVhck9ubHk9bjt2YXIgST1lP3IubGluZXMuYmxvY2tMaW5lQ291bnQ6ZztoKFQsUCxTLEksZyxMKX19fSxyZWFkUGl4ZWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVC5yZWFkKHt4OnQseTplLHdpZHRoOjEsaGVpZ2h0OjEsZGF0YTpjfSksY30scmVhZFBpeGVsczpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uZXcgVWludDhBcnJheSg0KnIqbik7cmV0dXJuIFQucmVhZCh7eDp0LHk6ZSx3aWR0aDpyLGhlaWdodDpuLGRhdGE6aX0pLGl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdC5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsTC5kZXN0cm95KCksYiYmYi5kZXN0cm95KCksRSlFW2VdLmRlc3Ryb3koKX0sdXBkYXRlOkl9fX0seyIuLi8uLi9saWIiOjUwMywiLi9jb25zdGFudHMiOjg5MixnbHNsaWZ5OjIyN31dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtmb3Iobnx8KG49MS8wKSxpPTA7aTxlLmxlbmd0aDtpKyspKGE9ZVtpXSkudmlzaWJsZSYmKG49TWF0aC5taW4obixhW3JdLmxlbmd0aCkpO2ZvcihuPT09MS8wJiYobj0wKSx0Ll9sZW5ndGg9bixpPTA7aTxlLmxlbmd0aDtpKyspKGE9ZVtpXSkudmlzaWJsZSYmKGEuX2xlbmd0aD1uKTtyZXR1cm4gbn19LHt9XSw4OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoImNvbG9yLXJnYmEiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD1pLnN0clJvdGF0ZSxjPWkuc3RyVHJhbnNsYXRlLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHA9dCgiLi4vLi4vbGliL2d1cCIpLGQ9cC5rZXlGdW4sbT1wLnJlcGVhdCxnPXAudW53cmFwLHY9dCgiLi9oZWxwZXJzIikseT10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi9heGlzYnJ1c2giKSxiPXQoIi4vbGluZXMiKTtmdW5jdGlvbiBfKHQsZSxyKXtyZXR1cm4gaS5hZ2dOdW1zKHQsbnVsbCxlLHIpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gayhfKE1hdGgubWluLHQsZSksXyhNYXRoLm1heCx0LGUpKX1mdW5jdGlvbiBUKHQpe3ZhciBlPXQucmFuZ2U7cmV0dXJuIGU/ayhlWzBdLGVbMV0pOncodC52YWx1ZXMsdC5fbGVuZ3RoKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIWlzTmFOKHQpJiZpc0Zpbml0ZSh0KXx8KHQ9MCksIWlzTmFOKGUpJiZpc0Zpbml0ZShlKXx8KGU9MCksdD09PWUmJigwPT09dD8odC09MSxlKz0xKToodCo9LjksZSo9MS4xKSksW3QsZV19ZnVuY3Rpb24gQSh0LGUscixpLG8pe3ZhciBzLGwsYz1UKHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgocz1hKHIudGlja2Zvcm1hdCksbD1vLGw/ZnVuY3Rpb24odCxlKXt2YXIgcj1sW2VdO3JldHVybiBudWxsPT1yP3ModCk6cn06cykpKS5yYW5nZShpLm1hcCgoZnVuY3Rpb24ocil7dmFyIG49KHItY1swXSkvKGNbMV0tY1swXSk7cmV0dXJuIHQtZStuKigyKmUtdCl9KSkpOm4uc2NhbGUubGluZWFyKCkuZG9tYWluKGMpLnJhbmdlKFt0LWUsZV0pfWZ1bmN0aW9uIE0odCl7aWYodC50aWNrdmFscyl7dmFyIGU9VCh0KTtyZXR1cm4gbi5zY2FsZS5vcmRpbmFsKCkuZG9tYWluKHQudGlja3ZhbHMpLnJhbmdlKHQudGlja3ZhbHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC1lWzBdKS8oZVsxXS1lWzBdKX0pKSl9fWZ1bmN0aW9uIFModCl7dmFyIGU9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHI9dC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPW8odFsxXSk7cmV0dXJuIG4ucmdiKCJyZ2IoIitlWzBdKyIsIitlWzFdKyIsIitlWzJdKyIpIil9KSksaT0icmdiIi5zcGxpdCgiIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5jbGFtcCghMCkuZG9tYWluKGUpLnJhbmdlKHIubWFwKChpPXQsZnVuY3Rpb24odCl7cmV0dXJuIHRbaV19KSkpO3ZhciBpfSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpfX1mdW5jdGlvbiBFKHQpe3JldHVybiB0LmRpbWVuc2lvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkfSkpfWZ1bmN0aW9uIEwodCxlLHIpe3ZhciBhPWcoZSkscz1hLnRyYWNlLGw9di5jb252ZXJ0VHlwZWRBcnJheShhLmxpbmVDb2xvciksYz1zLmxpbmUsdT17Y29sb3I6byh5LmRlc2VsZWN0ZWRMaW5lQ29sb3IpfSxmPWguZXh0cmFjdE9wdHMoYykscD1mLnJldmVyc2VzY2FsZT9oLmZsaXBTY2FsZShhLmNzY2FsZSk6YS5jc2NhbGUsZD1zLmRvbWFpbixtPXMuZGltZW5zaW9ucyx4PXQud2lkdGgsYj1zLmxhYmVsYW5nbGUsXz1zLmxhYmVsc2lkZSx3PXMubGFiZWxmb250LGs9cy50aWNrZm9udCxBPXMucmFuZ2Vmb250LE09aS5leHRlbmREZWVwTm9BcnJheXMoe30sYyx7Y29sb3I6bC5tYXAobi5zY2FsZS5saW5lYXIoKS5kb21haW4oVCh7dmFsdWVzOmwscmFuZ2U6W2YubWluLGYubWF4XSxfbGVuZ3RoOnMuX2xlbmd0aH0pKSksYmxvY2tMaW5lQ291bnQ6eS5ibG9ja0xpbmVDb3VudCxjYW52YXNPdmVyZHJhZzp5Lm92ZXJkcmFnKnkuY2FudmFzUGl4ZWxSYXRpb30pLEU9TWF0aC5mbG9vcih4KihkLnhbMV0tZC54WzBdKSksTD1NYXRoLmZsb29yKHQuaGVpZ2h0KihkLnlbMV0tZC55WzBdKSksQz10Lm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxQPUUsST1MO3JldHVybntrZXk6cixjb2xDb3VudDptLmZpbHRlcih2LmlzVmlzaWJsZSkubGVuZ3RoLGRpbWVuc2lvbnM6bSx0aWNrRGlzdGFuY2U6eS50aWNrRGlzdGFuY2UsdW5pdFRvQ29sb3I6UyhwKSxsaW5lczpNLGRlc2VsZWN0ZWRMaW5lczp1LGxhYmVsQW5nbGU6YixsYWJlbFNpZGU6XyxsYWJlbEZvbnQ6dyx0aWNrRm9udDprLHJhbmdlRm9udDpBLGxheW91dFdpZHRoOngsbGF5b3V0SGVpZ2h0OnQuaGVpZ2h0LGRvbWFpbjpkLHRyYW5zbGF0ZVg6ZC54WzBdKngsdHJhbnNsYXRlWTp0LmhlaWdodC1kLnlbMV0qdC5oZWlnaHQscGFkOkMsY2FudmFzV2lkdGg6UCp5LmNhbnZhc1BpeGVsUmF0aW8rMipNLmNhbnZhc092ZXJkcmFnLGNhbnZhc0hlaWdodDpJKnkuY2FudmFzUGl4ZWxSYXRpbyx3aWR0aDpQLGhlaWdodDpJLGNhbnZhc1BpeGVsUmF0aW86eS5jYW52YXNQaXhlbFJhdGlvfX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbz1yLndpZHRoLHM9ci5oZWlnaHQsbD1yLmRpbWVuc2lvbnMsYz1yLmNhbnZhc1BpeGVsUmF0aW8sdT1mdW5jdGlvbih0KXtyZXR1cm4gbyp0L01hdGgubWF4KDEsci5jb2xDb3VudC0xKX0sZj15LnZlcnRpY2FsUGFkZGluZy9zLGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5yYW5nZShbZSx0LWVdKX0ocyx5LnZlcnRpY2FsUGFkZGluZykscD17a2V5OnIua2V5LHhTY2FsZTp1LG1vZGVsOnIsaW5CcnVzaERyYWc6ITF9LGQ9e307cmV0dXJuIHAuZGltZW5zaW9ucz1sLmZpbHRlcih2LmlzVmlzaWJsZSkubWFwKChmdW5jdGlvbihvLGwpe3ZhciBtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuZG9tYWluKFQodCkpLnJhbmdlKFtlLDEtZV0pfShvLGYpLGc9ZFtvLmxhYmVsXTtkW28ubGFiZWxdPShnfHwwKSsxO3ZhciBiPW8ubGFiZWwrKGc/Il9fIitnOiIiKSxfPW8uY29uc3RyYWludHJhbmdlLHc9XyYmXy5sZW5ndGg7dyYmIUFycmF5LmlzQXJyYXkoX1swXSkmJihfPVtfXSk7dmFyIGs9dz9fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKG0pfSkpOltbLTEvMCwxLzBdXSxTPW8udmFsdWVzO1MubGVuZ3RoPm8uX2xlbmd0aCYmKFM9Uy5zbGljZSgwLG8uX2xlbmd0aCkpO3ZhciBMLEM9by50aWNrdmFscztmdW5jdGlvbiBQKHQsZSl7cmV0dXJue3ZhbDp0LHRleHQ6TFtlXX19ZnVuY3Rpb24gSSh0LGUpe3JldHVybiB0LnZhbC1lLnZhbH1pZihBcnJheS5pc0FycmF5KEMpJiZDLmxlbmd0aCl7TD1vLnRpY2t0ZXh0LEFycmF5LmlzQXJyYXkoTCkmJkwubGVuZ3RoP0wubGVuZ3RoPkMubGVuZ3RoP0w9TC5zbGljZSgwLEMubGVuZ3RoKTpDLmxlbmd0aD5MLmxlbmd0aCYmKEM9Qy5zbGljZSgwLEwubGVuZ3RoKSk6TD1DLm1hcChhKG8udGlja2Zvcm1hdCkpO2Zvcih2YXIgTz0xO088Qy5sZW5ndGg7TysrKWlmKENbT108Q1tPLTFdKXtmb3IodmFyIHo9Qy5tYXAoUCkuc29ydChJKSxEPTA7RDxDLmxlbmd0aDtEKyspQ1tEXT16W0RdLnZhbCxMW0RdPXpbRF0udGV4dDticmVha319ZWxzZSBDPXZvaWQgMDtyZXR1cm4gUz12LmNvbnZlcnRUeXBlZEFycmF5KFMpLHtrZXk6YixsYWJlbDpvLmxhYmVsLHRpY2tGb3JtYXQ6by50aWNrZm9ybWF0LHRpY2t2YWxzOkMsdGlja3RleHQ6TCxvcmRpbmFsOnYuaXNPcmRpbmFsKG8pLG11bHRpc2VsZWN0Om8ubXVsdGlzZWxlY3QseEluZGV4OmwsY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleDpsLHZpc2libGVJbmRleDpvLl9pbmRleCxoZWlnaHQ6cyx2YWx1ZXM6UyxwYWRkZWRVbml0VmFsdWVzOlMubWFwKG0pLHVuaXRUaWNrdmFsczpDJiZDLm1hcChtKSx4U2NhbGU6dSx4OnUobCksY2FudmFzWDp1KGwpKmMsdW5pdFRvUGFkZGVkUHg6aCxkb21haW5TY2FsZTpBKHMseS52ZXJ0aWNhbFBhZGRpbmcsbyxDLEwpLG9yZGluYWxTY2FsZTpNKG8pLHBhcmVudDpwLG1vZGVsOnIsYnJ1c2g6eC5tYWtlQnJ1c2godCx3LGssKGZ1bmN0aW9uKCl7dC5saW5lUGlja0FjdGl2ZSghMSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1wO2UuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscywhMCk7dmFyIHI9RShlKTshdC5jb250ZXh0U2hvd24oKSYmcj8oZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCksdC5jb250ZXh0U2hvd24oITApKTp0LmNvbnRleHRTaG93bigpJiYhciYmKGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITAsITApLHQuY29udGV4dFNob3duKCExKSl9KSwoZnVuY3Rpb24ocil7aWYocC5mb2N1c0xheWVyLnJlbmRlcihwLnBhbmVscywhMCkscC5waWNrTGF5ZXImJnAucGlja0xheWVyLnJlbmRlcihwLnBhbmVscywhMCksdC5saW5lUGlja0FjdGl2ZSghMCksZSYmZS5maWx0ZXJDaGFuZ2VkKXt2YXIgbj1tLmludmVydCxhPXIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobikuc29ydChpLnNvcnRlckFzYyl9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkpO2UuZmlsdGVyQ2hhbmdlZChwLmtleSxvLl9pbmRleCxhKX19KSl9fSkpLHB9ZnVuY3Rpb24gUCh0KXt0LmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50VGV4dCwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpfWZ1bmN0aW9uIEkodCxlKXt2YXIgcj0idG9wIj09PWU/MTotMSxuPXQqTWF0aC5QSS8xODA7cmV0dXJue2RpcjpyLGR4Ok1hdGguc2luKG4pLGR5Ok1hdGguY29zKG4pLGRlZ3JlZXM6dH19ZnVuY3Rpb24gTyh0LGUscil7Zm9yKHZhciBuPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLGk9dC5kYXRhKCksYT0wO2E8aS5sZW5ndGgtMTthKyspe3ZhciBvPW5bYV18fChuW2FdPXt9KSxzPWlbYV0sbD1pW2ErMV07by5kaW0wPXMsby5kaW0xPWwsby5jYW52YXNYPXMuY2FudmFzWCxvLnBhbmVsU2l6ZVg9bC5jYW52YXNYLXMuY2FudmFzWCxvLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQsby55PTAsby5jYW52YXNZPTAsby5wbG90R2xQaXhlbFJhdGlvPXJ9fWZ1bmN0aW9uIHoodCxlKXtyZXR1cm4gcy50aWNrVGV4dCh0Ll9heCxlLCExKS50ZXh0fWZ1bmN0aW9uIEQodCxlKXtpZih0Lm9yZGluYWwpcmV0dXJuIiI7dmFyIHI9dC5kb21haW5TY2FsZS5kb21haW4oKSxuPXJbZT9yLmxlbmd0aC0xOjBdO3JldHVybiB6KHQubW9kZWwuZGltZW5zaW9uc1t0LnZpc2libGVJbmRleF0sbil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXQuX2Z1bGxMYXlvdXQsaD1vLl90b3BwYXBlcixwPW8uX2dsY29udGFpbmVyLF89dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLFQ9dC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoO3IrKylmb3IodmFyIG49dFtlXVtyXS50cmFjZSxpPW4uZGltZW5zaW9ucyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0udmFsdWVzLGw9aVthXS5fYXg7bCYmKGwucmFuZ2U/bC5yYW5nZT1rKGwucmFuZ2VbMF0sbC5yYW5nZVsxXSk6bC5yYW5nZT13KG8sbi5fbGVuZ3RoKSxsLmR0aWNrfHwobC5kdGljaz0uMDEqKE1hdGguYWJzKGwucmFuZ2VbMV0tbC5yYW5nZVswXSl8fDEpKSxsLnRpY2tmb3JtYXQ9aVthXS50aWNrZm9ybWF0LHMuY2FsY1RpY2tzKGwpLGwuY2xlYW5SYW5nZSgpKX19KGUpO3ZhciBBLE0sUz0oQT0hMCxNPSExLHtsaW5lUGlja0FjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9BPSEhdDpBfSxjb250ZXh0U2hvd246ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/TT0hIXQ6TX19KSxSPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZyh0KS50cmFjZS52aXNpYmxlfSkpLm1hcChMLmJpbmQoMCxyKSkubWFwKEMuYmluZCgwLFMsYSkpO3AuZWFjaCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5leHRlbmRGbGF0KHQsUltlXSl9KSk7dmFyIEY9cC5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5lYWNoKChmdW5jdGlvbih0KXt0LnZpZXdNb2RlbD1SWzBdLHQudmlld01vZGVsLnBsb3RHbFBpeGVsUmF0aW89Xyx0LnZpZXdNb2RlbC5wYXBlckNvbG9yPVQsdC5tb2RlbD10LnZpZXdNb2RlbD90LnZpZXdNb2RlbC5tb2RlbDpudWxsfSkpLEI9bnVsbDtGLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKHQpe2lmKFMubGluZVBpY2tBY3RpdmUoKSYmdC5saW5lTGF5ZXImJmEmJmEuaG92ZXIpe3ZhciBlPW4uZXZlbnQscj10aGlzLndpZHRoLGk9dGhpcy5oZWlnaHQsbz1uLm1vdXNlKHRoaXMpLHM9b1swXSxsPW9bMV07aWYoczwwfHxsPDB8fHM+PXJ8fGw+PWkpcmV0dXJuO3ZhciBjPXQubGluZUxheWVyLnJlYWRQaXhlbChzLGktMS1sKSx1PTAhPT1jWzNdLGY9dT9jWzJdKzI1NiooY1sxXSsyNTYqY1swXSk6bnVsbCxoPXt4OnMseTpsLGNsaWVudFg6ZS5jbGllbnRYLGNsaWVudFk6ZS5jbGllbnRZLGRhdGFJbmRleDp0Lm1vZGVsLmtleSxjdXJ2ZU51bWJlcjpmfTtmIT09QiYmKHU/YS5ob3ZlcihoKTphLnVuaG92ZXImJmEudW5ob3ZlcihoKSxCPWYpfX0pKSxGLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQucGljaz8wOjF9KSksaC5zdHlsZSgiYmFja2dyb3VuZCIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMCkiKTt2YXIgTj1oLnNlbGVjdEFsbCgiLiIreS5jbi5wYXJjb29yZHMpLmRhdGEoUixkKTtOLmV4aXQoKS5yZW1vdmUoKSxOLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLnBhcmNvb3JkcywhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0Lm1vZGVsLnRyYW5zbGF0ZVgsdC5tb2RlbC50cmFuc2xhdGVZKX0pKTt2YXIgaj1OLnNlbGVjdEFsbCgiLiIreS5jbi5wYXJjb29yZHNDb250cm9sVmlldykuZGF0YShtLGQpO2ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24ucGFyY29vcmRzQ29udHJvbFZpZXcsITApLGouYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC5tb2RlbC5wYWQubCx0Lm1vZGVsLnBhZC50KX0pKTt2YXIgVT1qLnNlbGVjdEFsbCgiLiIreS5jbi55QXhpcykuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30pLGQpO1UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24ueUF4aXMsITApLGouZWFjaCgoZnVuY3Rpb24odCl7TyhVLHQsXyl9KSksRi5lYWNoKChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHxhP3QubGluZUxheWVyPWIodGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHxhO3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSkpLFUuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC54U2NhbGUodC54SW5kZXgpLDApfSkpLFUuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7Uy5saW5lUGlja0FjdGl2ZSghMSksdC54PU1hdGgubWF4KC15Lm92ZXJkcmFnLE1hdGgubWluKHQubW9kZWwud2lkdGgreS5vdmVyZHJhZyxuLmV2ZW50LngpKSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxVLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KSkuZWFjaCgoZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZS54SW5kZXgpLGUuY2FudmFzWD1lLngqZS5tb2RlbC5jYW52YXNQaXhlbFJhdGlvfSkpLE8oVSxlLF8pLFUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LnhTY2FsZSh0LnhJbmRleCksMCl9KSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIixjKHQueCwwKSksVS5lYWNoKChmdW5jdGlvbihyLG4saSl7aT09PXQucGFyZW50LmtleSYmKGUuZGltZW5zaW9uc1tuXT1yKX0pKSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCFFKGUpKSxlLmZvY3VzTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKX0pKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O3QueD10LnhTY2FsZSh0LnhJbmRleCksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sTyhVLGUsXyksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGModC54LDApfSkpLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIUUoZSkpLGUuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGF5ZXImJmUucGlja0xheWVyLnJlbmRlcihlLnBhbmVscywhMCksUy5saW5lUGlja0FjdGl2ZSghMCksYSYmYS5heGVzTW92ZWQmJmEuYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXh9KSkpfSkpKSxVLmV4aXQoKS5yZW1vdmUoKTt2YXIgVj1VLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzT3ZlcmxheXMpLmRhdGEobSxkKTtWLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNPdmVybGF5cywhMCksVi5zZWxlY3RBbGwoIi4iK3kuY24uYXhpcykucmVtb3ZlKCk7dmFyIEg9Vi5zZWxlY3RBbGwoIi4iK3kuY24uYXhpcykuZGF0YShtLGQpO0guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpcywhMCksSC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10Lm1vZGVsLmhlaWdodC90Lm1vZGVsLnRpY2tEaXN0YW5jZSxyPXQuZG9tYWluU2NhbGUsaT1yLmRvbWFpbigpO24uc2VsZWN0KHRoaXMpLmNhbGwobi5zdmcuYXhpcygpLm9yaWVudCgibGVmdCIpLnRpY2tTaXplKDQpLm91dGVyVGlja1NpemUoMikudGlja3MoZSx0LnRpY2tGb3JtYXQpLnRpY2tWYWx1ZXModC5vcmRpbmFsP2k6bnVsbCkudGlja0Zvcm1hdCgoZnVuY3Rpb24oZSl7cmV0dXJuIHYuaXNPcmRpbmFsKHQpP2U6eih0Lm1vZGVsLmRpbWVuc2lvbnNbdC52aXNpYmxlSW5kZXhdLGUpfSkpLnNjYWxlKHIpKSxmLmZvbnQoSC5zZWxlY3RBbGwoInRleHQiKSx0Lm1vZGVsLnRpY2tGb250KX0pKSxILnNlbGVjdEFsbCgiLmRvbWFpbiwgLnRpY2s+bGluZSIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjI1KS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKSxILnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsdS5tYWtlVGV4dFNoYWRvdyhUKSkuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKTt2YXIgcT1WLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzSGVhZGluZykuZGF0YShtLGQpO3EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpc0hlYWRpbmcsITApO3ZhciBHPXEuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNUaXRsZSkuZGF0YShtLGQpO0cuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHkuY24uYXhpc1RpdGxlLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIiksRy50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtmLmZvbnQocixlLm1vZGVsLmxhYmVsRm9udCksdS5jb252ZXJ0VG9Uc3BhbnMocix0KX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1JKHQubW9kZWwubGFiZWxBbmdsZSx0Lm1vZGVsLmxhYmVsU2lkZSkscj15LmF4aXNUaXRsZU9mZnNldDtyZXR1cm4oZS5kaXI+MD8iIjpjKDAsMipyK3QubW9kZWwuaGVpZ2h0KSkrbChlLmRlZ3JlZXMpK2MoLXIqZS5keCwtciplLmR5KX0pKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3ZhciBlPUkodC5tb2RlbC5sYWJlbEFuZ2xlLHQubW9kZWwubGFiZWxTaWRlKTtyZXR1cm4gMipNYXRoLmFicyhlLmR4KT5NYXRoLmFicyhlLmR5KT9lLmRpciplLmR4PDA/InN0YXJ0IjoiZW5kIjoibWlkZGxlIn0pKTt2YXIgWT1WLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzRXh0ZW50KS5kYXRhKG0sZCk7WS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50LCEwKTt2YXIgVz1ZLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzRXh0ZW50VG9wKS5kYXRhKG0sZCk7Vy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50VG9wLCEwKSxXLmF0dHIoInRyYW5zZm9ybSIsYygwLC15LmF4aXNFeHRlbnRPZmZzZXQpKTt2YXIgWD1XLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzRXh0ZW50VG9wVGV4dCkuZGF0YShtLGQpO1guZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHkuY24uYXhpc0V4dGVudFRvcFRleHQsITApLmNhbGwoUCksWC50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gRCh0LCEwKX0pKS5lYWNoKChmdW5jdGlvbih0KXtmLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSkpO3ZhciBaPVkuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRCb3R0b20pLmRhdGEobSxkKTtaLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRCb3R0b20sITApLFouYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGMoMCx0Lm1vZGVsLmhlaWdodCt5LmF4aXNFeHRlbnRPZmZzZXQpfSkpO3ZhciBKPVouc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0KS5kYXRhKG0sZCk7Si5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCwhMCkuYXR0cigiZHkiLCIwLjc1ZW0iKS5jYWxsKFApLEoudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIEQodCwhMSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7Zi5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pKSx4LmVuc3VyZUF4aXNCcnVzaChWLFQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ3VwIjo1MDAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0LCIuL2F4aXNicnVzaCI6ODg5LCIuL2NvbnN0YW50cyI6ODkyLCIuL2hlbHBlcnMiOjg5NCwiLi9saW5lcyI6ODk2LCJAcGxvdGx5L2QzIjo1OCwiY29sb3ItcmdiYSI6OTF9XSw4OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wYXJjb29yZHMiKSxpPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSxhPXQoIi4vaGVscGVycyIpLmlzVmlzaWJsZTtmdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1lLmluZGV4T2YociksaT10LmluZGV4T2Yobik7cmV0dXJuLTE9PT1pJiYoaSs9ZS5sZW5ndGgpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZihpKHQpKXt2YXIgcz17fSxsPXt9LGM9e30sdT17fSxmPXIuX3NpemU7ZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBuPWVbMF0udHJhY2U7Y1tyXT1uLmluZGV4O3ZhciBpPXVbcl09bi5fZnVsbElucHV0LmluZGV4O3Nbcl09dC5kYXRhW2ldLmRpbWVuc2lvbnMsbFtyXT10LmRhdGFbaV0uZGltZW5zaW9ucy5zbGljZSgpfSkpO24odCxlLHt3aWR0aDpmLncsaGVpZ2h0OmYuaCxtYXJnaW46e3Q6Zi50LHI6Zi5yLGI6Zi5iLGw6Zi5sfX0se2ZpbHRlckNoYW5nZWQ6ZnVuY3Rpb24oZSxuLGkpe3ZhciBhPWxbZV1bbl0sbz1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pKSxzPSJkaW1lbnNpb25zWyIrbisiXS5jb25zdHJhaW50cmFuZ2UiLGY9ci5fdHJhY2VQcmVHVUlbdC5fZnVsbERhdGFbY1tlXV0uX2Z1bGxJbnB1dC51aWRdO2lmKHZvaWQgMD09PWZbc10pe3ZhciBoPWEuY29uc3RyYWludHJhbmdlO2Zbc109aHx8bnVsbH12YXIgcD10Ll9mdWxsRGF0YVtjW2VdXS5kaW1lbnNpb25zW25dO28ubGVuZ3RoPygxPT09by5sZW5ndGgmJihvPW9bMF0pLGEuY29uc3RyYWludHJhbmdlPW8scC5jb25zdHJhaW50cmFuZ2U9by5zbGljZSgpLG89W29dKTooZGVsZXRlIGEuY29uc3RyYWludHJhbmdlLGRlbGV0ZSBwLmNvbnN0cmFpbnRyYW5nZSxvPW51bGwpO3ZhciBkPXt9O2Rbc109byx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbZCxbdVtlXV1dKX0saG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfaG92ZXIiLGUpfSx1bmhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGUpfSxheGVzTW92ZWQ6ZnVuY3Rpb24oZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBvKHQsZSxyKS1vKHQsZSxuKX19KHIsbFtlXS5maWx0ZXIoYSkpO3NbZV0uc29ydChuKSxsW2VdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWEodCl9KSkuc29ydCgoZnVuY3Rpb24odCl7cmV0dXJuIGxbZV0uaW5kZXhPZih0KX0pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtzW2VdLnNwbGljZShzW2VdLmluZGV4T2YodCksMSksc1tlXS5zcGxpY2UobFtlXS5pbmRleE9mKHQpLDAsdCl9KSksdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIsW3tkaW1lbnNpb25zOltzW2VdXX0sW3VbZV1dXSl9fSl9fX0seyIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIjo1MTYsIi4vaGVscGVycyI6ODk0LCIuL3BhcmNvb3JkcyI6ODk4fV0sOTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9YSh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToicGxvdCJ9KTtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGxhYmVsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToiY2FsYyJ9LGhvdmVyaW5mbzpjKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6cyh7fSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0dGVtcGxhdGU6bCh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITAsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDpjKHt9LHUse30pLGluc2lkZXRleHRvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInJhZGlhbCIsInRhbmdlbnRpYWwiLCJhdXRvIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QifSxpbnNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLG91dHNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLGF1dG9tYXJnaW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sZm9udDpjKHt9LHUse30pLHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjppKHtuYW1lOiJwaWUiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6Yyh7fSx1LHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6MzY1LCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzN9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6NjE5fV0sOTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz17fTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiEhZSYmKCEhKGU9aShlKSkuaXNWYWxpZCgpJiYoZT1hLmFkZE9wYWNpdHkoZSxlLmdldEFscGhhKCkpLHRbcl18fCh0W3JdPWUpLGUpKX19ZnVuY3Rpb24gbCh0LGUpe3ZhciByLG49SlNPTi5zdHJpbmdpZnkodCksYT1lW25dO2lmKCFhKXtmb3IoYT10LnNsaWNlKCkscj0wO3I8dC5sZW5ndGg7cisrKWEucHVzaChpKHRbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspYS5wdXNoKGkodFtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKTtlW25dPWF9cmV0dXJuIGF9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPVtdLG89dC5fZnVsbExheW91dCxsPW8uaGlkZGVubGFiZWxzfHxbXSxjPWUubGFiZWxzLHU9ZS5tYXJrZXIuY29sb3JzfHxbXSxmPWUudmFsdWVzLGg9ZS5fbGVuZ3RoLHA9ZS5faGFzVmFsdWVzJiZoO2lmKGUuZGxhYmVsKWZvcihjPW5ldyBBcnJheShoKSxyPTA7cjxoO3IrKyljW3JdPVN0cmluZyhlLmxhYmVsMCtyKmUuZGxhYmVsKTt2YXIgZD17fSxtPXMob1siXyIrZS50eXBlKyJjb2xvcm1hcCJdKSxnPTAsdj0hMTtmb3Iocj0wO3I8aDtyKyspe3ZhciB5LHgsYjtpZihwKXtpZih5PWZbcl0sIW4oeSkpY29udGludWU7eT0reX1lbHNlIHk9MTt2b2lkIDAhPT0oeD1jW3JdKSYmIiIhPT14fHwoeD1yKTt2YXIgXz1kW3g9U3RyaW5nKHgpXTt2b2lkIDA9PT1fPyhkW3hdPWEubGVuZ3RoLChiPS0xIT09bC5pbmRleE9mKHgpKXx8KGcrPXkpLGEucHVzaCh7djp5LGxhYmVsOngsY29sb3I6bSh1W3JdLHgpLGk6cixwdHM6W3JdLGhpZGRlbjpifSkpOih2PSEwLChpPWFbX10pLnYrPXksaS5wdHMucHVzaChyKSxpLmhpZGRlbnx8KGcrPXkpLCExPT09aS5jb2xvciYmdVtyXSYmKGkuY29sb3I9bSh1W3JdLHgpKSl9cmV0dXJuIGE9YS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY+PTB9KSksKCJmdW5uZWxhcmVhIj09PWUudHlwZT92OmUuc29ydCkmJmEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52LXQudn0pKSxhWzBdJiYoYVswXS52VG90YWw9ZyksYX0sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZXx8e30pLnR5cGU7cnx8KHI9InBpZSIpO3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT10LmNhbGNkYXRhLGE9bltyKyJjb2xvcndheSJdLHM9blsiXyIrcisiY29sb3JtYXAiXTtuWyJleHRlbmQiK3IrImNvbG9ycyJdJiYoYT1sKGEsbykpO2Zvcih2YXIgYz0wLHU9MDt1PGkubGVuZ3RoO3UrKyl7dmFyIGY9aVt1XTtpZihmWzBdLnRyYWNlLnR5cGU9PT1yKWZvcih2YXIgaD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdOyExPT09cC5jb2xvciYmKHNbcC5sYWJlbF0/cC5jb2xvcj1zW3AubGFiZWxdOihzW3AubGFiZWxdPXAuY29sb3I9YVtjJWEubGVuZ3RoXSxjKyspKX19fSxtYWtlUHVsbENvbG9yRm46cyxnZW5lcmF0ZUV4dGVuZGVkQ29sb3JzOmx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiZmFzdC1pc251bWVyaWMiOjE5MCx0aW55Y29sb3IyOjMxMn1dLDkwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9QXJyYXkuaXNBcnJheSh0KSxhPWkuaXNBcnJheU9yVHlwZWRBcnJheShlKSxvPU1hdGgubWluKHI/dC5sZW5ndGg6MS8wLGE/ZS5sZW5ndGg6MS8wKTtpZihpc0Zpbml0ZShvKXx8KG89MCksbyYmYSl7Zm9yKHZhciBzLGw9MDtsPG87bCsrKXt2YXIgYz1lW2xdO2lmKG4oYykmJmM+MCl7cz0hMDticmVha319c3x8KG89MCl9cmV0dXJue2hhc0xhYmVsczpyLGhhc1ZhbHVlczphLGxlbjpvfX1lLmV4cG9ydHM9e2hhbmRsZUxhYmVsc0FuZFZhbHVlczpsLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX12YXIgdT1sKGMoImxhYmVscyIpLGMoInZhbHVlcyIpKSxmPXUubGVuO2lmKGUuX2hhc0xhYmVscz11Lmhhc0xhYmVscyxlLl9oYXNWYWx1ZXM9dS5oYXNWYWx1ZXMsIWUuX2hhc0xhYmVscyYmZS5faGFzVmFsdWVzJiYoYygibGFiZWwwIiksYygiZGxhYmVsIikpLGYpe2UuX2xlbmd0aD1mLGMoIm1hcmtlci5saW5lLndpZHRoIikmJmMoIm1hcmtlci5saW5lLmNvbG9yIiksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgaCxwPWMoInRleHQiKSxkPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGR8fChoPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHApPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxkfHxoJiYibm9uZSIhPT1oKXt2YXIgbT1jKCJ0ZXh0cG9zaXRpb24iKTtzKHQsZSxuLGMsbSx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksKEFycmF5LmlzQXJyYXkobSl8fCJhdXRvIj09PW18fCJvdXRzaWRlIj09PW0pJiZjKCJhdXRvbWFyZ2luIiksKCJpbnNpZGUiPT09bXx8ImF1dG8iPT09bXx8QXJyYXkuaXNBcnJheShtKSkmJmMoImluc2lkZXRleHRvcmllbnRhdGlvbiIpfW8oZSxuLGMpO3ZhciBnPWMoImhvbGUiKTtpZihjKCJ0aXRsZS50ZXh0Iikpe3ZhciB2PWMoInRpdGxlLnBvc2l0aW9uIixnPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO2d8fCJtaWRkbGUgY2VudGVyIiE9PXZ8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksaS5jb2VyY2VGb250KGMsInRpdGxlLmZvbnQiLG4uZm9udCl9Yygic29ydCIpLGMoImRpcmVjdGlvbiIpLGMoInJvdGF0aW9uIiksYygicHVsbCIpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTg0LCIuLi9iYXIvZGVmYXVsdHMiOjY1MiwiLi9hdHRyaWJ1dGVzIjo5MDAsImZhc3QtaXNudW1lcmljIjoxOTB9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlNdWx0aVBvaW50VmFsdWVzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXtjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyczp0LnB0cyxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsbGFiZWw6dC5sYWJlbCxjb2xvcjp0LmNvbG9yLHZhbHVlOnQudixwZXJjZW50OnQucGVyY2VudCx0ZXh0OnQudGV4dCxiYm94OnQuYmJveCx2OnQudn07cmV0dXJuIDE9PT10LnB0cy5sZW5ndGgmJihyLnBvaW50TnVtYmVyPXIuaT10LnB0c1swXSksbihyLGUsdC5wdHMpLCJmdW5uZWxhcmVhIj09PWUudHlwZSYmKGRlbGV0ZSByLnYsZGVsZXRlIHIuaSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo0MDJ9XSw5MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZSIpP3QucmVwbGFjZSgvWy5dPzArZS8sImUiKTotMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSgvWy5dPzArJC8sIiIpOnR9ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSgoMTAwKnQpLnRvUHJlY2lzaW9uKDMpKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLGUpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodC50b1ByZWNpc2lvbigxMCkpO3JldHVybiBuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1ufHwiIj09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfSxyLmdldFJvdGF0aW9uQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuKCJhdXRvIj09PXQ/MDp0KSpNYXRoLlBJLzE4MH19LHsiLi4vLi4vbGliIjo1MDN9XSw5MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLHN0eWxlT25lOnQoIi4vc3R5bGVfb25lIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBpZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsicGllLWxpa2UiLCJwaWUiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjo5MDAsIi4vYmFzZV9wbG90Ijo5MDEsIi4vY2FsYyI6OTAyLCIuL2RlZmF1bHRzIjo5MDMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkwNywiLi9sYXlvdXRfZGVmYXVsdHMiOjkwOCwiLi9wbG90Ijo5MDksIi4vc3R5bGUiOjkxMCwiLi9zdHlsZV9vbmUiOjkxMX1dLDkwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2hpZGRlbmxhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwaWVjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHBpZWNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDkwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjUwMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTA3fV0sOTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zdHJTY2FsZSx1PWwuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikscD1oLnJlY29yZE1pblRleHRTaXplLGQ9aC5jbGVhck1pblRleHRTaXplLG09dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsZz10KCIuL2hlbHBlcnMiKSx2PXQoIi4vZXZlbnRfZGF0YSIpLHk9dCgiLi4vLi4vbGliIikuaXNWYWxpZFRleHRWYWx1ZTtmdW5jdGlvbiB4KHQsZSxyKXt2YXIgaT1yWzBdLG89aS5jeCxzPWkuY3ksYz1pLnRyYWNlLHU9ImZ1bm5lbGFyZWEiPT09Yy50eXBlOyJfaGFzSG92ZXJMYWJlbCJpbiBjfHwoYy5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIGN8fChjLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGY9ZS5fZnVsbERhdGFbYy5pbmRleF07aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgaD1mLmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGgpJiYoaD1hLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbZy5jYXN0T3B0aW9uKGgsdC5wdHMpXSxfbW9kdWxlOmMuX21vZHVsZX0sciwwKSksImFsbCI9PT1oJiYoaD0ibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWUiKSxmLmhvdmVydGVtcGxhdGV8fCJub25lIiE9PWgmJiJza2lwIiE9PWgmJmgpe3ZhciBwPXQuckluc2NyaWJlZHx8MCxkPW8rdC5weG1pZFswXSooMS1wKSxtPXMrdC5weG1pZFsxXSooMS1wKSx5PXIuc2VwYXJhdG9ycyx4PVtdO2lmKGgmJi0xIT09aC5pbmRleE9mKCJsYWJlbCIpJiZ4LnB1c2godC5sYWJlbCksdC50ZXh0PWcuY2FzdE9wdGlvbihmLmhvdmVydGV4dHx8Zi50ZXh0LHQucHRzKSxoJiYtMSE9PWguaW5kZXhPZigidGV4dCIpKXt2YXIgYj10LnRleHQ7bC5pc1ZhbGlkVGV4dFZhbHVlKGIpJiZ4LnB1c2goYil9dC52YWx1ZT10LnYsdC52YWx1ZUxhYmVsPWcuZm9ybWF0UGllVmFsdWUodC52LHkpLGgmJi0xIT09aC5pbmRleE9mKCJ2YWx1ZSIpJiZ4LnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2kudlRvdGFsLHQucGVyY2VudExhYmVsPWcuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQseSksaCYmLTEhPT1oLmluZGV4T2YoInBlcmNlbnQiKSYmeC5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgXz1mLmhvdmVybGFiZWwsdz1fLmZvbnQsVD1bXTthLmxvbmVIb3Zlcih7dHJhY2U6Yyx4MDpkLXAqaS5yLHgxOmQrcCppLnIseTptLF94MDp1P28rdC5UTFswXTpkLXAqaS5yLF94MTp1P28rdC5UUlswXTpkK3AqaS5yLF95MDp1P3MrdC5UTFsxXTptLXAqaS5yLF95MTp1P3MrdC5CTFsxXTptK3AqaS5yLHRleHQ6eC5qb2luKCI8YnI+IiksbmFtZTpmLmhvdmVydGVtcGxhdGV8fC0xIT09aC5pbmRleE9mKCJuYW1lIik/Zi5uYW1lOnZvaWQgMCxpZGVhbEFsaWduOnQucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0Iixjb2xvcjpnLmNhc3RPcHRpb24oXy5iZ2NvbG9yLHQucHRzKXx8dC5jb2xvcixib3JkZXJDb2xvcjpnLmNhc3RPcHRpb24oXy5ib3JkZXJjb2xvcix0LnB0cyksZm9udEZhbWlseTpnLmNhc3RPcHRpb24ody5mYW1pbHksdC5wdHMpLGZvbnRTaXplOmcuY2FzdE9wdGlvbih3LnNpemUsdC5wdHMpLGZvbnRDb2xvcjpnLmNhc3RPcHRpb24ody5jb2xvcix0LnB0cyksbmFtZUxlbmd0aDpnLmNhc3RPcHRpb24oXy5uYW1lbGVuZ3RoLHQucHRzKSx0ZXh0QWxpZ246Zy5jYXN0T3B0aW9uKF8uYWxpZ24sdC5wdHMpLGhvdmVydGVtcGxhdGU6Zy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZW1wbGF0ZSx0LnB0cyksaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LGV2ZW50RGF0YTpbdih0LGYpXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6ZSxpbk91dF9iYm94OlR9KSx0LmJib3g9VFswXSxjLl9oYXNIb3ZlckxhYmVsPSEwfWMuX2hhc0hvdmVyRXZlbnQ9ITAsZS5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W3YodCxmKV0sZXZlbnQ6bi5ldmVudH0pfX0pKSx0Lm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtjLmluZGV4XSxvPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7Yy5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W3YobyxpKV0sZXZlbnQ6bi5ldmVudH0pLGMuX2hhc0hvdmVyRXZlbnQ9ITEpLGMuX2hhc0hvdmVyTGFiZWwmJihhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxjLl9oYXNIb3ZlckxhYmVsPSExKX0pKSx0Lm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtjLmluZGV4XTtlLl9kcmFnZ2luZ3x8ITE9PT1yLmhvdmVybW9kZXx8KGUuX2hvdmVyZGF0YT1bdih0LGkpXSxhLmNsaWNrKGUsbi5ldmVudCkpfSkpfWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPWcuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPWcuY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPWcuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LGE9Zy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fG8uY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTphfX1mdW5jdGlvbiBfKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGg7aSsrKWlmKChuPShyPXRbaV1bMF0pLnRyYWNlKS50aXRsZS50ZXh0KXt2YXIgYT1uLnRpdGxlLnRleHQ7bi5fbWV0YSYmKGE9bC50ZW1wbGF0ZVN0cmluZyhhLG4uX21ldGEpKTt2YXIgbz1zLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS50ZXh0KGEpLmNhbGwocy5mb250LG4udGl0bGUuZm9udCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyxlKSxjPXMuYkJveChvLm5vZGUoKSwhMCk7ci50aXRsZUJveD17d2lkdGg6Yy53aWR0aCxoZWlnaHQ6Yy5oZWlnaHR9LG8ucmVtb3ZlKCl9fWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXIucnx8ZS5ycHgxLGk9ZS5ySW5zY3JpYmVkO2lmKGUuc3RhcnRhbmdsZT09PWUuc3RvcGFuZ2xlKXJldHVybntyQ2VudGVyOjEtaSxzY2FsZTowLHJvdGF0ZTowLHRleHRQb3NBbmdsZTowfTt2YXIgYSxvPWUucmluZyxzPTE9PT1vJiZNYXRoLmFicyhlLnN0YXJ0YW5nbGUtZS5zdG9wYW5nbGUpPT09MipNYXRoLlBJLGw9ZS5oYWxmYW5nbGUsYz1lLm1pZGFuZ2xlLHU9ci50cmFjZS5pbnNpZGV0ZXh0b3JpZW50YXRpb24sZj0iaG9yaXpvbnRhbCI9PT11LGg9InRhbmdlbnRpYWwiPT09dSxwPSJyYWRpYWwiPT09dSxkPSJhdXRvIj09PXUsbT1bXTtpZighZCl7dmFyIGcsdj1mdW5jdGlvbihyLGkpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGFuZ2xlLG49dC5zdG9wYW5nbGU7cmV0dXJuIHI+ZSYmZT5ufHxyPGUmJmU8bn0oZSxyKSl7dmFyIHM9TWF0aC5hYnMoci1lLnN0YXJ0YW5nbGUpLGw9TWF0aC5hYnMoci1lLnN0b3BhbmdsZSksYz1zPGw/czpsOyhhPSJ0YW4iPT09aT9rKHQsbixvLGMsMCk6VCh0LG4sbyxjLE1hdGguUEkvMikpLnRleHRQb3NBbmdsZT1yLG0ucHVzaChhKX19O2lmKGZ8fGgpe2ZvcihnPTQ7Zz49LTQ7Zy09Mil2KE1hdGguUEkqZywidGFuIik7Zm9yKGc9NDtnPj0tNDtnLT0yKXYoTWF0aC5QSSooZysxKSwidGFuIil9aWYoZnx8cCl7Zm9yKGc9NDtnPj0tNDtnLT0yKXYoTWF0aC5QSSooZysxLjUpLCJyYWQiKTtmb3IoZz00O2c+PS00O2ctPTIpdihNYXRoLlBJKihnKy41KSwicmFkIil9fWlmKHN8fGR8fGYpe3ZhciB5PU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpO2lmKChhPXtzY2FsZTppKm4qMi95LHJDZW50ZXI6MS1pLHJvdGF0ZTowfSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsYS5zY2FsZT49MSlyZXR1cm4gYTttLnB1c2goYSl9KGR8fHApJiYoKGE9VCh0LG4sbyxsLGMpKS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixtLnB1c2goYSkpLChkfHxoKSYmKChhPWsodCxuLG8sbCxjKSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsbS5wdXNoKGEpKTtmb3IodmFyIHg9MCxiPTAsXz0wO188bS5sZW5ndGg7XysrKXt2YXIgdz1tW19dLnNjYWxlO2lmKGI8dyYmKGI9dyx4PV8pLCFkJiZiPj0xKWJyZWFrfXJldHVybiBtW3hdfWZ1bmN0aW9uIFQodCxlLHIsbixpKXtlPU1hdGgubWF4KDAsZS0yKm0pO3ZhciBhPXQud2lkdGgvdC5oZWlnaHQsbz1TKGEsbixlLHIpO3JldHVybntzY2FsZToyKm8vdC5oZWlnaHQsckNlbnRlcjpBKGEsby9lKSxyb3RhdGU6TShpKX19ZnVuY3Rpb24gayh0LGUscixuLGkpe2U9TWF0aC5tYXgoMCxlLTIqbSk7dmFyIGE9dC5oZWlnaHQvdC53aWR0aCxvPVMoYSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LndpZHRoLHJDZW50ZXI6QShhLG8vZSkscm90YXRlOk0oaStNYXRoLlBJLzIpfX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIE1hdGguY29zKGUpLXQqZX1mdW5jdGlvbiBNKHQpe3JldHVybigxODAvTWF0aC5QSSp0KzcyMCklMTgwLTkwfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGk9dCsxLygyKk1hdGgudGFuKGUpKTtyZXR1cm4gcipNYXRoLm1pbigxLyhNYXRoLnNxcnQoaSppKy41KStpKSxuLyhNYXRoLnNxcnQodCp0K24vMikrdCkpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gdC52IT09ZS52VG90YWx8fGUudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMik6MX1mdW5jdGlvbiBMKHQsZSl7dmFyIHI9ZS5weG1pZFswXSxuPWUucHhtaWRbMV0saT10LndpZHRoLzIsYT10LmhlaWdodC8yO3JldHVybiByPDAmJihpKj0tMSksbjwwJiYoYSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmkrTWF0aC5hYnMoYSkqKGk+MD8xOi0xKS8yLHk6YS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIEModCxlKXt2YXIgcixuLGksYT10LnRyYWNlLG89e3g6dC5jeCx5OnQuY3l9LHM9e3R4OjAsdHk6MH07cy50eSs9YS50aXRsZS5mb250LnNpemUsaT1JKGEpLC0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT8oby55LT0oMStpKSp0LnIscy50eS09dC50aXRsZUJveC5oZWlnaHQpOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKG8ueSs9KDEraSkqdC5yKTt2YXIgbCxjLHU9KGw9dC5yLGM9dC50cmFjZS5hc3BlY3RyYXRpbyxsLyh2b2lkIDA9PT1jPzE6YykpLGY9ZS53KihhLmRvbWFpbi54WzFdLWEuZG9tYWluLnhbMF0pLzI7cmV0dXJuLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImxlZnQiKT8oZis9dSxvLngtPSgxK2kpKnUscy50eCs9dC50aXRsZUJveC53aWR0aC8yKTotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigiY2VudGVyIik/Zio9MjotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSYmKGYrPXUsby54Kz0oMStpKSp1LHMudHgtPXQudGl0bGVCb3gud2lkdGgvMikscj1mL3QudGl0bGVCb3gud2lkdGgsbj1QKHQsZSkvdC50aXRsZUJveC5oZWlnaHQse3g6by54LHk6by55LHNjYWxlOk1hdGgubWluKHIsbiksdHg6cy50eCx0eTpzLnR5fX1mdW5jdGlvbiBQKHQsZSl7dmFyIHI9dC50cmFjZSxuPWUuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4odC50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiBJKHQpe3ZhciBlLHI9dC5wdWxsO2lmKCFyKXJldHVybiAwO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCxlPTA7ZTx0LnB1bGwubGVuZ3RoO2UrKyl0LnB1bGxbZV0+ciYmKHI9dC5wdWxsW2VdKTtyZXR1cm4gcn1mdW5jdGlvbiBPKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXVswXSxhPWkudHJhY2Usbz1hLmRvbWFpbixzPWUudyooby54WzFdLW8ueFswXSksbD1lLmgqKG8ueVsxXS1vLnlbMF0pO2EudGl0bGUudGV4dCYmIm1pZGRsZSBjZW50ZXIiIT09YS50aXRsZS5wb3NpdGlvbiYmKGwtPVAoaSxlKSk7dmFyIGM9cy8yLHU9bC8yOyJmdW5uZWxhcmVhIiE9PWEudHlwZXx8YS5zY2FsZWdyb3VwfHwodS89YS5hc3BlY3RyYXRpbyksaS5yPU1hdGgubWluKGMsdSkvKDErSShhKSksaS5jeD1lLmwrZS53KihhLmRvbWFpbi54WzFdK2EuZG9tYWluLnhbMF0pLzIsaS5jeT1lLnQrZS5oKigxLWEuZG9tYWluLnlbMF0pLWwvMixhLnRpdGxlLnRleHQmJi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKGkuY3ktPVAoaSxlKSksYS5zY2FsZWdyb3VwJiYtMT09PXIuaW5kZXhPZihhLnNjYWxlZ3JvdXApJiZyLnB1c2goYS5zY2FsZWdyb3VwKX0hZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89MS8wLHM9ZVthXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKHI9dFtuXVswXSwoaT1yLnRyYWNlKS5zY2FsZWdyb3VwPT09cyl7dmFyIGw7aWYoInBpZSI9PT1pLnR5cGUpbD1yLnIqci5yO2Vsc2UgaWYoImZ1bm5lbGFyZWEiPT09aS50eXBlKXt2YXIgYyx1O2kuYXNwZWN0cmF0aW8+MT8oYz1yLnIsdT1jL2kuYXNwZWN0cmF0aW8pOih1PXIucixjPXUqaS5hc3BlY3RyYXRpbyksYyo9KDEraS5iYXNlcmF0aW8pLzIsbD1jKnV9bz1NYXRoLm1pbihvLGwvci52VG90YWwpfWZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dWzBdLChpPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1zKXt2YXIgZj1vKnIudlRvdGFsOyJmdW5uZWxhcmVhIj09PWkudHlwZSYmKGYvPSgxK2kuYmFzZXJhdGlvKS8yLGYvPWkuYXNwZWN0cmF0aW8pLHIucj1NYXRoLnNxcnQoZil9fX0odCxyKX1mdW5jdGlvbiB6KHQsZSl7cmV0dXJuW3QqTWF0aC5zaW4oZSksLXQqTWF0aC5jb3MoZSldfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1yLnRyYWNlLGE9aS50ZXh0dGVtcGxhdGUsbz1pLnRleHRpbmZvO2lmKCFhJiZvJiYibm9uZSIhPT1vKXt2YXIgcyxjPW8uc3BsaXQoIisiKSx1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yy5pbmRleE9mKHQpfSxmPXUoImxhYmVsIiksaD11KCJ0ZXh0IikscD11KCJ2YWx1ZSIpLGQ9dSgicGVyY2VudCIpLG09bi5zZXBhcmF0b3JzO2lmKHM9Zj9bZS5sYWJlbF06W10saCl7dmFyIHY9Zy5nZXRGaXJzdEZpbGxlZChpLnRleHQsZS5wdHMpO3kodikmJnMucHVzaCh2KX1wJiZzLnB1c2goZy5mb3JtYXRQaWVWYWx1ZShlLnYsbSkpLGQmJnMucHVzaChnLmZvcm1hdFBpZVBlcmNlbnQoZS52L3IudlRvdGFsLG0pKSxlLnRleHQ9cy5qb2luKCI8YnI+Iil9aWYoYSl7dmFyIHg9bC5jYXN0T3B0aW9uKGksZS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZih4KXt2YXIgYj1mdW5jdGlvbih0KXtyZXR1cm57bGFiZWw6dC5sYWJlbCx2YWx1ZTp0LnYsdmFsdWVMYWJlbDpnLmZvcm1hdFBpZVZhbHVlKHQudixuLnNlcGFyYXRvcnMpLHBlcmNlbnQ6dC52L3IudlRvdGFsLHBlcmNlbnRMYWJlbDpnLmZvcm1hdFBpZVBlcmNlbnQodC52L3IudlRvdGFsLG4uc2VwYXJhdG9ycyksY29sb3I6dC5jb2xvcix0ZXh0OnQudGV4dCxjdXN0b21kYXRhOmwuY2FzdE9wdGlvbihpLHQuaSwiY3VzdG9tZGF0YSIpfX0oZSksXz1nLmdldEZpcnN0RmlsbGVkKGkudGV4dCxlLnB0cyk7KHkoXyl8fCIiPT09XykmJihiLnRleHQ9XyksZS50ZXh0PWwudGV4dHRlbXBsYXRlU3RyaW5nKHgsYix0Ll9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxiLGkuX21ldGF8fHt9KX1lbHNlIGUudGV4dD0iIn19ZnVuY3Rpb24gUih0LGUpe3ZhciByPXQucm90YXRlKk1hdGguUEkvMTgwLG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxhPShlLmxlZnQrZS5yaWdodCkvMixvPShlLnRvcCtlLmJvdHRvbSkvMjt0LnRleHRYPWEqbi1vKmksdC50ZXh0WT1hKmkrbypuLHQubm9DZW50ZXI9ITB9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxhPXIuX3NpemU7ZCgicGllIixyKSxfKGUsdCksTyhlLGEpO3ZhciBoPWwubWFrZVRyYWNlR3JvdXBzKHIuX3BpZWxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGg9bi5zZWxlY3QodGhpcyksZD1lWzBdLG09ZC50cmFjZTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXSxhPWkucixvPWkudHJhY2Uscz1nLmdldFJvdGF0aW9uQW5nbGUoby5yb3RhdGlvbiksbD0yKk1hdGguUEkvaS52VG90YWwsYz0icHgwIix1PSJweDEiO2lmKCJjb3VudGVyY2xvY2t3aXNlIj09PW8uZGlyZWN0aW9uKXtmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uaGlkZGVuO2UrKyk7aWYoZT09PXQubGVuZ3RoKXJldHVybjtzKz1sKnRbZV0udixsKj0tMSxjPSJweDEiLHU9InB4MCJ9Zm9yKG49eihhLHMpLGU9MDtlPHQubGVuZ3RoO2UrKykocj10W2VdKS5oaWRkZW58fChyW2NdPW4sci5zdGFydGFuZ2xlPXMscys9bCpyLnYvMixyLnB4bWlkPXooYSxzKSxyLm1pZGFuZ2xlPXMscys9bCpyLnYvMixuPXooYSxzKSxyLnN0b3BhbmdsZT1zLHJbdV09bixyLmxhcmdlQXJjPXIudj5pLnZUb3RhbC8yPzE6MCxyLmhhbGZhbmdsZT1NYXRoLlBJKk1hdGgubWluKHIudi9pLnZUb3RhbCwuNSksci5yaW5nPTEtby5ob2xlLHIuckluc2NyaWJlZD1FKHIsaSkpfShlKSxoLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksaC5lYWNoKChmdW5jdGlvbigpe3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksdi5leGl0KCkucmVtb3ZlKCk7dmFyIHk9W1tbXSxbXV0sW1tdLFtdXV0sXz0hMTt2LmVhY2goKGZ1bmN0aW9uKGksYSl7aWYoaS5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2kucG9pbnROdW1iZXI9aS5pLGkuY3VydmVOdW1iZXI9bS5pbmRleCx5W2kucHhtaWRbMV08MD8wOjFdW2kucHhtaWRbMF08MD8wOjFdLnB1c2goaSk7dmFyIG89ZC5jeCxjPWQuY3ksdT1uLnNlbGVjdCh0aGlzKSxoPXUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtpXSk7aWYoaC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHUuY2FsbCh4LHQsZSksbS5wdWxsKXt2YXIgdj0rZy5jYXN0T3B0aW9uKG0ucHVsbCxpLnB0cyl8fDA7dj4wJiYobys9dippLnB4bWlkWzBdLGMrPXYqaS5weG1pZFsxXSl9aS5jeEZpbmFsPW8saS5jeUZpbmFsPWM7dmFyIFQ9bS5ob2xlO2lmKGkudj09PWQudlRvdGFsKXt2YXIgaz0iTSIrKG8raS5weDBbMF0pKyIsIisoYytpLnB4MFsxXSkrQyhpLnB4MCxpLnB4bWlkLCEwLDEpK0MoaS5weG1pZCxpLnB4MCwhMCwxKSsiWiI7VD9oLmF0dHIoImQiLCJNIisobytUKmkucHgwWzBdKSsiLCIrKGMrVCppLnB4MFsxXSkrQyhpLnB4MCxpLnB4bWlkLCExLFQpK0MoaS5weG1pZCxpLnB4MCwhMSxUKSsiWiIrayk6aC5hdHRyKCJkIixrKX1lbHNle3ZhciBBPUMoaS5weDAsaS5weDEsITAsMSk7aWYoVCl7dmFyIE09MS1UO2guYXR0cigiZCIsIk0iKyhvK1QqaS5weDFbMF0pKyIsIisoYytUKmkucHgxWzFdKStDKGkucHgxLGkucHgwLCExLFQpKyJsIitNKmkucHgwWzBdKyIsIitNKmkucHgwWzFdK0ErIloiKX1lbHNlIGguYXR0cigiZCIsIk0iK28rIiwiK2MrImwiK2kucHgwWzBdKyIsIitpLnB4MFsxXStBKyJaIil9RCh0LGksZCk7dmFyIFM9Zy5jYXN0T3B0aW9uKG0udGV4dHBvc2l0aW9uLGkucHRzKSxFPXUuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoaS50ZXh0JiYibm9uZSIhPT1TP1swXTpbXSk7RS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdT1sLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksaD1sLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PVM/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWcuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LmNvbG9yLGUucHRzKXx8ci5jb2xvcixpPWcuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxnLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxhPWcuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6aSxzaXplOmF9fShtLGksci5mb250KTpiKG0saSxyLmZvbnQpKTt1LnRleHQoaS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LGgpLmNhbGwoZi5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHYseT1zLmJCb3godS5ub2RlKCkpO2lmKCJvdXRzaWRlIj09PVMpdj1MKHksaSk7ZWxzZSBpZih2PXcoeSxpLGQpLCJhdXRvIj09PVMmJnYuc2NhbGU8MSl7dmFyIHg9bC5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxtLm91dHNpZGV0ZXh0Zm9udCk7dS5jYWxsKHMuZm9udCx4KSx2PUwoeT1zLmJCb3godS5ub2RlKCkpLGkpfXZhciBUPXYudGV4dFBvc0FuZ2xlLGs9dm9pZCAwPT09VD9pLnB4bWlkOnooZC5yLFQpO2lmKHYudGFyZ2V0WD1vK2tbMF0qdi5yQ2VudGVyKyh2Lnh8fDApLHYudGFyZ2V0WT1jK2tbMV0qdi5yQ2VudGVyKyh2Lnl8fDApLFIodix5KSx2Lm91dHNpZGUpe3ZhciBBPXYudGFyZ2V0WTtpLnlMYWJlbE1pbj1BLXkuaGVpZ2h0LzIsaS55TGFiZWxNaWQ9QSxpLnlMYWJlbE1heD1BK3kuaGVpZ2h0LzIsaS5sYWJlbEV4dHJhWD0wLGkubGFiZWxFeHRyYVk9MCxfPSEwfXYuZm9udFNpemU9aC5zaXplLHAobS50eXBlLHYsciksZVthXS50cmFuc2Zvcm09dix1LmF0dHIoInRyYW5zZm9ybSIsbC5nZXRUZXh0VHJhbnNmb3JtKHYpKX0pKX1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBhPW4qKGVbMF0tdFswXSksbz1uKihlWzFdLXRbMV0pO3JldHVybiJhIituKmQucisiLCIrbipkLnIrIiAwICIraS5sYXJnZUFyYysocj8iIDEgIjoiIDAgIikrYSsiLCIrb319KSk7dmFyIFQ9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEobS50aXRsZS50ZXh0P1swXTpbXSk7aWYoVC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLFQuZXhpdCgpLnJlbW92ZSgpLFQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZSxyPWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxpPW0udGl0bGUudGV4dDttLl9tZXRhJiYoaT1sLnRlbXBsYXRlU3RyaW5nKGksbS5fbWV0YSkpLHIudGV4dChpKS5hdHRyKHtjbGFzczoidGl0bGV0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LG0udGl0bGUuZm9udCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KSxlPSJtaWRkbGUgY2VudGVyIj09PW0udGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KGQpOkMoZCxhKSxyLmF0dHIoInRyYW5zZm9ybSIsdShlLngsZS55KStjKE1hdGgubWluKDEsZS5zY2FsZSkpK3UoZS50eCxlLnR5KSl9KSksXyYmZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZixoLHAsZDtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHQucHhtaWRbMV0tZS5weG1pZFsxXX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIGUucHhtaWRbMV0tdC5weG1pZFsxXX1mdW5jdGlvbiB5KHQscil7cnx8KHI9e30pO3ZhciBpLGMsdSxoLHA9ci5sYWJlbEV4dHJhWSsobj9yLnlMYWJlbE1heDpyLnlMYWJlbE1pbiksZD1uP3QueUxhYmVsTWluOnQueUxhYmVsTWF4LG09bj90LnlMYWJlbE1heDp0LnlMYWJlbE1pbix2PXQuY3lGaW5hbCtvKHQucHgwWzFdLHQucHgxWzFdKSx5PXAtZDtpZih5Kmw+MCYmKHQubGFiZWxFeHRyYVk9eSksQXJyYXkuaXNBcnJheShlLnB1bGwpKWZvcihjPTA7YzxmLmxlbmd0aDtjKyspKHU9ZltjXSk9PT10fHwoZy5jYXN0T3B0aW9uKGUucHVsbCx0LnB0cyl8fDApPj0oZy5jYXN0T3B0aW9uKGUucHVsbCx1LnB0cyl8fDApfHwoKHQucHhtaWRbMV0tdS5weG1pZFsxXSkqbD4wPyh5PXUuY3lGaW5hbCtvKHUucHgwWzFdLHUucHgxWzFdKS1kLXQubGFiZWxFeHRyYVkpKmw+MCYmKHQubGFiZWxFeHRyYVkrPXkpOihtK3QubGFiZWxFeHRyYVktdikqbD4wJiYoaT0zKnMqTWF0aC5hYnMoYy1mLmluZGV4T2YodCkpLChoPXUuY3hGaW5hbCthKHUucHgwWzBdLHUucHgxWzBdKStpLSh0LmN4RmluYWwrdC5weG1pZFswXSktdC5sYWJlbEV4dHJhWCkqcz4wJiYodC5sYWJlbEV4dHJhWCs9aCkpKX1mb3Iobj0wO248MjtuKyspZm9yKGk9bj9tOnYsbz1uP01hdGgubWF4Ok1hdGgubWluLGw9bj8xOi0xLHI9MDtyPDI7cisrKXtmb3IoYT1yP01hdGgubWF4Ok1hdGgubWluLHM9cj8xOi0xLChjPXRbbl1bcl0pLnNvcnQoaSksdT10WzEtbl1bcl0sZj11LmNvbmNhdChjKSxwPVtdLGg9MDtoPGMubGVuZ3RoO2grKyl2b2lkIDAhPT1jW2hdLnlMYWJlbE1pZCYmcC5wdXNoKGNbaF0pO2ZvcihkPSExLGg9MDtuJiZoPHUubGVuZ3RoO2grKylpZih2b2lkIDAhPT11W2hdLnlMYWJlbE1pZCl7ZD11W2hdO2JyZWFrfWZvcihoPTA7aDxwLmxlbmd0aDtoKyspe3ZhciB4PWgmJnBbaC0xXTtkJiYhaCYmKHg9ZCkseShwW2hdLHgpfX19KHksbSksZnVuY3Rpb24odCxlKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBpPXIuc2VsZWN0KCJnLnNsaWNldGV4dCB0ZXh0Iik7dC50cmFuc2Zvcm0udGFyZ2V0WCs9dC5sYWJlbEV4dHJhWCx0LnRyYW5zZm9ybS50YXJnZXRZKz10LmxhYmVsRXh0cmFZLGkuYXR0cigidHJhbnNmb3JtIixsLmdldFRleHRUcmFuc2Zvcm0odC50cmFuc2Zvcm0pKTt2YXIgYT10LmN4RmluYWwrdC5weG1pZFswXSxzPSJNIithKyIsIisodC5jeUZpbmFsK3QucHhtaWRbMV0pLGM9KHQueUxhYmVsTWF4LXQueUxhYmVsTWluKSoodC5weG1pZFswXTwwPy0xOjEpLzQ7aWYodC5sYWJlbEV4dHJhWCl7dmFyIHU9dC5sYWJlbEV4dHJhWCp0LnB4bWlkWzFdL3QucHhtaWRbMF0sZj10LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZLSh0LmN5RmluYWwrdC5weG1pZFsxXSk7TWF0aC5hYnModSk+TWF0aC5hYnMoZik/cys9ImwiK2YqdC5weG1pZFswXS90LnB4bWlkWzFdKyIsIitmKyJIIisoYSt0LmxhYmVsRXh0cmFYK2MpOnMrPSJsIit0LmxhYmVsRXh0cmFYKyIsIit1KyJ2IisoZi11KSsiaCIrY31lbHNlIHMrPSJWIisodC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWSkrImgiK2M7bC5lbnN1cmVTaW5nbGUociwicGF0aCIsInRleHRsaW5lIikuY2FsbChvLnN0cm9rZSxlLm91dHNpZGV0ZXh0Zm9udC5jb2xvcikuYXR0cih7InN0cm9rZS13aWR0aCI6TWF0aC5taW4oMixlLm91dHNpZGV0ZXh0Zm9udC5zaXplLzgpLGQ6cyxmaWxsOiJub25lIn0pfWVsc2Ugci5zZWxlY3QoInBhdGgudGV4dGxpbmUiKS5yZW1vdmUoKX0pKX0odixtKSxfJiZtLmF1dG9tYXJnaW4pe3ZhciBrPXMuYkJveChoLm5vZGUoKSksQT1tLmRvbWFpbixNPWEudyooQS54WzFdLUEueFswXSksUz1hLmgqKEEueVsxXS1BLnlbMF0pLEU9KC41Kk0tZC5yKS9hLncsUD0oLjUqUy1kLnIpL2EuaDtpLmF1dG9NYXJnaW4odCwicGllLiIrbS51aWQrIi5hdXRvbWFyZ2luIix7eGw6QS54WzBdLUUseHI6QS54WzFdK0UseWI6QS55WzBdLVAseXQ6QS55WzFdK1AsbDpNYXRoLm1heChkLmN4LWQuci1rLmxlZnQsMCkscjpNYXRoLm1heChrLnJpZ2h0LShkLmN4K2QuciksMCksYjpNYXRoLm1heChrLmJvdHRvbS0oZC5jeStkLnIpLDApLHQ6TWF0aC5tYXgoZC5jeS1kLnItay50b3AsMCkscGFkOjV9KX19KSl9KSk7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtoLnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXR0cigiZHkiKSYmdC5hdHRyKCJkeSIsdC5hdHRyKCJkeSIpKX0pKX0pLDApfSxmb3JtYXRTbGljZUxhYmVsOkQsdHJhbnNmb3JtSW5zaWRlVGV4dDp3LGRldGVybWluZUluc2lkZVRleHRGb250OmIscG9zaXRpb25UaXRsZU91dHNpZGU6QyxwcmVyZW5kZXJUaXRsZXM6XyxsYXlvdXRBcmVhczpPLGF0dGFjaEZ4SGFuZGxlcnM6eCxjb21wdXRlVHJhbnNmb3JtOlJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi8uLi9wbG90cy9wbG90cyI6NjE5LCIuLi9iYXIvY29uc3RhbnRzIjo2NTAsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiLi9ldmVudF9kYXRhIjo5MDQsIi4vaGVscGVycyI6OTA1LCJAcGxvdGx5L2QzIjo1OH1dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuL3N0eWxlX29uZSIpLGE9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3BpZWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7YSh0LGUsInBpZSIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6ZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoaSx0LGUpfSkpfSkpfX0seyIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NjQsIi4vc3R5bGVfb25lIjo5MTEsIkBwbG90bHkvZDMiOjU4fV0sOTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vaGVscGVycyIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixzKS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4vaGVscGVycyI6OTA1fV0sOTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saW5kaWNlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHlib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpuLnRleHQsbWFya2VyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYmxlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGMifSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwLGVkaXRUeXBlOiJjYWxjIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxhcmVhcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0seyIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyNn1dLDkxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9wb2ludGNsb3VkMmQsaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLG89dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKTtmdW5jdGlvbiBzKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy50eXBlPSJwb2ludGNsb3VkIix0aGlzLnBpY2tYRGF0YT1bXSx0aGlzLnBpY2tZRGF0YT1bXSx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuY29sb3I9InJnYigwLCAwLCAwKSIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMuaWRUb0luZGV4PW5ldyBJbnQzMkFycmF5KDApLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zPXtwb3NpdGlvbnM6bmV3IEZsb2F0MzJBcnJheSgwKSxpZFRvSW5kZXg6dGhpcy5pZFRvSW5kZXgsc2l6ZW1pbjouNSxzaXplbWF4OjEyLGNvbG9yOlswLDAsMCwxXSxhcmVhUmF0aW86MSxib3JkZXJDb2xvcjpbMCwwLDAsMV19LHRoaXMucG9pbnRjbG91ZD1uKHQuZ2xwbG90LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpLHRoaXMucG9pbnRjbG91ZC5fdHJhY2U9dGhpc312YXIgbD1zLnByb3RvdHlwZTtsLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1vKHQse30pfSxsLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8scyxsLGM9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxmPXRoaXMucGlja1hZRGF0YT10Lnh5LGg9dC54Ym91bmRzJiZ0Lnlib3VuZHMscD10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihmKXtpZihuPWYsZT1mLmxlbmd0aD4+PjEsaClkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihsPTA7bDxlO2wrKylvPW5bMipsXSxzPW5bMipsKzFdLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7aWYocClyPXA7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylyW2xdPWx9ZWxzZSBmb3IoZT1jLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKW89Y1tsXSxzPXVbbF0scltsXT1sLG5bMipsXT1vLG5bMipsKzFdPXMsbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgbT1pKHQubWFya2VyLmNvbG9yKSxnPWkodC5tYXJrZXIuYm9yZGVyLmNvbG9yKSx2PXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O21bM10qPXYsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1tO3ZhciB5PXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT15KXt5PWMubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9eSxnWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9Zzt2YXIgeD10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyk7dmFyIF89dGhpcy5zY2VuZS54YXhpcyx3PXRoaXMuc2NlbmUueWF4aXMsVD1iLzJ8fC41O3QuX2V4dHJlbWVzW18uX2lkXT1hKF8sW2RbMF0sZFsyXV0se3BwYWQ6VH0pLHQuX2V4dHJlbWVzW3cuX2lkXT1hKHcsW2RbMV0sZFszXV0se3BwYWQ6VH0pfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgcyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIjoxMTIwLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo1MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjU1MywiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjkzNn1dLDkxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoIngiKSxhKCJ5IiksYSgieGJvdW5kcyIpLGEoInlib3VuZHMiKSx0Lnh5JiZ0Lnh5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiYoZS54eT10Lnh5KSx0LmluZGljZXMmJnQuaW5kaWNlcyBpbnN0YW5jZW9mIEludDMyQXJyYXkmJihlLmluZGljZXM9dC5pbmRpY2VzKSxhKCJ0ZXh0IiksYSgibWFya2VyLmNvbG9yIixyKSxhKCJtYXJrZXIub3BhY2l0eSIpLGEoIm1hcmtlci5ibGVuZCIpLGEoIm1hcmtlci5zaXplbWluIiksYSgibWFya2VyLnNpemVtYXgiKSxhKCJtYXJrZXIuYm9yZGVyLmNvbG9yIixyKSxhKCJtYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyIpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjUwMywiLi9hdHRyaWJ1dGVzIjo5MTJ9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7WyIqcG9pbnRjbG91ZCogdHJhY2UgaXMgZGVwcmVjYXRlZCEiLCJQbGVhc2UgY29uc2lkZXIgc3dpdGNoaW5nIHRvIHRoZSAqc2NhdHRlcmdsKiB0cmFjZSB0eXBlLiJdLmpvaW4oIiAiKTtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vc2NhdHRlcjNkL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwb2ludGNsb3VkIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDJkIiksY2F0ZWdvcmllczpbImdsIiwiZ2wyZCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDJkIjo1OTYsIi4uL3NjYXR0ZXIzZC9jYWxjIjo5NTUsIi4vYXR0cmlidXRlcyI6OTEyLCIuL2NvbnZlcnQiOjkxMywiLi9kZWZhdWx0cyI6OTE0fV0sOTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVycyxoPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHA9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsOyhlLmV4cG9ydHM9cCh7aG92ZXJpbmZvOmgoe30saS5ob3ZlcmluZm8se2ZsYWdzOltdLGFycmF5T2s6ITF9KSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxkb21haW46cyh7bmFtZToic2Fua2V5Iix0cmFjZTohMH0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgifSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuM3MiLGRlc2NyaXB0aW9uOmYoInZhbHVlIil9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksY3VzdG9tZGF0YTp2b2lkIDAsbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6LjUsYXJyYXlPazohMH19LHBhZDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjowLGRmbHQ6MjB9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjoxLGRmbHQ6MjB9LGhvdmVyaW5mbzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwibm9uZSIsInNraXAiXSxkZmx0OiJhbGwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6WyJ2YWx1ZSIsImxhYmVsIl19KX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdGFyZ2V0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0saG92ZXJpbmZvOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGRmbHQ6ImFsbCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbInZhbHVlIiwibGFiZWwiXX0pLGNvbG9yc2NhbGVzOnUoImNvbmNlbnRyYXRpb25zY2FsZXMiLHtlZGl0VHlwZToiY2FsYyIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6IiJ9LGNtYXg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6MX0sY21pbjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDowfSxjb2xvcnNjYWxlOmgoYygpLmNvbG9yc2NhbGUse2RmbHQ6W1swLCJ3aGl0ZSJdLFsxLCJibGFjayJdXX0pfSl9fSwiY2FsYyIsIm5lc3RlZCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjM2NSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjozOTcsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTM2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo1NDMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzN9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxhPXQoIi4vcGxvdCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsdT10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaCh0LGUpe3ZhciByPXQuX2Z1bGxEYXRhW2VdLG49dC5fZnVsbExheW91dCxpPW4uZHJhZ21vZGUsYT0icGFuIj09PW4uZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiLG89ci5fYmdSZWN0O2lmKCJwYW4iIT09aSYmInpvb20iIT09aSl7cyhvLGEpO3ZhciBoPXtfaWQ6IngiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVgsX2xlbmd0aDpyLl9zYW5rZXkud2lkdGh9LHA9e19pZDoieSIsYzJwOnUuaWRlbnRpdHksX29mZnNldDpyLl9zYW5rZXkudHJhbnNsYXRlWSxfbGVuZ3RoOnIuX3NhbmtleS5oZWlnaHR9LGQ9e2dkOnQsZWxlbWVudDpvLm5vZGUoKSxwbG90aW5mbzp7aWQ6ZSx4YXhpczpoLHlheGlzOnAsZmlsbFJhbmdlSXRlbXM6dS5ub29wfSxzdWJwbG90OmUseGF4ZXM6W2hdLHlheGVzOltwXSxkb25lRm5Db21wbGV0ZWQ6ZnVuY3Rpb24ocil7dmFyIG4saT10Ll9mdWxsRGF0YVtlXSxhPWkubm9kZS5ncm91cHMuc2xpY2UoKSxvPVtdO2Z1bmN0aW9uIHModCl7Zm9yKHZhciBlPWkuX3NhbmtleS5ncmFwaC5ub2RlcyxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5wb2ludE51bWJlcj09PXQpcmV0dXJuIGVbcl19Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXMocltsXS5wb2ludE51bWJlcik7aWYoYylpZihjLmdyb3VwKXtmb3IodmFyIHU9MDt1PGMuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7dSsrKW8ucHVzaChjLmNoaWxkcmVuTm9kZXNbdV0ucG9pbnROdW1iZXIpO2FbYy5wb2ludE51bWJlci1pLm5vZGUuX2NvdW50XT0hMX1lbHNlIG8ucHVzaChjLnBvaW50TnVtYmVyKX1uPWEuZmlsdGVyKEJvb2xlYW4pLmNvbmNhdChbb10pLGYuY2FsbCgiX2d1aVJlc3R5bGUiLHQseyJub2RlLmdyb3VwcyI6W25dfSxlKX0scHJlcEZuOmZ1bmN0aW9uKHQsZSxyKXtjKHQsZSxyLGQsaSl9fTtsLmluaXQoZCl9fXIubmFtZT0ic2Fua2V5IixyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6by5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInNhbmtleSIpWzBdO2EodCxlKSxyLnVwZGF0ZUZ4KHQpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJzYW5rZXkiKSxhPWUuX2hhcyYmZS5faGFzKCJzYW5rZXkiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnNhbmtleSIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmJnc2Fua2V5IikucmVtb3ZlKCkpfSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5fZnVsbERhdGEubGVuZ3RoO2UrKyloKHQsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjM4NSwiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NDA3LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL3NldGN1cnNvciI6NTI0LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjU3NSwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjU5MywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9wbG90Ijo5MjJ9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dC5ub2RlLGE9dC5saW5rLGM9W10sdT1vKGEuY29sb3IpLGY9byhhLmN1c3RvbWRhdGEpLGg9e30scD17fSxkPWEuY29sb3JzY2FsZXMubGVuZ3RoO2ZvcihlPTA7ZTxkO2UrKyl7dmFyIG09YS5jb2xvcnNjYWxlc1tlXSxnPWwuZXh0cmFjdFNjYWxlKG0se2NMZXR0ZXI6ImMifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtwW20ubGFiZWxdPXZ9dmFyIHk9MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPnkmJih5PWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT55JiYoeT1hLnRhcmdldFtlXSk7dmFyIHgsYj15KzE7dC5ub2RlLl9jb3VudD1iO3ZhciBfPXQubm9kZS5ncm91cHMsdz17fTtmb3IoZT0wO2U8Xy5sZW5ndGg7ZSsrKXt2YXIgVD1fW2VdO2Zvcih4PTA7eDxULmxlbmd0aDt4Kyspe3ZhciBrPVRbeF0sQT1iK2U7dy5oYXNPd25Qcm9wZXJ0eShrKT9pLndhcm4oIk5vZGUgIitrKyIgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZ3JvdXAuIik6d1trXT1BfX12YXIgTT17c291cmNlOltdLHRhcmdldDpbXX07Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKyl7dmFyIFM9YS52YWx1ZVtlXSxFPWEuc291cmNlW2VdLEw9YS50YXJnZXRbZV07aWYoUz4wJiZzKEUsYikmJnMoTCxiKSYmKCF3Lmhhc093blByb3BlcnR5KEUpfHwhdy5oYXNPd25Qcm9wZXJ0eShMKXx8d1tFXSE9PXdbTF0pKXt3Lmhhc093blByb3BlcnR5KEwpJiYoTD13W0xdKSx3Lmhhc093blByb3BlcnR5KEUpJiYoRT13W0VdKSxMPStMLGhbRT0rRV09aFtMXT0hMDt2YXIgQz0iIjthLmxhYmVsJiZhLmxhYmVsW2VdJiYoQz1hLmxhYmVsW2VdKTt2YXIgUD1udWxsO0MmJnAuaGFzT3duUHJvcGVydHkoQykmJihQPXBbQ10pLGMucHVzaCh7cG9pbnROdW1iZXI6ZSxsYWJlbDpDLGNvbG9yOnU/YS5jb2xvcltlXTphLmNvbG9yLGN1c3RvbWRhdGE6Zj9hLmN1c3RvbWRhdGFbZV06YS5jdXN0b21kYXRhLGNvbmNlbnRyYXRpb25zY2FsZTpQLHNvdXJjZTpFLHRhcmdldDpMLHZhbHVlOitTfSksTS5zb3VyY2UucHVzaChFKSxNLnRhcmdldC5wdXNoKEwpfX12YXIgST1iK18ubGVuZ3RoLE89byhyLmNvbG9yKSx6PW8oci5jdXN0b21kYXRhKSxEPVtdO2ZvcihlPTA7ZTxJO2UrKylpZihoW2VdKXt2YXIgUj1yLmxhYmVsW2VdO0QucHVzaCh7Z3JvdXA6ZT5iLTEsY2hpbGRyZW5Ob2RlczpbXSxwb2ludE51bWJlcjplLGxhYmVsOlIsY29sb3I6Tz9yLmNvbG9yW2VdOnIuY29sb3IsY3VzdG9tZGF0YTp6P3IuY3VzdG9tZGF0YVtlXTpyLmN1c3RvbWRhdGF9KX12YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1pLmluaXQyZEFycmF5KHQsMCksbz0wO288TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO28rKylpZihpLmlzSW5kZXgoZVtvXSx0KSYmaS5pc0luZGV4KHJbb10sdCkpe2lmKGVbb109PT1yW29dKXJldHVybiEwO2FbZVtvXV0ucHVzaChyW29dKX1yZXR1cm4gbihhKS5jb21wb25lbnRzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSkpfShJLE0uc291cmNlLE0udGFyZ2V0KSYmKEY9ITApLHtjaXJjdWxhcjpGLGxpbmtzOmMsbm9kZXM6RCxncm91cHM6Xyxncm91cExvb2t1cDp3fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKGUpO3JldHVybiBhKHtjaXJjdWxhcjpyLmNpcmN1bGFyLF9ub2RlczpyLm5vZGVzLF9saW5rczpyLmxpbmtzLF9ncm91cHM6ci5ncm91cHMsX2dyb3VwTG9va3VwOnIuZ3JvdXBMb29rdXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ3VwIjo1MDAsInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjozMDZ9XSw5MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtub2RlVGV4dE9mZnNldEhvcml6b250YWw6NCxub2RlVGV4dE9mZnNldFZlcnRpY2FsOjMsbm9kZVBhZEFjcm9zczoxMCxzYW5rZXlJdGVyYXRpb25zOjUwLGZvcmNlSXRlcmF0aW9uczo1LGZvcmNlVGlja3NQZXJGcmFtZToxMCxkdXJhdGlvbjo1MDAsZWFzZToibGluZWFyIixjbjp7c2Fua2V5OiJzYW5rZXkiLHNhbmtleUxpbmtzOiJzYW5rZXktbGlua3MiLHNhbmtleUxpbms6InNhbmtleS1saW5rIixzYW5rZXlOb2RlU2V0OiJzYW5rZXktbm9kZS1zZXQiLHNhbmtleU5vZGU6InNhbmtleS1ub2RlIixub2RlUmVjdDoibm9kZS1yZWN0Iixub2RlTGFiZWw6Im5vZGUtbGFiZWwifX19LHt9XSw5MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoInRpbnljb2xvcjIiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksdT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBmKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS5saW5rLmNvbG9yc2NhbGVzLHIsYSl9cigibGFiZWwiKSxyKCJjbWluIikscigiY21heCIpLHIoImNvbG9yc2NhbGUiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBkPW4uZXh0ZW5kRGVlcChoLmhvdmVybGFiZWwsdC5ob3ZlcmxhYmVsKSxtPXQubm9kZSxnPWMubmV3Q29udGFpbmVyKGUsIm5vZGUiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKG0sZyxpLm5vZGUsdCxlKX12KCJsYWJlbCIpLHYoImdyb3VwcyIpLHYoIngiKSx2KCJ5IiksdigicGFkIiksdigidGhpY2tuZXNzIiksdigibGluZS5jb2xvciIpLHYoImxpbmUud2lkdGgiKSx2KCJob3ZlcmluZm8iLHQuaG92ZXJpbmZvKSxsKG0sZyx2LGQpLHYoImhvdmVydGVtcGxhdGUiKTt2YXIgeT1oLmNvbG9yd2F5O3YoImNvbG9yIixnLmxhYmVsLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5hZGRPcGFjaXR5KGZ1bmN0aW9uKHQpe3JldHVybiB5W3QleS5sZW5ndGhdfShlKSwuOCl9KSkpLHYoImN1c3RvbWRhdGEiKTt2YXIgeD10Lmxpbmt8fHt9LGI9Yy5uZXdDb250YWluZXIoZSwibGluayIpO2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoeCxiLGkubGluayx0LGUpfV8oImxhYmVsIiksXygic291cmNlIiksXygidGFyZ2V0IiksXygidmFsdWUiKSxfKCJsaW5lLmNvbG9yIiksXygibGluZS53aWR0aCIpLF8oImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwoeCxiLF8sZCksXygiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB3LFQ9byhoLnBhcGVyX2JnY29sb3IpLmdldEx1bWluYW5jZSgpPC4zMzM/InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSI6InJnYmEoMCwgMCwgMCwgMC4yKSI7XygiY29sb3IiLG4ucmVwZWF0KFQsYi52YWx1ZS5sZW5ndGgpKSxfKCJjdXN0b21kYXRhIiksdSh4LGIse25hbWU6ImNvbG9yc2NhbGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6Zn0pLHMoZSxoLHApLHAoIm9yaWVudGF0aW9uIikscCgidmFsdWVmb3JtYXQiKSxwKCJ2YWx1ZXN1ZmZpeCIpLGcueC5sZW5ndGgmJmcueS5sZW5ndGgmJih3PSJmcmVlZm9ybSIpLHAoImFycmFuZ2VtZW50Iix3KSxuLmNvZXJjZUZvbnQocCwidGV4dGZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxoLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHMiOjQwNCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo1NDksIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTg0LCIuL2F0dHJpYnV0ZXMiOjkxNix0aW55Y29sb3IyOjMxMn1dLDkyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2Fua2V5IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdC5qcyIpLGNhdGVnb3JpZXM6WyJub09wYWNpdHkiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjkxNiwiLi9iYXNlX3Bsb3QiOjkxNywiLi9jYWxjIjo5MTgsIi4vZGVmYXVsdHMiOjkyMCwiLi9wbG90Ijo5MjIsIi4vc2VsZWN0LmpzIjo5MjR9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoIi4vcmVuZGVyIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuL2NvbnN0YW50cyIpLmNuLHU9aS5fO2Z1bmN0aW9uIGYodCl7cmV0dXJuIiIhPT10fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWUudHJhY2VJZH0pKX1mdW5jdGlvbiBwKHQsZSl7bi5zZWxlY3QodCkuc2VsZWN0KCJwYXRoIikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSksbi5zZWxlY3QodCkuc2VsZWN0KCJyZWN0Iikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSl9ZnVuY3Rpb24gZCh0KXtuLnNlbGVjdCh0KS5zZWxlY3QoInRleHQubmFtZSIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKX1mdW5jdGlvbiBtKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKGUubGluayl8fC0xIT09dC5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YoZS5saW5rKX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLm5vZGUuc291cmNlTGlua3MuaW5kZXhPZih0LmxpbmspfHwtMSE9PWUubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKHQubGluayl9fWZ1bmN0aW9uIHYodCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoIi4iK2Muc2Fua2V5TGluaykuZmlsdGVyKG0oZSkpLmNhbGwoeC5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24geSh0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIobShlKSkuY2FsbChiLmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe2lmKCF0LmxpbmsuY29uY2VudHJhdGlvbnNjYWxlKXJldHVybi40fSkpLGkmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2Muc2Fua2V5TGluaykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSksciYmaChlLHQpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlOb2RlKS5maWx0ZXIoZyh0KSkuY2FsbCh2KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLGkmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2Muc2Fua2V5TGluaykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSksciYmaChlLHQpLnNlbGVjdEFsbChjLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHkpfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj10LmhvdmVybGFiZWx8fHt9LG49aS5uZXN0ZWRQcm9wZXJ0eShyLGUpLmdldCgpO3JldHVybiFBcnJheS5pc0FycmF5KG4pJiZufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LGk9ci5fcGFwZXIsaD1yLl9zaXplLG09MDttPHQuX2Z1bGxEYXRhLmxlbmd0aDttKyspaWYodC5fZnVsbERhdGFbbV0udmlzaWJsZSYmdC5fZnVsbERhdGFbbV0udHlwZT09PWMuc2Fua2V5JiYhdC5fZnVsbERhdGFbbV0uX3ZpZXdJbml0aWFsKXt2YXIgZz10Ll9mdWxsRGF0YVttXS5ub2RlO3QuX2Z1bGxEYXRhW21dLl92aWV3SW5pdGlhbD17bm9kZTp7Z3JvdXBzOmcuZ3JvdXBzLnNsaWNlKCkseDpnLnguc2xpY2UoKSx5OmcueS5zbGljZSgpfX19dmFyIHc9dSh0LCJzb3VyY2U6IikrIiAiLFQ9dSh0LCJ0YXJnZXQ6IikrIiAiLGs9dSh0LCJjb25jZW50cmF0aW9uOiIpKyIgIixBPXUodCwiaW5jb21pbmcgZmxvdyBjb3VudDoiKSsiICIsTT11KHQsIm91dGdvaW5nIGZsb3cgY291bnQ6IikrIiAiO28odCxpLGUse3dpZHRoOmgudyxoZWlnaHQ6aC5oLG1hcmdpbjp7dDpoLnQscjpoLnIsYjpoLmIsbDpoLmx9fSx7bGlua0V2ZW50czp7aG92ZXI6ZnVuY3Rpb24oZSxyLGkpeyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHguYmluZCgwLHIsaSwhMCkpLCJza2lwIiE9PXIubGluay50cmFjZS5saW5rLmhvdmVyaW5mbyYmKHIubGluay5mdWxsRGF0YT1yLmxpbmsudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5saW5rXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubGluay50cmFjZS5saW5rO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7Zm9yKHZhciBjPVtdLHU9MCxoPTA7aDxpLmZsb3cubGlua3MubGVuZ3RoO2grKyl7dmFyIG09aS5mbG93LmxpbmtzW2hdO2lmKCJjbG9zZXN0IiE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlfHxpLmxpbmsucG9pbnROdW1iZXI9PT1tLnBvaW50TnVtYmVyKXtpLmxpbmsucG9pbnROdW1iZXI9PT1tLnBvaW50TnVtYmVyJiYodT1oKSxtLmZ1bGxEYXRhPW0udHJhY2Usbz1pLmxpbmsudHJhY2UubGluazt2YXIgZz15KG0pLHY9e3ZhbHVlTGFiZWw6YShpLnZhbHVlRm9ybWF0KShtLnZhbHVlKStpLnZhbHVlU3VmZml4fTtjLnB1c2goe3g6Z1swXSx5OmdbMV0sbmFtZTp2LnZhbHVlTGFiZWwsdGV4dDpbbS5sYWJlbHx8IiIsdyttLnNvdXJjZS5sYWJlbCxUK20udGFyZ2V0LmxhYmVsLG0uY29uY2VudHJhdGlvbnNjYWxlP2srYSgiJTAuMmYiKShtLmZsb3cubGFiZWxDb25jZW50cmF0aW9uKToiIl0uZmlsdGVyKGYpLmpvaW4oIjxicj4iKSxjb2xvcjpfKG8sImJnY29sb3IiKXx8bC5hZGRPcGFjaXR5KG0uY29sb3IsMSksYm9yZGVyQ29sb3I6XyhvLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6XyhvLCJmb250LmZhbWlseSIpLGZvbnRTaXplOl8obywiZm9udC5zaXplIiksZm9udENvbG9yOl8obywiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6XyhvLCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOl8obywiYWxpZ24iKSxpZGVhbEFsaWduOm4uZXZlbnQueDxnWzBdPyJyaWdodCI6ImxlZnQiLGhvdmVydGVtcGxhdGU6by5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6dixldmVudERhdGE6W21dfSl9fXMubG9uZUhvdmVyKGMse2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dCxhbmNob3JJbmRleDp1fSkuZWFjaCgoZnVuY3Rpb24oKXtpLmxpbmsuY29uY2VudHJhdGlvbnNjYWxlfHxwKHRoaXMsLjY1KSxkKHRoaXMpfSkpfX1mdW5jdGlvbiB5KHQpe3ZhciBlLHI7dC5jaXJjdWxhcj8oZT0odC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCt0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCkvMixyPXQuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQpOihlPSh0LnNvdXJjZS54MSt0LnRhcmdldC54MCkvMixyPSh0LnkwK3QueTEpLzIpO3ZhciBuPVtlLHJdO3JldHVybiJ2Ij09PXQudHJhY2Uub3JpZW50YXRpb24mJm4ucmV2ZXJzZSgpLG5bMF0rPWkucGFyZW50LnRyYW5zbGF0ZVgsblsxXSs9aS5wYXJlbnQudHJhbnNsYXRlWSxufX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksYSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoYi5iaW5kKDAsaSxhLCEwKSksInNraXAiIT09aS5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoaS5saW5rLmZ1bGxEYXRhPWkubGluay50cmFjZSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubGlua119KSkscy5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyKXt2YXIgaT1yLmxpbms7aS5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsdC5faG92ZXJkYXRhPVtpXSxzLmNsaWNrKHQse3RhcmdldDohMH0pfX0sbm9kZUV2ZW50czp7aG92ZXI6ZnVuY3Rpb24oZSxyLGkpeyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHYscixpKSwic2tpcCIhPT1yLm5vZGUudHJhY2Uubm9kZS5ob3ZlcmluZm8mJihyLm5vZGUuZnVsbERhdGE9ci5ub2RlLnRyYWNlLHQuZW1pdCgicGxvdGx5X2hvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W3Iubm9kZV19KSkpfSxmb2xsb3c6ZnVuY3Rpb24oZSxpKXtpZighMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlKXt2YXIgbz1pLm5vZGUudHJhY2Uubm9kZTtpZigibm9uZSIhPT1vLmhvdmVyaW5mbyYmInNraXAiIT09by5ob3ZlcmluZm8pe3ZhciBsPW4uc2VsZWN0KGUpLnNlbGVjdCgiLiIrYy5ub2RlUmVjdCksdT10Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1sLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPWgubGVmdC0yLXUubGVmdCxnPWgucmlnaHQrMi11LmxlZnQsdj1oLnRvcCtoLmhlaWdodC80LXUudG9wLHk9e3ZhbHVlTGFiZWw6YShpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXh9O2kubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2UsdC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIHg9dC5fZnVsbExheW91dC5faW52U2NhbGVYLGI9dC5fZnVsbExheW91dC5faW52U2NhbGVZLHc9cy5sb25lSG92ZXIoe3gwOngqbSx4MTp4KmcseTpiKnYsbmFtZTphKGkudmFsdWVGb3JtYXQpKGkubm9kZS52YWx1ZSkraS52YWx1ZVN1ZmZpeCx0ZXh0OltpLm5vZGUubGFiZWwsQStpLm5vZGUudGFyZ2V0TGlua3MubGVuZ3RoLE0raS5ub2RlLnNvdXJjZUxpbmtzLmxlbmd0aF0uZmlsdGVyKGYpLmpvaW4oIjxicj4iKSxjb2xvcjpfKG8sImJnY29sb3IiKXx8aS50aW55Q29sb3JIdWUsYm9yZGVyQ29sb3I6XyhvLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6XyhvLCJmb250LmZhbWlseSIpLGZvbnRTaXplOl8obywiZm9udC5zaXplIiksZm9udENvbG9yOl8obywiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6XyhvLCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOl8obywiYWxpZ24iKSxpZGVhbEFsaWduOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOm8uaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnksZXZlbnREYXRhOltpLm5vZGVdfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7cCh3LC44NSksZCh3KX19fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxhKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh5LGksYSksInNraXAiIT09aS5ub2RlLnRyYWNlLm5vZGUuaG92ZXJpbmZvJiYoaS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubm9kZV19KSkscy5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBhPXIubm9kZTthLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2FdLG4uc2VsZWN0KGUpLmNhbGwoeSxyLGkpLHMuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vbGliIjo1MDMsIi4vY29uc3RhbnRzIjo5MTksIi4vcmVuZGVyIjo5MjMsIkBwbG90bHkvZDMiOjU4fV0sOTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWZvcmNlIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLGE9dCgiQHBsb3RseS9kMyIpLG89dCgiQHBsb3RseS9kMy1zYW5rZXkiKSxzPXQoIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIiksbD10KCIuL2NvbnN0YW50cyIpLGM9dCgidGlueWNvbG9yMiIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaD10KCIuLi8uLi9saWIiKSxwPWguc3RyVHJhbnNsYXRlLGQ9aC5zdHJSb3RhdGUsbT10KCIuLi8uLi9saWIvZ3VwIiksZz1tLmtleUZ1bix2PW0ucmVwZWF0LHk9bS51bndyYXAseD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxiPXQoIi4uLy4uL3JlZ2lzdHJ5IiksXz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdz1fLkNBUF9TSElGVCxUPV8uTElORV9TUEFDSU5HO2Z1bmN0aW9uIGsodCxlLHIpe3ZhciBuLGk9eShlKSxhPWkudHJhY2UsdT1hLmRvbWFpbixmPSJoIj09PWEub3JpZW50YXRpb24scD1hLm5vZGUucGFkLGQ9YS5ub2RlLnRoaWNrbmVzcyxtPXQud2lkdGgqKHUueFsxXS11LnhbMF0pLGc9dC5oZWlnaHQqKHUueVsxXS11LnlbMF0pLHY9aS5fbm9kZXMseD1pLl9saW5rcyxiPWkuY2lyY3VsYXI7KG49Yj9zLnNhbmtleUNpcmN1bGFyKCkuY2lyY3VsYXJMaW5rR2FwKDApOm8uc2Fua2V5KCkpLml0ZXJhdGlvbnMobC5zYW5rZXlJdGVyYXRpb25zKS5zaXplKGY/W20sZ106W2csbV0pLm5vZGVXaWR0aChkKS5ub2RlUGFkZGluZyhwKS5ub2RlSWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvaW50TnVtYmVyfSkpLm5vZGVzKHYpLmxpbmtzKHgpO3ZhciBfLHcsVCxrPW4oKTtmb3IodmFyIEEgaW4gbi5ub2RlUGFkZGluZygpPHAmJmgud2Fybigibm9kZS5wYWQgd2FzIHJlZHVjZWQgdG8gIixuLm5vZGVQYWRkaW5nKCksIiB0byBmaXQgd2l0aGluIHRoZSBmaWd1cmUuIiksaS5fZ3JvdXBMb29rdXApe3ZhciBNLFM9cGFyc2VJbnQoaS5fZ3JvdXBMb29rdXBbQV0pO2ZvcihfPTA7XzxrLm5vZGVzLmxlbmd0aDtfKyspaWYoay5ub2Rlc1tfXS5wb2ludE51bWJlcj09PVMpe009ay5ub2Rlc1tfXTticmVha31pZihNKXt2YXIgRT17cG9pbnROdW1iZXI6cGFyc2VJbnQoQSkseDA6TS54MCx4MTpNLngxLHkwOk0ueTAseTE6TS55MSxwYXJ0T2ZHcm91cDohMCxzb3VyY2VMaW5rczpbXSx0YXJnZXRMaW5rczpbXX07ay5ub2Rlcy51bnNoaWZ0KEUpLE0uY2hpbGRyZW5Ob2Rlcy51bnNoaWZ0KEUpfX1pZihmdW5jdGlvbigpe2ZvcihfPTA7XzxrLm5vZGVzLmxlbmd0aDtfKyspe3ZhciB0LGUscj1rLm5vZGVzW19dLG49e307Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl0PShlPXIudGFyZ2V0TGlua3Nbd10pLnNvdXJjZS5wb2ludE51bWJlcisiOiIrZS50YXJnZXQucG9pbnROdW1iZXIsbi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09W10pLG5bdF0ucHVzaChlKTt2YXIgaT1PYmplY3Qua2V5cyhuKTtmb3Iodz0wO3c8aS5sZW5ndGg7dysrKXt2YXIgYT1uW3Q9aVt3XV0sbz0wLHM9e307Zm9yKFQ9MDtUPGEubGVuZ3RoO1QrKylzWyhlPWFbVF0pLmxhYmVsXXx8KHNbZS5sYWJlbF09MCksc1tlLmxhYmVsXSs9ZS52YWx1ZSxvKz1lLnZhbHVlO2ZvcihUPTA7VDxhLmxlbmd0aDtUKyspKGU9YVtUXSkuZmxvdz17dmFsdWU6byxsYWJlbENvbmNlbnRyYXRpb246c1tlLmxhYmVsXS9vLGNvbmNlbnRyYXRpb246ZS52YWx1ZS9vLGxpbmtzOmF9LGUuY29uY2VudHJhdGlvbnNjYWxlJiYoZS5jb2xvcj1jKGUuY29uY2VudHJhdGlvbnNjYWxlKGUuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pKSl9dmFyIGw9MDtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKWwrPXIuc291cmNlTGlua3Nbd10udmFsdWU7Zm9yKHc9MDt3PHIuc291cmNlTGlua3MubGVuZ3RoO3crKykoZT1yLnNvdXJjZUxpbmtzW3ddKS5jb25jZW50cmF0aW9uT3V0PWUudmFsdWUvbDt2YXIgdT0wO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdSs9ci50YXJnZXRMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKShlPXIudGFyZ2V0TGlua3Nbd10pLmNvbmNlbnJhdGlvbkluPWUudmFsdWUvdX19KCksYS5ub2RlLngubGVuZ3RoJiZhLm5vZGUueS5sZW5ndGgpe2ZvcihfPTA7XzxNYXRoLm1pbihhLm5vZGUueC5sZW5ndGgsYS5ub2RlLnkubGVuZ3RoLGsubm9kZXMubGVuZ3RoKTtfKyspaWYoYS5ub2RlLnhbX10mJmEubm9kZS55W19dKXt2YXIgTD1bYS5ub2RlLnhbX10qbSxhLm5vZGUueVtfXSpnXTtrLm5vZGVzW19dLngwPUxbMF0tZC8yLGsubm9kZXNbX10ueDE9TFswXStkLzI7dmFyIEM9ay5ub2Rlc1tfXS55MS1rLm5vZGVzW19dLnkwO2subm9kZXNbX10ueTA9TFsxXS1DLzIsay5ub2Rlc1tfXS55MT1MWzFdK0MvMn1pZigic25hcCI9PT1hLmFycmFuZ2VtZW50KSFmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTAsYT10Lmxlbmd0aDtmb3IodC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KSksbj0wO248YTsrK24pKGU9dFtuXSkueTA+PWl8fChyPWktZS55MCk+MWUtNiYmKGUueTArPXIsZS55MSs9ciksaT1lLnkxK3B9KSl9KGZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm57eDA6dC54MCxpbmRleDplfX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LngwLWUueDB9KSksaT1bXSxhPS0xLG89LTEvMDtmb3IoXz0wO188bi5sZW5ndGg7XysrKXt2YXIgcz10W25bX10uaW5kZXhdO3MueDA+bytkJiYoYSs9MSxlPXMueDApLG89cy54MCxpW2FdfHwoaVthXT1bXSksaVthXS5wdXNoKHMpLHI9ZS1zLngwLHMueDArPXIscy54MSs9cn1yZXR1cm4gaX0odj1rLm5vZGVzKSk7bi51cGRhdGUoayl9cmV0dXJue2NpcmN1bGFyOmIsa2V5OnIsdHJhY2U6YSxndWlkOmgucmFuZHN0cigpLGhvcml6b250YWw6Zix3aWR0aDptLGhlaWdodDpnLG5vZGVQYWQ6YS5ub2RlLnBhZCxub2RlTGluZUNvbG9yOmEubm9kZS5saW5lLmNvbG9yLG5vZGVMaW5lV2lkdGg6YS5ub2RlLmxpbmUud2lkdGgsbGlua0xpbmVDb2xvcjphLmxpbmsubGluZS5jb2xvcixsaW5rTGluZVdpZHRoOmEubGluay5saW5lLndpZHRoLHZhbHVlRm9ybWF0OmEudmFsdWVmb3JtYXQsdmFsdWVTdWZmaXg6YS52YWx1ZXN1ZmZpeCx0ZXh0Rm9udDphLnRleHRmb250LHRyYW5zbGF0ZVg6dS54WzBdKnQud2lkdGgrdC5tYXJnaW4ubCx0cmFuc2xhdGVZOnQuaGVpZ2h0LXUueVsxXSp0LmhlaWdodCt0Lm1hcmdpbi50LGRyYWdQYXJhbGxlbDpmP2c6bSxkcmFnUGVycGVuZGljdWxhcjpmP206ZyxhcnJhbmdlbWVudDphLmFycmFuZ2VtZW50LHNhbmtleTpuLGdyYXBoOmssZm9yY2VMYXlvdXRzOnt9LGludGVyYWN0aW9uU3RhdGU6e2RyYWdJblByb2dyZXNzOiExLGhvdmVyZWQ6ITF9fX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj1jKGUuY29sb3IpLGk9ZS5zb3VyY2UubGFiZWwrInwiK2UudGFyZ2V0LmxhYmVsKyJfXyIrcjtyZXR1cm4gZS50cmFjZT10LnRyYWNlLGUuY3VydmVOdW1iZXI9dC50cmFjZS5pbmRleCx7Y2lyY3VsYXI6dC5jaXJjdWxhcixrZXk6aSx0cmFjZUlkOnQua2V5LHBvaW50TnVtYmVyOmUucG9pbnROdW1iZXIsbGluazplLHRpbnlDb2xvckh1ZTp1LnRpbnlSR0IobiksdGlueUNvbG9yQWxwaGE6bi5nZXRBbHBoYSgpLGxpbmtQYXRoOk0sbGlua0xpbmVDb2xvcjp0LmxpbmtMaW5lQ29sb3IsbGlua0xpbmVXaWR0aDp0LmxpbmtMaW5lV2lkdGgsdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxwYXJlbnQ6dCxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmbG93OmUuZmxvd319ZnVuY3Rpb24gTSgpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LmxpbmsuY2lyY3VsYXIpcmV0dXJuIGU9dC5saW5rLHI9ZS53aWR0aC8yLG49ZS5jaXJjdWxhclBhdGhEYXRhLCJ0b3AiPT09ZS5jaXJjdWxhckxpbmtUeXBlPyJNICIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZK3IpKyIgTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZK3IpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDEgIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiKyhuLnRhcmdldFktbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAxICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQtcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQtcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDEgIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiKyhuLnNvdXJjZVktbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAxICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVkrcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWStyKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZLXIpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWS1yKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMCAiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIisobi5zb3VyY2VZLW4ubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDAgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudCtyKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAwICIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIisobi50YXJnZXRZLW4ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMCAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WS1yKSsiTCIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZLXIpKyJaIjoiTSAiK24udGFyZ2V0WCsiICIrKG4udGFyZ2V0WS1yKSsiIEwiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WS1yKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAwICIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIisobi50YXJnZXRZK24ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkwiKyhuLnJpZ2h0RnVsbEV4dGVudC1yKSsiICIrbi52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAwIDAgMCAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAwICIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkwiKyhuLmxlZnRGdWxsRXh0ZW50K3IpKyIgIisobi5zb3VyY2VZK24ubGVmdFNtYWxsQXJjUmFkaXVzKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMrcikrIiAwIDAgMCAiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi5zb3VyY2VZLXIpKyJMIituLnNvdXJjZVgrIiAiKyhuLnNvdXJjZVktcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWStyKSsiTCIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVkrcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdFNtYWxsQXJjUmFkaXVzLXIpKyIgMCAwIDEgIisobi5sZWZ0RnVsbEV4dGVudC1yKSsiICIrKG4uc291cmNlWStuLmxlZnRTbWFsbEFyY1JhZGl1cykrIkwiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAxICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQtcikrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAwIDAgMSAiKyhuLnJpZ2h0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIkwiKyhuLnJpZ2h0RnVsbEV4dGVudCtyKSsiICIrKG4udGFyZ2V0WStuLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzLXIpKyIgMCAwIDEgIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnRhcmdldFkrcikrIkwiK24udGFyZ2V0WCsiICIrKG4udGFyZ2V0WStyKSsiWiI7dmFyIGUscixuLGE9dC5saW5rLnNvdXJjZS54MSxvPXQubGluay50YXJnZXQueDAscz1pKGEsbyksbD1zKC41KSxjPXMoLjUpLHU9dC5saW5rLnkwLXQubGluay53aWR0aC8yLGY9dC5saW5rLnkwK3QubGluay53aWR0aC8yLGg9dC5saW5rLnkxLXQubGluay53aWR0aC8yLHA9dC5saW5rLnkxK3QubGluay53aWR0aC8yO3JldHVybiJNIithKyIsIit1KyJDIitsKyIsIit1KyIgIitjKyIsIitoKyIgIitvKyIsIitoKyJMIitvKyIsIitwKyJDIitjKyIsIitwKyIgIitsKyIsIitmKyIgIithKyIsIitmKyJaIn19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWMoZS5jb2xvciksbj1sLm5vZGVQYWRBY3Jvc3MsaT10Lm5vZGVQYWQvMjtlLmR4PWUueDEtZS54MCxlLmR5PWUueTEtZS55MDt2YXIgYT1lLmR4LG89TWF0aC5tYXgoLjUsZS5keSkscz0ibm9kZV8iK2UucG9pbnROdW1iZXI7cmV0dXJuIGUuZ3JvdXAmJihzPWgucmFuZHN0cigpKSxlLnRyYWNlPXQudHJhY2UsZS5jdXJ2ZU51bWJlcj10LnRyYWNlLmluZGV4LHtpbmRleDplLnBvaW50TnVtYmVyLGtleTpzLHBhcnRPZkdyb3VwOmUucGFydE9mR3JvdXB8fCExLGdyb3VwOmUuZ3JvdXAsdHJhY2VJZDp0LmtleSx0cmFjZTp0LnRyYWNlLG5vZGU6ZSxub2RlUGFkOnQubm9kZVBhZCxub2RlTGluZUNvbG9yOnQubm9kZUxpbmVDb2xvcixub2RlTGluZVdpZHRoOnQubm9kZUxpbmVXaWR0aCx0ZXh0Rm9udDp0LnRleHRGb250LHNpemU6dC5ob3Jpem9udGFsP3QuaGVpZ2h0OnQud2lkdGgsdmlzaWJsZVdpZHRoOk1hdGguY2VpbChhKSx2aXNpYmxlSGVpZ2h0Om8sem9uZVg6LW4sem9uZVk6LWksem9uZVdpZHRoOmErMipuLHpvbmVIZWlnaHQ6bysyKmksbGFiZWxZOnQuaG9yaXpvbnRhbD9lLmR5LzIrMTplLmR4LzIrMSxsZWZ0OjE9PT1lLm9yaWdpbmFsTGF5ZXIsc2l6ZUFjcm9zczp0LndpZHRoLGZvcmNlTGF5b3V0czp0LmZvcmNlTGF5b3V0cyxob3Jpem9udGFsOnQuaG9yaXpvbnRhbCxkYXJrQmFja2dyb3VuZDpyLmdldEJyaWdodG5lc3MoKTw9MTI4LHRpbnlDb2xvckh1ZTp1LnRpbnlSR0IociksdGlueUNvbG9yQWxwaGE6ci5nZXRBbHBoYSgpLHZhbHVlRm9ybWF0OnQudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6dC52YWx1ZVN1ZmZpeCxzYW5rZXk6dC5zYW5rZXksZ3JhcGg6dC5ncmFwaCxhcnJhbmdlbWVudDp0LmFycmFuZ2VtZW50LHVuaXF1ZU5vZGVMYWJlbFBhdGhJZDpbdC5ndWlkLHQua2V5LHNdLmpvaW4oIl8iKSxpbnRlcmFjdGlvblN0YXRlOnQuaW50ZXJhY3Rpb25TdGF0ZSxmaWd1cmU6dH19ZnVuY3Rpb24gRSh0KXt0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBwKHQubm9kZS54MC50b0ZpeGVkKDMpLHQubm9kZS55MC50b0ZpeGVkKDMpKX0pKX1mdW5jdGlvbiBMKHQpe3QuY2FsbChFKX1mdW5jdGlvbiBDKHQsZSl7dC5jYWxsKEwpLGUuYXR0cigiZCIsTSgpKX1mdW5jdGlvbiBQKHQpe3QuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlLngxLXQubm9kZS54MH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlSGVpZ2h0fSkpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHQubGluay53aWR0aD4xfHx0LmxpbmtMaW5lV2lkdGg+MH1mdW5jdGlvbiBPKHQpe3JldHVybiBwKHQudHJhbnNsYXRlWCx0LnRyYW5zbGF0ZVkpKyh0Lmhvcml6b250YWw/Im1hdHJpeCgxIDAgMCAxIDAgMCkiOiJtYXRyaXgoMCAxIDEgMCAwIDApIil9ZnVuY3Rpb24geih0LGUscil7dC5vbigiLmJhc2ljIixudWxsKS5vbigibW91c2VvdmVyLmJhc2ljIiwoZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkpLm9uKCJtb3VzZW1vdmUuYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pKS5vbigibW91c2VvdXQuYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLnVuaG92ZXIodGhpcyx0LGUpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKX0pKS5vbigiY2xpY2suYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLHQuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8ci5zZWxlY3QodGhpcyx0LGUpfSkpfWZ1bmN0aW9uIEQodCxlLHIsaSl7dmFyIG89YS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKChmdW5jdGlvbih0KXtyZXR1cm57eDp0Lm5vZGUueDArdC52aXNpYmxlV2lkdGgvMix5OnQubm9kZS55MCt0LnZpc2libGVIZWlnaHQvMn19KSkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKGEpe2lmKCJmaXhlZCIhPT1hLmFycmFuZ2VtZW50JiYoaC5lbnN1cmVTaW5nbGUoaS5fZnVsbExheW91dC5faW5mb2xheWVyLCJnIiwiZHJhZ2NvdmVyIiwoZnVuY3Rpb24odCl7aS5fZnVsbExheW91dC5fZHJhZ0NvdmVyPXR9KSksaC5yYWlzZVRvVG9wKHRoaXMpLGEuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz1hLm5vZGUsRihhLm5vZGUpLGEuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci5ub2RlRXZlbnRzLnVuaG92ZXIuYXBwbHkoMCxhLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCksYS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLCJzbmFwIj09PWEuYXJyYW5nZW1lbnQpKXt2YXIgbz1hLnRyYWNlSWQrInwiK2Eua2V5O2EuZm9yY2VMYXlvdXRzW29dP2EuZm9yY2VMYXlvdXRzW29dLmFscGhhKDEpOmZ1bmN0aW9uKHQsZSxyLGkpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLnk9KHRbZV0ueTArdFtlXS55MSkvMix0W2VdLng9KHRbZV0ueDArdFtlXS54MSkvMn0oci5ncmFwaC5ub2Rlcyk7dmFyIGE9ci5ncmFwaC5ub2Rlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9yaWdpbmFsWD09PXIubm9kZS5vcmlnaW5hbFh9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5wYXJ0T2ZHcm91cH0pKTtyLmZvcmNlTGF5b3V0c1tlXT1uLmZvcmNlU2ltdWxhdGlvbihhKS5hbHBoYURlY2F5KDApLmZvcmNlKCJjb2xsaWRlIixuLmZvcmNlQ29sbGlkZSgpLnJhZGl1cygoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pKS5zdHJlbmd0aCgxKS5pdGVyYXRpb25zKGwuZm9yY2VJdGVyYXRpb25zKSkuZm9yY2UoImNvbnN0cmFpbiIsZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2E9PT1uLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M/KGEueD1hLmxhc3REcmFnZ2VkWCxhLnk9YS5sYXN0RHJhZ2dlZFkpOihhLnZ4PShhLm9yaWdpbmFsWC1hLngpL2wuZm9yY2VUaWNrc1BlckZyYW1lLGEueT1NYXRoLm1pbihuLnNpemUtYS5keS8yLE1hdGgubWF4KGEuZHkvMixhLnkpKSksdD1NYXRoLm1heCh0LE1hdGguYWJzKGEudngpLE1hdGguYWJzKGEudnkpKX0hbi5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzJiZ0PC4xJiZuLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgpPjAmJm4uZm9yY2VMYXlvdXRzW2VdLmFscGhhKDApfX0oMCxlLGEscikpLnN0b3AoKX0oMCxvLGEpLGZ1bmN0aW9uKHQsZSxyLG4saSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24gYSgpe3ZhciBvO2ZvcihvPTA7bzxsLmZvcmNlVGlja3NQZXJGcmFtZTtvKyspci5mb3JjZUxheW91dHNbbl0udGljaygpO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueTA9dFtlXS55LXRbZV0uZHkvMix0W2VdLnkxPXRbZV0ueTArdFtlXS5keSx0W2VdLngwPXRbZV0ueC10W2VdLmR4LzIsdFtlXS54MT10W2VdLngwK3RbZV0uZHh9KHIuZ3JhcGgubm9kZXMpLHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxDKHQuZmlsdGVyKEIocikpLGUpLHIuZm9yY2VMYXlvdXRzW25dLmFscGhhKCk+MCl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGEpO2Vsc2V7dmFyIHM9ci5ub2RlLm9yaWdpbmFsWDtyLm5vZGUueDA9cy1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1zK3IudmlzaWJsZVdpZHRoLzIsUihyLGkpfX0pKX0odCxlLGEsbyxpKX19KSkub24oImRyYWciLChmdW5jdGlvbihyKXtpZigiZml4ZWQiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49YS5ldmVudC54LGk9YS5ldmVudC55OyJzbmFwIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMixyLm5vZGUueTA9aS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9aStyLnZpc2libGVIZWlnaHQvMik6KCJmcmVlZm9ybSI9PT1yLmFycmFuZ2VtZW50JiYoci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yKSxpPU1hdGgubWF4KDAsTWF0aC5taW4oci5zaXplLXIudmlzaWJsZUhlaWdodC8yLGkpKSxyLm5vZGUueTA9aS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9aStyLnZpc2libGVIZWlnaHQvMiksRihyLm5vZGUpLCJzbmFwIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS51cGRhdGUoci5ncmFwaCksQyh0LmZpbHRlcihCKHIpKSxlKSl9fSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7aWYoImZpeGVkIiE9PXQuYXJyYW5nZW1lbnQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz0hMTtmb3IodmFyIGU9MDtlPHQubm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aDtlKyspdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueD10Lm5vZGUueCx0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS55PXQubm9kZS55OyJzbmFwIiE9PXQuYXJyYW5nZW1lbnQmJlIodCxpKX19KSk7dC5vbigiLmRyYWciLG51bGwpLmNhbGwobyl9ZnVuY3Rpb24gUih0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGk9MDtpPHQuZ3JhcGgubm9kZXMubGVuZ3RoO2krKyl7dmFyIGE9KHQuZ3JhcGgubm9kZXNbaV0ueDArdC5ncmFwaC5ub2Rlc1tpXS54MSkvMixvPSh0LmdyYXBoLm5vZGVzW2ldLnkwK3QuZ3JhcGgubm9kZXNbaV0ueTEpLzI7ci5wdXNoKGEvdC5maWd1cmUud2lkdGgpLG4ucHVzaChvL3QuZmlndXJlLmhlaWdodCl9Yi5jYWxsKCJfZ3VpUmVzdHlsZSIsZSx7Im5vZGUueCI6W3JdLCJub2RlLnkiOltuXX0sdC50cmFjZS5pbmRleCkudGhlbigoZnVuY3Rpb24oKXtlLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXImJmUuX2Z1bGxMYXlvdXQuX2RyYWdDb3Zlci5yZW1vdmUoKX0pKX1mdW5jdGlvbiBGKHQpe3QubGFzdERyYWdnZWRYPXQueDArdC5keC8yLHQubGFzdERyYWdnZWRZPXQueTArdC5keS8yfWZ1bmN0aW9uIEIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGUub3JpZ2luYWxYPT09dC5ub2RlLm9yaWdpbmFsWH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89ITE7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5faW5mb2xheWVyLCJnIiwiZmlyc3QtcmVuZGVyIiwoZnVuY3Rpb24oKXtvPSEwfSkpO3ZhciBzPXQuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlcixtPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4geSh0KS50cmFjZS52aXNpYmxlfSkpLm1hcChrLmJpbmQobnVsbCxuKSksYj1lLnNlbGVjdEFsbCgiLiIrbC5jbi5zYW5rZXkpLmRhdGEobSxnKTtiLmV4aXQoKS5yZW1vdmUoKSxiLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLmNuLnNhbmtleSwhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixPKSxiLmVhY2goKGZ1bmN0aW9uKGUscil7dC5fZnVsbERhdGFbcl0uX3NhbmtleT1lO3ZhciBuPSJiZ3NhbmtleS0iK2UudHJhY2UudWlkKyItIityO2guZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2RyYWdnZXJzLCJyZWN0IixuKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0PWEuc2VsZWN0KCIuIituKSx0Ll9mdWxsRGF0YVtyXS5fYmdSZWN0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoIndpZHRoIixlLndpZHRoKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KS5hdHRyKCJ4IixlLnRyYW5zbGF0ZVgpLmF0dHIoInkiLGUudHJhbnNsYXRlWSkuY2xhc3NlZCgiYmdzYW5rZXkiLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KX0pKSxiLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgXz1iLnNlbGVjdEFsbCgiLiIrbC5jbi5zYW5rZXlMaW5rcykuZGF0YSh2LGcpO18uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGwuY24uc2Fua2V5TGlua3MsITApLnN0eWxlKCJmaWxsIiwibm9uZSIpO3ZhciBMPV8uc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleUxpbmspLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdyYXBoLmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSkubWFwKEEuYmluZChudWxsLHQpKX0pLGcpO0wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKGwuY24uc2Fua2V5TGluaywhMCkuY2FsbCh6LGIsaS5saW5rRXZlbnRzKSxMLnN0eWxlKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4gSSh0KT91LnRpbnlSR0IoYyh0LmxpbmtMaW5lQ29sb3IpKTp0LnRpbnlDb2xvckh1ZX0pKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gSSh0KT91Lm9wYWNpdHkodC5saW5rTGluZUNvbG9yKTp0LnRpbnlDb2xvckFscGhhfSkpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIEkodCk/dC5saW5rTGluZVdpZHRoOjF9KSkuYXR0cigiZCIsTSgpKSxMLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29udGV4dC5zdGF0aWNQbG90fHxvfHxzPzE6MH0pKS50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxMLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgQz1iLnNlbGVjdEFsbCgiLiIrbC5jbi5zYW5rZXlOb2RlU2V0KS5kYXRhKHYsZyk7Qy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobC5jbi5zYW5rZXlOb2RlU2V0LCEwKSxDLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbih0KXtzd2l0Y2godC5hcnJhbmdlbWVudCl7Y2FzZSJmaXhlZCI6cmV0dXJuImRlZmF1bHQiO2Nhc2UicGVycGVuZGljdWxhciI6cmV0dXJuIm5zLXJlc2l6ZSI7ZGVmYXVsdDpyZXR1cm4ibW92ZSJ9fSkpO3ZhciBSPUMuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleU5vZGUpLmRhdGEoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgubm9kZXM7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsWD0odFtlXS54MCt0W2VdLngxKS8yLHRbZV0ub3JpZ2luYWxZPSh0W2VdLnkwK3RbZV0ueTEpLzIsLTE9PT1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpJiZyLnB1c2godFtlXS5vcmlnaW5hbFgpO2ZvcihyLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbExheWVySW5kZXg9ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSx0W2VdLm9yaWdpbmFsTGF5ZXI9dFtlXS5vcmlnaW5hbExheWVySW5kZXgvKHIubGVuZ3RoLTEpfShlKSxlLm1hcChTLmJpbmQobnVsbCx0KSl9KSxnKTtSLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLmNuLnNhbmtleU5vZGUsITApLmNhbGwoRSkuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbihlKXtyZXR1cm4hdC5fY29udGV4dC5zdGF0aWNQbG90JiYhb3x8ZS5wYXJ0T2ZHcm91cD8wOjF9KSksUi5jYWxsKHosYixpLm5vZGVFdmVudHMpLmNhbGwoRCxMLGksdCksUi50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLmNhbGwoRSkuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJ0T2ZHcm91cD8wOjF9KSksUi5leGl0KCkudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIEY9Ui5zZWxlY3RBbGwoIi4iK2wuY24ubm9kZVJlY3QpLmRhdGEodik7Ri5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobC5jbi5ub2RlUmVjdCwhMCkuY2FsbChQKSxGLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTGluZVdpZHRofSkpLnN0eWxlKCJzdHJva2UiLChmdW5jdGlvbih0KXtyZXR1cm4gdS50aW55UkdCKGModC5ub2RlTGluZUNvbG9yKSl9KSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHUub3BhY2l0eSh0Lm5vZGVMaW5lQ29sb3IpfSkpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pKSxGLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuY2FsbChQKTt2YXIgQj1SLnNlbGVjdEFsbCgiLiIrbC5jbi5ub2RlTGFiZWwpLmRhdGEodik7Qi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQobC5jbi5ub2RlTGFiZWwsITApLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0IiksQi5hdHRyKCJkYXRhLW5vdGV4IiwxKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlLmxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWEuc2VsZWN0KHRoaXMpO2YuZm9udChyLGUudGV4dEZvbnQpLHguY29udmVydFRvVHNwYW5zKHIsdCl9KSkuc3R5bGUoInRleHQtc2hhZG93Iix4Lm1ha2VUZXh0U2hhZG93KHQuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcikpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbCYmdC5sZWZ0PyJlbmQiOiJzdGFydCJ9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9YS5zZWxlY3QodGhpcykscj14LmxpbmVDb3VudChlKSxuPXQudGV4dEZvbnQuc2l6ZSooKHItMSkqVC13KSxpPXQubm9kZUxpbmVXaWR0aC8yKzMsbz0oKHQuaG9yaXpvbnRhbD90LnZpc2libGVIZWlnaHQ6dC52aXNpYmxlV2lkdGgpLW4pLzI7dC5ob3Jpem9udGFsJiYodC5sZWZ0P2k9LWk6aSs9dC52aXNpYmxlV2lkdGgpO3ZhciBzPXQuaG9yaXpvbnRhbD8iIjoic2NhbGUoLTEsMSkiK2QoOTApO3JldHVybiBwKHQuaG9yaXpvbnRhbD9pOm8sdC5ob3Jpem9udGFsP286aSkrc30pKSxCLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjQ3MSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9ndXAiOjUwMCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo1MjksIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vY29uc3RhbnRzIjo5MTksIkBwbG90bHkvZDMiOjU4LCJAcGxvdGx5L2QzLXNhbmtleSI6NTcsIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIjo1NiwiZDMtZm9yY2UiOjExMSwiZDMtaW50ZXJwb2xhdGUiOjExNix0aW55Y29sb3IyOjMxMn1dLDkyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10LmNkWzBdLnRyYWNlLGk9bi5fc2Fua2V5LmdyYXBoLm5vZGVzLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZighby5wYXJ0T2ZHcm91cCl7dmFyIHM9WyhvLngwK28ueDEpLzIsKG8ueTArby55MSkvMl07InYiPT09bi5vcmllbnRhdGlvbiYmcy5yZXZlcnNlKCksZSYmZS5jb250YWlucyhzLCExLGEsdCkmJnIucHVzaCh7cG9pbnROdW1iZXI6by5wb2ludE51bWJlcn0pfX1yZXR1cm4gcn19LHt9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLnRleHR0ZW1wbGF0ZSx0LCJ0eHQiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LCJkYXRhIiksbi5tZXJnZUFycmF5KGUudGV4dHBvc2l0aW9uLHQsInRwIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShlLnRleHRmb250LnNpemUsdCwidHMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LCJ0YyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmZhbWlseSx0LCJ0ZiIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoaS5zaXplLHQsIm1zIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLnN5bWJvbCx0LCJteCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShhLndpZHRoLHQsIm1sdyIpKTt2YXIgbz1pLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsdCwibWdjIikpfX19LHsiLi4vLi4vbGliIjo1MDN9XSw5MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0seHBlcmlvZDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2QwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx4aG92ZXJmb3JtYXQ6bigieCIpLHlob3ZlcmZvcm1hdDpuKCJ5Iiksc3RhY2tncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMifSxncm91cG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dhcHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZmVyIHplcm8iLCJpbnRlcnBvbGF0ZSJdLGRmbHQ6ImluZmVyIHplcm8iLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0dGVtcGxhdGU6aSh7fSx7fSksaG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicG9pbnRzIiwiZmlsbHMiXSxlZGl0VHlwZToic3R5bGUifSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGRhc2g6Zih7fSxsLHtlZGl0VHlwZToic3R5bGUifSksc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCIsInRvbmV4dHkiLCJ0b25leHR4IiwidG9zZWxmIiwidG9uZXh0Il0sZWRpdFR5cGU6ImNhbGMifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LG1hcmtlcjpmKHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpjLnN5bWJvbExpc3QsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRpYW1ldGVyIiwiYXJlYSJdLGRmbHQ6ImRpYW1ldGVyIixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6Zih7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyLmxpbmUiLHthbmltOiEwfSkpLGdyYWRpZW50Ont0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYWwiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJub25lIl0sYXJyYXlPazohMCxkZmx0OiJub25lIixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiLHthbmltOiEwfSkpLHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJtaWRkbGUgY2VudGVyIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGZvbnQ6cyh7ZWRpdFR5cGU6ImNhbGMiLGNvbG9yRWRpdFR5cGU6InN0eWxlIixhcnJheU9rOiEwfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6Mzg3LCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NTg1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4vY29uc3RhbnRzIjo5MzB9XSw5Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbD10KCIuL3N1YnR5cGVzIiksYz10KCIuL2NvbG9yc2NhbGVfY2FsYyIpLHU9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxmPXQoIi4vY2FsY19zZWxlY3Rpb24iKTtmdW5jdGlvbiBoKHQsZSxyLG4saSxvLHMpe3ZhciBjPWUuX2xlbmd0aCx1PXQuX2Z1bGxMYXlvdXQsZj1yLl9pZCxoPW4uX2lkLHA9dS5fZmlyc3RTY2F0dGVyW20oZSldPT09ZS51aWQsZD0oZyhlLHUscixuKXx8e30pLm9yaWVudGF0aW9uLHY9ZS5maWxsO3IuX21pbkR0aWNrPTAsbi5fbWluRHRpY2s9MDt2YXIgeT17cGFkZGVkOiEwfSx4PXtwYWRkZWQ6ITB9O3MmJih5LnBwYWQ9eC5wcGFkPXMpO3ZhciBiPWM8Mnx8aVswXSE9PWlbYy0xXXx8b1swXSE9PW9bYy0xXTtiJiYoInRvemVyb3giPT09dnx8InRvbmV4dHgiPT09diYmKHB8fCJoIj09PWQpKT95LnRvemVybz0hMDooZS5lcnJvcl95fHx7fSkudmlzaWJsZXx8InRvbmV4dHkiIT09diYmInRvemVyb3kiIT09diYmKGwuaGFzTWFya2VycyhlKXx8bC5oYXNUZXh0KGUpKXx8KHkucGFkZGVkPSExLHkucHBhZD0wKSxiJiYoInRvemVyb3kiPT09dnx8InRvbmV4dHkiPT09diYmKHB8fCJ2Ij09PWQpKT94LnRvemVybz0hMDoidG9uZXh0eCIhPT12JiYidG96ZXJveCIhPT12fHwoeC5wYWRkZWQ9ITEpLGYmJihlLl9leHRyZW1lc1tmXT1hLmZpbmRFeHRyZW1lcyhyLGkseSkpLGgmJihlLl9leHRyZW1lc1toXT1hLmZpbmRFeHRyZW1lcyhuLG8seCkpfWZ1bmN0aW9uIHAodCxlKXtpZihsLmhhc01hcmtlcnModCkpe3ZhciByLG49dC5tYXJrZXIsbz0xLjYqKHQubWFya2VyLnNpemVyZWZ8fDEpO2lmKHI9ImFyZWEiPT09dC5tYXJrZXIuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydCgodHx8MCkvbyksMyl9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgodHx8MCkvbywzKX0saS5pc0FycmF5T3JUeXBlZEFycmF5KG4uc2l6ZSkpe3ZhciBzPXt0eXBlOiJsaW5lYXIifTthLnNldENvbnZlcnQocyk7Zm9yKHZhciBjPXMubWFrZUNhbGNkYXRhKHQubWFya2VyLCJzaXplIiksdT1uZXcgQXJyYXkoZSksZj0wO2Y8ZTtmKyspdVtmXT1yKGNbZl0pO3JldHVybiB1fXJldHVybiByKG4uc2l6ZSl9fWZ1bmN0aW9uIGQodCxlKXt2YXIgcj1tKGUpLG49dC5fZmlyc3RTY2F0dGVyO25bcl18fChuW3JdPWUudWlkKX1mdW5jdGlvbiBtKHQpe3ZhciBlPXQuc3RhY2tncm91cDtyZXR1cm4gdC54YXhpcyt0LnlheGlzK3QudHlwZSsoZT8iLSIrZToiIil9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT10LnN0YWNrZ3JvdXA7aWYoaSl7dmFyIGE9ZS5fc2NhdHRlclN0YWNrT3B0c1tyLl9pZCtuLl9pZF1baV0sbz0idiI9PT1hLm9yaWVudGF0aW9uP246cjtyZXR1cm4ibGluZWFyIj09PW8udHlwZXx8ImxvZyI9PT1vLnR5cGU/YTp2b2lkIDB9fWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGwsbSx2LHkseCxiPXQuX2Z1bGxMYXlvdXQsXz1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4Iiksdz1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksVD1fLm1ha2VDYWxjZGF0YShlLCJ4Iiksaz13Lm1ha2VDYWxjZGF0YShlLCJ5IiksQT1vKGUsXywieCIsVCksTT1vKGUsdywieSIsayksUz1BLnZhbHMsRT1NLnZhbHMsTD1lLl9sZW5ndGgsQz1uZXcgQXJyYXkoTCksUD1lLmlkcyxJPWcoZSxiLF8sdyksTz0hMTtkKGIsZSk7dmFyIHosRD0ieCIsUj0ieSI7ST8oaS5wdXNoVW5pcXVlKEkudHJhY2VJbmRpY2VzLGUuX2V4cGFuZGVkSW5kZXgpLChyPSJ2Ij09PUkub3JpZW50YXRpb24pPyhSPSJzIix6PSJ4Iik6KEQ9InMiLHo9InkiKSx5PSJpbnRlcnBvbGF0ZSI9PT1JLnN0YWNrZ2Fwcyk6aCh0LGUsXyx3LFMsRSxwKGUsTCkpO3ZhciBGPSEhZS54cGVyaW9kYWxpZ25tZW50LEI9ISFlLnlwZXJpb2RhbGlnbm1lbnQ7Zm9yKGw9MDtsPEw7bCsrKXt2YXIgTj1DW2xdPXt9LGo9bihTW2xdKSxVPW4oRVtsXSk7aiYmVT8oTltEXT1TW2xdLE5bUl09RVtsXSxGJiYoTi5vcmlnX3g9VFtsXSxOLnhFbmQ9QS5lbmRzW2xdLE4ueFN0YXJ0PUEuc3RhcnRzW2xdKSxCJiYoTi5vcmlnX3k9a1tsXSxOLnlFbmQ9TS5lbmRzW2xdLE4ueVN0YXJ0PU0uc3RhcnRzW2xdKSk6SSYmKHI/ajpVKT8oTlt6XT1yP1NbbF06RVtsXSxOLmdhcD0hMCx5PyhOLnM9cyxPPSEwKTpOLnM9MCk6TltEXT1OW1JdPXMsUCYmKE4uaWQ9U3RyaW5nKFBbbF0pKX1pZih1KEMsZSksYyh0LGUpLGYoQyxlKSxJKXtmb3IobD0wO2w8Qy5sZW5ndGg7KUNbbF1bel09PT1zP0Muc3BsaWNlKGwsMSk6bCsrO2lmKGkuc29ydChDLChmdW5jdGlvbih0LGUpe3JldHVybiB0W3pdLWVbel18fHQuaS1lLml9KSksTyl7Zm9yKGw9MDtsPEMubGVuZ3RoLTEmJkNbbF0uZ2FwOylsKys7Zm9yKCh4PUNbbF0ucyl8fCh4PUNbbF0ucz0wKSxtPTA7bTxsO20rKylDW21dLnM9eDtmb3Iodj1DLmxlbmd0aC0xO3Y+bCYmQ1t2XS5nYXA7KXYtLTtmb3IoeD1DW3ZdLnMsbT1DLmxlbmd0aC0xO20+djttLS0pQ1ttXS5zPXg7Zm9yKDtsPHY7KWlmKENbKytsXS5nYXApe2ZvcihtPWwrMTtDW21dLmdhcDspbSsrO2Zvcih2YXIgVj1DW2wtMV1bel0sSD1DW2wtMV0ucyxxPShDW21dLnMtSCkvKENbbV1bel0tVik7bDxtOylDW2xdLnM9SCsoQ1tsXVt6XS1WKSpxLGwrK319fXJldHVybiBDfSxjYWxjTWFya2VyU2l6ZTpwLGNhbGNBeGlzRXhwYW5zaW9uOmgsc2V0Rmlyc3RTY2F0dGVyOmQsZ2V0U3RhY2tPcHRzOmd9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU1MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjkyNSwiLi9jYWxjX3NlbGVjdGlvbiI6OTI4LCIuL2NvbG9yc2NhbGVfY2FsYyI6OTI5LCIuL3N1YnR5cGVzIjo5NTEsImZhc3QtaXNudW1lcmljIjoxOTB9XSw5Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7bi5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpJiZuLnRhZ1NlbGVjdGVkKHQsZSl9fSx7Ii4uLy4uL2xpYiI6NTAzfV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YS5oYXNMaW5lcyhlKSYmbihlLCJsaW5lIikmJmkodCxlLHt2YWxzOmUubGluZS5jb2xvcixjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksYS5oYXNNYXJrZXJzKGUpJiYobihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6Mzc0LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6Mzc3LCIuL3N1YnR5cGVzIjo5NTF9XSw5MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtQVFNfTElORVNPTkxZOjIwLG1pblRvbGVyYW5jZTouMix0b2xlcmFuY2VHcm93dGg6MTAsbWF4U2NyZWVuc0F3YXk6MjAsZXZlbnREYXRhS2V5czpbXX19LHt9XSw5MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYWxjIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSxvKXtpW25dPSEwO3ZhciBzPXtpOm51bGwsZ2FwOiEwLHM6MH07aWYoc1tvXT1yLHQuc3BsaWNlKGUsMCxzKSxlJiZyPT09dFtlLTFdW29dKXt2YXIgbD10W2UtMV07cy5zPWwucyxzLmk9bC5pLHMuZ2FwPWwuZ2FwfWVsc2UgYSYmKHMucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10W2UtMV0sYT10W2UrMV07cmV0dXJuIGE/aT9pLnMrKGEucy1pLnMpKihyLWlbbl0pLyhhW25dLWlbbl0pOmEuczppLnN9KHQsZSxyLG8pKTtlfHwodFswXS50PXRbMV0udCx0WzBdLnRyYWNlPXRbMV0udHJhY2UsZGVsZXRlIHRbMV0udCxkZWxldGUgdFsxXS50cmFjZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS54YXhpcyxhPWUueWF4aXMsbz1yLl9pZCthLl9pZCxzPXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbb107aWYocyl7dmFyIGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQ9dC5jYWxjZGF0YTtmb3IodmFyIGsgaW4gcyl7dmFyIEE9KHY9c1trXSkudHJhY2VJbmRpY2VzO2lmKEEubGVuZ3RoKXtmb3IoeT0iaW50ZXJwb2xhdGUiPT09di5zdGFja2dhcHMseD12Lmdyb3Vwbm9ybSwidiI9PT12Lm9yaWVudGF0aW9uPyhiPSJ4IixfPSJ5Iik6KGI9InkiLF89IngiKSx3PW5ldyBBcnJheShBLmxlbmd0aCksbD0wO2w8dy5sZW5ndGg7bCsrKXdbbF09ITE7cD1UW0FbMF1dO3ZhciBNPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKGw9MDtsPHAubGVuZ3RoO2wrKylNW2xdPXBbbF1bYl07Zm9yKGw9MTtsPEEubGVuZ3RoO2wrKyl7Zm9yKGg9VFtBW2xdXSxjPXU9MDtjPGgubGVuZ3RoO2MrKyl7Zm9yKGQ9aFtjXVtiXTtkPk1bdV0mJnU8TS5sZW5ndGg7dSsrKWkoaCxjLE1bdV0sbCx3LHksYiksYysrO2lmKGQhPT1NW3VdKXtmb3IoZj0wO2Y8bDtmKyspaShUW0FbZl1dLHUsZCxmLHcseSxiKTtNLnNwbGljZSh1LDAsZCl9dSsrfWZvcig7dTxNLmxlbmd0aDt1KyspaShoLGMsTVt1XSxsLHcseSxiKSxjKyt9dmFyIFM9TS5sZW5ndGg7Zm9yKGM9MDtjPHAubGVuZ3RoO2MrKyl7Zm9yKG09cFtjXVtfXT1wW2NdLnMsbD0xO2w8QS5sZW5ndGg7bCsrKShoPVRbQVtsXV0pWzBdLnRyYWNlLl9yYXdMZW5ndGg9aFswXS50cmFjZS5fbGVuZ3RoLGhbMF0udHJhY2UuX2xlbmd0aD1TLG0rPWhbY10ucyxoW2NdW19dPW07aWYoeClmb3IoZz0oImZyYWN0aW9uIj09PXg/bTptLzEwMCl8fDEsbD0wO2w8QS5sZW5ndGg7bCsrKXt2YXIgRT1UW0FbbF1dW2NdO0VbX10vPWcsRS5zTm9ybT1FLnMvZ319Zm9yKGw9MDtsPEEubGVuZ3RoO2wrKyl7dmFyIEw9KGg9VFtBW2xdXSlbMF0udHJhY2UsQz1uLmNhbGNNYXJrZXJTaXplKEwsTC5fcmF3TGVuZ3RoKSxQPUFycmF5LmlzQXJyYXkoQyk7aWYoQyYmd1tsXXx8UCl7dmFyIEk9Qztmb3IoQz1uZXcgQXJyYXkoUyksYz0wO2M8UztjKyspQ1tjXT1oW2NdLmdhcD8wOlA/SVtoW2NdLmldOkl9dmFyIE89bmV3IEFycmF5KFMpLHo9bmV3IEFycmF5KFMpO2ZvcihjPTA7YzxTO2MrKylPW2NdPWhbY10ueCx6W2NdPWhbY10ueTtuLmNhbGNBeGlzRXhwYW5zaW9uKHQsTCxyLGEsTyx6LEMpLGhbMF0udC5vcmllbnRhdGlvbj12Lm9yaWVudGF0aW9ufX19fX19LHsiLi9jYWxjIjo5Mjd9XSw5MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO2lmKCJzY2F0dGVyIj09PXIudHlwZSl7dmFyIG49ci5maWxsO2lmKCJub25lIiE9PW4mJiJ0b3NlbGYiIT09biYmKHIub3BhY2l0eT12b2lkIDAsInRvbmV4dHkiPT09bnx8InRvbmV4dHgiPT09bikpZm9yKHZhciBpPWUtMTtpPj0wO2ktLSl7dmFyIGE9dFtpXTtpZigic2NhdHRlciI9PT1hLnR5cGUmJmEueGF4aXM9PT1yLnhheGlzJiZhLnlheGlzPT09ci55YXhpcyl7YS5vcGFjaXR5PXZvaWQgMDticmVha319fX19fSx7fV0sOTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4veHlfZGVmYXVsdHMiKSxjPXQoIi4vcGVyaW9kX2RlZmF1bHRzIiksdT10KCIuL3N0YWNrX2RlZmF1bHRzIiksZj10KCIuL21hcmtlcl9kZWZhdWx0cyIpLGg9dCgiLi9saW5lX2RlZmF1bHRzIikscD10KCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxkPXQoIi4vdGV4dF9kZWZhdWx0cyIpLG09dCgiLi9maWxsY29sb3JfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZyl7ZnVuY3Rpb24gdihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciB5PWwodCxlLGcsdik7aWYoeXx8KGUudmlzaWJsZT0hMSksZS52aXNpYmxlKXtjKHQsZSxnLHYpLHYoInhob3ZlcmZvcm1hdCIpLHYoInlob3ZlcmZvcm1hdCIpO3ZhciB4PXUodCxlLGcsdiksYj0heCYmeTxvLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7digidGV4dCIpLHYoImhvdmVydGV4dCIpLHYoIm1vZGUiLGIpLHMuaGFzTGluZXMoZSkmJihoKHQsZSxyLGcsdikscCh0LGUsdiksdigiY29ubmVjdGdhcHMiKSx2KCJsaW5lLnNpbXBsaWZ5IikpLHMuaGFzTWFya2VycyhlKSYmZih0LGUscixnLHYse2dyYWRpZW50OiEwfSkscy5oYXNUZXh0KGUpJiYodigidGV4dHRlbXBsYXRlIiksZCh0LGUsZyx2KSk7dmFyIF89W107KHMuaGFzTWFya2VycyhlKXx8cy5oYXNUZXh0KGUpKSYmKHYoImNsaXBvbmF4aXMiKSx2KCJtYXJrZXIubWF4ZGlzcGxheWVkIiksXy5wdXNoKCJwb2ludHMiKSksdigiZmlsbCIseD94LmZpbGxEZmx0OiJub25lIiksIm5vbmUiIT09ZS5maWxsJiYobSh0LGUscix2KSxzLmhhc0xpbmVzKGUpfHxwKHQsZSx2KSk7dmFyIHc9KGUubGluZXx8e30pLmNvbG9yLFQ9KGUubWFya2VyfHx7fSkuY29sb3I7InRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHxfLnB1c2goImZpbGxzIiksdigiaG92ZXJvbiIsXy5qb2luKCIrIil8fCJwb2ludHMiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZ2KCJob3ZlcnRlbXBsYXRlIik7dmFyIGs9aS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7ayh0LGUsd3x8VHx8cix7YXhpczoieSJ9KSxrKHQsZSx3fHxUfHxyLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHYpfX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vYXR0cmlidXRlcyI6OTI2LCIuL2NvbnN0YW50cyI6OTMwLCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTM0LCIuL2xpbmVfZGVmYXVsdHMiOjkzOSwiLi9saW5lX3NoYXBlX2RlZmF1bHRzIjo5NDEsIi4vbWFya2VyX2RlZmF1bHRzIjo5NDUsIi4vcGVyaW9kX2RlZmF1bHRzIjo5NDYsIi4vc3RhY2tfZGVmYXVsdHMiOjk0OSwiLi9zdWJ0eXBlcyI6OTUxLCIuL3RleHRfZGVmYXVsdHMiOjk1MiwiLi94eV9kZWZhdWx0cyI6OTUzfV0sOTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSExO2lmKGUubWFya2VyKXt2YXIgcz1lLm1hcmtlci5jb2xvcixsPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3I7cyYmIWkocyk/bz1zOmwmJiFpKGwpJiYobz1sKX1hKCJmaWxsY29sb3IiLG4uYWRkT3BhY2l0eSgoZS5saW5lfHx7fSkuY29sb3J8fG98fHIsLjUpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9saWIiOjUwM31dLDkzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9e30sYT17X2Z1bGxMYXlvdXQ6cn0sbz1uLmdldEZyb21UcmFjZShhLGUsIngiKSxzPW4uZ2V0RnJvbVRyYWNlKGEsZSwieSIpO3JldHVybiBpLnhMYWJlbD1uLnRpY2tUZXh0KG8sby5jMmwodC54KSwhMCkudGV4dCxpLnlMYWJlbD1uLnRpY2tUZXh0KHMscy5jMmwodC55KSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sOTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO2lmKCJsaW5lcyI9PT10Lm1vZGUpcmV0dXJuKHI9dC5saW5lLmNvbG9yKSYmbi5vcGFjaXR5KHIpP3I6dC5maWxsY29sb3I7aWYoIm5vbmUiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6IiI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOiIiKT9uLm9wYWNpdHkoYSk8LjM/bi5hZGRPcGFjaXR5KGEsLjMpOmE6KHI9KHQubGluZXx8e30pLmNvbG9yKSYmbi5vcGFjaXR5KHIpJiZpLmhhc0xpbmVzKHQpJiZ0LmxpbmUud2lkdGg/cjp0LmZpbGxjb2xvcn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuL3N1YnR5cGVzIjo5NTF9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9nZXRfdHJhY2VfY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPW4uZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuY2QsZj11WzBdLnRyYWNlLGg9dC54YSxwPXQueWEsZD1oLmMycChlKSxtPXAuYzJwKHIpLGc9W2QsbV0sdj1mLmhvdmVyb258fCIiLHk9LTEhPT1mLm1vZGUuaW5kZXhPZigibWFya2VycyIpPzM6LjUseD0hIWYueHBlcmlvZGFsaWdubWVudCxiPSEhZi55cGVyaW9kYWxpZ25tZW50O2lmKC0xIT09di5pbmRleE9mKCJwb2ludHMiKSl7dmFyIF89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoeSx0Lm1yY3x8MCkscj1oLmMycCh0LngpLWQsbj1wLmMycCh0LnkpLW07cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChyKnIrbipuKS1lLDEteS9lKX0sdz1pLmdldERpc3RhbmNlRnVuY3Rpb24oYywoZnVuY3Rpb24odCl7aWYoeCl7dmFyIGU9aC5jMnAodC54U3RhcnQpLHI9aC5jMnAodC54RW5kKTtyZXR1cm4gZD49TWF0aC5taW4oZSxyKSYmZDw9TWF0aC5tYXgoZSxyKT8wOjEvMH12YXIgbj1NYXRoLm1heCgzLHQubXJjfHwwKSxpPTEtMS9uLGE9TWF0aC5hYnMoaC5jMnAodC54KS1kKTtyZXR1cm4gYTxuP2kqYS9uOmEtbitpfSksKGZ1bmN0aW9uKHQpe2lmKGIpe3ZhciBlPXAuYzJwKHQueVN0YXJ0KSxyPXAuYzJwKHQueUVuZCk7cmV0dXJuIG0+PU1hdGgubWluKGUscikmJm08PU1hdGgubWF4KGUscik/MDoxLzB9dmFyIG49TWF0aC5tYXgoMyx0Lm1yY3x8MCksaT0xLTEvbixhPU1hdGguYWJzKHAuYzJwKHQueSktbSk7cmV0dXJuIGE8bj9pKmEvbjphLW4raX0pLF8pO2lmKGkuZ2V0Q2xvc2VzdCh1LHcsdCksITEhPT10LmluZGV4KXt2YXIgVD11W3QuaW5kZXhdLGs9aC5jMnAoVC54LCEwKSxBPXAuYzJwKFQueSwhMCksTT1ULm1yY3x8MTt0LmluZGV4PVQuaTt2YXIgUz11WzBdLnQub3JpZW50YXRpb24sRT1TJiYoVC5zTm9ybXx8VC5zKSxMPSJoIj09PVM/RTp2b2lkIDAhPT1ULm9yaWdfeD9ULm9yaWdfeDpULngsQz0idiI9PT1TP0U6dm9pZCAwIT09VC5vcmlnX3k/VC5vcmlnX3k6VC55O3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhmLFQpLHgwOmstTSx4MTprK00seExhYmVsVmFsOkwseTA6QS1NLHkxOkErTSx5TGFiZWxWYWw6QyxzcGlrZURpc3RhbmNlOl8oVCksaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSxsKFQsZix0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoVCxmLHQpLFt0XX19aWYoLTEhPT12LmluZGV4T2YoImZpbGxzIikmJmYuX3BvbHlnb25zKXt2YXIgUCxJLE8seixELFIsRixCLE4saj1mLl9wb2x5Z29ucyxVPVtdLFY9ITEsSD0xLzAscT0tMS8wLEc9MS8wLFk9LTEvMDtmb3IoUD0wO1A8ai5sZW5ndGg7UCsrKShPPWpbUF0pLmNvbnRhaW5zKGcpJiYoVj0hVixVLnB1c2goTyksRz1NYXRoLm1pbihHLE8ueW1pbiksWT1NYXRoLm1heChZLE8ueW1heCkpO2lmKFYpe3ZhciBXPSgoRz1NYXRoLm1heChHLDApKSsoWT1NYXRoLm1pbihZLHAuX2xlbmd0aCkpKS8yO2ZvcihQPTA7UDxVLmxlbmd0aDtQKyspZm9yKHo9VVtQXS5wdHMsST0xO0k8ei5sZW5ndGg7SSsrKShCPXpbSS0xXVsxXSk+VyE9KE49eltJXVsxXSk+PVcmJihSPXpbSS0xXVswXSxGPXpbSV1bMF0sTi1CJiYoRD1SKyhGLVIpKihXLUIpLyhOLUIpLEg9TWF0aC5taW4oSCxEKSxxPU1hdGgubWF4KHEsRCkpKTtIPU1hdGgubWF4KEgsMCkscT1NYXRoLm1pbihxLGguX2xlbmd0aCk7dmFyIFg9cy5kZWZhdWx0TGluZTtyZXR1cm4gcy5vcGFjaXR5KGYuZmlsbGNvbG9yKT9YPWYuZmlsbGNvbG9yOnMub3BhY2l0eSgoZi5saW5lfHx7fSkuY29sb3IpJiYoWD1mLmxpbmUuY29sb3IpLG4uZXh0ZW5kRmxhdCh0LHtkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2UseDA6SCx4MTpxLHkwOlcseTE6Vyxjb2xvcjpYLGhvdmVydGVtcGxhdGU6ITF9KSxkZWxldGUgdC5pbmRleCxmLnRleHQmJiFBcnJheS5pc0FycmF5KGYudGV4dCk/dC50ZXh0PVN0cmluZyhmLnRleHQpOnQudGV4dD1mLm5hbWUsW3RdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9meCI6NDA2LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi9nZXRfdHJhY2VfY29sb3IiOjkzNn1dLDkzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPXtoYXNMaW5lczpuLmhhc0xpbmVzLGhhc01hcmtlcnM6bi5oYXNNYXJrZXJzLGhhc1RleHQ6bi5oYXNUZXh0LGlzQnViYmxlOm4uaXNCdWJibGUsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIiksYXJyYXlzVG9DYWxjZGF0YTp0KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLGFuaW1hdGFibGU6ITAsbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjgsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo5MjUsIi4vYXR0cmlidXRlcyI6OTI2LCIuL2NhbGMiOjkyNywiLi9jcm9zc190cmFjZV9jYWxjIjo5MzEsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjkzMiwiLi9kZWZhdWx0cyI6OTMzLCIuL2Zvcm1hdF9sYWJlbHMiOjkzNSwiLi9ob3ZlciI6OTM3LCIuL21hcmtlcl9jb2xvcmJhciI6OTQ0LCIuL3Bsb3QiOjk0NywiLi9zZWxlY3QiOjk0OCwiLi9zdHlsZSI6OTUwLCIuL3N1YnR5cGVzIjo5NTF9XSw5Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGM9KHQubWFya2VyfHx7fSkuY29sb3I7KHMoImxpbmUuY29sb3IiLHIpLGkodCwibGluZSIpKT9hKHQsZSxvLHMse3ByZWZpeDoibGluZS4iLGNMZXR0ZXI6ImMifSk6cygibGluZS5jb2xvciIsIW4oYykmJmN8fHIpO3MoImxpbmUud2lkdGgiKSwobHx8e30pLm5vRGFzaHx8cygibGluZS5kYXNoIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6Mzc2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6Mzc3LCIuLi8uLi9saWIiOjUwM31dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLkJBRE5VTSxhPW4uTE9HX0NMSVAsbz1hKy41LHM9YS0uNSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zZWdtZW50c0ludGVyc2VjdCx1PWwuY29uc3RyYWluLGY9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsaCxwLGQsbSxnLHYseSx4LGIsXyx3LFQsayxBLE0sUz1lLnhheGlzLEU9ZS55YXhpcyxMPSJsb2ciPT09Uy50eXBlLEM9ImxvZyI9PT1FLnR5cGUsUD1TLl9sZW5ndGgsST1FLl9sZW5ndGgsTz1lLmNvbm5lY3RHYXBzLHo9ZS5iYXNlVG9sZXJhbmNlLEQ9ZS5zaGFwZSxSPSJsaW5lYXIiPT09RCxGPWUuZmlsbCYmIm5vbmUiIT09ZS5maWxsLEI9W10sTj1mLm1pblRvbGVyYW5jZSxqPXQubGVuZ3RoLFU9bmV3IEFycmF5KGopLFY9MDtmdW5jdGlvbiBIKHIpe3ZhciBuPXRbcl07aWYoIW4pcmV0dXJuITE7dmFyIGE9ZS5saW5lYXJpemVkP1MubDJwKG4ueCk6Uy5jMnAobi54KSxsPWUubGluZWFyaXplZD9FLmwycChuLnkpOkUuYzJwKG4ueSk7aWYoYT09PWkpe2lmKEwmJihhPVMuYzJwKG4ueCwhMCkpLGE9PT1pKXJldHVybiExO0MmJmw9PT1pJiYoYSo9TWF0aC5hYnMoUy5fbSpJKihTLl9tPjA/bzpzKS8oRS5fbSpQKihFLl9tPjA/bzpzKSkpKSxhKj0xZTN9aWYobD09PWkpe2lmKEMmJihsPUUuYzJwKG4ueSwhMCkpLGw9PT1pKXJldHVybiExO2wqPTFlM31yZXR1cm5bYSxsXX1mdW5jdGlvbiBxKHQsZSxyLG4pe3ZhciBpPXItdCxhPW4tZSxvPS41LXQscz0uNS1lLGw9aSppK2EqYSxjPWkqbythKnM7aWYoYz4wJiZjPGwpe3ZhciB1PW8qYS1zKmk7aWYodSp1PGwpcmV0dXJuITB9fWZ1bmN0aW9uIEcodCxlKXt2YXIgcj10WzBdL1Asbj10WzFdL0ksaT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBpJiZ2b2lkIDAhPT1BJiZxKHIsbixBLE0pJiYoaT0wKSxpJiZlJiZxKHIsbixlWzBdL1AsZVsxXS9JKSYmKGk9MCksKDErZi50b2xlcmFuY2VHcm93dGgqaSkqen1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dFswXS1lWzBdLG49dFsxXS1lWzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFcsWCxaLEosSyxRLCQsdHQ9Zi5tYXhTY3JlZW5zQXdheSxldD0tUCp0dCxydD1QKigxK3R0KSxudD0tSSp0dCxpdD1JKigxK3R0KSxhdD1bW2V0LG50LHJ0LG50XSxbcnQsbnQscnQsaXRdLFtydCxpdCxldCxpdF0sW2V0LGl0LGV0LG50XV07ZnVuY3Rpb24gb3QodCl7aWYodFswXTxldHx8dFswXT5ydHx8dFsxXTxudHx8dFsxXT5pdClyZXR1cm5bdSh0WzBdLGV0LHJ0KSx1KHRbMV0sbnQsaXQpXX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmKHRbMF09PT1ldHx8dFswXT09PXJ0KXx8KHRbMV09PT1lWzFdJiYodFsxXT09PW50fHx0WzFdPT09aXQpfHx2b2lkIDApfWZ1bmN0aW9uIGx0KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obixpKXt2YXIgYT1vdChuKSxvPW90KGkpLHM9W107aWYoYSYmbyYmc3QoYSxvKSlyZXR1cm4gczthJiZzLnB1c2goYSksbyYmcy5wdXNoKG8pO3ZhciBjPTIqbC5jb25zdHJhaW4oKG5bdF0raVt0XSkvMixlLHIpLSgoYXx8bilbdF0rKG98fGkpW3RdKTtjJiYoKGEmJm8/Yz4wPT1hW3RdPm9bdF0/YTpvOmF8fG8pW3RdKz1jKTtyZXR1cm4gc319ZnVuY3Rpb24gY3QodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1lPT09VVtWLTFdWzBdLGk9cj09PVVbVi0xXVsxXTtpZighbnx8IWkpaWYoVj4xKXt2YXIgYT1lPT09VVtWLTJdWzBdLG89cj09PVVbVi0yXVsxXTtuJiYoZT09PWV0fHxlPT09cnQpJiZhP28/Vi0tOlVbVi0xXT10OmkmJihyPT09bnR8fHI9PT1pdCkmJm8/YT9WLS06VVtWLTFdPXQ6VVtWKytdPXR9ZWxzZSBVW1YrK109dH1mdW5jdGlvbiB1dCh0KXtVW1YtMV1bMF0hPT10WzBdJiZVW1YtMV1bMV0hPT10WzFdJiZjdChbWixKXSksY3QodCksSz1udWxsLFo9Sj0wfWZ1bmN0aW9uIGZ0KHQpe2lmKEE9dFswXS9QLE09dFsxXS9JLFc9dFswXTxldD9ldDp0WzBdPnJ0P3J0OjAsWD10WzFdPG50P250OnRbMV0+aXQ/aXQ6MCxXfHxYKXtpZihWKWlmKEspe3ZhciBlPSQoSyx0KTtlLmxlbmd0aD4xJiYodXQoZVswXSksVVtWKytdPWVbMV0pfWVsc2UgUT0kKFVbVi0xXSx0KVswXSxVW1YrK109UTtlbHNlIFVbVisrXT1bV3x8dFswXSxYfHx0WzFdXTt2YXIgcj1VW1YtMV07VyYmWCYmKHJbMF0hPT1XfHxyWzFdIT09WCk/KEsmJihaIT09VyYmSiE9PVg/Y3QoWiYmSj8obj1LLGE9KGk9dClbMF0tblswXSxvPShpWzFdLW5bMV0pL2EsKG5bMV0qaVswXS1pWzFdKm5bMF0pL2E+MD9bbz4wP2V0OnJ0LGl0XTpbbz4wP3J0OmV0LG50XSk6W1p8fFcsSnx8WF0pOlomJkomJmN0KFtaLEpdKSksY3QoW1csWF0pKTpaLVcmJkotWCYmY3QoW1d8fFosWHx8Sl0pLEs9dCxaPVcsSj1YfWVsc2UgSyYmdXQoJChLLHQpWzBdKSxVW1YrK109dDt2YXIgbixpLGEsb31mb3IoImxpbmVhciI9PT1EfHwic3BsaW5lIj09PUQ/JD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wO2k8NDtpKyspe3ZhciBhPWF0W2ldLG89Yyh0WzBdLHRbMV0sZVswXSxlWzFdLGFbMF0sYVsxXSxhWzJdLGFbM10pO28mJighbnx8TWF0aC5hYnMoby54LXJbMF1bMF0pPjF8fE1hdGguYWJzKG8ueS1yWzBdWzFdKT4xKSYmKG89W28ueCxvLnldLG4mJlkobyx0KTxZKHJbMF0sdCk/ci51bnNoaWZ0KG8pOnIucHVzaChvKSxuKyspfXJldHVybiByfToiaHYiPT09RHx8InZoIj09PUQ/JD1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49b3QodCksaT1vdChlKTtyZXR1cm4gbiYmaSYmc3QobixpKXx8KG4mJnIucHVzaChuKSxpJiZyLnB1c2goaSkpLHJ9OiJodmgiPT09RD8kPWx0KDAsZXQscnQpOiJ2aHYiPT09RCYmKCQ9bHQoMSxudCxpdCkpLHI9MDtyPGo7cisrKWlmKG49SChyKSl7Zm9yKFY9MCxLPW51bGwsZnQobikscisrO3I8ajtyKyspe2lmKCEoaD1IKHIpKSl7aWYoTyljb250aW51ZTticmVha31pZihSJiZlLnNpbXBsaWZ5KXt2YXIgaHQ9SChyKzEpO2lmKHk9WShoLG4pLEYmJigwPT09Vnx8Vj09PWotMSl8fCEoeTxHKGgsaHQpKk4pKXtmb3IoZz1bKGhbMF0tblswXSkveSwoaFsxXS1uWzFdKS95XSxwPW4seD15LGI9dz1UPTAsbT0hMSxhPWgscisrO3I8dC5sZW5ndGg7cisrKXtpZihkPWh0LGh0PUgocisxKSwhZCl7aWYoTyljb250aW51ZTticmVha31pZihrPSh2PVtkWzBdLW5bMF0sZFsxXS1uWzFdXSlbMF0qZ1sxXS12WzFdKmdbMF0sdz1NYXRoLm1pbih3LGspLChUPU1hdGgubWF4KFQsaykpLXc+RyhkLGh0KSlicmVhazthPWQsKF89dlswXSpnWzBdK3ZbMV0qZ1sxXSk+eD8oeD1fLGg9ZCxtPSExKTpfPGImJihiPV8scD1kLG09ITApfWlmKG0/KGZ0KGgpLGEhPT1wJiZmdChwKSk6KHAhPT1uJiZmdChwKSxhIT09aCYmZnQoaCkpLGZ0KGEpLHI+PXQubGVuZ3RofHwhZClicmVhaztmdChkKSxuPWR9fWVsc2UgZnQoaCl9SyYmY3QoW1p8fEtbMF0sSnx8S1sxXV0pLEIucHVzaChVLnNsaWNlKDAsVikpfXJldHVybiBCfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCIuL2NvbnN0YW50cyI6OTMwfV0sOTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7InNwbGluZSI9PT1yKCJsaW5lLnNoYXBlIikmJnIoImxpbmUuc21vb3RoaW5nIil9fSx7fV0sOTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt0b25leHR4OjEsdG9uZXh0eToxLHRvbmV4dDoxfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGwsYz17fSx1PSExLGY9LTEsaD0wLHA9LTE7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKykobz0oaT1yW2FdWzBdLnRyYWNlKS5zdGFja2dyb3VwfHwiIik/byBpbiBjP2w9Y1tvXToobD1jW29dPWgsaCsrKTppLmZpbGwgaW4gbiYmcD49MD9sPXA6KGw9cD1oLGgrKyksbDxmJiYodT0hMCksaS5fZ3JvdXBJbmRleD1mPWw7dmFyIGQ9ci5zbGljZSgpO3UmJmQuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLnRyYWNlLG49ZVswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KSk7dmFyIG09e307Zm9yKGE9MDthPGQubGVuZ3RoO2ErKylvPShpPWRbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fCIiLCEwPT09aS52aXNpYmxlPyhpLl9uZXh0dHJhY2U9bnVsbCxpLmZpbGwgaW4gbiYmKHM9bVtvXSxpLl9wcmV2dHJhY2U9c3x8bnVsbCxzJiYocy5fbmV4dHRyYWNlPWkpKSxpLl9vd25maWxsPWkuZmlsbCYmKCJ0b3plcm8iPT09aS5maWxsLnN1YnN0cigwLDYpfHwidG9zZWxmIj09PWkuZmlsbHx8InRvIj09PWkuZmlsbC5zdWJzdHIoMCwyKSYmIWkuX3ByZXZ0cmFjZSksbVtvXT1pKTppLl9wcmV2dHJhY2U9aS5fbmV4dHRyYWNlPWkuX293bmZpbGw9bnVsbDtyZXR1cm4gZH19LHt9XSw5NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT0yKTt2YXIgcj10Lm1hcmtlcixpPXIuc2l6ZXJlZnx8MSxhPXIuc2l6ZW1pbnx8MCxvPSJhcmVhIj09PXIuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0L2kpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC9pfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9byh0L2UpO3JldHVybiBuKHIpJiZyPjA/TWF0aC5tYXgocixhKTowfX19LHsiZmFzdC1pc251bWVyaWMiOjE5MH1dLDk0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NvbnRhaW5lcjoibWFya2VyIixtaW46ImNtaW4iLG1heDoiY21heCJ9fSx7fV0sOTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwsYyl7dmFyIHU9by5pc0J1YmJsZSh0KSxmPSh0LmxpbmV8fHt9KS5jb2xvcjsoYz1jfHx7fSxmJiYocj1mKSxsKCJtYXJrZXIuc3ltYm9sIiksbCgibWFya2VyLm9wYWNpdHkiLHU/Ljc6MSksbCgibWFya2VyLnNpemUiKSxsKCJtYXJrZXIuY29sb3IiLHIpLGkodCwibWFya2VyIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLGMubm9TZWxlY3R8fChsKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxsKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpLGwoInNlbGVjdGVkLm1hcmtlci5zaXplIiksbCgidW5zZWxlY3RlZC5tYXJrZXIuc2l6ZSIpKSxjLm5vTGluZXx8KGwoIm1hcmtlci5saW5lLmNvbG9yIixmJiYhQXJyYXkuaXNBcnJheShmKSYmZS5tYXJrZXIuY29sb3IhPT1mP2Y6dT9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLGwoIm1hcmtlci5saW5lLndpZHRoIix1PzE6MCkpLHUmJihsKCJtYXJrZXIuc2l6ZXJlZiIpLGwoIm1hcmtlci5zaXplbWluIiksbCgibWFya2VyLnNpemVtb2RlIikpLGMuZ3JhZGllbnQpJiYoIm5vbmUiIT09bCgibWFya2VyLmdyYWRpZW50LnR5cGUiKSYmbCgibWFya2VyLmdyYWRpZW50LmNvbG9yIikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6Mzc2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6Mzc3LCIuL3N1YnR5cGVzIjo5NTF9XSw5NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZGF0ZVRpY2swLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORVdFRUs7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuKGUsdCVpPT0wPzE6MCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoaXx8KGk9e3g6ITAseTohMH0pLGkueCl7dmFyIG89bigieHBlcmlvZCIpO28mJihuKCJ4cGVyaW9kMCIsYShvLGUueGNhbGVuZGFyKSksbigieHBlcmlvZGFsaWdubWVudCIpKX1pZihpLnkpe3ZhciBzPW4oInlwZXJpb2QiKTtzJiYobigieXBlcmlvZDAiLGEocyxlLnljYWxlbmRhcikpLG4oInlwZXJpb2RhbGlnbm1lbnQiKSl9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzfV0sOTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPWEuZW5zdXJlU2luZ2xlLHM9YS5pZGVudGl0eSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi9zdWJ0eXBlcyIpLHU9dCgiLi9saW5lX3BvaW50cyIpLGY9dCgiLi9saW5rX3RyYWNlcyIpLGg9dCgiLi4vLi4vbGliL3BvbHlnb24iKS50ZXN0ZXI7ZnVuY3Rpb24gcCh0LGUscixmLHAsZCxtKXt2YXIgZzshZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgcz1yLnhheGlzLGw9ci55YXhpcyx1PW4uZXh0ZW50KGEuc2ltcGxlTWFwKHMucmFuZ2Uscy5yMmMpKSxmPW4uZXh0ZW50KGEuc2ltcGxlTWFwKGwucmFuZ2UsbC5yMmMpKSxoPWlbMF0udHJhY2U7aWYoIWMuaGFzTWFya2VycyhoKSlyZXR1cm47dmFyIHA9aC5tYXJrZXIubWF4ZGlzcGxheWVkO2lmKDA9PT1wKXJldHVybjt2YXIgZD1pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueD49dVswXSYmdC54PD11WzFdJiZ0Lnk+PWZbMF0mJnQueTw9ZlsxXX0pKSxtPU1hdGguY2VpbChkLmxlbmd0aC9wKSxnPTA7by5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3ZhciBuPXRbMF0udHJhY2U7Yy5oYXNNYXJrZXJzKG4pJiZuLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MCYmcjxlJiZnKyt9KSk7dmFyIHY9TWF0aC5yb3VuZChnKm0vMytNYXRoLmZsb29yKGcvMykqbS83LjEpO2kuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZGVsZXRlIHQudmlzfSkpLGQuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXswPT09TWF0aC5yb3VuZCgoZSt2KSVtKSYmKHQudmlzPSEwKX0pKX0oMCxlLHIsZixwKTt2YXIgdj0hIW0mJm0uZHVyYXRpb24+MDtmdW5jdGlvbiB5KHQpe3JldHVybiB2P3QudHJhbnNpdGlvbigpOnR9dmFyIHg9ci54YXhpcyxiPXIueWF4aXMsXz1mWzBdLnRyYWNlLHc9Xy5saW5lLFQ9bi5zZWxlY3QoZCksaz1vKFQsImciLCJlcnJvcmJhcnMiKSxBPW8oVCwiZyIsImxpbmVzIiksTT1vKFQsImciLCJwb2ludHMiKSxTPW8oVCwiZyIsInRleHQiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKHQsayxyLG0pLCEwPT09Xy52aXNpYmxlKXt2YXIgRSxMO3koVCkuc3R5bGUoIm9wYWNpdHkiLF8ub3BhY2l0eSk7dmFyIEM9Xy5maWxsLmNoYXJBdChfLmZpbGwubGVuZ3RoLTEpOyJ4IiE9PUMmJiJ5IiE9PUMmJihDPSIiKSxmWzBdW3IuaXNSYW5nZVBsb3Q/Im5vZGVSYW5nZVBsb3QzIjoibm9kZTMiXT1UO3ZhciBQLEksTz0iIix6PVtdLEQ9Xy5fcHJldnRyYWNlO0QmJihPPUQuX3ByZXZSZXZwYXRofHwiIixMPUQuX25leHRGaWxsLHo9RC5fcG9seWdvbnMpO3ZhciBSLEYsQixOLGosVSxWLEg9IiIscT0iIixHPVtdLFk9YS5ub29wO2lmKEU9Xy5fb3duRmlsbCxjLmhhc0xpbmVzKF8pfHwibm9uZSIhPT1fLmZpbGwpe2ZvcihMJiZMLmRhdHVtKGYpLC0xIT09WyJodiIsInZoIiwiaHZoIiwidmh2Il0uaW5kZXhPZih3LnNoYXBlKT8oUj1sLnN0ZXBzKHcuc2hhcGUpLEY9bC5zdGVwcyh3LnNoYXBlLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpKTpSPUY9InNwbGluZSI9PT13LnNoYXBlP2Z1bmN0aW9uKHQpe3ZhciBlPXRbdC5sZW5ndGgtMV07cmV0dXJuIHQubGVuZ3RoPjEmJnRbMF1bMF09PT1lWzBdJiZ0WzBdWzFdPT09ZVsxXT9sLnNtb290aGNsb3NlZCh0LnNsaWNlKDEpLHcuc21vb3RoaW5nKTpsLnNtb290aG9wZW4odCx3LnNtb290aGluZyl9OmZ1bmN0aW9uKHQpe3JldHVybiJNIit0LmpvaW4oIkwiKX0sQj1mdW5jdGlvbih0KXtyZXR1cm4gRih0LnJldmVyc2UoKSl9LEc9dShmLHt4YXhpczp4LHlheGlzOmIsY29ubmVjdEdhcHM6Xy5jb25uZWN0Z2FwcyxiYXNlVG9sZXJhbmNlOk1hdGgubWF4KHcud2lkdGh8fDEsMykvNCxzaGFwZTp3LnNoYXBlLHNpbXBsaWZ5Oncuc2ltcGxpZnksZmlsbDpfLmZpbGx9KSxWPV8uX3BvbHlnb25zPW5ldyBBcnJheShHLmxlbmd0aCksZz0wO2c8Ry5sZW5ndGg7ZysrKV8uX3BvbHlnb25zW2ddPWgoR1tnXSk7Ry5sZW5ndGgmJihOPUdbMF1bMF0sVT0oaj1HW0cubGVuZ3RoLTFdKVtqLmxlbmd0aC0xXSksWT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoUD1SKGUpLEk9QihlKSxIP0M/KEgrPSJMIitQLnN1YnN0cigxKSxxPUkrIkwiK3Euc3Vic3RyKDEpKTooSCs9IloiK1AscT1JKyJaIitxKTooSD1QLHE9SSksYy5oYXNMaW5lcyhfKSYmZS5sZW5ndGg+MSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYoci5kYXR1bShmKSx0KXkoci5zdHlsZSgib3BhY2l0eSIsMCkuYXR0cigiZCIsUCkuY2FsbChsLmxpbmVHcm91cFN0eWxlKSkuc3R5bGUoIm9wYWNpdHkiLDEpO2Vsc2V7dmFyIGk9eShyKTtpLmF0dHIoImQiLFApLGwuc2luZ2xlTGluZVN0eWxlKGYsaSl9fX19fXZhciBXPUEuc2VsZWN0QWxsKCIuanMtbGluZSIpLmRhdGEoRyk7eShXLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLFcuZWFjaChZKCExKSksVy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNhbGwobC5saW5lR3JvdXBTdHlsZSkuZWFjaChZKCEwKSksbC5zZXRDbGlwVXJsKFcsci5sYXllckNsaXBJZCx0KSxHLmxlbmd0aD8oRT8oRS5kYXR1bShmKSxOJiZVJiYoQz8oInkiPT09Qz9OWzFdPVVbMV09Yi5jMnAoMCwhMCk6IngiPT09QyYmKE5bMF09VVswXT14LmMycCgwLCEwKSkseShFKS5hdHRyKCJkIiwiTSIrVSsiTCIrTisiTCIrSC5zdWJzdHIoMSkpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKTp5KEUpLmF0dHIoImQiLEgrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSkpOkwmJigidG9uZXh0Ij09PV8uZmlsbC5zdWJzdHIoMCw2KSYmSCYmTz8oInRvbmV4dCI9PT1fLmZpbGw/eShMKS5hdHRyKCJkIixIKyJaIitPKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSk6eShMKS5hdHRyKCJkIixIKyJMIitPLnN1YnN0cigxKSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpLF8uX3BvbHlnb25zPV8uX3BvbHlnb25zLmNvbmNhdCh6KSk6KFooTCksXy5fcG9seWdvbnM9bnVsbCkpLF8uX3ByZXZSZXZwYXRoPXEsXy5fcHJldlBvbHlnb25zPVYpOihFP1ooRSk6TCYmWihMKSxfLl9wb2x5Z29ucz1fLl9wcmV2UmV2cGF0aD1fLl9wcmV2UG9seWdvbnM9bnVsbCksTS5kYXR1bShmKSxTLmRhdHVtKGYpLGZ1bmN0aW9uKGUsaSxhKXt2YXIgbyx1PWFbMF0udHJhY2UsZj1jLmhhc01hcmtlcnModSksaD1jLmhhc1RleHQodSkscD10dCh1KSxkPWV0LG09ZXQ7aWYoZnx8aCl7dmFyIGc9cyxfPXUuc3RhY2tncm91cCx3PV8mJiJpbmZlciB6ZXJvIj09PXQuX2Z1bGxMYXlvdXQuX3NjYXR0ZXJTdGFja09wdHNbeC5faWQrYi5faWRdW19dLnN0YWNrZ2Fwczt1Lm1hcmtlci5tYXhkaXNwbGF5ZWR8fHUuX25lZWRzQ3VsbD9nPXc/SzpKOl8mJiF3JiYoZz1RKSxmJiYoZD1nKSxoJiYobT1nKX12YXIgVCxrPShvPWUuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShkLHApKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCk7diYmay5jYWxsKGwucG9pbnRTdHlsZSx1LHQpLmNhbGwobC50cmFuc2xhdGVQb2ludHMseCxiKS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKSxvLm9yZGVyKCksZiYmKFQ9bC5tYWtlUG9pbnRTdHlsZUZucyh1KSksby5lYWNoKChmdW5jdGlvbihlKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXkoaSk7bC50cmFuc2xhdGVQb2ludChlLGEseCxiKT8obC5zaW5nbGVQb2ludFN0eWxlKGUsYSx1LFQsdCksci5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoZSxhLHgsYix1LnhjYWxlbmRhcix1LnljYWxlbmRhciksdS5jdXN0b21kYXRhJiZpLmNsYXNzZWQoInBsb3RseS1jdXN0b21kYXRhIixudWxsIT09ZS5kYXRhJiZ2b2lkIDAhPT1lLmRhdGEpKTphLnJlbW92ZSgpfSkpLHY/by5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTpvLmV4aXQoKS5yZW1vdmUoKSwobz1pLnNlbGVjdEFsbCgiZyIpLmRhdGEobSxwKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0cG9pbnQiLCEwKS5hcHBlbmQoInRleHQiKSxvLm9yZGVyKCksby5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXkoZS5zZWxlY3QoInRleHQiKSk7bC50cmFuc2xhdGVQb2ludCh0LGkseCxiKT9yLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LGUseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKTplLnJlbW92ZSgpfSkpLG8uc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChsLnRleHRQb2ludFN0eWxlLHUsdCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9eC5jMnAodC54KSxyPWIuYzJwKHQueSk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaCgoZnVuY3Rpb24oKXt5KG4uc2VsZWN0KHRoaXMpKS5hdHRyKHt4OmUseTpyfSl9KSl9KSksby5leGl0KCkucmVtb3ZlKCl9KE0sUyxmKTt2YXIgWD0hMT09PV8uY2xpcG9uYXhpcz9udWxsOnIubGF5ZXJDbGlwSWQ7bC5zZXRDbGlwVXJsKE0sWCx0KSxsLnNldENsaXBVcmwoUyxYLHQpfWZ1bmN0aW9uIFoodCl7eSh0KS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBKKHQpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQuZ2FwJiZ0LnZpc30pKX1mdW5jdGlvbiBLKHQpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzfSkpfWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXB9KSl9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiB0dCh0KXtpZih0LmlkcylyZXR1cm4gJH1mdW5jdGlvbiBldCgpe3JldHVybiExfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhLGMpe3ZhciB1LGgsZD0hYSxtPSEhYSYmYS5kdXJhdGlvbj4wLGc9Zih0LGUscik7KCh1PWkuc2VsZWN0QWxsKCJnLnRyYWNlIikuZGF0YShnLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4idHJhY2Ugc2NhdHRlciB0cmFjZSIrdFswXS50cmFjZS51aWR9KSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKSx1Lm9yZGVyKCksZnVuY3Rpb24odCxlLHIpe2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9byhuLnNlbGVjdCh0aGlzKSwiZyIsImZpbGxzIik7bC5zZXRDbGlwVXJsKGksci5sYXllckNsaXBJZCx0KTt2YXIgYT1lWzBdLnRyYWNlLGM9W107YS5fb3duZmlsbCYmYy5wdXNoKCJfb3duRmlsbCIpLGEuX25leHR0cmFjZSYmYy5wdXNoKCJfbmV4dEZpbGwiKTt2YXIgdT1pLnNlbGVjdEFsbCgiZyIpLmRhdGEoYyxzKTt1LmVudGVyKCkuYXBwZW5kKCJnIiksdS5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7YVt0XT1udWxsfSkpLnJlbW92ZSgpLHUub3JkZXIoKS5lYWNoKChmdW5jdGlvbih0KXthW3RdPW8obi5zZWxlY3QodGhpcyksInBhdGgiLCJqcy1maWxsIil9KSl9KSl9KHQsdSxlKSxtKT8oYyYmKGg9YygpKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLmR1cmF0aW9uKS5lYXNlKGEuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe2gmJmgoKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe2gmJmgoKX0pKS5lYWNoKChmdW5jdGlvbigpe2kuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaCgoZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsZyx0aGlzLGEpfSkpfSkpKTp1LmVhY2goKGZ1bmN0aW9uKHIsbil7cCh0LG4sZSxyLGcsdGhpcyxhKX0pKTtkJiZ1LmV4aXQoKS5yZW1vdmUoKSxpLnNlbGVjdEFsbCgicGF0aDpub3QoW2RdKSIpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9wb2x5Z29uIjo1MTUsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vbGluZV9wb2ludHMiOjk0MCwiLi9saW5rX3RyYWNlcyI6OTQyLCIuL3N1YnR5cGVzIjo5NTEsIkBwbG90bHkvZDMiOjU4fV0sOTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdLGY9c1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKGYpJiYhbi5oYXNUZXh0KGYpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspaT1zW3JdLGE9bC5jMnAoaS54KSxvPWMuYzJwKGkueSksbnVsbCE9PWkuaSYmZS5jb250YWlucyhbYSxvXSwhMSxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOmkuaSx4OmwuYzJkKGkueCkseTpjLmMyZChpLnkpfSksaS5zZWxlY3RlZD0xKTppLnNlbGVjdGVkPTA7cmV0dXJuIHV9fSx7Ii4vc3VidHlwZXMiOjk1MX1dLDk0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1bIm9yaWVudGF0aW9uIiwiZ3JvdXBub3JtIiwic3RhY2tnYXBzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXIuX3NjYXR0ZXJTdGFja09wdHMsbz1pKCJzdGFja2dyb3VwIik7aWYobyl7dmFyIHM9ZS54YXhpcytlLnlheGlzLGw9YVtzXTtsfHwobD1hW3NdPXt9KTt2YXIgYz1sW29dLHU9ITE7Yz9jLnRyYWNlcy5wdXNoKGUpOihjPWxbb109e3RyYWNlSW5kaWNlczpbXSx0cmFjZXM6W2VdfSx1PSEwKTtmb3IodmFyIGY9e29yaWVudGF0aW9uOmUueCYmIWUueT8iaCI6InYifSxoPTA7aDxuLmxlbmd0aDtoKyspe3ZhciBwPW5baF0sZD1wKyJGb3VuZCI7aWYoIWNbZF0pe3ZhciBtPXZvaWQgMCE9PXRbcF0sZz0ib3JpZW50YXRpb24iPT09cDtpZigobXx8dSkmJihjW3BdPWkocCxmW3BdKSxnJiYoYy5maWxsRGZsdD0iaCI9PT1jW3BdPyJ0b25leHR4IjoidG9uZXh0eSIpLG0mJihjW2RdPSEwLCF1JiYoZGVsZXRlIGMudHJhY2VzWzBdW3BdLGcpKSkpZm9yKHZhciB2PTA7djxjLnRyYWNlcy5sZW5ndGgtMTt2Kyspe3ZhciB5PWMudHJhY2VzW3ZdO3kuX2lucHV0LmZpbGwhPT15LmZpbGwmJih5LmZpbGw9Yy5maWxsRGZsdCl9fX1yZXR1cm4gY319fSx7fV0sOTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSxyKXtpLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2kudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtvKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSksZS5zZWxlY3RBbGwoImcudGV4dCIpLmVhY2goKGZ1bmN0aW9uKGUpe3Mobi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pKSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlUG9pbnRzOm8sc3R5bGVUZXh0OnMsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzPyhpLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLG4pLGkuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoInRleHQiKSxuKSk6KG8ocixuLHQpLHMocixuLHQpKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9yZWdpc3RyeSI6NjM4LCJAcGxvdGx5L2QzIjo1OH1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibGluZXMiKX0saGFzTWFya2VyczpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiYodC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJtYXJrZXJzIil8fCJzcGxvbSI9PT10LnR5cGUpfSxoYXNUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigidGV4dCIpfSxpc0J1YmJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQubWFya2VyKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KHQubWFya2VyLnNpemUpfX19LHsiLi4vLi4vbGliIjo1MDN9XSw5NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YT1hfHx7fSxpKCJ0ZXh0cG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoaSwidGV4dGZvbnQiLHIuZm9udCksYS5ub1NlbGVjdHx8KGkoInNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksaSgidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpKX19LHsiLi4vLi4vbGliIjo1MDN9XSw5NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzPWEoIngiKSxsPWEoInkiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0scikscyl7dmFyIGM9bi5taW5Sb3dMZW5ndGgocyk7bD9vPU1hdGgubWluKGMsbi5taW5Sb3dMZW5ndGgobCkpOihvPWMsYSgieTAiKSxhKCJkeSIpKX1lbHNle2lmKCFsKXJldHVybiAwO289bi5taW5Sb3dMZW5ndGgobCksYSgieDAiKSxhKCJkeCIpfXJldHVybiBlLl9sZW5ndGg9byxvfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOH1dLDk1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSx1PXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHA9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxkPW4ubGluZSxtPW4ubWFya2VyLGc9bS5saW5lLHY9Zih7d2lkdGg6ZC53aWR0aCxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cChjKSxkZmx0OiJzb2xpZCJ9fSxpKCJsaW5lIikpO3ZhciB5PWUuZXhwb3J0cz1oKHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDpmKHt9LG4udGV4dCx7fSksdGV4dHRlbXBsYXRlOnMoe30se30pLGhvdmVydGV4dDpmKHt9LG4uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOm8oKSx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IiksemhvdmVyZm9ybWF0OmEoInoiKSxtb2RlOmYoe30sbi5tb2RlLHtkZmx0OiJsaW5lcyttYXJrZXJzIn0pLHN1cmZhY2VheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6Wy0xLDAsMSwyXSxkZmx0Oi0xfSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0scHJvamVjdGlvbjp7eDp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX19LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsbGluZTp2LG1hcmtlcjpmKHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpwKHUpLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sc2l6ZTpmKHt9LG0uc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjptLnNpemVyZWYsc2l6ZW1pbjptLnNpemVtaW4sc2l6ZW1vZGU6bS5zaXplbW9kZSxvcGFjaXR5OmYoe30sbS5vcGFjaXR5LHthcnJheU9rOiExfSksY29sb3JiYXI6bS5jb2xvcmJhcixsaW5lOmYoe3dpZHRoOmYoe30sZy53aWR0aCx7YXJyYXlPazohMX0pfSxpKCJtYXJrZXIubGluZSIpKX0saSgibWFya2VyIikpLHRleHRwb3NpdGlvbjpmKHt9LG4udGV4dHBvc2l0aW9uLHtkZmx0OiJ0b3AgY2VudGVyIn0pLHRleHRmb250Ontjb2xvcjpuLnRleHRmb250LmNvbG9yLHNpemU6bi50ZXh0Zm9udC5zaXplLGZhbWlseTpmKHt9LG4udGV4dGZvbnQuZmFtaWx5LHthcnJheU9rOiExfSl9LG9wYWNpdHk6bC5vcGFjaXR5LGhvdmVyaW5mbzpmKHt9LGwuaG92ZXJpbmZvKX0sImNhbGMiLCJuZXN0ZWQiKTt5LnguZWRpdFR5cGU9eS55LmVkaXRUeXBlPXkuei5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyJ9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo0NzYsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjQ3NywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6NTI2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjMzLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyNn1dLDk1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1be3g6ITEseTohMSx0cmFjZTplLHQ6e319XTtyZXR1cm4gbihyLGUpLGkodCxlKSxyfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6OTI1LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6OTI5fV0sOTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKShlKSxvPW5ldyBBcnJheSh0Lmxlbmd0aCkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1hKCt0W3NdLHMpO2lmKCJsb2ciPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxmPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoZiwhMCktYykqcl0sdT4wKXt2YXIgaD1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9aCksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxoKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHsiLi4vLi4vcmVnaXN0cnkiOjYzOH1dLDk1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9saW5lM2QsaT10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9zY2F0dGVyM2QsYT10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9lcnJvcjNkLG89dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZ2xfbWVzaDNkLHM9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikuZGVsYXVuYXlfdHJpYW5ndWxhdGUsbD10KCIuLi8uLi9saWIiKSxjPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSx1PXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5mb3JtYXRDb2xvcixmPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksaD10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxwPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxkPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsZz10KCIuL2NhbGNfZXJyb3JzIik7ZnVuY3Rpb24gdih0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubGluZVBsb3Q9bnVsbCx0aGlzLnNjYXR0ZXJQbG90PW51bGwsdGhpcy5lcnJvckJhcnM9bnVsbCx0aGlzLnRleHRNYXJrZXJzPW51bGwsdGhpcy5kZWxhdW5heU1lc2g9bnVsbCx0aGlzLmNvbG9yPW51bGwsdGhpcy5tb2RlPSIiLHRoaXMuZGF0YVBvaW50cz1bXSx0aGlzLmF4ZXNCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy50ZXh0TGFiZWxzPW51bGwsdGhpcy5kYXRhPW51bGx9dmFyIHk9di5wcm90b3R5cGU7ZnVuY3Rpb24geCh0KXtyZXR1cm4gbnVsbD09dD8wOnQuaW5kZXhPZigibGVmdCIpPi0xPy0xOnQuaW5kZXhPZigicmlnaHQiKT4tMT8xOjB9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbD09dD8wOnQuaW5kZXhPZigidG9wIik+LTE/LTE6dC5pbmRleE9mKCJib3R0b20iKT4tMT8xOjB9ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBlKDQqdCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gcFt0XX1mdW5jdGlvbiBUKHQsZSxyLG4saSl7dmFyIGE9bnVsbDtpZihsLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpe2E9W107Zm9yKHZhciBvPTA7bzxlO28rKyl2b2lkIDA9PT10W29dP2Fbb109bjphW29dPXIodFtvXSxpKX1lbHNlIGE9cih0LGwuaWRlbnRpdHkpO3JldHVybiBhfWZ1bmN0aW9uIGsodCxlKXt2YXIgcixuLGksYSxvLHMsaD1bXSxwPXQuZnVsbFNjZW5lTGF5b3V0LHY9dC5kYXRhU2NhbGUseT1wLnhheGlzLGs9cC55YXhpcyxBPXAuemF4aXMsTT1lLm1hcmtlcixTPWUubGluZSxFPWUueHx8W10sTD1lLnl8fFtdLEM9ZS56fHxbXSxQPUUubGVuZ3RoLEk9ZS54Y2FsZW5kYXIsTz1lLnljYWxlbmRhcix6PWUuemNhbGVuZGFyO2ZvcihvPTA7bzxQO28rKylyPXkuZDJsKEVbb10sMCxJKSp2WzBdLG49ay5kMmwoTFtvXSwwLE8pKnZbMV0saT1BLmQybChDW29dLDAseikqdlsyXSxoW29dPVtyLG4saV07aWYoQXJyYXkuaXNBcnJheShlLnRleHQpKXM9ZS50ZXh0O2Vsc2UgaWYodm9pZCAwIT09ZS50ZXh0KWZvcihzPW5ldyBBcnJheShQKSxvPTA7bzxQO28rKylzW29dPWUudGV4dDtmdW5jdGlvbiBEKHQsZSl7dmFyIHI9cFt0XTtyZXR1cm4gZC50aWNrVGV4dChyLHIuZDJsKGUpLCEwKS50ZXh0fXZhciBSPWUudGV4dHRlbXBsYXRlO2lmKFIpe3ZhciBGPXQuZnVsbExheW91dC5fZDNsb2NhbGUsQj1BcnJheS5pc0FycmF5KFIpLE49Qj9NYXRoLm1pbihSLmxlbmd0aCxQKTpQLGo9Qj9mdW5jdGlvbih0KXtyZXR1cm4gUlt0XX06ZnVuY3Rpb24oKXtyZXR1cm4gUn07Zm9yKHM9bmV3IEFycmF5KE4pLG89MDtvPE47bysrKXt2YXIgVT17eDpFW29dLHk6TFtvXSx6OkNbb119LFY9e3hMYWJlbDpEKCJ4YXhpcyIsRVtvXSkseUxhYmVsOkQoInlheGlzIixMW29dKSx6TGFiZWw6RCgiemF4aXMiLENbb10pfSxIPXt9O20oSCxlLG8pO3ZhciBxPWUuX21ldGF8fHt9O3Nbb109bC50ZXh0dGVtcGxhdGVTdHJpbmcoaihvKSxWLEYsSCxVLHEpfX1pZihhPXtwb3NpdGlvbjpoLG1vZGU6ZS5tb2RlLHRleHQ6c30sImxpbmUiaW4gZSYmKGEubGluZUNvbG9yPXUoUywxLFApLGEubGluZVdpZHRoPVMud2lkdGgsYS5saW5lRGFzaGVzPVMuZGFzaCksIm1hcmtlciJpbiBlKXt2YXIgRz1mKGUpO2Euc2NhdHRlckNvbG9yPXUoTSwxLFApLGEuc2NhdHRlclNpemU9VChNLnNpemUsUCxfLDIwLEcpLGEuc2NhdHRlck1hcmtlcj1UKE0uc3ltYm9sLFAsdywiXHUyNWNmIiksYS5zY2F0dGVyTGluZVdpZHRoPU0ubGluZS53aWR0aCxhLnNjYXR0ZXJMaW5lQ29sb3I9dShNLmxpbmUsMSxQKSxhLnNjYXR0ZXJBbmdsZT0wfSJ0ZXh0cG9zaXRpb24iaW4gZSYmKGEudGV4dE9mZnNldD1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWVbcl09WzAsMF0sdFtyXSYmKGVbcl1bMF09eCh0W3JdKSxlW3JdWzFdPWIodFtyXSkpO2Vsc2UgZVswXT14KHQpLGVbMV09Yih0KTtyZXR1cm4gZX0oZS50ZXh0cG9zaXRpb24pLGEudGV4dENvbG9yPXUoZS50ZXh0Zm9udCwxLFApLGEudGV4dFNpemU9VChlLnRleHRmb250LnNpemUsUCxsLmlkZW50aXR5LDEyKSxhLnRleHRGb250PWUudGV4dGZvbnQuZmFtaWx5LGEudGV4dEFuZ2xlPTApO3ZhciBZPVsieCIsInkiLCJ6Il07Zm9yKGEucHJvamVjdD1bITEsITEsITFdLGEucHJvamVjdFNjYWxlPVsxLDEsMV0sYS5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLG89MDtvPDM7KytvKXt2YXIgVz1lLnByb2plY3Rpb25bWVtvXV07KGEucHJvamVjdFtvXT1XLnNob3cpJiYoYS5wcm9qZWN0T3BhY2l0eVtvXT1XLm9wYWNpdHksYS5wcm9qZWN0U2NhbGVbb109Vy5zY2FsZSl9YS5lcnJvckJvdW5kcz1nKGUsdixwKTt2YXIgWD1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzAsMCwwXSxyPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sbj1bMSwxLDFdLGk9MDtpPDM7aSsrKXt2YXIgYT10W2ldO2EmJiExIT09YS5jb3B5X3pzdHlsZSYmITEhPT10WzJdLnZpc2libGUmJihhPXRbMl0pLGEmJmEudmlzaWJsZSYmKGVbaV09YS53aWR0aC8yLHJbaV09YyhhLmNvbG9yKSxuW2ldPWEudGhpY2tuZXNzKX1yZXR1cm57Y2FwU2l6ZTplLGNvbG9yOnIsbGluZVdpZHRoOm59fShbZS5lcnJvcl94LGUuZXJyb3JfeSxlLmVycm9yX3pdKTtyZXR1cm4gYS5lcnJvckNvbG9yPVguY29sb3IsYS5lcnJvckxpbmVXaWR0aD1YLmxpbmVXaWR0aCxhLmVycm9yQ2FwU2l6ZT1YLmNhcFNpemUsYS5kZWxhdW5heUF4aXM9ZS5zdXJmYWNlYXhpcyxhLmRlbGF1bmF5Q29sb3I9YyhlLnN1cmZhY2Vjb2xvciksYX1mdW5jdGlvbiBBKHQpe2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSl7dmFyIGU9dFswXTtyZXR1cm4gbC5pc0FycmF5T3JUeXBlZEFycmF5KGUpJiYodD1lKSwicmdiKCIrdC5zbGljZSgwLDMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KnQpfSkpKyIpIn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBNKHQpe3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ND09PXQubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHRbMF0/QSh0KTp0Lm1hcChBKTpudWxsfXkuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdCYmKHQub2JqZWN0PT09dGhpcy5saW5lUGxvdHx8dC5vYmplY3Q9PT10aGlzLmRlbGF1bmF5TWVzaHx8dC5vYmplY3Q9PT10aGlzLnRleHRNYXJrZXJzfHx0Lm9iamVjdD09PXRoaXMuc2NhdHRlclBsb3QpKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDtyZXR1cm4gdC5vYmplY3QuaGlnaGxpZ2h0JiZ0Lm9iamVjdC5oaWdobGlnaHQobnVsbCksdGhpcy5zY2F0dGVyUGxvdCYmKHQub2JqZWN0PXRoaXMuc2NhdHRlclBsb3QsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHQodC5kYXRhKSksdC50ZXh0TGFiZWw9IiIsdGhpcy50ZXh0TGFiZWxzJiYoQXJyYXkuaXNBcnJheSh0aGlzLnRleHRMYWJlbHMpPyh0aGlzLnRleHRMYWJlbHNbZV18fDA9PT10aGlzLnRleHRMYWJlbHNbZV0pJiYodC50ZXh0TGFiZWw9dGhpcy50ZXh0TGFiZWxzW2VdKTp0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHMpLHQudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV0sITB9fSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLGwsYyx1PXRoaXMuc2NlbmUuZ2xwbG90LmdsLGY9aC5zb2xpZDt0aGlzLmRhdGE9dDt2YXIgcD1rKHRoaXMuc2NlbmUsdCk7Im1vZGUiaW4gcCYmKHRoaXMubW9kZT1wLm1vZGUpLCJsaW5lRGFzaGVzImluIHAmJnAubGluZURhc2hlcyBpbiBoJiYoZj1oW3AubGluZURhc2hlc10pLHRoaXMuY29sb3I9TShwLnNjYXR0ZXJDb2xvcil8fE0ocC5saW5lQ29sb3IpLHRoaXMuZGF0YVBvaW50cz1wLnBvc2l0aW9uLGU9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5saW5lQ29sb3IsbGluZVdpZHRoOnAubGluZVdpZHRofHwxLGRhc2hlczpmWzBdLGRhc2hTY2FsZTpmWzFdLG9wYWNpdHk6dC5vcGFjaXR5LGNvbm5lY3RHYXBzOnQuY29ubmVjdGdhcHN9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoImxpbmVzIik/dGhpcy5saW5lUGxvdD90aGlzLmxpbmVQbG90LnVwZGF0ZShlKToodGhpcy5saW5lUGxvdD1uKGUpLHRoaXMubGluZVBsb3QuX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMubGluZVBsb3QpKTp0aGlzLmxpbmVQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubGluZVBsb3QpLHRoaXMubGluZVBsb3QuZGlzcG9zZSgpLHRoaXMubGluZVBsb3Q9bnVsbCk7dmFyIGQ9dC5vcGFjaXR5O2lmKHQubWFya2VyJiZ0Lm1hcmtlci5vcGFjaXR5JiYoZCo9dC5tYXJrZXIub3BhY2l0eSkscj17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLnNjYXR0ZXJDb2xvcixzaXplOnAuc2NhdHRlclNpemUsZ2x5cGg6cC5zY2F0dGVyTWFya2VyLG9wYWNpdHk6ZCxvcnRob2dyYXBoaWM6ITAsbGluZVdpZHRoOnAuc2NhdHRlckxpbmVXaWR0aCxsaW5lQ29sb3I6cC5zY2F0dGVyTGluZUNvbG9yLHByb2plY3Q6cC5wcm9qZWN0LHByb2plY3RTY2FsZTpwLnByb2plY3RTY2FsZSxwcm9qZWN0T3BhY2l0eTpwLnByb2plY3RPcGFjaXR5fSwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/dGhpcy5zY2F0dGVyUGxvdD90aGlzLnNjYXR0ZXJQbG90LnVwZGF0ZShyKToodGhpcy5zY2F0dGVyUGxvdD1pKHIpLHRoaXMuc2NhdHRlclBsb3QuX3RyYWNlPXRoaXMsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnNjYXR0ZXJQbG90KSk6dGhpcy5zY2F0dGVyUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnNjYXR0ZXJQbG90KSx0aGlzLnNjYXR0ZXJQbG90LmRpc3Bvc2UoKSx0aGlzLnNjYXR0ZXJQbG90PW51bGwpLGM9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sZ2x5cGg6cC50ZXh0LGNvbG9yOnAudGV4dENvbG9yLHNpemU6cC50ZXh0U2l6ZSxhbmdsZTpwLnRleHRBbmdsZSxhbGlnbm1lbnQ6cC50ZXh0T2Zmc2V0LGZvbnQ6cC50ZXh0Rm9udCxvcnRob2dyYXBoaWM6ITAsbGluZVdpZHRoOjAscHJvamVjdDohMSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy50ZXh0TGFiZWxzPXQuaG92ZXJ0ZXh0fHx0LnRleHQsLTEhPT10aGlzLm1vZGUuaW5kZXhPZigidGV4dCIpP3RoaXMudGV4dE1hcmtlcnM/dGhpcy50ZXh0TWFya2Vycy51cGRhdGUoYyk6KHRoaXMudGV4dE1hcmtlcnM9aShjKSx0aGlzLnRleHRNYXJrZXJzLl90cmFjZT10aGlzLHRoaXMudGV4dE1hcmtlcnMuaGlnaGxpZ2h0U2NhbGU9MSx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy50ZXh0TWFya2VycykpOnRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCksdGhpcy50ZXh0TWFya2Vycz1udWxsKSxsPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuZXJyb3JDb2xvcixlcnJvcjpwLmVycm9yQm91bmRzLGxpbmVXaWR0aDpwLmVycm9yTGluZVdpZHRoLGNhcFNpemU6cC5lcnJvckNhcFNpemUsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMuZXJyb3JCYXJzP3AuZXJyb3JCb3VuZHM/dGhpcy5lcnJvckJhcnMudXBkYXRlKGwpOih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5lcnJvckJhcnMpLHRoaXMuZXJyb3JCYXJzLmRpc3Bvc2UoKSx0aGlzLmVycm9yQmFycz1udWxsKTpwLmVycm9yQm91bmRzJiYodGhpcy5lcnJvckJhcnM9YShsKSx0aGlzLmVycm9yQmFycy5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5lcnJvckJhcnMpKSxwLmRlbGF1bmF5QXhpcz49MCl7dmFyIG09ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHIrMSklMyxhPShyKzIpJTMsbz1bXSxsPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBjPXRbbl07IWlzTmFOKGNbaV0pJiZpc0Zpbml0ZShjW2ldKSYmIWlzTmFOKGNbYV0pJiZpc0Zpbml0ZShjW2FdKSYmKG8ucHVzaChbY1tpXSxjW2FdXSksbC5wdXNoKG4pKX12YXIgdT1zKG8pO2ZvcihuPTA7bjx1Lmxlbmd0aDsrK24pZm9yKHZhciBmPXVbbl0saD0wO2g8Zi5sZW5ndGg7KytoKWZbaF09bFtmW2hdXTtyZXR1cm57cG9zaXRpb25zOnQsY2VsbHM6dSxtZXNoQ29sb3I6ZX19KHAucG9zaXRpb24scC5kZWxhdW5heUNvbG9yLHAuZGVsYXVuYXlBeGlzKTttLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMuZGVsYXVuYXlNZXNoP3RoaXMuZGVsYXVuYXlNZXNoLnVwZGF0ZShtKToobS5nbD11LHRoaXMuZGVsYXVuYXlNZXNoPW8obSksdGhpcy5kZWxhdW5heU1lc2guX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZGVsYXVuYXlNZXNoKSl9ZWxzZSB0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwpfSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmVQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubGluZVBsb3QpLHRoaXMubGluZVBsb3QuZGlzcG9zZSgpKSx0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpKSx0aGlzLmVycm9yQmFycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpKSx0aGlzLnRleHRNYXJrZXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMudGV4dE1hcmtlcnMpLHRoaXMudGV4dE1hcmtlcnMuZGlzcG9zZSgpKSx0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHYodCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7Ii4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyI6MTEyMCwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo0MDIsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NDc2LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo0NzcsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo0OTksIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjUyOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjk0MywiLi9jYWxjX2Vycm9ycyI6OTU2fV0sOTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGYocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGMscixuKX1pZihmdW5jdGlvbih0LGUscixpKXt2YXIgYT0wLG89cigieCIpLHM9cigieSIpLGw9cigieiIpO24uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0saSksbyYmcyYmbCYmKGE9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgsbC5sZW5ndGgpLGUuX2xlbmd0aD1lLl94bGVuZ3RoPWUuX3lsZW5ndGg9ZS5femxlbmd0aD1hKTtyZXR1cm4gYX0odCxlLGYsdSkpe2YoInRleHQiKSxmKCJob3ZlcnRleHQiKSxmKCJob3ZlcnRlbXBsYXRlIiksZigieGhvdmVyZm9ybWF0IiksZigieWhvdmVyZm9ybWF0IiksZigiemhvdmVyZm9ybWF0IiksZigibW9kZSIpLGEuaGFzTGluZXMoZSkmJihmKCJjb25uZWN0Z2FwcyIpLHModCxlLHIsdSxmKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLHUsZix7bm9TZWxlY3Q6ITB9KSxhLmhhc1RleHQoZSkmJihmKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSx1LGYse25vU2VsZWN0OiEwfSkpO3ZhciBoPShlLmxpbmV8fHt9KS5jb2xvcixwPShlLm1hcmtlcnx8e30pLmNvbG9yO2YoInN1cmZhY2VheGlzIik+PTAmJmYoInN1cmZhY2Vjb2xvciIsaHx8cCk7Zm9yKHZhciBkPVsieCIsInkiLCJ6Il0sbT0wO208MzsrK20pe3ZhciBnPSJwcm9qZWN0aW9uLiIrZFttXTtmKGcrIi5zaG93IikmJihmKGcrIi5vcGFjaXR5IiksZihnKyIuc2NhbGUiKSl9dmFyIHY9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7dih0LGUsaHx8cHx8cix7YXhpczoieiJ9KSx2KHQsZSxofHxwfHxyLHtheGlzOiJ5Iixpbmhlcml0OiJ6In0pLHYodCxlLGh8fHB8fHIse2F4aXM6IngiLGluaGVyaXQ6InoifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzOSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjk0NSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjk1MiwiLi9hdHRyaWJ1dGVzIjo5NTR9XSw5NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwbG90OnQoIi4vY29udmVydCIpLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbWFya2VyU3ltYm9sczp0KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOlt7Y29udGFpbmVyOiJtYXJrZXIiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0se2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifV0sY2FsYzp0KCIuL2NhbGMiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcjNkIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG1ldGE6e319fSx7Ii4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjQ3NywiLi4vLi4vcGxvdHMvZ2wzZCI6NTk4LCIuL2F0dHJpYnV0ZXMiOjk1NCwiLi9jYWxjIjo5NTUsIi4vY29udmVydCI6OTU3LCIuL2RlZmF1bHRzIjo5NTh9XSw5NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bi5tYXJrZXIsdT1uLmxpbmUsZj1jLmxpbmU7ZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbW9kZTpsKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0Omwoe30sbi50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6byh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImEiLCJiIiwidGV4dCJdfSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOnUuZGFzaCxzaGFwZTpsKHt9LHUuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOnUuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOmwoe30sbi5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6bi5maWxsY29sb3IsbWFya2VyOmwoe3N5bWJvbDpjLnN5bWJvbCxvcGFjaXR5OmMub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6Yy5tYXhkaXNwbGF5ZWQsc2l6ZTpjLnNpemUsc2l6ZXJlZjpjLnNpemVyZWYsc2l6ZW1pbjpjLnNpemVtaW4sc2l6ZW1vZGU6Yy5zaXplbW9kZSxsaW5lOmwoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpjLmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikpLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmwoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpuLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTphKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2fV0sOTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7dmFyIGM7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgdSxmLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9ITE7Zm9yKGM9MDtjPGg7YysrKWlmKHU9ZS5hW2NdLGY9ZS5iW2NdLG4odSkmJm4oZikpe3ZhciBtPXIuYWIyeHkoK3UsK2YsITApLGc9ci5pc1Zpc2libGUoK3UsK2YpO2d8fChkPSEwKSxwW2NdPXt4Om1bMF0seTptWzFdLGE6dSxiOmYsdmlzOmd9fWVsc2UgcFtjXT17eDohMSx5OiExfTtyZXR1cm4gZS5fbmVlZHNDdWxsPWQscFswXS5jYXJwZXQ9cixwWzBdLnRyYWNlPWUscyhlLGgpLGkodCxlKSxhKHAsZSksbyhwLGUpLHB9fX0seyIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo3MDgsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo5MjUsIi4uL3NjYXR0ZXIvY2FsYyI6OTI3LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjgsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjksImZhc3QtaXNudW1lcmljIjoxOTB9XSw5NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXAoImNhcnBldCIpLGUueGF4aXM9IngiLGUueWF4aXM9InkiO3ZhciBkPXAoImEiKSxtPXAoImIiKSxnPU1hdGgubWluKGQubGVuZ3RoLG0ubGVuZ3RoKTtpZihnKXtlLl9sZW5ndGg9ZyxwKCJ0ZXh0IikscCgidGV4dHRlbXBsYXRlIikscCgiaG92ZXJ0ZXh0IikscCgibW9kZSIsZzxpLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGgscCksbCh0LGUscCkscCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGgscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJmModCxlLGgscCk7dmFyIHY9W107KGEuaGFzTWFya2VycyhlKXx8YS5oYXNUZXh0KGUpKSYmKHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx2LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx2LnB1c2goImZpbGxzIiksImZpbGxzIiE9PXAoImhvdmVyb24iLHYuam9pbigiKyIpfHwicG9pbnRzIikmJnAoImhvdmVydGVtcGxhdGUiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjo5MzAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjo5MzQsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6OTM5LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjk0MSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjk0NSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjk1MiwiLi9hdHRyaWJ1dGVzIjo5NjB9XSw5NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bltpXTtyZXR1cm4gdC5hPWEuYSx0LmI9YS5iLHQueT1hLnksdH19LHt9XSw5NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj1lLl9jYXJwZXQsaT1uLmFiMmlqKFt0LmEsdC5iXSksYT1NYXRoLmZsb29yKGlbMF0pLG89aVswXS1hLHM9TWF0aC5mbG9vcihpWzFdKSxsPWlbMV0tcyxjPW4uZXZhbHh5KFtdLGEscyxvLGwpO3JldHVybiByLnlMYWJlbD1jWzFdLnRvRml4ZWQoMykscn19LHt9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpLGk9dCgiLi4vLi4vbGliIikuZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsYz10LnhhLl9sZW5ndGgsdT1jKmwvMixmPWMtdTtyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGYpLHUpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxmKSx1KSxvfXZhciBoPXMuY2Rbcy5pbmRleF07cy5hPWguYSxzLmI9aC5iLHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDA7dmFyIHA9cy50cmFjZSxkPXAuX2NhcnBldCxtPXAuX21vZHVsZS5mb3JtYXRMYWJlbHMoaCxwKTtzLnlMYWJlbD1tLnlMYWJlbCxkZWxldGUgcy50ZXh0O3ZhciBnPVtdO2lmKCFwLmhvdmVydGVtcGxhdGUpe3ZhciB2PShoLmhpfHxwLmhvdmVyaW5mbykuc3BsaXQoIisiKTstMSE9PXYuaW5kZXhPZigiYWxsIikmJih2PVsiYSIsImIiLCJ0ZXh0Il0pLC0xIT09di5pbmRleE9mKCJhIikmJnkoZC5hYXhpcyxoLmEpLC0xIT09di5pbmRleE9mKCJiIikmJnkoZC5iYXhpcyxoLmIpLGcucHVzaCgieTogIitzLnlMYWJlbCksLTEhPT12LmluZGV4T2YoInRleHQiKSYmaShoLHAsZykscy5leHRyYVRleHQ9Zy5qb2luKCI8YnI+Iil9cmV0dXJuIG99ZnVuY3Rpb24geSh0LGUpe3ZhciByO3I9dC5sYWJlbHByZWZpeCYmdC5sYWJlbHByZWZpeC5sZW5ndGg+MD90LmxhYmVscHJlZml4LnJlcGxhY2UoLyA9ICQvLCIiKTp0Ll9ob3ZlcnRpdGxlLGcucHVzaChyKyI6ICIrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL3NjYXR0ZXIvaG92ZXIiOjkzN31dLDk2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsic3ZnIiwiY2FycGV0Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJjYXJwZXREZXBlbmRlbnQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0NCwiLi4vc2NhdHRlci9zZWxlY3QiOjk0OCwiLi4vc2NhdHRlci9zdHlsZSI6OTUwLCIuL2F0dHJpYnV0ZXMiOjk2MCwiLi9jYWxjIjo5NjEsIi4vZGVmYXVsdHMiOjk2MiwiLi9ldmVudF9kYXRhIjo5NjMsIi4vZm9ybWF0X2xhYmVscyI6OTY0LCIuL2hvdmVyIjo5NjUsIi4vcGxvdCI6OTY3fV0sOTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGMsdT1yWzBdWzBdLmNhcnBldCxmPXt4YXhpczppLmdldEZyb21JZCh0LHUueGF4aXN8fCJ4IikseWF4aXM6aS5nZXRGcm9tSWQodCx1LnlheGlzfHwieSIpLHBsb3Q6ZS5wbG90fTtmb3Iobih0LGYscixvKSxzPTA7czxyLmxlbmd0aDtzKyspbD1yW3NdWzBdLnRyYWNlLGM9by5zZWxlY3RBbGwoImcudHJhY2UiK2wudWlkKyIgLmpzLWxpbmUiKSxhLnNldENsaXBVcmwoYyxyW3NdWzBdLmNhcnBldC5fY2xpcFBhdGhJZCx0KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uL3NjYXR0ZXIvcGxvdCI6OTQ3fV0sOTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxmPWEubWFya2VyLGg9YS5saW5lLHA9Zi5saW5lO2UuZXhwb3J0cz11KHtsb246e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIklTTy0zIiwiVVNBLXN0YXRlcyIsImNvdW50cnkgbmFtZXMiLCJnZW9qc29uLWlkIl0sZGZsdDoiSVNPLTMifSxnZW9qc29uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZmVhdHVyZWlka2V5Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJpZCJ9LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpjKHt9LGEudGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYXQiLCJsb24iLCJsb2NhdGlvbiIsInRleHQiXX0pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSx0ZXh0Zm9udDphLnRleHRmb250LHRleHRwb3NpdGlvbjphLnRleHRwb3NpdGlvbixsaW5lOntjb2xvcjpoLmNvbG9yLHdpZHRoOmgud2lkdGgsZGFzaDpsfSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjpjKHtzeW1ib2w6Zi5zeW1ib2wsb3BhY2l0eTpmLm9wYWNpdHksc2l6ZTpmLnNpemUsc2l6ZXJlZjpmLnNpemVyZWYsc2l6ZW1pbjpmLnNpemVtaW4sc2l6ZW1vZGU6Zi5zaXplbW9kZSxjb2xvcmJhcjpmLmNvbG9yYmFyLGxpbmU6Yyh7d2lkdGg6cC53aWR0aH0scygibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6Zi5ncmFkaWVudH0scygibWFya2VyIikpLGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiXSxkZmx0OiJub25lIn0sZmlsbGNvbG9yOmEuZmlsbGNvbG9yLHNlbGVjdGVkOmEuc2VsZWN0ZWQsdW5zZWxlY3RlZDphLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwibG9jYXRpb24iLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCl9LCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjM4NywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjMzLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjkyNn1dLDk2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vbGliIikuXztmdW5jdGlvbiBjKHQpe3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdT1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxmPXU/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCxoPW5ldyBBcnJheShmKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gYyh0KXx8bih0KX06Yztmb3IodmFyIHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdPXt9O2lmKHUpe3ZhciBtPWUubG9jYXRpb25zW3BdO2QubG9jPXIobSk/bTpudWxsfWVsc2V7dmFyIGc9ZS5sb25bcF0sdj1lLmxhdFtwXTtuKGcpJiZuKHYpP2QubG9ubGF0PVsrZywrdl06ZC5sb25sYXQ9W2ksaV19fXJldHVybiBvKGgsZSksYSh0LGUpLHMoaCxlKSxmJiYoaFswXS50PXtsYWJlbHM6e2xhdDpsKHQsImxhdDoiKSsiICIsbG9uOmwodCwibG9uOiIpKyIgIn19KSxofX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6OTI1LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjgsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjksImZhc3QtaXNudW1lcmljIjoxOTB9XSw5NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfXZhciBoLHA9ZigibG9jYXRpb25zIik7aWYocCYmcC5sZW5ndGgpe3ZhciBkLG09ZigiZ2VvanNvbiIpOygic3RyaW5nIj09dHlwZW9mIG0mJiIiIT09bXx8bi5pc1BsYWluT2JqZWN0KG0pKSYmKGQ9Imdlb2pzb24taWQiKSwiZ2VvanNvbi1pZCI9PT1mKCJsb2NhdGlvbm1vZGUiLGQpJiZmKCJmZWF0dXJlaWRrZXkiKSxoPXAubGVuZ3RofWVsc2V7dmFyIGc9ZigibG9uIil8fFtdLHY9ZigibGF0Iil8fFtdO2g9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpfWg/KGUuX2xlbmd0aD1oLGYoInRleHQiKSxmKCJob3ZlcnRleHQiKSxmKCJob3ZlcnRlbXBsYXRlIiksZigibW9kZSIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHUsZiksZigiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHUsZix7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJihmKCJ0ZXh0dGVtcGxhdGUiKSxzKHQsZSx1LGYpKSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTM0LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzOSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjk0NSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjk1MiwiLi9hdHRyaWJ1dGVzIjo5Njh9XSw5NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdC5sb2NhdGlvbj1lLmxvYz9lLmxvYzpudWxsO3ZhciBhPW5baV07cmV0dXJuIGEuZkluJiZhLmZJbi5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzPWEuZkluLnByb3BlcnRpZXMpLHR9fSx7fV0sOTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5nZW9dLl9zdWJwbG90Lm1vY2tBeGlzLG89dC5sb25sYXQ7cmV0dXJuIGkubG9uTGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMF0pLCEwKS50ZXh0LGkubGF0TGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMV0pLCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTR9XSw5NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbz10KCIuLi8uLi9saWIiKS5maWxsVGV4dCxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dC5jZCxjPWxbMF0udHJhY2UsdT10LnhhLGY9dC55YSxoPXQuc3VicGxvdCxwPWgucHJvamVjdGlvbi5pc0xvbkxhdE92ZXJFZGdlcyxkPWgucHJvamVjdDtpZihuLmdldENsb3Nlc3QobCwoZnVuY3Rpb24odCl7dmFyIG49dC5sb25sYXQ7aWYoblswXT09PWkpcmV0dXJuIDEvMDtpZihwKG4pKXJldHVybiAxLzA7dmFyIGE9ZChuKSxvPWQoW2Uscl0pLHM9TWF0aC5hYnMoYVswXS1vWzBdKSxsPU1hdGguYWJzKGFbMV0tb1sxXSksYz1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHMqcytsKmwpLWMsMS0zL2MpfSksdCksITEhPT10LmluZGV4KXt2YXIgbT1sW3QuaW5kZXhdLGc9bS5sb25sYXQsdj1bdS5jMnAoZyksZi5jMnAoZyldLHk9bS5tcmN8fDE7dC54MD12WzBdLXksdC54MT12WzBdK3ksdC55MD12WzFdLXksdC55MT12WzFdK3ksdC5sb2M9bS5sb2MsdC5sb249Z1swXSx0LmxhdD1nWzFdO3ZhciB4PXt9O3hbYy5nZW9dPXtfc3VicGxvdDpofTt2YXIgYj1jLl9tb2R1bGUuZm9ybWF0TGFiZWxzKG0sYyx4KTtyZXR1cm4gdC5sb25MYWJlbD1iLmxvbkxhYmVsLHQubGF0TGFiZWw9Yi5sYXRMYWJlbCx0LmNvbG9yPWEoYyxtKSx0LmV4dHJhVGV4dD1mdW5jdGlvbih0LGUscixuKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBpPWUuaGl8fHQuaG92ZXJpbmZvLGE9ImFsbCI9PT1pP3MuaG92ZXJpbmZvLmZsYWdzOmkuc3BsaXQoIisiKSxsPS0xIT09YS5pbmRleE9mKCJsb2NhdGlvbiIpJiZBcnJheS5pc0FycmF5KHQubG9jYXRpb25zKSxjPS0xIT09YS5pbmRleE9mKCJsb24iKSx1PS0xIT09YS5pbmRleE9mKCJsYXQiKSxmPS0xIT09YS5pbmRleE9mKCJ0ZXh0IiksaD1bXTtmdW5jdGlvbiBwKHQpe3JldHVybiB0KyJceGIwIn1sP2gucHVzaChlLmxvYyk6YyYmdT9oLnB1c2goIigiK3Aoci5sYXRMYWJlbCkrIiwgIitwKHIubG9uTGFiZWwpKyIpIik6Yz9oLnB1c2gobi5sb24rcChyLmxvbkxhYmVsKSk6dSYmaC5wdXNoKG4ubGF0K3Aoci5sYXRMYWJlbCkpO2YmJm8oZSx0LGgpO3JldHVybiBoLmpvaW4oIjxicj4iKX0oYyxtLHQsbFswXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPWMuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo0MDYsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjo5MzYsIi4vYXR0cmlidXRlcyI6OTY4fV0sOTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxjYWxjR2VvSlNPTjp0KCIuL3Bsb3QiKS5jYWxjR2VvSlNPTixwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcmdlbyIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2VvIiksY2F0ZWdvcmllczpbImdlbyIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2VvIjo1ODksIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4uL3NjYXR0ZXIvc3R5bGUiOjk1MCwiLi9hdHRyaWJ1dGVzIjo5NjgsIi4vY2FsYyI6OTY5LCIuL2RlZmF1bHRzIjo5NzAsIi4vZXZlbnRfZGF0YSI6OTcxLCIuL2Zvcm1hdF9sYWJlbHMiOjk3MiwiLi9ob3ZlciI6OTczLCIuL3Bsb3QiOjk3NSwiLi9zZWxlY3QiOjk3NiwiLi9zdHlsZSI6OTc3fV0sOTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxvPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikscz10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx1PXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGY9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGg9dCgiLi9zdHlsZSIpO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXS50cmFjZSxvPWVbaS5nZW9dLGY9by5fc3VicGxvdCxoPWkuX2xlbmd0aDtpZihBcnJheS5pc0FycmF5KGkubG9jYXRpb25zKSl7dmFyIHA9aS5sb2NhdGlvbm1vZGUsZD0iZ2VvanNvbi1pZCI9PT1wP3MuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTphKGksZi50b3BvanNvbik7Zm9yKHI9MDtyPGg7cisrKXtuPXRbcl07dmFyIG09Imdlb2pzb24taWQiPT09cD9uLmZPdXQ6cy5sb2NhdGlvblRvRmVhdHVyZShwLG4ubG9jLGQpO24ubG9ubGF0PW0/bS5wcm9wZXJ0aWVzLmN0OltjLGNdfX12YXIgZyx2LHk9e3BhZGRlZDohMH07aWYoImdlb2pzb24iPT09by5maXRib3VuZHMmJiJnZW9qc29uLWlkIj09PWkubG9jYXRpb25tb2RlKXt2YXIgeD1zLmNvbXB1dGVCYm94KHMuZ2V0VHJhY2VHZW9qc29uKGkpKTtnPVt4WzBdLHhbMl1dLHY9W3hbMV0seFszXV19ZWxzZXtmb3IoZz1uZXcgQXJyYXkoaCksdj1uZXcgQXJyYXkoaCkscj0wO3I8aDtyKyspbj10W3JdLGdbcl09bi5sb25sYXRbMF0sdltyXT1uLmxvbmxhdFsxXTt5LnBwYWQ9dShpLGgpfWkuX2V4dHJlbWVzLmxvbj1sKG8ubG9uYXhpcy5fYXgsZyx5KSxpLl9leHRyZW1lcy5sYXQ9bChvLmxhdGF4aXMuX2F4LHYseSl9LHBsb3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKSxzPWkubWFrZVRyYWNlR3JvdXBzKGEsciwidHJhY2Ugc2NhdHRlcmdlbyIpO2Z1bmN0aW9uIGwodCxlKXt0LmxvbmxhdFswXT09PWMmJm4uc2VsZWN0KGUpLnJlbW92ZSgpfXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkscy5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPWVbMF0udHJhY2U7aWYoZi5oYXNMaW5lcyhhKXx8Im5vbmUiIT09YS5maWxsKXt2YXIgcz1vLmNhbGNUcmFjZVRvTGluZUNvb3JkcyhlKSxjPSJub25lIiE9PWEuZmlsbD9vLm1ha2VQb2x5Z29uKHMpOm8ubWFrZUxpbmUocyk7ci5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLmRhdGEoW3tnZW9qc29uOmMsdHJhY2U6YX1dKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpfWYuaGFzTWFya2VycyhhKSYmci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKS5lYWNoKChmdW5jdGlvbih0KXtsKHQsdGhpcyl9KSksZi5oYXNUZXh0KGEpJiZyLnNlbGVjdEFsbCgiZyIpLmRhdGEoaS5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoImciKS5hcHBlbmQoInRleHQiKS5lYWNoKChmdW5jdGlvbih0KXtsKHQsdGhpcyl9KSksaCh0LGUpfSkpfX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NDk2LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NDk3LCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjUzMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NTUzLCIuLi9zY2F0dGVyL2NhbGMiOjkyNywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuL3N0eWxlIjo5NzcsIkBwbG90bHkvZDMiOjU4fV0sOTc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHMsbCxjPXQuY2QsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdLHA9Y1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKHApJiYhbi5oYXNUZXh0KHApKXJldHVybltdO2lmKCExPT09ZSlmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKWNbbF0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihsPTA7bDxjLmxlbmd0aDtsKyspKGE9KHI9Y1tsXSkubG9ubGF0KVswXSE9PWkmJihvPXUuYzJwKGEpLHM9Zi5jMnAoYSksZS5jb250YWlucyhbbyxzXSxudWxsLGwsdCk/KGgucHVzaCh7cG9pbnROdW1iZXI6bCxsb246YVswXSxsYXQ6YVsxXX0pLHIuc2VsZWN0ZWQ9MSk6ci5zZWxlY3RlZD0wKTtyZXR1cm4gaH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NTF9XSw5Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9zY2F0dGVyL3N0eWxlIikscz1vLnN0eWxlUG9pbnRzLGw9by5zdHlsZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZSYmZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89ZVswXS5ub2RlMztvLnN0eWxlKCJvcGFjaXR5IixlWzBdLnRyYWNlLm9wYWNpdHkpLHMobyxyLHQpLGwobyxyLHQpLG8uc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2Usbz1yLmxpbmV8fHt9O2UuY2FsbChhLnN0cm9rZSxvLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsby5kYXNofHwiIixvLndpZHRofHwwKSwibm9uZSIhPT1yLmZpbGwmJmUuY2FsbChhLmZpbGwsci5maWxsY29sb3IpfSkpfSh0LGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi9zY2F0dGVyL3N0eWxlIjo5NTAsIkBwbG90bHkvZDMiOjU4fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHU9dCgiLi9jb25zdGFudHMiKS5EQVNIRVMsZj1pLmxpbmUsaD1pLm1hcmtlcixwPWgubGluZSxkPWUuZXhwb3J0cz1jKHt4OmkueCx4MDppLngwLGR4OmkuZHgseTppLnkseTA6aS55MCxkeTppLmR5LHhwZXJpb2Q6aS54cGVyaW9kLHlwZXJpb2Q6aS55cGVyaW9kLHhwZXJpb2QwOmkueHBlcmlvZDAseXBlcmlvZDA6aS55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50OmkueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50OmkueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IiksdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl19LGxpbmU6e2NvbG9yOmYuY29sb3Isd2lkdGg6Zi53aWR0aCxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHYiLCJ2aCIsImh2aCIsInZodiJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyh1KSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6bCh7fSxvKCJtYXJrZXIiKSx7c3ltYm9sOmguc3ltYm9sLHNpemU6aC5zaXplLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsb3BhY2l0eTpoLm9wYWNpdHksY29sb3JiYXI6aC5jb2xvcmJhcixsaW5lOmwoe30sbygibWFya2VyLmxpbmUiKSx7d2lkdGg6cC53aWR0aH0pfSksY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxmaWxsOmwoe30saS5maWxsLHtkZmx0OiJub25lIn0pLGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDp7bWFya2VyOmkuc2VsZWN0ZWQubWFya2VyLHRleHRmb250Omkuc2VsZWN0ZWQudGV4dGZvbnR9LHVuc2VsZWN0ZWQ6e21hcmtlcjppLnVuc2VsZWN0ZWQubWFya2VyLHRleHRmb250OmkudW5zZWxlY3RlZC50ZXh0Zm9udH0sb3BhY2l0eTpuLm9wYWNpdHl9LCJjYWxjIiwibmVzdGVkIik7ZC54LmVkaXRUeXBlPWQueS5lZGl0VHlwZT1kLngwLmVkaXRUeXBlPWQueTAuZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGQuaG92ZXJ0ZW1wbGF0ZT1pLmhvdmVydGVtcGxhdGUsZC50ZXh0dGVtcGxhdGU9aS50ZXh0dGVtcGxhdGV9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6NTI2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1NywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjYsIi4vY29uc3RhbnRzIjo5ODB9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9wb2ludC1jbHVzdGVyIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLGM9bC5jYWxjTWFya2VyU2l6ZSx1PWwuY2FsY0F4aXNFeHBhbnNpb24sZj1sLnNldEZpcnN0U2NhdHRlcixoPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikscD10KCIuL2NvbnZlcnQiKSxkPXQoIi4vc2NlbmVfdXBkYXRlIiksbT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGc9dCgiLi9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZnVuY3Rpb24gdih0LGUscil7dmFyIG49dC5fZXh0cmVtZXNbZS5faWRdLGk9byhlLHIuX2JuZHMse3BhZGRlZDohMH0pO24ubWluPW4ubWluLmNvbmNhdChpLm1pbiksbi5tYXg9bi5tYXguY29uY2F0KGkubWF4KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuX2Z1bGxMYXlvdXQsbD1hLmdldEZyb21JZCh0LGUueGF4aXMpLHk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSx4PW8uX3Bsb3RzW2UueGF4aXMrZS55YXhpc10sYj1lLl9sZW5ndGgsXz1iPj1nLHc9MipiLFQ9e30saz1sLm1ha2VDYWxjZGF0YShlLCJ4IiksQT15Lm1ha2VDYWxjZGF0YShlLCJ5IiksTT1zKGUsbCwieCIsayksUz1zKGUseSwieSIsQSksRT1NLnZhbHMsTD1TLnZhbHM7ZS5feD1FLGUuX3k9TCxlLnhwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWD1rLGUuX3hTdGFydHM9TS5zdGFydHMsZS5feEVuZHM9TS5lbmRzKSxlLnlwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWT1BLGUuX3lTdGFydHM9Uy5zdGFydHMsZS5feUVuZHM9Uy5lbmRzKTt2YXIgQz1uZXcgQXJyYXkodyksUD1uZXcgQXJyYXkoYik7Zm9yKHI9MDtyPGI7cisrKUNbMipyXT1FW3JdPT09bT9OYU46RVtyXSxDWzIqcisxXT1MW3JdPT09bT9OYU46TFtyXSxQW3JdPXI7aWYoImxvZyI9PT1sLnR5cGUpZm9yKHI9MDtyPHc7cis9MilDW3JdPWwuYzJsKENbcl0pO2lmKCJsb2ciPT09eS50eXBlKWZvcihyPTE7cjx3O3IrPTIpQ1tyXT15LmMybChDW3JdKTtfJiYibG9nIiE9PWwudHlwZSYmImxvZyIhPT15LnR5cGU/VC50cmVlPW4oQyk6VC5pZHM9UCxoKHQsZSk7dmFyIEksTz1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIHM9cC5zdHlsZSh0LHIpO3MubWFya2VyJiYocy5tYXJrZXIucG9zaXRpb25zPW4pO3MubGluZSYmbi5sZW5ndGg+MSYmaS5leHRlbmRGbGF0KHMubGluZSxwLmxpbmVQb3NpdGlvbnModCxyLG4pKTtpZihzLmVycm9yWHx8cy5lcnJvclkpe3ZhciBsPXAuZXJyb3JCYXJQb3NpdGlvbnModCxyLG4sYSxvKTtzLmVycm9yWCYmaS5leHRlbmRGbGF0KHMuZXJyb3JYLGwueCkscy5lcnJvclkmJmkuZXh0ZW5kRmxhdChzLmVycm9yWSxsLnkpfXMudGV4dCYmKGkuZXh0ZW5kRmxhdChzLnRleHQse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyKSksaS5leHRlbmRGbGF0KHMudGV4dFNlbCx7cG9zaXRpb25zOm59LHAudGV4dFBvc2l0aW9uKHQscixzLnRleHQscy5tYXJrZXJTZWwpKSxpLmV4dGVuZEZsYXQocy50ZXh0VW5zZWwse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyVW5zZWwpKSk7cmV0dXJuIHN9KHQsMCxlLEMsRSxMKSx6PWQodCx4KTtyZXR1cm4gZihvLGUpLF8/Ty5tYXJrZXImJihJPU8ubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KE8ubWFya2VyLnNpemUsMykpOkk9YyhlLGIpLHUodCxlLGwseSxFLEwsSSksTy5lcnJvclgmJnYoZSxsLE8uZXJyb3JYKSxPLmVycm9yWSYmdihlLHksTy5lcnJvclkpLE8uZmlsbCYmIXouZmlsbDJkJiYoei5maWxsMmQ9ITApLE8ubWFya2VyJiYhei5zY2F0dGVyMmQmJih6LnNjYXR0ZXIyZD0hMCksTy5saW5lJiYhei5saW5lMmQmJih6LmxpbmUyZD0hMCksIU8uZXJyb3JYJiYhTy5lcnJvcll8fHouZXJyb3IyZHx8KHouZXJyb3IyZD0hMCksTy50ZXh0JiYhei5nbFRleHQmJih6LmdsVGV4dD0hMCksTy5tYXJrZXImJihPLm1hcmtlci5zbmFwPWIpLHoubGluZU9wdGlvbnMucHVzaChPLmxpbmUpLHouZXJyb3JYT3B0aW9ucy5wdXNoKE8uZXJyb3JYKSx6LmVycm9yWU9wdGlvbnMucHVzaChPLmVycm9yWSksei5maWxsT3B0aW9ucy5wdXNoKE8uZmlsbCksei5tYXJrZXJPcHRpb25zLnB1c2goTy5tYXJrZXIpLHoubWFya2VyU2VsZWN0ZWRPcHRpb25zLnB1c2goTy5tYXJrZXJTZWwpLHoubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMucHVzaChPLm1hcmtlclVuc2VsKSx6LnRleHRPcHRpb25zLnB1c2goTy50ZXh0KSx6LnRleHRTZWxlY3RlZE9wdGlvbnMucHVzaChPLnRleHRTZWwpLHoudGV4dFVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTy50ZXh0VW5zZWwpLHouc2VsZWN0QmF0Y2gucHVzaChbXSksei51bnNlbGVjdEJhdGNoLnB1c2goW10pLFQuX3NjZW5lPXosVC5pbmRleD16LmNvdW50LFQueD1FLFQueT1MLFQucG9zaXRpb25zPUMsei5jb3VudCsrLFt7eDohMSx5OiExLHQ6VCx0cmFjZTplfV19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjU1MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NTUzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjU1OCwiLi4vc2NhdHRlci9jYWxjIjo5MjcsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjksIi4vY29uc3RhbnRzIjo5ODAsIi4vY29udmVydCI6OTgxLCIuL3NjZW5lX3VwZGF0ZSI6OTg5LCJAcGxvdGx5L3BvaW50LWNsdXN0ZXIiOjU5fV0sOTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17VE9PX01BTllfUE9JTlRTOjFlNSxTWU1CT0xfU0RGX1NJWkU6MjAwLFNZTUJPTF9TSVpFOjIwLFNZTUJPTF9TVFJPS0U6MSxET1RfUkU6Ly1kb3QvLE9QRU5fUkU6Ly1vcGVuLyxEQVNIRVM6e3NvbGlkOlsxXSxkb3Q6WzEsMV0sZGFzaDpbNCwxXSxsb25nZGFzaDpbOCwxXSxkYXNoZG90Ols0LDEsMSwxXSxsb25nZGFzaGRvdDpbOCwxLDEsMV19fX0se31dLDk4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgic3ZnLXBhdGgtc2RmIiksYT10KCJjb2xvci1ub3JtYWxpemUiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksdT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikuZm9ybWF0Q29sb3IsZj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaD10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHA9dCgiLi9oZWxwZXJzIiksZD10KCIuL2NvbnN0YW50cyIpLG09dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGc9e3N0YXJ0OjEsbGVmdDoxLGVuZDotMSxyaWdodDotMSxtaWRkbGU6MCxjZW50ZXI6MCxib3R0b206MSx0b3A6LTF9LHY9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlO2Z1bmN0aW9uIHkodCxlKXt2YXIgcixpPXQuX2Z1bGxMYXlvdXQsYT1lLl9sZW5ndGgsbz1lLnRleHRmb250LGw9ZS50ZXh0cG9zaXRpb24sYz1BcnJheS5pc0FycmF5KGwpP2w6W2xdLHU9by5jb2xvcixmPW8uc2l6ZSxoPW8uZmFtaWx5LHA9e30sZD10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sbT1lLnRleHR0ZW1wbGF0ZTtpZihtKXtwLnRleHQ9W107dmFyIGc9aS5fZDNsb2NhbGUseT1BcnJheS5pc0FycmF5KG0pLHg9eT9NYXRoLm1pbihtLmxlbmd0aCxhKTphLGI9eT9mdW5jdGlvbih0KXtyZXR1cm4gbVt0XX06ZnVuY3Rpb24oKXtyZXR1cm4gbX07Zm9yKHI9MDtyPHg7cisrKXt2YXIgXz17aTpyfSx3PWUuX21vZHVsZS5mb3JtYXRMYWJlbHMoXyxlLGkpLFQ9e307dihULGUscik7dmFyIGs9ZS5fbWV0YXx8e307cC50ZXh0LnB1c2gocy50ZXh0dGVtcGxhdGVTdHJpbmcoYihyKSx3LGcsVCxfLGspKX19ZWxzZSBBcnJheS5pc0FycmF5KGUudGV4dCkmJmUudGV4dC5sZW5ndGg8YT9wLnRleHQ9ZS50ZXh0LnNsaWNlKCk6cC50ZXh0PWUudGV4dDtpZihBcnJheS5pc0FycmF5KHAudGV4dCkpZm9yKHI9cC50ZXh0Lmxlbmd0aDtyPGE7cisrKXAudGV4dFtyXT0iIjtmb3IocC5vcGFjaXR5PWUub3BhY2l0eSxwLmZvbnQ9e30scC5hbGlnbj1bXSxwLmJhc2VsaW5lPVtdLHI9MDtyPGMubGVuZ3RoO3IrKyl7dmFyIEE9Y1tyXS5zcGxpdCgvXHMrLyk7c3dpdGNoKEFbMV0pe2Nhc2UibGVmdCI6cC5hbGlnbi5wdXNoKCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnAuYWxpZ24ucHVzaCgibGVmdCIpO2JyZWFrO2RlZmF1bHQ6cC5hbGlnbi5wdXNoKEFbMV0pfXN3aXRjaChBWzBdKXtjYXNlInRvcCI6cC5iYXNlbGluZS5wdXNoKCJib3R0b20iKTticmVhaztjYXNlImJvdHRvbSI6cC5iYXNlbGluZS5wdXNoKCJ0b3AiKTticmVhaztkZWZhdWx0OnAuYmFzZWxpbmUucHVzaChBWzBdKX19aWYoQXJyYXkuaXNBcnJheSh1KSlmb3IocC5jb2xvcj1uZXcgQXJyYXkoYSkscj0wO3I8YTtyKyspcC5jb2xvcltyXT11W3JdO2Vsc2UgcC5jb2xvcj11O2lmKHMuaXNBcnJheU9yVHlwZWRBcnJheShmKXx8QXJyYXkuaXNBcnJheShoKSlmb3IocC5mb250PW5ldyBBcnJheShhKSxyPTA7cjxhO3IrKyl7dmFyIE09cC5mb250W3JdPXt9O00uc2l6ZT0ocy5pc1R5cGVkQXJyYXkoZik/ZltyXTpBcnJheS5pc0FycmF5KGYpP24oZltyXSk/ZltyXTowOmYpKmQsTS5mYW1pbHk9QXJyYXkuaXNBcnJheShoKT9oW3JdOmh9ZWxzZSBwLmZvbnQ9e3NpemU6ZipkLGZhbWlseTpofTtyZXR1cm4gcH1mdW5jdGlvbiB4KHQpe3ZhciBlLHIsbj10Ll9sZW5ndGgsaT10Lm1hcmtlcixvPXt9LGw9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc3ltYm9sKSxjPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmNvbG9yKSxmPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUuY29sb3IpLGQ9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkub3BhY2l0eSksbT1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5zaXplKSxnPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUud2lkdGgpO2lmKGx8fChyPXAuaXNPcGVuU3ltYm9sKGkuc3ltYm9sKSksbHx8Y3x8Znx8ZCl7by5jb2xvcnM9bmV3IEFycmF5KG4pLG8uYm9yZGVyQ29sb3JzPW5ldyBBcnJheShuKTt2YXIgdj11KGksaS5vcGFjaXR5LG4pLHk9dShpLmxpbmUsaS5vcGFjaXR5LG4pO2lmKCFBcnJheS5pc0FycmF5KHlbMF0pKXt2YXIgeD15O2Zvcih5PUFycmF5KG4pLGU9MDtlPG47ZSsrKXlbZV09eH1pZighQXJyYXkuaXNBcnJheSh2WzBdKSl7dmFyIGI9djtmb3Iodj1BcnJheShuKSxlPTA7ZTxuO2UrKyl2W2VdPWJ9Zm9yKG8uY29sb3JzPXYsby5ib3JkZXJDb2xvcnM9eSxlPTA7ZTxuO2UrKyl7aWYobCl7dmFyIF89aS5zeW1ib2xbZV07cj1wLmlzT3BlblN5bWJvbChfKX1yJiYoeVtlXT12W2VdLnNsaWNlKCksdltlXT12W2VdLnNsaWNlKCksdltlXVszXT0wKX1vLm9wYWNpdHk9dC5vcGFjaXR5fWVsc2Ugcj8oby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5jb2xvclszXT0wLG8uYm9yZGVyQ29sb3I9YShpLmNvbG9yLCJ1aW50OCIpKTooby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5ib3JkZXJDb2xvcj1hKGkubGluZS5jb2xvciwidWludDgiKSksby5vcGFjaXR5PXQub3BhY2l0eSppLm9wYWNpdHk7aWYobClmb3Ioby5tYXJrZXJzPW5ldyBBcnJheShuKSxlPTA7ZTxuO2UrKylvLm1hcmtlcnNbZV09RShpLnN5bWJvbFtlXSk7ZWxzZSBvLm1hcmtlcj1FKGkuc3ltYm9sKTt2YXIgdyxUPWgodCwxKTtpZihtfHxnKXt2YXIgayxBPW8uc2l6ZXM9bmV3IEFycmF5KG4pLE09by5ib3JkZXJTaXplcz1uZXcgQXJyYXkobiksUz0wO2lmKG0pe2ZvcihlPTA7ZTxuO2UrKylBW2VdPVQoaS5zaXplW2VdKSxTKz1BW2VdO2s9Uy9ufWVsc2UgZm9yKHc9VChpLnNpemUpLGU9MDtlPG47ZSsrKUFbZV09dztpZihnKWZvcihlPTA7ZTxuO2UrKylNW2VdPWkubGluZS53aWR0aFtlXTtlbHNlIGZvcih3PWkubGluZS53aWR0aCxlPTA7ZTxuO2UrKylNW2VdPXc7by5zaXplQXZnPWt9ZWxzZSBvLnNpemU9VChpJiZpLnNpemV8fDEwKSxvLmJvcmRlclNpemVzPVQoaS5saW5lLndpZHRoKTtyZXR1cm4gb31mdW5jdGlvbiBiKHQsZSl7dmFyIHI9dC5tYXJrZXIsbj17fTtyZXR1cm4gZT8oZS5tYXJrZXImJmUubWFya2VyLnN5bWJvbD9uPXgocy5leHRlbmRGbGF0KHt9LHIsZS5tYXJrZXIpKTplLm1hcmtlciYmKGUubWFya2VyLnNpemUmJihuLnNpemU9ZS5tYXJrZXIuc2l6ZSksZS5tYXJrZXIuY29sb3ImJihuLmNvbG9ycz1lLm1hcmtlci5jb2xvciksdm9pZCAwIT09ZS5tYXJrZXIub3BhY2l0eSYmKG4ub3BhY2l0eT1lLm1hcmtlci5vcGFjaXR5KSksbik6bn1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj17fTtpZighcilyZXR1cm4gbjtpZihyLnRleHRmb250KXt2YXIgaT17b3BhY2l0eToxLHRleHQ6ZS50ZXh0LHRleHR0ZW1wbGF0ZTplLnRleHR0ZW1wbGF0ZSx0ZXh0cG9zaXRpb246ZS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6cy5leHRlbmRGbGF0KHt9LGUudGV4dGZvbnQpfTtyLnRleHRmb250JiZzLmV4dGVuZEZsYXQoaS50ZXh0Zm9udCxyLnRleHRmb250KSxuPXkodCxpKX1yZXR1cm4gbn1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj17Y2FwU2l6ZToyKmUud2lkdGgqcixsaW5lV2lkdGg6ZS50aGlja25lc3Mqcixjb2xvcjplLmNvbG9yfTtyZXR1cm4gZS5jb3B5X3lzdHlsZSYmKG49dC5lcnJvcl95KSxufXZhciBUPWQuU1lNQk9MX1NERl9TSVpFLGs9ZC5TWU1CT0xfU0laRSxBPWQuU1lNQk9MX1NUUk9LRSxNPXt9LFM9bC5zeW1ib2xGdW5jc1swXSguMDUqayk7ZnVuY3Rpb24gRSh0KXtpZigiY2lyY2xlIj09PXQpcmV0dXJuIG51bGw7dmFyIGUscixuPWwuc3ltYm9sTnVtYmVyKHQpLGE9bC5zeW1ib2xGdW5jc1tuJTEwMF0sbz0hIWwuc3ltYm9sTm9Eb3RbbiUxMDBdLHM9ISFsLnN5bWJvbE5vRmlsbFtuJTEwMF0sYz1wLmlzRG90U3ltYm9sKHQpO3JldHVybiBNW3RdP01bdF06KGU9YyYmIW8/YSgxLjEqaykrUzphKGspLHI9aShlLHt3OlQsaDpULHZpZXdCb3g6Wy1rLC1rLGssa10sc3Ryb2tlOnM/QTotQX0pLE1bdF09cixyfHxudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17bWFya2VyOnZvaWQgMCxtYXJrZXJTZWw6dm9pZCAwLG1hcmtlclVuc2VsOnZvaWQgMCxsaW5lOnZvaWQgMCxmaWxsOnZvaWQgMCxlcnJvclg6dm9pZCAwLGVycm9yWTp2b2lkIDAsdGV4dDp2b2lkIDAsdGV4dFNlbDp2b2lkIDAsdGV4dFVuc2VsOnZvaWQgMH0saT10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW87aWYoITAhPT1lLnZpc2libGUpcmV0dXJuIG47aWYoZi5oYXNUZXh0KGUpJiYobi50ZXh0PXkodCxlKSxuLnRleHRTZWw9Xyh0LGUsZS5zZWxlY3RlZCksbi50ZXh0VW5zZWw9Xyh0LGUsZS51bnNlbGVjdGVkKSksZi5oYXNNYXJrZXJzKGUpJiYobi5tYXJrZXI9eChlKSxuLm1hcmtlclNlbD1iKGUsZS5zZWxlY3RlZCksbi5tYXJrZXJVbnNlbD1iKGUsZS51bnNlbGVjdGVkKSwhZS51bnNlbGVjdGVkJiZzLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5tYXJrZXIub3BhY2l0eSkpKXt2YXIgYT1lLm1hcmtlci5vcGFjaXR5O2ZvcihuLm1hcmtlclVuc2VsLm9wYWNpdHk9bmV3IEFycmF5KGEubGVuZ3RoKSxyPTA7cjxhLmxlbmd0aDtyKyspbi5tYXJrZXJVbnNlbC5vcGFjaXR5W3JdPW0qYVtyXX1pZihmLmhhc0xpbmVzKGUpKXtuLmxpbmU9e292ZXJsYXk6ITAsdGhpY2tuZXNzOmUubGluZS53aWR0aCppLGNvbG9yOmUubGluZS5jb2xvcixvcGFjaXR5OmUub3BhY2l0eX07dmFyIG89KGQuREFTSEVTW2UubGluZS5kYXNoXXx8WzFdKS5zbGljZSgpO2ZvcihyPTA7cjxvLmxlbmd0aDsrK3Ipb1tyXSo9ZS5saW5lLndpZHRoKmk7bi5saW5lLmRhc2hlcz1vfXJldHVybiBlLmVycm9yX3gmJmUuZXJyb3JfeC52aXNpYmxlJiYobi5lcnJvclg9dyhlLGUuZXJyb3JfeCxpKSksZS5lcnJvcl95JiZlLmVycm9yX3kudmlzaWJsZSYmKG4uZXJyb3JZPXcoZSxlLmVycm9yX3ksaSkpLGUuZmlsbCYmIm5vbmUiIT09ZS5maWxsJiYobi5maWxsPXtjbG9zZWQ6ITAsZmlsbDplLmZpbGxjb2xvcix0aGlja25lc3M6MH0pLG59LG1hcmtlclN0eWxlOngsbWFya2VyU2VsZWN0aW9uOmIsbGluZVBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXIubGVuZ3RoLG89YS8yO2lmKGYuaGFzTGluZXMoZSkmJm8paWYoImh2Ij09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4sTmFOLE5hTik6KG4ucHVzaChyWzIqaV0sclsyKmkrMV0pLGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmkrMl0sclsyKmkrMV0pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigiaHZoIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpZihpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSl8fGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippXSxyWzIqaSsxXSksbi5wdXNoKE5hTixOYU4pO2Vsc2V7dmFyIHM9KHJbMippXStyWzIqaSsyXSkvMjtuLnB1c2goclsyKmldLHJbMippKzFdLHMsclsyKmkrMV0scyxyWzIqaSszXSl9bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoInZodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBsPShyWzIqaSsxXStyWzIqaSszXSkvMjtuLnB1c2goclsyKmldLHJbMippKzFdLHJbMippXSxsLHJbMippKzJdLGwpfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJ2aCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippXSxyWzIqaSszXSkpO24ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIG49cjt2YXIgYz0hMTtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKWlmKGlzTmFOKG5baV0pKXtjPSEwO2JyZWFrfXZhciB1PWN8fG4ubGVuZ3RoPmQuVE9PX01BTllfUE9JTlRTfHxmLmhhc01hcmtlcnMoZSk/InJlY3QiOiJyb3VuZCI7aWYoYyYmZS5jb25uZWN0Z2Fwcyl7dmFyIGg9blswXSxwPW5bMV07Zm9yKGk9MDtpPG4ubGVuZ3RoO2krPTIpaXNOYU4obltpXSl8fGlzTmFOKG5baSsxXSk/KG5baV09aCxuW2krMV09cCk6KGg9bltpXSxwPW5baSsxXSl9cmV0dXJue2pvaW46dSxwb3NpdGlvbnM6bn19LGVycm9yQmFyUG9zaXRpb25zOmZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIHM9by5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKSxsPWMuZ2V0RnJvbUlkKHQsZS54YXhpcyksdT1jLmdldEZyb21JZCh0LGUueWF4aXMpLGY9ci5sZW5ndGgvMixoPXt9O2Z1bmN0aW9uIHAodCxpKXt2YXIgYT1pLl9pZC5jaGFyQXQoMCksbz1lWyJlcnJvcl8iK2FdO2lmKG8mJm8udmlzaWJsZSYmKCJsaW5lYXIiPT09aS50eXBlfHwibG9nIj09PWkudHlwZSkpe2Zvcih2YXIgbD1zKG8pLGM9e3g6MCx5OjF9W2FdLHU9e3g6WzAsMSwyLDNdLHk6WzIsMywwLDFdfVthXSxwPW5ldyBGbG9hdDY0QXJyYXkoNCpmKSxkPTEvMCxtPS0xLzAsZz0wLHY9MDtnPGY7ZysrLHYrPTQpe3ZhciB5PXRbZ107aWYobih5KSl7dmFyIHg9clsyKmcrY10sYj1sKHksZyksXz1iWzBdLHc9YlsxXTtpZihuKF8pJiZuKHcpKXt2YXIgVD15LV8saz15K3c7cFt2K3VbMF1dPXgtaS5jMmwoVCkscFt2K3VbMV1dPWkuYzJsKGspLXgscFt2K3VbMl1dPTAscFt2K3VbM11dPTAsZD1NYXRoLm1pbihkLHktXyksbT1NYXRoLm1heChtLHkrdyl9fX1oW2FdPXtwb3NpdGlvbnM6cixlcnJvcnM6cCxfYm5kczpbZCxtXX19fXJldHVybiBwKGksbCkscChhLHUpLGh9LHRleHRQb3NpdGlvbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUuX2xlbmd0aCxvPXt9O2lmKGYuaGFzTWFya2VycyhlKSl7dmFyIHM9ci5mb250LGw9ci5hbGlnbixjPXIuYmFzZWxpbmU7Zm9yKG8ub2Zmc2V0PW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyl7dmFyIHU9bi5zaXplcz9uLnNpemVzW2ldOm4uc2l6ZSxoPUFycmF5LmlzQXJyYXkocyk/c1tpXS5zaXplOnMuc2l6ZSxwPUFycmF5LmlzQXJyYXkobCk/bC5sZW5ndGg+MT9sW2ldOmxbMF06bCxkPUFycmF5LmlzQXJyYXkoYyk/Yy5sZW5ndGg+MT9jW2ldOmNbMF06YyxtPWdbcF0sdj1nW2RdLHk9dT91Ly44KzE6MCx4PS12KnktLjUqdjtvLm9mZnNldFtpXT1bbSp5L2gseC9oXX19cmV0dXJuIG99fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo0MDIsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjQ3OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTgsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjo5NDMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi9jb25zdGFudHMiOjk4MCwiLi9oZWxwZXJzIjo5ODUsImNvbG9yLW5vcm1hbGl6ZSI6ODksImZhc3QtaXNudW1lcmljIjoxOTAsInN2Zy1wYXRoLXNkZiI6MzEwfV0sOTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vaGVscGVycyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGw9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGM9dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxmPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksaD10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxwPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksZD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbSl7ZnVuY3Rpb24gZyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfXZhciB2PSEhdC5tYXJrZXImJmEuaXNPcGVuU3ltYm9sKHQubWFya2VyLnN5bWJvbCkseT1sLmlzQnViYmxlKHQpLHg9Yyh0LGUsbSxnKTtpZih4KXt1KHQsZSxtLGcpLGcoInhob3ZlcmZvcm1hdCIpLGcoInlob3ZlcmZvcm1hdCIpO3ZhciBiPXg8cy5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiO2coInRleHQiKSxnKCJob3ZlcnRleHQiKSxnKCJob3ZlcnRlbXBsYXRlIiksZygibW9kZSIsYiksbC5oYXNMaW5lcyhlKSYmKGcoImNvbm5lY3RnYXBzIiksaCh0LGUscixtLGcpLGcoImxpbmUuc2hhcGUiKSksbC5oYXNNYXJrZXJzKGUpJiYoZih0LGUscixtLGcpLGcoIm1hcmtlci5saW5lLndpZHRoIix2fHx5PzE6MCkpLGwuaGFzVGV4dChlKSYmKGcoInRleHR0ZW1wbGF0ZSIpLGQodCxlLG0sZykpO3ZhciBfPShlLmxpbmV8fHt9KS5jb2xvcix3PShlLm1hcmtlcnx8e30pLmNvbG9yO2coImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJnAodCxlLHIsZyk7dmFyIFQ9aS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN1cHBseURlZmF1bHRzIik7VCh0LGUsX3x8d3x8cix7YXhpczoieSJ9KSxUKHQsZSxffHx3fHxyLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGcpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjkzMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjkzNCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjo5MzksIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDUsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjo5NDYsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjo5NTIsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjk1MywiLi9hdHRyaWJ1dGVzIjo5NzgsIi4vaGVscGVycyI6OTg1fV0sOTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz17c3R5bGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbz10WzBdLHM9by50cmFjZSxsPW8udCxjPWwuX3NjZW5lLHU9bC5pbmRleCxmPWMuc2VsZWN0QmF0Y2hbdV0saD1jLnVuc2VsZWN0QmF0Y2hbdV0scD1jLnRleHRPcHRpb25zW3VdLGQ9Yy50ZXh0U2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxtPWMudGV4dFVuc2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxnPW4uZXh0ZW5kRmxhdCh7fSxwKTtpZihmLmxlbmd0aHx8aC5sZW5ndGgpe3ZhciB2PWQuY29sb3IseT1tLmNvbG9yLHg9cC5jb2xvcixiPUFycmF5LmlzQXJyYXkoeCk7Zm9yKGcuY29sb3I9bmV3IEFycmF5KHMuX2xlbmd0aCksZT0wO2U8Zi5sZW5ndGg7ZSsrKXI9ZltlXSxnLmNvbG9yW3JdPXZ8fChiP3hbcl06eCk7Zm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl7cj1oW2VdO3ZhciBfPWI/eFtyXTp4O2cuY29sb3Jbcl09eXx8KHY/XzppLmFkZE9wYWNpdHkoXyxhKSl9fWMuZ2xUZXh0W3VdLnVwZGF0ZShnKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NDc4LCIuLi8uLi9saWIiOjUwM31dLDk4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2Zvcm1hdF9sYWJlbHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuaTtyZXR1cm4ieCJpbiB0fHwodC54PWUuX3hbaV0pLCJ5ImluIHR8fCh0Lnk9ZS5feVtpXSksbih0LGUscil9fSx7Ii4uL3NjYXR0ZXIvZm9ybWF0X2xhYmVscyI6OTM1fV0sOTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ci5pc09wZW5TeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P24uT1BFTl9SRS50ZXN0KHQpOnQlMjAwPjEwMH0sci5pc0RvdFN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bi5ET1RfUkUudGVzdCh0KTp0PjIwMH19LHsiLi9jb25zdGFudHMiOjk4MH1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpO2Z1bmN0aW9uIG8odCxlLHIsbyl7dmFyIHM9dC54YSxsPXQueWEsYz10LmRpc3RhbmNlLHU9dC5keHksZj10LmluZGV4LGg9e3BvaW50TnVtYmVyOmYseDplW2ZdLHk6cltmXX07aC50eD1BcnJheS5pc0FycmF5KG8udGV4dCk/by50ZXh0W2ZdOm8udGV4dCxoLmh0eD1BcnJheS5pc0FycmF5KG8uaG92ZXJ0ZXh0KT9vLmhvdmVydGV4dFtmXTpvLmhvdmVydGV4dCxoLmRhdGE9QXJyYXkuaXNBcnJheShvLmN1c3RvbWRhdGEpP28uY3VzdG9tZGF0YVtmXTpvLmN1c3RvbWRhdGEsaC50cD1BcnJheS5pc0FycmF5KG8udGV4dHBvc2l0aW9uKT9vLnRleHRwb3NpdGlvbltmXTpvLnRleHRwb3NpdGlvbjt2YXIgcD1vLnRleHRmb250O3AmJihoLnRzPWkuaXNBcnJheU9yVHlwZWRBcnJheShwLnNpemUpP3Auc2l6ZVtmXTpwLnNpemUsaC50Yz1BcnJheS5pc0FycmF5KHAuY29sb3IpP3AuY29sb3JbZl06cC5jb2xvcixoLnRmPUFycmF5LmlzQXJyYXkocC5mYW1pbHkpP3AuZmFtaWx5W2ZdOnAuZmFtaWx5KTt2YXIgZD1vLm1hcmtlcjtkJiYoaC5tcz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5zaXplKT9kLnNpemVbZl06ZC5zaXplLGgubW89aS5pc0FycmF5T3JUeXBlZEFycmF5KGQub3BhY2l0eSk/ZC5vcGFjaXR5W2ZdOmQub3BhY2l0eSxoLm14PWkuaXNBcnJheU9yVHlwZWRBcnJheShkLnN5bWJvbCk/ZC5zeW1ib2xbZl06ZC5zeW1ib2wsaC5tYz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5jb2xvcik/ZC5jb2xvcltmXTpkLmNvbG9yKTt2YXIgbT1kJiZkLmxpbmU7bSYmKGgubWxjPUFycmF5LmlzQXJyYXkobS5jb2xvcik/bS5jb2xvcltmXTptLmNvbG9yLGgubWx3PWkuaXNBcnJheU9yVHlwZWRBcnJheShtLndpZHRoKT9tLndpZHRoW2ZdOm0ud2lkdGgpO3ZhciBnPWQmJmQuZ3JhZGllbnQ7ZyYmIm5vbmUiIT09Zy50eXBlJiYoaC5tZ3Q9QXJyYXkuaXNBcnJheShnLnR5cGUpP2cudHlwZVtmXTpnLnR5cGUsaC5tZ2M9QXJyYXkuaXNBcnJheShnLmNvbG9yKT9nLmNvbG9yW2ZdOmcuY29sb3IpO3ZhciB2PXMuYzJwKGgueCwhMCkseT1sLmMycChoLnksITApLHg9aC5tcmN8fDEsYj1vLmhvdmVybGFiZWw7YiYmKGguaGJnPUFycmF5LmlzQXJyYXkoYi5iZ2NvbG9yKT9iLmJnY29sb3JbZl06Yi5iZ2NvbG9yLGguaGJjPUFycmF5LmlzQXJyYXkoYi5ib3JkZXJjb2xvcik/Yi5ib3JkZXJjb2xvcltmXTpiLmJvcmRlcmNvbG9yLGguaHRzPWkuaXNBcnJheU9yVHlwZWRBcnJheShiLmZvbnQuc2l6ZSk/Yi5mb250LnNpemVbZl06Yi5mb250LnNpemUsaC5odGM9QXJyYXkuaXNBcnJheShiLmZvbnQuY29sb3IpP2IuZm9udC5jb2xvcltmXTpiLmZvbnQuY29sb3IsaC5odGY9QXJyYXkuaXNBcnJheShiLmZvbnQuZmFtaWx5KT9iLmZvbnQuZmFtaWx5W2ZdOmIuZm9udC5mYW1pbHksaC5obmw9aS5pc0FycmF5T3JUeXBlZEFycmF5KGIubmFtZWxlbmd0aCk/Yi5uYW1lbGVuZ3RoW2ZdOmIubmFtZWxlbmd0aCk7dmFyIF89by5ob3ZlcmluZm87XyYmKGguaGk9QXJyYXkuaXNBcnJheShfKT9fW2ZdOl8pO3ZhciB3PW8uaG92ZXJ0ZW1wbGF0ZTt3JiYoaC5odD1BcnJheS5pc0FycmF5KHcpP3dbZl06dyk7dmFyIFQ9e307VFt0LmluZGV4XT1oO3ZhciBrPW8uX29yaWdYLEE9by5fb3JpZ1ksTT1pLmV4dGVuZEZsYXQoe30sdCx7Y29sb3I6YShvLGgpLHgwOnYteCx4MTp2K3gseExhYmVsVmFsOms/a1tmXTpoLngseTA6eS14LHkxOnkreCx5TGFiZWxWYWw6QT9BW2ZdOmgueSxjZDpULGRpc3RhbmNlOmMsc3Bpa2VEaXN0YW5jZTp1LGhvdmVydGVtcGxhdGU6aC5odH0pO3JldHVybiBoLmh0eD9NLnRleHQ9aC5odHg6aC50eD9NLnRleHQ9aC50eDpvLnRleHQmJihNLnRleHQ9by50ZXh0KSxpLmZpbGxUZXh0KGgsbyxNKSxuLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoaCxvLE0pLE19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLHMsbCxjLHUsZixoLHAsZCxtPXQuY2QsZz1tWzBdLnQsdj1tWzBdLnRyYWNlLHk9dC54YSx4PXQueWEsYj1nLngsXz1nLnksdz15LmMycChlKSxUPXguYzJwKHIpLGs9dC5kaXN0YW5jZTtpZihnLnRyZWUpe3ZhciBBPXkucDJjKHctayksTT15LnAyYyh3K2spLFM9eC5wMmMoVC1rKSxFPXgucDJjKFQrayk7aT0ieCI9PT1uP2cudHJlZS5yYW5nZShNYXRoLm1pbihBLE0pLE1hdGgubWluKHguX3JsWzBdLHguX3JsWzFdKSxNYXRoLm1heChBLE0pLE1hdGgubWF4KHguX3JsWzBdLHguX3JsWzFdKSk6Zy50cmVlLnJhbmdlKE1hdGgubWluKEEsTSksTWF0aC5taW4oUyxFKSxNYXRoLm1heChBLE0pLE1hdGgubWF4KFMsRSkpfWVsc2UgaT1nLmlkczt2YXIgTD1rO2lmKCJ4Ij09PW4pe3ZhciBDPSEhdi54cGVyaW9kYWxpZ25tZW50LFA9ISF2LnlwZXJpb2RhbGlnbm1lbnQ7Zm9yKHU9MDt1PGkubGVuZ3RoO3UrKyl7aWYobD1iW2E9aVt1XV0sZj1NYXRoLmFicyh5LmMycChsKS13KSxDKXt2YXIgST15LmMycCh2Ll94U3RhcnRzW2FdKSxPPXkuYzJwKHYuX3hFbmRzW2FdKTtmPXc+PU1hdGgubWluKEksTykmJnc8PU1hdGgubWF4KEksTyk/MDoxLzB9aWYoZjxMKXtpZihMPWYsYz1fW2FdLGg9eC5jMnAoYyktVCxQKXt2YXIgej14LmMycCh2Ll95U3RhcnRzW2FdKSxEPXguYzJwKHYuX3lFbmRzW2FdKTtoPVQ+PU1hdGgubWluKHosRCkmJlQ8PU1hdGgubWF4KHosRCk/MDoxLzB9ZD1NYXRoLnNxcnQoZipmK2gqaCkscz1pW3VdfX19ZWxzZSBmb3IodT1pLmxlbmd0aC0xO3U+LTE7dS0tKWw9YlthPWlbdV1dLGM9X1thXSxmPXkuYzJwKGwpLXcsaD14LmMycChjKS1ULChwPU1hdGguc3FydChmKmYraCpoKSk8TCYmKEw9ZD1wLHM9YSk7cmV0dXJuIHQuaW5kZXg9cyx0LmRpc3RhbmNlPUwsdC5keHk9ZCx2b2lkIDA9PT1zP1t0XTpbbyh0LGIsXyx2KV19LGNhbGNIb3ZlcjpvfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcmVnaXN0cnkiOjYzOCwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjkzNn1dLDk4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hvdmVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwiY2FydGVzaWFuIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOm4uaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjgsIi4uL3NjYXR0ZXIvY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjkzMiwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0NCwiLi9hdHRyaWJ1dGVzIjo5NzgsIi4vY2FsYyI6OTc5LCIuL2RlZmF1bHRzIjo5ODIsIi4vZm9ybWF0X2xhYmVscyI6OTg0LCIuL2hvdmVyIjo5ODYsIi4vcGxvdCI6OTg4LCIuL3NlbGVjdCI6OTkwfV0sOTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc2NhdHRlcjJkIiksaT10KCJyZWdsLWxpbmUyZCIpLGE9dCgicmVnbC1lcnJvcjJkIiksbz10KCJnbC10ZXh0Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLnNlbGVjdE1vZGUsYz10KCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIiksdT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksZj10KCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIiksaD10KCIuL2VkaXRfc3R5bGUiKS5zdHlsZVRleHRTZWxlY3Rpb247ZnVuY3Rpb24gcCh0LGUscixuKXt2YXIgaT10Ll9zaXplLGE9dC53aWR0aCpuLG89dC5oZWlnaHQqbixzPWkubCpuLGw9aS5iKm4sYz1pLnIqbix1PWkudCpuLGY9aS53Km4saD1pLmgqbjtyZXR1cm5bcytlLmRvbWFpblswXSpmLGwrci5kb21haW5bMF0qaCxhLWMtKDEtZS5kb21haW5bMV0pKmYsby11LSgxLXIuZG9tYWluWzFdKSpoXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKXt2YXIgZCxtLGc9dC5fZnVsbExheW91dCx2PWUuX3NjZW5lLHk9ZS54YXhpcyx4PWUueWF4aXM7aWYodilpZihjKHQsWyJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiwiT0VTX2VsZW1lbnRfaW5kZXhfdWludCJdKSl7dmFyIGI9di5jb3VudCxfPWcuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGYodCxlLHIpLHYuZGlydHkpe2lmKCEwPT09di5lcnJvcjJkJiYodi5lcnJvcjJkPWEoXykpLCEwPT09di5saW5lMmQmJih2LmxpbmUyZD1pKF8pKSwhMD09PXYuc2NhdHRlcjJkJiYodi5zY2F0dGVyMmQ9bihfKSksITA9PT12LmZpbGwyZCYmKHYuZmlsbDJkPWkoXykpLCEwPT09di5nbFRleHQpZm9yKHYuZ2xUZXh0PW5ldyBBcnJheShiKSxkPTA7ZDxiO2QrKyl2LmdsVGV4dFtkXT1uZXcgbyhfKTtpZih2LmdsVGV4dCl7aWYoYj52LmdsVGV4dC5sZW5ndGgpe3ZhciB3PWItdi5nbFRleHQubGVuZ3RoO2ZvcihkPTA7ZDx3O2QrKyl2LmdsVGV4dC5wdXNoKG5ldyBvKF8pKX1lbHNlIGlmKGI8di5nbFRleHQubGVuZ3RoKXt2YXIgVD12LmdsVGV4dC5sZW5ndGgtYjt2LmdsVGV4dC5zcGxpY2UoYixUKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pKX1mb3IoZD0wO2Q8YjtkKyspdi5nbFRleHRbZF0udXBkYXRlKHYudGV4dE9wdGlvbnNbZF0pfWlmKHYubGluZTJkJiYodi5saW5lMmQudXBkYXRlKHYubGluZU9wdGlvbnMpLHYubGluZU9wdGlvbnM9di5saW5lT3B0aW9ucy5tYXAoKGZ1bmN0aW9uKHQpe2lmKHQmJnQucG9zaXRpb25zKXtmb3IodmFyIGU9dC5wb3NpdGlvbnMscj0wO3I8ZS5sZW5ndGgmJihpc05hTihlW3JdKXx8aXNOYU4oZVtyKzFdKSk7KXIrPTI7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj5yJiYoaXNOYU4oZVtuXSl8fGlzTmFOKGVbbisxXSkpOyluLT0yO3QucG9zaXRpb25zPWUuc2xpY2UocixuKzIpfXJldHVybiB0fSkpLHYubGluZTJkLnVwZGF0ZSh2LmxpbmVPcHRpb25zKSksdi5lcnJvcjJkKXt2YXIgaz0odi5lcnJvclhPcHRpb25zfHxbXSkuY29uY2F0KHYuZXJyb3JZT3B0aW9uc3x8W10pO3YuZXJyb3IyZC51cGRhdGUoayl9di5zY2F0dGVyMmQmJnYuc2NhdHRlcjJkLnVwZGF0ZSh2Lm1hcmtlck9wdGlvbnMpLHYuZmlsbE9yZGVyPXMucmVwZWF0KG51bGwsYiksdi5maWxsMmQmJih2LmZpbGxPcHRpb25zPXYuZmlsbE9wdGlvbnMubWFwKChmdW5jdGlvbih0LGUpe3ZhciBuPXJbZV07aWYodCYmbiYmblswXSYmblswXS50cmFjZSl7dmFyIGksYSxvPW5bMF0scz1vLnRyYWNlLGw9by50LGM9di5saW5lT3B0aW9uc1tlXSx1PVtdO3MuX293bmZpbGwmJnUucHVzaChlKSxzLl9uZXh0dHJhY2UmJnUucHVzaChlKzEpLHUubGVuZ3RoJiYodi5maWxsT3JkZXJbZV09dSk7dmFyIGYsaCxwPVtdLGQ9YyYmYy5wb3NpdGlvbnN8fGwucG9zaXRpb25zO2lmKCJ0b3plcm95Ij09PXMuZmlsbCl7Zm9yKGY9MDtmPGQubGVuZ3RoJiZpc05hTihkW2YrMV0pOylmKz0yO2ZvcihoPWQubGVuZ3RoLTI7aD5mJiZpc05hTihkW2grMV0pOyloLT0yOzAhPT1kW2YrMV0mJihwPVtkW2ZdLDBdKSxwPXAuY29uY2F0KGQuc2xpY2UoZixoKzIpKSwwIT09ZFtoKzFdJiYocD1wLmNvbmNhdChbZFtoXSwwXSkpfWVsc2UgaWYoInRvemVyb3giPT09cy5maWxsKXtmb3IoZj0wO2Y8ZC5sZW5ndGgmJmlzTmFOKGRbZl0pOylmKz0yO2ZvcihoPWQubGVuZ3RoLTI7aD5mJiZpc05hTihkW2hdKTspaC09MjswIT09ZFtmXSYmKHA9WzAsZFtmKzFdXSkscD1wLmNvbmNhdChkLnNsaWNlKGYsaCsyKSksMCE9PWRbaF0mJihwPXAuY29uY2F0KFswLGRbaCsxXV0pKX1lbHNlIGlmKCJ0b3NlbGYiPT09cy5maWxsfHwidG9uZXh0Ij09PXMuZmlsbCl7Zm9yKHA9W10saT0wLHQuc3BsaXROdWxsPSEwLGE9MDthPGQubGVuZ3RoO2ErPTIpKGlzTmFOKGRbYV0pfHxpc05hTihkW2ErMV0pKSYmKChwPXAuY29uY2F0KGQuc2xpY2UoaSxhKSkpLnB1c2goZFtpXSxkW2krMV0pLHAucHVzaChudWxsLG51bGwpLGk9YSsyKTtwPXAuY29uY2F0KGQuc2xpY2UoaSkpLGkmJnAucHVzaChkW2ldLGRbaSsxXSl9ZWxzZXt2YXIgbT1zLl9uZXh0dHJhY2U7aWYobSl7dmFyIGc9di5saW5lT3B0aW9uc1tlKzFdO2lmKGcpe3ZhciB5PWcucG9zaXRpb25zO2lmKCJ0b25leHR5Ij09PXMuZmlsbCl7Zm9yKHA9ZC5zbGljZSgpLGU9TWF0aC5mbG9vcih5Lmxlbmd0aC8yKTtlLS07KXt2YXIgeD15WzIqZV0sYj15WzIqZSsxXTtpc05hTih4KXx8aXNOYU4oYil8fHAucHVzaCh4LGIpfXQuZmlsbD1tLmZpbGxjb2xvcn19fX1pZihzLl9wcmV2dHJhY2UmJiJ0b25leHQiPT09cy5fcHJldnRyYWNlLmZpbGwpe3ZhciBfPXYubGluZU9wdGlvbnNbZS0xXS5wb3NpdGlvbnMsdz1wLmxlbmd0aC8yLFQ9W2k9d107Zm9yKGE9MDthPF8ubGVuZ3RoO2ErPTIpKGlzTmFOKF9bYV0pfHxpc05hTihfW2ErMV0pKSYmKFQucHVzaChhLzIrdysxKSxpPWErMik7cD1wLmNvbmNhdChfKSx0LmhvbGU9VH1yZXR1cm4gdC5maWxsbW9kZT1zLmZpbGwsdC5vcGFjaXR5PXMub3BhY2l0eSx0LnBvc2l0aW9ucz1wLHR9fSkpLHYuZmlsbDJkLnVwZGF0ZSh2LmZpbGxPcHRpb25zKSl9dmFyIEE9Zy5kcmFnbW9kZSxNPWwoQSksUz1nLmNsaWNrbW9kZS5pbmRleE9mKCJzZWxlY3QiKT4tMTtmb3IoZD0wO2Q8YjtkKyspe3ZhciBFPXJbZF1bMF0sTD1FLnRyYWNlLEM9RS50LFA9Qy5pbmRleCxJPUwuX2xlbmd0aCxPPUMueCx6PUMueTtpZihMLnNlbGVjdGVkcG9pbnRzfHxNfHxTKXtpZihNfHwoTT0hMCksTC5zZWxlY3RlZHBvaW50cyl7dmFyIEQ9di5zZWxlY3RCYXRjaFtQXT1zLnNlbEluZGljZXMyc2VsUG9pbnRzKEwpLFI9e307Zm9yKG09MDttPEQubGVuZ3RoO20rKylSW0RbbV1dPTE7dmFyIEY9W107Zm9yKG09MDttPEk7bSsrKVJbbV18fEYucHVzaChtKTt2LnVuc2VsZWN0QmF0Y2hbUF09Rn12YXIgQj1DLnhweD1uZXcgQXJyYXkoSSksTj1DLnlweD1uZXcgQXJyYXkoSSk7Zm9yKG09MDttPEk7bSsrKUJbbV09eS5jMnAoT1ttXSksTlttXT14LmMycCh6W21dKX1lbHNlIEMueHB4PUMueXB4PW51bGx9aWYoTSl7aWYodi5zZWxlY3QyZHx8KHYuc2VsZWN0MmQ9bihnLl9nbGNhbnZhcy5kYXRhKClbMV0ucmVnbCkpLHYuc2NhdHRlcjJkKXt2YXIgaj1uZXcgQXJyYXkoYik7Zm9yKGQ9MDtkPGI7ZCsrKWpbZF09di5zZWxlY3RCYXRjaFtkXS5sZW5ndGh8fHYudW5zZWxlY3RCYXRjaFtkXS5sZW5ndGg/di5tYXJrZXJVbnNlbGVjdGVkT3B0aW9uc1tkXTp7fTt2LnNjYXR0ZXIyZC51cGRhdGUoail9di5zZWxlY3QyZCYmKHYuc2VsZWN0MmQudXBkYXRlKHYubWFya2VyT3B0aW9ucyksdi5zZWxlY3QyZC51cGRhdGUodi5tYXJrZXJTZWxlY3RlZE9wdGlvbnMpKSx2LmdsVGV4dCYmci5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT0oKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fTt1Lmhhc1RleHQoZSkmJmgodCl9KSl9ZWxzZSB2LnNjYXR0ZXIyZCYmdi5zY2F0dGVyMmQudXBkYXRlKHYubWFya2VyT3B0aW9ucyk7dmFyIFU9e3ZpZXdwb3J0OnAoZyx5LHgsdC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvKSxyYW5nZTpbKHkuX3JsfHx5LnJhbmdlKVswXSwoeC5fcmx8fHgucmFuZ2UpWzBdLCh5Ll9ybHx8eS5yYW5nZSlbMV0sKHguX3JsfHx4LnJhbmdlKVsxXV19LFY9cy5yZXBlYXQoVSx2LmNvdW50KTt2LmZpbGwyZCYmdi5maWxsMmQudXBkYXRlKFYpLHYubGluZTJkJiZ2LmxpbmUyZC51cGRhdGUoViksdi5lcnJvcjJkJiZ2LmVycm9yMmQudXBkYXRlKFYuY29uY2F0KFYpKSx2LnNjYXR0ZXIyZCYmdi5zY2F0dGVyMmQudXBkYXRlKFYpLHYuc2VsZWN0MmQmJnYuc2VsZWN0MmQudXBkYXRlKFYpLHYuZ2xUZXh0JiZ2LmdsVGV4dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnVwZGF0ZShVKX0pKX1lbHNlIHYuaW5pdCgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjozODQsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIjo1MTYsIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiOjk0MiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuL2VkaXRfc3R5bGUiOjk4MywiZ2wtdGV4dCI6MjI1LCJyZWdsLWVycm9yMmQiOjI3OSwicmVnbC1saW5lMmQiOjI4MCwicmVnbC1zY2F0dGVyMmQiOjI4MX1dLDk4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9zY2VuZSxpPXtjb3VudDowLGRpcnR5OiEwLGxpbmVPcHRpb25zOltdLGZpbGxPcHRpb25zOltdLG1hcmtlck9wdGlvbnM6W10sbWFya2VyU2VsZWN0ZWRPcHRpb25zOltdLG1hcmtlclVuc2VsZWN0ZWRPcHRpb25zOltdLGVycm9yWE9wdGlvbnM6W10sZXJyb3JZT3B0aW9uczpbXSx0ZXh0T3B0aW9uczpbXSx0ZXh0U2VsZWN0ZWRPcHRpb25zOltdLHRleHRVbnNlbGVjdGVkT3B0aW9uczpbXSxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSxhPXtmaWxsMmQ6ITEsc2NhdHRlcjJkOiExLGVycm9yMmQ6ITEsbGluZTJkOiExLGdsVGV4dDohMSxzZWxlY3QyZDohMX07cmV0dXJuIGUuX3NjZW5lfHwoKHI9ZS5fc2NlbmU9e30pLmluaXQ9ZnVuY3Rpb24oKXtuLmV4dGVuZEZsYXQocixhLGkpfSxyLmluaXQoKSxyLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT1uLnJlcGVhdCh0LHIuY291bnQpO2lmKHIuZmlsbDJkJiZyLmZpbGwyZC51cGRhdGUoZSksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLnVwZGF0ZShlKSxyLmxpbmUyZCYmci5saW5lMmQudXBkYXRlKGUpLHIuZXJyb3IyZCYmci5lcnJvcjJkLnVwZGF0ZShlLmNvbmNhdChlKSksci5zZWxlY3QyZCYmci5zZWxlY3QyZC51cGRhdGUoZSksci5nbFRleHQpZm9yKHZhciBpPTA7aTxyLmNvdW50O2krKylyLmdsVGV4dFtpXS51cGRhdGUodCl9LHIuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yLmNvdW50LGU9ci5maWxsMmQsaT1yLmVycm9yMmQsYT1yLmxpbmUyZCxvPXIuc2NhdHRlcjJkLHM9ci5nbFRleHQsbD1yLnNlbGVjdDJkLGM9ci5zZWxlY3RCYXRjaCx1PXIudW5zZWxlY3RCYXRjaCxmPTA7Zjx0O2YrKyl7aWYoZSYmci5maWxsT3JkZXJbZl0mJmUuZHJhdyhyLmZpbGxPcmRlcltmXSksYSYmci5saW5lT3B0aW9uc1tmXSYmYS5kcmF3KGYpLGkmJihyLmVycm9yWE9wdGlvbnNbZl0mJmkuZHJhdyhmKSxyLmVycm9yWU9wdGlvbnNbZl0mJmkuZHJhdyhmK3QpKSxvJiZyLm1hcmtlck9wdGlvbnNbZl0paWYodVtmXS5sZW5ndGgpe3ZhciBoPW4ucmVwZWF0KFtdLHIuY291bnQpO2hbZl09dVtmXSxvLmRyYXcoaCl9ZWxzZSBjW2ZdLmxlbmd0aHx8by5kcmF3KGYpO3NbZl0mJnIudGV4dE9wdGlvbnNbZl0mJnNbZl0ucmVuZGVyKCl9bCYmbC5kcmF3KGMpLHIuZGlydHk9ITF9LHIuZGVzdHJveT1mdW5jdGlvbigpe3IuZmlsbDJkJiZyLmZpbGwyZC5kZXN0cm95JiZyLmZpbGwyZC5kZXN0cm95KCksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLmRlc3Ryb3kmJnIuc2NhdHRlcjJkLmRlc3Ryb3koKSxyLmVycm9yMmQmJnIuZXJyb3IyZC5kZXN0cm95JiZyLmVycm9yMmQuZGVzdHJveSgpLHIubGluZTJkJiZyLmxpbmUyZC5kZXN0cm95JiZyLmxpbmUyZC5kZXN0cm95KCksci5zZWxlY3QyZCYmci5zZWxlY3QyZC5kZXN0cm95JiZyLnNlbGVjdDJkLmRlc3Ryb3koKSxyLmdsVGV4dCYmci5nbFRleHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSxyLmxpbmVPcHRpb25zPW51bGwsci5maWxsT3B0aW9ucz1udWxsLHIubWFya2VyT3B0aW9ucz1udWxsLHIubWFya2VyU2VsZWN0ZWRPcHRpb25zPW51bGwsci5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuZXJyb3JYT3B0aW9ucz1udWxsLHIuZXJyb3JZT3B0aW9ucz1udWxsLHIudGV4dE9wdGlvbnM9bnVsbCxyLnRleHRTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnRleHRVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuc2VsZWN0QmF0Y2g9bnVsbCxyLnVuc2VsZWN0QmF0Y2g9bnVsbCxlLl9zY2VuZT1udWxsfSksci5kaXJ0eXx8bi5leHRlbmRGbGF0KHIsaSkscn19LHsiLi4vLi4vbGliIjo1MDN9XSw5OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi9lZGl0X3N0eWxlIikuc3R5bGVUZXh0U2VsZWN0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPVtdLGw9clswXS50cmFjZSxjPXJbMF0udCx1PWwuX2xlbmd0aCxmPWMueCxoPWMueSxwPWMuX3NjZW5lLGQ9Yy5pbmRleDtpZighcClyZXR1cm4gczt2YXIgbT1uLmhhc1RleHQobCksZz1uLmhhc01hcmtlcnMobCksdj0hZyYmIW07aWYoITAhPT1sLnZpc2libGV8fHYpcmV0dXJuIHM7dmFyIHk9W10seD1bXTtpZighMSE9PWUmJiFlLmRlZ2VuZXJhdGUpZm9yKHZhciBiPTA7Yjx1O2IrKyllLmNvbnRhaW5zKFtjLnhweFtiXSxjLnlweFtiXV0sITEsYix0KT8oeS5wdXNoKGIpLHMucHVzaCh7cG9pbnROdW1iZXI6Yix4OmEuYzJkKGZbYl0pLHk6by5jMmQoaFtiXSl9KSk6eC5wdXNoKGIpO2lmKGcpe3ZhciBfPXAuc2NhdHRlcjJkO2lmKHkubGVuZ3RofHx4Lmxlbmd0aCl7aWYoIXAuc2VsZWN0QmF0Y2hbZF0ubGVuZ3RoJiYhcC51bnNlbGVjdEJhdGNoW2RdLmxlbmd0aCl7dmFyIHc9bmV3IEFycmF5KHAuY291bnQpO3dbZF09cC5tYXJrZXJVbnNlbGVjdGVkT3B0aW9uc1tkXSxfLnVwZGF0ZS5hcHBseShfLHcpfX1lbHNle3ZhciBUPW5ldyBBcnJheShwLmNvdW50KTtUW2RdPXAubWFya2VyT3B0aW9uc1tkXSxfLnVwZGF0ZS5hcHBseShfLFQpfX1yZXR1cm4gcC5zZWxlY3RCYXRjaFtkXT15LHAudW5zZWxlY3RCYXRjaFtkXT14LG0mJmkociksc319LHsiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuL2VkaXRfc3R5bGUiOjk4M31dLDk5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksbz10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGg9YS5saW5lLHA9YS5tYXJrZXI7ZS5leHBvcnRzPWYoe2xvbjphLmxvbixsYXQ6YS5sYXQsbW9kZTp1KHt9LG8ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OnUoe30sby50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhdCIsImxvbiIsInRleHQiXX0pLGhvdmVydGV4dDp1KHt9LG8uaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpoLmNvbG9yLHdpZHRoOmgud2lkdGh9LGNvbm5lY3RnYXBzOm8uY29ubmVjdGdhcHMsbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LGFuZ2xlOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITB9LGFsbG93b3ZlcmxhcDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTpwLm9wYWNpdHksc2l6ZTpwLnNpemUsc2l6ZXJlZjpwLnNpemVyZWYsc2l6ZW1pbjpwLnNpemVtaW4sc2l6ZW1vZGU6cC5zaXplbW9kZX0sYygibWFya2VyIikpLGZpbGw6YS5maWxsLGZpbGxjb2xvcjpvLmZpbGxjb2xvcix0ZXh0Zm9udDpzLmxheWVycy5zeW1ib2wudGV4dGZvbnQsdGV4dHBvc2l0aW9uOnMubGF5ZXJzLnN5bWJvbC50ZXh0cG9zaXRpb24sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyJ9LHNlbGVjdGVkOnttYXJrZXI6by5zZWxlY3RlZC5tYXJrZXJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpvLnVuc2VsZWN0ZWQubWFya2VyfSxob3ZlcmluZm86dSh7fSxsLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCl9LCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzIjo2MTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjYsIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyI6OTY4fV0sOTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksdT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksZj10KCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxwPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLk5FV0xJTkVTLGQ9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikuQlJfVEFHX0FMTDtmdW5jdGlvbiBtKCl7cmV0dXJue2dlb2pzb246by5tYWtlQmxhbmsoKSxsYXlvdXQ6e3Zpc2liaWxpdHk6Im5vbmUifSxwYWludDp7fX19ZnVuY3Rpb24gZyh0LGUpe3JldHVybiBpLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ZT9mdW5jdGlvbihlKXtyZXR1cm4gbih0W2VdKT8rdFtlXTowfTpmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX06dD9mdW5jdGlvbigpe3JldHVybiB0fTp2fWZ1bmN0aW9uIHYoKXtyZXR1cm4iIn1mdW5jdGlvbiB5KHQpe3JldHVybiB0WzBdPT09YX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhPWVbMF0udHJhY2UseD0hMD09PWEudmlzaWJsZSYmMCE9PWEuX2xlbmd0aCxiPSJub25lIiE9PWEuZmlsbCxfPXUuaGFzTGluZXMoYSksdz11Lmhhc01hcmtlcnMoYSksVD11Lmhhc1RleHQoYSksaz13JiYiY2lyY2xlIj09PWEubWFya2VyLnN5bWJvbCxBPXcmJiJjaXJjbGUiIT09YS5tYXJrZXIuc3ltYm9sLE09bSgpLFM9bSgpLEU9bSgpLEw9bSgpLEM9e2ZpbGw6TSxsaW5lOlMsY2lyY2xlOkUsc3ltYm9sOkx9O2lmKCF4KXJldHVybiBDO2lmKChifHxfKSYmKHI9by5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSkpLGImJihNLmdlb2pzb249by5tYWtlUG9seWdvbihyKSxNLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQoTS5wYWludCx7ImZpbGwtY29sb3IiOmEuZmlsbGNvbG9yfSkpLF8mJihTLmdlb2pzb249by5tYWtlTGluZShyKSxTLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQoUy5wYWludCx7ImxpbmUtd2lkdGgiOmEubGluZS53aWR0aCwibGluZS1jb2xvciI6YS5saW5lLmNvbG9yLCJsaW5lLW9wYWNpdHkiOmEub3BhY2l0eX0pKSxrKXt2YXIgUD1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyx1PXRbMF0udHJhY2UsZj11Lm1hcmtlcixoPXUuc2VsZWN0ZWRwb2ludHMscD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5jb2xvciksZD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5zaXplKSxtPWkuaXNBcnJheU9yVHlwZWRBcnJheShmLm9wYWNpdHkpO2Z1bmN0aW9uIGcodCl7cmV0dXJuIHUub3BhY2l0eSp0fXAmJihyPXMuaGFzQ29sb3JzY2FsZSh1LCJtYXJrZXIiKT9zLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShmKTppLmlkZW50aXR5KTtkJiYoYT1jKHUpKTttJiYobz1mdW5jdGlvbih0KXtyZXR1cm4gZyhuKHQpPytpLmNvbnN0cmFpbih0LDAsMSk6MCl9KTt2YXIgdix4PVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBiPXRbZV0sXz1iLmxvbmxhdDtpZigheShfKSl7dmFyIHc9e307ciYmKHcubWNjPWIubWNjPXIoYi5tYykpLGEmJih3Lm1yYz1iLm1yYz1hKGIubXMpKSxvJiYody5tbz1vKGIubW8pKSxoJiYody5zZWxlY3RlZD1iLnNlbGVjdGVkfHwwKSx4LnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6X30scHJvcGVydGllczp3fSl9fWlmKGgpZm9yKHY9bC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHUpLGU9MDtlPHgubGVuZ3RoO2UrKyl7dmFyIFQ9eFtlXS5wcm9wZXJ0aWVzO3Yuc2VsZWN0ZWRPcGFjaXR5Rm4mJihULm1vPWcodi5zZWxlY3RlZE9wYWNpdHlGbihUKSkpLHYuc2VsZWN0ZWRDb2xvckZuJiYoVC5tY2M9di5zZWxlY3RlZENvbG9yRm4oVCkpLHYuc2VsZWN0ZWRTaXplRm4mJihULm1yYz12LnNlbGVjdGVkU2l6ZUZuKFQpKX1yZXR1cm57Z2VvanNvbjp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnh9LG1jYzpwfHx2JiZ2LnNlbGVjdGVkQ29sb3JGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtY2MifTpmLmNvbG9yLG1yYzpkfHx2JiZ2LnNlbGVjdGVkU2l6ZUZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1yYyJ9OihrPWYuc2l6ZSxrLzIpLG1vOm18fHYmJnYuc2VsZWN0ZWRPcGFjaXR5Rm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibW8ifTpnKGYub3BhY2l0eSl9O3ZhciBrfShlKTtFLmdlb2pzb249UC5nZW9qc29uLEUubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdChFLnBhaW50LHsiY2lyY2xlLWNvbG9yIjpQLm1jYywiY2lyY2xlLXJhZGl1cyI6UC5tcmMsImNpcmNsZS1vcGFjaXR5IjpQLm1vfSl9aWYoKEF8fFQpJiYoTC5nZW9qc29uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2Z1bGxMYXlvdXQsbj10WzBdLnRyYWNlLGE9bi5tYXJrZXJ8fHt9LG89YS5zeW1ib2wscz1hLmFuZ2xlLGw9ImNpcmNsZSIhPT1vP2cobyk6dixjPSJhdXRvIiE9PXM/ZyhzLCEwKTp2LGY9dS5oYXNUZXh0KG4pP2cobi50ZXh0KTp2LG09W10seD0wO3g8dC5sZW5ndGg7eCsrKXt2YXIgYj10W3hdO2lmKCF5KGIubG9ubGF0KSl7dmFyIF8sdz1uLnRleHR0ZW1wbGF0ZTtpZih3KXt2YXIgVD1BcnJheS5pc0FycmF5KHcpP3dbeF18fCIiOncsaz1uLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGIsbixyKSxBPXt9O2goQSxuLGIuaSk7dmFyIE09bi5fbWV0YXx8e307Xz1pLnRleHR0ZW1wbGF0ZVN0cmluZyhULGssci5fZDNsb2NhbGUsQSxiLE0pfWVsc2UgXz1mKHgpO18mJihfPV8ucmVwbGFjZShwLCIiKS5yZXBsYWNlKGQsIlxuIikpLG0ucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpiLmxvbmxhdH0scHJvcGVydGllczp7c3ltYm9sOmwoeCksYW5nbGU6Yyh4KSx0ZXh0Ol99fSl9fXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6bX19KGUsdCksaS5leHRlbmRGbGF0KEwubGF5b3V0LHt2aXNpYmlsaXR5OiJ2aXNpYmxlIiwiaWNvbi1pbWFnZSI6IntzeW1ib2x9LTE1IiwidGV4dC1maWVsZCI6Int0ZXh0fSJ9KSxBJiYoaS5leHRlbmRGbGF0KEwubGF5b3V0LHsiaWNvbi1zaXplIjphLm1hcmtlci5zaXplLzEwfSksImFuZ2xlImluIGEubWFya2VyJiYiYXV0byIhPT1hLm1hcmtlci5hbmdsZSYmaS5leHRlbmRGbGF0KEwubGF5b3V0LHsiaWNvbi1yb3RhdGUiOnt0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6ImFuZ2xlIn0sImljb24tcm90YXRpb24tYWxpZ25tZW50IjoibWFwIn0pLEwubGF5b3V0WyJpY29uLWFsbG93LW92ZXJsYXAiXT1hLm1hcmtlci5hbGxvd292ZXJsYXAsaS5leHRlbmRGbGF0KEwucGFpbnQseyJpY29uLW9wYWNpdHkiOmEub3BhY2l0eSphLm1hcmtlci5vcGFjaXR5LCJpY29uLWNvbG9yIjphLm1hcmtlci5jb2xvcn0pKSxUKSl7dmFyIEk9KGEubWFya2VyfHx7fSkuc2l6ZSxPPWYoYS50ZXh0cG9zaXRpb24sSSk7aS5leHRlbmRGbGF0KEwubGF5b3V0LHsidGV4dC1zaXplIjphLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpPLmFuY2hvciwidGV4dC1vZmZzZXQiOk8ub2Zmc2V0fSksaS5leHRlbmRGbGF0KEwucGFpbnQseyJ0ZXh0LWNvbG9yIjphLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOmEub3BhY2l0eX0pfXJldHVybiBDfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NDAyLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NDk3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzIjo2MTIsIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjo5NDMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDk5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYoZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoImxvbiIpfHxbXSxpPXIoImxhdCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKTtyZXR1cm4gZS5fbGVuZ3RoPWEsYX0oMCxlLGYpKXtpZihmKCJ0ZXh0IiksZigidGV4dHRlbXBsYXRlIiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoIm1vZGUiKSxmKCJiZWxvdyIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHUsZix7bm9EYXNoOiEwfSksZigiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpKXthKHQsZSxyLHUsZix7bm9MaW5lOiEwfSksZigibWFya2VyLmFsbG93b3ZlcmxhcCIpLGYoIm1hcmtlci5hbmdsZSIpO3ZhciBoPWUubWFya2VyOyJjaXJjbGUiIT09aC5zeW1ib2wmJihuLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5zaXplKSYmKGguc2l6ZT1oLnNpemVbMF0pLG4uaXNBcnJheU9yVHlwZWRBcnJheShoLmNvbG9yKSYmKGguY29sb3I9aC5jb2xvclswXSkpfWkuaGFzVGV4dChlKSYmcyh0LGUsdSxmLHtub1NlbGVjdDohMH0pLGYoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJmwodCxlLHIsZiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZil9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTM0LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzOSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjk0NSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjk1MiwiLi9hdHRyaWJ1dGVzIjo5OTF9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHR9fSx7fV0sOTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5zdWJwbG90XS5fc3VicGxvdC5tb2NrQXhpcyxvPXQubG9ubGF0O3JldHVybiBpLmxvbkxhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzBdKSwhMCkudGV4dCxpLmxhdExhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzFdKSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sOTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPWkuZmlsbFRleHQscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIpe2lmKCF0LmhvdmVydGVtcGxhdGUpe3ZhciBuPShlLmhpfHx0LmhvdmVyaW5mbykuc3BsaXQoIisiKSxpPS0xIT09bi5pbmRleE9mKCJhbGwiKSxhPS0xIT09bi5pbmRleE9mKCJsb24iKSxzPS0xIT09bi5pbmRleE9mKCJsYXQiKSxsPWUubG9ubGF0LGM9W107cmV0dXJuIGl8fGEmJnM/Yy5wdXNoKCIoIit1KGxbMV0pKyIsICIrdShsWzBdKSsiKSIpOmE/Yy5wdXNoKHIubG9uK3UobFswXSkpOnMmJmMucHVzaChyLmxhdCt1KGxbMV0pKSwoaXx8LTEhPT1uLmluZGV4T2YoInRleHQiKSkmJm8oZSx0LGMpLGMuam9pbigiPGJyPiIpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQrIlx4YjAifX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10LmNkLGM9b1swXS50cmFjZSx1PXQueGEsZj10LnlhLGg9dC5zdWJwbG90LHA9MzYwKihlPj0wP01hdGguZmxvb3IoKGUrMTgwKS8zNjApOk1hdGguY2VpbCgoZS0xODApLzM2MCkpLGQ9ZS1wO2lmKG4uZ2V0Q2xvc2VzdChvLChmdW5jdGlvbih0KXt2YXIgZT10LmxvbmxhdDtpZihlWzBdPT09cylyZXR1cm4gMS8wO3ZhciBuPWkubW9kSGFsZihlWzBdLDM2MCksYT1lWzFdLG89aC5wcm9qZWN0KFtuLGFdKSxsPW8ueC11LmMycChbZCxhXSksYz1vLnktZi5jMnAoW24scl0pLHA9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChsKmwrYypjKS1wLDEtMy9wKX0pLHQpLCExIT09dC5pbmRleCl7dmFyIG09b1t0LmluZGV4XSxnPW0ubG9ubGF0LHY9W2kubW9kSGFsZihnWzBdLDM2MCkrcCxnWzFdXSx5PXUuYzJwKHYpLHg9Zi5jMnAodiksYj1tLm1yY3x8MTt0LngwPXktYix0LngxPXkrYix0LnkwPXgtYix0LnkxPXgrYjt2YXIgXz17fTtfW2Muc3VicGxvdF09e19zdWJwbG90Omh9O3ZhciB3PWMuX21vZHVsZS5mb3JtYXRMYWJlbHMobSxjLF8pO3JldHVybiB0LmxvbkxhYmVsPXcubG9uTGFiZWwsdC5sYXRMYWJlbD13LmxhdExhYmVsLHQuY29sb3I9YShjLG0pLHQuZXh0cmFUZXh0PWwoYyxtLG9bMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT1jLmhvdmVydGVtcGxhdGUsW3RdfX0sZ2V0RXh0cmFUZXh0Omx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjkzNn1dLDk5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi4vc2NhdHRlcmdlby9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJtYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvbWFwYm94Ijo2MTMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4uL3NjYXR0ZXJnZW8vY2FsYyI6OTY5LCIuL2F0dHJpYnV0ZXMiOjk5MSwiLi9kZWZhdWx0cyI6OTkzLCIuL2V2ZW50X2RhdGEiOjk5NCwiLi9mb3JtYXRfbGFiZWxzIjo5OTUsIi4vaG92ZXIiOjk5NiwiLi9wbG90Ijo5OTgsIi4vc2VsZWN0Ijo5OTl9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IiksaT10KCIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIikudHJhY2VMYXllclByZWZpeCxhPVsiZmlsbCIsImxpbmUiLCJjaXJjbGUiLCJzeW1ib2wiXTtmdW5jdGlvbiBvKHQsZSl7dGhpcy50eXBlPSJzY2F0dGVybWFwYm94Iix0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWRzPXtmaWxsOiJzb3VyY2UtIitlKyItZmlsbCIsbGluZToic291cmNlLSIrZSsiLWxpbmUiLGNpcmNsZToic291cmNlLSIrZSsiLWNpcmNsZSIsc3ltYm9sOiJzb3VyY2UtIitlKyItc3ltYm9sIn0sdGhpcy5sYXllcklkcz17ZmlsbDppK2UrIi1maWxsIixsaW5lOmkrZSsiLWxpbmUiLGNpcmNsZTppK2UrIi1jaXJjbGUiLHN5bWJvbDppK2UrIi1zeW1ib2wifSx0aGlzLmJlbG93PW51bGx9dmFyIHM9by5wcm90b3R5cGU7cy5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZFNvdXJjZSh0aGlzLnNvdXJjZUlkc1t0XSx7dHlwZToiZ2VvanNvbiIsZGF0YTplLmdlb2pzb259KX0scy5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0scy5hZGRMYXllcj1mdW5jdGlvbih0LGUscil7dGhpcy5zdWJwbG90LmFkZExheWVyKHt0eXBlOnQsaWQ6dGhpcy5sYXllcklkc1t0XSxzb3VyY2U6dGhpcy5zb3VyY2VJZHNbdF0sbGF5b3V0OmUubGF5b3V0LHBhaW50OmUucGFpbnR9LHIpfSxzLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLGksbz10aGlzLnN1YnBsb3Qscz1vLm1hcCxsPW4oby5nZCx0KSxjPW8uYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2lmKGMhPT10aGlzLmJlbG93KXtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7ZS0tKXI9YVtlXSxzLnJlbW92ZUxheWVyKHRoaXMubGF5ZXJJZHNbcl0pO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspaT1sW3I9YVtlXV0sdGhpcy5hZGRMYXllcihyLGksYyk7dGhpcy5iZWxvdz1jfWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspaT1sW3I9YVtlXV0sby5zZXRPcHRpb25zKHRoaXMubGF5ZXJJZHNbcl0sInNldExheW91dFByb3BlcnR5IixpLmxheW91dCksInZpc2libGUiPT09aS5sYXlvdXQudmlzaWJpbGl0eSYmKHRoaXMuc2V0U291cmNlRGF0YShyLGkpLG8uc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW3JdLCJzZXRQYWludFByb3BlcnR5IixpLnBhaW50KSk7dFswXS50cmFjZS5fZ2xUcmFjZT10aGlzfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdWJwbG90Lm1hcCxlPWEubGVuZ3RoLTE7ZT49MDtlLS0pe3ZhciByPWFbZV07dC5yZW1vdmVMYXllcih0aGlzLmxheWVySWRzW3JdKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkc1tyXSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVswXS50cmFjZSxpPW5ldyBvKHQsci51aWQpLHM9bih0LmdkLGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10sZj1zW3VdO2kuYWRkU291cmNlKHUsZiksaS5hZGRMYXllcih1LGYsbCl9cmV0dXJuIGVbMF0udHJhY2UuX2dsVHJhY2U9aSxpfX0seyIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIjo2MTEsIi4vY29udmVydCI6OTkyfV0sOTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuY2Qscz10LnhheGlzLGw9dC55YXhpcyxjPVtdLHU9b1swXS50cmFjZTtpZighaS5oYXNNYXJrZXJzKHUpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8by5sZW5ndGg7cisrKW9bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBmPW9bcl0saD1mLmxvbmxhdDtpZihoWzBdIT09YSl7dmFyIHA9W24ubW9kSGFsZihoWzBdLDM2MCksaFsxXV0sZD1bcy5jMnAocCksbC5jMnAocCldO2UuY29udGFpbnMoZCxudWxsLHIsdCk/KGMucHVzaCh7cG9pbnROdW1iZXI6cixsb246aFswXSxsYXQ6aFsxXX0pLGYuc2VsZWN0ZWQ9MSk6Zi5zZWxlY3RlZD0wfX1yZXR1cm4gY319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi8uLi9saWIiOjUwMywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxfV0sMWUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9by5saW5lO2UuZXhwb3J0cz17bW9kZTpvLm1vZGUscjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0aGV0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxyMDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkcjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx0aGV0YTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHRoZXRhOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0sdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyIsImdyYWRpYW5zIl0sZGZsdDoiZGVncmVlcyIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0ZXh0Om8udGV4dCx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbInIiLCJ0aGV0YSIsInRleHQiXX0pLGhvdmVydGV4dDpvLmhvdmVydGV4dCxsaW5lOntjb2xvcjpsLmNvbG9yLHdpZHRoOmwud2lkdGgsZGFzaDpsLmRhc2gsc2hhcGU6YSh7fSxsLnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzpsLnNtb290aGluZyxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm8uY29ubmVjdGdhcHMsbWFya2VyOm8ubWFya2VyLGNsaXBvbmF4aXM6YSh7fSxvLmNsaXBvbmF4aXMse2RmbHQ6ITF9KSx0ZXh0cG9zaXRpb246by50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6by50ZXh0Zm9udCxmaWxsOmEoe30sby5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6by5maWxsY29sb3IsaG92ZXJpbmZvOmEoe30scy5ob3ZlcmluZm8se2ZsYWdzOlsiciIsInRoZXRhIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246by5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpLHNlbGVjdGVkOm8uc2VsZWN0ZWQsdW5zZWxlY3RlZDpvLnVuc2VsZWN0ZWR9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2fV0sMTAwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxjPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGY9clt1XS5yYWRpYWxheGlzLGg9clt1XS5hbmd1bGFyYXhpcyxwPWYubWFrZUNhbGNkYXRhKGUsInIiKSxkPWgubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksbT1lLl9sZW5ndGgsZz1uZXcgQXJyYXkobSksdj0wO3Y8bTt2Kyspe3ZhciB5PXBbdl0seD1kW3ZdLGI9Z1t2XT17fTtuKHkpJiZuKHgpPyhiLnI9eSxiLnRoZXRhPXgpOmIucj1pfXZhciBfPWMoZSxtKTtyZXR1cm4gZS5fZXh0cmVtZXMueD1hLmZpbmRFeHRyZW1lcyhmLHAse3BwYWQ6X30pLG8odCxlKSxzKGcsZSksbChnLGUpLGd9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjkyNSwiLi4vc2NhdHRlci9jYWxjIjo5MjcsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjkyOCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjkyOSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikuUFRTX0xJTkVTT05MWSxmPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGgodCxlLHIsbil7dmFyIGksYT1uKCJyIiksbz1uKCJ0aGV0YSIpO2lmKGEpbz9pPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKTooaT1hLmxlbmd0aCxuKCJ0aGV0YTAiKSxuKCJkdGhldGEiKSk7ZWxzZXtpZighbylyZXR1cm4gMDtpPWUudGhldGEubGVuZ3RoLG4oInIwIiksbigiZHIiKX1yZXR1cm4gZS5fbGVuZ3RoPWksaX1lLmV4cG9ydHM9e2hhbmRsZVJUaGV0YURlZmF1bHRzOmgsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBtPWgodCxlLHAsZCk7aWYobSl7ZCgidGhldGF1bml0IiksZCgibW9kZSIsbTx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxkKCJ0ZXh0IiksZCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmZCgiaG92ZXJ0ZW1wbGF0ZSIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHAsZCkscyh0LGUsZCksZCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZhKHQsZSxyLHAsZCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJihkKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSxwLGQpKTt2YXIgZz1bXTsoaS5oYXNNYXJrZXJzKGUpfHxpLmhhc1RleHQoZSkpJiYoZCgiY2xpcG9uYXhpcyIpLGQoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSxnLnB1c2goInBvaW50cyIpKSxkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYoYyh0LGUscixkKSxpLmhhc0xpbmVzKGUpfHxzKHQsZSxkKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHxnLnB1c2goImZpbGxzIiksZCgiaG92ZXJvbiIsZy5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6OTMwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTM0LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzOSwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjo5NDEsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDUsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjo5NTIsIi4vYXR0cmlidXRlcyI6MWUzfV0sMTAwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHM9e30sbD1yW2Uuc3VicGxvdF0uX3N1YnBsb3Q7bD8oYT1sLnJhZGlhbEF4aXMsbz1sLmFuZ3VsYXJBeGlzKTooYT0obD1yW2Uuc3VicGxvdF0pLnJhZGlhbGF4aXMsbz1sLmFuZ3VsYXJheGlzKTt2YXIgYz1hLmMybCh0LnIpO3MuckxhYmVsPWkudGlja1RleHQoYSxjLCEwKS50ZXh0O3ZhciB1PSJkZWdyZWVzIj09PW8udGhldGF1bml0P24ucmFkMmRlZyh0LnRoZXRhKTp0LnRoZXRhO3JldHVybiBzLnRoZXRhTGFiZWw9aS50aWNrVGV4dChvLHUsITApLnRleHQsc319LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTR9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPXIucmFkaWFsQXhpcyxhPXIuYW5ndWxhckF4aXM7aS5faG92ZXJ0aXRsZT0iciIsYS5faG92ZXJ0aXRsZT0iXHUwM2I4Ijt2YXIgbz17fTtvW2Uuc3VicGxvdF09e19zdWJwbG90OnJ9O3ZhciBzPWUuX21vZHVsZS5mb3JtYXRMYWJlbHModCxlLG8pO24uckxhYmVsPXMuckxhYmVsLG4udGhldGFMYWJlbD1zLnRoZXRhTGFiZWw7dmFyIGw9dC5oaXx8ZS5ob3ZlcmluZm8sYz1bXTtmdW5jdGlvbiB1KHQsZSl7Yy5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitlKX1pZighZS5ob3ZlcnRlbXBsYXRlKXt2YXIgZj1sLnNwbGl0KCIrIik7LTEhPT1mLmluZGV4T2YoImFsbCIpJiYoZj1bInIiLCJ0aGV0YSIsInRleHQiXSksLTEhPT1mLmluZGV4T2YoInIiKSYmdShpLG4uckxhYmVsKSwtMSE9PWYuaW5kZXhPZigidGhldGEiKSYmdShhLG4udGhldGFMYWJlbCksLTEhPT1mLmluZGV4T2YoInRleHQiKSYmbi50ZXh0JiYoYy5wdXNoKG4udGV4dCksZGVsZXRlIG4udGV4dCksbi5leHRyYVRleHQ9Yy5qb2luKCI8YnI+Iil9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleClyZXR1cm4gbzt2YXIgbD10LnN1YnBsb3QsYz1zLmNkW3MuaW5kZXhdLHU9cy50cmFjZTtpZihsLmlzUHRJbnNpZGUoYykpcmV0dXJuIHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDAsaShjLHUsbCxzKSxzLmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLG99fSxtYWtlSG92ZXJQb2ludFRleHQ6aX19LHsiLi4vc2NhdHRlci9ob3ZlciI6OTM3fV0sMTAwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo2MjIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4uL3NjYXR0ZXIvc2VsZWN0Ijo5NDgsIi4uL3NjYXR0ZXIvc3R5bGUiOjk1MCwiLi9hdHRyaWJ1dGVzIjoxZTMsIi4vY2FsYyI6MTAwMSwiLi9kZWZhdWx0cyI6MTAwMiwiLi9mb3JtYXRfbGFiZWxzIjoxMDAzLCIuL2hvdmVyIjoxMDA0LCIuL3Bsb3QiOjEwMDZ9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpLG89e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmUuZnJhbWV3b3JrLGxheWVyQ2xpcElkOmUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZHMuZm9yVHJhY2VzOm51bGx9LHM9ZS5yYWRpYWxBeGlzLGw9ZS5hbmd1bGFyQXhpcyxjPTA7YzxyLmxlbmd0aDtjKyspZm9yKHZhciB1PXJbY10sZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgaD11W2ZdLHA9aC5yO2lmKHA9PT1pKWgueD1oLnk9aTtlbHNle3ZhciBkPXMuYzJnKHApLG09bC5jMmcoaC50aGV0YSk7aC54PWQqTWF0aC5jb3MobSksaC55PWQqTWF0aC5zaW4obSl9fW4odCxvLHIsYSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vc2NhdHRlci9wbG90Ijo5NDd9XSwxMDA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsdGV4dHRlbXBsYXRlOmEoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJyIiwidGhldGEiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsbGluZTppLmxpbmUsY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6aS5tYXJrZXIsZmlsbDppLmZpbGwsZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LGhvdmVyaW5mbzpuLmhvdmVyaW5mbyxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkfX0seyIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIjo5NzgsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxZTN9XSwxMDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksaT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxhPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyIpLlRPT19NQU5ZX1BPSU5UUztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGw9ZS5zdWJwbG90LGM9cltsXS5yYWRpYWxheGlzLHU9cltsXS5hbmd1bGFyYXhpcyxmPWUuX3I9Yy5tYWtlQ2FsY2RhdGEoZSwiciIpLGg9ZS5fdGhldGE9dS5tYWtlQ2FsY2RhdGEoZSwidGhldGEiKSxwPWUuX2xlbmd0aCxkPXt9O3A8Zi5sZW5ndGgmJihmPWYuc2xpY2UoMCxwKSkscDxoLmxlbmd0aCYmKGg9aC5zbGljZSgwLHApKSxkLnI9ZixkLnRoZXRhPWgsbih0LGUpO3ZhciBtLGc9ZC5vcHRzPWEuc3R5bGUodCxlKTtyZXR1cm4gcDxzP209aShlLHApOmcubWFya2VyJiYobT0yKihnLm1hcmtlci5zaXplQXZnfHxNYXRoLm1heChnLm1hcmtlci5zaXplLDMpKSksZS5fZXh0cmVtZXMueD1vLmZpbmRFeHRyZW1lcyhjLGYse3BwYWQ6bX0pLFt7eDohMSx5OiExLHQ6ZCx0cmFjZTplfV19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uL3NjYXR0ZXIvY2FsYyI6OTI3LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6OTI5LCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjo5ODAsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0Ijo5ODF9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBkPWEodCxlLGgscCk7ZD8ocCgidGhldGF1bml0IikscCgibW9kZSIsZDx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxwKCJ0ZXh0IikscCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLGkuaGFzTGluZXMoZSkmJihzKHQsZSxyLGgscCkscCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGgscCksaS5oYXNUZXh0KGUpJiYocCgidGV4dHRlbXBsYXRlIiksbCh0LGUsaCxwKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmYyh0LGUscixwKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjUwMywiLi4vc2NhdHRlci9jb25zdGFudHMiOjkzMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjkzNCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjo5MzksIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDUsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjo5NTIsIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyI6MTAwMiwiLi9hdHRyaWJ1dGVzIjoxMDA3fV0sMTAxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5pO3JldHVybiJyImluIHR8fCh0LnI9ZS5fcltpXSksInRoZXRhImluIHR8fCh0LnRoZXRhPWUuX3RoZXRhW2ldKSxuKHQsZSxyKX19LHsiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiOjEwMDN9XSwxMDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9ob3ZlciIpLGk9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0O2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89dC5jZFswXS50LHM9by5yLGw9by50aGV0YSxjPW4uaG92ZXJQb2ludHModCxlLHIsYSk7aWYoYyYmITEhPT1jWzBdLmluZGV4KXt2YXIgdT1jWzBdO2lmKHZvaWQgMD09PXUuaW5kZXgpcmV0dXJuIGM7dmFyIGY9dC5zdWJwbG90LGg9dS5jZFt1LmluZGV4XSxwPXUudHJhY2U7aWYoaC5yPXNbdS5pbmRleF0saC50aGV0YT1sW3UuaW5kZXhdLGYuaXNQdEluc2lkZShoKSlyZXR1cm4gdS54TGFiZWxWYWw9dm9pZCAwLHUueUxhYmVsVmFsPXZvaWQgMCxpKGgscCxmLHUpLGN9fX19LHsiLi4vc2NhdHRlcmdsL2hvdmVyIjo5ODYsIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTAwNH1dLDEwMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyZ2wvc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvcG9sYXIiOjYyMiwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0NCwiLi4vc2NhdHRlcmdsL3NlbGVjdCI6OTkwLCIuL2F0dHJpYnV0ZXMiOjEwMDcsIi4vY2FsYyI6MTAwOCwiLi9kZWZhdWx0cyI6MTAwOSwiLi9mb3JtYXRfbGFiZWxzIjoxMDEwLCIuL2hvdmVyIjoxMDExLCIuL3Bsb3QiOjEwMTN9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL3NjYXR0ZXJnbC9wbG90Iiksbz10KCIuLi9zY2F0dGVyZ2wvc2NlbmVfdXBkYXRlIikscz10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciB1PWUucmFkaWFsQXhpcyxmPWUuYW5ndWxhckF4aXMsaD1vKHQsZSk7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYociYmclswXSYmclswXS50cmFjZSl7dmFyIGEsbz1yWzBdLHA9by50cmFjZSxkPW8udCxtPXAuX2xlbmd0aCxnPWQucix2PWQudGhldGEseT1kLm9wdHMseD1nLnNsaWNlKCksYj12LnNsaWNlKCk7Zm9yKGE9MDthPGcubGVuZ3RoO2ErKyllLmlzUHRJbnNpZGUoe3I6Z1thXSx0aGV0YTp2W2FdfSl8fCh4W2FdPU5hTixiW2FdPU5hTik7dmFyIF89bmV3IEFycmF5KDIqbSksdz1BcnJheShtKSxUPUFycmF5KG0pO2ZvcihhPTA7YTxtO2ErKyl7dmFyIGssQSxNPXhbYV07aWYoaShNKSl7dmFyIFM9dS5jMmcoTSksRT1mLmMyZyhiW2FdLHAudGhldGF1bml0KTtrPVMqTWF0aC5jb3MoRSksQT1TKk1hdGguc2luKEUpfWVsc2Ugaz1BPU5hTjt3W2FdPV9bMiphXT1rLFRbYV09X1syKmErMV09QX1kLnRyZWU9bihfKSx5Lm1hcmtlciYmbT49YyYmKHkubWFya2VyLmNsdXN0ZXI9ZC50cmVlKSx5Lm1hcmtlciYmKHkubWFya2VyU2VsLnBvc2l0aW9ucz15Lm1hcmtlclVuc2VsLnBvc2l0aW9ucz15Lm1hcmtlci5wb3NpdGlvbnM9XykseS5saW5lJiZfLmxlbmd0aD4xJiZsLmV4dGVuZEZsYXQoeS5saW5lLHMubGluZVBvc2l0aW9ucyh0LHAsXykpLHkudGV4dCYmKGwuZXh0ZW5kRmxhdCh5LnRleHQse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyKSksbC5leHRlbmRGbGF0KHkudGV4dFNlbCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJTZWwpKSxsLmV4dGVuZEZsYXQoeS50ZXh0VW5zZWwse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyVW5zZWwpKSkseS5maWxsJiYhaC5maWxsMmQmJihoLmZpbGwyZD0hMCkseS5tYXJrZXImJiFoLnNjYXR0ZXIyZCYmKGguc2NhdHRlcjJkPSEwKSx5LmxpbmUmJiFoLmxpbmUyZCYmKGgubGluZTJkPSEwKSx5LnRleHQmJiFoLmdsVGV4dCYmKGguZ2xUZXh0PSEwKSxoLmxpbmVPcHRpb25zLnB1c2goeS5saW5lKSxoLmZpbGxPcHRpb25zLnB1c2goeS5maWxsKSxoLm1hcmtlck9wdGlvbnMucHVzaCh5Lm1hcmtlciksaC5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh5Lm1hcmtlclNlbCksaC5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyVW5zZWwpLGgudGV4dE9wdGlvbnMucHVzaCh5LnRleHQpLGgudGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFNlbCksaC50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaCh5LnRleHRVbnNlbCksaC5zZWxlY3RCYXRjaC5wdXNoKFtdKSxoLnVuc2VsZWN0QmF0Y2gucHVzaChbXSksZC54PXcsZC55PVQsZC5yYXd4PXcsZC5yYXd5PVQsZC5yPWcsZC50aGV0YT12LGQucG9zaXRpb25zPV8sZC5fc2NlbmU9aCxkLmluZGV4PWguY291bnQsaC5jb3VudCsrfX0pKSxhKHQsZSxyKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjo5ODAsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0Ijo5ODEsIi4uL3NjYXR0ZXJnbC9wbG90Ijo5ODgsIi4uL3NjYXR0ZXJnbC9zY2VuZV91cGRhdGUiOjk4OSwiQHBsb3RseS9wb2ludC1jbHVzdGVyIjo1OSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDEwMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD1vLmxpbmU7ZS5leHBvcnRzPXttb2RlOm8ubW9kZSxyZWFsOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGltYWc6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGV4dDpvLnRleHQsdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJyZWFsIiwiaW1hZyIsInRleHQiXX0pLGhvdmVydGV4dDpvLmhvdmVydGV4dCxsaW5lOntjb2xvcjpsLmNvbG9yLHdpZHRoOmwud2lkdGgsZGFzaDpsLmRhc2gsc2hhcGU6YSh7fSxsLnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzpsLnNtb290aGluZyxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm8uY29ubmVjdGdhcHMsbWFya2VyOm8ubWFya2VyLGNsaXBvbmF4aXM6YSh7fSxvLmNsaXBvbmF4aXMse2RmbHQ6ITF9KSx0ZXh0cG9zaXRpb246by50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6by50ZXh0Zm9udCxmaWxsOmEoe30sby5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6by5maWxsY29sb3IsaG92ZXJpbmZvOmEoe30scy5ob3ZlcmluZm8se2ZsYWdzOlsicmVhbCIsImltYWciLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpvLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjYzMywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjo5MjZ9XSwxMDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxjPWUuc3VicGxvdCx1PXJbY10ucmVhbGF4aXMsZj1yW2NdLmltYWdpbmFyeWF4aXMsaD11Lm1ha2VDYWxjZGF0YShlLCJyZWFsIikscD1mLm1ha2VDYWxjZGF0YShlLCJpbWFnIiksZD1lLl9sZW5ndGgsbT1uZXcgQXJyYXkoZCksZz0wO2c8ZDtnKyspe3ZhciB2PWhbZ10seT1wW2ddLHg9bVtnXT17fTtuKHYpJiZuKHkpPyh4LnJlYWw9dix4LmltYWc9eSk6eC5yZWFsPWl9cmV0dXJuIGwoZSxkKSxhKHQsZSksbyhtLGUpLHMobSxlKSxtfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo5MjUsIi4uL3NjYXR0ZXIvY2FsYyI6OTI3LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjo5MjgsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjo5MjksImZhc3QtaXNudW1lcmljIjoxOTB9XSwxMDE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bigicmVhbCIpLG89bigiaW1hZyIpO2EmJm8mJihpPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKSk7cmV0dXJuIGUuX2xlbmd0aD1pLGl9KDAsZSwwLHApO2lmKGQpe3AoIm1vZGUiLGQ8dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIikscCgidGV4dCIpLHAoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnAoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixoLHApLHModCxlLHApLHAoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixoLHAse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiYocCgidGV4dHRlbXBsYXRlIiksbCh0LGUsaCxwKSk7dmFyIG09W107KGkuaGFzTWFya2VycyhlKXx8aS5oYXNUZXh0KGUpKSYmKHAoImNsaXBvbmF4aXMiKSxwKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksbS5wdXNoKCJwb2ludHMiKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIscCksaS5oYXNMaW5lcyhlKXx8cyh0LGUscCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8bS5wdXNoKCJmaWxscyIpLHAoImhvdmVyb24iLG0uam9pbigiKyIpfHwicG9pbnRzIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6OTMwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6OTM0LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjkzOSwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjo5NDEsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDUsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjo5NTIsIi4vYXR0cmlidXRlcyI6MTAxNH1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLnN1YnBsb3RdLl9zdWJwbG90O3JldHVybiBpLnJlYWxMYWJlbD1uLnRpY2tUZXh0KGEucmFkaWFsQXhpcyx0LnJlYWwsITApLnRleHQsaS5pbWFnTGFiZWw9bi50aWNrVGV4dChhLmFuZ3VsYXJBeGlzLHQuaW1hZywhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NTU0fV0sMTAxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIik7ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT1yLnJhZGlhbEF4aXMsYT1yLmFuZ3VsYXJBeGlzO2kuX2hvdmVydGl0bGU9InJlYWwiLGEuX2hvdmVydGl0bGU9ImltYWciO3ZhciBvPXt9O29bZS5zdWJwbG90XT17X3N1YnBsb3Q6cn07dmFyIHM9ZS5fbW9kdWxlLmZvcm1hdExhYmVscyh0LGUsbyk7bi5yZWFsTGFiZWw9cy5yZWFsTGFiZWwsbi5pbWFnTGFiZWw9cy5pbWFnTGFiZWw7dmFyIGw9dC5oaXx8ZS5ob3ZlcmluZm8sYz1bXTtmdW5jdGlvbiB1KHQsZSl7Yy5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitlKX1pZighZS5ob3ZlcnRlbXBsYXRlKXt2YXIgZj1sLnNwbGl0KCIrIik7LTEhPT1mLmluZGV4T2YoImFsbCIpJiYoZj1bInJlYWwiLCJpbWFnIiwidGV4dCJdKSwtMSE9PWYuaW5kZXhPZigicmVhbCIpJiZ1KGksbi5yZWFsTGFiZWwpLC0xIT09Zi5pbmRleE9mKCJpbWFnIikmJnUoYSxuLmltYWdMYWJlbCksLTEhPT1mLmluZGV4T2YoInRleHQiKSYmbi50ZXh0JiYoYy5wdXNoKG4udGV4dCksZGVsZXRlIG4udGV4dCksbi5leHRyYVRleHQ9Yy5qb2luKCI8YnI+Iil9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleClyZXR1cm4gbzt2YXIgbD10LnN1YnBsb3QsYz1zLmNkW3MuaW5kZXhdLHU9cy50cmFjZTtpZihsLmlzUHRJbnNpZGUoYykpcmV0dXJuIHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDAsaShjLHUsbCxzKSxzLmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLG99fSxtYWtlSG92ZXJQb2ludFRleHQ6aX19LHsiLi4vc2NhdHRlci9ob3ZlciI6OTM3fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyc21pdGgiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3NtaXRoIiksY2F0ZWdvcmllczpbInNtaXRoIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3NtaXRoIjo2MjksIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4uL3NjYXR0ZXIvc2VsZWN0Ijo5NDgsIi4uL3NjYXR0ZXIvc3R5bGUiOjk1MCwiLi9hdHRyaWJ1dGVzIjoxMDE0LCIuL2NhbGMiOjEwMTUsIi4vZGVmYXVsdHMiOjEwMTYsIi4vZm9ybWF0X2xhYmVscyI6MTAxNywiLi9ob3ZlciI6MTAxOCwiLi9wbG90IjoxMDIwfV0sMTAyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9zbWl0aC9oZWxwZXJzIikuc21pdGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiZy5zY2F0dGVybGF5ZXIiKSxzPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDplLmZyYW1ld29yayxsYXllckNsaXBJZDplLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsfSxsPTA7bDxyLmxlbmd0aDtsKyspZm9yKHZhciBjPXJbbF0sdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdLGg9Zi5yZWFsO2lmKGg9PT1pKWYueD1mLnk9aTtlbHNle3ZhciBwPWEoW2gsZi5pbWFnXSk7Zi54PXBbMF0sZi55PXBbMV19fW4odCxzLHIsbyl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vcGxvdHMvc21pdGgvaGVscGVycyI6NjI4LCIuLi9zY2F0dGVyL3Bsb3QiOjk0N31dLDEwMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9YS5tYXJrZXIsZj1hLmxpbmUsaD11LmxpbmU7ZS5leHBvcnRzPXthOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sbW9kZTpjKHt9LGEubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OmMoe30sYS50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImEiLCJiIiwiYyIsInRleHQiXX0pLGhvdmVydGV4dDpjKHt9LGEuaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpmLmNvbG9yLHdpZHRoOmYud2lkdGgsZGFzaDpsLHNoYXBlOmMoe30sZi5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6Zi5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6YS5jbGlwb25heGlzLGZpbGw6Yyh7fSxhLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjphLmZpbGxjb2xvcixtYXJrZXI6Yyh7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LG1heGRpc3BsYXllZDp1Lm1heGRpc3BsYXllZCxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGxpbmU6Yyh7d2lkdGg6aC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OnUuZ3JhZGllbnQsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIiKSksdGV4dGZvbnQ6YS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246YS50ZXh0cG9zaXRpb24sc2VsZWN0ZWQ6YS5zZWxlY3RlZCx1bnNlbGVjdGVkOmEudW5zZWxlY3RlZCxob3ZlcmluZm86Yyh7fSxvLmhvdmVyaW5mbyx7ZmxhZ3M6WyJhIiwiYiIsImMiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjphLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjozODcsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2fV0sMTAyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxhPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxsPVsiYSIsImIiLCJjIl0sYz17YTpbImIiLCJjIl0sYjpbImEiLCJjIl0sYzpbImEiLCJiIl19O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZCxtPXQuX2Z1bGxMYXlvdXRbZS5zdWJwbG90XS5zdW0sZz1lLnN1bXx8bSx2PXthOmUuYSxiOmUuYixjOmUuY307Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylpZighdltmPWxbcl1dKXtmb3IocD12W2NbZl1bMF1dLGQ9dltjW2ZdWzFdXSxoPW5ldyBBcnJheShwLmxlbmd0aCksdT0wO3U8cC5sZW5ndGg7dSsrKWhbdV09Zy1wW3VdLWRbdV07dltmXT1ofXZhciB5LHgsYixfLHcsVCxrPWUuX2xlbmd0aCxBPW5ldyBBcnJheShrKTtmb3Iocj0wO3I8aztyKyspeT12LmFbcl0seD12LmJbcl0sYj12LmNbcl0sbih5KSYmbih4KSYmbihiKT8oMSE9PShfPW0vKCh5PSt5KSsoeD0reCkrKGI9K2IpKSkmJih5Kj1fLHgqPV8sYio9XyksVD15LHc9Yi14LEFbcl09e3g6dyx5OlQsYTp5LGI6eCxjOmJ9KTpBW3JdPXt4OiExLHk6ITF9O3JldHVybiBzKGUsayksaSh0LGUpLGEoQSxlKSxvKEEsZSksQX19LHsiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjkyNSwiLi4vc2NhdHRlci9jYWxjIjo5MjcsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjkyOCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjkyOSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDEwMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBkLG09cCgiYSIpLGc9cCgiYiIpLHY9cCgiYyIpO2lmKG0/KGQ9bS5sZW5ndGgsZz8oZD1NYXRoLm1pbihkLGcubGVuZ3RoKSx2JiYoZD1NYXRoLm1pbihkLHYubGVuZ3RoKSkpOmQ9dj9NYXRoLm1pbihkLHYubGVuZ3RoKTowKTpnJiZ2JiYoZD1NYXRoLm1pbihnLmxlbmd0aCx2Lmxlbmd0aCkpLGQpe2UuX2xlbmd0aD1kLHAoInN1bSIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIikscCgibW9kZSIsZDxpLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGgscCksbCh0LGUscCkscCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGgscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxjKHQsZSxoLHApKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgiY2xpcG9uYXhpcyIpLHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIikscCgiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjo5MzAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjo5MzQsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6OTM5LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjk0MSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjk0NSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6OTUxLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjk1MiwiLi9hdHRyaWJ1dGVzIjoxMDIxfV0sMTAyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSxuW2ldKXt2YXIgYT1uW2ldO3QuYT1hLmEsdC5iPWEuYix0LmM9YS5jfWVsc2UgdC5hPWUuYSx0LmI9ZS5iLHQuYz1lLmM7cmV0dXJuIHR9fSx7fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9e30sYT1yW2Uuc3VicGxvdF0uX3N1YnBsb3Q7cmV0dXJuIGkuYUxhYmVsPW4udGlja1RleHQoYS5hYXhpcyx0LmEsITApLnRleHQsaS5iTGFiZWw9bi50aWNrVGV4dChhLmJheGlzLHQuYiwhMCkudGV4dCxpLmNMYWJlbD1uLnRpY2tUZXh0KGEuY2F4aXMsdC5jLCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTR9XSwxMDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bih0LGUscixpKTtpZihhJiYhMSE9PWFbMF0uaW5kZXgpe3ZhciBvPWFbMF07aWYodm9pZCAwPT09by5pbmRleCl7dmFyIHM9MS1vLnkwL3QueWEuX2xlbmd0aCxsPXQueGEuX2xlbmd0aCxjPWwqcy8yLHU9bC1jO3JldHVybiBvLngwPU1hdGgubWF4KE1hdGgubWluKG8ueDAsdSksYyksby54MT1NYXRoLm1heChNYXRoLm1pbihvLngxLHUpLGMpLGF9dmFyIGY9by5jZFtvLmluZGV4XSxoPW8udHJhY2UscD1vLnN1YnBsb3Q7by5hPWYuYSxvLmI9Zi5iLG8uYz1mLmMsby54TGFiZWxWYWw9dm9pZCAwLG8ueUxhYmVsVmFsPXZvaWQgMDt2YXIgZD17fTtkW2guc3VicGxvdF09e19zdWJwbG90OnB9O3ZhciBtPWguX21vZHVsZS5mb3JtYXRMYWJlbHMoZixoLGQpO28uYUxhYmVsPW0uYUxhYmVsLG8uYkxhYmVsPW0uYkxhYmVsLG8uY0xhYmVsPW0uY0xhYmVsO3ZhciBnPWYuaGl8fGguaG92ZXJpbmZvLHY9W107aWYoIWguaG92ZXJ0ZW1wbGF0ZSl7dmFyIHk9Zy5zcGxpdCgiKyIpOy0xIT09eS5pbmRleE9mKCJhbGwiKSYmKHk9WyJhIiwiYiIsImMiXSksLTEhPT15LmluZGV4T2YoImEiKSYmeChwLmFheGlzLG8uYUxhYmVsKSwtMSE9PXkuaW5kZXhPZigiYiIpJiZ4KHAuYmF4aXMsby5iTGFiZWwpLC0xIT09eS5pbmRleE9mKCJjIikmJngocC5jYXhpcyxvLmNMYWJlbCl9cmV0dXJuIG8uZXh0cmFUZXh0PXYuam9pbigiPGJyPiIpLG8uaG92ZXJ0ZW1wbGF0ZT1oLmhvdmVydGVtcGxhdGUsYX1mdW5jdGlvbiB4KHQsZSl7di5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitlKX19fSx7Ii4uL3NjYXR0ZXIvaG92ZXIiOjkzN31dLDEwMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnRlcm5hcnkiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3Rlcm5hcnkiKSxjYXRlZ29yaWVzOlsidGVybmFyeSIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvdGVybmFyeSI6NjM0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6OTQ0LCIuLi9zY2F0dGVyL3NlbGVjdCI6OTQ4LCIuLi9zY2F0dGVyL3N0eWxlIjo5NTAsIi4vYXR0cmlidXRlcyI6MTAyMSwiLi9jYWxjIjoxMDIyLCIuL2RlZmF1bHRzIjoxMDIzLCIuL2V2ZW50X2RhdGEiOjEwMjQsIi4vZm9ybWF0X2xhYmVscyI6MTAyNSwiLi9ob3ZlciI6MTAyNiwiLi9wbG90IjoxMDI4fV0sMTAyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUucGxvdENvbnRhaW5lcjtpLnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO3ZhciBhPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDppLGxheWVyQ2xpcElkOmUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZFJlbGF0aXZlOm51bGx9LG89ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiZy5zY2F0dGVybGF5ZXIiKTtuKHQsYSxyLG8pfX0seyIuLi9zY2F0dGVyL3Bsb3QiOjk0N31dLDEwMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj1uLm1hcmtlcixoPWYubGluZSxwPXUoaSgibWFya2VyLmxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHt3aWR0aDp1KHt9LGgud2lkdGgse2VkaXRUeXBlOiJjYWxjIn0pLGVkaXRUeXBlOiJjYWxjIn0pLGQ9dShpKCJtYXJrZXIiKSx7c3ltYm9sOmYuc3ltYm9sLHNpemU6dSh7fSxmLnNpemUse2VkaXRUeXBlOiJtYXJrZXJTaXplIn0pLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsb3BhY2l0eTpmLm9wYWNpdHksY29sb3JiYXI6Zi5jb2xvcmJhcixsaW5lOnAsZWRpdFR5cGU6ImNhbGMifSk7ZnVuY3Rpb24gbSh0KXtyZXR1cm57dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxlZGl0VHlwZToiY2FsYyIsaXRlbXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIscmVnZXg6bFt0XSxlZGl0VHlwZToicGxvdCJ9fX1kLmNvbG9yLmVkaXRUeXBlPWQuY21pbi5lZGl0VHlwZT1kLmNtYXguZWRpdFR5cGU9InN0eWxlIixlLmV4cG9ydHM9e2RpbWVuc2lvbnM6YygiZGltZW5zaW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGF4aXM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbWF0Y2hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSksdGV4dDp1KHt9LHMudGV4dCx7fSksaG92ZXJ0ZXh0OnUoe30scy5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSxtYXJrZXI6ZCx4YXhlczptKCJ4IikseWF4ZXM6bSgieSIpLGRpYWdvbmFsOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxzaG93dXBwZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6cy5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSx1bnNlbGVjdGVkOnttYXJrZXI6cy51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cy5vcGFjaXR5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjU0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NTYxLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2LCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyI6OTc4fV0sMTAzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLWxpbmUyZCIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSxvPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLmdldEZyb21JZCxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuc2hvdWxkU2hvd1plcm9MaW5lO2Z1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgbj1yLm1hdHJpeE9wdGlvbnMuZGF0YS5sZW5ndGgsaT1lLl92aXNpYmxlRGltcyxhPXIudmlld09wdHMucmFuZ2VzPW5ldyBBcnJheShuKSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sYz1hW29dPW5ldyBBcnJheSg0KSx1PWwodCxlLl9kaWFnW3NdWzBdKTt1JiYoY1swXT11LnIybCh1LnJhbmdlWzBdKSxjWzJdPXUucjJsKHUucmFuZ2VbMV0pKTt2YXIgZj1sKHQsZS5fZGlhZ1tzXVsxXSk7ZiYmKGNbMV09Zi5yMmwoZi5yYW5nZVswXSksY1szXT1mLnIybChmLnJhbmdlWzFdKSl9ci5zZWxlY3RCYXRjaC5sZW5ndGh8fHIudW5zZWxlY3RCYXRjaC5sZW5ndGg/ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0se3JhbmdlczphfSk6ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0pfWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLGk9ZS5fc3Bsb21HcmlkO2l8fChpPWUuX3NwbG9tR3JpZD1uKHIpKSxpLnVwZGF0ZShmdW5jdGlvbih0KXt2YXIgZSxyPXQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbyxuPXQuX2Z1bGxMYXlvdXQsaT1uLl9zaXplLGE9WzAsMCxuLndpZHRoKnIsbi5oZWlnaHQqcl0sbz17fTtmdW5jdGlvbiBzKHQsZSxuLGkscyxsKXtuKj1yLGkqPXIscyo9cixsKj1yO3ZhciBjPWVbdCsiY29sb3IiXSx1PWVbdCsid2lkdGgiXSxmPVN0cmluZyhjK3UpO2YgaW4gbz9vW2ZdLmRhdGEucHVzaChOYU4sTmFOLG4saSxzLGwpOm9bZl09e2RhdGE6W24saSxzLGxdLGpvaW46InJlY3QiLHRoaWNrbmVzczp1KnIsY29sb3I6Yyx2aWV3cG9ydDphLHJhbmdlOmEsb3ZlcmxheTohMX19Zm9yKGUgaW4gbi5fc3Bsb21TdWJwbG90cyl7dmFyIGwsdSxmPW4uX3Bsb3RzW2VdLGg9Zi54YXhpcyxwPWYueWF4aXMsZD1oLl9ncmlkVmFscyxtPXAuX2dyaWRWYWxzLGc9aC5fb2Zmc2V0LHY9aC5fbGVuZ3RoLHk9cC5fbGVuZ3RoLHg9aS5iK3AuZG9tYWluWzBdKmkuaCxiPS1wLl9tLF89LWIqcC5yMmwocC5yYW5nZVswXSxwLmNhbGVuZGFyKTtpZihoLnNob3dncmlkKWZvcihlPTA7ZTxkLmxlbmd0aDtlKyspbD1nK2gubDJwKGRbZV0ueCkscygiZ3JpZCIsaCxsLHgsbCx4K3kpO2lmKHAuc2hvd2dyaWQpZm9yKGU9MDtlPG0ubGVuZ3RoO2UrKyl1PXgrXytiKm1bZV0ueCxzKCJncmlkIixwLGcsdSxnK3YsdSk7Yyh0LGgscCkmJihsPWcraC5sMnAoMCkscygiemVyb2xpbmUiLGgsbCx4LGwseCt5KSksYyh0LHAsaCkmJnMoInplcm9saW5lIixwLGcsdT14K18rMCxnK3YsdSl9dmFyIHc9W107Zm9yKGUgaW4gbyl3LnB1c2gob1tlXSk7cmV0dXJuIHd9KHQpKX1lLmV4cG9ydHM9e25hbWU6InNwbG9tIixhdHRyOnMuYXR0cixhdHRyUmVnZXg6cy5hdHRyUmVnZXgsbGF5b3V0QXR0cmlidXRlczpzLmxheW91dEF0dHJpYnV0ZXMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6cy5zdXBwbHlMYXlvdXREZWZhdWx0cyxkcmF3RnJhbWV3b3JrOnMuZHJhd0ZyYW1ld29yayxwbG90OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1pLmdldE1vZHVsZSgic3Bsb20iKSxuPW8odC5jYWxjZGF0YSxyKVswXTthKHQsWyJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiwiT0VTX2VsZW1lbnRfaW5kZXhfdWludCJdKSYmKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZih0KSxyLnBsb3QodCx7fSxuKSl9LGRyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5jYWxjZGF0YSxyPXQuX2Z1bGxMYXlvdXQ7ci5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dWzBdLnRyYWNlLGE9ci5fc3Bsb21TY2VuZXNbaS51aWRdOyJzcGxvbSI9PT1pLnR5cGUmJmEmJmEubWF0cml4JiZ1KHQsaSxhKX19LHVwZGF0ZUdyaWQ6ZixjbGVhbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXt9O2lmKG4uX3NwbG9tU2NlbmVzKXtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldOyJzcGxvbSI9PT1vLnR5cGUmJihhW28udWlkXT0xKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKCFhW2wudWlkXSl7dmFyIGM9bi5fc3Bsb21TY2VuZXNbbC51aWRdO2MmJmMuZGVzdHJveSYmYy5kZXN0cm95KCksbi5fc3Bsb21TY2VuZXNbbC51aWRdPW51bGwsZGVsZXRlIG4uX3NwbG9tU2NlbmVzW2wudWlkXX19fTA9PT1PYmplY3Qua2V5cyhuLl9zcGxvbVNjZW5lc3x8e30pLmxlbmd0aCYmZGVsZXRlIG4uX3NwbG9tU2NlbmVzLG4uX3NwbG9tR3JpZCYmIWUuX2hhc09ubHlMYXJnZVNwbG9tcyYmbi5faGFzT25seUxhcmdlU3Bsb21zJiYobi5fc3Bsb21HcmlkLmRlc3Ryb3koKSxuLl9zcGxvbUdyaWQ9bnVsbCxkZWxldGUgbi5fc3Bsb21HcmlkKSxzLmNsZWFuKHQsZSxyLG4pfSx1cGRhdGVGeDpzLnVwZGF0ZUZ4LHRvU1ZHOnMudG9TVkd9fSx7Ii4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjUxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo1NjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTU4LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NTkzLCIuLi8uLi9yZWdpc3RyeSI6NjM4LCJyZWdsLWxpbmUyZCI6MjgwfV0sMTAzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGE9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjQXhpc0V4cGFuc2lvbixzPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbD10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLm1hcmtlclNlbGVjdGlvbixjPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU3R5bGUsdT10KCIuL3NjZW5lX3VwZGF0ZSIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxoPXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscCxkLG0sZyx2LHk9ZS5kaW1lbnNpb25zLHg9ZS5fbGVuZ3RoLGI9e30sXz1iLmNkYXRhPVtdLHc9Yi5kYXRhPVtdLFQ9ZS5fdmlzaWJsZURpbXM9W107ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgaT10Lm1ha2VDYWxjZGF0YSh7djpyLnZhbHVlcyx2Y2FsZW5kYXI6ZS5jYWxlbmRhcn0sInYiKSxhPTA7YTxpLmxlbmd0aDthKyspaVthXT1pW2FdPT09Zj9OYU46aVthXTtfLnB1c2goaSksdy5wdXNoKCJsb2ciPT09dC50eXBlP24uc2ltcGxlTWFwKGksdC5jMmwpOmkpfWZvcihyPTA7cjx5Lmxlbmd0aDtyKyspaWYoKGQ9eVtyXSkudmlzaWJsZSl7aWYobT1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pLGc9aS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKSxtJiZnJiZtLnR5cGUhPT1nLnR5cGUpe24ubG9nKCJTa2lwcGluZyBzcGxvbSBkaW1lbnNpb24gIityKyIgd2l0aCBjb25mbGljdGluZyBheGlzIHR5cGVzIik7Y29udGludWV9bT8oayhtLGQpLGcmJiJjYXRlZ29yeSI9PT1nLnR5cGUmJihnLl9jYXRlZ29yaWVzPW0uX2NhdGVnb3JpZXMuc2xpY2UoKSkpOmsoZyxkKSxULnB1c2gocil9Zm9yKHModCxlKSxuLmV4dGVuZEZsYXQoYixjKGUpKSx2PV8ubGVuZ3RoKng+aD9iLnNpemVBdmd8fE1hdGgubWF4KGIuc2l6ZSwzKTphKGUseCkscD0wO3A8VC5sZW5ndGg7cCsrKWQ9eVtyPVRbcF1dLG09aS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKXx8e30sZz1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMV0pfHx7fSxvKHQsZSxtLGcsX1twXSxfW3BdLHYpO3ZhciBBPXUodCxlKTtyZXR1cm4gQS5tYXRyaXh8fChBLm1hdHJpeD0hMCksQS5tYXRyaXhPcHRpb25zPWIsQS5zZWxlY3RlZE9wdGlvbnM9bChlLGUuc2VsZWN0ZWQpLEEudW5zZWxlY3RlZE9wdGlvbnM9bChlLGUudW5zZWxlY3RlZCksW3t4OiExLHk6ITEsdDp7fSx0cmFjZTplfV19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NTU4LCIuLi9zY2F0dGVyL2NhbGMiOjkyNywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjkyOSwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6OTgwLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6OTgxLCIuL3NjZW5lX3VwZGF0ZSI6MTAzOH1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxsPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKSxjPXQoIi4uL3NjYXR0ZXJnbC9oZWxwZXJzIikuaXNPcGVuU3ltYm9sO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKCJsYWJlbCIpO3ZhciBpPXIoInZhbHVlcyIpO2kmJmkubGVuZ3RoP3IoInZpc2libGUiKTplLnZpc2libGU9ITEscigiYXhpcy50eXBlIikscigiYXhpcy5tYXRjaGVzIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWgoImRpYWdvbmFsLnZpc2libGUiKSxtPWgoInNob3d1cHBlcmhhbGYiKSxnPWgoInNob3dsb3dlcmhhbGYiKTtpZihsKGUscCwidmFsdWVzIikmJihkfHxtfHxnKSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJ4aG92ZXJmb3JtYXQiKSxoKCJ5aG92ZXJmb3JtYXQiKSxzKHQsZSxyLGYsaCk7dmFyIHY9YyhlLm1hcmtlci5zeW1ib2wpLHk9by5pc0J1YmJsZShlKTtoKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1lLmRpbWVuc2lvbnMscz1vLmxlbmd0aCxsPWUuc2hvd3VwcGVyaGFsZixjPWUuc2hvd2xvd2VyaGFsZix1PWUuZGlhZ29uYWwudmlzaWJsZSxmPW5ldyBBcnJheShzKSxoPW5ldyBBcnJheShzKTtmb3IoaT0wO2k8cztpKyspe3ZhciBwPWk/aSsxOiIiO2ZbaV09IngiK3AsaFtpXT0ieSIrcH12YXIgZD1uKCJ4YXhlcyIsZiksbT1uKCJ5YXhlcyIsaCksZz1lLl9kaWFnPW5ldyBBcnJheShzKTtlLl94YXhlcz17fSxlLl95YXhlcz17fTt2YXIgdj1bXSx5PVtdO2Z1bmN0aW9uIHgodCxuLGksYSl7aWYodCl7dmFyIG89dC5jaGFyQXQoMCkscz1yLl9zcGxvbUF4ZXNbb107aWYoZVsiXyIrbysiYXhlcyJdW3RdPTEsYS5wdXNoKHQpLCEodCBpbiBzKSl7dmFyIGw9c1t0XT17fTtpJiYobC5sYWJlbD1pLmxhYmVsfHwiIixpLnZpc2libGUmJmkuYXhpcyYmKGkuYXhpcy50eXBlJiYobC50eXBlPWkuYXhpcy50eXBlKSxpLmF4aXMubWF0Y2hlcyYmKGwubWF0Y2hlcz1uKSkpfX19dmFyIGI9IXUmJiFjLF89IXUmJiFsO2ZvcihlLl9heGVzRGltPXt9LGk9MDtpPHM7aSsrKXt2YXIgdz1vW2ldLFQ9MD09PWksaz1pPT09cy0xLEE9VCYmYnx8ayYmXz92b2lkIDA6ZFtpXSxNPVQmJl98fGsmJmI/dm9pZCAwOm1baV07eChBLE0sdyx2KSx4KE0sQSx3LHkpLGdbaV09W0EsTV0sZS5fYXhlc0RpbVtBXT1pLGUuX2F4ZXNEaW1bTV09aX1mb3IoaT0wO2k8di5sZW5ndGg7aSsrKWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe3ZhciBTPXZbaV0reVthXTtpPmEmJmx8fGk8YSYmYz9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aSE9PWF8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1tTXT0xKX0oIWN8fCF1JiZsJiZjKSYmKHIuX3NwbG9tR3JpZERmbHQueHNpZGU9ImJvdHRvbSIsci5fc3Bsb21HcmlkRGZsdC55c2lkZT0ibGVmdCIpfSgwLGUsZixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NTQ5LCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjo4OTcsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjo5NDUsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjk1MSwiLi4vc2NhdHRlcmdsL2hlbHBlcnMiOjk4NSwiLi9hdHRyaWJ1dGVzIjoxMDI5fV0sMTAzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLm1hcmtlclN0eWxlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUudHJhY2Usbz10Ll9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1tyLnVpZF07aWYobyl7aSh0LHIpLG4uZXh0ZW5kRmxhdChvLm1hdHJpeE9wdGlvbnMsYShyKSk7dmFyIHM9bi5leHRlbmRGbGF0KHt9LG8ubWF0cml4T3B0aW9ucyxvLnZpZXdPcHRzKTtvLm1hdHJpeC51cGRhdGUocyxudWxsKX19fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6OTI5LCIuLi9zY2F0dGVyZ2wvY29udmVydCI6OTgxfV0sMTAzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmdldERpbUluZGV4PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2lkLG49e3g6MCx5OjF9W3IuY2hhckF0KDApXSxpPXQuX3Zpc2libGVEaW1zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZih0Ll9kaWFnW29dW25dPT09cilyZXR1cm4gYX1yZXR1cm4hMX19LHt9XSwxMDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9dCgiLi4vc2NhdHRlcmdsL2hvdmVyIikuY2FsY0hvdmVyO2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY2RbMF0udHJhY2Usbz10LnNjZW5lLm1hdHJpeE9wdGlvbnMuY2RhdGEscz10LnhhLGw9dC55YSxjPXMuYzJwKGUpLHU9bC5jMnAociksZj10LmRpc3RhbmNlLGg9bi5nZXREaW1JbmRleChhLHMpLHA9bi5nZXREaW1JbmRleChhLGwpO2lmKCExPT09aHx8ITE9PT1wKXJldHVyblt0XTtmb3IodmFyIGQsbSxnPW9baF0sdj1vW3BdLHk9Zix4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBiPWdbeF0sXz12W3hdLHc9cy5jMnAoYiktYyxUPWwuYzJwKF8pLXUsaz1NYXRoLnNxcnQodyp3K1QqVCk7azx5JiYoeT1tPWssZD14KX1yZXR1cm4gdC5pbmRleD1kLHQuZGlzdGFuY2U9eSx0LmR4eT1tLHZvaWQgMD09PWQ/W3RdOltpKHQsZyx2LGEpXX19fSx7Ii4uL3NjYXR0ZXJnbC9ob3ZlciI6OTg2LCIuL2hlbHBlcnMiOjEwMzR9XSwxMDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9jb21wb25lbnRzL2dyaWQiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzcGxvbSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwiY2FydGVzaWFuIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksZWRpdFN0eWxlOnQoIi4vZWRpdF9zdHlsZSIpLG1ldGE6e319LG4ucmVnaXN0ZXIoaSl9LHsiLi4vLi4vY29tcG9uZW50cy9ncmlkIjo0MTAsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjo5NDQsIi4vYXR0cmlidXRlcyI6MTAyOSwiLi9iYXNlX3Bsb3QiOjEwMzAsIi4vY2FsYyI6MTAzMSwiLi9kZWZhdWx0cyI6MTAzMiwiLi9lZGl0X3N0eWxlIjoxMDMzLCIuL2hvdmVyIjoxMDM1LCIuL3Bsb3QiOjEwMzcsIi4vc2VsZWN0IjoxMDM5fV0sMTAzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNwbG9tIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikuc2VsZWN0TW9kZTtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmPXQuX2Z1bGxMYXlvdXQsaD1mLl9zaXplLHA9ZS50cmFjZSxkPWUudCxtPWYuX3NwbG9tU2NlbmVzW3AudWlkXSxnPW0ubWF0cml4T3B0aW9ucyx2PWcuY2RhdGEseT1mLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCx4PWYuZHJhZ21vZGU7aWYoMCE9PXYubGVuZ3RoKXtnLmxvd2VyPXAuc2hvd3VwcGVyaGFsZixnLnVwcGVyPXAuc2hvd2xvd2VyaGFsZixnLmRpYWdvbmFsPXAuZGlhZ29uYWwudmlzaWJsZTt2YXIgYj1wLl92aXNpYmxlRGltcyxfPXYubGVuZ3RoLHc9bS52aWV3T3B0cz17fTtmb3Iody5yYW5nZXM9bmV3IEFycmF5KF8pLHcuZG9tYWlucz1uZXcgQXJyYXkoXyksdT0wO3U8Yi5sZW5ndGg7dSsrKXtsPWJbdV07dmFyIFQ9dy5yYW5nZXNbdV09bmV3IEFycmF5KDQpLGs9dy5kb21haW5zW3VdPW5ldyBBcnJheSg0KTsocj1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMF0pKSYmKFRbMF09ci5fcmxbMF0sVFsyXT1yLl9ybFsxXSxrWzBdPXIuZG9tYWluWzBdLGtbMl09ci5kb21haW5bMV0pLChzPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVsxXSkpJiYoVFsxXT1zLl9ybFswXSxUWzNdPXMuX3JsWzFdLGtbMV09cy5kb21haW5bMF0sa1szXT1zLmRvbWFpblsxXSl9dmFyIEE9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLE09aC5sKkEsUz1oLmIqQSxFPWgudypBLEw9aC5oKkE7dy52aWV3cG9ydD1bTSxTLEUrTSxMK1NdLCEwPT09bS5tYXRyaXgmJihtLm1hdHJpeD1uKHkpKTt2YXIgQz1mLmNsaWNrbW9kZS5pbmRleE9mKCJzZWxlY3QiKT4tMSxQPSEwO2lmKG8oeCl8fCEhcC5zZWxlY3RlZHBvaW50c3x8Qyl7dmFyIEk9cC5fbGVuZ3RoO2lmKHAuc2VsZWN0ZWRwb2ludHMpe20uc2VsZWN0QmF0Y2g9cC5zZWxlY3RlZHBvaW50czt2YXIgTz1wLnNlbGVjdGVkcG9pbnRzLHo9e307Zm9yKGw9MDtsPE8ubGVuZ3RoO2wrKyl6W09bbF1dPSEwO3ZhciBEPVtdO2ZvcihsPTA7bDxJO2wrKyl6W2xdfHxELnB1c2gobCk7bS51bnNlbGVjdEJhdGNoPUR9dmFyIFI9ZC54cHg9bmV3IEFycmF5KF8pLEY9ZC55cHg9bmV3IEFycmF5KF8pO2Zvcih1PTA7dTxiLmxlbmd0aDt1Kyspe2lmKGw9Ylt1XSxyPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVswXSkpZm9yKFJbdV09bmV3IEFycmF5KEkpLGM9MDtjPEk7YysrKVJbdV1bY109ci5jMnAodlt1XVtjXSk7aWYocz1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMV0pKWZvcihGW3VdPW5ldyBBcnJheShJKSxjPTA7YzxJO2MrKylGW3VdW2NdPXMuYzJwKHZbdV1bY10pfWlmKG0uc2VsZWN0QmF0Y2gubGVuZ3RofHxtLnVuc2VsZWN0QmF0Y2gubGVuZ3RoKXt2YXIgQj1pLmV4dGVuZEZsYXQoe30sZyxtLnVuc2VsZWN0ZWRPcHRpb25zLHcpLE49aS5leHRlbmRGbGF0KHt9LGcsbS5zZWxlY3RlZE9wdGlvbnMsdyk7bS5tYXRyaXgudXBkYXRlKEIsTiksUD0hMX19ZWxzZSBkLnhweD1kLnlweD1udWxsO2lmKFApe3ZhciBqPWkuZXh0ZW5kRmxhdCh7fSxnLHcpO20ubWF0cml4LnVwZGF0ZShqLG51bGwpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aClmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylzKHQscltuXVswXSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6Mzg0LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo1NTgsInJlZ2wtc3Bsb20iOjI4Mn1dLDEwMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPWUudWlkLGE9ci5fc3Bsb21TY2VuZXM7YXx8KGE9ci5fc3Bsb21TY2VuZXM9e30pO3ZhciBvPXtkaXJ0eTohMCxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSxzPWFbZS51aWRdO3JldHVybiBzfHwoKHM9YVtpXT1uLmV4dGVuZEZsYXQoe30sbyx7bWF0cml4OiExLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119KSkuZHJhdz1mdW5jdGlvbigpe3MubWF0cml4JiZzLm1hdHJpeC5kcmF3JiYocy5zZWxlY3RCYXRjaC5sZW5ndGh8fHMudW5zZWxlY3RCYXRjaC5sZW5ndGg/cy5tYXRyaXguZHJhdyhzLnVuc2VsZWN0QmF0Y2gscy5zZWxlY3RCYXRjaCk6cy5tYXRyaXguZHJhdygpKSxzLmRpcnR5PSExfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzLm1hdHJpeCYmcy5tYXRyaXguZGVzdHJveSYmcy5tYXRyaXguZGVzdHJveSgpLHMubWF0cml4T3B0aW9ucz1udWxsLHMuc2VsZWN0QmF0Y2g9bnVsbCxzLnVuc2VsZWN0QmF0Y2g9bnVsbCxzPW51bGx9KSxzLmRpcnR5fHxuLmV4dGVuZEZsYXQocyxvKSxzfX0seyIuLi8uLi9saWIiOjUwM31dLDEwMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLG89clswXS50cmFjZSxzPXJbMF0udCxsPXQuc2NlbmUsYz1sLm1hdHJpeE9wdGlvbnMuY2RhdGEsdT10LnhheGlzLGY9dC55YXhpcyxoPVtdO2lmKCFsKXJldHVybiBoO3ZhciBwPSFpLmhhc01hcmtlcnMobykmJiFpLmhhc1RleHQobyk7aWYoITAhPT1vLnZpc2libGV8fHApcmV0dXJuIGg7dmFyIGQ9YS5nZXREaW1JbmRleChvLHUpLG09YS5nZXREaW1JbmRleChvLGYpO2lmKCExPT09ZHx8ITE9PT1tKXJldHVybiBoO3ZhciBnPXMueHB4W2RdLHY9cy55cHhbbV0seT1jW2RdLHg9Y1ttXSxiPVtdLF89W107aWYoITEhPT1lJiYhZS5kZWdlbmVyYXRlKWZvcih2YXIgdz0wO3c8eS5sZW5ndGg7dysrKWUuY29udGFpbnMoW2dbd10sdlt3XV0sbnVsbCx3LHQpPyhiLnB1c2godyksaC5wdXNoKHtwb2ludE51bWJlcjp3LHg6eVt3XSx5Onhbd119KSk6Xy5wdXNoKHcpO3ZhciBUPWwubWF0cml4T3B0aW9ucztyZXR1cm4gYi5sZW5ndGh8fF8ubGVuZ3RoP2wuc2VsZWN0QmF0Y2gubGVuZ3RofHxsLnVuc2VsZWN0QmF0Y2gubGVuZ3RofHxsLm1hdHJpeC51cGRhdGUobC51bnNlbGVjdGVkT3B0aW9ucyxuLmV4dGVuZEZsYXQoe30sVCxsLnNlbGVjdGVkT3B0aW9ucyxsLnZpZXdPcHRzKSk6bC5tYXRyaXgudXBkYXRlKFQsbnVsbCksbC5zZWxlY3RCYXRjaD1iLGwudW5zZWxlY3RCYXRjaD1fLGh9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjo5NTEsIi4vaGVscGVycyI6MTAzNH1dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdGFydHM6e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZToiY2FsYyJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJ0dWJleCIsInR1YmV5IiwidHViZXoiLCJ0dWJldSIsInR1YmV2IiwidHViZXciLCJub3JtIiwiZGl2ZXJnZW5jZSJdfSksdWhvdmVyZm9ybWF0OmkoInUiLDEpLHZob3ZlcmZvcm1hdDppKCJ2IiwxKSx3aG92ZXJmb3JtYXQ6aSgidyIsMSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6Iiksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtsKGMsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2NbdF09b1t0XX0pKSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwiZGl2ZXJnZW5jZSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjU1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjMzLCIuLi9tZXNoM2QvYXR0cmlidXRlcyI6ODY3fV0sMTA0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLGksYSxzLGwsYyx1LGYsaCxwLGQsbT10Ll94LGc9dC5feSx2PXQuX3oseT10Ll9sZW4seD0tMS8wLGI9MS8wLF89LTEvMCx3PTEvMCxUPS0xLzAsaz0xLzAsQT0iIjtmb3IoeSYmKGM9bVswXSxmPWdbMF0scD12WzBdKSx5PjEmJih1PW1beS0xXSxoPWdbeS0xXSxkPXZbeS0xXSksZT0wO2U8eTtlKyspeD1NYXRoLm1heCh4LG1bZV0pLGI9TWF0aC5taW4oYixtW2VdKSxfPU1hdGgubWF4KF8sZ1tlXSksdz1NYXRoLm1pbih3LGdbZV0pLFQ9TWF0aC5tYXgoVCx2W2VdKSxrPU1hdGgubWluKGssdltlXSksYXx8bVtlXT09PWN8fChhPSEwLEErPSJ4Iiksc3x8Z1tlXT09PWZ8fChzPSEwLEErPSJ5IiksbHx8dltlXT09PXB8fChsPSEwLEErPSJ6Iik7YXx8KEErPSJ4Iiksc3x8KEErPSJ5IiksbHx8KEErPSJ6Iik7dmFyIE09byh0Ll94KSxTPW8odC5feSksRT1vKHQuX3opO0E9KEE9KEE9QS5yZXBsYWNlKCJ4IiwoYz51PyItIjoiKyIpKyJ4IikpLnJlcGxhY2UoInkiLChmPmg/Ii0iOiIrIikrInkiKSkucmVwbGFjZSgieiIsKHA+ZD8iLSI6IisiKSsieiIpO3ZhciBMPWZ1bmN0aW9uKCl7eT0wLE09W10sUz1bXSxFPVtdfTsoIXl8fHk8TS5sZW5ndGgqUy5sZW5ndGgqRS5sZW5ndGgpJiZMKCk7dmFyIEM9ZnVuY3Rpb24odCl7cmV0dXJuIngiPT09dD9tOiJ5Ij09PXQ/Zzp2fSxQPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQ/TToieSI9PT10P1M6RX0sST1mdW5jdGlvbih0KXtyZXR1cm4gdFt5LTFdPHRbMF0/LTE6MX0sTz1DKEFbMV0pLHo9QyhBWzNdKSxEPUMoQVs1XSksUj1QKEFbMV0pLmxlbmd0aCxGPVAoQVszXSkubGVuZ3RoLEI9UChBWzVdKS5sZW5ndGgsTj0hMSxqPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUiooRip0K2UpK3J9LFU9SShDKEFbMV0pKSxWPUkoQyhBWzNdKSksSD1JKEMoQVs1XSkpO2ZvcihlPTA7ZTxCLTE7ZSsrKXtmb3Iocj0wO3I8Ri0xO3IrKyl7Zm9yKGk9MDtpPFItMTtpKyspe3ZhciBxPWooZSxyLGkpLEc9aihlLHIsaSsxKSxZPWooZSxyKzEsaSksVz1qKGUrMSxyLGkpO2lmKE9bcV0qVTxPW0ddKlUmJnpbcV0qVjx6W1ldKlYmJkRbcV0qSDxEW1ddKkh8fChOPSEwKSxOKWJyZWFrfWlmKE4pYnJlYWt9aWYoTilicmVha31yZXR1cm4gTiYmKG4ud2FybigiRW5jb3VudGVyZWQgYXJiaXRyYXJ5IGNvb3JkaW5hdGVzISBVbmFibGUgdG8gaW5wdXQgZGF0YSBncmlkLiIpLEwoKSkse3hNaW46Yix5TWluOncsek1pbjprLHhNYXg6eCx5TWF4Ol8sek1heDpULFhzOk0sWXM6UyxaczpFLGxlbjp5LGZpbGw6QX19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbi5kaXN0aW5jdFZhbHModCkudmFsc31mdW5jdGlvbiBzKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9dC5sZW5ndGgpLG4uaXNUeXBlZEFycmF5KHQpKXJldHVybiB0LnN1YmFycmF5KDAsZSk7Zm9yKHZhciByPVtdLGk9MDtpPGU7aSsrKXJbaV09K3RbaV07cmV0dXJuIHJ9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUudS5sZW5ndGgsZS52Lmxlbmd0aCxlLncubGVuZ3RoLGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoKSxlLl91PXMoZS51LGUuX2xlbiksZS5fdj1zKGUudixlLl9sZW4pLGUuX3c9cyhlLncsZS5fbGVuKSxlLl94PXMoZS54LGUuX2xlbiksZS5feT1zKGUueSxlLl9sZW4pLGUuX3o9cyhlLnosZS5fbGVuKTt2YXIgcj1hKGUpO2UuX2dyaWRGaWxsPXIuZmlsbCxlLl9Ycz1yLlhzLGUuX1lzPXIuWXMsZS5fWnM9ci5acyxlLl9sZW49ci5sZW47dmFyIG4sbyxsLGM9MDtlLnN0YXJ0cyYmKG49cyhlLnN0YXJ0cy54fHxbXSksbz1zKGUuc3RhcnRzLnl8fFtdKSxsPXMoZS5zdGFydHMuenx8W10pLGM9TWF0aC5taW4obi5sZW5ndGgsby5sZW5ndGgsbC5sZW5ndGgpKSxlLl9zdGFydHNYPW58fFtdLGUuX3N0YXJ0c1k9b3x8W10sZS5fc3RhcnRzWj1sfHxbXTt2YXIgdSxmPTAsaD0xLzA7Zm9yKHU9MDt1PGUuX2xlbjt1Kyspe3ZhciBwPWUuX3VbdV0sZD1lLl92W3VdLG09ZS5fd1t1XSxnPU1hdGguc3FydChwKnArZCpkK20qbSk7Zj1NYXRoLm1heChmLGcpLGg9TWF0aC5taW4oaCxnKX1mb3IoaSh0LGUse3ZhbHM6W2gsZl0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSksdT0wO3U8Yzt1Kyspe3ZhciB2PW5bdV07ci54TWF4PU1hdGgubWF4KHIueE1heCx2KSxyLnhNaW49TWF0aC5taW4oci54TWluLHYpO3ZhciB5PW9bdV07ci55TWF4PU1hdGgubWF4KHIueU1heCx5KSxyLnlNaW49TWF0aC5taW4oci55TWluLHkpO3ZhciB4PWxbdV07ci56TWF4PU1hdGgubWF4KHIuek1heCx4KSxyLnpNaW49TWF0aC5taW4oci56TWluLHgpfWUuX3NsZW49YyxlLl9ub3JtTWF4PWYsZS5feGJuZHM9W3IueE1pbixyLnhNYXhdLGUuX3libmRzPVtyLnlNaW4sci55TWF4XSxlLl96Ym5kcz1bci56TWluLHIuek1heF19LGZpbHRlcjpzLHByb2Nlc3NHcmlkOmF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjozNzQsIi4uLy4uL2xpYiI6NTAzfV0sMTA0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9zdHJlYW10dWJlM2QsaT1uLmNyZWF0ZVR1YmVNZXNoLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsbD10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxjPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gdSh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBmPXUucHJvdG90eXBlO2Z1bmN0aW9uIGgodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU+Mj90LnNsaWNlKDEsZS0xKToyPT09ZT9bKHRbMF0rdFsxXSkvMl06dH1mdW5jdGlvbiBwKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiAxPT09ZT9bLjUsLjVdOlt0WzFdLXRbMF0sdFtlLTFdLXRbZS0yXV19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsdT1lLl9sZW4sZj17fTtmdW5jdGlvbiBkKHQsZSl7dmFyIG49cltlXSxvPWlbY1tlXV07cmV0dXJuIGEuc2ltcGxlTWFwKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSkpfWlmKGYudmVjdG9ycz1sKGQoZS5fdSwieGF4aXMiKSxkKGUuX3YsInlheGlzIiksZChlLl93LCJ6YXhpcyIpLHUpLCF1KXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciBtPWQoZS5fWHMsInhheGlzIiksZz1kKGUuX1lzLCJ5YXhpcyIpLHY9ZChlLl9acywiemF4aXMiKTtpZihmLm1lc2hncmlkPVttLGcsdl0sZi5ncmlkRmlsbD1lLl9ncmlkRmlsbCxlLl9zbGVuKWYuc3RhcnRpbmdQb3NpdGlvbnM9bChkKGUuX3N0YXJ0c1gsInhheGlzIiksZChlLl9zdGFydHNZLCJ5YXhpcyIpLGQoZS5fc3RhcnRzWiwiemF4aXMiKSk7ZWxzZXtmb3IodmFyIHk9Z1swXSx4PWgobSksYj1oKHYpLF89bmV3IEFycmF5KHgubGVuZ3RoKmIubGVuZ3RoKSx3PTAsVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKV9bdysrXT1beFtUXSx5LGJba11dO2Yuc3RhcnRpbmdQb3NpdGlvbnM9X31mLmNvbG9ybWFwPW8oZSksZi50dWJlU2l6ZT1lLnNpemVyZWYsZi5tYXhMZW5ndGg9ZS5tYXhkaXNwbGF5ZWQ7dmFyIEE9ZChlLl94Ym5kcywieGF4aXMiKSxNPWQoZS5feWJuZHMsInlheGlzIiksUz1kKGUuX3pibmRzLCJ6YXhpcyIpLEU9cChtKSxMPXAoZyksQz1wKHYpLFA9W1tBWzBdLUVbMF0sTVswXS1MWzBdLFNbMF0tQ1swXV0sW0FbMV0rRVsxXSxNWzFdK0xbMV0sU1sxXStDWzFdXV0sST1uKGYsUCksTz1zKGUpO0kudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtPLm1pbi9lLl9ub3JtTWF4LE8ubWF4L2UuX25vcm1NYXhdO3ZhciB6PWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gSS5saWdodFBvc2l0aW9uPVt6Lngsei55LHouel0sSS5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxJLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLEkuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixJLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxJLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLEkub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPUkudHViZVNjYWxlKmUuc2l6ZXJlZioyLEl9Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2Nbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sInhheGlzIiksbihpWzFdLCJ5YXhpcyIpLG4oaVsyXSwiemF4aXMiKSxuKGFbMF0sInhheGlzIiksbihhWzFdLCJ5YXhpcyIpLG4oYVsyXSwiemF4aXMiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgdSh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIjoxMTIwLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5OSwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo2MDl9XSwxMDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoInUiKSxjPXMoInYiKSx1PXMoInciKSxmPXMoIngiKSxoPXMoInkiKSxwPXMoInoiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKCJzdGFydHMueCIpLHMoInN0YXJ0cy55Iikscygic3RhcnRzLnoiKSxzKCJtYXhkaXNwbGF5ZWQiKSxzKCJzaXplcmVmIikscygibGlnaHRpbmcuYW1iaWVudCIpLHMoImxpZ2h0aW5nLmRpZmZ1c2UiKSxzKCJsaWdodGluZy5zcGVjdWxhciIpLHMoImxpZ2h0aW5nLnJvdWdobmVzcyIpLHMoImxpZ2h0aW5nLmZyZXNuZWwiKSxzKCJsaWdodHBvc2l0aW9uLngiKSxzKCJsaWdodHBvc2l0aW9uLnkiKSxzKCJsaWdodHBvc2l0aW9uLnoiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIikscygidWhvdmVyZm9ybWF0IikscygidmhvdmVyZm9ybWF0Iikscygid2hvdmVyZm9ybWF0IikscygieGhvdmVyZm9ybWF0IikscygieWhvdmVyZm9ybWF0IikscygiemhvdmVyZm9ybWF0IiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjozNzYsIi4uLy4uL2xpYiI6NTAzLCIuL2F0dHJpYnV0ZXMiOjEwNDB9XSwxMDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN0cmVhbXR1YmUiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMscGxvdDp0KCIuL2NvbnZlcnQiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50dWJleD10LngsdC50dWJleT10LnksdC50dWJlej10LnosdC50dWJldT1lLnRyYWNlQ29vcmRpbmF0ZVszXSx0LnR1YmV2PWUudHJhY2VDb29yZGluYXRlWzRdLHQudHViZXc9ZS50cmFjZUNvb3JkaW5hdGVbNV0sdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHQuZGl2ZXJnZW5jZT1lLnRyYWNlQ29vcmRpbmF0ZVs3XSxkZWxldGUgdC54LGRlbGV0ZSB0LnksZGVsZXRlIHQueix0fSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo1OTgsIi4vYXR0cmlidXRlcyI6MTA0MCwiLi9jYWxjIjoxMDQxLCIuL2NvbnZlcnQiOjEwNDIsIi4vZGVmYXVsdHMiOjEwNDN9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxsPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtsYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0scGFyZW50czp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYnJhbmNodmFsdWVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZW1haW5kZXIiLCJ0b3RhbCJdLGRmbHQ6InJlbWFpbmRlciIsZWRpdFR5cGU6ImNhbGMifSxjb3VudDp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiYnJhbmNoZXMiLCJsZWF2ZXMiXSxkZmx0OiJsZWF2ZXMiLGVkaXRUeXBlOiJjYWxjIn0sbGV2ZWw6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGFuaW06ITB9LG1heGRlcHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToicGxvdCIsZGZsdDotMX0sbWFya2VyOnUoe2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp1KHt9LGwubWFya2VyLmxpbmUuY29sb3Ise2RmbHQ6bnVsbH0pLHdpZHRoOnUoe30sbC5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlciIse2NvbG9yQXR0cjoiY29sb3JzIixhbmltOiExfSkpLGxlYWY6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InN0eWxlIixtaW46MCxtYXg6MX0sZWRpdFR5cGU6InBsb3QifSx0ZXh0OmwudGV4dCx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJjdXJyZW50IHBhdGgiLCJwZXJjZW50IHJvb3QiLCJwZXJjZW50IGVudHJ5IiwicGVyY2VudCBwYXJlbnQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6InBsb3QifSx0ZXh0dGVtcGxhdGU6YSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLGhvdmVydGV4dDpsLmhvdmVydGV4dCxob3ZlcmluZm86dSh7fSxuLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsIm5hbWUiLCJjdXJyZW50IHBhdGgiLCJwZXJjZW50IHJvb3QiLCJwZXJjZW50IGVudHJ5IiwicGVyY2VudCBwYXJlbnQiXSxkZmx0OiJsYWJlbCt0ZXh0K3ZhbHVlK25hbWUifSksaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRmb250OmwudGV4dGZvbnQsaW5zaWRldGV4dG9yaWVudGF0aW9uOmwuaW5zaWRldGV4dG9yaWVudGF0aW9uLGluc2lkZXRleHRmb250OmwuaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250OnUoe30sbC5vdXRzaWRldGV4dGZvbnQse30pLHJvdGF0aW9uOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sc29ydDpsLnNvcnQscm9vdDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LGVkaXRUeXBlOiJjYWxjIn0sZG9tYWluOnMoe25hbWU6InN1bmJ1cnN0Iix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTg0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL3BpZS9hdHRyaWJ1dGVzIjo5MDAsIi4vY29uc3RhbnRzIjoxMDQ4fV0sMTA0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0ic3VuYnVyc3QiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjYxOX1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5IiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uscz10KCIuLi9waWUvY2FsYyIpLm1ha2VQdWxsQ29sb3JGbixsPXQoIi4uL3BpZS9jYWxjIikuZ2VuZXJhdGVFeHRlbmRlZENvbG9ycyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmNhbGMsdT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLGY9e30saD17fSxwPXt9O3IuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciByLGwsZixoLHAsZCxtPXQuX2Z1bGxMYXlvdXQsZz1lLmlkcyx2PWEuaXNBcnJheU9yVHlwZWRBcnJheShnKSx5PWUubGFiZWxzLHg9ZS5wYXJlbnRzLGI9ZS52YWx1ZXMsXz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoYiksdz1bXSxUPXt9LGs9e30sQT1mdW5jdGlvbih0KXtyZXR1cm4gdHx8Im51bWJlciI9PXR5cGVvZiB0fSxNPWZ1bmN0aW9uKHQpe3JldHVybiFffHxpKGJbdF0pJiZiW3RdPj0wfTt2PyhyPU1hdGgubWluKGcubGVuZ3RoLHgubGVuZ3RoKSxsPWZ1bmN0aW9uKHQpe3JldHVybiBBKGdbdF0pJiZNKHQpfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoZ1t0XSl9KToocj1NYXRoLm1pbih5Lmxlbmd0aCx4Lmxlbmd0aCksbD1mdW5jdGlvbih0KXtyZXR1cm4gQSh5W3RdKSYmTSh0KX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHlbdF0pfSksXyYmKHI9TWF0aC5taW4ocixiLmxlbmd0aCkpO2Zvcih2YXIgUz0wO1M8cjtTKyspaWYobChTKSl7dmFyIEU9ZihTKSxMPUEoeFtTXSk/U3RyaW5nKHhbU10pOiIiLEM9e2k6UyxpZDpFLHBpZDpMLGxhYmVsOkEoeVtTXSk/U3RyaW5nKHlbU10pOiIifTtfJiYoQy52PStiW1NdKSx3LnB1c2goQykscD1FLFRbaD1MXT9UW2hdLnB1c2gocCk6VFtoXT1bcF0sa1twXT0xfWlmKFRbIiJdKXtpZihUWyIiXS5sZW5ndGg+MSl7Zm9yKHZhciBQPWEucmFuZHN0cigpLEk9MDtJPHcubGVuZ3RoO0krKykiIj09PXdbSV0ucGlkJiYod1tJXS5waWQ9UCk7dy51bnNoaWZ0KHtoYXNNdWx0aXBsZVJvb3RzOiEwLGlkOlAscGlkOiIiLGxhYmVsOiIifSl9fWVsc2V7dmFyIE8sej1bXTtmb3IoTyBpbiBUKWtbT118fHoucHVzaChPKTtpZigxIT09ei5sZW5ndGgpcmV0dXJuIGEud2FybihbIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCIsZS50eXBlLCJoaWVyYXJjaHkgb2YiLGUubmFtZSsiLiIsIlRoZXNlIHJvb3RzIGluY2x1ZGU6Iix6LmpvaW4oIiwgIildLmpvaW4oIiAiKSk7Tz16WzBdLHcudW5zaGlmdCh7aGFzSW1wbGllZFJvb3Q6ITAsaWQ6TyxwaWQ6IiIsbGFiZWw6T30pfXRyeXtkPW4uc3RyYXRpZnkoKS5pZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkucGFyZW50SWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpZH0pKSh3KX1jYXRjaCh0KXtyZXR1cm4gYS53YXJuKFsiRmFpbGVkIHRvIGJ1aWxkIixlLnR5cGUsImhpZXJhcmNoeSBvZiIsZS5uYW1lKyIuIiwiRXJyb3I6Iix0Lm1lc3NhZ2VdLmpvaW4oIiAiKSl9dmFyIEQ9bi5oaWVyYXJjaHkoZCksUj0hMTtpZihfKXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZSJyZW1haW5kZXIiOkQuc3VtKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLnZ9KSk7YnJlYWs7Y2FzZSJ0b3RhbCI6RC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10LmRhdGEuZGF0YSxuPXIudjtpZih0LmNoaWxkcmVuKXt2YXIgaT10LmNoaWxkcmVuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSksMCk7aWYoKHIuaGFzSW1wbGllZFJvb3R8fHIuaGFzTXVsdGlwbGVSb290cykmJihuPWkpLG48aSp1KXJldHVybiBSPSEwLGEud2FybihbIlRvdGFsIHZhbHVlIGZvciBub2RlIix0LmRhdGEuZGF0YS5pZCwib2YiLGUubmFtZSwiaXMgc21hbGxlciB0aGFuIHRoZSBzdW0gb2YgaXRzIGNoaWxkcmVuLiIsIlxucGFyZW50IHZhbHVlID0iLG4sIlxuY2hpbGRyZW4gc3VtID0iLGldLmpvaW4oIiAiKSl9dC52YWx1ZT1ufSkpfWVsc2UhZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPWUuY2hpbGRyZW47aWYoYSl7Zm9yKHZhciBvPWEubGVuZ3RoLHM9MDtzPG87cysrKWkrPXQoYVtzXSxyLG4pO24uYnJhbmNoZXMmJmkrK31lbHNlIG4ubGVhdmVzJiZpKys7ZS52YWx1ZT1lLmRhdGEuZGF0YS52YWx1ZT1pLHIuX3ZhbHVlc3x8KHIuX3ZhbHVlcz1bXSk7cmV0dXJuIHIuX3ZhbHVlc1tlLmRhdGEuZGF0YS5pXT1pLGl9KEQsZSx7YnJhbmNoZXM6LTEhPT1lLmNvdW50LmluZGV4T2YoImJyYW5jaGVzIiksbGVhdmVzOi0xIT09ZS5jb3VudC5pbmRleE9mKCJsZWF2ZXMiKX0pO2lmKCFSKXt2YXIgRixCO2Uuc29ydCYmRC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9KSk7dmFyIE49ZS5tYXJrZXIuY29sb3JzfHxbXSxqPSEhTi5sZW5ndGg7cmV0dXJuIGUuX2hhc0NvbG9yc2NhbGU/KGp8fChOPV8/ZS52YWx1ZXM6ZS5fdmFsdWVzKSxjKHQsZSx7dmFsczpOLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLEI9byhlLm1hcmtlcikpOkY9cyhtWyJfIitlLnR5cGUrImNvbG9ybWFwIl0pLEQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhLmRhdGE7ci5jb2xvcj1lLl9oYXNDb2xvcnNjYWxlP0IoTltyLmldKTpGKE5bci5pXSxyLmlkKX0pKSx3WzBdLmhpZXJhcmNoeT1ELHd9fSxyLl9ydW5Dcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbj1lLmNhbGNkYXRhLGk9clt0KyJjb2xvcndheSJdLGE9clsiXyIrdCsiY29sb3JtYXAiXTtyWyJleHRlbmQiK3QrImNvbG9ycyJdJiYoaT1sKGksImljaWNsZSI9PT10P3A6InRyZWVtYXAiPT09dD9oOmYpKTt2YXIgbyxzPTA7ZnVuY3Rpb24gYyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoYVtyXT9lLmNvbG9yPWFbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihhW3JdPWUuY29sb3I9aVtzJWkubGVuZ3RoXSxzKyspOmUuY29sb3I9byl9Zm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBkPW5bdV1bMF07ZC50cmFjZS50eXBlPT09dCYmZC5oaWVyYXJjaHkmJihvPWQudHJhY2Uucm9vdC5jb2xvcixkLmhpZXJhcmNoeS5lYWNoKGMpKX19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX3J1bkNyb3NzVHJhY2VDYWxjKCJzdW5idXJzdCIsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6Mzc4LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCIuLi9waWUvY2FsYyI6OTAyLCJkMy1oaWVyYXJjaHkiOjExNSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDTElDS19UUkFOU0lUSU9OX1RJTUU6NzUwLENMSUNLX1RSQU5TSVRJT05fRUFTSU5HOiJsaW5lYXIiLGV2ZW50RGF0YUtleXM6WyJjdXJyZW50UGF0aCIsInJvb3QiLCJlbnRyeSIsInBlcmNlbnRSb290IiwicGVyY2VudEVudHJ5IiwicGVyY2VudFBhcmVudCJdfX0se31dLDEwNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9cy5oYXNDb2xvcnNjYWxlLGM9cy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gdShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBmPXUoImxhYmVscyIpLGg9dSgicGFyZW50cyIpO2lmKGYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCl7dmFyIHA9dSgidmFsdWVzIik7cCYmcC5sZW5ndGg/dSgiYnJhbmNodmFsdWVzIik6dSgiY291bnQiKSx1KCJsZXZlbCIpLHUoIm1heGRlcHRoIiksdSgibWFya2VyLmxpbmUud2lkdGgiKSYmdSgibWFya2VyLmxpbmUuY29sb3IiLHMucGFwZXJfYmdjb2xvciksdSgibWFya2VyLmNvbG9ycyIpO3ZhciBkPWUuX2hhc0NvbG9yc2NhbGU9bCh0LCJtYXJrZXIiLCJjb2xvcnMiKXx8KHQubWFya2VyfHx7fSkuY29sb3JheGlzO2QmJmModCxlLHMsdSx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHUoImxlYWYub3BhY2l0eSIsZD8xOi43KTt2YXIgbT11KCJ0ZXh0Iik7dSgidGV4dHRlbXBsYXRlIiksZS50ZXh0dGVtcGxhdGV8fHUoInRleHRpbmZvIixBcnJheS5pc0FycmF5KG0pPyJ0ZXh0K2xhYmVsIjoibGFiZWwiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIik7byh0LGUscyx1LCJhdXRvIix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksdSgiaW5zaWRldGV4dG9yaWVudGF0aW9uIiksdSgic29ydCIpLHUoInJvdGF0aW9uIiksdSgicm9vdC5jb2xvciIpLGEoZSxzLHUpLGUuX2xlbmd0aD1udWxsfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjM3OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTg0LCIuLi9iYXIvZGVmYXVsdHMiOjY1MiwiLi9hdHRyaWJ1dGVzIjoxMDQ1fV0sMTA1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLG89dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvZXZlbnRzIiksYz10KCIuL2hlbHBlcnMiKSx1PXQoIi4uL3BpZS9oZWxwZXJzIikuZm9ybWF0UGllVmFsdWU7ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPXQuZGF0YS5kYXRhLGk9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6bi5pLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZX0sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dO3MgaW4gdCYmKGlbc109dFtzXSl9cmV0dXJuInBhcmVudFN0cmluZyJpbiB0JiYhYy5pc0hpZXJhcmNoeVJvb3QodCkmJihpLnBhcmVudD10LnBhcmVudFN0cmluZyksYShpLGUsbi5pKSxpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGgpe3ZhciBwPWFbMF0sZD1wLnRyYWNlLG09cC5oaWVyYXJjaHksZz0ic3VuYnVyc3QiPT09ZC50eXBlLHY9InRyZWVtYXAiPT09ZC50eXBlfHwiaWNpY2xlIj09PWQudHlwZTsiX2hhc0hvdmVyTGFiZWwiaW4gZHx8KGQuX2hhc0hvdmVyTGFiZWw9ITEpLCJfaGFzSG92ZXJFdmVudCJpbiBkfHwoZC5faGFzSG92ZXJFdmVudD0hMSk7dC5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oaSl7dmFyIGE9ci5fZnVsbExheW91dDtpZighci5fZHJhZ2dpbmcmJiExIT09YS5ob3Zlcm1vZGUpe3ZhciBsLHk9ci5fZnVsbERhdGFbZC5pbmRleF0seD1pLmRhdGEuZGF0YSxiPXguaSxfPWMuaXNIaWVyYXJjaHlSb290KGkpLHc9Yy5nZXRQYXJlbnQobSxpKSxUPWMuZ2V0VmFsdWUoaSksaz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYXN0T3B0aW9uKHksYix0KX0sQT1rKCJob3ZlcnRlbXBsYXRlIiksTT1vLmNhc3RIb3ZlcmluZm8oeSxhLGIpLFM9YS5zZXBhcmF0b3JzO2lmKEF8fE0mJiJub25lIiE9PU0mJiJza2lwIiE9PU0pe3ZhciBFLEw7ZyYmKEU9cC5jeCtpLnB4bWlkWzBdKigxLWkuckluc2NyaWJlZCksTD1wLmN5K2kucHhtaWRbMV0qKDEtaS5ySW5zY3JpYmVkKSksdiYmKEU9aS5faG92ZXJYLEw9aS5faG92ZXJZKTt2YXIgQyxQPXt9LEk9W10sTz1bXSx6PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09SS5pbmRleE9mKHQpfTtNJiYoST0iYWxsIj09PU0/eS5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOk0uc3BsaXQoIisiKSksUC5sYWJlbD14LmxhYmVsLHooImxhYmVsIikmJlAubGFiZWwmJk8ucHVzaChQLmxhYmVsKSx4Lmhhc093blByb3BlcnR5KCJ2IikmJihQLnZhbHVlPXgudixQLnZhbHVlTGFiZWw9dShQLnZhbHVlLFMpLHooInZhbHVlIikmJk8ucHVzaChQLnZhbHVlTGFiZWwpKSxQLmN1cnJlbnRQYXRoPWkuY3VycmVudFBhdGg9Yy5nZXRQYXRoKGkuZGF0YSkseigiY3VycmVudCBwYXRoIikmJiFfJiZPLnB1c2goUC5jdXJyZW50UGF0aCk7dmFyIEQ9W10sUj1mdW5jdGlvbigpey0xPT09RC5pbmRleE9mKEMpJiYoTy5wdXNoKEMpLEQucHVzaChDKSl9O1AucGVyY2VudFBhcmVudD1pLnBlcmNlbnRQYXJlbnQ9VC9jLmdldFZhbHVlKHcpLFAucGFyZW50PWkucGFyZW50U3RyaW5nPWMuZ2V0UHRMYWJlbCh3KSx6KCJwZXJjZW50IHBhcmVudCIpJiYoQz1jLmZvcm1hdFBlcmNlbnQoUC5wZXJjZW50UGFyZW50LFMpKyIgb2YgIitQLnBhcmVudCxSKCkpLFAucGVyY2VudEVudHJ5PWkucGVyY2VudEVudHJ5PVQvYy5nZXRWYWx1ZShlKSxQLmVudHJ5PWkuZW50cnk9Yy5nZXRQdExhYmVsKGUpLCF6KCJwZXJjZW50IGVudHJ5Iil8fF98fGkub25QYXRoYmFyfHwoQz1jLmZvcm1hdFBlcmNlbnQoUC5wZXJjZW50RW50cnksUykrIiBvZiAiK1AuZW50cnksUigpKSxQLnBlcmNlbnRSb290PWkucGVyY2VudFJvb3Q9VC9jLmdldFZhbHVlKG0pLFAucm9vdD1pLnJvb3Q9Yy5nZXRQdExhYmVsKG0pLHooInBlcmNlbnQgcm9vdCIpJiYhXyYmKEM9Yy5mb3JtYXRQZXJjZW50KFAucGVyY2VudFJvb3QsUykrIiBvZiAiK1Aucm9vdCxSKCkpLFAudGV4dD1rKCJob3ZlcnRleHQiKXx8aygidGV4dCIpLHooInRleHQiKSYmKEM9UC50ZXh0LHMuaXNWYWxpZFRleHRWYWx1ZShDKSYmTy5wdXNoKEMpKSxsPVtmKGkseSxoLmV2ZW50RGF0YUtleXMpXTt2YXIgRj17dHJhY2U6eSx5OkwsX3gwOmkuX3gwLF94MTppLl94MSxfeTA6aS5feTAsX3kxOmkuX3kxLHRleHQ6Ty5qb2luKCI8YnI+IiksbmFtZTpBfHx6KCJuYW1lIik/eS5uYW1lOnZvaWQgMCxjb2xvcjprKCJob3ZlcmxhYmVsLmJnY29sb3IiKXx8eC5jb2xvcixib3JkZXJDb2xvcjprKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIiksZm9udEZhbWlseTprKCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksZm9udFNpemU6aygiaG92ZXJsYWJlbC5mb250LnNpemUiKSxmb250Q29sb3I6aygiaG92ZXJsYWJlbC5mb250LmNvbG9yIiksbmFtZUxlbmd0aDprKCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246aygiaG92ZXJsYWJlbC5hbGlnbiIpLGhvdmVydGVtcGxhdGU6QSxob3ZlcnRlbXBsYXRlTGFiZWxzOlAsZXZlbnREYXRhOmx9O2cmJihGLngwPUUtaS5ySW5zY3JpYmVkKmkucnB4MSxGLngxPUUraS5ySW5zY3JpYmVkKmkucnB4MSxGLmlkZWFsQWxpZ249aS5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiKSx2JiYoRi54PUUsRi5pZGVhbEFsaWduPUU8MD8ibGVmdCI6InJpZ2h0Iik7dmFyIEI9W107by5sb25lSG92ZXIoRix7Y29udGFpbmVyOmEuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmEuX3BhcGVyLm5vZGUoKSxnZDpyLGluT3V0X2Jib3g6Qn0pLGxbMF0uYmJveD1CWzBdLGQuX2hhc0hvdmVyTGFiZWw9ITB9aWYodil7dmFyIE49dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpO2guc3R5bGVPbmUoTixpLHkse2hvdmVyZWQ6ITB9KX1kLl9oYXNIb3ZlckV2ZW50PSEwLHIuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOmx8fFtmKGkseSxoLmV2ZW50RGF0YUtleXMpXSxldmVudDpuLmV2ZW50fSl9fSkpLHQub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oZSl7dmFyIGk9ci5fZnVsbExheW91dCxhPXIuX2Z1bGxEYXRhW2QuaW5kZXhdLHM9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtpZihkLl9oYXNIb3ZlckV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsci5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbZihzLGEsaC5ldmVudERhdGFLZXlzKV0sZXZlbnQ6bi5ldmVudH0pLGQuX2hhc0hvdmVyRXZlbnQ9ITEpLGQuX2hhc0hvdmVyTGFiZWwmJihvLmxvbmVVbmhvdmVyKGkuX2hvdmVybGF5ZXIubm9kZSgpKSxkLl9oYXNIb3ZlckxhYmVsPSExKSx2KXt2YXIgbD10LnNlbGVjdCgicGF0aC5zdXJmYWNlIik7aC5zdHlsZU9uZShsLHMsYSx7aG92ZXJlZDohMX0pfX0pKSx0Lm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe3ZhciBlPXIuX2Z1bGxMYXlvdXQsYT1yLl9mdWxsRGF0YVtkLmluZGV4XSxzPWcmJihjLmlzSGllcmFyY2h5Um9vdCh0KXx8Yy5pc0xlYWYodCkpLHU9Yy5nZXRQdElkKHQpLHA9Yy5pc0VudHJ5KHQpP2MuZmluZEVudHJ5V2l0aENoaWxkKG0sdSk6Yy5maW5kRW50cnlXaXRoTGV2ZWwobSx1KSx2PWMuZ2V0UHRJZChwKSx5PXtwb2ludHM6W2YodCxhLGguZXZlbnREYXRhS2V5cyldLGV2ZW50Om4uZXZlbnR9O3N8fCh5Lm5leHRMZXZlbD12KTt2YXIgeD1sLnRyaWdnZXJIYW5kbGVyKHIsInBsb3RseV8iK2QudHlwZSsiY2xpY2siLHkpO2lmKCExIT09eCYmZS5ob3Zlcm1vZGUmJihyLl9ob3ZlcmRhdGE9W2YodCxhLGguZXZlbnREYXRhS2V5cyldLG8uY2xpY2socixuLmV2ZW50KSksIXMmJiExIT09eCYmIXIuX2RyYWdnaW5nJiYhci5fdHJhbnNpdGlvbmluZyl7aS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixhLGUuX3RyYWNlUHJlR1VJW2EudWlkXSx7bGV2ZWw6YS5sZXZlbH0pO3ZhciBiPXtkYXRhOlt7bGV2ZWw6dn1dLHRyYWNlczpbZC5pbmRleF19LF89e2ZyYW1lOntyZWRyYXc6ITEsZHVyYXRpb246aC50cmFuc2l0aW9uVGltZX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246aC50cmFuc2l0aW9uVGltZSxlYXNpbmc6aC50cmFuc2l0aW9uRWFzaW5nfSxtb2RlOiJpbW1lZGlhdGUiLGZyb21jdXJyZW50OiEwfTtvLmxvbmVVbmhvdmVyKGUuX2hvdmVybGF5ZXIubm9kZSgpKSxpLmNhbGwoImFuaW1hdGUiLHIsYixfKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjQwNiwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo0MDIsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvZXZlbnRzIjo0OTIsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4uL3BpZS9oZWxwZXJzIjo5MDUsIi4vaGVscGVycyI6MTA1MSwiQHBsb3RseS9kMyI6NTh9XSwxMDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLG89dCgiLi4vcGllL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiB0LmRhdGEuZGF0YS5waWR9ci5maW5kRW50cnlXaXRoTGV2ZWw9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gZSYmdC5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKHQpe2lmKHIuZ2V0UHRJZCh0KT09PWUpcmV0dXJuIG49dC5jb3B5KCl9KSksbnx8dH0sci5maW5kRW50cnlXaXRoQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT10LmNoaWxkcmVufHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoci5nZXRQdElkKG8pPT09ZSlyZXR1cm4gbj10LmNvcHkoKX19KSksbnx8dH0sci5pc0VudHJ5PWZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcmVudH0sci5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIXQuY2hpbGRyZW59LHIuZ2V0UHRJZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmRhdGEuaWR9LHIuZ2V0UHRMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmRhdGEubGFiZWx9LHIuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9LHIuaXNIaWVyYXJjaHlSb290PWZ1bmN0aW9uKHQpe3JldHVybiIiPT09cyh0KX0sci5zZXRTbGljZUN1cnNvcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9bi5pc1RyYW5zaXRpb25pbmc7aWYoIWkpe3ZhciBvPXQuZGF0dW0oKTtpPW4uaGlkZU9uUm9vdCYmci5pc0hpZXJhcmNoeVJvb3Qobyl8fG4uaGlkZU9uTGVhdmVzJiZyLmlzTGVhZihvKX1hKHQsaT9udWxsOiJwb2ludGVyIil9LHIuZ2V0SW5zaWRlVGV4dEZvbnRLZXk9ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz0oYXx8e30pLm9uUGF0aGJhcj8icGF0aGJhci50ZXh0Zm9udCI6Imluc2lkZXRleHRmb250IixzPXIuZGF0YS5kYXRhLmk7cmV0dXJuIG4uY2FzdE9wdGlvbihlLHMsbysiLiIrdCl8fG4uY2FzdE9wdGlvbihlLHMsInRleHRmb250LiIrdCl8fGkuc2l6ZX0sci5nZXRPdXRzaWRlVGV4dEZvbnRLZXk9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5kYXRhLmRhdGEuaTtyZXR1cm4gbi5jYXN0T3B0aW9uKGUsYSwib3V0c2lkZXRleHRmb250LiIrdCl8fG4uY2FzdE9wdGlvbihlLGEsInRleHRmb250LiIrdCl8fGkuc2l6ZX0sci5pc091dHNpZGVUZXh0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXQuX2hhc0NvbG9yc2NhbGUmJnIuaXNIaWVyYXJjaHlSb290KGUpfSxyLmRldGVybWluZVRleHRGb250PWZ1bmN0aW9uKHQsZSxhLG8pe3JldHVybiByLmlzT3V0c2lkZVRleHQodCxlKT9mdW5jdGlvbih0LGUsbil7cmV0dXJue2NvbG9yOnIuZ2V0T3V0c2lkZVRleHRGb250S2V5KCJjb2xvciIsdCxlLG4pLGZhbWlseTpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgiZmFtaWx5Iix0LGUsbiksc2l6ZTpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgic2l6ZSIsdCxlLG4pfX0odCxlLGEpOmZ1bmN0aW9uKHQsZSxhLG8pe3ZhciBzPShvfHx7fSkub25QYXRoYmFyLGw9ZS5kYXRhLmRhdGEsYz1sLmksdT1uLmNhc3RPcHRpb24odCxjLChzPyJwYXRoYmFyLnRleHRmb250IjoiaW5zaWRldGV4dGZvbnQiKSsiLmNvbG9yIik7cmV0dXJuIXUmJnQuX2lucHV0LnRleHRmb250JiYodT1uLmNhc3RPcHRpb24odC5faW5wdXQsYywidGV4dGZvbnQuY29sb3IiKSkse2NvbG9yOnV8fGkuY29udHJhc3QobC5jb2xvciksZmFtaWx5OnIuZ2V0SW5zaWRlVGV4dEZvbnRLZXkoImZhbWlseSIsdCxlLGEsbyksc2l6ZTpyLmdldEluc2lkZVRleHRGb250S2V5KCJzaXplIix0LGUsYSxvKX19KHQsZSxhLG8pfSxyLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuISEodCYmdC5kdXJhdGlvbj4wKX0sci5nZXRNYXhEZXB0aD1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXhkZXB0aD49MD90Lm1heGRlcHRoOjEvMH0sci5pc0hlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiEoci5pc0xlYWYodCl8fHQuZGVwdGg9PT1lLl9tYXhEZXB0aC0xKX0sci5nZXRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5maW5kRW50cnlXaXRoTGV2ZWwodCxzKGUpKX0sci5saXN0UGF0aD1mdW5jdGlvbih0LGUpe3ZhciBuPXQucGFyZW50O2lmKCFuKXJldHVybltdO3ZhciBpPWU/W24uZGF0YVtlXV06W25dO3JldHVybiByLmxpc3RQYXRoKG4sZSkuY29uY2F0KGkpfSxyLmdldFBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubGlzdFBhdGgodCwibGFiZWwiKS5qb2luKCIvIikrIi8ifSxyLmZvcm1hdFZhbHVlPW8uZm9ybWF0UGllVmFsdWUsci5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5mb3JtYXRQZXJjZW50KHQsMCk7cmV0dXJuIjAlIj09PXImJihyPW8uZm9ybWF0UGllUGVyY2VudCh0LGUpKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo1MjQsIi4uL3BpZS9oZWxwZXJzIjo5MDV9XSwxMDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1bmJ1cnN0IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbWV0YTp7fX19LHsiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0NCwiLi9hdHRyaWJ1dGVzIjoxMDQ1LCIuL2Jhc2VfcGxvdCI6MTA0NiwiLi9jYWxjIjoxMDQ3LCIuL2RlZmF1bHRzIjoxMDQ5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDUzLCIuL2xheW91dF9kZWZhdWx0cyI6MTA1NCwiLi9wbG90IjoxMDU1LCIuL3N0eWxlIjoxMDU2fV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N1bmJ1cnN0Y29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRzdW5idXJzdGNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEwNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoInN1bmJ1cnN0Y29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHN1bmJ1cnN0Y29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDUzfV0sMTA1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1oaWVyYXJjaHkiKSxhPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGUsbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksdT1jLnJlY29yZE1pblRleHRTaXplLGY9Yy5jbGVhck1pblRleHRTaXplLGg9dCgiLi4vcGllL3Bsb3QiKSxwPXQoIi4uL3BpZS9oZWxwZXJzIikuZ2V0Um90YXRpb25BbmdsZSxkPWguY29tcHV0ZVRyYW5zZm9ybSxtPWgudHJhbnNmb3JtSW5zaWRlVGV4dCxnPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSx2PXQoIi4uL2Jhci9zdHlsZSIpLnJlc2l6ZVRleHQseT10KCIuL2Z4IikseD10KCIuL2NvbnN0YW50cyIpLGI9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gXyh0LGUsYyxmKXt2YXIgaD10Ll9mdWxsTGF5b3V0LHY9IWgudW5pZm9ybXRleHQubW9kZSYmYi5oYXNUcmFuc2l0aW9uKGYpLF89bi5zZWxlY3QoYykuc2VsZWN0QWxsKCJnLnNsaWNlIiksVD1lWzBdLGs9VC50cmFjZSxBPVQuaGllcmFyY2h5LE09Yi5maW5kRW50cnlXaXRoTGV2ZWwoQSxrLmxldmVsKSxTPWIuZ2V0TWF4RGVwdGgoayksRT1oLl9zaXplLEw9ay5kb21haW4sQz1FLncqKEwueFsxXS1MLnhbMF0pLFA9RS5oKihMLnlbMV0tTC55WzBdKSxJPS41Kk1hdGgubWluKEMsUCksTz1ULmN4PUUubCtFLncqKEwueFsxXStMLnhbMF0pLzIsej1ULmN5PUUudCtFLmgqKDEtTC55WzBdKS1QLzI7aWYoIU0pcmV0dXJuIF8ucmVtb3ZlKCk7dmFyIEQ9bnVsbCxSPXt9O3YmJl8uZWFjaCgoZnVuY3Rpb24odCl7UltiLmdldFB0SWQodCldPXtycHgwOnQucnB4MCxycHgxOnQucnB4MSx4MDp0LngwLHgxOnQueDEsdHJhbnNmb3JtOnQudHJhbnNmb3JtfSwhRCYmYi5pc0VudHJ5KHQpJiYoRD10KX0pKTt2YXIgRj1mdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJ0aXRpb24oKS5zaXplKFsyKk1hdGguUEksdC5oZWlnaHQrMV0pKHQpfShNKS5kZXNjZW5kYW50cygpLEI9TS5oZWlnaHQrMSxOPTAsaj1TO1QuaGFzTXVsdGlwbGVSb290cyYmYi5pc0hpZXJhcmNoeVJvb3QoTSkmJihGPUYuc2xpY2UoMSksQi09MSxOPTEsais9MSksRj1GLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueTE8PWp9KSk7dmFyIFU9cChrLnJvdGF0aW9uKTtVJiZGLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueDArPVUsdC54MSs9VX0pKTt2YXIgVj1NYXRoLm1pbihCLFMpLEg9ZnVuY3Rpb24odCl7cmV0dXJuKHQtTikvVipJfSxxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksLXQqTWF0aC5zaW4oZSldfSxHPWZ1bmN0aW9uKHQpe3JldHVybiBzLnBhdGhBbm51bHVzKHQucnB4MCx0LnJweDEsdC54MCx0LngxLE8seil9LFk9ZnVuY3Rpb24odCl7cmV0dXJuIE8rdyh0KVswXSoodC50cmFuc2Zvcm0uckNlbnRlcnx8MCkrKHQudHJhbnNmb3JtLnh8fDApfSxXPWZ1bmN0aW9uKHQpe3JldHVybiB6K3codClbMV0qKHQudHJhbnNmb3JtLnJDZW50ZXJ8fDApKyh0LnRyYW5zZm9ybS55fHwwKX07KF89Xy5kYXRhKEYsYi5nZXRQdElkKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLHY/Xy5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPWIuZ2V0UHRJZCh0KSxuPVJbcl0saT1SW2IuZ2V0UHRJZChNKV07aWYoaSl7dmFyIG89KHQueDE+aS54MT8yKk1hdGguUEk6MCkrVTtlPXQucnB4MTxpLnJweDE/e3gwOnQueDAseDE6dC54MSxycHgwOjAscnB4MTowfTp7eDA6byx4MTpvLHJweDA6dC5ycHgwLHJweDE6dC5ycHgxfX1lbHNle3ZhciBzLGw9Yi5nZXRQdElkKHQucGFyZW50KTtfLmVhY2goKGZ1bmN0aW9uKHQpe2lmKGIuZ2V0UHRJZCh0KT09PWwpcmV0dXJuIHM9dH0pKTt2YXIgYyx1PXMuY2hpbGRyZW47dS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKGIuZ2V0UHRJZCh0KT09PXIpcmV0dXJuIGM9ZX0pKTt2YXIgZj11Lmxlbmd0aCxoPWEocy54MCxzLngxKTtlPXtycHgwOkkscnB4MTpJLHgwOmgoYy9mKSx4MTpoKChjKzEpL2YpfX1yZXR1cm4gYShuLGUpfSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoZSh0KSl9fSkpLHQuc2VsZWN0KCJnLnNsaWNldGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkpLnJlbW92ZSgpOl8uZXhpdCgpLnJlbW92ZSgpLF8ub3JkZXIoKTt2YXIgWD1udWxsO2lmKHYmJkQpe3ZhciBaPWIuZ2V0UHRJZChEKTtfLmVhY2goKGZ1bmN0aW9uKHQpe251bGw9PT1YJiZiLmdldFB0SWQodCk9PT1aJiYoWD10LngxKX0pKX12YXIgSj1fO2Z1bmN0aW9uIEsodCl7dmFyIGU9dC5wYXJlbnQscj1SW2IuZ2V0UHRJZChlKV0sbj17fTtpZihyKXt2YXIgaT1lLmNoaWxkcmVuLG89aS5pbmRleE9mKHQpLHM9aS5sZW5ndGgsbD1hKHIueDAsci54MSk7bi54MD1sKG8vcyksbi54MT1sKG8vcyl9ZWxzZSBuLngwPW4ueDE9MDtyZXR1cm4gbn12JiYoSj1KLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2Iuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMCxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksSi5lYWNoKChmdW5jdGlvbihpKXt2YXIgYz1uLnNlbGVjdCh0aGlzKSxmPXMuZW5zdXJlU2luZ2xlKGMsInBhdGgiLCJzdXJmYWNlIiwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTtpLnJweDA9SChpLnkwKSxpLnJweDE9SChpLnkxKSxpLnhtaWQ9KGkueDAraS54MSkvMixpLnB4bWlkPXEoaS5ycHgxLGkueG1pZCksaS5taWRhbmdsZT0tKGkueG1pZC1NYXRoLlBJLzIpLGkuc3RhcnRhbmdsZT0tKGkueDAtTWF0aC5QSS8yKSxpLnN0b3BhbmdsZT0tKGkueDEtTWF0aC5QSS8yKSxpLmhhbGZhbmdsZT0uNSpNYXRoLm1pbihzLmFuZ2xlRGVsdGEoaS54MCxpLngxKXx8TWF0aC5QSSxNYXRoLlBJKSxpLnJpbmc9MS1pLnJweDAvaS5ycHgxLGkuckluc2NyaWJlZD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQucnB4MCYmcy5pc0Z1bGxDaXJjbGUoW3QueDAsdC54MV0pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMikpfShpKSx2P2YudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9UltiLmdldFB0SWQodCldLG49e3gwOnQueDAseDE6dC54MSxycHgwOnQucnB4MCxycHgxOnQucnB4MX07aWYocillPXI7ZWxzZSBpZihEKWlmKHQucGFyZW50KWlmKFgpe3ZhciBpPSh0LngxPlg/MipNYXRoLlBJOjApK1U7ZT17eDA6aSx4MTppfX1lbHNlIGU9e3JweDA6SSxycHgxOkl9LHMuZXh0ZW5kRmxhdChlLEsodCkpO2Vsc2UgZT17cnB4MDowLHJweDE6MH07ZWxzZSBlPXt4MDpVLHgxOlV9O3JldHVybiBhKGUsbil9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRyhlKHQpKX19KSk6Zi5hdHRyKCJkIixHKSxjLmNhbGwoeSxNLHQsZSx7ZXZlbnREYXRhS2V5czp4LmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6eC5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzp4LkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbChiLnNldFNsaWNlQ3Vyc29yLHQse2hpZGVPblJvb3Q6ITAsaGlkZU9uTGVhdmVzOiEwLGlzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksZi5jYWxsKGcsaSxrKTt2YXIgcD1zLmVuc3VyZVNpbmdsZShjLCJnIiwic2xpY2V0ZXh0IiksXz1zLmVuc3VyZVNpbmdsZShwLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSx3PXMuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsYi5kZXRlcm1pbmVUZXh0Rm9udChrLGksaC5mb250KSk7Xy50ZXh0KHIuZm9ybWF0U2xpY2VMYWJlbChpLE0sayxlLGgpKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoby5mb250LHcpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIEE9by5iQm94KF8ubm9kZSgpKTtpLnRyYW5zZm9ybT1tKEEsaSxUKSxpLnRyYW5zZm9ybS50YXJnZXRYPVkoaSksaS50cmFuc2Zvcm0udGFyZ2V0WT1XKGkpO3ZhciBTPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50cmFuc2Zvcm07cmV0dXJuIGQocixlKSxyLmZvbnRTaXplPXcuc2l6ZSx1KGsudHlwZSxyLGgpLHMuZ2V0VGV4dFRyYW5zZm9ybShyKX07dj9fLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9UltiLmdldFB0SWQodCldLG49dC50cmFuc2Zvcm07aWYocillPXI7ZWxzZSBpZihlPXtycHgxOnQucnB4MSx0cmFuc2Zvcm06e3RleHRQb3NBbmdsZTpuLnRleHRQb3NBbmdsZSxzY2FsZTowLHJvdGF0ZTpuLnJvdGF0ZSxyQ2VudGVyOm4uckNlbnRlcix4Om4ueCx5Om4ueX19LEQpaWYodC5wYXJlbnQpaWYoWCl7dmFyIGk9dC54MT5YPzIqTWF0aC5QSTowO2UueDA9ZS54MT1pfWVsc2Ugcy5leHRlbmRGbGF0KGUsSyh0KSk7ZWxzZSBlLngwPWUueDE9VTtlbHNlIGUueDA9ZS54MT1VO3ZhciBvPWEoZS50cmFuc2Zvcm0udGV4dFBvc0FuZ2xlLHQudHJhbnNmb3JtLnRleHRQb3NBbmdsZSksbD1hKGUucnB4MSx0LnJweDEpLGM9YShlLngwLHQueDApLGY9YShlLngxLHQueDEpLHA9YShlLnRyYW5zZm9ybS5zY2FsZSxuLnNjYWxlKSxkPWEoZS50cmFuc2Zvcm0ucm90YXRlLG4ucm90YXRlKSxtPTA9PT1uLnJDZW50ZXI/MzowPT09ZS50cmFuc2Zvcm0uckNlbnRlcj8xLzM6MSxnPWEoZS50cmFuc2Zvcm0uckNlbnRlcixuLnJDZW50ZXIpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1sKHQpLHI9Yyh0KSxpPWYodCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZyhNYXRoLnBvdyh0LG0pKX0odCkscz17cHhtaWQ6cShlLChyK2kpLzIpLHJweDE6ZSx0cmFuc2Zvcm06e3RleHRQb3NBbmdsZTpvKHQpLHJDZW50ZXI6YSx4Om4ueCx5Om4ueX19O3JldHVybiB1KGsudHlwZSxuLGgpLHt0cmFuc2Zvcm06e3RhcmdldFg6WShzKSx0YXJnZXRZOlcocyksc2NhbGU6cCh0KSxyb3RhdGU6ZCh0KSxyQ2VudGVyOmF9fX19KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gUyhlKHQpLEEpfX0pKTpfLmF0dHIoInRyYW5zZm9ybSIsUyhpLEEpKX0pKX1mdW5jdGlvbiB3KHQpe3JldHVybiBlPXQucnB4MSxyPXQudHJhbnNmb3JtLnRleHRQb3NBbmdsZSxbZSpNYXRoLnNpbihyKSwtZSpNYXRoLmNvcyhyKV07dmFyIGUscn1yLnBsb3Q9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLl9zdW5idXJzdGxheWVyLGM9IXIsdT0hcy51bmlmb3JtdGV4dC5tb2RlJiZiLmhhc1RyYW5zaXRpb24ocik7KGYoInN1bmJ1cnN0IixzKSwoYT1sLnNlbGVjdEFsbCgiZy50cmFjZS5zdW5idXJzdCIpLmRhdGEoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRyYWNlIiwhMCkuY2xhc3NlZCgic3VuYnVyc3QiLCEwKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLGEub3JkZXIoKSx1KT8oaSYmKG89aSgpKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5lYXNlKHIuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe28mJm8oKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe28mJm8oKX0pKS5lYWNoKChmdW5jdGlvbigpe2wuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7Xyh0LGUsdGhpcyxyKX0pKX0pKSk6KGEuZWFjaCgoZnVuY3Rpb24oZSl7Xyh0LGUsdGhpcyxyKX0pKSxzLnVuaWZvcm10ZXh0Lm1vZGUmJnYodCxzLl9zdW5idXJzdGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIiksInN1bmJ1cnN0IikpO2MmJmEuZXhpdCgpLnJlbW92ZSgpfSxyLmZvcm1hdFNsaWNlTGFiZWw9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1yLnRleHR0ZW1wbGF0ZSxvPXIudGV4dGluZm87aWYoIShhfHxvJiYibm9uZSIhPT1vKSlyZXR1cm4iIjt2YXIgbD1pLnNlcGFyYXRvcnMsYz1uWzBdLHU9dC5kYXRhLmRhdGEsZj1jLmhpZXJhcmNoeSxoPWIuaXNIaWVyYXJjaHlSb290KHQpLHA9Yi5nZXRQYXJlbnQoZix0KSxkPWIuZ2V0VmFsdWUodCk7aWYoIWEpe3ZhciBtLGc9by5zcGxpdCgiKyIpLHY9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1nLmluZGV4T2YodCl9LHk9W107aWYodigibGFiZWwiKSYmdS5sYWJlbCYmeS5wdXNoKHUubGFiZWwpLHUuaGFzT3duUHJvcGVydHkoInYiKSYmdigidmFsdWUiKSYmeS5wdXNoKGIuZm9ybWF0VmFsdWUodS52LGwpKSwhaCl7digiY3VycmVudCBwYXRoIikmJnkucHVzaChiLmdldFBhdGgodC5kYXRhKSk7dmFyIHg9MDt2KCJwZXJjZW50IHBhcmVudCIpJiZ4KyssdigicGVyY2VudCBlbnRyeSIpJiZ4KyssdigicGVyY2VudCByb290IikmJngrKzt2YXIgXz14PjE7aWYoeCl7dmFyIHcsVD1mdW5jdGlvbih0KXttPWIuZm9ybWF0UGVyY2VudCh3LGwpLF8mJihtKz0iIG9mICIrdCkseS5wdXNoKG0pfTt2KCJwZXJjZW50IHBhcmVudCIpJiYhaCYmKHc9ZC9iLmdldFZhbHVlKHApLFQoInBhcmVudCIpKSx2KCJwZXJjZW50IGVudHJ5IikmJih3PWQvYi5nZXRWYWx1ZShlKSxUKCJlbnRyeSIpKSx2KCJwZXJjZW50IHJvb3QiKSYmKHc9ZC9iLmdldFZhbHVlKGYpLFQoInJvb3QiKSl9fXJldHVybiB2KCJ0ZXh0IikmJihtPXMuY2FzdE9wdGlvbihyLHUuaSwidGV4dCIpLHMuaXNWYWxpZFRleHRWYWx1ZShtKSYmeS5wdXNoKG0pKSx5LmpvaW4oIjxicj4iKX12YXIgaz1zLmNhc3RPcHRpb24ocix1LmksInRleHR0ZW1wbGF0ZSIpO2lmKCFrKXJldHVybiIiO3ZhciBBPXt9O3UubGFiZWwmJihBLmxhYmVsPXUubGFiZWwpLHUuaGFzT3duUHJvcGVydHkoInYiKSYmKEEudmFsdWU9dS52LEEudmFsdWVMYWJlbD1iLmZvcm1hdFZhbHVlKHUudixsKSksQS5jdXJyZW50UGF0aD1iLmdldFBhdGgodC5kYXRhKSxofHwoQS5wZXJjZW50UGFyZW50PWQvYi5nZXRWYWx1ZShwKSxBLnBlcmNlbnRQYXJlbnRMYWJlbD1iLmZvcm1hdFBlcmNlbnQoQS5wZXJjZW50UGFyZW50LGwpLEEucGFyZW50PWIuZ2V0UHRMYWJlbChwKSksQS5wZXJjZW50RW50cnk9ZC9iLmdldFZhbHVlKGUpLEEucGVyY2VudEVudHJ5TGFiZWw9Yi5mb3JtYXRQZXJjZW50KEEucGVyY2VudEVudHJ5LGwpLEEuZW50cnk9Yi5nZXRQdExhYmVsKGUpLEEucGVyY2VudFJvb3Q9ZC9iLmdldFZhbHVlKGYpLEEucGVyY2VudFJvb3RMYWJlbD1iLmZvcm1hdFBlcmNlbnQoQS5wZXJjZW50Um9vdCxsKSxBLnJvb3Q9Yi5nZXRQdExhYmVsKGYpLHUuaGFzT3duUHJvcGVydHkoImNvbG9yIikmJihBLmNvbG9yPXUuY29sb3IpO3ZhciBNPXMuY2FzdE9wdGlvbihyLHUuaSwidGV4dCIpO3JldHVybihzLmlzVmFsaWRUZXh0VmFsdWUoTSl8fCIiPT09TSkmJihBLnRleHQ9TSksQS5jdXN0b21kYXRhPXMuY2FzdE9wdGlvbihyLHUuaSwiY3VzdG9tZGF0YSIpLHMudGV4dHRlbXBsYXRlU3RyaW5nKGssQSxpLl9kM2xvY2FsZSxBLHIuX21ldGF8fHt9KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vYmFyL3N0eWxlIjo2NjIsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiLi4vcGllL2hlbHBlcnMiOjkwNSwiLi4vcGllL3Bsb3QiOjkwOSwiLi9jb25zdGFudHMiOjEwNDgsIi4vZngiOjEwNTAsIi4vaGVscGVycyI6MTA1MSwiLi9zdHlsZSI6MTA1NiwiQHBsb3RseS9kMyI6NTgsImQzLWhpZXJhcmNoeSI6MTE1LCJkMy1pbnRlcnBvbGF0ZSI6MTE2fV0sMTA1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLG89IWUuY2hpbGRyZW4scz1uLmksbD1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS5jb2xvciIpfHxpLmRlZmF1bHRMaW5lLGM9YS5jYXN0T3B0aW9uKHIscywibWFya2VyLmxpbmUud2lkdGgiKXx8MDt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGMpLmNhbGwoaS5maWxsLG4uY29sb3IpLmNhbGwoaS5zdHJva2UsbCkuc3R5bGUoIm9wYWNpdHkiLG8/ci5sZWFmLm9wYWNpdHk6bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9zdW5idXJzdGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsInN1bmJ1cnN0IiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZSgib3BhY2l0eSIsci5vcGFjaXR5KSxlLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChzLHQscil9KSl9KSl9LHN0eWxlT25lOnN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vbGliIjo1MDMsIi4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiQHBsb3RseS9kMyI6NTh9XSwxMDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QifSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QifSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGY9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx6aG92ZXJmb3JtYXQ6YSgieiIpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGkoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb250b3Vyczp7eDp1KCkseTp1KCksejp1KCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxvcGFjaXR5c2NhbGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxpLnphdXRvLHt9KSx6bWluOmwoe30saS56bWluLHt9KSx6bWF4Omwoe30saS56bWF4LHt9KX0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pLCJjYWxjIiwibmVzdGVkIik7Zi54LmVkaXRUeXBlPWYueS5lZGl0VHlwZT1mLnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGYudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6MzczLCIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjUzNiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzN9XSwxMDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6Mzc0fV0sMTA1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5nbF9zdXJmYWNlM2QsaT10KCIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiKS5uZGFycmF5LGE9dCgiLi4vLi4vLi4vc3RhY2tnbF9tb2R1bGVzIikubmRhcnJheV9saW5lYXJfaW50ZXJwb2xhdGUuZDIsbz10KCIuLi9oZWF0bWFwL2ludGVycDJkIikscz10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGw9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsdT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztmdW5jdGlvbiBoKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLnN1cmZhY2U9ZSx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPVshMSwhMSwhMV0sdGhpcy5jb250b3VyU3RhcnQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJFbmQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJTaXplPVswLDAsMF0sdGhpcy5taW5WYWx1ZXM9WzEvMCwxLzAsMS8wXSx0aGlzLm1heFZhbHVlcz1bLTEvMCwtMS8wLC0xLzBdLHRoaXMuZGF0YVNjYWxlWD0xLHRoaXMuZGF0YVNjYWxlWT0xLHRoaXMucmVmaW5lRGF0YT0hMCx0aGlzLm9iamVjdE9mZnNldD1bMCwwLDBdfXZhciBwPWgucHJvdG90eXBlO3AuZ2V0WGF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLngpP2wodGhpcy5kYXRhLnhbMF0pP3RoaXMuZGF0YS54W2VdW3RdOnRoaXMuZGF0YS54W3RdOnQ7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WWF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLnkpP2wodGhpcy5kYXRhLnlbMF0pP3RoaXMuZGF0YS55W2VdW3RdOnRoaXMuZGF0YS55W2VdOmU7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WmF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZGF0YS56W2VdW3RdO3JldHVybiBudWxsPT09aSYmdGhpcy5kYXRhLmNvbm5lY3RnYXBzJiZ0aGlzLmRhdGEuX2ludGVycG9sYXRlZFomJihpPXRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWltlXVt0XSksdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5zdXJmYWNlKXt2YXIgZT0odC5kYXRhLmluZGV4WzBdLTEpL3RoaXMuZGF0YVNjYWxlWC0xLHI9KHQuZGF0YS5pbmRleFsxXS0xKS90aGlzLmRhdGFTY2FsZVktMSxuPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQoZSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLDApLGk9TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChyKSx0aGlzLmRhdGEuX3lsZW5ndGgtMSksMCk7dC5pbmRleD1bbixpXSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpKSx0aGlzLmdldFlhdChuLGkpLHRoaXMuZ2V0WmF0KG4saSldLHQuZGF0YUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSx0aGlzLmRhdGEueGNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnhheGlzKSx0aGlzLmdldFlhdChuLGksdGhpcy5kYXRhLnljYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC55YXhpcyksdGhpcy5nZXRaYXQobixpLHRoaXMuZGF0YS56Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQuemF4aXMpXTtmb3IodmFyIGE9MDthPDM7YSsrKXt2YXIgbz10LmRhdGFDb29yZGluYXRlW2FdO251bGwhPW8mJih0LmRhdGFDb29yZGluYXRlW2FdKj10aGlzLnNjZW5lLmRhdGFTY2FsZVthXSl9dmFyIHM9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocykmJnNbaV0mJnZvaWQgMCE9PXNbaV1bbl0/dC50ZXh0TGFiZWw9c1tpXVtuXTp0LnRleHRMYWJlbD1zfHwiIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBkPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gbSh0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciBuPWRbcl07ZS5wdXNoKG0odCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9Zyh0KSxyPXQsbj0wO248ZC5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1kW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHkodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPWcodCksbj1nKGUpLGk9MSxhPTA7YTxkLmxlbmd0aDthKyspaSo9TWF0aC5wb3coZFthXSxNYXRoLm1heChyW2FdLG5bYV0pKTtyZXR1cm4gaX19cC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxpPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfSxwLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGk9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciB4PVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLGI9eFs5XSxfPXhbMTNdO2Z1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXJbOF0rclsyXSplWzBdK3JbNV0qZVsxXTtyZXR1cm4gdFswXT0ocls2XStyWzBdKmVbMF0rclszXSplWzFdKS9uLHRbMV09KHJbN10rclsxXSplWzBdK3JbNF0qZVsxXSkvbix0fWZ1bmN0aW9uIFQodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9WzAsMF0sbz10LnNoYXBlWzBdLHM9dC5zaGFwZVsxXSxsPTA7bDxvO2wrKylmb3IodmFyIGM9MDtjPHM7YysrKXIoaSxbbCxjXSxuKSx0LnNldChsLGMsYShlLGlbMF0saVsxXSkpfSh0LGUsdyxyKSx0fWZ1bmN0aW9uIGsodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfXAuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eShlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Yjspcio9Mjtmb3IoO3I+Xzspci0tLHIvPXYociksKytyPGImJihyPV8pO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0scC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sYT10WzBdLnNoYXBlWzFdLG89MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksbD0xK24rMSxjPTErYSsxLHU9aShuZXcgRmxvYXQzMkFycmF5KGwqYyksW2wsY10pLGY9WzEvZSwwLDAsMCwxL3IsMCwwLDAsMV0saD0wO2g8dC5sZW5ndGg7KytoKXt0aGlzLnN1cmZhY2UucGFkRmllbGQodSx0W2hdKTt2YXIgcD1pKG5ldyBGbG9hdDMyQXJyYXkobypzKSxbbyxzXSk7VChwLHUsZiksdFtoXT1wfX0scC5zZXRDb250b3VyTGV2ZWxzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49W1tdLFtdLFtdXSxpPVshMSwhMSwhMV0sYT0hMTtmb3IodD0wO3Q8MzsrK3QpaWYodGhpcy5zaG93Q29udG91clt0XSYmKGE9ITAsdGhpcy5jb250b3VyU2l6ZVt0XT4wJiZudWxsIT09dGhpcy5jb250b3VyU3RhcnRbdF0mJm51bGwhPT10aGlzLmNvbnRvdXJFbmRbdF0mJnRoaXMuY29udG91ckVuZFt0XT50aGlzLmNvbnRvdXJTdGFydFt0XSkpZm9yKGlbdF09ITAsZT10aGlzLmNvbnRvdXJTdGFydFt0XTtlPHRoaXMuY29udG91ckVuZFt0XTtlKz10aGlzLmNvbnRvdXJTaXplW3RdKXI9ZSp0aGlzLnNjZW5lLmRhdGFTY2FsZVt0XSxrKG5bdF0scik7aWYoYSl7dmFyIG89W1tdLFtdLFtdXTtmb3IodD0wO3Q8MzsrK3QpdGhpcy5zaG93Q29udG91clt0XSYmKG9bdF09aVt0XT9uW3RdOnRoaXMuc2NlbmUuY29udG91ckxldmVsc1t0XSk7dGhpcy5zdXJmYWNlLnVwZGF0ZSh7bGV2ZWxzOm99KX19LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGw9dGhpcy5zY2VuZSxoPWwuZnVsbFNjZW5lTGF5b3V0LHA9dGhpcy5zdXJmYWNlLGQ9Yyh0KSxtPWwuZGF0YVNjYWxlLGc9dC56WzBdLmxlbmd0aCx2PXQuX3lsZW5ndGgseT1sLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIHg9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcih4W2VdPVtdLHI9MDtyPGc7cisrKXhbZV1bcl09W107Zm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyl4WzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixoLnhheGlzKSx4WzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixoLnlheGlzKSx4WzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixoLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1zKHhbMl0pLG8oeFsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxnO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx2O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPXhbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbD09KGE9eFtlXVtyXVtuXSk/eFtlXVtyXVtuXT1OYU46YT14W2VdW3JdW25dKj1tW2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKW51bGwhPShhPXhbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbCE9KGE9eFtlXVtyXVtuXSkmJih4W2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIGI9W2kobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKSxpKG5ldyBGbG9hdDMyQXJyYXkoZyp2KSxbZyx2XSksaShuZXcgRmxvYXQzMkFycmF5KGcqdiksW2csdl0pXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyliW2VdLnNldChyLG4seFtlXVtyXVtuXSk7eD1bXTt2YXIgdz17Y29sb3JtYXA6ZCxsZXZlbHM6W1tdLFtdLFtdXSxzaG93Q29udG91cjpbITAsITAsITBdLHNob3dTdXJmYWNlOiF0LmhpZGVzdXJmYWNlLGNvbnRvdXJQcm9qZWN0OltbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sY29udG91cldpZHRoOlsxLDEsMV0sY29udG91ckNvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sY29udG91clRpbnQ6WzEsMSwxXSxkeW5hbWljQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxkeW5hbWljV2lkdGg6WzEsMSwxXSxkeW5hbWljVGludDpbMSwxLDFdLG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxvcGFjaXR5OnQub3BhY2l0eX0sVD1mKHQpO2lmKHcuaW50ZW5zaXR5Qm91bmRzPVtULm1pbixULm1heF0sdC5zdXJmYWNlY29sb3Ipe3ZhciBrPWkobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKTtmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKWsuc2V0KHIsbix0LnN1cmZhY2Vjb2xvcltuXVtyXSk7Yi5wdXNoKGspfWVsc2Ugdy5pbnRlbnNpdHlCb3VuZHNbMF0qPW1bMl0sdy5pbnRlbnNpdHlCb3VuZHNbMV0qPW1bMl07KF88YlswXS5zaGFwZVswXXx8XzxiWzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKGJbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZShiWzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKGIpKSx0LnN1cmZhY2Vjb2xvciYmKHcuaW50ZW5zaXR5PWIucG9wKCkpO3ZhciBBPVshMCwhMCwhMF0sTT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFM9dC5jb250b3Vyc1tNW2VdXTtBW2VdPVMuaGlnaGxpZ2h0LHcuc2hvd0NvbnRvdXJbZV09Uy5zaG93fHxTLmhpZ2hsaWdodCx3LnNob3dDb250b3VyW2VdJiYody5jb250b3VyUHJvamVjdFtlXT1bUy5wcm9qZWN0LngsUy5wcm9qZWN0LnksUy5wcm9qZWN0LnpdLFMuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCx3LmxldmVsc1tlXT15W2VdLHAuaGlnaGxpZ2h0Q29sb3JbZV09dy5jb250b3VyQ29sb3JbZV09dShTLmNvbG9yKSxTLnVzZWNvbG9ybWFwP3AuaGlnaGxpZ2h0VGludFtlXT13LmNvbnRvdXJUaW50W2VdPTA6cC5oaWdobGlnaHRUaW50W2VdPXcuY29udG91clRpbnRbZV09MSx3LmNvbnRvdXJXaWR0aFtlXT1TLndpZHRoLHRoaXMuY29udG91clN0YXJ0W2VdPVMuc3RhcnQsdGhpcy5jb250b3VyRW5kW2VdPVMuZW5kLHRoaXMuY29udG91clNpemVbZV09Uy5zaXplKToodGhpcy5zaG93Q29udG91cltlXT0hMSx0aGlzLmNvbnRvdXJTdGFydFtlXT1udWxsLHRoaXMuY29udG91ckVuZFtlXT1udWxsLHRoaXMuY29udG91clNpemVbZV09MCksUy5oaWdobGlnaHQmJih3LmR5bmFtaWNDb2xvcltlXT11KFMuaGlnaGxpZ2h0Y29sb3IpLHcuZHluYW1pY1dpZHRoW2VdPVMuaGlnaGxpZ2h0d2lkdGgpKX0oZnVuY3Rpb24odCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119KShkKSYmKHcudmVydGV4Q29sb3I9ITApLHcub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHcuY29vcmRzPWIscC51cGRhdGUodykscC52aXNpYmxlPXQudmlzaWJsZSxwLmVuYWJsZUR5bmFtaWM9QSxwLmVuYWJsZUhpZ2hsaWdodD1BLHAuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgaCh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi8uLi9zdGFja2dsX21vZHVsZXMiOjExMjAsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6Mzc4LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NDk5LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo1MjgsIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIjo3OTgsIi4uL2hlYXRtYXAvaW50ZXJwMmQiOjgwMX1dLDEwNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPW4oIm9wYWNpdHlzY2FsZSIpOyJtYXgiPT09aT9lLm9wYWNpdHlzY2FsZT1bWzAsLjFdLFsxLDFdXToibWluIj09PWk/ZS5vcGFjaXR5c2NhbGU9W1swLDFdLFsxLC4xXV06ImV4dHJlbWVzIj09PWk/ZS5vcGFjaXR5c2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248MzI7bisrKXt2YXIgaT1uLzMxLGE9ZSsoMS1lKSooMS1NYXRoLnBvdyhNYXRoLnNpbih0KmkqTWF0aC5QSSksMikpO3IucHVzaChbaSxNYXRoLm1heCgwLE1hdGgubWluKDEsYSkpXSl9cmV0dXJuIHJ9KDEsLjEpOmZ1bmN0aW9uKHQpe3ZhciBlPTA7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDIpcmV0dXJuITE7aWYoIXRbMF18fCF0W3QubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPSt0WzBdWzBdfHwxIT0rdFt0Lmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZigyIT09bi5sZW5ndGh8fCtuWzBdPGUpcmV0dXJuITE7ZT0rblswXX1yZXR1cm4hMH0oaSl8fChlLm9wYWNpdHlzY2FsZT12b2lkIDApfWZ1bmN0aW9uIGwodCxlLHIpe2UgaW4gdCYmIShyIGluIHQpJiYodFtyXT10W2VdKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1LGY7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBwPWgoIngiKSxkPWgoInkiKSxtPWgoInoiKTtpZighbXx8IW0ubGVuZ3RofHxwJiZwLmxlbmd0aDwxfHxkJiZkLmxlbmd0aDwxKWUudmlzaWJsZT0hMTtlbHNle2UuX3hsZW5ndGg9QXJyYXkuaXNBcnJheShwKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KHBbMF0pP20ubGVuZ3RoOm1bMF0ubGVuZ3RoLGUuX3lsZW5ndGg9bS5sZW5ndGgsbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxjKSxoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpLGgoInhob3ZlcmZvcm1hdCIpLGgoInlob3ZlcmZvcm1hdCIpLGgoInpob3ZlcmZvcm1hdCIpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsImNvbm5lY3RnYXBzIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2godCl9KSk7dmFyIGc9aCgic3VyZmFjZWNvbG9yIiksdj1bIngiLCJ5IiwieiJdO2Zvcih1PTA7dTwzOysrdSl7dmFyIHk9ImNvbnRvdXJzLiIrdlt1XSx4PWgoeSsiLnNob3ciKSxiPWgoeSsiLmhpZ2hsaWdodCIpO2lmKHh8fGIpZm9yKGY9MDtmPDM7KytmKWgoeSsiLnByb2plY3QuIit2W2ZdKTt4JiYoaCh5KyIuY29sb3IiKSxoKHkrIi53aWR0aCIpLGgoeSsiLnVzZWNvbG9ybWFwIikpLGImJihoKHkrIi5oaWdobGlnaHRjb2xvciIpLGgoeSsiLmhpZ2hsaWdodHdpZHRoIikpLGgoeSsiLnN0YXJ0IiksaCh5KyIuZW5kIiksaCh5KyIuc2l6ZSIpfWd8fChsKHQsInptaW4iLCJjbWluIiksbCh0LCJ6bWF4IiwiY21heCIpLGwodCwiemF1dG8iLCJjYXV0byIpKSxhKHQsZSxjLGgse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHModCxlLGMsaCksZS5fbGVuZ3RoPW51bGx9fSxvcGFjaXR5c2NhbGVEZWZhdWx0czpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjM3NiwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3JlZ2lzdHJ5Ijo2MzgsIi4vYXR0cmlidXRlcyI6MTA1N31dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1cmZhY2UiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsIjJkTWFwIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjU5OCwiLi9hdHRyaWJ1dGVzIjoxMDU3LCIuL2NhbGMiOjEwNTgsIi4vY29udmVydCI6MTA1OSwiLi9kZWZhdWx0cyI6MTA2MH1dLDEwNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVyczsoZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOiJ0YWJsZSIsdHJhY2U6ITB9KSxjb2x1bW53aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGRlc2NyaXB0aW9uOmwoImNlbGwgdmFsdWUiKX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjI4fSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfSxjZWxsczp7dmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZGVzY3JpcHRpb246bCgiY2VsbCB2YWx1ZSIpfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MjB9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoiZ3JleSJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoid2hpdGUifX0sZm9udDppKHt9LG8oe2FycmF5T2s6ITB9KSl9fSwiY2FsYyIsImZyb20tcm9vdCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjM0OSwiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo1MzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NTg0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjU4NX1dLDEwNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0idGFibGUiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uKHQuY2FsY2RhdGEsInRhYmxlIilbMF07ZS5sZW5ndGgmJmkodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygidGFibGUiKSxhPWUuX2hhcyYmZS5faGFzKCJ0YWJsZSIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi50YWJsZSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NTkzLCIuL3Bsb3QiOjEwNzB9XSwxMDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBuKHt9KX19LHsiLi4vLi4vbGliL2d1cCI6NTAwfV0sMTA2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NlbGxQYWQ6OCxjb2x1bW5FeHRlbnRPZmZzZXQ6MTAsY29sdW1uVGl0bGVPZmZzZXQ6MjgsZW1wdHlIZWFkZXJIZWlnaHQ6MTYsbGF0ZXhDaGVjazovXlwkLipcJCQvLGdvbGRlblJhdGlvOjEuNjE4LGxpbmVCcmVha2VyOiI8YnI+IixtYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSxyZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uOjEyMCxyZWxlYXNlVHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoOjE4LHNjcm9sbGJhckhpZGVEZWxheToxZTMsc2Nyb2xsYmFySGlkZUR1cmF0aW9uOjFlMyxzY3JvbGxiYXJPZmZzZXQ6NSxzY3JvbGxiYXJXaWR0aDo4LHRyYW5zaXRpb25EdXJhdGlvbjoxMDAsdHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsdXBsaWZ0OjUsd3JhcFNwYWNlcjoiICIsd3JhcFNwbGl0Q2hhcmFjdGVyOiIgIixjbjp7dGFibGU6InRhYmxlIix0YWJsZUNvbnRyb2xWaWV3OiJ0YWJsZS1jb250cm9sLXZpZXciLHNjcm9sbEJhY2tncm91bmQ6InNjcm9sbC1iYWNrZ3JvdW5kIix5Q29sdW1uOiJ5LWNvbHVtbiIsY29sdW1uQmxvY2s6ImNvbHVtbi1ibG9jayIsc2Nyb2xsQXJlYUNsaXA6InNjcm9sbC1hcmVhLWNsaXAiLHNjcm9sbEFyZWFDbGlwUmVjdDoic2Nyb2xsLWFyZWEtY2xpcC1yZWN0Iixjb2x1bW5Cb3VuZGFyeToiY29sdW1uLWJvdW5kYXJ5Iixjb2x1bW5Cb3VuZGFyeUNsaXBwYXRoOiJjb2x1bW4tYm91bmRhcnktY2xpcHBhdGgiLGNvbHVtbkJvdW5kYXJ5UmVjdDoiY29sdW1uLWJvdW5kYXJ5LXJlY3QiLGNvbHVtbkNlbGxzOiJjb2x1bW4tY2VsbHMiLGNvbHVtbkNlbGw6ImNvbHVtbi1jZWxsIixjZWxsUmVjdDoiY2VsbC1yZWN0IixjZWxsVGV4dDoiY2VsbC10ZXh0IixjZWxsVGV4dEhvbGRlcjoiY2VsbC10ZXh0LWhvbGRlciIsc2Nyb2xsYmFyS2l0OiJzY3JvbGxiYXIta2l0IixzY3JvbGxiYXI6InNjcm9sbGJhciIsc2Nyb2xsYmFyU2xpZGVyOiJzY3JvbGxiYXItc2xpZGVyIixzY3JvbGxiYXJHbHlwaDoic2Nyb2xsYmFyLWdseXBoIixzY3JvbGxiYXJDYXB0dXJlWm9uZToic2Nyb2xsYmFyLWNhcHR1cmUtem9uZSJ9fX0se31dLDEwNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBvKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllPU1hdGgubWF4KGUsbyh0W3JdKSk7cmV0dXJuIGV9cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0K2V9ZnVuY3Rpb24gbCh0KXt2YXIgZSxyPXQuc2xpY2UoKSxuPTEvMCxpPTA7Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylBcnJheS5pc0FycmF5KHJbZV0pfHwocltlXT1bcltlXV0pLG49TWF0aC5taW4obixyW2VdLmxlbmd0aCksaT1NYXRoLm1heChpLHJbZV0ubGVuZ3RoKTtpZihuIT09aSlmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgYT1pLXJbZV0ubGVuZ3RoO2EmJihyW2VdPXJbZV0uY29uY2F0KGMoYSkpKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0iIjtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LmNhbGNkYXRhLmNvbHVtbnMucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiByLnhJbmRleDx0LnhJbmRleD9lK3IuY29sdW1uV2lkdGg6ZX0pLDApfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gaSh7fSx0W3JdLHthdXhpbGlhcnlCbG9ja3M6ZX0pfSkpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHIsbj17fSxpPTAsYT0wLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxzPTAsbD0wLGM9MDtjPHQubGVuZ3RoO2MrKylyPXRbY10sby5yb3dzLnB1c2goe3Jvd0luZGV4OmMscm93SGVpZ2h0OnJ9KSwoKGErPXIpPj1lfHxjPT09dC5sZW5ndGgtMSkmJihuW2ldPW8sby5rZXk9bCsrLG8uZmlyc3RSb3dJbmRleD1zLG8ubGFzdFJvd0luZGV4PWMsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LGkrPWEscz1jKzEsYT0wKTtyZXR1cm4gbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKGUuY2VsbHMudmFsdWVzKSxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKGUuaGVhZGVyLnZhbHVlcy5sZW5ndGgsdC5sZW5ndGgpfSxkPWwoZS5oZWFkZXIudmFsdWVzKTtkLmxlbmd0aCYmIWRbMF0ubGVuZ3RoJiYoZFswXT1bIiJdLGQ9bChkKSk7dmFyIG09ZC5jb25jYXQocChyKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGMoKGRbMF18fFsiIl0pLmxlbmd0aCl9KSkpLGc9ZS5kb21haW4sdj1NYXRoLmZsb29yKHQuX2Z1bGxMYXlvdXQuX3NpemUudyooZy54WzFdLWcueFswXSkpLHk9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKGcueVsxXS1nLnlbMF0pKSx4PWUuaGVhZGVyLnZhbHVlcy5sZW5ndGg/bVswXS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGVhZGVyLmhlaWdodH0pKTpbbi5lbXB0eUhlYWRlckhlaWdodF0sYj1yLmxlbmd0aD9yWzBdLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jZWxscy5oZWlnaHR9KSk6W10sXz14LnJlZHVjZShzLDApLHc9aChiLHktXytuLnVwbGlmdCksVD1mKGgoeCxfKSxbXSksaz1mKHcsVCksQT17fSxNPWUuX2Z1bGxJbnB1dC5jb2x1bW5vcmRlci5jb25jYXQocChyLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSkpLFM9bS5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49QXJyYXkuaXNBcnJheShlLmNvbHVtbndpZHRoKT9lLmNvbHVtbndpZHRoW01hdGgubWluKHIsZS5jb2x1bW53aWR0aC5sZW5ndGgtMSldOmUuY29sdW1ud2lkdGg7cmV0dXJuIGEobik/TnVtYmVyKG4pOjF9KSksRT1TLnJlZHVjZShzLDApO1M9Uy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0L0Uqdn0pKTt2YXIgTD1NYXRoLm1heChvKGUuaGVhZGVyLmxpbmUud2lkdGgpLG8oZS5jZWxscy5saW5lLndpZHRoKSksQz17a2V5OmUudWlkK3QuX2NvbnRleHQuc3RhdGljUGxvdCx0cmFuc2xhdGVYOmcueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtZy55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6dixtYXhMaW5lV2lkdGg6TCxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpNLGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOmssaGVhZGVyUm93QmxvY2tzOlQsc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6bX0pLGdkQ29sdW1uczptLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjptLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkscHJldlBhZ2VzOlswLDBdLHNjcm9sbGJhclN0YXRlOntzY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzOiExfSxjb2x1bW5zOm0ubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPUFbdF07cmV0dXJuIEFbdF09KHJ8fDApKzEse2tleTp0KyJfXyIrQVt0XSxsYWJlbDp0LHNwZWNJbmRleDplLHhJbmRleDpNW2VdLHhTY2FsZTp1LHg6dm9pZCAwLGNhbGNkYXRhOnZvaWQgMCxjb2x1bW5XaWR0aDpTW2VdfX0pKX07cmV0dXJuIEMuY29sdW1ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNhbGNkYXRhPUMsdC54PXUodCl9KSksQ319LHsiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuL2NvbnN0YW50cyI6MTA2NSwiZmFzdC1pc251bWVyaWMiOjE5MH1dLDEwNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ci5zcGxpdFRvUGFuZWxzPWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdLHI9bih7fSx0LHtrZXk6ImhlYWRlciIsdHlwZToiaGVhZGVyIixwYWdlOjAscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMCx2YWx1ZXM6dC5jYWxjZGF0YS5oZWFkZXJDZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLmhlYWRlclJvd0Jsb2NrcyxjYWxjZGF0YTpuKHt9LHQuY2FsY2RhdGEse2NlbGxzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHN9KX0pO3JldHVybltuKHt9LHQse2tleToiY2VsbHMxIix0eXBlOiJjZWxscyIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxuKHt9LHQse2tleToiY2VsbHMyIix0eXBlOiJjZWxscyIscGFnZToxLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITEsdmFsdWVzOnQuY2FsY2RhdGEuY2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5yb3dCbG9ja3N9KSxyXX0sci5zcGxpdFRvQ2VsbHM9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3NbdC5wYWdlXSxyPWU/ZS5yb3dzWzBdLnJvd0luZGV4OjAsbj1lP3IrZS5yb3dzLmxlbmd0aDowO3JldHVybltyLG5dfSh0KTtyZXR1cm4odC52YWx1ZXN8fFtdKS5zbGljZShlWzBdLGVbMV0pLm1hcCgoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoInN0cmluZyI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/Il9rZXlidXN0ZXJfIitNYXRoLnJhbmRvbSgpOiIiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTN9XSwxMDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEoZSxvLHMpLHMoImNvbHVtbndpZHRoIikscygiaGVhZGVyLnZhbHVlcyIpLHMoImhlYWRlci5mb3JtYXQiKSxzKCJoZWFkZXIuYWxpZ24iKSxzKCJoZWFkZXIucHJlZml4IikscygiaGVhZGVyLnN1ZmZpeCIpLHMoImhlYWRlci5oZWlnaHQiKSxzKCJoZWFkZXIubGluZS53aWR0aCIpLHMoImhlYWRlci5saW5lLmNvbG9yIikscygiaGVhZGVyLmZpbGwuY29sb3IiKSxuLmNvZXJjZUZvbnQocywiaGVhZGVyLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvbHVtbm9yZGVyfHxbXSxuPXQuaGVhZGVyLnZhbHVlcy5sZW5ndGgsaT1yLnNsaWNlKDAsbiksYT1pLnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLG89aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBhLmluZGV4T2YodCl9KSkscz1vLmxlbmd0aDtzPG47cysrKW8ucHVzaChzKTtlKCJjb2x1bW5vcmRlciIsbyl9KGUscykscygiY2VsbHMudmFsdWVzIikscygiY2VsbHMuZm9ybWF0IikscygiY2VsbHMuYWxpZ24iKSxzKCJjZWxscy5wcmVmaXgiKSxzKCJjZWxscy5zdWZmaXgiKSxzKCJjZWxscy5oZWlnaHQiKSxzKCJjZWxscy5saW5lLndpZHRoIikscygiY2VsbHMubGluZS5jb2xvciIpLHMoImNlbGxzLmZpbGwuY29sb3IiKSxuLmNvZXJjZUZvbnQocywiY2VsbHMuZm9udCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9saWIiOjUwMywiLi4vLi4vcGxvdHMvZG9tYWluIjo1ODQsIi4vYXR0cmlidXRlcyI6MTA2Mn1dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InRhYmxlIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJub09wYWNpdHkiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjEwNjIsIi4vYmFzZV9wbG90IjoxMDYzLCIuL2NhbGMiOjEwNjQsIi4vZGVmYXVsdHMiOjEwNjgsIi4vcGxvdCI6MTA3MH1dLDEwNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIkBwbG90bHkvZDMiKSxhPXQoIi4uLy4uL2xpYiIpLm51bWJlckZvcm1hdCxvPXQoIi4uLy4uL2xpYi9ndXAiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9saWIiKS5yYWlzZVRvVG9wLHU9dCgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vbGliIikuY2FuY2VsVHJhbnNpdGlvbixoPXQoIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiKSxwPXQoIi4vZGF0YV9zcGxpdF9oZWxwZXJzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gTWF0aC5jZWlsKHQuY2FsY2RhdGEubWF4TGluZVdpZHRoLzIpfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4iY2xpcCIrdC5fZnVsbExheW91dC5fdWlkKyJfc2Nyb2xsQXJlYUJvdHRvbUNsaXBfIitlLmtleX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCsiX2NvbHVtbkJvdW5kYXJ5Q2xpcHBhdGhfIitlLmNhbGNkYXRhLmtleSsiXyIrZS5zcGVjSW5kZXh9ZnVuY3Rpb24geSh0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fZGF0YV9ffSkpfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBhPXQuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhcktpdCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJLaXQsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxhLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsYmFyU3RhdGU7ZS50b3RhbEhlaWdodD1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2NrcztyZXR1cm4gRChlLGUubGVuZ3RoLTEpKyhlLmxlbmd0aD9SKGVbZS5sZW5ndGgtMV0sMS8wKToxKX0odCksZS5zY3JvbGxhYmxlQXJlYUhlaWdodD10Lmdyb3VwSGVpZ2h0LVModCksZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0PU1hdGgubWluKGUudG90YWxIZWlnaHQsZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS5yYXRpbz1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQvZS50b3RhbEhlaWdodCxlLmJhckxlbmd0aD1NYXRoLm1heChlLnJhdGlvKmUuY3VycmVudGx5VmlzaWJsZUhlaWdodCxuLmdvbGRlblJhdGlvKm4uc2Nyb2xsYmFyV2lkdGgpLGUuYmFyV2lnZ2xlUm9vbT1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQtZS5iYXJMZW5ndGgsZS53aWdnbGVSb29tPU1hdGgubWF4KDAsZS50b3RhbEhlaWdodC1lLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnRvcFk9MD09PWUuYmFyV2lnZ2xlUm9vbT8wOnQuc2Nyb2xsWS9lLndpZ2dsZVJvb20qZS5iYXJXaWdnbGVSb29tLGUuYm90dG9tWT1lLnRvcFkrZS5iYXJMZW5ndGgsZS5kcmFnTXVsdGlwbGllcj1lLndpZ2dsZVJvb20vZS5iYXJXaWdnbGVSb29tfSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXQud2lkdGgrbi5zY3JvbGxiYXJXaWR0aC8yK24uc2Nyb2xsYmFyT2Zmc2V0O3JldHVybiB1KGUsUyh0KSl9KSk7dmFyIHM9YS5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhciwhMCk7dmFyIGw9cy5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyU2xpZGVyKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhclNsaWRlciwhMCksbC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSgwLHQuc2Nyb2xsYmFyU3RhdGUudG9wWXx8MCl9KSk7dmFyIGM9bC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyR2x5cGgpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyR2x5cGgsITApLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhcldpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigieTEiLG4uc2Nyb2xsYmFyV2lkdGgvMiksYy5hdHRyKCJ5MiIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLmJhckxlbmd0aC1uLnNjcm9sbGJhcldpZHRoLzJ9KSkuYXR0cigic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5EcmFnSW5Qcm9ncmVzc3x8IXQuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbXx8cj8wOi40fSkpLGMudHJhbnNpdGlvbigpLmRlbGF5KDApLmR1cmF0aW9uKDApLGMudHJhbnNpdGlvbigpLmRlbGF5KG4uc2Nyb2xsYmFySGlkZURlbGF5KS5kdXJhdGlvbihuLnNjcm9sbGJhckhpZGVEdXJhdGlvbikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApO3ZhciBmPXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckNhcHR1cmVab25lKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtmLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckNhcHR1cmVab25lLCEwKS5hdHRyKCJzdHJva2UiLCJ3aGl0ZSIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMDEpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJDYXB0dXJlV2lkdGgpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLmF0dHIoInkxIiwwKS5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24ocil7dmFyIG49aS5ldmVudC55LGE9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXIuc2Nyb2xsYmFyU3RhdGUscz1uLWEudG9wLGw9aS5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsby5zY3JvbGxhYmxlQXJlYUhlaWdodF0pLnJhbmdlKFswLG8udG90YWxIZWlnaHRdKS5jbGFtcCghMCk7by50b3BZPD1zJiZzPD1vLmJvdHRvbVl8fEwoZSx0LG51bGwsbChzLW8uYmFyTGVuZ3RoLzIpKShyKX0pKS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJuIGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzPSEwLHR9KSkub24oImRyYWciLEwoZSx0KSkub24oImRyYWdlbmQiLChmdW5jdGlvbigpe30pKSksZi5hdHRyKCJ5MiIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGFibGVBcmVhSGVpZ2h0fSkpLGUuX2NvbnRleHQuc3RhdGljUGxvdCYmKGMucmVtb3ZlKCksZi5yZW1vdmUoKSl9ZnVuY3Rpb24gYih0LGUscixhKXt2YXIgbD1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxsKS5kYXRhKHAuc3BsaXRUb0NlbGxzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5DZWxsLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxscykuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbHMsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KHIpKTshZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0LGUpe3ZhciByPXQuY2FsY2RhdGEuY2VsbHMuZm9udCxuPXQuY29sdW1uLnNwZWNJbmRleCxpPXtzaXplOlQoci5zaXplLG4sZSksY29sb3I6VChyLmNvbG9yLG4sZSksZmFtaWx5OlQoci5mYW1pbHksbixlKX07dC5yb3dOdW1iZXI9dC5rZXksdC5hbGlnbj1UKHQuY2FsY2RhdGEuY2VsbHMuYWxpZ24sbixlKSx0LmNlbGxCb3JkZXJXaWR0aD1UKHQuY2FsY2RhdGEuY2VsbHMubGluZS53aWR0aCxuLGUpLHQuZm9udD1pfSkpfShsKSxmdW5jdGlvbih0KXt0LmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRofSkpLmF0dHIoInN0cm9rZS13aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNlbGxCb3JkZXJXaWR0aH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKTtkLnN0cm9rZShlLFQodC5jYWxjZGF0YS5jZWxscy5saW5lLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpLGQuZmlsbChlLFQodC5jYWxjZGF0YS5jZWxscy5maWxsLmNvbG9yLHQuY29sdW1uLnNwZWNJbmRleCx0LnJvd051bWJlcikpfSkpfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsUmVjdCkuZGF0YShvLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uY2VsbFJlY3QsITApLGV9KGwpKTt2YXIgYz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dCkuZGF0YShvLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKG4uY24uY2VsbFRleHQsITApLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbigpe3JldHVybiJhdXRvIn0pKS5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24oKXtpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkpLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5kYXRhKG8ucmVwZWF0LChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jZWxsVGV4dEhvbGRlciwhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLGV9KGwpKTshZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0KXtzLmZvbnQoaS5zZWxlY3QodGhpcyksdC5mb250KX0pKX0oYyksXyhjLGUsYSx0KSx6KGwpfWZ1bmN0aW9uIF8odCxlLHIsbyl7dC50ZXh0KChmdW5jdGlvbih0KXt2YXIgZT10LmNvbHVtbi5zcGVjSW5kZXgscj10LnJvd051bWJlcixpPXQudmFsdWUsbz0ic3RyaW5nIj09dHlwZW9mIGkscz1vJiZpLm1hdGNoKC88YnI+L2kpLGw9IW98fHM7dC5tYXlIYXZlTWFya3VwPW8mJmkubWF0Y2goL1s8Jj5dLyk7dmFyIGMsdT0ic3RyaW5nIj09dHlwZW9mKGM9aSkmJmMubWF0Y2gobi5sYXRleENoZWNrKTt0LmxhdGV4PXU7dmFyIGYsaCxwPXU/IiI6VCh0LmNhbGNkYXRhLmNlbGxzLnByZWZpeCxlLHIpfHwiIixkPXU/IiI6VCh0LmNhbGNkYXRhLmNlbGxzLnN1ZmZpeCxlLHIpfHwiIixtPXU/bnVsbDpUKHQuY2FsY2RhdGEuY2VsbHMuZm9ybWF0LGUscil8fG51bGwsZz1wKyhtP2EobSkodC52YWx1ZSk6dC52YWx1ZSkrZDtpZih0LndyYXBwaW5nTmVlZGVkPSF0LndyYXBwZWQmJiFsJiYhdSYmKGY9dyhnKSksdC5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U9c3x8dXx8dC5tYXlIYXZlTWFya3VwfHwodm9pZCAwPT09Zj93KGcpOmYpLHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM9dC5tYXlIYXZlTWFya3VwfHx0LndyYXBwaW5nTmVlZGVkfHx0LmxhdGV4LHQud3JhcHBpbmdOZWVkZWQpe3ZhciB2PSgiICI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj9nLnJlcGxhY2UoLzxhIGhyZWY9L2dpLCI8YV9ocmVmPSIpOmcpLnNwbGl0KG4ud3JhcFNwbGl0Q2hhcmFjdGVyKSx5PSIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP3YubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC88YV9ocmVmPS9naSwiPGEgaHJlZj0iKX0pKTp2O3QuZnJhZ21lbnRzPXkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dGV4dDp0LHdpZHRoOm51bGx9fSkpLHQuZnJhZ21lbnRzLnB1c2goe2ZyYWdtZW50Om4ud3JhcFNwYWNlcix3aWR0aDpudWxsfSksaD15LmpvaW4obi5saW5lQnJlYWtlcikrbi5saW5lQnJlYWtlcituLndyYXBTcGFjZXJ9ZWxzZSBkZWxldGUgdC5mcmFnbWVudHMsaD1nO3JldHVybiBofSkpLmF0dHIoImR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM/MDoiMC43NWVtIn0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgYT1pLnNlbGVjdCh0aGlzKSxzPXQud3JhcHBpbmdOZWVkZWQ/UDpJO3QubmVlZHNDb252ZXJ0VG9Uc3BhbnM/bC5jb252ZXJ0VG9Uc3BhbnMoYSxvLHMocix0aGlzLGUsbyx0KSk6aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdShPKHQpLG4uY2VsbFBhZCl9KSkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm57bGVmdDoic3RhcnQiLGNlbnRlcjoibWlkZGxlIixyaWdodDoiZW5kIn1bdC5hbGlnbl19KSl9KSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihuLndyYXBTcGxpdENoYXJhY3Rlcil9ZnVuY3Rpb24gVCh0LGUscil7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49dFtNYXRoLm1pbihlLHQubGVuZ3RoLTEpXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uW01hdGgubWluKHIsbi5sZW5ndGgtMSldOm59cmV0dXJuIHR9ZnVuY3Rpb24gayh0LGUscil7dC50cmFuc2l0aW9uKCkuZWFzZShuLnJlbGVhc2VUcmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi5yZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLHUoZS54LHIpKX1mdW5jdGlvbiBBKHQpe3JldHVybiJjZWxscyI9PT10LnR5cGV9ZnVuY3Rpb24gTSh0KXtyZXR1cm4iaGVhZGVyIj09PXQudHlwZX1mdW5jdGlvbiBTKHQpe3JldHVybih0LnJvd0Jsb2Nrcy5sZW5ndGg/dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzOltdKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrUihlLDEvMCl9KSwwKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj15KGUpWzBdO2lmKHZvaWQgMCE9PW4pe3ZhciBpPW4ucm93QmxvY2tzLGE9bi5jYWxjZGF0YSxvPUQoaSxpLmxlbmd0aCkscz1uLmNhbGNkYXRhLmdyb3VwSGVpZ2h0LVMobiksbD1hLnNjcm9sbFk9TWF0aC5tYXgoMCxNYXRoLm1pbihvLXMsYS5zY3JvbGxZKSksYz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MCxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9by5yb3dzLGw9MCxjPTA7YzxzLmxlbmd0aDtjKyspbCs9c1tjXS5yb3dIZWlnaHQ7by5hbGxSb3dzSGVpZ2h0PWw7ZTxpK2wmJmUrcj5pJiZuLnB1c2goYSksaSs9bH1yZXR1cm4gbn0oaSxsLHMpOzE9PT1jLmxlbmd0aCYmKGNbMF09PT1pLmxlbmd0aC0xP2MudW5zaGlmdChjWzBdLTEpOmMucHVzaChjWzBdKzEpKSxjWzBdJTImJmMucmV2ZXJzZSgpLGUuZWFjaCgoZnVuY3Rpb24odCxlKXt0LnBhZ2U9Y1tlXSx0LnNjcm9sbFk9bH0pKSxlLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUQodC5yb3dCbG9ja3MsdC5wYWdlKS10LnNjcm9sbFk7cmV0dXJuIHUoMCxlKX0pKSx0JiYoQyh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMCksQyh0LHIsZSxjLG4ucHJldlBhZ2VzLG4sMSkseChyLHQpKX19ZnVuY3Rpb24gTCh0LGUscixhKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIHM9by5jYWxjZGF0YT9vLmNhbGNkYXRhOm8sbD1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHMua2V5PT09dC5rZXl9KSksYz1yfHxzLnNjcm9sbGJhclN0YXRlLmRyYWdNdWx0aXBsaWVyLHU9cy5zY3JvbGxZO3Muc2Nyb2xsWT12b2lkIDA9PT1hP3Muc2Nyb2xsWStjKmkuZXZlbnQuZHk6YTt2YXIgZj1sLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmZpbHRlcihBKTtyZXR1cm4gRSh0LGYsbCkscy5zY3JvbGxZPT09dX19ZnVuY3Rpb24gQyh0LGUscixuLGksYSxvKXtuW29dIT09aVtvXSYmKGNsZWFyVGltZW91dChhLmN1cnJlbnRSZXBhaW50W29dKSxhLmN1cnJlbnRSZXBhaW50W29dPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGE9ci5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1vJiZuW2VdIT09aVtlXX0pKTtiKHQsZSxhLHIpLGlbb109bltvXX0pKSl9ZnVuY3Rpb24gUCh0LGUscixhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1pLnNlbGVjdChlLnBhcmVudE5vZGUpO28uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5mcmFnbWVudHM7by5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKChmdW5jdGlvbih0LHIpe2Vbcl0ud2lkdGg9dGhpcy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKX0pKTt2YXIgcixpLGE9ZVtlLmxlbmd0aC0xXS53aWR0aCxzPWUuc2xpY2UoMCwtMSksbD1bXSxjPTAsdT10LmNvbHVtbi5jb2x1bW5XaWR0aC0yKm4uY2VsbFBhZDtmb3IodC52YWx1ZT0iIjtzLmxlbmd0aDspYysoaT0ocj1zLnNoaWZ0KCkpLndpZHRoK2EpPnUmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKStuLmxpbmVCcmVha2VyLGw9W10sYz0wKSxsLnB1c2goci50ZXh0KSxjKz1pO2MmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKSksdC53cmFwcGVkPSEwfSkpLG8uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikucmVtb3ZlKCksXyhvLnNlbGVjdCgiLiIrbi5jbi5jZWxsVGV4dCkscix0LGEpLGkuc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5jYWxsKHopfX1mdW5jdGlvbiBJKHQsZSxyLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW8uc2V0dGxlZFkpe3ZhciBzPWkuc2VsZWN0KGUucGFyZW50Tm9kZSksbD1CKG8pLGM9by5rZXktbC5maXJzdFJvd0luZGV4LGY9bC5yb3dzW2NdLnJvd0hlaWdodCxoPW8uY2VsbEhlaWdodE1heUluY3JlYXNlP2UucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrMipuLmNlbGxQYWQ6ZixwPU1hdGgubWF4KGgsZik7cC1sLnJvd3NbY10ucm93SGVpZ2h0JiYobC5yb3dzW2NdLnJvd0hlaWdodD1wLHQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkNlbGwpLmNhbGwoeiksRShudWxsLHQuZmlsdGVyKEEpLDApLHgocixhLCEwKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPWkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxSZWN0KS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCksYT1lLnRvcC10LnRvcCsocj9yLm1hdHJpeC5mOm4uY2VsbFBhZCk7cmV0dXJuIHUoTyhvLGkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpLGEpfSkpLG8uc2V0dGxlZFk9ITB9fX1mdW5jdGlvbiBPKHQsZSl7c3dpdGNoKHQuYWxpZ24pe2Nhc2UibGVmdCI6cmV0dXJuIG4uY2VsbFBhZDtjYXNlInJpZ2h0IjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLW4uY2VsbFBhZDtjYXNlImNlbnRlciI6cmV0dXJuKHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKSkvMjtkZWZhdWx0OnJldHVybiBuLmNlbGxQYWR9fWZ1bmN0aW9uIHoodCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3MucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K1IoZSwxLzApfSksMCkscj1SKEIodCksdC5rZXkpO3JldHVybiB1KDAscitlKX0pKS5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFJlY3QpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybihlPUIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pKX1mdW5jdGlvbiBEKHQsZSl7Zm9yKHZhciByPTAsbj1lLTE7bj49MDtuLS0pcis9Rih0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBSKHQsZSl7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aCYmdC5yb3dzW25dLnJvd0luZGV4PGU7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gRih0KXt2YXIgZT10LmFsbFJvd3NIZWlnaHQ7aWYodm9pZCAwIT09ZSlyZXR1cm4gZTtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiB0LmFsbFJvd3NIZWlnaHQ9cixyfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQucm93QmxvY2tzW3QucGFnZV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9IXQuX2NvbnRleHQuc3RhdGljUGxvdCxhPXQuX2Z1bGxMYXlvdXQuX3BhcGVyLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZSkuZGF0YShlLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9by51bndyYXAoZSkudHJhY2U7cmV0dXJuIGgodCxyKX0pKSxvLmtleUZ1bik7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi50YWJsZSwhMCkuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGEuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCt0LnNpemUubCt0LnNpemUucn0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrdC5zaXplLnQrdC5zaXplLmJ9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUodC50cmFuc2xhdGVYLHQudHJhbnNsYXRlWSl9KSk7dmFyIGw9YS5zZWxlY3RBbGwoIi4iK24uY24udGFibGVDb250cm9sVmlldykuZGF0YShvLnJlcGVhdCxvLmtleUZ1biksZD1sLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnRhYmxlQ29udHJvbFZpZXcsITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKTtpZihyKXt2YXIgXz0ib253aGVlbCJpbiBkb2N1bWVudD8id2hlZWwiOiJtb3VzZXdoZWVsIjtkLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbihlKXtsLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10fSkpLmNhbGwoeCx0KX0pKS5vbihfLChmdW5jdGlvbihlKXtpZighZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZyl7ZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMDt2YXIgcj1lLnNjcm9sbFkraS5ldmVudC5kZWx0YVk7TCh0LGwsbnVsbCxyKShlKXx8KGkuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksaS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpKSxlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSExfX0pKS5jYWxsKHgsdCwhMCl9bC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh0LnNpemUubCx0LnNpemUudCl9KSk7dmFyIHc9bC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQmFja2dyb3VuZCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7dy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5zY3JvbGxCYWNrZ3JvdW5kLCEwKS5hdHRyKCJmaWxsIiwibm9uZSIpLHcuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSksbC5lYWNoKChmdW5jdGlvbihlKXtzLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksZyh0LGUpLHQpfSkpO3ZhciBUPWwuc2VsZWN0QWxsKCIuIituLmNuLnlDb2x1bW4pLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbnN9KSxvLmtleUZ1bik7VC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi55Q29sdW1uLCEwKSxULmV4aXQoKS5yZW1vdmUoKSxULmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQueCwwKX0pKSxyJiZULmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKChmdW5jdGlvbihlKXtyZXR1cm4gayhpLnNlbGVjdCh0aGlzKSxlLC1uLnVwbGlmdCksYyh0aGlzKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSEwLHgobC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQua2V5fSkpLHQpLGV9KSkub24oImRyYWciLChmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKGUpe3JldHVybih0PT09ZT9pLmV2ZW50Lng6ZS54KStlLmNvbHVtbldpZHRoLzJ9O3QueD1NYXRoLm1heCgtbi5vdmVyZHJhZyxNYXRoLm1pbih0LmNhbGNkYXRhLndpZHRoK24ub3ZlcmRyYWctdC5jb2x1bW5XaWR0aCxpLmV2ZW50LngpKSx5KFQpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5jYWxjZGF0YS5rZXl9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KS1yKGUpfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUpfSkpLFQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KSkudHJhbnNpdGlvbigpLmVhc2Uobi50cmFuc2l0aW9uRWFzZSkuZHVyYXRpb24obi50cmFuc2l0aW9uRHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQueCwwKX0pKSxlLmNhbGwoZikuYXR0cigidHJhbnNmb3JtIix1KHQueCwtbi51cGxpZnQpKX0pKS5vbigiZHJhZ2VuZCIsKGZ1bmN0aW9uKGUpe3ZhciByPWkuc2VsZWN0KHRoaXMpLG49ZS5jYWxjZGF0YTtlLng9ZS54U2NhbGUoZSksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMSxrKHIsZSwwKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS5nZENvbHVtbnNPcmlnaW5hbE9yZGVyO2UuZ2RDb2x1bW5zLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXS1yW24uaW5kZXhPZihlKV19KSksZS5jb2x1bW5vcmRlcj1yLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiKX0odCxuLG4uY29sdW1ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhJbmRleH0pKSl9KSkpLFQuZWFjaCgoZnVuY3Rpb24oZSl7cy5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLHYodCxlKSx0KX0pKTt2YXIgUz1ULnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZGF0YShwLnNwbGl0VG9QYW5lbHMsby5rZXlGdW4pO1MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQmxvY2ssITApLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpLFMuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRyYWdIYW5kbGU/ImV3LXJlc2l6ZSI6dC5jYWxjZGF0YS5zY3JvbGxiYXJTdGF0ZS5iYXJXaWdnbGVSb29tPyJucy1yZXNpemUiOiJkZWZhdWx0In0pKTt2YXIgQz1TLmZpbHRlcihNKSxQPVMuZmlsdGVyKEEpO3ImJlAuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHR9KSkub24oImRyYWciLEwodCxsLC0xKSkub24oImRyYWdlbmQiLChmdW5jdGlvbigpe30pKSksYih0LGwsQyxTKSxiKHQsbCxQLFMpO3ZhciBJPWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEFyZWFDbGlwKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtJLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcCwhMCkuYXR0cigiaWQiLChmdW5jdGlvbihlKXtyZXR1cm4gZyh0LGUpfSkpO3ZhciBPPUkuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7Ty5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcFJlY3QsITApLmF0dHIoIngiLC1uLm92ZXJkcmFnKS5hdHRyKCJ5Iiwtbi51cGxpZnQpLmF0dHIoImZpbGwiLCJub25lIiksTy5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoKzIqbi5vdmVyZHJhZ30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrbi51cGxpZnR9KSksVC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnkpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5LCEwKTt2YXIgej1ULnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoLCEwKSx6LmF0dHIoImlkIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHYodCxlKX0pKTt2YXIgRD16LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeVJlY3QpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO0QuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlSZWN0LCEwKS5hdHRyKCJmaWxsIiwibm9uZSIpLEQuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5XaWR0aCsyKm0odCl9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FsY2RhdGEuaGVpZ2h0KzIqbSh0KStuLnVwbGlmdH0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuLW0odCl9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi1tKHQpfSkpLEUobnVsbCxQLGwpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9saWIiOjUwMywiLi4vLi4vbGliL2d1cCI6NTAwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi9jb25zdGFudHMiOjEwNjUsIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiOjEwNjYsIi4vZGF0YV9zcGxpdF9oZWxwZXJzIjoxMDY3LCJAcGxvdGx5L2QzIjo1OH1dLDEwNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxsPXQoIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczpsLmxhYmVscyxwYXJlbnRzOmwucGFyZW50cyx2YWx1ZXM6bC52YWx1ZXMsYnJhbmNodmFsdWVzOmwuYnJhbmNodmFsdWVzLGNvdW50OmwuY291bnQsbGV2ZWw6bC5sZXZlbCxtYXhkZXB0aDpsLm1heGRlcHRoLHRpbGluZzp7cGFja2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3F1YXJpZnkiLCJiaW5hcnkiLCJkaWNlIiwic2xpY2UiLCJzbGljZS1kaWNlIiwiZGljZS1zbGljZSJdLGRmbHQ6InNxdWFyaWZ5IixlZGl0VHlwZToicGxvdCJ9LHNxdWFyaWZ5cmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sZmxpcDp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsieCIsInkiXSxkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0scGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MyxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOnUoe3BhZDp7dDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sY29sb3JzOmwubWFya2VyLmNvbG9ycyxkZXB0aGZhZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZWRpdFR5cGU6InN0eWxlIn0sbGluZTpsLm1hcmtlci5saW5lLGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyIix7Y29sb3JBdHRyOiJjb2xvcnMiLGFuaW06ITF9KSkscGF0aGJhcjp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6InBsb3QifSxlZGdlc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIj4iLCI8IiwifCIsIi8iLCJcXCJdLGRmbHQ6Ij4iLGVkaXRUeXBlOiJwbG90In0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxMixlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OnUoe30scy50ZXh0Zm9udCx7fSksZWRpdFR5cGU6ImNhbGMifSx0ZXh0OnMudGV4dCx0ZXh0aW5mbzpsLnRleHRpbmZvLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmMuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OnMuaG92ZXJ0ZXh0LGhvdmVyaW5mbzpsLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oe30se2tleXM6Yy5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6cy50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpzLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDp1KHt9LHMub3V0c2lkZXRleHRmb250LHt9KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBsZWZ0IiwibWlkZGxlIGNlbnRlciIsIm1pZGRsZSByaWdodCIsImJvdHRvbSBsZWZ0IiwiYm90dG9tIGNlbnRlciIsImJvdHRvbSByaWdodCJdLGRmbHQ6InRvcCBsZWZ0IixlZGl0VHlwZToicGxvdCJ9LHNvcnQ6cy5zb3J0LHJvb3Q6bC5yb290LGRvbWFpbjpvKHtuYW1lOiJ0cmVlbWFwIix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjM3MywiLi4vLi4vbGliL2V4dGVuZCI6NDkzLCIuLi8uLi9wbG90cy9kb21haW4iOjU4NCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6NjMzLCIuLi9waWUvYXR0cmlidXRlcyI6OTAwLCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIjoxMDQ1LCIuL2NvbnN0YW50cyI6MTA3NH1dLDEwNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InRyZWVtYXAiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjYxOX1dLDEwNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3VuYnVyc3QvY2FsYyIpO3IuY2FsYz1mdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcnVuQ3Jvc3NUcmFjZUNhbGMoInRyZWVtYXAiLHQpfX0seyIuLi9zdW5idXJzdC9jYWxjIjoxMDQ3fV0sMTA3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NMSUNLX1RSQU5TSVRJT05fVElNRTo3NTAsQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkc6InBvbHkiLGV2ZW50RGF0YUtleXM6WyJjdXJyZW50UGF0aCIsInJvb3QiLCJlbnRyeSIsInBlcmNlbnRSb290IiwicGVyY2VudEVudHJ5IiwicGVyY2VudFBhcmVudCJdLGdhcFdpdGhQYXRoYmFyOjF9fSx7fV0sMTA3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LGw9dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx1PWMuaGFzQ29sb3JzY2FsZSxmPWMuaGFuZGxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIGgocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgcD1oKCJsYWJlbHMiKSxkPWgoInBhcmVudHMiKTtpZihwJiZwLmxlbmd0aCYmZCYmZC5sZW5ndGgpe3ZhciBtPWgoInZhbHVlcyIpO20mJm0ubGVuZ3RoP2goImJyYW5jaHZhbHVlcyIpOmgoImNvdW50IiksaCgibGV2ZWwiKSxoKCJtYXhkZXB0aCIpLCJzcXVhcmlmeSI9PT1oKCJ0aWxpbmcucGFja2luZyIpJiZoKCJ0aWxpbmcuc3F1YXJpZnlyYXRpbyIpLGgoInRpbGluZy5mbGlwIiksaCgidGlsaW5nLnBhZCIpO3ZhciBnPWgoInRleHQiKTtoKCJ0ZXh0dGVtcGxhdGUiKSxlLnRleHR0ZW1wbGF0ZXx8aCgidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoZyk/InRleHQrbGFiZWwiOiJsYWJlbCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKTt2YXIgdj1oKCJwYXRoYmFyLnZpc2libGUiKTtzKHQsZSxjLGgsImF1dG8iLHtoYXNQYXRoYmFyOnYsbW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksaCgidGV4dHBvc2l0aW9uIik7dmFyIHk9LTEhPT1lLnRleHRwb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKTtoKCJtYXJrZXIubGluZS53aWR0aCIpJiZoKCJtYXJrZXIubGluZS5jb2xvciIsYy5wYXBlcl9iZ2NvbG9yKTt2YXIgeD1oKCJtYXJrZXIuY29sb3JzIik7KGUuX2hhc0NvbG9yc2NhbGU9dSh0LCJtYXJrZXIiLCJjb2xvcnMiKXx8KHQubWFya2VyfHx7fSkuY29sb3JheGlzKT9mKHQsZSxjLGgse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KTpoKCJtYXJrZXIuZGVwdGhmYWRlIiwhKHh8fFtdKS5sZW5ndGgpO3ZhciBiPTIqZS50ZXh0Zm9udC5zaXplO2goIm1hcmtlci5wYWQudCIseT9iLzQ6YiksaCgibWFya2VyLnBhZC5sIixiLzQpLGgoIm1hcmtlci5wYWQuciIsYi80KSxoKCJtYXJrZXIucGFkLmIiLHk/YjpiLzQpLGUuX2hvdmVyZWQ9e21hcmtlcjp7bGluZTp7d2lkdGg6Mixjb2xvcjphLmNvbnRyYXN0KGMucGFwZXJfYmdjb2xvcil9fX0sdiYmKGgoInBhdGhiYXIudGhpY2tuZXNzIixlLnBhdGhiYXIudGV4dGZvbnQuc2l6ZSsyKmwpLGgoInBhdGhiYXIuc2lkZSIpLGgoInBhdGhiYXIuZWRnZXNoYXBlIikpLGgoInNvcnQiKSxoKCJyb290LmNvbG9yIiksbyhlLGMsaCksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjM2NiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9kb21haW4iOjU4NCwiLi4vYmFyL2NvbnN0YW50cyI6NjUwLCIuLi9iYXIvZGVmYXVsdHMiOjY1MiwiLi9hdHRyaWJ1dGVzIjoxMDcxfV0sMTA3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikuY2xlYXJNaW5UZXh0U2l6ZSxvPXQoIi4uL2Jhci9zdHlsZSIpLnJlc2l6ZVRleHQscz10KCIuL3Bsb3Rfb25lIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsYyl7dmFyIHUsZixoPWMudHlwZSxwPWMuZHJhd0Rlc2NlbmRhbnRzLGQ9dC5fZnVsbExheW91dCxtPWRbIl8iK2grImxheWVyIl0sZz0hcjsoYShoLGQpLCh1PW0uc2VsZWN0QWxsKCJnLnRyYWNlLiIraCkuZGF0YShlLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJhY2UiLCEwKS5jbGFzc2VkKGgsITApLHUub3JkZXIoKSwhZC51bmlmb3JtdGV4dC5tb2RlJiZpLmhhc1RyYW5zaXRpb24ocikpPyhsJiYoZj1sKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goKGZ1bmN0aW9uKCl7bS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXtzKHQsZSx0aGlzLHIscCl9KSl9KSkpOih1LmVhY2goKGZ1bmN0aW9uKGUpe3ModCxlLHRoaXMscixwKX0pKSxkLnVuaWZvcm10ZXh0Lm1vZGUmJm8odCxtLnNlbGVjdEFsbCgiLnRyYWNlIiksaCkpO2cmJnUuZXhpdCgpLnJlbW92ZSgpfX0seyIuLi9iYXIvc3R5bGUiOjY2MiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6NjY0LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMDUxLCIuL3Bsb3Rfb25lIjoxMDg1LCJAcGxvdGx5L2QzIjo1OH1dLDEwNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksZj10KCIuLi9zdW5idXJzdC9meCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoLHApe3ZhciBkPXAuYmFyRGlmWSxtPXAud2lkdGgsZz1wLmhlaWdodCx2PXAudmlld1gseT1wLnZpZXdZLHg9cC5wYXRoU2xpY2UsYj1wLnRvTW92ZUluc2lkZVNsaWNlLF89cC5zdHJUcmFuc2Zvcm0sdz1wLmhhc1RyYW5zaXRpb24sVD1wLmhhbmRsZVNsaWNlc0V4aXQsaz1wLm1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcixBPXAubWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3IsTT17fSxTPXQuX2Z1bGxMYXlvdXQsRT1lWzBdLEw9RS50cmFjZSxDPUUuaGllcmFyY2h5LFA9bS9MLl9lbnRyeURlcHRoLEk9dS5saXN0UGF0aChyLmRhdGEsImlkIiksTz1zKEMuY29weSgpLFttLGddLHtwYWNraW5nOiJkaWNlIixwYWQ6e2lubmVyOjAsdG9wOjAsbGVmdDowLHJpZ2h0OjAsYm90dG9tOjB9fSkuZGVzY2VuZGFudHMoKTsoTz1PLmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGU9SS5pbmRleE9mKHQuZGF0YS5pZCk7cmV0dXJuLTEhPT1lJiYodC54MD1QKmUsdC54MT1QKihlKzEpLHQueTA9ZCx0LnkxPWQrZyx0Lm9uUGF0aGJhcj0hMCwhMCl9KSkpLnJldmVyc2UoKSwoaD1oLmRhdGEoTyx1LmdldFB0SWQpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBhdGhiYXIiLCEwKSxUKGgsITAsTSxbbSxnXSx4KSxoLm9yZGVyKCk7dmFyIHo9aDt3JiYoej16LnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3Uuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiExLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksei5lYWNoKChmdW5jdGlvbihzKXtzLl94MD12KHMueDApLHMuX3gxPXYocy54MSkscy5feTA9eShzLnkwKSxzLl95MT15KHMueTEpLHMuX2hvdmVyWD12KHMueDEtTWF0aC5taW4obSxnKS8yKSxzLl9ob3Zlclk9eShzLnkxLWcvMik7dmFyIGg9bi5zZWxlY3QodGhpcykscD1pLmVuc3VyZVNpbmdsZShoLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9wLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITAsTSxbbSxnXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB4KGUodCkpfX0pKTpwLmF0dHIoImQiLHgpLGguY2FsbChmLHIsdCxlLHtzdHlsZU9uZTpsLGV2ZW50RGF0YUtleXM6Yy5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOmMuQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6Yy5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwodS5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiExLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLHAuY2FsbChsLHMsTCx7aG92ZXJlZDohMX0pLHMuX3RleHQ9KHUuZ2V0UHRMYWJlbChzKXx8IiIpLnNwbGl0KCI8YnI+Iikuam9pbigiICIpfHwiIjt2YXIgZD1pLmVuc3VyZVNpbmdsZShoLCJnIiwic2xpY2V0ZXh0IiksVD1pLmVuc3VyZVNpbmdsZShkLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxFPWkuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsdS5kZXRlcm1pbmVUZXh0Rm9udChMLHMsUy5mb250LHtvblBhdGhiYXI6ITB9KSk7VC50ZXh0KHMuX3RleHR8fCIgIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYS5mb250LEUpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCkscy50ZXh0QkI9YS5iQm94KFQubm9kZSgpKSxzLnRyYW5zZm9ybT1iKHMse2ZvbnRTaXplOkUuc2l6ZSxvblBhdGhiYXI6ITB9KSxzLnRyYW5zZm9ybS5mb250U2l6ZT1FLnNpemUsdz9ULnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUEodCwhMCxNLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOlQuYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjozODgsIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjUyOSwiLi4vc3VuYnVyc3QvZngiOjEwNTAsIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEwNTEsIi4vY29uc3RhbnRzIjoxMDc0LCIuL3BhcnRpdGlvbiI6MTA4MywiLi9zdHlsZSI6MTA4NiwiQHBsb3RseS9kMyI6NTh9XSwxMDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxzPXQoIi4vcGFydGl0aW9uIiksbD10KCIuL3N0eWxlIikuc3R5bGVPbmUsYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vc3VuYnVyc3QvaGVscGVycyIpLGY9dCgiLi4vc3VuYnVyc3QvZngiKSxoPXQoIi4uL3N1bmJ1cnN0L3Bsb3QiKS5mb3JtYXRTbGljZUxhYmVsO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixwLGQpe3ZhciBtPWQud2lkdGgsZz1kLmhlaWdodCx2PWQudmlld1gseT1kLnZpZXdZLHg9ZC5wYXRoU2xpY2UsYj1kLnRvTW92ZUluc2lkZVNsaWNlLF89ZC5zdHJUcmFuc2Zvcm0sdz1kLmhhc1RyYW5zaXRpb24sVD1kLmhhbmRsZVNsaWNlc0V4aXQsaz1kLm1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcixBPWQubWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3IsTT1kLnByZXZFbnRyeSxTPXQuX2Z1bGxMYXlvdXQsRT1lWzBdLnRyYWNlLEw9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJsZWZ0IiksQz0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoInJpZ2h0IiksUD0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpLEk9IVAmJiFFLm1hcmtlci5wYWQudHx8UCYmIUUubWFya2VyLnBhZC5iLE89cyhyLFttLGddLHtwYWNraW5nOkUudGlsaW5nLnBhY2tpbmcsc3F1YXJpZnlyYXRpbzpFLnRpbGluZy5zcXVhcmlmeXJhdGlvLGZsaXBYOkUudGlsaW5nLmZsaXAuaW5kZXhPZigieCIpPi0xLGZsaXBZOkUudGlsaW5nLmZsaXAuaW5kZXhPZigieSIpPi0xLHBhZDp7aW5uZXI6RS50aWxpbmcucGFkLHRvcDpFLm1hcmtlci5wYWQudCxsZWZ0OkUubWFya2VyLnBhZC5sLHJpZ2h0OkUubWFya2VyLnBhZC5yLGJvdHRvbTpFLm1hcmtlci5wYWQuYn19KS5kZXNjZW5kYW50cygpLHo9MS8wLEQ9LTEvMDtPLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGVwdGg7ZT49RS5fbWF4RGVwdGg/KHQueDA9dC54MT0odC54MCt0LngxKS8yLHQueTA9dC55MT0odC55MCt0LnkxKS8yKTooej1NYXRoLm1pbih6LGUpLEQ9TWF0aC5tYXgoRCxlKSl9KSkscD1wLmRhdGEoTyx1LmdldFB0SWQpLEUuX21heFZpc2libGVMYXllcnM9aXNGaW5pdGUoRCk/RC16KzE6MCxwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSxUKHAsITEse30sW20sZ10seCkscC5vcmRlcigpO3ZhciBSPW51bGw7aWYodyYmTSl7dmFyIEY9dS5nZXRQdElkKE0pO3AuZWFjaCgoZnVuY3Rpb24odCl7bnVsbD09PVImJnUuZ2V0UHRJZCh0KT09PUYmJihSPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSl9KSl9dmFyIEI9ZnVuY3Rpb24oKXtyZXR1cm4gUnx8e3gwOjAseDE6bSx5MDowLHkxOmd9fSxOPXA7cmV0dXJuIHcmJihOPU4udHJhbnNpdGlvbigpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITAsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpKSxOLmVhY2goKGZ1bmN0aW9uKHMpe3ZhciBwPXUuaXNIZWFkZXIocyxFKTtzLl94MD12KHMueDApLHMuX3gxPXYocy54MSkscy5feTA9eShzLnkwKSxzLl95MT15KHMueTEpLHMuX2hvdmVyWD12KHMueDEtRS5tYXJrZXIucGFkLnIpLHMuX2hvdmVyWT15KFA/cy55MS1FLm1hcmtlci5wYWQuYi8yOnMueTArRS5tYXJrZXIucGFkLnQvMik7dmFyIGQ9bi5zZWxlY3QodGhpcyksVD1pLmVuc3VyZVNpbmdsZShkLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9ULnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITEsQigpLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHgoZSh0KSl9fSkpOlQuYXR0cigiZCIseCksZC5jYWxsKGYscix0LGUse3N0eWxlT25lOmwsZXZlbnREYXRhS2V5czpjLmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6Yy5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzpjLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbCh1LnNldFNsaWNlQ3Vyc29yLHQse2lzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksVC5jYWxsKGwscyxFLHtob3ZlcmVkOiExfSkscy54MD09PXMueDF8fHMueTA9PT1zLnkxP3MuX3RleHQ9IiI6cy5fdGV4dD1wP0k/IiI6dS5nZXRQdExhYmVsKHMpfHwiIjpoKHMscixFLGUsUyl8fCIiO3ZhciBNPWkuZW5zdXJlU2luZ2xlKGQsImciLCJzbGljZXRleHQiKSxPPWkuZW5zdXJlU2luZ2xlKE0sInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLHo9aS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx1LmRldGVybWluZVRleHRGb250KEUscyxTLmZvbnQpKTtPLnRleHQocy5fdGV4dHx8IiAiKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz8iZW5kIjpMfHxwPyJzdGFydCI6Im1pZGRsZSIpLmNhbGwoYS5mb250LHopLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCkscy50ZXh0QkI9YS5iQm94KE8ubm9kZSgpKSxzLnRyYW5zZm9ybT1iKHMse2ZvbnRTaXplOnouc2l6ZSxpc0hlYWRlcjpwfSkscy50cmFuc2Zvcm0uZm9udFNpemU9ei5zaXplLHc/Ty50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1BKHQsITEsQigpLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOk8uYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKSxSfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NTI5LCIuLi9zdW5idXJzdC9meCI6MTA1MCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTA1MSwiLi4vc3VuYnVyc3QvcGxvdCI6MTA1NSwiLi9jb25zdGFudHMiOjEwNzQsIi4vcGFydGl0aW9uIjoxMDgzLCIuL3N0eWxlIjoxMDg2LCJAcGxvdGx5L2QzIjo1OH1dLDEwNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpO24uc3dhcFhZJiYoaT1lLngwLGUueDA9ZS55MCxlLnkwPWksaT1lLngxLGUueDE9ZS55MSxlLnkxPWkpLG4uZmxpcFgmJihpPWUueDAsZS54MD1yWzBdLWUueDEsZS54MT1yWzBdLWkpLG4uZmxpcFkmJihpPWUueTAsZS55MD1yWzFdLWUueTEsZS55MT1yWzFdLWkpO3ZhciBhPWUuY2hpbGRyZW47aWYoYSlmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyl0KGFbb10scixuKX19LHt9XSwxMDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InRyZWVtYXAiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbWV0YTp7fX19LHsiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjk0NCwiLi9hdHRyaWJ1dGVzIjoxMDcxLCIuL2Jhc2VfcGxvdCI6MTA3MiwiLi9jYWxjIjoxMDczLCIuL2RlZmF1bHRzIjoxMDc1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDgxLCIuL2xheW91dF9kZWZhdWx0cyI6MTA4MiwiLi9wbG90IjoxMDg0LCIuL3N0eWxlIjoxMDg2fV0sMTA4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3RyZWVtYXBjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHRyZWVtYXBjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJ0cmVlbWFwY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHRyZWVtYXBjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo1MDMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwODF9XSwxMDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpLGk9dCgiLi9mbGlwX3RyZWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89ci5mbGlwWCxzPXIuZmxpcFksbD0iZGljZS1zbGljZSI9PT1yLnBhY2tpbmcsYz1yLnBhZFtzPyJib3R0b20iOiJ0b3AiXSx1PXIucGFkW28/InJpZ2h0IjoibGVmdCJdLGY9ci5wYWRbbz8ibGVmdCI6InJpZ2h0Il0saD1yLnBhZFtzPyJ0b3AiOiJib3R0b20iXTtsJiYoYT11LHU9YyxjPWEsYT1mLGY9aCxoPWEpO3ZhciBwPW4udHJlZW1hcCgpLnRpbGUoZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSJzcXVhcmlmeSI6cmV0dXJuIG4udHJlZW1hcFNxdWFyaWZ5LnJhdGlvKGUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gbi50cmVlbWFwQmluYXJ5O2Nhc2UiZGljZSI6cmV0dXJuIG4udHJlZW1hcERpY2U7Y2FzZSJzbGljZSI6cmV0dXJuIG4udHJlZW1hcFNsaWNlO2RlZmF1bHQ6cmV0dXJuIG4udHJlZW1hcFNsaWNlRGljZX19KHIucGFja2luZyxyLnNxdWFyaWZ5cmF0aW8pKS5wYWRkaW5nSW5uZXIoci5wYWQuaW5uZXIpLnBhZGRpbmdMZWZ0KHUpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nVG9wKGMpLnBhZGRpbmdCb3R0b20oaCkuc2l6ZShsP1tlWzFdLGVbMF1dOmUpKHQpO3JldHVybihsfHxvfHxzKSYmaShwLGUse3N3YXBYWTpsLGZsaXBYOm8sZmxpcFk6c30pLHB9fSx7Ii4vZmxpcF90cmVlIjoxMDc5LCJkMy1oaWVyYXJjaHkiOjExNX1dLDEwODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3IiksaT10KCIuL2RyYXdfZGVzY2VuZGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIG4odCxlLHIsYSx7dHlwZToidHJlZW1hcCIsZHJhd0Rlc2NlbmRhbnRzOml9KX19LHsiLi9kcmF3IjoxMDc2LCIuL2RyYXdfZGVzY2VuZGFudHMiOjEwNzh9XSwxMDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGUsYT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2Jhci9jb25zdGFudHMiKS5URVhUUEFELGw9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsYz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVjb3JkTWluVGV4dFNpemUsdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi9kcmF3X2FuY2VzdG9ycyIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGEuaXNIaWVyYXJjaHlSb290KHQpPyIiOmEuZ2V0UHRJZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgbT10Ll9mdWxsTGF5b3V0LGc9ZVswXSx2PWcudHJhY2UseT0iaWNpY2xlIj09PXYudHlwZSx4PWcuaGllcmFyY2h5LGI9YS5maW5kRW50cnlXaXRoTGV2ZWwoeCx2LmxldmVsKSxfPW4uc2VsZWN0KHIpLHc9Xy5zZWxlY3RBbGwoImcucGF0aGJhciIpLFQ9Xy5zZWxlY3RBbGwoImcuc2xpY2UiKTtpZighYilyZXR1cm4gdy5yZW1vdmUoKSx2b2lkIFQucmVtb3ZlKCk7dmFyIGs9YS5pc0hpZXJhcmNoeVJvb3QoYiksQT0hbS51bmlmb3JtdGV4dC5tb2RlJiZhLmhhc1RyYW5zaXRpb24ocCksTT1hLmdldE1heERlcHRoKHYpLFM9bS5fc2l6ZSxFPXYuZG9tYWluLEw9Uy53KihFLnhbMV0tRS54WzBdKSxDPVMuaCooRS55WzFdLUUueVswXSksUD1MLEk9di5wYXRoYmFyLnRoaWNrbmVzcyxPPXYubWFya2VyLmxpbmUud2lkdGgrdS5nYXBXaXRoUGF0aGJhcix6PXYucGF0aGJhci52aXNpYmxlP3YucGF0aGJhci5zaWRlLmluZGV4T2YoImJvdHRvbSIpPi0xP0MrTzotKEkrTyk6MCxEPXt4MDpQLHgxOlAseTA6eix5MTp6K0l9LFI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXYudGlsaW5nLnBhZCxpPWZ1bmN0aW9uKHQpe3JldHVybiB0LW48PWUueDB9LGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQrbj49ZS54MX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdC1uPD1lLnkwfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0K24+PWUueTF9O3JldHVybiB0LngwPT09ZS54MCYmdC54MT09PWUueDEmJnQueTA9PT1lLnkwJiZ0LnkxPT09ZS55MT97eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX06e3gwOmkodC54MC1uKT8wOmEodC54MC1uKT9yWzBdOnQueDAseDE6aSh0LngxK24pPzA6YSh0LngxK24pP3JbMF06dC54MSx5MDpvKHQueTAtbik/MDpzKHQueTAtbik/clsxXTp0LnkwLHkxOm8odC55MStuKT8wOnModC55MStuKT9yWzFdOnQueTF9fSxGPW51bGwsQj17fSxOPXt9LGo9bnVsbCxVPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/QltoKHQpXTpOW2godCldfSxWPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGUpcmV0dXJuIEJbaCh4KV18fEQ7dmFyIGk9Tlt2LmxldmVsXXx8cjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kZXB0aC1iLmRhdGEuZGVwdGg8TX0odCk/Uih0LGksbik6e319O2cuaGFzTXVsdGlwbGVSb290cyYmayYmTSsrLHYuX21heERlcHRoPU0sdi5fYmFja2dyb3VuZENvbG9yPW0ucGFwZXJfYmdjb2xvcix2Ll9lbnRyeURlcHRoPWIuZGF0YS5kZXB0aCx2Ll9hdFJvb3RMZXZlbD1rO3ZhciBIPS1MLzIrUy5sK1MudyooRS54WzFdK0UueFswXSkvMixxPS1DLzIrUy50K1MuaCooMS0oRS55WzFdK0UueVswXSkvMiksRz1mdW5jdGlvbih0KXtyZXR1cm4gSCt0fSxZPWZ1bmN0aW9uKHQpe3JldHVybiBxK3R9LFc9WSgwKSxYPUcoMCksWj1mdW5jdGlvbih0KXtyZXR1cm4gWCt0fSxKPWZ1bmN0aW9uKHQpe3JldHVybiBXK3R9O2Z1bmN0aW9uIEsodCxlKXtyZXR1cm4gdCsiLCIrZX12YXIgUT1aKDApLCQ9ZnVuY3Rpb24odCl7dC54PU1hdGgubWF4KFEsdC54KX0sdHQ9di5wYXRoYmFyLmVkZ2VzaGFwZSxldD1mdW5jdGlvbih0LGUpe3ZhciByPXQueDAsbj10LngxLGk9dC55MCxhPXQueTEsbz10LnRleHRCQix1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09di50ZXh0cG9zaXRpb24uaW5kZXhPZih0KX0sZj11KCJib3R0b20iKSxoPXUoInRvcCIpfHxlLmlzSGVhZGVyJiYhZj8ic3RhcnQiOmY/ImVuZCI6Im1pZGRsZSIscD11KCJyaWdodCIpLGQ9dSgibGVmdCIpfHxlLm9uUGF0aGJhcj8tMTpwPzE6MCxnPXZbeT8idGlsaW5nIjoibWFya2VyIl0ucGFkO2lmKGUuaXNIZWFkZXIpe2lmKChyKz0oeT9nOmcubCktcyk+PShuLT0oeT9nOmcuciktcykpe3ZhciB4PShyK24pLzI7cj14LG49eH12YXIgYjtmP2k8KGI9YS0oeT9nOmcuYikpJiZiPGEmJihpPWIpOmk8KGI9aSsoeT9nOmcudCkpJiZiPGEmJihhPWIpfXZhciBfPWwocixuLGksYSxvLHtpc0hvcml6b250YWw6ITEsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6aCxsZWZ0VG9SaWdodDpkfSk7cmV0dXJuIF8uZm9udFNpemU9ZS5mb250U2l6ZSxfLnRhcmdldFg9RyhfLnRhcmdldFgpLF8udGFyZ2V0WT1ZKF8udGFyZ2V0WSksaXNOYU4oXy50YXJnZXRYKXx8aXNOYU4oXy50YXJnZXRZKT97fToociE9PW4mJmkhPT1hJiZjKHYudHlwZSxfLG0pLHtzY2FsZTpfLnNjYWxlLHJvdGF0ZTpfLnJvdGF0ZSx0ZXh0WDpfLnRleHRYLHRleHRZOl8udGV4dFksYW5jaG9yWDpfLmFuY2hvclgsYW5jaG9yWTpfLmFuY2hvclksdGFyZ2V0WDpfLnRhcmdldFgsdGFyZ2V0WTpfLnRhcmdldFl9KX0scnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0wLGk9dDshciYmbjxNOyluKyssKGk9aS5wYXJlbnQpP3I9VShpLGUpOm49TTtyZXR1cm4gcnx8e319LG50PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbD1VKHQsZSk7aWYobClzPWw7ZWxzZSBpZihlKXM9RDtlbHNlIGlmKEYpaWYodC5wYXJlbnQpe3ZhciBjPWp8fHI7YyYmIWU/cz1SKHQsYyxuKToocz17fSxvLmV4dGVuZEZsYXQocyxydCh0LGUpKSl9ZWxzZSBzPW8uZXh0ZW5kRmxhdCh7fSx0KSx5JiYoImgiPT09YS5vcmllbnRhdGlvbj9hLmZsaXBYP3MueDA9dC54MTpzLngxPTA6YS5mbGlwWT9zLnkwPXQueTE6cy55MT0wKTtlbHNlIHM9e307cmV0dXJuIGkocyx7eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSxpdD1mdW5jdGlvbih0LGUscixuKXt2YXIgcz1VKHQsZSksbD17fSx1PVYodCxlLHIsbik7by5leHRlbmRGbGF0KGwse3RyYW5zZm9ybTpldCh7eDA6dS54MCx4MTp1LngxLHkwOnUueTAseTE6dS55MSx0ZXh0QkI6dC50ZXh0QkIsX3RleHQ6dC5fdGV4dH0se2lzSGVhZGVyOmEuaXNIZWFkZXIodCx2KX0pfSkscz9sPXM6dC5wYXJlbnQmJm8uZXh0ZW5kRmxhdChsLHJ0KHQsZSkpO3ZhciBmPXQudHJhbnNmb3JtO3JldHVybiB0LngwIT09dC54MSYmdC55MCE9PXQueTEmJmModi50eXBlLGYsbSksaShsLHt0cmFuc2Zvcm06e3NjYWxlOmYuc2NhbGUscm90YXRlOmYucm90YXRlLHRleHRYOmYudGV4dFgsdGV4dFk6Zi50ZXh0WSxhbmNob3JYOmYuYW5jaG9yWCxhbmNob3JZOmYuYW5jaG9yWSx0YXJnZXRYOmYudGFyZ2V0WCx0YXJnZXRZOmYudGFyZ2V0WX19KX0sYXQ9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1hWzBdLGw9YVsxXTtBP3QuZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3Quc2VsZWN0KCJwYXRoLnN1cmZhY2UiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbz1VKHQsZSk7aWYoZSlhPUQ7ZWxzZXt2YXIgcz1VKGIsZSk7YT1zP1IodCxzLG4pOnt9fXJldHVybiBpKG8sYSl9KHQsZSwwLFtzLGxdKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8ocih0KSl9fSkpLHQuc2VsZWN0KCJnLnNsaWNldGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkpLnJlbW92ZSgpOnQuZXhpdCgpLnJlbW92ZSgpfSxvdD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybTtyZXR1cm4gdC54MCE9PXQueDEmJnQueTAhPT10LnkxJiZjKHYudHlwZSxlLG0pLG8uZ2V0VGV4dFRyYW5zZm9ybSh7dGV4dFg6ZS50ZXh0WCx0ZXh0WTplLnRleHRZLGFuY2hvclg6ZS5hbmNob3JYLGFuY2hvclk6ZS5hbmNob3JZLHRhcmdldFg6ZS50YXJnZXRYLHRhcmdldFk6ZS50YXJnZXRZLHNjYWxlOmUuc2NhbGUscm90YXRlOmUucm90YXRlfSl9O0EmJih3LmVhY2goKGZ1bmN0aW9uKHQpe0JbaCh0KV09e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9LHQudHJhbnNmb3JtJiYoQltoKHQpXS50cmFuc2Zvcm09e3RleHRYOnQudHJhbnNmb3JtLnRleHRYLHRleHRZOnQudHJhbnNmb3JtLnRleHRZLGFuY2hvclg6dC50cmFuc2Zvcm0uYW5jaG9yWCxhbmNob3JZOnQudHJhbnNmb3JtLmFuY2hvclksdGFyZ2V0WDp0LnRyYW5zZm9ybS50YXJnZXRYLHRhcmdldFk6dC50cmFuc2Zvcm0udGFyZ2V0WSxzY2FsZTp0LnRyYW5zZm9ybS5zY2FsZSxyb3RhdGU6dC50cmFuc2Zvcm0ucm90YXRlfSl9KSksVC5lYWNoKChmdW5jdGlvbih0KXtOW2godCldPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSx0LnRyYW5zZm9ybSYmKE5baCh0KV0udHJhbnNmb3JtPXt0ZXh0WDp0LnRyYW5zZm9ybS50ZXh0WCx0ZXh0WTp0LnRyYW5zZm9ybS50ZXh0WSxhbmNob3JYOnQudHJhbnNmb3JtLmFuY2hvclgsYW5jaG9yWTp0LnRyYW5zZm9ybS5hbmNob3JZLHRhcmdldFg6dC50cmFuc2Zvcm0udGFyZ2V0WCx0YXJnZXRZOnQudHJhbnNmb3JtLnRhcmdldFksc2NhbGU6dC50cmFuc2Zvcm0uc2NhbGUscm90YXRlOnQudHJhbnNmb3JtLnJvdGF0ZX0pLCFGJiZhLmlzRW50cnkodCkmJihGPXQpfSkpKSxqPWQodCxlLGIsVCx7d2lkdGg6TCxoZWlnaHQ6Qyx2aWV3WDpHLHZpZXdZOlkscGF0aFNsaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPUcodC54MCkscj1HKHQueDEpLG49WSh0LnkwKSxpPVkodC55MSksYT1yLWUsbz1pLW47aWYoIWF8fCFvKXJldHVybiIiO3JldHVybiJNIitLKGUsbiswKSsiTCIrSyhyLTAsbikrIkwiK0socixpLTApKyJMIitLKGUrMCxpKSsiWiJ9LHRvTW92ZUluc2lkZVNsaWNlOmV0LHByZXZFbnRyeTpGLG1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcjpudCxtYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcjppdCxoYW5kbGVTbGljZXNFeGl0OmF0LGhhc1RyYW5zaXRpb246QSxzdHJUcmFuc2Zvcm06b3R9KSx2LnBhdGhiYXIudmlzaWJsZT9mKHQsZSxiLHcse2JhckRpZlk6eix3aWR0aDpQLGhlaWdodDpJLHZpZXdYOlosdmlld1k6SixwYXRoU2xpY2U6ZnVuY3Rpb24odCl7dmFyIGU9WihNYXRoLm1heChNYXRoLm1pbih0LngwLHQueDApLDApKSxyPVooTWF0aC5taW4oTWF0aC5tYXgodC54MSx0LngxKSxQKSksbj1KKHQueTApLGk9Sih0LnkxKSxhPUkvMixvPXt9LHM9e307by54PWUscy54PXIsby55PXMueT0obitpKS8yO3ZhciBsPXt4OmUseTpufSxjPXt4OnIseTpufSx1PXt4OnIseTppfSxmPXt4OmUseTppfTtyZXR1cm4iPiI9PT10dD8obC54LT1hLGMueC09YSx1LngtPWEsZi54LT1hKToiLyI9PT10dD8odS54LT1hLGYueC09YSxvLngtPWEvMixzLngtPWEvMik6IlxcIj09PXR0PyhsLngtPWEsYy54LT1hLG8ueC09YS8yLHMueC09YS8yKToiPCI9PT10dCYmKG8ueC09YSxzLngtPWEpLCQobCksJChmKSwkKG8pLCQoYyksJCh1KSwkKHMpLCJNIitLKGwueCxsLnkpKyJMIitLKGMueCxjLnkpKyJMIitLKHMueCxzLnkpKyJMIitLKHUueCx1LnkpKyJMIitLKGYueCxmLnkpKyJMIitLKG8ueCxvLnkpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6ZXQsbWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yOm50LG1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yOml0LGhhbmRsZVNsaWNlc0V4aXQ6YXQsaGFzVHJhbnNpdGlvbjpBLHN0clRyYW5zZm9ybTpvdH0pOncucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6NTAzLCIuLi9iYXIvY29uc3RhbnRzIjo2NTAsIi4uL2Jhci9wbG90Ijo2NTksIi4uL2Jhci91bmlmb3JtX3RleHQiOjY2NCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTA1MSwiLi9jb25zdGFudHMiOjEwNzQsIi4vZHJhd19hbmNlc3RvcnMiOjEwNzcsIkBwbG90bHkvZDMiOjU4LCJkMy1pbnRlcnBvbGF0ZSI6MTE2fV0sMTA4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxzPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIGwodCxlLHIsbil7dmFyIHMsbCxjPShufHx7fSkuaG92ZXJlZCx1PWUuZGF0YS5kYXRhLGY9dS5pLGg9dS5jb2xvcixwPW8uaXNIaWVyYXJjaHlSb290KGUpLGQ9MTtpZihjKXM9ci5faG92ZXJlZC5tYXJrZXIubGluZS5jb2xvcixsPXIuX2hvdmVyZWQubWFya2VyLmxpbmUud2lkdGg7ZWxzZSBpZihwJiZoPT09ci5yb290LmNvbG9yKWQ9MTAwLHM9InJnYmEoMCwwLDAsMCkiLGw9MDtlbHNlIGlmKHM9YS5jYXN0T3B0aW9uKHIsZiwibWFya2VyLmxpbmUuY29sb3IiKXx8aS5kZWZhdWx0TGluZSxsPWEuY2FzdE9wdGlvbihyLGYsIm1hcmtlci5saW5lLndpZHRoIil8fDAsIXIuX2hhc0NvbG9yc2NhbGUmJiFlLm9uUGF0aGJhcil7dmFyIG09ci5tYXJrZXIuZGVwdGhmYWRlO2lmKG0pe3ZhciBnLHY9aS5jb21iaW5lKGkuYWRkT3BhY2l0eShyLl9iYWNrZ3JvdW5kQ29sb3IsLjc1KSxoKTtpZighMD09PW0pe3ZhciB5PW8uZ2V0TWF4RGVwdGgocik7Zz1pc0Zpbml0ZSh5KT9vLmlzTGVhZihlKT8wOnIuX21heFZpc2libGVMYXllcnMtKGUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoKTplLmRhdGEuaGVpZ2h0KzF9ZWxzZSBnPWUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoLHIuX2F0Um9vdExldmVsfHxnKys7aWYoZz4wKWZvcih2YXIgeD0wO3g8Zzt4Kyspe3ZhciBiPS41KngvZztoPWkuY29tYmluZShpLmFkZE9wYWNpdHkodixiKSxoKX19fXQuc3R5bGUoInN0cm9rZS13aWR0aCIsbCkuY2FsbChpLmZpbGwsaCkuY2FsbChpLnN0cm9rZSxzKS5zdHlsZSgib3BhY2l0eSIsZCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll90cmVlbWFwbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtzKHQsZSwidHJlZW1hcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwobCx0LHIse2hvdmVyZWQ6ITF9KX0pKX0pKX0sc3R5bGVPbmU6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9saWIiOjUwMywiLi4vYmFyL3VuaWZvcm1fdGV4dCI6NjY0LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMDUxLCJAcGxvdGx5L2QzIjo1OH1dLDEwODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAseGhvdmVyZm9ybWF0OmEoIngiKSx5aG92ZXJmb3JtYXQ6YSgieSIpLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo0OTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo1NTcsIi4uL2JveC9hdHRyaWJ1dGVzIjo2NzN9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9jYWxjIiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7dmFyIGk9ZS5tYXgtZS5taW47aWYoIWkpcmV0dXJuIHQuYmFuZHdpZHRoP3QuYmFuZHdpZHRoOjA7aWYodC5iYW5kd2lkdGgpcmV0dXJuIE1hdGgubWF4KHQuYmFuZHdpZHRoLGkvMWU0KTt2YXIgYT1yLmxlbmd0aCxvPW4uc3RkZXYocixhLTEsZS5tZWFuKTtyZXR1cm4gTWF0aC5tYXgoZnVuY3Rpb24odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQsLS4yKX0oYSxvLGUucTMtZS5xMSksaS8xMDApfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbz10LnNwYW5tb2RlLGw9dC5zcGFufHxbXSxjPVtlLm1pbixlLm1heF0sdT1bZS5taW4tMipuLGUubWF4KzIqbl07ZnVuY3Rpb24gZihuKXt2YXIgaT1sW25dLGE9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBoPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbZigwKSxmKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChoKSxoLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbImgiPT09ZS5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKSxmPTEvMCxoPS0xLzAscD0wLGQ9MCxtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV0sdj1nLnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PWcuYmFuZHdpZHRoPWwoZSxnLHYpLHg9Zy5zcGFuPWMoZSxnLHUseSk7aWYoZy5taW49PT1nLm1heCYmMD09PXkpeD1nLnNwYW49W2cubWluLGcubWF4XSxnLmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sZy5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhbiIpLHJbMF0udC5lbXB0eT0hMCxyO3ZhciBUPW8ubWFrZUtERShnLGUsdik7Zy5kZW5zaXR5PW5ldyBBcnJheShfKTtmb3IodmFyIGs9MCxBPXhbMF07QTx4WzFdK3cvMjtrKyssQSs9dyl7dmFyIE09VChBKTtnLmRlbnNpdHlba109e3Y6TSx0OkF9LHA9TWF0aC5tYXgocCxNKX19ZD1NYXRoLm1heChkLHYubGVuZ3RoKSxmPU1hdGgubWluKGYseFswXSksaD1NYXRoLm1heChoLHhbMV0pfXZhciBTPWkuZmluZEV4dHJlbWVzKHUsW2YsaF0se3BhZGRlZDohMH0pO2lmKGUuX2V4dHJlbWVzW3UuX2lkXT1TLGUud2lkdGgpclswXS50Lm1heEtERT1wO2Vsc2V7dmFyIEU9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLEw9ZS5zY2FsZWdyb3VwLEM9RVtMXTtDPyhDLm1heEtERT1NYXRoLm1heChDLm1heEtERSxwKSxDLm1heENvdW50PU1hdGgubWF4KEMubWF4Q291bnQsZCkpOkVbTF09e21heEtERTpwLG1heENvdW50OmR9fXJldHVybiByWzBdLnQubGFiZWxzLmtkZT1uLl8odCwia2RlOiIpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uL2JveC9jYWxjIjo2NzQsIi4vaGVscGVycyI6MTA5MX1dLDEwODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJ2aW9saW4iIT09ZC50eXBlfHxwLmVtcHR5fHxkLm9yaWVudGF0aW9uIT09bHx8ZC54YXhpcyE9PWEuX2lkfHxkLnlheGlzIT09by5faWR8fHUucHVzaChmKX1uKCJ2aW9saW4iLHQsdSxjKX19fSx7Ii4uL2JveC9jcm9zc190cmFjZV9jYWxjIjo2NzV9XSwxMDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2lkZSIpLGwoIndpZHRoIil8fChsKCJzY2FsZWdyb3VwIixlLm5hbWUpLGwoInNjYWxlbW9kZSIpKTt2YXIgdSxmPWwoInNwYW4iKTtBcnJheS5pc0FycmF5KGYpJiYodT0ibWFudWFsIiksbCgic3Bhbm1vZGUiLHUpO3ZhciBoPWwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoImxpbmUud2lkdGgiKSxkPWwoImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO2EuaGFuZGxlUG9pbnRzRGVmYXVsdHModCxlLGwse3ByZWZpeDoiIn0pO3ZhciBtPWMoImJveC53aWR0aCIpLGc9YygiYm94LmZpbGxjb2xvciIsZCksdj1jKCJib3gubGluZS5jb2xvciIsaCkseT1jKCJib3gubGluZS53aWR0aCIscCk7bCgiYm94LnZpc2libGUiLEJvb2xlYW4obXx8Z3x8dnx8eSkpfHwoZS5ib3g9e3Zpc2libGU6ITF9KTt2YXIgeD1jKCJtZWFubGluZS5jb2xvciIsaCksYj1jKCJtZWFubGluZS53aWR0aCIscCk7bCgibWVhbmxpbmUudmlzaWJsZSIsQm9vbGVhbih4fHxiKSl8fChlLm1lYW5saW5lPXt2aXNpYmxlOiExfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYiI6NTAzLCIuLi9ib3gvZGVmYXVsdHMiOjY3NiwiLi9hdHRyaWJ1dGVzIjoxMDg3fV0sMTA5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6NTAzfV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe2x8fChsPXt9KTt2YXIgYyx1LGY9bC5ob3ZlckxheWVyLGg9dC5jZCxwPWhbMF0udHJhY2UsZD1wLmhvdmVyb24sbT0tMSE9PWQuaW5kZXhPZigidmlvbGlucyIpLGc9LTEhPT1kLmluZGV4T2YoImtkZSIpLHY9W107aWYobXx8Zyl7dmFyIHk9YS5ob3Zlck9uQm94ZXModCxlLHIscyk7aWYoZyYmeS5sZW5ndGg+MCl7dmFyIHgsYixfLHcsVCxrPXQueGEsQT10LnlhOyJoIj09PXAub3JpZW50YXRpb24/KFQ9ZSx4PSJ5IixfPUEsYj0ieCIsdz1rKTooVD1yLHg9IngiLF89ayxiPSJ5Iix3PUEpO3ZhciBNPWhbdC5pbmRleF07aWYoVD49TS5zcGFuWzBdJiZUPD1NLnNwYW5bMV0pe3ZhciBTPW4uZXh0ZW5kRmxhdCh7fSx0KSxFPXcuYzJwKFQsITApLEw9by5nZXRLZGVWYWx1ZShNLHAsVCksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKE0scCxFKSxQPV8uX29mZnNldCxJPV8uX2xlbmd0aDtTW3grIjAiXT1DWzBdLFNbeCsiMSJdPUNbMV0sU1tiKyIwIl09U1tiKyIxIl09RSxTW2IrIkxhYmVsIl09YisiOiAiK2kuaG92ZXJMYWJlbFRleHQodyxULHBbYisiaG92ZXJmb3JtYXQiXSkrIiwgIitoWzBdLnQubGFiZWxzLmtkZSsiICIrTC50b0ZpeGVkKDMpLFMuc3Bpa2VEaXN0YW5jZT15WzBdLnNwaWtlRGlzdGFuY2U7dmFyIE89eCsiU3Bpa2UiO1NbT109eVswXVtPXSx5WzBdLnNwaWtlRGlzdGFuY2U9dm9pZCAwLHlbMF1bT109dm9pZCAwLFMuaG92ZXJ0ZW1wbGF0ZT0hMSx2LnB1c2goUyksKHU9e3N0cm9rZTp0LmNvbG9yfSlbeCsiMSJdPW4uY29uc3RyYWluKFArQ1swXSxQLFArSSksdVt4KyIyIl09bi5jb25zdHJhaW4oUCtDWzFdLFAsUCtJKSx1W2IrIjEiXT11W2IrIjIiXT13Ll9vZmZzZXQrRX19bSYmKHY9di5jb25jYXQoeSkpfS0xIT09ZC5pbmRleE9mKCJwb2ludHMiKSYmKGM9YS5ob3Zlck9uUG9pbnRzKHQsZSxyKSk7dmFyIHo9Zi5zZWxlY3RBbGwoIi52aW9saW5saW5lLSIrcC51aWQpLmRhdGEodT9bMF06W10pO3JldHVybiB6LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgidmlvbGlubGluZS0iK3AudWlkLCEwKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSksei5leGl0KCkucmVtb3ZlKCksei5hdHRyKHUpLCJjbG9zZXN0Ij09PXM/Yz9bY106djpjPyh2LnB1c2goYyksdik6dn19LHsiLi4vLi4vbGliIjo1MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uL2JveC9ob3ZlciI6Njc4LCIuL2hlbHBlcnMiOjEwOTF9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2JveC9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2JveC9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidmlvbGluIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsIm9yaWVudGVkIiwiYm94LXZpb2xpbiIsInNob3dMZWdlbmQiLCJ2aW9saW5MYXlvdXQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi4vYm94L2RlZmF1bHRzIjo2NzYsIi4uL2JveC9zZWxlY3QiOjY4MywiLi4vc2NhdHRlci9zdHlsZSI6OTUwLCIuL2F0dHJpYnV0ZXMiOjEwODcsIi4vY2FsYyI6MTA4OCwiLi9jcm9zc190cmFjZV9jYWxjIjoxMDg5LCIuL2RlZmF1bHRzIjoxMDkwLCIuL2hvdmVyIjoxMDkyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDk0LCIuL2xheW91dF9kZWZhdWx0cyI6MTA5NSwiLi9wbG90IjoxMDk2LCIuL3N0eWxlIjoxMDk3fV0sMTA5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlcyI6NjgwfV0sMTA5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUsciwoZnVuY3Rpb24ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX0pLCJ2aW9saW4iKX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjY4MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTA5NH1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2JveC9wbG90Iikscz10KCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5fZnVsbExheW91dCxmPWUueGF4aXMsaD1lLnlheGlzO2Z1bmN0aW9uIHAodCl7dmFyIGU9cyh0LHt4YXhpczpmLHlheGlzOmgsY29ubmVjdEdhcHM6ITAsYmFzZVRvbGVyYW5jZTouNzUsc2hhcGU6InNwbGluZSIsc2ltcGxpZnk6ITAsbGluZWFyaXplZDohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX1pLm1ha2VUcmFjZUdyb3VwcyhjLHIsInRyYWNlIHZpb2xpbnMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXRbMF0scz1hLnQsYz1hLnRyYWNlO2lmKCEwIT09Yy52aXNpYmxlfHxzLmVtcHR5KXIucmVtb3ZlKCk7ZWxzZXt2YXIgZD1zLmJQb3MsbT1zLmJkUG9zLGc9ZVtzLnZhbExldHRlcisiYXhpcyJdLHY9ZVtzLnBvc0xldHRlcisiYXhpcyJdLHk9ImJvdGgiPT09Yy5zaWRlLHg9eXx8InBvc2l0aXZlIj09PWMuc2lkZSxiPXl8fCJuZWdhdGl2ZSI9PT1jLnNpZGUsXz1yLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5kYXRhKGkuaWRlbnRpdHkpO18uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwidmlvbGluIiksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyLGksYSxvLGwsZixoLF89bi5zZWxlY3QodGhpcyksdz10LmRlbnNpdHksVD13Lmxlbmd0aCxrPXYuYzJsKHQucG9zK2QsITApLEE9di5sMnAoayk7aWYoYy53aWR0aCllPXMubWF4S0RFL207ZWxzZXt2YXIgTT11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbYy5zY2FsZWdyb3VwXTtlPSJjb3VudCI9PT1jLnNjYWxlbW9kZT9NLm1heEtERS9tKihNLm1heENvdW50L3QucHRzLmxlbmd0aCk6TS5tYXhLREUvbX1pZih4KXtmb3IoZj1uZXcgQXJyYXkoVCksbz0wO288VDtvKyspKGg9ZltvXT17fSlbcy5wb3NMZXR0ZXJdPWsrd1tvXS52L2UsaFtzLnZhbExldHRlcl09Zy5jMmwod1tvXS50LCEwKTtyPXAoZil9aWYoYil7Zm9yKGY9bmV3IEFycmF5KFQpLGw9MCxvPVQtMTtsPFQ7bCsrLG8tLSkoaD1mW2xdPXt9KVtzLnBvc0xldHRlcl09ay13W29dLnYvZSxoW3MudmFsTGV0dGVyXT1nLmMybCh3W29dLnQsITApO2k9cChmKX1pZih5KWE9cisiTCIraS5zdWJzdHIoMSkrIloiO2Vsc2V7dmFyIFM9W0EsZy5jMnAod1swXS50KV0sRT1bQSxnLmMycCh3W1QtMV0udCldOyJoIj09PWMub3JpZW50YXRpb24mJihTLnJldmVyc2UoKSxFLnJldmVyc2UoKSksYT14PyJNIitTKyJMIityLnN1YnN0cigxKSsiTCIrRToiTSIrRSsiTCIraS5zdWJzdHIoMSkrIkwiK1N9Xy5hdHRyKCJkIixhKSx0LnBvc0NlbnRlclB4PUEsdC5wb3NEZW5zaXR5U2NhbGU9ZSptLHQucGF0aD1fLm5vZGUoKSx0LnBhdGhMZW5ndGg9dC5wYXRoLmdldFRvdGFsTGVuZ3RoKCkvKHk/MjoxKX0pKTt2YXIgdyxULGssQT1jLmJveCxNPUEud2lkdGgsUz0oQS5saW5lfHx7fSkud2lkdGg7eT8odz1tKk0sVD0wKTp4Pyh3PVswLG0qTS8yXSxUPVMqe3g6MSx5Oi0xfVtzLnBvc0xldHRlcl0pOih3PVttKk0vMiwwXSxUPVMqe3g6LTEseToxfVtzLnBvc0xldHRlcl0pLG8ucGxvdEJveEFuZFdoaXNrZXJzKHIse3Bvczp2LHZhbDpnfSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6VH0pLG8ucGxvdEJveE1lYW4ocix7cG9zOnYsdmFsOmd9LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDpUfSksIWMuYm94LnZpc2libGUmJmMubWVhbmxpbmUudmlzaWJsZSYmKGs9aS5pZGVudGl0eSk7dmFyIEU9ci5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5kYXRhKGt8fFtdKTtFLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtZWFubGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIiksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1nLmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LGMsZSk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsImgiPT09Yy5vcmllbnRhdGlvbj8iTSIrZSsiLCIrclswXSsiViIrclsxXToiTSIrclswXSsiLCIrZSsiSCIrclsxXSl9KSksby5wbG90UG9pbnRzKHIse3g6Zix5Omh9LGMscyl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjM4OCwiLi4vLi4vbGliIjo1MDMsIi4uL2JveC9wbG90Ijo2ODIsIi4uL3NjYXR0ZXIvbGluZV9wb2ludHMiOjk0MCwiLi9oZWxwZXJzIjoxMDkxLCJAcGxvdGx5L2QzIjo1OH1dLDEwOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UudmlvbGlucyIpO2Uuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPW4uc2VsZWN0KHRoaXMpLHM9ci5ib3h8fHt9LGw9cy5saW5lfHx7fSxjPXIubWVhbmxpbmV8fHt9LHU9Yy53aWR0aDtvLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmxpbmUud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxyLmxpbmUuY29sb3IpLmNhbGwoaS5maWxsLHIuZmlsbGNvbG9yKSxvLnNlbGVjdEFsbCgicGF0aC5ib3giKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixsLndpZHRoKyJweCIpLmNhbGwoaS5zdHJva2UsbC5jb2xvcikuY2FsbChpLmZpbGwscy5maWxsY29sb3IpO3ZhciBmPXsic3Ryb2tlLXdpZHRoIjp1KyJweCIsInN0cm9rZS1kYXNoYXJyYXkiOjIqdSsicHgsIit1KyJweCJ9O28uc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZShmKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuc3R5bGUoZikuY2FsbChpLnN0cm9rZSxjLmNvbG9yKSxhKG8scix0KX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi9zY2F0dGVyL3N0eWxlIjo5NTAsIkBwbG90bHkvZDMiOjU4fV0sMTA5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzIiksYT10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9ZS5leHBvcnRzPWwocyh7eDppLngseTppLnksejppLnosdmFsdWU6aS52YWx1ZSxpc29taW46aS5pc29taW4saXNvbWF4OmkuaXNvbWF4LHN1cmZhY2U6aS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmkuc2xpY2VzLGNhcHM6aS5jYXBzLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx4aG92ZXJmb3JtYXQ6aS54aG92ZXJmb3JtYXQseWhvdmVyZm9ybWF0OmkueWhvdmVyZm9ybWF0LHpob3ZlcmZvcm1hdDppLnpob3ZlcmZvcm1hdCx2YWx1ZWhvdmVyZm9ybWF0OmkudmFsdWVob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOmkuaG92ZXJ0ZW1wbGF0ZX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmkuY29sb3JiYXIsb3BhY2l0eTppLm9wYWNpdHksb3BhY2l0eXNjYWxlOmEub3BhY2l0eXNjYWxlLGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSksImNhbGMiLCJuZXN0ZWQiKTtjLnguZWRpdFR5cGU9Yy55LmVkaXRUeXBlPWMuei5lZGl0VHlwZT1jLnZhbHVlLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixjLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjozNzMsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NTM2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo1NTAsIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlcyI6ODYyLCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiOjEwNTd9XSwxMDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyIpLmdsX21lc2gzZCxpPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9dCgiLi4vaXNvc3VyZmFjZS9jb252ZXJ0IikuZmluZE5lYXJlc3RPbkF4aXMsYz10KCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgZj11LnByb3RvdHlwZTtmLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGk9dGhpcy5kYXRhLl9tZXNoWltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGksdGhpcy5kYXRhLl9acykuaWQsZj10LmluZGV4PXUrbypjK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2ZdLHRoaXMuZGF0YS5fbWVzaFlbZl0sdGhpcy5kYXRhLl9tZXNoWltmXSx0aGlzLmRhdGEuX3ZhbHVlW2ZdXTt2YXIgaD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShoKSYmdm9pZCAwIT09aFtmXT90LnRleHRMYWJlbD1oW2ZdOmgmJih0LnRleHRMYWJlbD1oKSwhMH19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSkpfXRoaXMuZGF0YT1jKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfSx1PW8odCk7bC52ZXJ0ZXhJbnRlbnNpdHk9dC5fbWVzaEludGVuc2l0eSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdS5taW4sdS5tYXhdLGwuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKGwpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uLy4uL3N0YWNrZ2xfbW9kdWxlcyI6MTEyMCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjozNzgsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjQ5OSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NTI4LCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjYwOSwiLi4vaXNvc3VyZmFjZS9jb252ZXJ0Ijo4NjR9XSwxMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzIikuc3VwcGx5SXNvRGVmYXVsdHMsbz10KCIuLi9zdXJmYWNlL2RlZmF1bHRzIikub3BhY2l0eXNjYWxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxyLHMsbCksbyh0LGUscyxsKX19LHsiLi4vLi4vbGliIjo1MDMsIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHMiOjg2NSwiLi4vc3VyZmFjZS9kZWZhdWx0cyI6MTA2MCwiLi9hdHRyaWJ1dGVzIjoxMDk4fV0sMTEwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vaXNvc3VyZmFjZS9jYWxjIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0scGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidm9sdW1lIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6NTk4LCIuLi9pc29zdXJmYWNlL2NhbGMiOjg2MywiLi9hdHRyaWJ1dGVzIjoxMDk4LCIuL2NvbnZlcnQiOjEwOTksIi4vZGVmYXVsdHMiOjExMDB9XSwxMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2Z1bmN0aW9uIGgodCl7cmV0dXJue21hcmtlcjp7Y29sb3I6dSh7fSxuLm1hcmtlci5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6dSh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSx3aWR0aDp1KHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17bWVhc3VyZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGJhc2U6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSx4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6bygieCIpLHlob3ZlcmZvcm1hdDpvKCJ5IiksaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6cyh7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxob3ZlcmluZm86dSh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJuYW1lIiwieCIsInkiLCJ0ZXh0IiwiaW5pdGlhbCIsImRlbHRhIiwiZmluYWwiXX0pLHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0sdGV4dHRlbXBsYXRlOmwoe2VkaXRUeXBlOiJwbG90In0se2tleXM6Yy5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIl0pfSksdGV4dDpuLnRleHQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGluc2lkZXRleHRhbmNob3I6bi5pbnNpZGV0ZXh0YW5jaG9yLHRleHRhbmdsZTpuLnRleHRhbmdsZSx0ZXh0Zm9udDpuLnRleHRmb250LGluc2lkZXRleHRmb250Om4uaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250Om4ub3V0c2lkZXRleHRmb250LGNvbnN0cmFpbnRleHQ6bi5jb25zdHJhaW50ZXh0LGNsaXBvbmF4aXM6bi5jbGlwb25heGlzLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24sb2Zmc2V0Om4ub2Zmc2V0LHdpZHRoOm4ud2lkdGgsaW5jcmVhc2luZzpoKCksZGVjcmVhc2luZzpoKCksdG90YWxzOmgoKSxjb25uZWN0b3I6e2xpbmU6e2NvbG9yOnUoe30saS5jb2xvcix7ZGZsdDpmLmRlZmF1bHRMaW5lfSksd2lkdGg6dSh7fSxpLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxkYXNoOmkuZGFzaCxlZGl0VHlwZToicGxvdCJ9LG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNwYW5uaW5nIiwiYmV0d2VlbiJdLGRmbHQ6ImJldHdlZW4iLGVkaXRUeXBlOiJwbG90In0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2xpYi9leHRlbmQiOjQ5MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NTUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo2MzMsIi4uL2Jhci9hdHRyaWJ1dGVzIjo2NDgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6OTI2LCIuL2NvbnN0YW50cyI6MTEwNH1dLDExMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCl7cmV0dXJuImEiPT09dHx8ImFic29sdXRlIj09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4idCI9PT10fHwidG90YWwiPT09dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsbT1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZz1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1tLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1nLm1ha2VDYWxjZGF0YShlLCJ5IiksaD1pKGUsZywieSIsZikscD0hIWUueXBlcmlvZGFsaWdubWVudCxkPSJ5Iik6KHI9Zy5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9bS5tYWtlQ2FsY2RhdGEoZSwieCIpLGg9aShlLG0sIngiLGYpLHA9ISFlLnhwZXJpb2RhbGlnbm1lbnQsZD0ieCIpLHU9aC52YWxzO2Zvcih2YXIgdix5PU1hdGgubWluKHUubGVuZ3RoLHIubGVuZ3RoKSx4PW5ldyBBcnJheSh5KSxiPTAsXz0hMSx3PTA7dzx5O3crKyl7dmFyIFQ9clt3XXx8MCxrPSExOyhyW3ddIT09c3x8YyhlLm1lYXN1cmVbd10pfHxsKGUubWVhc3VyZVt3XSkpJiZ3KzE8eSYmKHJbdysxXSE9PXN8fGMoZS5tZWFzdXJlW3crMV0pfHxsKGUubWVhc3VyZVt3KzFdKSkmJihrPSEwKTt2YXIgQT14W3ddPXtpOncscDp1W3ddLHM6VCxyYXdTOlQsY05leHQ6a307bChlLm1lYXN1cmVbd10pPyhiPUEucyxBLmlzU3VtPSEwLEEuZGlyPSJ0b3RhbHMiLEEucz1iKTpjKGUubWVhc3VyZVt3XSk/KEEuaXNTdW09ITAsQS5kaXI9InRvdGFscyIsQS5zPWIpOihBLmlzU3VtPSExLEEuZGlyPUEucmF3UzwwPyJkZWNyZWFzaW5nIjoiaW5jcmVhc2luZyIsdj1BLnMsQS5zPWIrdixiKz12KSwidG90YWxzIj09PUEuZGlyJiYoXz0hMCkscCYmKHhbd10ub3JpZ19wPWZbd10seFt3XVtkKyJFbmQiXT1oLmVuZHNbd10seFt3XVtkKyJTdGFydCJdPWguc3RhcnRzW3ddKSxlLmlkcyYmKEEuaWQ9U3RyaW5nKGUuaWRzW3ddKSksQS52PShlLmJhc2V8fDApK2J9cmV0dXJuIHgubGVuZ3RoJiYoeFswXS5oYXNUb3RhbHM9XyksYShlLnRleHQseCwidHgiKSxhKGUuaG92ZXJ0ZXh0LHgsImh0eCIpLG8oeCxlKSx4fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo1NTEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjkyOH1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiaW5pdGlhbCIsImRlbHRhIiwiZmluYWwiXX19LHt9XSwxMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGY9W10saD1bXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcD1vW2ldOyEwPT09cC52aXNpYmxlJiZwLnhheGlzPT09bC5faWQmJnAueWF4aXM9PT1jLl9pZCYmIndhdGVyZmFsbCI9PT1wLnR5cGUmJihyPXNbaV0sImgiPT09cC5vcmllbnRhdGlvbj9oLnB1c2gocik6Zi5wdXNoKHIpLHUucHVzaChyKSl9dmFyIGQ9e21vZGU6YS53YXRlcmZhbGxtb2RlLG5vcm06YS53YXRlcmZhbGxub3JtLGdhcDphLndhdGVyZmFsbGdhcCxncm91cGdhcDphLndhdGVyZmFsbGdyb3VwZ2FwfTtmb3Iobih0LGwsYyxmLGQpLG4odCxjLGwsaCxkKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIG09MDttPHIubGVuZ3RoO20rKyl7dmFyIGc9clttXTshMT09PWcuaXNTdW0mJihnLnMwKz0wPT09bT8wOnJbbS0xXS5zKSxtKzE8ci5sZW5ndGgmJihyW21dLm5leHRQMD1yW20rMV0ucDAsclttXS5uZXh0UzA9clttKzFdLnMwKX19fX0seyIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6NjUxfV0sMTEwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksZj11LklOQ1JFQVNJTkcuQ09MT1IsaD11LkRFQ1JFQVNJTkcuQ09MT1I7ZnVuY3Rpb24gcCh0LGUscil7dChlKyIubWFya2VyLmNvbG9yIixyKSx0KGUrIi5tYXJrZXIubGluZS5jb2xvciIsYy5kZWZhdWx0TGluZSksdChlKyIubWFya2VyLmxpbmUud2lkdGgiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihvKHQsZSxpLGMpKXtzKHQsZSxpLGMpLGMoInhob3ZlcmZvcm1hdCIpLGMoInlob3ZlcmZvcm1hdCIpLGMoIm1lYXN1cmUiKSxjKCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLGMoImJhc2UiKSxjKCJvZmZzZXQiKSxjKCJ3aWR0aCIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKSxjKCJob3ZlcnRlbXBsYXRlIik7dmFyIHU9YygidGV4dHBvc2l0aW9uIik7aWYoYSh0LGUsaSxjLHUse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiEwLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITAsbW9kdWxlSGFzVGV4dGFuZ2xlOiEwLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMH0pLCJub25lIiE9PWUudGV4dHBvc2l0aW9uJiYoYygidGV4dHRlbXBsYXRlIiksZS50ZXh0dGVtcGxhdGV8fGMoInRleHRpbmZvIikpLHAoYywiaW5jcmVhc2luZyIsZikscChjLCJkZWNyZWFzaW5nIixoKSxwKGMsInRvdGFscyIsIiM0NDk5RkYiKSxjKCJjb25uZWN0b3IudmlzaWJsZSIpKWMoImNvbm5lY3Rvci5tb2RlIiksYygiY29ubmVjdG9yLmxpbmUud2lkdGgiKSYmKGMoImNvbm5lY3Rvci5saW5lLmNvbG9yIiksYygiY29ubmVjdG9yLmxpbmUuZGFzaCIpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLGwsdCl9aWYoImdyb3VwIj09PWUud2F0ZXJmYWxsbW9kZSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyPShhPXRbc10pLl9pbnB1dCxpKHIsYSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjQ3MywiLi4vLi4vbGliIjo1MDMsIi4uL2Jhci9kZWZhdWx0cyI6NjUyLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6OTQ2LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjo5NTMsIi4vYXR0cmlidXRlcyI6MTEwMn1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiaW5pdGlhbCJpbiBlJiYodC5pbml0aWFsPWUuaW5pdGlhbCksImRlbHRhImluIGUmJih0LmRlbHRhPWUuZGVsdGEpLCJmaW5hbCJpbiBlJiYodC5maW5hbD1lLmZpbmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDExMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGE9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsbz10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxzPW8uSU5DUkVBU0lORy5TWU1CT0wsbD1vLkRFQ1JFQVNJTkcuU1lNQk9MO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLGMpe3ZhciB1PWEodCxlLHIsbyxjKTtpZih1KXt2YXIgZj11LmNkLGg9ZlswXS50cmFjZSxwPSJoIj09PWgub3JpZW50YXRpb24sZD1wPyJ4IjoieSIsbT1wP3QueGE6dC55YSxnPWZbdS5pbmRleF0sdj1nLmlzU3VtP2cuYitnLnM6Zy5yYXdTO2lmKCFnLmlzU3VtKXt1LmluaXRpYWw9Zy5iK2cucy12LHUuZGVsdGE9dix1LmZpbmFsPXUuaW5pdGlhbCt1LmRlbHRhO3ZhciB5PWsoTWF0aC5hYnModS5kZWx0YSkpO3UuZGVsdGFMYWJlbD12PDA/IigiK3krIikiOnksdS5maW5hbExhYmVsPWsodS5maW5hbCksdS5pbml0aWFsTGFiZWw9ayh1LmluaXRpYWwpfXZhciB4PWcuaGl8fGguaG92ZXJpbmZvLGI9W107aWYoeCYmIm5vbmUiIT09eCYmInNraXAiIT09eCl7dmFyIF89ImFsbCI9PT14LHc9eC5zcGxpdCgiKyIpLFQ9ZnVuY3Rpb24odCl7cmV0dXJuIF98fC0xIT09dy5pbmRleE9mKHQpfTtnLmlzU3VtfHwoIVQoImZpbmFsIil8fFQocD8ieCI6InkiKXx8Yi5wdXNoKHUuZmluYWxMYWJlbCksVCgiZGVsdGEiKSYmKHY8MD9iLnB1c2godS5kZWx0YUxhYmVsKyIgIitsKTpiLnB1c2godS5kZWx0YUxhYmVsKyIgIitzKSksVCgiaW5pdGlhbCIpJiZiLnB1c2goIkluaXRpYWw6ICIrdS5pbml0aWFsTGFiZWwpKX1yZXR1cm4gYi5sZW5ndGgmJih1LmV4dHJhVGV4dD1iLmpvaW4oIjxicj4iKSksdS5jb2xvcj1mdW5jdGlvbih0LGUpe3ZhciByPXRbZS5kaXJdLm1hcmtlcixuPXIuY29sb3IsYT1yLmxpbmUuY29sb3Isbz1yLmxpbmUud2lkdGg7aWYoaShuKSlyZXR1cm4gbjtpZihpKGEpJiZvKXJldHVybiBhfShoLGcpLFt1XX1mdW5jdGlvbiBrKHQpe3JldHVybiBuKG0sdCxoW2QrImhvdmVyZm9ybWF0Il0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6MzY2LCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjQ3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vYmFyL2hvdmVyIjo2NTV9XSwxMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToid2F0ZXJmYWxsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjU2OCwiLi4vYmFyL3NlbGVjdCI6NjYwLCIuL2F0dHJpYnV0ZXMiOjExMDIsIi4vY2FsYyI6MTEwMywiLi9jcm9zc190cmFjZV9jYWxjIjoxMTA1LCIuL2RlZmF1bHRzIjoxMTA2LCIuL2V2ZW50X2RhdGEiOjExMDcsIi4vaG92ZXIiOjExMDgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExMTAsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTExLCIuL3Bsb3QiOjExMTIsIi4vc3R5bGUiOjExMTN9XSwxMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17d2F0ZXJmYWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTExMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJ3YXRlcmZhbGwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygid2F0ZXJmYWxsbW9kZSIpLG8oIndhdGVyZmFsbGdhcCIsLjIpLG8oIndhdGVyZmFsbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjUwMywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTExMH1dLDExMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQ7bCgid2F0ZXJmYWxsIix1KSxzLnBsb3QodCxlLHIsYyx7bW9kZTp1LndhdGVyZmFsbG1vZGUsbm9ybTp1LndhdGVyZmFsbG1vZGUsZ2FwOnUud2F0ZXJmYWxsZ2FwLGdyb3VwZ2FwOnUud2F0ZXJmYWxsZ3JvdXBnYXB9KSxmdW5jdGlvbih0LGUscixzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx1PXJbMF0udHJhY2UsZj1pLmVuc3VyZVNpbmdsZShzLCJnIiwibGluZXMiKTtpZih1LmNvbm5lY3RvciYmdS5jb25uZWN0b3IudmlzaWJsZSl7dmFyIGg9ImgiPT09dS5vcmllbnRhdGlvbixwPXUuY29ubmVjdG9yLm1vZGUsZD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBtPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09bS0xfHxyLmNOZXh0KXt2YXIgdT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxuP1tpLGFdOlthLGldfShyLGwsYyxoKSxmPXVbMF0sZD11WzFdLGc9IiI7ZlswXSE9PW8mJmRbMF0hPT1vJiZmWzFdIT09byYmZFsxXSE9PW8mJigic3Bhbm5pbmciPT09cCYmIXIuaXNTdW0mJnM+MCYmKGcrPWg/Ik0iK2ZbMF0rIiwiK2RbMV0rIlYiK2RbMF06Ik0iK2ZbMV0rIiwiK2RbMF0rIkgiK2ZbMF0pLCJiZXR3ZWVuIiE9PXAmJihyLmlzU3VtfHxzPG0tMSkmJihnKz1oPyJNIitmWzFdKyIsIitkWzBdKyJWIitkWzFdOiJNIitmWzBdKyIsIitkWzFdKyJIIitmWzFdKSxmWzJdIT09byYmZFsyXSE9PW8mJihnKz1oPyJNIitmWzFdKyIsIitkWzFdKyJWIitkWzJdOiJNIitmWzFdKyIsIitkWzFdKyJIIitmWzJdKSksIiI9PT1nJiYoZz0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgZi5yZW1vdmUoKX0pKX0odCxlLHIsYyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo0NzksIi4uLy4uL2xpYiI6NTAzLCIuLi9iYXIvcGxvdCI6NjU5LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NjQsIkBwbG90bHkvZDMiOjU4fV0sMTExMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxzPXQoIi4uL2Jhci9zdHlsZSIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1zLnN0eWxlVGV4dFBvaW50cztlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcud2F0ZXJmYWxsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQscywid2F0ZXJmYWxsIikscy5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSkscy5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoIi5wb2ludCA+IHBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5pc0JsYW5rKXt2YXIgZT1zW3QuZGlyXS5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsZS5jb2xvcikuY2FsbChhLnN0cm9rZSxlLmxpbmUuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxlLmxpbmUuZGFzaCxlLmxpbmUud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixzLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD9vOjEpfX0pKSxjKHIscyx0KSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjozNjYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6Mzg4LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo0NzgsIi4uL2Jhci9zdHlsZSI6NjYyLCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo2NjQsIkBwbG90bHkvZDMiOjU4fV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iYWdncmVnYXRlIjt2YXIgbD1yLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheToiYWdncmVnYXRpb24iLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWVkaWFuIiwibW9kZSIsInJtcyIsInN0ZGRldiIsIm1pbiIsIm1heCIsImZpcnN0IiwibGFzdCIsImNoYW5nZSIsInJhbmdlIl0sZGZsdDoiZmlyc3QiLGVkaXRUeXBlOiJjYWxjIn0sZnVuY21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNhbXBsZSIsInBvcHVsYXRpb24iXSxkZmx0OiJzYW1wbGUiLGVkaXRUeXBlOiJjYWxjIn0sZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxjPWwuYWdncmVnYXRpb25zO2Z1bmN0aW9uIHUodCxlLHIsYSl7aWYoYS5lbmFibGVkKXtmb3IodmFyIG89YS50YXJnZXQsbD1pLm5lc3RlZFByb3BlcnR5KGUsbyksYz1sLmdldCgpLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZ1bmMsbj1lLmQyYyxhPWUuYzJkO3N3aXRjaChyKXtjYXNlImNvdW50IjpyZXR1cm4gZjtjYXNlImZpcnN0IjpyZXR1cm4gaDtjYXNlImxhc3QiOnJldHVybiBwO2Nhc2Uic3VtIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gYShyKX07Y2FzZSJhdmciOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGkrKyl9cmV0dXJuIGk/YShyL2kpOnN9O2Nhc2UibWluIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89bih0W2VbaV1dKTtvIT09cyYmKHI9TWF0aC5taW4ocixvKSl9cmV0dXJuIHI9PT0xLzA/czphKHIpfTtjYXNlIm1heCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1uKHRbZVtpXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czphKHIpfTtjYXNlInJhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksaT1NYXRoLm1heChpLGwpKX1yZXR1cm4gaT09PS0xLzB8fHI9PT0xLzA/czphKGktcil9O2Nhc2UiY2hhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbZVswXV0pLGk9bih0W2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcj09PXN8fGk9PT1zP3M6YShpLXIpfTtjYXNlIm1lZGlhbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmci5wdXNoKGwpfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoaS5zb3J0ZXJBc2MpO3ZhciBjPShyLmxlbmd0aC0xKS8yO3JldHVybiBhKChyW01hdGguZmxvb3IoYyldK3JbTWF0aC5jZWlsKGMpXSkvMil9O2Nhc2UibW9kZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGk9MCxvPXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1uKHRbZVtsXV0pO2lmKGMhPT1zKXt2YXIgdT1yW2NdPShyW2NdfHwwKSsxO3U+aSYmKGk9dSxvPWMpfX1yZXR1cm4gaT9hKG8pOnN9O2Nhc2Uicm1zIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCpsLGkrKyl9cmV0dXJuIGk/YShNYXRoLnNxcnQoci9pKSk6c307Y2FzZSJzdGRkZXYiOnJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpLGE9MCxvPTAsbD0xLGM9cztmb3IoaT0wO2k8ci5sZW5ndGgmJmM9PT1zO2krKyljPW4oZVtyW2ldXSk7aWYoYz09PXMpcmV0dXJuIHM7Zm9yKDtpPHIubGVuZ3RoO2krKyl7dmFyIHU9bihlW3JbaV1dKTtpZih1IT09cyl7dmFyIGY9dS1jO2ErPWYsbys9ZipmLGwrK319dmFyIGg9InNhbXBsZSI9PT10LmZ1bmNtb2RlP2wtMTpsO3JldHVybiBoP01hdGguc3FydCgoby1hKmEvbCkvaCk6MH19fShhLG4uZ2V0RGF0YUNvbnZlcnNpb25zKHQsZSxvLGMpKSxkPW5ldyBBcnJheShyLmxlbmd0aCksbT0wO208ci5sZW5ndGg7bSsrKWRbbV09dShjLHJbbV0pO2wuc2V0KGQpLCJjb3VudCI9PT1hLmZ1bmMmJmkucHVzaFVuaXF1ZShlLl9hcnJheUF0dHJzLG8pfX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHRbZVtlLmxlbmd0aC0xXV19ci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49e307ZnVuY3Rpb24gbyhlLHIpe3JldHVybiBpLmNvZXJjZSh0LG4sbCxlLHIpfWlmKCFvKCJlbmFibGVkIikpcmV0dXJuIG47dmFyIHM9YS5maW5kQXJyYXlBdHRyaWJ1dGVzKGUpLHU9e307Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dPTE7dmFyIGY9bygiZ3JvdXBzIik7aWYoIUFycmF5LmlzQXJyYXkoZikpe2lmKCF1W2ZdKXJldHVybiBuLmVuYWJsZWQ9ITEsbjt1W2ZdPTB9dmFyIGgscD10LmFnZ3JlZ2F0aW9uc3x8W10sZD1uLmFnZ3JlZ2F0aW9ucz1uZXcgQXJyYXkocC5sZW5ndGgpO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gaS5jb2VyY2UocFtyXSxoLGMsdCxlKX1mb3Iocj0wO3I8cC5sZW5ndGg7cisrKXtoPXtfaW5kZXg6cn07dmFyIGc9bSgidGFyZ2V0Iiksdj1tKCJmdW5jIik7bSgiZW5hYmxlZCIpJiZnJiYodVtnXXx8ImNvdW50Ij09PXYmJnZvaWQgMD09PXVbZ10pPygic3RkZGV2Ij09PXYmJm0oImZ1bmNtb2RlIiksdVtnXT0wLGRbcl09aCk6ZFtyXT17ZW5hYmxlZDohMSxfaW5kZXg6cn19Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dJiZkLnB1c2goe3RhcmdldDpzW3JdLGZ1bmM6Yy5mdW5jLmRmbHQsZW5hYmxlZDohMCxfaW5kZXg6LTF9KTtyZXR1cm4gbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBuPXIuZ3JvdXBzLGE9aS5nZXRUYXJnZXRBcnJheShlLHt0YXJnZXQ6bn0pO2lmKGEpe3ZhciBzLGwsYyxmLGg9e30scD17fSxkPVtdLG09byhlLnRyYW5zZm9ybXMsciksZz1hLmxlbmd0aDtmb3IoZS5fbGVuZ3RoJiYoZz1NYXRoLm1pbihnLGUuX2xlbmd0aCkpLHM9MDtzPGc7cysrKXZvaWQgMD09PShjPWhbbD1hW3NdXSk/KGhbbF09ZC5sZW5ndGgsZj1bc10sZC5wdXNoKGYpLHBbaFtsXV09bShzKSk6KGRbY10ucHVzaChzKSxwW2hbbF1dPShwW2hbbF1dfHxbXSkuY29uY2F0KG0ocykpKTtyLl9pbmRleFRvUG9pbnRzPXA7dmFyIHY9ci5hZ2dyZWdhdGlvbnM7Zm9yKHM9MDtzPHYubGVuZ3RoO3MrKyl1KHQsZSxkLHZbc10pOyJzdHJpbmciPT10eXBlb2YgbiYmdSh0LGUsZCx7dGFyZ2V0Om4sZnVuYzoiZmlyc3QiLGVuYWJsZWQ6ITB9KSxlLl9sZW5ndGg9ZC5sZW5ndGh9fX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NDc5LCIuLi9saWIiOjUwMywiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjU0MiwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi9oZWxwZXJzIjoxMTE3fV0sMTExNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksbD1zLkNPTVBBUklTT05fT1BTLGM9cy5JTlRFUlZBTF9PUFMsdT1zLlNFVF9PUFM7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZmlsdGVyIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9wZXJhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLmNvbmNhdChsKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGEoaSxhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHIuYXR0cmlidXRlcyxpLGEpfWlmKGEoImVuYWJsZWQiKSl7dmFyIG89YSgidGFyZ2V0Iik7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KG8pJiYwPT09by5sZW5ndGgpcmV0dXJuIGUuZW5hYmxlZD0hMSxlO2EoInByZXNlcnZlZ2FwcyIpLGEoIm9wZXJhdGlvbiIpLGEoInZhbHVlIik7dmFyIHM9aS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7cyh0LGUsInZhbHVlY2FsZW5kYXIiLG51bGwpLHModCxlLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1uLmdldFRhcmdldEFycmF5KGUscik7aWYoaSl7dmFyIHM9ci50YXJnZXQsZj1pLmxlbmd0aDtlLl9sZW5ndGgmJihmPU1hdGgubWluKGYsZS5fbGVuZ3RoKSk7dmFyIGg9ci50YXJnZXRjYWxlbmRhcixwPWUuX2FycmF5QXR0cnMsZD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIHMpe3ZhciBtPW4ubmVzdGVkUHJvcGVydHkoZSxzKyJjYWxlbmRhciIpLmdldCgpO20mJihoPW0pfXZhciBnLHYseT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGY9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9ZihhP2lbMF06aSk6byhjKT9zPWE/W2YoaVswXSksZihpWzFdKV06W2YoaSksZihpKV06byh1KSYmKHM9YT9pLm1hcChmKTpbZihpKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT09PXN9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSE9PXN9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPHN9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KTw9c307Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk+c307Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPj1zfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTw9c1sxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT5zWzBdJiZlPD1zWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT5zWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoaCh0KSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMT09PXMuaW5kZXhPZihoKHQpKX19fShyLGEuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGgpLHg9e30sYj17fSxfPTA7ZD8oZz1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheShmKSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KGc9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksayhnKTtmb3IodmFyIHc9byhlLnRyYW5zZm9ybXMsciksVD0wO1Q8ZjtUKyspe3koaVtUXSk/KGsodixUKSxiW18rK109dyhUKSk6ZCYmXysrfXIuX2luZGV4VG9Qb2ludHM9YixlLl9sZW5ndGg9X319ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgaT0wO2k8cC5sZW5ndGg7aSsrKXt0KG4ubmVzdGVkUHJvcGVydHkoZSxwW2ldKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NDc1LCIuLi9saWIiOjUwMywiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjU1NCwiLi4vcmVnaXN0cnkiOjYzOCwiLi9oZWxwZXJzIjoxMTE3fV0sMTExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmLGgscCxkLG0sZz1lLnRyYW5zZm9ybSx2PWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbdl0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsZyk7aWYoIW4uaXNBcnJheU9yVHlwZWRBcnJheSh5KXx8MD09PXkubGVuZ3RoKXJldHVyblt0XTt2YXIgYj1uLmZpbHRlclVuaXF1ZSh5KSxfPW5ldyBBcnJheShiLmxlbmd0aCksdz15Lmxlbmd0aCxUPWkuZmluZEFycmF5QXR0cmlidXRlcyh0KSxrPWcuc3R5bGVzfHxbXSxBPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspQVtrW3JdLnRhcmdldF09a1tyXS52YWx1ZTtnLnN0eWxlcyYmKG09bi5rZXllZENvbnRhaW5lcihnLCJzdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIikpO3ZhciBNPXt9LFM9e307Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl7TVtmPWJbcl1dPXIsU1tmXT0wLChoPV9bcl09bi5leHRlbmREZWVwTm9BcnJheXMoe30sdCkpLl9ncm91cD1mLGgudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50cz17fTt2YXIgRT1udWxsO2ZvcihtJiYoRT1tLmdldChmKSksaC5uYW1lPUV8fCIiPT09RT9FOm4udGVtcGxhdGVTdHJpbmcoZy5uYW1lZm9ybWF0LHt0cmFjZTp0Lm5hbWUsZ3JvdXA6Zn0pLHA9aC50cmFuc2Zvcm1zLGgudHJhbnNmb3Jtcz1bXSxzPTA7czxwLmxlbmd0aDtzKyspaC50cmFuc2Zvcm1zW3NdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHBbc10pO2ZvcihzPTA7czxULmxlbmd0aDtzKyspbi5uZXN0ZWRQcm9wZXJ0eShoLFRbc10pLnNldChbXSl9Zm9yKGw9MDtsPFQubGVuZ3RoO2wrKyl7Zm9yKGM9VFtsXSxzPTAsZD1bXTtzPGIubGVuZ3RoO3MrKylkW3NdPW4ubmVzdGVkUHJvcGVydHkoX1tzXSxjKS5nZXQoKTtmb3IodT1uLm5lc3RlZFByb3BlcnR5KHQsYykuZ2V0KCkscz0wO3M8dztzKyspZFtNW3lbc11dXS5wdXNoKHVbc10pfWZvcihzPTA7czx3O3MrKyl7KGg9X1tNW3lbc11dXSkudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50c1tTW3lbc11dXT14KHMpLFNbeVtzXV0rK31mb3Iocj0wO3I8Yi5sZW5ndGg7cisrKWY9YltyXSxoPV9bcl0sYS5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzKGgpLGg9bi5leHRlbmREZWVwTm9BcnJheXMoaCxBW2ZdfHx7fSk7cmV0dXJuIF99ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZ3JvdXBieSIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sbmFtZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHN0eWxlczp7X2lzTGlua2VkVG9BcnJheToic3R5bGUiLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e30sZWRpdFR5cGU6ImNhbGMiLF9jb21wYXJlQXNKU09OOiEwfSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUsaSl7dmFyIGEsbz17fTtmdW5jdGlvbiBzKGUsaSl7cmV0dXJuIG4uY29lcmNlKHQsbyxyLmF0dHJpYnV0ZXMsZSxpKX1pZighcygiZW5hYmxlZCIpKXJldHVybiBvO3MoImdyb3VwcyIpLHMoIm5hbWVmb3JtYXQiLGkuX2RhdGFMZW5ndGg+MT8iJXtncm91cH0gKCV7dHJhY2V9KSI6IiV7Z3JvdXB9Iik7dmFyIGw9dC5zdHlsZXMsYz1vLnN0eWxlcz1bXTtpZihsKWZvcihhPTA7YTxsLmxlbmd0aDthKyspe3ZhciB1PWNbYV09e307bi5jb2VyY2UobFthXSxjW2FdLHIuYXR0cmlidXRlcy5zdHlsZXMsInRhcmdldCIpO3ZhciBmPW4uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ2YWx1ZSIpO24uaXNQbGFpbk9iamVjdChmKT91LnZhbHVlPW4uZXh0ZW5kRGVlcCh7fSxmKTpmJiZkZWxldGUgdS52YWx1ZX1yZXR1cm4gb30sci50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWZvcihyPXModFtuXSxlKSxpPTA7aTxyLmxlbmd0aDtpKyspYS5wdXNoKHJbaV0pO3JldHVybiBhfX0seyIuLi9saWIiOjUwMywiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjU0MiwiLi4vcGxvdHMvcGxvdHMiOjYxOSwiLi9oZWxwZXJzIjoxMTE3fV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnBvaW50c0FjY2Vzc29yRnVuY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aCYmKHI9dFtpXSkhPT1lO2krKylyLl9pbmRleFRvUG9pbnRzJiYhMSE9PXIuZW5hYmxlZCYmKG49ci5faW5kZXhUb1BvaW50cyk7cmV0dXJuIG4/ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19OmZ1bmN0aW9uKHQpe3JldHVyblt0XX19fSx7fV0sMTExODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLG89dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJzb3J0IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaSgiZW5hYmxlZCIpJiYoaSgidGFyZ2V0IiksaSgib3JkZXIiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBzPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihzKXt2YXIgbD1yLnRhcmdldCxjPXMubGVuZ3RoO2UuX2xlbmd0aCYmKGM9TWF0aC5taW4oYyxlLl9sZW5ndGgpKTt2YXIgdSxmLGg9ZS5fYXJyYXlBdHRycyxwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2UiYXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQudiksaT1lKHIudik7cmV0dXJuIG49PT1vPzE6aT09PW8/LTE6bi1pfTtjYXNlImRlc2NlbmRpbmciOnJldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodC52KSxpPWUoci52KTtyZXR1cm4gbj09PW8/MTppPT09bz8tMTppLW59fX0odCxyKSksaT0wO2k8bjtpKyspc1tpXT1hW2ldLmk7cmV0dXJuIHN9KHIscyxpLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUsbCxzKSxjKSxkPWEoZS50cmFuc2Zvcm1zLHIpLG09e307Zm9yKHU9MDt1PGgubGVuZ3RoO3UrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbdV0pLHY9Zy5nZXQoKSx5PW5ldyBBcnJheShjKTtmb3IoZj0wO2Y8YztmKyspeVtmXT12W3BbZl1dO2cuc2V0KHkpfWZvcihmPTA7ZjxjO2YrKyltW2ZdPWQocFtmXSk7ci5faW5kZXhUb1BvaW50cz1tLGUuX2xlbmd0aD1jfX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjQ3OSwiLi4vbGliIjo1MDMsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo1NTQsIi4vaGVscGVycyI6MTExN31dLDExMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPSIyLjguMSJ9LHt9XSwxMTIwOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4peyhmdW5jdGlvbigpeyFmdW5jdGlvbih0KXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/ZS5leHBvcnRzPXQoKTooInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PW4/bjoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5zdGFja2dsPXQoKX0oKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuLGkpe2Z1bmN0aW9uIGEocyxsKXtpZighbltzXSl7aWYoIXJbc10pe3ZhciBjPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0O2lmKCFsJiZjKXJldHVybiBjKHMsITApO2lmKG8pcmV0dXJuIG8ocywhMCk7dmFyIHU9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrcysiJyIpO3Rocm93IHUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsdX12YXIgZj1uW3NdPXtleHBvcnRzOnt9fTtyW3NdWzBdLmNhbGwoZi5leHBvcnRzLChmdW5jdGlvbih0KXtyZXR1cm4gYShyW3NdWzFdW3RdfHx0KX0pLGYsZi5leHBvcnRzLGUscixuLGkpfXJldHVybiBuW3NdLmV4cG9ydHN9Zm9yKHZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LHM9MDtzPGkubGVuZ3RoO3MrKylhKGlbc10pO3JldHVybiBhfSh7MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiAzKihyK24pLzQtbn0sci50b0J5dGVBcnJheT1mdW5jdGlvbih0KXt2YXIgZSxyLG49Yyh0KSxvPW5bMF0scz1uWzFdLGw9bmV3IGEoZnVuY3Rpb24odCxlLHIpe3JldHVybiAzKihlK3IpLzQtcn0oMCxvLHMpKSx1PTAsZj1zPjA/by00Om87Zm9yKHI9MDtyPGY7cis9NCllPWlbdC5jaGFyQ29kZUF0KHIpXTw8MTh8aVt0LmNoYXJDb2RlQXQocisxKV08PDEyfGlbdC5jaGFyQ29kZUF0KHIrMildPDw2fGlbdC5jaGFyQ29kZUF0KHIrMyldLGxbdSsrXT1lPj4xNiYyNTUsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZTsyPT09cyYmKGU9aVt0LmNoYXJDb2RlQXQocildPDwyfGlbdC5jaGFyQ29kZUF0KHIrMSldPj40LGxbdSsrXT0yNTUmZSk7MT09PXMmJihlPWlbdC5jaGFyQ29kZUF0KHIpXTw8MTB8aVt0LmNoYXJDb2RlQXQocisxKV08PDR8aVt0LmNoYXJDb2RlQXQocisyKV0+PjIsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZSk7cmV0dXJuIGx9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPVtdLG89MCxzPXItaTtvPHM7bys9MTYzODMpYS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09aT8oZT10W3ItMV0sYS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXSsiPT0iKSk6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdKyI9IikpO3JldHVybiBhLmpvaW4oIiIpfTtmb3IodmFyIG49W10saT1bXSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3MpbltzXT1vW3NdLGlbby5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIGModCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIHI9dC5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGksYSxvPVtdLHM9ZTtzPHI7cys9MylpPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhhPWkpPj4xOCY2M10rblthPj4xMiY2M10rblthPj42JjYzXStuWzYzJmFdKTtyZXR1cm4gby5qb2luKCIiKX1pWyItIi5jaGFyQ29kZUF0KDApXT02MixpWyJfIi5jaGFyQ29kZUF0KDApXT02M30se31dLDI6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSwzOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpewovKiEKICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCiJ1c2Ugc3RyaWN0Ijt2YXIgZT10KCJiYXNlNjQtanMiKSxuPXQoImllZWU3NTQiKTtyLkJ1ZmZlcj1hLHIuU2xvd0J1ZmZlcj1mdW5jdGlvbih0KXsrdCE9dCYmKHQ9MCk7cmV0dXJuIGEuYWxsb2MoK3QpfSxyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2Z1bmN0aW9uIGkodCl7aWYodD4yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIGUuX19wcm90b19fPWEucHJvdG90eXBlLGV9ZnVuY3Rpb24gYSh0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIGwodCl9cmV0dXJuIG8odCxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXsic3RyaW5nIj09dHlwZW9mIGUmJiIiIT09ZXx8KGU9InV0ZjgiKTtpZighYS5pc0VuY29kaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7dmFyIHI9MHxmKHQsZSksbj1pKHIpLG89bi53cml0ZSh0LGUpO28hPT1yJiYobj1uLnNsaWNlKDAsbykpO3JldHVybiBufSh0LGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSlyZXR1cm4gYyh0KTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCk7aWYoQih0LEFycmF5QnVmZmVyKXx8dCYmQih0LmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZihlPDB8fHQuYnl0ZUxlbmd0aDxlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBuO249dm9pZCAwPT09ZSYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsZSk6bmV3IFVpbnQ4QXJyYXkodCxlLHIpO3JldHVybiBuLl9fcHJvdG9fXz1hLnByb3RvdHlwZSxufSh0LGUscik7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBuPXQudmFsdWVPZiYmdC52YWx1ZU9mKCk7aWYobnVsbCE9biYmbiE9PXQpcmV0dXJuIGEuZnJvbShuLGUscik7dmFyIG89ZnVuY3Rpb24odCl7aWYoYS5pc0J1ZmZlcih0KSl7dmFyIGU9MHx1KHQubGVuZ3RoKSxyPWkoZSk7cmV0dXJuIDA9PT1yLmxlbmd0aHx8dC5jb3B5KHIsMCwwLGUpLHJ9aWYodm9pZCAwIT09dC5sZW5ndGgpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8Tih0Lmxlbmd0aCk/aSgwKTpjKHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZBcnJheS5pc0FycmF5KHQuZGF0YSkpcmV0dXJuIGModC5kYXRhKX0odCk7aWYobylyZXR1cm4gbztpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgdFtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBhLmZyb20odFtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxlLHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIHQpfWZ1bmN0aW9uIHModCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcyh0KSxpKHQ8MD8wOjB8dSh0KSl9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8dSh0Lmxlbmd0aCkscj1pKGUpLG49MDtuPGU7bis9MSlyW25dPTI1NSZ0W25dO3JldHVybiByfWZ1bmN0aW9uIHUodCl7aWYodD49MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrMjE0NzQ4MzY0Ny4udG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIGYodCxlKXtpZihhLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fEIodCxBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3ZhciByPXQubGVuZ3RoLG49YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighbiYmMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRCh0KS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFIodCkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gbj8tMTpEKHQpLmxlbmd0aDtlPSgiIitlKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVybiIiO2Zvcih0fHwodD0idXRmOCIpOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gTSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGsodGhpcyxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEEodGhpcyxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdyh0aGlzLGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBTKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0KTt0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBkKHQsZSxyLG4saSl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCksTihyPStyKSYmKHI9aT8wOnQubGVuZ3RoLTEpLHI8MCYmKHI9dC5sZW5ndGgrcikscj49dC5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7cj10Lmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighaSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1hLmZyb20oZSxuKSksYS5pc0J1ZmZlcihlKSlyZXR1cm4gMD09PWUubGVuZ3RoPy0xOm0odCxlLHIsbixpKTtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LGUscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LGUscik6bSh0LFtlXSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gbSh0LGUscixuLGkpe3ZhciBhLG89MSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4tMTtvPTIscy89MixsLz0yLHIvPTJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiAxPT09bz90W2VdOnQucmVhZFVJbnQxNkJFKGUqbyl9aWYoaSl7dmFyIHU9LTE7Zm9yKGE9cjthPHM7YSsrKWlmKGModCxhKT09PWMoZSwtMT09PXU/MDphLXUpKXtpZigtMT09PXUmJih1PWEpLGEtdSsxPT09bClyZXR1cm4gdSpvfWVsc2UtMSE9PXUmJihhLT1hLXUpLHU9LTF9ZWxzZSBmb3IocitsPnMmJihyPXMtbCksYT1yO2E+PTA7YS0tKXtmb3IodmFyIGY9ITAsaD0wO2g8bDtoKyspaWYoYyh0LGEraCkhPT1jKGUsaCkpe2Y9ITE7YnJlYWt9aWYoZilyZXR1cm4gYX1yZXR1cm4tMX1mdW5jdGlvbiBnKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgYT1lLmxlbmd0aDtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKE4ocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24gdih0LGUscixuKXtyZXR1cm4gRihEKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIEYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9KGUpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiB5KHQsZSxyLG4pfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIEYoUihlKSx0LHIsbil9ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gRihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksYT1bXSxvPTA7bzx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KytvKXI9dC5jaGFyQ29kZUF0KG8pLG49cj4+OCxpPXIlMjU2LGEucHVzaChpKSxhLnB1c2gobik7cmV0dXJuIGF9KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHcodCxyLG4pe3JldHVybiAwPT09ciYmbj09PXQubGVuZ3RoP2UuZnJvbUJ5dGVBcnJheSh0KTplLmZyb21CeXRlQXJyYXkodC5zbGljZShyLG4pKX1mdW5jdGlvbiBUKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPWU7aTxyOyl7dmFyIGEsbyxzLGwsYz10W2ldLHU9bnVsbCxmPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStmPD1yKXN3aXRjaChmKXtjYXNlIDE6YzwxMjgmJih1PWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKGE9dFtpKzFdKSkmJihsPSgzMSZjKTw8Nnw2MyZhKT4xMjcmJih1PWwpO2JyZWFrO2Nhc2UgMzphPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKGw9KDE1JmMpPDwxMnwoNjMmYSk8PDZ8NjMmbyk+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYodT1sKTticmVhaztjYXNlIDQ6YT10W2krMV0sbz10W2krMl0scz10W2krM10sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGw9KDE1JmMpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT42NTUzNSYmbDwxMTE0MTEyJiYodT1sKX1udWxsPT09dT8odT02NTUzMyxmPTEpOnU+NjU1MzUmJih1LT02NTUzNixuLnB1c2godT4+PjEwJjEwMjN8NTUyOTYpLHU9NTYzMjB8MTAyMyZ1KSxuLnB1c2godSksaSs9Zn1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7dmFyIHI9IiIsbj0wO2Zvcig7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1yLmtNYXhMZW5ndGg9MjE0NzQ4MzY0NyxhLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpfWNhdGNoKHQpe3JldHVybiExfX0oKSxhLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihhLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoYS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wuc3BlY2llcyYmYVtTeW1ib2wuc3BlY2llc109PT1hJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMX0pLGEucG9vbFNpemU9ODE5MixhLmZyb209ZnVuY3Rpb24odCxlLHIpe3JldHVybiBvKHQsZSxyKX0sYS5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGEuX19wcm90b19fPVVpbnQ4QXJyYXksYS5hbGxvYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcyh0KSx0PD0wP2kodCk6dm9pZCAwIT09ZT8ic3RyaW5nIj09dHlwZW9mIHI/aSh0KS5maWxsKGUscik6aSh0KS5maWxsKGUpOmkodCl9KHQsZSxyKX0sYS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LGEuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiEwPT09dC5faXNCdWZmZXImJnQhPT1hLnByb3RvdHlwZX0sYS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7aWYoQih0LFVpbnQ4QXJyYXkpJiYodD1hLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSxCKGUsVWludDhBcnJheSkmJihlPWEuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCkpLCFhLmlzQnVmZmVyKHQpfHwhYS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxhLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGEuY29uY2F0PWZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gYS5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT1lKWZvcihlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl0ubGVuZ3RoO3ZhciBuPWEuYWxsb2NVbnNhZmUoZSksaT0wO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBvPXRbcl07aWYoQihvLFVpbnQ4QXJyYXkpJiYobz1hLmZyb20obykpLCFhLmlzQnVmZmVyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sYS5ieXRlTGVuZ3RoPWYsYS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGEucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilwKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpcCh0aGlzLGUsZSszKSxwKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClwKHRoaXMsZSxlKzcpLHAodGhpcyxlKzEsZSs2KSxwKHRoaXMsZSsyLGUrNSkscCh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9UKHRoaXMsMCx0KTpoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9YS5wcm90b3R5cGUudG9TdHJpbmcsYS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1hLmNvbXBhcmUodGhpcyx0KX0sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdD10aGlzLnRvU3RyaW5nKCJoZXgiLDAsZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5lJiYodCs9IiAuLi4gIiksIjxCdWZmZXIgIit0KyI+In0sYS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKEIodCxVaW50OEFycmF5KSYmKHQ9YS5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJmU+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLShlPj4+PTApLGw9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UobixpKSx1PXQuc2xpY2UoZSxyKSxmPTA7ZjxsOysrZilpZihjW2ZdIT09dVtmXSl7bz1jW2ZdLHM9dVtmXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGEucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0LGUscil9LGEucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBkKHRoaXMsdCxlLHIsITApfSxhLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQodGhpcyx0LGUsciwhMSl9LGEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj0idXRmOCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlPj4+PTAsaXNGaW5pdGUocik/KHI+Pj49MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBhPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gZyh0aGlzLHQsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB2KHRoaXMsdCxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiB5KHRoaXMsdCxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHgodGhpcyx0LGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBiKHRoaXMsdCxlLHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gXyh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGsodCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsYT1lO2E8cjsrK2EpaSs9eih0W2FdKTtyZXR1cm4gaX1mdW5jdGlvbiBTKHQsZSxyKXtmb3IodmFyIG49dC5zbGljZShlLHIpLGk9IiIsYT0wO2E8bi5sZW5ndGg7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bYV0rMjU2Km5bYSsxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gRSh0LGUscil7aWYodCUxIT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gTCh0LGUscixuLGksbyl7aWYoIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGU+aXx8ZTxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEModCxlLHIsbixpLGEpe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKHQsZSxyLGksYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fEModCwwLHIsNCksbi53cml0ZSh0LGUscixpLDIzLDQpLHIrNH1mdW5jdGlvbiBJKHQsZSxyLGksYSl7cmV0dXJuIGU9K2Uscj4+Pj0wLGF8fEModCwwLHIsOCksbi53cml0ZSh0LGUscixpLDUyLDgpLHIrOH1hLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoOyh0PX5+dCk8MD8odCs9cik8MCYmKHQ9MCk6dD5yJiYodD1yKSwoZT12b2lkIDA9PT1lP3I6fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLGU8dCYmKGU9dCk7dmFyIG49dGhpcy5zdWJhcnJheSh0LGUpO3JldHVybiBuLl9fcHJvdG9fXz1hLnByb3RvdHlwZSxufSxhLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIG59LGEucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0sYS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0sYS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LGEucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSxhLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSxhLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxhLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbj49KGkqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LGEucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLGE9dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspYSs9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gYT49KGkqPTEyOCkmJihhLT1NYXRoLnBvdygyLDgqZSkpLGF9LGEucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/LTEqKDI1NS10aGlzW3RdKzEpOnRoaXNbdF19LGEucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sYS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxhLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0sYS5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LGEucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksbi5yZWFkKHRoaXMsdCwhMCwyMyw0KX0sYS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCExLDIzLDQpfSxhLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw4LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCEwLDUyLDgpfSxhLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw4LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCExLDUyLDgpfSxhLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHxMKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXsodD0rdCxlPj4+PTAscj4+Pj0wLG4pfHxMKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLGE9MTtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDEsMjU1LDApLHRoaXNbZV09MjU1JnQsZSsxfSxhLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sYS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiw2NTUzNSwwKSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGEucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2UrM109dD4+PjI0LHRoaXNbZSsyXT10Pj4+MTYsdGhpc1tlKzFdPXQ+Pj44LHRoaXNbZV09MjU1JnQsZSs0fSxhLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7TCh0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdDwwJiYwPT09cyYmMCE9PXRoaXNbZSthLTFdJiYocz0xKSx0aGlzW2UrYV09KHQvbz4+MCktcyYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7TCh0aGlzLHQsZSxyLGktMSwtaSl9dmFyIGE9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZSthXT0yNTUmdDstLWE+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ErMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LGEucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sYS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSxhLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LGEucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFAodGhpcyx0LGUsITAscil9LGEucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIFAodGhpcyx0LGUsITEscil9LGEucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBJKHRoaXMsdCxlLCEwLHIpfSxhLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMSxyKX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LGUscixuKXtpZighYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLGU+PXQubGVuZ3RoJiYoZT10Lmxlbmd0aCksZXx8KGU9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT10Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGk9bi1yO2lmKHRoaXM9PT10JiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4oZSxyLG4pO2Vsc2UgaWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcih2YXIgbz1pLTE7bz49MDstLW8pdFtvK2VdPXRoaXNbbytyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHQsdGhpcy5zdWJhcnJheShyLG4pLGUpO3JldHVybiBpfSxhLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWEuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO2lmKDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1uJiZpPDEyOHx8ImxhdGluMSI9PT1uKSYmKHQ9aSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHQmJih0Jj0yNTUpO2lmKGU8MHx8dGhpcy5sZW5ndGg8ZXx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9ZSlyZXR1cm4gdGhpczt2YXIgbztpZihlPj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLHR8fCh0PTApLCJudW1iZXIiPT10eXBlb2YgdClmb3Iobz1lO288cjsrK28pdGhpc1tvXT10O2Vsc2V7dmFyIHM9YS5pc0J1ZmZlcih0KT90OmEuZnJvbSh0LG4pLGw9cy5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihvPTA7bzxyLWU7KytvKXRoaXNbbytlXT1zW28lbF19cmV0dXJuIHRoaXN9O3ZhciBPPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24geih0KXtyZXR1cm4gdDwxNj8iMCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gRCh0LGUpe3ZhciByO2U9ZXx8MS8wO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9dC5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhazthLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO2EucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhazthLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChlLT00KTwwKWJyZWFrO2EucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIGF9ZnVuY3Rpb24gUih0KXtyZXR1cm4gZS50b0J5dGVBcnJheShmdW5jdGlvbih0KXtpZigodD0odD10LnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKE8sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO3QubGVuZ3RoJTQhPTA7KXQrPSI9IjtyZXR1cm4gdH0odCkpfWZ1bmN0aW9uIEYodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gQih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8bnVsbCE9dCYmbnVsbCE9dC5jb25zdHJ1Y3RvciYmbnVsbCE9dC5jb25zdHJ1Y3Rvci5uYW1lJiZ0LmNvbnN0cnVjdG9yLm5hbWU9PT1lLm5hbWV9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdCE9dH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYmFzZTY0LWpzIjoxLGJ1ZmZlcjozLGllZWU3NTQ6NH1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXtyLnJlYWQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLGM9bD4+MSx1PS03LGY9cj9pLTE6MCxoPXI/LTE6MSxwPXRbZStmXTtmb3IoZis9aCxhPXAmKDE8PC11KS0xLHA+Pj0tdSx1Kz1zO3U+MDthPTI1NiphK3RbZStmXSxmKz1oLHUtPTgpO2ZvcihvPWEmKDE8PC11KS0xLGE+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbZStmXSxmKz1oLHUtPTgpO2lmKDA9PT1hKWE9MS1jO2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCoocD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPWN9cmV0dXJuKHA/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LHIud3JpdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxmPXU+PjEsaD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxtPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2Y+PTE/aC9sOmgqTWF0aC5wb3coMiwxLWYpKSpsPj0yJiYobysrLGwvPTIpLG8rZj49dT8ocz0wLG89dSk6bytmPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1mKToocz1lKk1hdGgucG93KDIsZi0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCptfX0se31dLDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBsKHQpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKG49PT1vfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBuKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBuLmNhbGwodGhpcyx0LDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKHQpe249b310cnl7aT0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpzfWNhdGNoKHQpe2k9c319KCk7dmFyIGMsdT1bXSxmPSExLGg9LTE7ZnVuY3Rpb24gcCgpe2YmJmMmJihmPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6aD0tMSx1Lmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWYpe3ZhciB0PWwocCk7Zj0hMDtmb3IodmFyIGU9dS5sZW5ndGg7ZTspe2ZvcihjPXUsdT1bXTsrK2g8ZTspYyYmY1toXS5ydW4oKTtoPS0xLGU9dS5sZW5ndGh9Yz1udWxsLGY9ITEsZnVuY3Rpb24odCl7aWYoaT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChpPT09c3x8IWkpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGk9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7aSh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGkuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBpLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gbSh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIGcoKXt9YS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO3UucHVzaChuZXcgbSh0LGUpKSwxIT09dS5sZW5ndGh8fGZ8fGwoZCl9LG0ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGEudGl0bGU9ImJyb3dzZXIiLGEuYnJvd3Nlcj0hMCxhLmVudj17fSxhLmFyZ3Y9W10sYS52ZXJzaW9uPSIiLGEudmVyc2lvbnM9e30sYS5vbj1nLGEuYWRkTGlzdGVuZXI9ZyxhLm9uY2U9ZyxhLm9mZj1nLGEucmVtb3ZlTGlzdGVuZXI9ZyxhLnJlbW92ZUFsbExpc3RlbmVycz1nLGEuZW1pdD1nLGEucHJlcGVuZExpc3RlbmVyPWcsYS5wcmVwZW5kT25jZUxpc3RlbmVyPWcsYS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGEuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxhLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXthbHBoYV9zaGFwZTp0KCJhbHBoYS1zaGFwZSIpLGNvbnZleF9odWxsOnQoImNvbnZleC1odWxsIiksZGVsYXVuYXlfdHJpYW5ndWxhdGU6dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxnbF9jb25lM2Q6dCgiZ2wtY29uZTNkIiksZ2xfZXJyb3IzZDp0KCJnbC1lcnJvcjNkIiksZ2xfaGVhdG1hcDJkOnQoImdsLWhlYXRtYXAyZCIpLGdsX2xpbmUzZDp0KCJnbC1saW5lM2QiKSxnbF9tZXNoM2Q6dCgiZ2wtbWVzaDNkIiksZ2xfcGxvdDJkOnQoImdsLXBsb3QyZCIpLGdsX3Bsb3QzZDp0KCJnbC1wbG90M2QiKSxnbF9wb2ludGNsb3VkMmQ6dCgiZ2wtcG9pbnRjbG91ZDJkIiksZ2xfc2NhdHRlcjNkOnQoImdsLXNjYXR0ZXIzZCIpLGdsX3NlbGVjdF9ib3g6dCgiZ2wtc2VsZWN0LWJveCIpLGdsX3NwaWtlczJkOnQoImdsLXNwaWtlczJkIiksZ2xfc3RyZWFtdHViZTNkOnQoImdsLXN0cmVhbXR1YmUzZCIpLGdsX3N1cmZhY2UzZDp0KCJnbC1zdXJmYWNlM2QiKSxuZGFycmF5OnQoIm5kYXJyYXkiKSxuZGFycmF5X2xpbmVhcl9pbnRlcnBvbGF0ZTp0KCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSIpfX0seyJhbHBoYS1zaGFwZSI6MTIsImNvbnZleC1odWxsIjo1OCwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjYzLCJnbC1jb25lM2QiOjc5LCJnbC1lcnJvcjNkIjo4NCwiZ2wtaGVhdG1hcDJkIjo4OCwiZ2wtbGluZTNkIjo5MSwiZ2wtbWVzaDNkIjoxMTIsImdsLXBsb3QyZCI6MTE4LCJnbC1wbG90M2QiOjEyMSwiZ2wtcG9pbnRjbG91ZDJkIjoxMjMsImdsLXNjYXR0ZXIzZCI6MTI4LCJnbC1zZWxlY3QtYm94IjoxMzAsImdsLXNwaWtlczJkIjoxMzksImdsLXN0cmVhbXR1YmUzZCI6MTQzLCJnbC1zdXJmYWNlM2QiOjE0NSxuZGFycmF5OjI1OSwibmRhcnJheS1saW5lYXItaW50ZXJwb2xhdGUiOjI1M31dLDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5leWV8fFswLDAsMV0scj10LmNlbnRlcnx8WzAsMCwwXSxzPXQudXB8fFswLDEsMF0sbD10LmRpc3RhbmNlTGltaXRzfHxbMCwxLzBdLGM9dC5tb2RlfHwidHVybnRhYmxlIix1PW4oKSxmPWkoKSxoPWEoKTtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLHUubG9va0F0KDAsZSxyLHMpLGYuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxmLmxvb2tBdCgwLGUscixzKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIscyksbmV3IG8oe3R1cm50YWJsZTp1LG9yYml0OmYsbWF0cml4Omh9LGMpfTt2YXIgbj10KCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiKSxpPXQoIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIiksYT10KCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiKTtmdW5jdGlvbiBvKHQsZSl7dGhpcy5fY29udHJvbGxlck5hbWVzPU9iamVjdC5rZXlzKHQpLHRoaXMuX2NvbnRyb2xsZXJMaXN0PXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLHRoaXMuX21vZGU9ZSx0aGlzLl9hY3RpdmU9dFtlXSx0aGlzLl9hY3RpdmV8fCh0aGlzLl9tb2RlPSJ0dXJudGFibGUiLHRoaXMuX2FjdGl2ZT10LnR1cm50YWJsZSksdGhpcy5tb2Rlcz10aGlzLl9jb250cm9sbGVyTmFtZXMsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfXZhciBzPW8ucHJvdG90eXBlO3MuZmx1c2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbnRyb2xsZXJMaXN0LHI9MDtyPGUubGVuZ3RoOysrcillW3JdLmZsdXNoKHQpfSxzLmlkbGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbnRyb2xsZXJMaXN0LHI9MDtyPGUubGVuZ3RoOysrcillW3JdLmlkbGUodCl9LHMubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLl9jb250cm9sbGVyTGlzdCxhPTA7YTxpLmxlbmd0aDsrK2EpaVthXS5sb29rQXQodCxlLHIsbil9LHMucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLl9jb250cm9sbGVyTGlzdCxhPTA7YTxpLmxlbmd0aDsrK2EpaVthXS5yb3RhdGUodCxlLHIsbil9LHMucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLl9jb250cm9sbGVyTGlzdCxhPTA7YTxpLmxlbmd0aDsrK2EpaVthXS5wYW4odCxlLHIsbil9LHMudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLl9jb250cm9sbGVyTGlzdCxhPTA7YTxpLmxlbmd0aDsrK2EpaVthXS50cmFuc2xhdGUodCxlLHIsbil9LHMuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbnRyb2xsZXJMaXN0LG49MDtuPHIubGVuZ3RoOysrbilyW25dLnNldE1hdHJpeCh0LGUpfSxzLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbnRyb2xsZXJMaXN0LG49MDtuPHIubGVuZ3RoOysrbilyW25dLnNldERpc3RhbmNlTGltaXRzKHQsZSl9LHMuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fY29udHJvbGxlckxpc3Qsbj0wO248ci5sZW5ndGg7KytuKXJbbl0uc2V0RGlzdGFuY2UodCxlKX0scy5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlLnJlY2FsY01hdHJpeCh0KX0scy5nZXREaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlKHQpfSxzLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2VMaW1pdHModCl9LHMubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlLmxhc3RUKCl9LHMuc2V0TW9kZT1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5fbW9kZSl7dmFyIGU9dGhpcy5fY29udHJvbGxlck5hbWVzLmluZGV4T2YodCk7aWYoIShlPDApKXt2YXIgcj10aGlzLl9hY3RpdmUsbj10aGlzLl9jb250cm9sbGVyTGlzdFtlXSxpPU1hdGgubWF4KHIubGFzdFQoKSxuLmxhc3RUKCkpO3IucmVjYWxjTWF0cml4KGkpLG4uc2V0TWF0cml4KGksci5jb21wdXRlZE1hdHJpeCksdGhpcy5fYWN0aXZlPW4sdGhpcy5fbW9kZT10LHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c319fSxzLmdldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kZX19LHsibWF0cml4LWNhbWVyYS1jb250cm9sbGVyIjoyNDUsIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIjoyNjMsInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlciI6MzA1fV0sODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0idW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXA/dCgid2Vhay1tYXAiKTpXZWFrTWFwLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPW5ldyBuO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1vLmdldCh0KSxyPWUmJihlLl90cmlhbmdsZUJ1ZmZlci5oYW5kbGV8fGUuX3RyaWFuZ2xlQnVmZmVyLmJ1ZmZlcik7aWYoIXJ8fCF0LmlzQnVmZmVyKHIpKXt2YXIgbj1pKHQsbmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLTEsNCw0LC0xXSkpOyhlPWEodCxbe2J1ZmZlcjpuLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSkpLl90cmlhbmdsZUJ1ZmZlcj1uLG8uc2V0KHQsZSl9ZS5iaW5kKCksdC5kcmF3QXJyYXlzKHQuVFJJQU5HTEVTLDAsMyksZS51bmJpbmQoKX19LHsiZ2wtYnVmZmVyIjo3OCwiZ2wtdmFvIjoxNTAsIndlYWstbWFwIjozMTN9XSw5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgicGFkLWxlZnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9Im51bWJlciI9PXR5cGVvZiBlP2U6MSxyPXJ8fCI6ICI7dmFyIGk9dC5zcGxpdCgvXHI/XG4vKSxhPVN0cmluZyhpLmxlbmd0aCtlLTEpLmxlbmd0aDtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKHQsaSl7dmFyIG89aStlLHM9U3RyaW5nKG8pLmxlbmd0aDtyZXR1cm4gbihvLGEtcykrcit0fSkpLmpvaW4oIlxuIil9fSx7InBhZC1sZWZ0IjoyNjR9XSwxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLGk9MDtpPHQubGVuZ3RoOysraSlyW2ldPXRbaV07Zm9yKGk9MDtpPD10Lmxlbmd0aDsrK2kpe2Zvcih2YXIgYT10Lmxlbmd0aDthPD1lOysrYSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGErMS1pLHMpO3JbYV09b31pZihuLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX19LHsicm9idXN0LW9yaWVudGF0aW9uIjoyODR9XSwxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpLGE9MDthPHIubGVuZ3RoOysrYSluW2FdPWVbclthXV07cmV0dXJuIGkobikqdDwxfSkpfTt2YXIgbj10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGk9dCgiY2lyY3VtcmFkaXVzIil9LHtjaXJjdW1yYWRpdXM6NDksImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjo2M31dLDEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0LGUpKX07dmFyIG49dCgiYWxwaGEtY29tcGxleCIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Iil9LHsiYWxwaGEtY29tcGxleCI6MTEsInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSI6MjkwfV0sMTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGF0b2IodCl9fSx7fV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLGE9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pe2Zvcih2YXIgcz1uZXcgQXJyYXkocisxKSxsPTA7bDw9cjsrK2wpc1tsXT10W2xdW29dO2Fbb109c31hW3JdPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzw9cjsrK28pYVtyXVtvXT0xO3ZhciBjPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PW4oYSxjKSxmPWkodVtyKzFdKTswPT09ZiYmKGY9MSk7dmFyIGg9bmV3IEFycmF5KHIrMSk7Zm9yKG89MDtvPD1yOysrbyloW29dPWkodVtvXSkvZjtyZXR1cm4gaH07dmFyIG49dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9fSx7InJvYnVzdC1saW5lYXItc29sdmUiOjI4M31dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjoyNX1dLDE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLm11bChlWzFdKS5jbXAoZVswXS5tdWwodFsxXSkpfX0se31dLDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6MjV9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXJhdCIpLGk9dCgiLi9saWIvaXMtYm4iKSxhPXQoIi4vbGliL251bS10by1ibiIpLG89dCgiLi9saWIvc3RyLXRvLWJuIikscz10KCIuL2xpYi9yYXRpb25hbGl6ZSIpLGw9dCgiLi9kaXYiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKG4oZSkpcmV0dXJuIHI/bChlLHQocikpOltlWzBdLmNsb25lKCksZVsxXS5jbG9uZSgpXTt2YXIgYyx1LGY9MDtpZihpKGUpKWM9ZS5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKWM9byhlKTtlbHNle2lmKDA9PT1lKXJldHVyblthKDApLGEoMSldO2lmKGU9PT1NYXRoLmZsb29yKGUpKWM9YShlKTtlbHNle2Zvcig7ZSE9PU1hdGguZmxvb3IoZSk7KWUqPU1hdGgucG93KDIsMjU2KSxmLT0yNTY7Yz1hKGUpfX1pZihuKHIpKWMubXVsKHJbMV0pLHU9clswXS5jbG9uZSgpO2Vsc2UgaWYoaShyKSl1PXIuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygcil1PW8ocik7ZWxzZSBpZihyKWlmKHI9PT1NYXRoLmZsb29yKHIpKXU9YShyKTtlbHNle2Zvcig7ciE9PU1hdGguZmxvb3Iocik7KXIqPU1hdGgucG93KDIsMjU2KSxmKz0yNTY7dT1hKHIpfWVsc2UgdT1hKDEpO2Y+MD9jPWMudXNobG4oZik6ZjwwJiYodT11LnVzaGxuKC1mKSk7cmV0dXJuIHMoYyx1KX19LHsiLi9kaXYiOjE3LCIuL2lzLXJhdCI6MTksIi4vbGliL2lzLWJuIjoyMywiLi9saWIvbnVtLXRvLWJuIjoyNCwiLi9saWIvcmF0aW9uYWxpemUiOjI1LCIuL2xpYi9zdHItdG8tYm4iOjI2fV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvaXMtYm4iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCYmbih0WzBdKSYmbih0WzFdKX19LHsiLi9saWIvaXMtYm4iOjIzfV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY21wKG5ldyBuKDApKX19LHsiYm4uanMiOjMzfV0sMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9dC53b3JkcyxpPTA7aWYoMT09PWUpaT1yWzBdO2Vsc2UgaWYoMj09PWUpaT1yWzBdKzY3MTA4ODY0KnJbMV07ZWxzZSBmb3IodmFyIGE9MDthPGU7YSsrKXt2YXIgbz1yW2FdO2krPW8qTWF0aC5wb3coNjcxMDg4NjQsYSl9cmV0dXJuIG4odCkqaX19LHsiLi9ibi1zaWduIjoyMH1dLDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImRvdWJsZS1iaXRzIiksaT10KCJiaXQtdHdpZGRsZSIpLmNvdW50VHJhaWxpbmdaZXJvcztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aShuLmxvKHQpKTtpZihlPDMyKXJldHVybiBlO3ZhciByPWkobi5oaSh0KSk7aWYocj4yMClyZXR1cm4gNTI7cmV0dXJuIHIrMzJ9fSx7ImJpdC10d2lkZGxlIjozMiwiZG91YmxlLWJpdHMiOjY0fV0sMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmQm9vbGVhbih0LndvcmRzKX19LHsiYm4uanMiOjMzfV0sMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKSxpPXQoImRvdWJsZS1iaXRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZXhwb25lbnQodCk7cmV0dXJuIGU8NTI/bmV3IG4odCk6bmV3IG4odCpNYXRoLnBvdygyLDUyLWUpKS51c2hsbihlLTUyKX19LHsiYm4uanMiOjMzLCJkb3VibGUtYml0cyI6NjR9XSwyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL251bS10by1ibiIpLGk9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KSxhPWkoZSk7aWYoMD09PXIpcmV0dXJuW24oMCksbigxKV07aWYoMD09PWEpcmV0dXJuW24oMCksbigwKV07YTwwJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIG89dC5nY2QoZSk7aWYoby5jbXBuKDEpKXJldHVyblt0LmRpdihvKSxlLmRpdihvKV07cmV0dXJuW3QsZV19fSx7Ii4vYm4tc2lnbiI6MjAsIi4vbnVtLXRvLWJuIjoyNH1dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX19LHsiYm4uanMiOjMzfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzBdKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjoyNX1dLDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odFswXSkqbih0WzFdKX19LHsiLi9saWIvYm4tc2lnbiI6MjB9XSwyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLnN1Yih0WzFdLm11bChlWzBdKSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6MjV9XSwzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi10by1udW0iKSxpPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBhPWUuYWJzKCkuZGl2bW9kKHIuYWJzKCkpLG89YS5kaXYscz1uKG8pLGw9YS5tb2QsYz1lLm5lZ2F0aXZlIT09ci5uZWdhdGl2ZT8tMToxO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIGMqcztpZihzKXt2YXIgdT1pKHMpKzQsZj1uKGwudXNobG4odSkuZGl2Um91bmQocikpO3JldHVybiBjKihzK2YqTWF0aC5wb3coMiwtdSkpfXZhciBoPXIuYml0TGVuZ3RoKCktbC5iaXRMZW5ndGgoKSs1MztmPW4obC51c2hsbihoKS5kaXZSb3VuZChyKSk7cmV0dXJuIGg8MTAyMz9jKmYqTWF0aC5wb3coMiwtaCk6KGYqPU1hdGgucG93KDIsLTEwMjMpLGMqZipNYXRoLnBvdygyLDEwMjMtaCkpfX0seyIuL2xpYi9ibi10by1udW0iOjIxLCIuL2xpYi9jdHoiOjIyfV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe2Zvcih2YXIgYT1pKzE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPj0wPyhhPW8saT1vLTEpOm49bysxfXJldHVybiBhfWZ1bmN0aW9uIGkodCxlLHIsbixpKXtmb3IodmFyIGE9aSsxO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKT4wPyhhPW8saT1vLTEpOm49bysxfXJldHVybiBhfWZ1bmN0aW9uIGEodCxlLHIsbixpKXtmb3IodmFyIGE9bi0xO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKTwwPyhhPW8sbj1vKzEpOmk9by0xfXJldHVybiBhfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIGE9bi0xO248PWk7KXt2YXIgbz1uK2k+Pj4xLHM9dFtvXTsodm9pZCAwIT09cj9yKHMsZSk6cy1lKTw9MD8oYT1vLG49bysxKTppPW8tMX1yZXR1cm4gYX1mdW5jdGlvbiBzKHQsZSxyLG4saSl7Zm9yKDtuPD1pOyl7dmFyIGE9bitpPj4+MSxvPXRbYV0scz12b2lkIDAhPT1yP3IobyxlKTpvLWU7aWYoMD09PXMpcmV0dXJuIGE7czw9MD9uPWErMTppPWEtMX1yZXR1cm4tMX1mdW5jdGlvbiBsKHQsZSxyLG4saSxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcj9hKHQsZSxyLHZvaWQgMD09PW4/MDowfG4sdm9pZCAwPT09aT90Lmxlbmd0aC0xOjB8aSk6YSh0LGUsdm9pZCAwLHZvaWQgMD09PXI/MDowfHIsdm9pZCAwPT09bj90Lmxlbmd0aC0xOjB8bil9ZS5leHBvcnRzPXtnZTpmdW5jdGlvbih0LGUscixpLGEpe3JldHVybiBsKHQsZSxyLGksYSxuKX0sZ3Q6ZnVuY3Rpb24odCxlLHIsbixhKXtyZXR1cm4gbCh0LGUscixuLGEsaSl9LGx0OmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGwodCxlLHIsbixpLGEpfSxsZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBsKHQsZSxyLG4saSxvKX0sZXE6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbCh0LGUscixuLGkscyl9fX0se31dLDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuKHQmPS10KSYmZS0tLDY1NTM1JnQmJihlLT0xNiksMTY3MTE5MzUmdCYmKGUtPTgpLDI1MjY0NTEzNSZ0JiYoZS09NCksODU4OTkzNDU5JnQmJihlLT0yKSwxNDMxNjU1NzY1JnQmJihlLT0xKSxlfXIuSU5UX0JJVFM9MzIsci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDwzMSxyLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MCktKHQ8MCl9LHIuYWJzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ+PjMxO3JldHVybih0XmUpLWV9LHIubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVeKHReZSkmLSh0PGUpfSxyLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0Xih0XmUpJi0odDxlKX0sci5pc1BvdzI9ZnVuY3Rpb24odCl7cmV0dXJuISh0JnQtMXx8IXQpfSxyLmxvZzI9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsZXw9cj0oKHQ+Pj49ZSk+MjU1KTw8MyxlfD1yPSgodD4+Pj1yKT4xNSk8PDIsKGV8PXI9KCh0Pj4+PXIpPjMpPDwxKXwodD4+Pj1yKT4+MX0sci5sb2cxMD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MWU5Pzk6dD49MWU4Pzg6dD49MWU3Pzc6dD49MWU2PzY6dD49MWU1PzU6dD49MWU0PzQ6dD49MWUzPzM6dD49MTAwPzI6dD49MTA/MTowfSxyLnBvcENvdW50PWZ1bmN0aW9uKHQpe3JldHVybiAxNjg0MzAwOSooKHQ9KDg1ODk5MzQ1OSYodC09dD4+PjEmMTQzMTY1NTc2NSkpKyh0Pj4+MiY4NTg5OTM0NTkpKSsodD4+PjQpJjI1MjY0NTEzNSk+Pj4yNH0sci5jb3VudFRyYWlsaW5nWmVyb3M9bixyLm5leHRQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0Kz0wPT09dCwtLXQsdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNikrMX0sci5wcmV2UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNiktKHQ+Pj4xKX0sci5wYXJpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRePXQ+Pj4xNix0Xj10Pj4+OCx0Xj10Pj4+NCwyNzAzMD4+Pih0Jj0xNSkmMX07dmFyIGk9bmV3IEFycmF5KDI1Nik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MjU2OysrZSl7dmFyIHI9ZSxuPWUsaT03O2ZvcihyPj4+PTE7cjtyPj4+PTEpbjw8PTEsbnw9MSZyLC0taTt0W2VdPW48PGkmMjU1fX0oaSksci5yZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpWzI1NSZ0XTw8MjR8aVt0Pj4+OCYyNTVdPDwxNnxpW3Q+Pj4xNiYyNTVdPDw4fGlbdD4+PjI0JjI1NV19LHIuaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0Jj02NTUzNSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGUmPTY1NTM1KXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTY1NTM1JigodD0xNjcxMTkzNSYoKHQ9MjUyNjQ1MTM1JigodD04NTg5OTM0NTkmKCh0PXQ+Pj5lJjE0MzE2NTU3NjUpfHQ+Pj4xKSl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj4xNikpPDwxNj4+MTZ9LHIuaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PTEyMjcxMzM1MTMmKCh0PTMyNzIzNTYwMzUmKCh0PTI1MTcxOTY5NSYoKHQ9NDI3ODE5MDMzNSYoKHQmPTEwMjMpfHQ8PDE2KSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSwodHw9KGU9MTIyNzEzMzUxMyYoKGU9MzI3MjM1NjAzNSYoKGU9MjUxNzE5Njk1JigoZT00Mjc4MTkwMzM1JigoZSY9MTAyMyl8ZTw8MTYpKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKTw8MSl8KHI9MTIyNzEzMzUxMyYoKHI9MzI3MjM1NjAzNSYoKHI9MjUxNzE5Njk1Jigocj00Mjc4MTkwMzM1JigociY9MTAyMyl8cjw8MTYpKXxyPDw4KSl8cjw8NCkpfHI8PDIpKTw8Mn0sci5kZWludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTAyMyYoKHQ9NDI3ODE5MDMzNSYoKHQ9MjUxNzE5Njk1JigodD0zMjcyMzU2MDM1JigodD10Pj4+ZSYxMjI3MTMzNTEzKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjgpKXx0Pj4+MTYpKTw8MjI+PjIyfSxyLm5leHRDb21iaW5hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10fHQtMTtyZXR1cm4gZSsxfCh+ZSYtfmUpLTE+Pj5uKHQpKzF9fSx7fV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGEodCxlLHIpe2lmKGEuaXNCTih0KSlyZXR1cm4gdDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09dCYmKCJsZSIhPT1lJiYiYmUiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8ImJlIikpfXZhciBvOyJvYmplY3QiPT10eXBlb2YgZT9lLmV4cG9ydHM9YTpyLkJOPWEsYS5CTj1hLGEud29yZFNpemU9MjY7dHJ5e289InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjp0KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIHI+PTY1JiZyPD03MD9yLTU1OnI+PTk3JiZyPD0xMDI/ci04NzpyLTQ4JjE1fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXModCxyKTtyZXR1cm4gci0xPj1lJiYobnw9cyh0LHItMSk8PDQpLG59ZnVuY3Rpb24gYyh0LGUscixuKXtmb3IodmFyIGk9MCxhPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGE7bysrKXt2YXIgcz10LmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1zPj00OT9zLTQ5KzEwOnM+PTE3P3MtMTcrMTA6c31yZXR1cm4gaX1hLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhfHxudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09YS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sYS5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LGEubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7ImhleCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KTt2YXIgaT0wOyItIj09PSh0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoaSsrLHRoaXMubmVnYXRpdmU9MSksaTx0Lmxlbmd0aCYmKDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkscik6KHRoaXMuX3BhcnNlQmFzZSh0LGUsaSksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpKSl9LGEucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKCJiZSI9PT1yKWZvcihpPXQubGVuZ3RoLTEsYT0wO2k+PTA7aS09MylvPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO2Vsc2UgaWYoImxlIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPTA7dmFyIGksYT0wLG89MDtpZigiYmUiPT09cilmb3Iobj10Lmxlbmd0aC0xO24+PWU7bi09MilpPWwodCxlLG4pPDxhLHRoaXMud29yZHNbb118PTY3MTA4ODYzJmksYT49MTg/KGEtPTE4LG8rPTEsdGhpcy53b3Jkc1tvXXw9aT4+PjI2KTphKz04O2Vsc2UgZm9yKG49KHQubGVuZ3RoLWUpJTI9PTA/ZSsxOmU7bjx0Lmxlbmd0aDtuKz0yKWk9bCh0LGUsbik8PGEsdGhpcy53b3Jkc1tvXXw9NjcxMDg4NjMmaSxhPj0xOD8oYS09MTgsbys9MSx0aGlzLndvcmRzW29dfD1pPj4+MjYpOmErPTg7dGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIGE9dC5sZW5ndGgtcixvPWElbixzPU1hdGgubWluKGEsYS1vKStyLGw9MCx1PXI7dTxzO3UrPW4pbD1jKHQsdSx1K24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKTtpZigwIT09byl7dmFyIGY9MTtmb3IobD1jKHQsdSx0Lmxlbmd0aCxlKSx1PTA7dTxvO3UrKylmKj1lO3RoaXMuaW11bG4oZiksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCl9dGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sYS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxhLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgdT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxmPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGg9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gcCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLGE9MHxlLndvcmRzWzBdLG89aSphLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixmPTY3MTA4ODYzJmwsaD1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWg7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oaT0wfHQud29yZHNbZF0pKihhPTB8ZS53b3Jkc1twXSkrZikvNjcxMDg4NjR8MCxmPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGYsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7cj0wIT09KGE9cz4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT91WzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIGM9Zlt0XSxwPWhbdF07cj0iIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBtPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP20rcjp1W2MtbS5sZW5ndGhdK20rcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxhLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHZvaWQgMCE9PW8pLHRoaXMudG9BcnJheUxpa2Uobyx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxuKGE+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD0ibGUiPT09ZSxjPW5ldyB0KGEpLHU9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbc109bztmb3IoO3M8YTtzKyspY1tzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspY1tzXT0wO2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbYS1zLTFdPW99cmV0dXJuIGN9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxhLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkrKDB8bi53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmYTxyLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO2E8ci5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09ci53b3Jkc1thXTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LGEucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByLG4saT10aGlzLmNtcCh0KTtpZigwPT09aSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7aT4wPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBhPTAsbz0wO288bi5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSktKDB8bi53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtmb3IoOzAhPT1hJiZvPHIubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7aWYoMD09PWEmJm88ci5sZW5ndGgmJnIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxvKSxyIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgZD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC53b3JkcyxzPWUud29yZHMsbD1yLndvcmRzLGM9MCx1PTB8b1swXSxmPTgxOTEmdSxoPXU+Pj4xMyxwPTB8b1sxXSxkPTgxOTEmcCxtPXA+Pj4xMyxnPTB8b1syXSx2PTgxOTEmZyx5PWc+Pj4xMyx4PTB8b1szXSxiPTgxOTEmeCxfPXg+Pj4xMyx3PTB8b1s0XSxUPTgxOTEmdyxrPXc+Pj4xMyxBPTB8b1s1XSxNPTgxOTEmQSxTPUE+Pj4xMyxFPTB8b1s2XSxMPTgxOTEmRSxDPUU+Pj4xMyxQPTB8b1s3XSxJPTgxOTEmUCxPPVA+Pj4xMyx6PTB8b1s4XSxEPTgxOTEmeixSPXo+Pj4xMyxGPTB8b1s5XSxCPTgxOTEmRixOPUY+Pj4xMyxqPTB8c1swXSxVPTgxOTEmaixWPWo+Pj4xMyxIPTB8c1sxXSxxPTgxOTEmSCxHPUg+Pj4xMyxZPTB8c1syXSxXPTgxOTEmWSxYPVk+Pj4xMyxaPTB8c1szXSxKPTgxOTEmWixLPVo+Pj4xMyxRPTB8c1s0XSwkPTgxOTEmUSx0dD1RPj4+MTMsZXQ9MHxzWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfHNbNl0sYXQ9ODE5MSZpdCxvdD1pdD4+PjEzLHN0PTB8c1s3XSxsdD04MTkxJnN0LGN0PXN0Pj4+MTMsdXQ9MHxzWzhdLGZ0PTgxOTEmdXQsaHQ9dXQ+Pj4xMyxwdD0wfHNbOV0sZHQ9ODE5MSZwdCxtdD1wdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5O3ZhciBndD0oYysobj1NYXRoLmltdWwoZixVKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChmLFYpKStNYXRoLmltdWwoaCxVKXwwKSk8PDEzKXwwO2M9KChhPU1hdGguaW11bChoLFYpKSsoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoZCxVKSxpPShpPU1hdGguaW11bChkLFYpKStNYXRoLmltdWwobSxVKXwwLGE9TWF0aC5pbXVsKG0sVik7dmFyIHZ0PShjKyhuPW4rTWF0aC5pbXVsKGYscSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsRyl8MCkrTWF0aC5pbXVsKGgscSl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLEcpfDApKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bCh2LFUpLGk9KGk9TWF0aC5pbXVsKHYsVikpK01hdGguaW11bCh5LFUpfDAsYT1NYXRoLmltdWwoeSxWKSxuPW4rTWF0aC5pbXVsKGQscSl8MCxpPShpPWkrTWF0aC5pbXVsKGQsRyl8MCkrTWF0aC5pbXVsKG0scSl8MCxhPWErTWF0aC5pbXVsKG0sRyl8MDt2YXIgeXQ9KGMrKG49bitNYXRoLmltdWwoZixXKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixYKXwwKStNYXRoLmltdWwoaCxXKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsWCl8MCkrKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGIsVSksaT0oaT1NYXRoLmltdWwoYixWKSkrTWF0aC5pbXVsKF8sVSl8MCxhPU1hdGguaW11bChfLFYpLG49bitNYXRoLmltdWwodixxKXwwLGk9KGk9aStNYXRoLmltdWwodixHKXwwKStNYXRoLmltdWwoeSxxKXwwLGE9YStNYXRoLmltdWwoeSxHKXwwLG49bitNYXRoLmltdWwoZCxXKXwwLGk9KGk9aStNYXRoLmltdWwoZCxYKXwwKStNYXRoLmltdWwobSxXKXwwLGE9YStNYXRoLmltdWwobSxYKXwwO3ZhciB4dD0oYysobj1uK01hdGguaW11bChmLEopfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLEspfDApK01hdGguaW11bChoLEopfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxLKXwwKSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVCxVKSxpPShpPU1hdGguaW11bChULFYpKStNYXRoLmltdWwoayxVKXwwLGE9TWF0aC5pbXVsKGssViksbj1uK01hdGguaW11bChiLHEpfDAsaT0oaT1pK01hdGguaW11bChiLEcpfDApK01hdGguaW11bChfLHEpfDAsYT1hK01hdGguaW11bChfLEcpfDAsbj1uK01hdGguaW11bCh2LFcpfDAsaT0oaT1pK01hdGguaW11bCh2LFgpfDApK01hdGguaW11bCh5LFcpfDAsYT1hK01hdGguaW11bCh5LFgpfDAsbj1uK01hdGguaW11bChkLEopfDAsaT0oaT1pK01hdGguaW11bChkLEspfDApK01hdGguaW11bChtLEopfDAsYT1hK01hdGguaW11bChtLEspfDA7dmFyIGJ0PShjKyhuPW4rTWF0aC5pbXVsKGYsJCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsdHQpfDApK01hdGguaW11bChoLCQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCx0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKE0sVSksaT0oaT1NYXRoLmltdWwoTSxWKSkrTWF0aC5pbXVsKFMsVSl8MCxhPU1hdGguaW11bChTLFYpLG49bitNYXRoLmltdWwoVCxxKXwwLGk9KGk9aStNYXRoLmltdWwoVCxHKXwwKStNYXRoLmltdWwoayxxKXwwLGE9YStNYXRoLmltdWwoayxHKXwwLG49bitNYXRoLmltdWwoYixXKXwwLGk9KGk9aStNYXRoLmltdWwoYixYKXwwKStNYXRoLmltdWwoXyxXKXwwLGE9YStNYXRoLmltdWwoXyxYKXwwLG49bitNYXRoLmltdWwodixKKXwwLGk9KGk9aStNYXRoLmltdWwodixLKXwwKStNYXRoLmltdWwoeSxKKXwwLGE9YStNYXRoLmltdWwoeSxLKXwwLG49bitNYXRoLmltdWwoZCwkKXwwLGk9KGk9aStNYXRoLmltdWwoZCx0dCl8MCkrTWF0aC5pbXVsKG0sJCl8MCxhPWErTWF0aC5pbXVsKG0sdHQpfDA7dmFyIF90PShjKyhuPW4rTWF0aC5pbXVsKGYscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG50KXwwKStNYXRoLmltdWwoaCxydCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG50KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTCxVKSxpPShpPU1hdGguaW11bChMLFYpKStNYXRoLmltdWwoQyxVKXwwLGE9TWF0aC5pbXVsKEMsViksbj1uK01hdGguaW11bChNLHEpfDAsaT0oaT1pK01hdGguaW11bChNLEcpfDApK01hdGguaW11bChTLHEpfDAsYT1hK01hdGguaW11bChTLEcpfDAsbj1uK01hdGguaW11bChULFcpfDAsaT0oaT1pK01hdGguaW11bChULFgpfDApK01hdGguaW11bChrLFcpfDAsYT1hK01hdGguaW11bChrLFgpfDAsbj1uK01hdGguaW11bChiLEopfDAsaT0oaT1pK01hdGguaW11bChiLEspfDApK01hdGguaW11bChfLEopfDAsYT1hK01hdGguaW11bChfLEspfDAsbj1uK01hdGguaW11bCh2LCQpfDAsaT0oaT1pK01hdGguaW11bCh2LHR0KXwwKStNYXRoLmltdWwoeSwkKXwwLGE9YStNYXRoLmltdWwoeSx0dCl8MCxuPW4rTWF0aC5pbXVsKGQscnQpfDAsaT0oaT1pK01hdGguaW11bChkLG50KXwwKStNYXRoLmltdWwobSxydCl8MCxhPWErTWF0aC5pbXVsKG0sbnQpfDA7dmFyIHd0PShjKyhuPW4rTWF0aC5pbXVsKGYsYXQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG90KXwwKStNYXRoLmltdWwoaCxhdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG90KXwwKSsoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoSSxVKSxpPShpPU1hdGguaW11bChJLFYpKStNYXRoLmltdWwoTyxVKXwwLGE9TWF0aC5pbXVsKE8sViksbj1uK01hdGguaW11bChMLHEpfDAsaT0oaT1pK01hdGguaW11bChMLEcpfDApK01hdGguaW11bChDLHEpfDAsYT1hK01hdGguaW11bChDLEcpfDAsbj1uK01hdGguaW11bChNLFcpfDAsaT0oaT1pK01hdGguaW11bChNLFgpfDApK01hdGguaW11bChTLFcpfDAsYT1hK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChULEopfDAsaT0oaT1pK01hdGguaW11bChULEspfDApK01hdGguaW11bChrLEopfDAsYT1hK01hdGguaW11bChrLEspfDAsbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoXywkKXwwLGE9YStNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHYscnQpfDAsaT0oaT1pK01hdGguaW11bCh2LG50KXwwKStNYXRoLmltdWwoeSxydCl8MCxhPWErTWF0aC5pbXVsKHksbnQpfDAsbj1uK01hdGguaW11bChkLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxvdCl8MCkrTWF0aC5pbXVsKG0sYXQpfDAsYT1hK01hdGguaW11bChtLG90KXwwO3ZhciBUdD0oYysobj1uK01hdGguaW11bChmLGx0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixjdCl8MCkrTWF0aC5pbXVsKGgsbHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxjdCl8MCkrKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEQsVSksaT0oaT1NYXRoLmltdWwoRCxWKSkrTWF0aC5pbXVsKFIsVSl8MCxhPU1hdGguaW11bChSLFYpLG49bitNYXRoLmltdWwoSSxxKXwwLGk9KGk9aStNYXRoLmltdWwoSSxHKXwwKStNYXRoLmltdWwoTyxxKXwwLGE9YStNYXRoLmltdWwoTyxHKXwwLG49bitNYXRoLmltdWwoTCxXKXwwLGk9KGk9aStNYXRoLmltdWwoTCxYKXwwKStNYXRoLmltdWwoQyxXKXwwLGE9YStNYXRoLmltdWwoQyxYKXwwLG49bitNYXRoLmltdWwoTSxKKXwwLGk9KGk9aStNYXRoLmltdWwoTSxLKXwwKStNYXRoLmltdWwoUyxKKXwwLGE9YStNYXRoLmltdWwoUyxLKXwwLG49bitNYXRoLmltdWwoVCwkKXwwLGk9KGk9aStNYXRoLmltdWwoVCx0dCl8MCkrTWF0aC5pbXVsKGssJCl8MCxhPWErTWF0aC5pbXVsKGssdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKF8scnQpfDAsYT1hK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwodixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsb3QpfDApK01hdGguaW11bCh5LGF0KXwwLGE9YStNYXRoLmltdWwoeSxvdCl8MCxuPW4rTWF0aC5pbXVsKGQsbHQpfDAsaT0oaT1pK01hdGguaW11bChkLGN0KXwwKStNYXRoLmltdWwobSxsdCl8MCxhPWErTWF0aC5pbXVsKG0sY3QpfDA7dmFyIGt0PShjKyhuPW4rTWF0aC5pbXVsKGYsZnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLGh0KXwwKStNYXRoLmltdWwoaCxmdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLGh0KXwwKSsoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixVKSxpPShpPU1hdGguaW11bChCLFYpKStNYXRoLmltdWwoTixVKXwwLGE9TWF0aC5pbXVsKE4sViksbj1uK01hdGguaW11bChELHEpfDAsaT0oaT1pK01hdGguaW11bChELEcpfDApK01hdGguaW11bChSLHEpfDAsYT1hK01hdGguaW11bChSLEcpfDAsbj1uK01hdGguaW11bChJLFcpfDAsaT0oaT1pK01hdGguaW11bChJLFgpfDApK01hdGguaW11bChPLFcpfDAsYT1hK01hdGguaW11bChPLFgpfDAsbj1uK01hdGguaW11bChMLEopfDAsaT0oaT1pK01hdGguaW11bChMLEspfDApK01hdGguaW11bChDLEopfDAsYT1hK01hdGguaW11bChDLEspfDAsbj1uK01hdGguaW11bChNLCQpfDAsaT0oaT1pK01hdGguaW11bChNLHR0KXwwKStNYXRoLmltdWwoUywkKXwwLGE9YStNYXRoLmltdWwoUyx0dCl8MCxuPW4rTWF0aC5pbXVsKFQscnQpfDAsaT0oaT1pK01hdGguaW11bChULG50KXwwKStNYXRoLmltdWwoayxydCl8MCxhPWErTWF0aC5pbXVsKGssbnQpfDAsbj1uK01hdGguaW11bChiLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoYixvdCl8MCkrTWF0aC5pbXVsKF8sYXQpfDAsYT1hK01hdGguaW11bChfLG90KXwwLG49bitNYXRoLmltdWwodixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsY3QpfDApK01hdGguaW11bCh5LGx0KXwwLGE9YStNYXRoLmltdWwoeSxjdCl8MCxuPW4rTWF0aC5pbXVsKGQsZnQpfDAsaT0oaT1pK01hdGguaW11bChkLGh0KXwwKStNYXRoLmltdWwobSxmdCl8MCxhPWErTWF0aC5pbXVsKG0saHQpfDA7dmFyIEF0PShjKyhuPW4rTWF0aC5pbXVsKGYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG10KXwwKStNYXRoLmltdWwoaCxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG10KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPShpPU1hdGguaW11bChCLEcpKStNYXRoLmltdWwoTixxKXwwLGE9TWF0aC5pbXVsKE4sRyksbj1uK01hdGguaW11bChELFcpfDAsaT0oaT1pK01hdGguaW11bChELFgpfDApK01hdGguaW11bChSLFcpfDAsYT1hK01hdGguaW11bChSLFgpfDAsbj1uK01hdGguaW11bChJLEopfDAsaT0oaT1pK01hdGguaW11bChJLEspfDApK01hdGguaW11bChPLEopfDAsYT1hK01hdGguaW11bChPLEspfDAsbj1uK01hdGguaW11bChMLCQpfDAsaT0oaT1pK01hdGguaW11bChMLHR0KXwwKStNYXRoLmltdWwoQywkKXwwLGE9YStNYXRoLmltdWwoQyx0dCl8MCxuPW4rTWF0aC5pbXVsKE0scnQpfDAsaT0oaT1pK01hdGguaW11bChNLG50KXwwKStNYXRoLmltdWwoUyxydCl8MCxhPWErTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChULGF0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxvdCl8MCkrTWF0aC5pbXVsKGssYXQpfDAsYT1hK01hdGguaW11bChrLG90KXwwLG49bitNYXRoLmltdWwoYixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsY3QpfDApK01hdGguaW11bChfLGx0KXwwLGE9YStNYXRoLmltdWwoXyxjdCl8MCxuPW4rTWF0aC5pbXVsKHYsZnQpfDAsaT0oaT1pK01hdGguaW11bCh2LGh0KXwwKStNYXRoLmltdWwoeSxmdCl8MCxhPWErTWF0aC5pbXVsKHksaHQpfDA7dmFyIE10PShjKyhuPW4rTWF0aC5pbXVsKGQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChkLG10KXwwKStNYXRoLmltdWwobSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChtLG10KXwwKSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixXKSxpPShpPU1hdGguaW11bChCLFgpKStNYXRoLmltdWwoTixXKXwwLGE9TWF0aC5pbXVsKE4sWCksbj1uK01hdGguaW11bChELEopfDAsaT0oaT1pK01hdGguaW11bChELEspfDApK01hdGguaW11bChSLEopfDAsYT1hK01hdGguaW11bChSLEspfDAsbj1uK01hdGguaW11bChJLCQpfDAsaT0oaT1pK01hdGguaW11bChJLHR0KXwwKStNYXRoLmltdWwoTywkKXwwLGE9YStNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKEwscnQpfDAsaT0oaT1pK01hdGguaW11bChMLG50KXwwKStNYXRoLmltdWwoQyxydCl8MCxhPWErTWF0aC5pbXVsKEMsbnQpfDAsbj1uK01hdGguaW11bChNLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxvdCl8MCkrTWF0aC5pbXVsKFMsYXQpfDAsYT1hK01hdGguaW11bChTLG90KXwwLG49bitNYXRoLmltdWwoVCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsY3QpfDApK01hdGguaW11bChrLGx0KXwwLGE9YStNYXRoLmltdWwoayxjdCl8MCxuPW4rTWF0aC5pbXVsKGIsZnQpfDAsaT0oaT1pK01hdGguaW11bChiLGh0KXwwKStNYXRoLmltdWwoXyxmdCl8MCxhPWErTWF0aC5pbXVsKF8saHQpfDA7dmFyIFN0PShjKyhuPW4rTWF0aC5pbXVsKHYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bCh2LG10KXwwKStNYXRoLmltdWwoeSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bCh5LG10KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixKKSxpPShpPU1hdGguaW11bChCLEspKStNYXRoLmltdWwoTixKKXwwLGE9TWF0aC5pbXVsKE4sSyksbj1uK01hdGguaW11bChELCQpfDAsaT0oaT1pK01hdGguaW11bChELHR0KXwwKStNYXRoLmltdWwoUiwkKXwwLGE9YStNYXRoLmltdWwoUix0dCl8MCxuPW4rTWF0aC5pbXVsKEkscnQpfDAsaT0oaT1pK01hdGguaW11bChJLG50KXwwKStNYXRoLmltdWwoTyxydCl8MCxhPWErTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChMLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTCxvdCl8MCkrTWF0aC5pbXVsKEMsYXQpfDAsYT1hK01hdGguaW11bChDLG90KXwwLG49bitNYXRoLmltdWwoTSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sY3QpfDApK01hdGguaW11bChTLGx0KXwwLGE9YStNYXRoLmltdWwoUyxjdCl8MCxuPW4rTWF0aC5pbXVsKFQsZnQpfDAsaT0oaT1pK01hdGguaW11bChULGh0KXwwKStNYXRoLmltdWwoayxmdCl8MCxhPWErTWF0aC5pbXVsKGssaHQpfDA7dmFyIEV0PShjKyhuPW4rTWF0aC5pbXVsKGIsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChiLG10KXwwKStNYXRoLmltdWwoXyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChfLG10KXwwKSsoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQiwkKSxpPShpPU1hdGguaW11bChCLHR0KSkrTWF0aC5pbXVsKE4sJCl8MCxhPU1hdGguaW11bChOLHR0KSxuPW4rTWF0aC5pbXVsKEQscnQpfDAsaT0oaT1pK01hdGguaW11bChELG50KXwwKStNYXRoLmltdWwoUixydCl8MCxhPWErTWF0aC5pbXVsKFIsbnQpfDAsbj1uK01hdGguaW11bChJLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxvdCl8MCkrTWF0aC5pbXVsKE8sYXQpfDAsYT1hK01hdGguaW11bChPLG90KXwwLG49bitNYXRoLmltdWwoTCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKEwsY3QpfDApK01hdGguaW11bChDLGx0KXwwLGE9YStNYXRoLmltdWwoQyxjdCl8MCxuPW4rTWF0aC5pbXVsKE0sZnQpfDAsaT0oaT1pK01hdGguaW11bChNLGh0KXwwKStNYXRoLmltdWwoUyxmdCl8MCxhPWErTWF0aC5pbXVsKFMsaHQpfDA7dmFyIEx0PShjKyhuPW4rTWF0aC5pbXVsKFQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChULG10KXwwKStNYXRoLmltdWwoayxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChrLG10KXwwKSsoaT4+PjEzKXwwKSsoTHQ+Pj4yNil8MCxMdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixydCksaT0oaT1NYXRoLmltdWwoQixudCkpK01hdGguaW11bChOLHJ0KXwwLGE9TWF0aC5pbXVsKE4sbnQpLG49bitNYXRoLmltdWwoRCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEQsb3QpfDApK01hdGguaW11bChSLGF0KXwwLGE9YStNYXRoLmltdWwoUixvdCl8MCxuPW4rTWF0aC5pbXVsKEksbHQpfDAsaT0oaT1pK01hdGguaW11bChJLGN0KXwwKStNYXRoLmltdWwoTyxsdCl8MCxhPWErTWF0aC5pbXVsKE8sY3QpfDAsbj1uK01hdGguaW11bChMLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoTCxodCl8MCkrTWF0aC5pbXVsKEMsZnQpfDAsYT1hK01hdGguaW11bChDLGh0KXwwO3ZhciBDdD0oYysobj1uK01hdGguaW11bChNLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTSxtdCl8MCkrTWF0aC5pbXVsKFMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUyxtdCl8MCkrKGk+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsYXQpLGk9KGk9TWF0aC5pbXVsKEIsb3QpKStNYXRoLmltdWwoTixhdCl8MCxhPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKEQsbHQpfDAsaT0oaT1pK01hdGguaW11bChELGN0KXwwKStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsY3QpfDAsbj1uK01hdGguaW11bChJLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxodCl8MCkrTWF0aC5pbXVsKE8sZnQpfDAsYT1hK01hdGguaW11bChPLGh0KXwwO3ZhciBQdD0oYysobj1uK01hdGguaW11bChMLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTCxtdCl8MCkrTWF0aC5pbXVsKEMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoQyxtdCl8MCkrKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsbHQpLGk9KGk9TWF0aC5pbXVsKEIsY3QpKStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLGN0KSxuPW4rTWF0aC5pbXVsKEQsZnQpfDAsaT0oaT1pK01hdGguaW11bChELGh0KXwwKStNYXRoLmltdWwoUixmdCl8MCxhPWErTWF0aC5pbXVsKFIsaHQpfDA7dmFyIEl0PShjKyhuPW4rTWF0aC5pbXVsKEksZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChJLG10KXwwKStNYXRoLmltdWwoTyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChPLG10KXwwKSsoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixmdCksaT0oaT1NYXRoLmltdWwoQixodCkpK01hdGguaW11bChOLGZ0KXwwLGE9TWF0aC5pbXVsKE4saHQpO3ZhciBPdD0oYysobj1uK01hdGguaW11bChELGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoRCxtdCl8MCkrTWF0aC5pbXVsKFIsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUixtdCl8MCkrKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzO3ZhciB6dD0oYysobj1NYXRoLmltdWwoQixkdCkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoQixtdCkpK01hdGguaW11bChOLGR0KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoYT1NYXRoLmltdWwoTixtdCkpKyhpPj4+MTMpfDApKyh6dD4+PjI2KXwwLHp0Jj02NzEwODg2MyxsWzBdPWd0LGxbMV09dnQsbFsyXT15dCxsWzNdPXh0LGxbNF09YnQsbFs1XT1fdCxsWzZdPXd0LGxbN109VHQsbFs4XT1rdCxsWzldPUF0LGxbMTBdPU10LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUx0LGxbMTRdPUN0LGxbMTVdPVB0LGxbMTZdPUl0LGxbMTddPU90LGxbMThdPXp0LDAhPT1jJiYobFsxOV09YyxyLmxlbmd0aCsrKSxyfTtmdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4obmV3IGcpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGcodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1NYXRoLmltdWx8fChkPXApLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/ZCh0aGlzLHQsZSk6cjw2Mz9wKHRoaXMsdCxlKTpyPDEwMjQ/ZnVuY3Rpb24odCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxhPTA7YTxyLmxlbmd0aC0xO2ErKyl7dmFyIG89aTtpPTA7Zm9yKHZhciBzPTY3MTA4ODYzJm4sbD1NYXRoLm1pbihhLGUubGVuZ3RoLTEpLGM9TWF0aC5tYXgoMCxhLXQubGVuZ3RoKzEpO2M8PWw7YysrKXt2YXIgdT1hLWMsZj0oMHx0LndvcmRzW3VdKSooMHxlLndvcmRzW2NdKSxoPTY3MTA4ODYzJmY7cz02NzEwODg2MyYoaD1oK3N8MCksaSs9KG89KG89bysoZi82NzEwODg2NHwwKXwwKSsoaD4+PjI2KXwwKT4+PjI2LG8mPTY3MTA4ODYzfXIud29yZHNbYV09cyxuPW8sbz1pfXJldHVybiAwIT09bj9yLndvcmRzW2FdPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9KHRoaXMsdCxlKTptKHRoaXMsdCxlKX0sZy5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9YS5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxnLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZy5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxhO28rKyluW29dPWVbdFtvXV0saVtvXT1yW3Rbb11dfSxnLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMucGVybXV0ZShhLHQsZSxyLG4saSk7Zm9yKHZhciBvPTE7bzxpO288PD0xKWZvcih2YXIgcz1vPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3MpLGM9TWF0aC5zaW4oMipNYXRoLlBJL3MpLHU9MDt1PGk7dSs9cylmb3IodmFyIGY9bCxoPWMscD0wO3A8bztwKyspe3ZhciBkPXJbdStwXSxtPW5bdStwXSxnPXJbdStwK29dLHY9blt1K3Arb10seT1mKmctaCp2O3Y9Zip2K2gqZyxnPXksclt1K3BdPWQrZyxuW3UrcF09bSt2LHJbdStwK29dPWQtZyxuW3UrcCtvXT1tLXYscCE9PXMmJih5PWwqZi1jKmgsaD1sKmgrYypmLGY9eSl9fSxnLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZy5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZy5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZy5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9MCxvPTA7bzxlO28rKylhKz0wfHRbb10sclsyKm9dPTgxOTEmYSxhPj4+PTEzLHJbMipvKzFdPTgxOTEmYSxhPj4+PTEzO2ZvcihvPTIqZTtvPGk7KytvKXJbb109MDtuKDA9PT1hKSxuKDA9PSgtODE5MiZhKSl9LGcucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGcucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksYT10aGlzLnN0dWIobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobiksaD1yLndvcmRzO2gubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsbyxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxjLG4pLHRoaXMudHJhbnNmb3JtKG8sYSxzLGwsbixpKSx0aGlzLnRyYW5zZm9ybShjLGEsdSxmLG4saSk7Zm9yKHZhciBwPTA7cDxuO3ArKyl7dmFyIGQ9c1twXSp1W3BdLWxbcF0qZltwXTtsW3BdPXNbcF0qZltwXStsW3BdKnVbcF0sc1twXT1kfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShzLGwsbiksdGhpcy50cmFuc2Zvcm0ocyxsLGgsYSxuLGkpLHRoaXMuY29uanVnYXRlKGgsYSxuKSx0aGlzLm5vcm1hbGl6ZTEzYihoLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sYS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxhLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksbSh0aGlzLHQsZSl9LGEucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxhLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsYT0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9YT4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmYX1yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxhLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGEucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGEucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgYSgxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxhLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LGE9NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgbz0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBzPXRoaXMud29yZHNbZV0mYSxsPSgwfHRoaXMud29yZHNbZV0pLXM8PHI7dGhpcy53b3Jkc1tlXT1sfG8sbz1zPj4+MjYtcn1vJiYodGhpcy53b3Jkc1tlXT1vLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe3ZhciBpO24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKSxpPWU/KGUtZSUyNikvMjY6MDt2YXIgYT10JTI2LG89TWF0aC5taW4oKHQtYSkvMjYsdGhpcy5sZW5ndGgpLHM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5hPDxhLGw9cjtpZihpLT1vLGk9TWF0aC5tYXgoMCxpKSxsKXtmb3IodmFyIGM9MDtjPG87YysrKWwud29yZHNbY109dGhpcy53b3Jkc1tjXTtsLmxlbmd0aD1vfWlmKDA9PT1vKTtlbHNlIGlmKHRoaXMubGVuZ3RoPm8pZm9yKHRoaXMubGVuZ3RoLT1vLGM9MDtjPHRoaXMubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPXRoaXMud29yZHNbYytvXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB1PTA7Zm9yKGM9dGhpcy5sZW5ndGgtMTtjPj0wJiYoMCE9PXV8fGM+PWkpO2MtLSl7dmFyIGY9MHx0aGlzLndvcmRzW2NdO3RoaXMud29yZHNbY109dTw8MjYtYXxmPj4+YSx1PWYmc31yZXR1cm4gbCYmMCE9PXUmJihsLndvcmRzW2wubGVuZ3RoKytdPXUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxhLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LGEucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LGEucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxhLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtyZXR1cm4hKHRoaXMubGVuZ3RoPD1yKSYmISEodGhpcy53b3Jkc1tyXSZpKX0sYS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LGEucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LGEucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxhLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxhLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LGEucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGEucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxhLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgcz0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStzO3ZhciBsPSgwfHQud29yZHNbaV0pKmU7cz0oKGEtPTY3MTA4ODYzJmwpPj4yNiktKGwvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKXM9KGE9KDB8dGhpcy53b3Jkc1tpK3JdKStzKT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PXMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobigtMT09PXMpLHM9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspcz0oYT0tKDB8dGhpcy53b3Jkc1tpXSkrcyk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj0odGhpcy5sZW5ndGgsdC5sZW5ndGgpLG49dGhpcy5jbG9uZSgpLGk9dCxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZigibW9kIiE9PWUpeyhzPW5ldyBhKG51bGwpKS5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylzLndvcmRzW2NdPTB9dmFyIHU9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PXUubmVnYXRpdmUmJihuPXUscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgZj1sLTE7Zj49MDtmLS0pe3ZhciBoPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZl0pKygwfG4ud29yZHNbaS5sZW5ndGgrZi0xXSk7Zm9yKGg9TWF0aC5taW4oaC9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksaCxmKTswIT09bi5uZWdhdGl2ZTspaC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZiksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2ZdPWgpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgYSgwKSxtb2Q6bmV3IGEoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8ocz10aGlzLm5lZygpLmRpdm1vZCh0LGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaWFkZCh0KSkse2RpdjppLG1vZDpvfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhzPXRoaXMuZGl2bW9kKHQubmVnKCksZSksIm1vZCIhPT1lJiYoaT1zLmRpdi5uZWcoKSkse2RpdjppLG1vZDpzLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksImRpdiIhPT1lJiYobz1zLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pc3ViKHQpKSx7ZGl2OnMuZGl2LG1vZDpvfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgYSgwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoPyJkaXYiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKTt2YXIgaSxvLHN9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwiZGl2IiwhMSkuZGl2fSxhLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSxjPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKytjO2Zvcih2YXIgdT1yLmNsb25lKCksZj1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGg9MCxwPTE7MD09KGUud29yZHNbMF0mcCkmJmg8MjY7KytoLHA8PD0xKTtpZihoPjApZm9yKGUuaXVzaHJuKGgpO2gtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZCh1KSxvLmlzdWIoZikpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZD0wLG09MTswPT0oci53b3Jkc1swXSZtKSYmZDwyNjsrK2QsbTw8PTEpO2lmKGQ+MClmb3Ioci5pdXNocm4oZCk7ZC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKHUpLGwuaXN1YihmKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbihjKX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGksbz1uZXcgYSgxKSxzPW5ldyBhKDApLGw9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgYz0wLHU9MTswPT0oZS53b3Jkc1swXSZ1KSYmYzwyNjsrK2MsdTw8PTEpO2lmKGM+MClmb3IoZS5pdXNocm4oYyk7Yy0tID4wOylvLmlzT2RkKCkmJm8uaWFkZChsKSxvLml1c2hybigxKTtmb3IodmFyIGY9MCxoPTE7MD09KHIud29yZHNbMF0maCkmJmY8MjY7KytmLGg8PD0xKTtpZihmPjApZm9yKHIuaXVzaHJuKGYpO2YtLSA+MDspcy5pc09kZCgpJiZzLmlhZGQobCkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxvLmlzdWIocykpOihyLmlzdWIoZSkscy5pc3ViKG8pKX1yZXR1cm4oaT0wPT09ZS5jbXBuKDEpP286cykuY21wbigwKTwwJiZpLmlhZGQodCksaX0sYS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBhPWU7ZT1yLHI9YX1lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LGEucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LGEucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LGEucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBhPWksbz1yOzAhPT1hJiZvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9MHx0aGlzLndvcmRzW29dO2E9KHMrPWEpPj4+MjYscyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tvXT1zfXJldHVybiAwIT09YSYmKHRoaXMud29yZHNbb109YSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sYS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZSxyPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpZT0xO2Vsc2V7ciYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO2U9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFQodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG4oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sYS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIHY9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB5KHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBhKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBhKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB4KCl7eS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGIoKXt5LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gXygpe3kuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiB3KCl7eS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT1hLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBrKHQpe1QuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9eS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0seS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxlPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXIuc3RyaXA/ci5zdHJpcCgpOnIuX3N0cmlwKCkscn0seS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHgseSkseC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109NDE5NDMwMyZpLG49MTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPTB8dC53b3Jkc1tuXTt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9aT4+Pj0yMix0LndvcmRzW24tMTBdPWksMD09PWkmJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0seC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIseSksaShfLHkpLGkodyx5KSx3LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LGEuX3ByaW1lPWZ1bmN0aW9uKHQpe2lmKHZbdF0pcmV0dXJuIHZbdF07dmFyIGU7aWYoImsyNTYiPT09dCllPW5ldyB4O2Vsc2UgaWYoInAyMjQiPT09dCllPW5ldyBiO2Vsc2UgaWYoInAxOTIiPT09dCllPW5ldyBfO2Vsc2V7aWYoInAyNTUxOSIhPT10KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3QpO2U9bmV3IHd9cmV0dXJuIHZbdF09ZSxlfSxULnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sVC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sVC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LFQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxULnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LFQucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sVC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LFQucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sVC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sVC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxULnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBhKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLG89MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KW8rKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgcz1uZXcgYSgxKS50b1JlZCh0aGlzKSxsPXMucmVkTmVnKCksYz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHU9bmV3IGEoMip1KnUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1LGMpLmNtcChsKTspdS5yZWRJQWRkKGwpO2Zvcih2YXIgZj10aGlzLnBvdyh1LGkpLGg9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxwPXRoaXMucG93KHQsaSksZD1vOzAhPT1wLmNtcChzKTspe2Zvcih2YXIgbT1wLGc9MDswIT09bS5jbXAocyk7ZysrKW09bS5yZWRTcXIoKTtuKGc8ZCk7dmFyIHY9dGhpcy5wb3coZixuZXcgYSgxKS5pdXNobG4oZC1nLTEpKTtoPWgucmVkTXVsKHYpLGY9di5yZWRTcXIoKSxwPXAucmVkTXVsKGYpLGQ9Z31yZXR1cm4gaH0sVC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxULnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgYSgxKS50b1JlZCh0aGlzKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9bmV3IEFycmF5KDE2KTtyWzBdPW5ldyBhKDEpLnRvUmVkKHRoaXMpLHJbMV09dDtmb3IodmFyIG49MjtuPHIubGVuZ3RoO24rKylyW25dPXRoaXMubXVsKHJbbi0xXSx0KTt2YXIgaT1yWzBdLG89MCxzPTAsbD1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7Zm9yKHZhciBjPWUud29yZHNbbl0sdT1sLTE7dT49MDt1LS0pe3ZhciBmPWM+PnUmMTtpIT09clswXSYmKGk9dGhpcy5zcXIoaSkpLDAhPT1mfHwwIT09bz8obzw8PTEsb3w9ZiwoND09PSsrc3x8MD09PW4mJjA9PT11KSYmKGk9dGhpcy5tdWwoaSxyW29dKSxzPTAsbz0wKSk6cz0wfWw9MjZ9cmV0dXJuIGl9LFQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LFQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxhLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQpfSxpKGssVCksay5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGsucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odm9pZCAwPT09ZXx8ZSx0aGlzKX0se2J1ZmZlcjoyfV0sMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9MDtmb3IoZT0wO2U8aTsrK2UpYSs9dFtlXS5sZW5ndGg7dmFyIG89bmV3IEFycmF5KGEpLHM9MDtmb3IoZT0wO2U8aTsrK2Upe3ZhciBsPXRbZV0sYz1sLmxlbmd0aDtmb3Iocj0wO3I8YzsrK3Ipe3ZhciB1PW9bcysrXT1uZXcgQXJyYXkoYy0xKSxmPTA7Zm9yKG49MDtuPGM7KytuKW4hPT1yJiYodVtmKytdPWxbbl0pO2lmKDEmcil7dmFyIGg9dVsxXTt1WzFdPXVbMF0sdVswXT1ofX19cmV0dXJuIG99fSx7fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmKHQpO2Nhc2UgMjpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9jKHQsdCxlLCEwKTpoKHQsZSk7Y2FzZSAzOnJldHVybiBjKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMiKX19O3ZhciBuLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCIuL2xpYi9zd2VlcCIpLG89dCgiLi9saWIvaW50ZXJzZWN0Iik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wLG89MCxsPXQubGVuZ3RoO288bDsrK28pe3ZhciBjPXRbb107aWYoIXMoZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbaSsrXT1jW3VdO25bYSsrXT1vfX1yZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBzPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoIShzPD0wfHxjPD0wKSl7dmFyIHU9dFswXS5sZW5ndGg+Pj4xO2lmKCEodTw9MCkpe3ZhciBmLGg9aS5tYWxsb2NEb3VibGUoMip1KnMpLHA9aS5tYWxsb2NJbnQzMihzKTtpZigocz1sKHQsdSxoLHApKT4wKXtpZigxPT09dSYmbilhLmluaXQocyksZj1hLnN3ZWVwQ29tcGxldGUodSxyLDAscyxoLHAsMCxzLGgscCk7ZWxzZXt2YXIgZD1pLm1hbGxvY0RvdWJsZSgyKnUqYyksbT1pLm1hbGxvY0ludDMyKGMpOyhjPWwoZSx1LGQsbSkpPjAmJihhLmluaXQocytjKSxmPTE9PT11P2Euc3dlZXBCaXBhcnRpdGUodSxyLDAscyxoLHAsMCxjLGQsbSk6byh1LHIsbixzLGgscCxjLGQsbSksaS5mcmVlKGQpLGkuZnJlZShtKSl9aS5mcmVlKGgpLGkuZnJlZShwKX1yZXR1cm4gZn19fWZ1bmN0aW9uIHUodCxlKXtuLnB1c2goW3QsZV0pfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG49W10sYyh0LHQsdSwhMCksbn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn19LHsiLi9saWIvaW50ZXJzZWN0IjozNywiLi9saWIvc3dlZXAiOjQxLCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQ/ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXtyZXR1cm4gaS1uPmwtcz9mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1uLHA9ZipuO2g8aTsrK2gscCs9Zil7dmFyIGQ9YVtlK3BdLG09YVtlK3ArdF0sZz1vW2hdO3Q6Zm9yKHZhciB2PXMseT1mKnM7djxsOysrdix5Kz1mKXt2YXIgeD1jW2UreV0sYj1jW2UreSt0XSxfPXVbdl07aWYoIShiPGR8fG08eCkpe2Zvcih2YXIgdz1lKzE7dzx0Oysrdyl7dmFyIFQ9YVt3K3BdLGs9YVt3K3QrcF0sQT1jW3creV0sTT1jW3crdCt5XTtpZihrPEF8fE08VCljb250aW51ZSB0fXZhciBTPXIoZyxfKTtpZih2b2lkIDAhPT1TKXJldHVybiBTfX19fSh0LGUscixuLGksYSxvLHMsbCxjLHUpOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPXMscD1mKnM7aDxsOysraCxwKz1mKXt2YXIgZD1jW2UrcF0sbT1jW2UrcCt0XSxnPXVbaF07dDpmb3IodmFyIHY9bix5PWYqbjt2PGk7Kyt2LHkrPWYpe3ZhciB4PWFbZSt5XSxiPWFbZSt5K3RdLF89b1t2XTtpZighKG08eHx8YjxkKSl7Zm9yKHZhciB3PWUrMTt3PHQ7Kyt3KXt2YXIgVD1hW3creV0saz1hW3crdCt5XSxBPWNbdytwXSxNPWNbdyt0K3BdO2lmKGs8QXx8TTxUKWNvbnRpbnVlIHR9dmFyIFM9cihfLGcpO2lmKHZvaWQgMCE9PVMpcmV0dXJuIFN9fX19KHQsZSxyLG4saSxhLG8scyxsLGMsdSl9OmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXtyZXR1cm4gYS1pPmMtbD9uP2Z1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPW4scD1mKm47aDxpOysraCxwKz1mKXt2YXIgZD1hW2UrcF0sbT1hW2UrcCt0XSxnPW9baF07dDpmb3IodmFyIHY9cyx5PWYqczt2PGw7Kyt2LHkrPWYpe3ZhciB4PWNbZSt5XSxiPXVbdl07aWYoISh4PD1kfHxtPHgpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXytwXSxUPWFbXyt0K3BdLGs9Y1tfK3ldLEE9Y1tfK3QreV07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGIsZyk7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1uLHA9ZipuO2g8aTsrK2gscCs9Zil7dmFyIGQ9YVtlK3BdLG09YVtlK3ArdF0sZz1vW2hdO3Q6Zm9yKHZhciB2PXMseT1mKnM7djxsOysrdix5Kz1mKXt2YXIgeD1jW2UreV0sYj11W3ZdO2lmKCEoeDxkfHxtPHgpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXytwXSxUPWFbXyt0K3BdLGs9Y1tfK3ldLEE9Y1tfK3QreV07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGcsYik7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpuP2Z1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPXMscD1mKnM7aDxsOysraCxwKz1mKXt2YXIgZD1jW2UrcF0sbT11W2hdO3Q6Zm9yKHZhciBnPW4sdj1mKm47ZzxpOysrZyx2Kz1mKXt2YXIgeT1hW2Urdl0seD1hW2Urdit0XSxiPW9bZ107aWYoIShkPD15fHx4PGQpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXyt2XSxUPWFbXyt0K3ZdLGs9Y1tfK3BdLEE9Y1tfK3QrcF07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKG0sYik7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1zLHA9ZipzO2g8bDsrK2gscCs9Zil7dmFyIGQ9Y1tlK3BdLG09dVtoXTt0OmZvcih2YXIgZz1uLHY9ZipuO2c8aTsrK2csdis9Zil7dmFyIHk9YVtlK3ZdLHg9YVtlK3YrdF0sYj1vW2ddO2lmKCEoZDx5fHx4PGQpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXyt2XSxUPWFbXyt0K3ZdLGs9Y1tfK3BdLEE9Y1tfK3QrcF07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGIsbSk7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKX19ci5wYXJ0aWFsPW4oITEpLHIuZnVsbD1uKCEwKX0se31dLDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHUsdyxULGssQSl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCppLmxvZzIoZSsxKSoodCsxKXwwLGE9aS5uZXh0UG93Mig2KnIpO3YubGVuZ3RoPGEmJihuLmZyZWUodiksdj1uLm1hbGxvY0ludDMyKGEpKTt2YXIgbz1pLm5leHRQb3cyKDIqcik7eS5sZW5ndGg8byYmKG4uZnJlZSh5KSx5PW4ubWFsbG9jRG91YmxlKG8pKX0odCxhK1QpO3ZhciBNLFM9MCxFPTIqdDt4KFMrKywwLDAsYSwwLFQscj8xNjowLC0xLzAsMS8wKSxyfHx4KFMrKywwLDAsVCwwLGEsMSwtMS8wLDEvMCk7Zm9yKDtTPjA7KXt2YXIgTD02KihTLT0xKSxDPXZbTF0sUD12W0wrMV0sST12W0wrMl0sTz12W0wrM10sej12W0wrNF0sRD12W0wrNV0sUj0yKlMsRj15W1JdLEI9eVtSKzFdLE49MSZELGo9ISEoMTYmRCksVT11LFY9dyxIPWsscT1BO2lmKE4mJihVPWssVj1BLEg9dSxxPXcpLCEoMiZEJiYoST1wKHQsQyxQLEksVSxWLEIpLFA+PUkpfHw0JkQmJihQPWQodCxDLFAsSSxVLFYsRikpPj1JKSl7dmFyIEc9SS1QLFk9ei1PO2lmKGope2lmKHQqRyooRytZKTwxPDwyMil7aWYodm9pZCAwIT09KE09bC5zY2FuQ29tcGxldGUodCxDLGUsUCxJLFUsVixPLHosSCxxKSkpcmV0dXJuIE07Y29udGludWV9fWVsc2V7aWYodCpNYXRoLm1pbihHLFkpPDEyOCl7aWYodm9pZCAwIT09KE09byh0LEMsZSxOLFAsSSxVLFYsTyx6LEgscSkpKXJldHVybiBNO2NvbnRpbnVlfWlmKHQqRypZPDE8PDIyKXtpZih2b2lkIDAhPT0oTT1sLnNjYW5CaXBhcnRpdGUodCxDLGUsTixQLEksVSxWLE8seixILHEpKSlyZXR1cm4gTTtjb250aW51ZX19dmFyIFc9Zih0LEMsUCxJLFUsVixGLEIpO2lmKFA8VylpZih0KihXLVApPDEyOCl7aWYodm9pZCAwIT09KE09cyh0LEMrMSxlLFAsVyxVLFYsTyx6LEgscSkpKXJldHVybiBNfWVsc2UgaWYoQz09PXQtMil7aWYodm9pZCAwIT09KE09Tj9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxPLHosSCxxLFAsVyxVLFYpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFAsVyxVLFYsTyx6LEgscSkpKXJldHVybiBNfWVsc2UgeChTKyssQysxLFAsVyxPLHosTiwtMS8wLDEvMCkseChTKyssQysxLE8seixQLFcsMV5OLC0xLzAsMS8wKTtpZihXPEkpe3ZhciBYPWModCxDLE8seixILHEpLFo9SFtFKlgrQ10sSj1oKHQsQyxYLHosSCxxLFopO2lmKEo8eiYmeChTKyssQyxXLEksSix6LCg0fE4pKyhqPzE2OjApLFosQiksTzxYJiZ4KFMrKyxDLFcsSSxPLFgsKDJ8TikrKGo/MTY6MCksRixaKSxYKzE9PT1KKXtpZih2b2lkIDAhPT0oTT1qP18odCxDLGUsVyxJLFUsVixYLEgscVtYXSk6Yih0LEMsZSxOLFcsSSxVLFYsWCxILHFbWF0pKSlyZXR1cm4gTX1lbHNlIGlmKFg8Sil7dmFyIEs7aWYoail7aWYoSz1tKHQsQyxXLEksVSxWLFopLFc8Syl7dmFyIFE9aCh0LEMsVyxLLFUsVixaKTtpZihDPT09dC0yKXtpZihXPFEmJnZvaWQgMCE9PShNPWwuc3dlZXBDb21wbGV0ZSh0LGUsVyxRLFUsVixYLEosSCxxKSkpcmV0dXJuIE07aWYoUTxLJiZ2b2lkIDAhPT0oTT1sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxRLEssVSxWLFgsSixILHEpKSlyZXR1cm4gTX1lbHNlIFc8USYmeChTKyssQysxLFcsUSxYLEosMTYsLTEvMCwxLzApLFE8SyYmKHgoUysrLEMrMSxRLEssWCxKLDAsLTEvMCwxLzApLHgoUysrLEMrMSxYLEosUSxLLDEsLTEvMCwxLzApKX19ZWxzZSBLPU4/Zyh0LEMsVyxJLFUsVixaKTptKHQsQyxXLEksVSxWLFopLFc8SyYmKEM9PT10LTI/TT1OP2wuc3dlZXBCaXBhcnRpdGUodCxlLFgsSixILHEsVyxLLFUsVik6bC5zd2VlcEJpcGFydGl0ZSh0LGUsVyxLLFUsVixYLEosSCxxKTooeChTKyssQysxLFcsSyxYLEosTiwtMS8wLDEvMCkseChTKyssQysxLFgsSixXLEssMV5OLC0xLzAsMS8wKSkpfX19fX07dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJiaXQtdHdpZGRsZSIpLGE9dCgiLi9icnV0ZSIpLG89YS5wYXJ0aWFsLHM9YS5mdWxsLGw9dCgiLi9zd2VlcCIpLGM9dCgiLi9tZWRpYW4iKSx1PXQoIi4vcGFydGl0aW9uIiksZj11KCIhKGxvPj1wMCkmJiEocDE+PWhpKSIpLGg9dSgibG89PT1wMCIpLHA9dSgibG88cDAiKSxkPXUoImhpPD1wMCIpLG09dSgibG88PXAwJiZwMDw9aGkiKSxnPXUoImxvPHAwJiZwMDw9aGkiKSx2PW4ubWFsbG9jSW50MzIoMTAyNCkseT1uLm1hbGxvY0RvdWJsZSgxMDI0KTtmdW5jdGlvbiB4KHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz02KnQ7dltjXT1lLHZbYysxXT1yLHZbYysyXT1uLHZbYyszXT1pLHZbYys0XT1hLHZbYys1XT1vO3ZhciB1PTIqdDt5W3VdPXMseVt1KzFdPWx9ZnVuY3Rpb24gYih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPTIqdCxoPWwqZixwPWNbaCtlXTt0OmZvcih2YXIgZD1pLG09aSpmO2Q8YTsrK2QsbSs9Zil7dmFyIGc9b1ttK2VdLHY9b1ttK2UrdF07aWYoIShwPGd8fHY8cCkmJighbnx8cCE9PWcpKXtmb3IodmFyIHkseD1zW2RdLGI9ZSsxO2I8dDsrK2Ipe2c9b1ttK2JdLHY9b1ttK2IrdF07dmFyIF89Y1toK2JdLHc9Y1toK2IrdF07aWYodjxffHx3PGcpY29udGludWUgdH1pZih2b2lkIDAhPT0oeT1uP3IodSx4KTpyKHgsdSkpKXJldHVybiB5fX19ZnVuY3Rpb24gXyh0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0yKnQsZj1zKnUsaD1sW2YrZV07dDpmb3IodmFyIHA9bixkPW4qdTtwPGk7KytwLGQrPXUpe3ZhciBtPW9bcF07aWYobSE9PWMpe3ZhciBnPWFbZCtlXSx2PWFbZCtlK3RdO2lmKCEoaDxnfHx2PGgpKXtmb3IodmFyIHk9ZSsxO3k8dDsrK3kpe2c9YVtkK3ldLHY9YVtkK3krdF07dmFyIHg9bFtmK3ldLGI9bFtmK3krdF07aWYodjx4fHxiPGcpY29udGludWUgdH12YXIgXz1yKG0sYyk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX19LHsiLi9icnV0ZSI6MzYsIi4vbWVkaWFuIjozOCwiLi9wYXJ0aXRpb24iOjM5LCIuL3N3ZWVwIjo0MSwiYml0LXR3aWRkbGUiOjMyLCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7aWYoYTw9cisxKXJldHVybiByO3ZhciBsPXIsYz1hLHU9YStyPj4+MSxmPTIqdCxoPXUscD1vW2YqdStlXTtmb3IoO2w8Yzspe2lmKGMtbDw4KXtpKHQsZSxsLGMsbyxzKSxwPW9bZip1K2VdO2JyZWFrfXZhciBkPWMtbCxtPU1hdGgucmFuZG9tKCkqZCtsfDAsZz1vW2YqbStlXSx2PU1hdGgucmFuZG9tKCkqZCtsfDAseT1vW2YqditlXSx4PU1hdGgucmFuZG9tKCkqZCtsfDAsYj1vW2YqeCtlXTtnPD15P2I+PXk/KGg9dixwPXkpOmc+PWI/KGg9bSxwPWcpOihoPXgscD1iKTp5Pj1iPyhoPXYscD15KTpiPj1nPyhoPW0scD1nKTooaD14LHA9Yik7Zm9yKHZhciBfPWYqKGMtMSksdz1mKmgsVD0wO1Q8ZjsrK1QsKytfLCsrdyl7dmFyIGs9b1tfXTtvW19dPW9bd10sb1t3XT1rfXZhciBBPXNbYy0xXTtzW2MtMV09c1toXSxzW2hdPUEsaD1uKHQsZSxsLGMtMSxvLHMscCk7Zm9yKF89ZiooYy0xKSx3PWYqaCxUPTA7VDxmOysrVCwrK18sKyt3KXtrPW9bX107b1tfXT1vW3ddLG9bd109a31BPXNbYy0xXTtpZihzW2MtMV09c1toXSxzW2hdPUEsdTxoKXtmb3IoYz1oLTE7bDxjJiZvW2YqKGMtMSkrZV09PT1wOyljLT0xO2MrPTF9ZWxzZXtpZighKGg8dSkpYnJlYWs7Zm9yKGw9aCsxO2w8YyYmb1tmKmwrZV09PT1wOylsKz0xfX1yZXR1cm4gbih0LGUscix1LG8scyxvW2YqdStlXSl9O3ZhciBuPXQoIi4vcGFydGl0aW9uIikoImxvPHAwIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7Zm9yKHZhciBvPTIqdCxzPW8qKHIrMSkrZSxsPXIrMTtsPG47KytsLHMrPW8pZm9yKHZhciBjPWlbc10sdT1sLGY9byoobC0xKTt1PnImJmlbZitlXT5jOy0tdSxmLT1vKXtmb3IodmFyIGg9ZixwPWYrbyxkPTA7ZDxvOysrZCwrK2gsKytwKXt2YXIgbT1pW2hdO2lbaF09aVtwXSxpW3BdPW19dmFyIGc9YVt1XTthW3VdPWFbdS0xXSxhW3UtMV09Z319fSx7Ii4vcGFydGl0aW9uIjozOX1dLDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX07dmFyIG49eyJsbz09PXAwIjpmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9Mip0LGw9cypyLGM9bCx1PXIsZj1lLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXT09PW8paWYodT09PWgpdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBwPTA7cz5wOysrcCl7dmFyIGQ9aVtsK3BdO2lbbCtwXT1pW2NdLGlbYysrXT1kfXZhciBtPWFbaF07YVtoXT1hW3VdLGFbdSsrXT1tfX1yZXR1cm4gdX0sImxvPHAwIjpmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9Mip0LGw9cypyLGM9bCx1PXIsZj1lLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXTxvKWlmKHU9PT1oKXUrPTEsYys9cztlbHNle2Zvcih2YXIgcD0wO3M+cDsrK3Ape3ZhciBkPWlbbCtwXTtpW2wrcF09aVtjXSxpW2MrK109ZH12YXIgbT1hW2hdO2FbaF09YVt1XSxhW3UrK109bX19cmV0dXJuIHV9LCJsbzw9cDAiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0yKnQsbD1zKnIsYz1sLHU9cixmPXQrZSxoPXI7bj5oOysraCxsKz1zKXtpZihpW2wrZl08PW8paWYodT09PWgpdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBwPTA7cz5wOysrcCl7dmFyIGQ9aVtsK3BdO2lbbCtwXT1pW2NdLGlbYysrXT1kfXZhciBtPWFbaF07YVtoXT1hW3VdLGFbdSsrXT1tfX1yZXR1cm4gdX0sImhpPD1wMCI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9dCtlLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXTw9bylpZih1PT09aCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIHA9MDtzPnA7KytwKXt2YXIgZD1pW2wrcF07aVtsK3BdPWlbY10saVtjKytdPWR9dmFyIG09YVtoXTthW2hdPWFbdV0sYVt1KytdPW19fXJldHVybiB1fSwibG88cDAmJnAwPD1oaSI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXQrZSxwPXI7bj5wOysrcCxsKz1zKXt2YXIgZD1pW2wrZl0sbT1pW2wraF07aWYoZDxvJiZvPD1tKWlmKHU9PT1wKXUrPTEsYys9cztlbHNle2Zvcih2YXIgZz0wO3M+ZzsrK2cpe3ZhciB2PWlbbCtnXTtpW2wrZ109aVtjXSxpW2MrK109dn12YXIgeT1hW3BdO2FbcF09YVt1XSxhW3UrK109eX19cmV0dXJuIHV9LCJsbzw9cDAmJnAwPD1oaSI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXQrZSxwPXI7bj5wOysrcCxsKz1zKXt2YXIgZD1pW2wrZl0sbT1pW2wraF07aWYoZDw9byYmbzw9bSlpZih1PT09cCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIGc9MDtzPmc7KytnKXt2YXIgdj1pW2wrZ107aVtsK2ddPWlbY10saVtjKytdPXZ9dmFyIHk9YVtwXTthW3BdPWFbdV0sYVt1KytdPXl9fXJldHVybiB1fSwiIShsbz49cDApJiYhKHAxPj1oaSkiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPTIqdCxjPWwqcix1PWMsZj1yLGg9ZSxwPXQrZSxkPXI7bj5kOysrZCxjKz1sKXt2YXIgbT1pW2MraF0sZz1pW2MrcF07aWYoIShtPj1vfHxzPj1nKSlpZihmPT09ZClmKz0xLHUrPWw7ZWxzZXtmb3IodmFyIHY9MDtsPnY7Kyt2KXt2YXIgeT1pW2Mrdl07aVtjK3ZdPWlbdV0saVt1KytdPXl9dmFyIHg9YVtkXTthW2RdPWFbZl0sYVtmKytdPXh9fXJldHVybiBmfX19LHt9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPD0xMjg/bigwLGUtMSx0KTpmdW5jdGlvbiB0KGUscix1KXt2YXIgZj0oci1lKzEpLzZ8MCxoPWUrZixwPXItZixkPWUrcj4+MSxtPWQtZixnPWQrZix2PWgseT1tLHg9ZCxiPWcsXz1wLHc9ZSsxLFQ9ci0xLGs9MDtsKHYseSx1KSYmKGs9dix2PXkseT1rKTtsKGIsXyx1KSYmKGs9YixiPV8sXz1rKTtsKHYseCx1KSYmKGs9dix2PXgseD1rKTtsKHkseCx1KSYmKGs9eSx5PXgseD1rKTtsKHYsYix1KSYmKGs9dix2PWIsYj1rKTtsKHgsYix1KSYmKGs9eCx4PWIsYj1rKTtsKHksXyx1KSYmKGs9eSx5PV8sXz1rKTtsKHkseCx1KSYmKGs9eSx5PXgseD1rKTtsKGIsXyx1KSYmKGs9YixiPV8sXz1rKTtmb3IodmFyIEE9dVsyKnldLE09dVsyKnkrMV0sUz11WzIqYl0sRT11WzIqYisxXSxMPTIqdixDPTIqeCxQPTIqXyxJPTIqaCxPPTIqZCx6PTIqcCxEPTA7RDwyOysrRCl7dmFyIFI9dVtMK0RdLEY9dVtDK0RdLEI9dVtQK0RdO3VbSStEXT1SLHVbTytEXT1GLHVbeitEXT1CfWEobSxlLHUpLGEoZyxyLHUpO2Zvcih2YXIgTj13O048PVQ7KytOKWlmKGMoTixBLE0sdSkpTiE9PXcmJmkoTix3LHUpLCsrdztlbHNlIGlmKCFjKE4sUyxFLHUpKWZvcig7Oyl7aWYoYyhULFMsRSx1KSl7YyhULEEsTSx1KT8obyhOLHcsVCx1KSwrK3csLS1UKTooaShOLFQsdSksLS1UKTticmVha31pZigtLVQ8TilicmVha31zKGUsdy0xLEEsTSx1KSxzKHIsVCsxLFMsRSx1KSx3LTItZTw9MzI/bihlLHctMix1KTp0KGUsdy0yLHUpO3ItKFQrMik8PTMyP24oVCsyLHIsdSk6dChUKzIscix1KTtULXc8PTMyP24odyxULHUpOnQodyxULHUpfSgwLGUtMSx0KX07ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPTIqKHQrMSksaT10KzE7aTw9ZTsrK2kpe2Zvcih2YXIgYT1yW24rK10sbz1yW24rK10scz1pLGw9bi0yO3MtLSA+dDspe3ZhciBjPXJbbC0yXSx1PXJbbC0xXTtpZihjPGEpYnJlYWs7aWYoYz09PWEmJnU8bylicmVhaztyW2xdPWMscltsKzFdPXUsbC09Mn1yW2xdPWEscltsKzFdPW99fWZ1bmN0aW9uIGkodCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbdCsxXTtyW3RdPXJbZV0sclt0KzFdPXJbZSsxXSxyW2VdPW4scltlKzFdPWl9ZnVuY3Rpb24gYSh0LGUscil7ZSo9MixyW3QqPTJdPXJbZV0sclt0KzFdPXJbZSsxXX1mdW5jdGlvbiBvKHQsZSxyLG4pe2UqPTIscio9Mjt2YXIgaT1uW3QqPTJdLGE9blt0KzFdO25bdF09bltlXSxuW3QrMV09bltlKzFdLG5bZV09bltyXSxuW2UrMV09bltyKzFdLG5bcl09aSxuW3IrMV09YX1mdW5jdGlvbiBzKHQsZSxyLG4saSl7ZSo9MixpW3QqPTJdPWlbZV0saVtlXT1yLGlbdCsxXT1pW2UrMV0saVtlKzFdPW59ZnVuY3Rpb24gbCh0LGUscil7ZSo9Mjt2YXIgbj1yW3QqPTJdLGk9cltlXTtyZXR1cm4hKG48aSkmJihuIT09aXx8clt0KzFdPnJbZSsxXSl9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaT1uW3QqPTJdO3JldHVybiBpPGV8fGk9PT1lJiZuW3QrMV08cn19LHt9XSw0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2luaXQ6ZnVuY3Rpb24odCl7dmFyIGU9aS5uZXh0UG93Mih0KTtvLmxlbmd0aDxlJiYobi5mcmVlKG8pLG89bi5tYWxsb2NJbnQzMihlKSk7cy5sZW5ndGg8ZSYmKG4uZnJlZShzKSxzPW4ubWFsbG9jSW50MzIoZSkpO2wubGVuZ3RoPGUmJihuLmZyZWUobCksbD1uLm1hbGxvY0ludDMyKGUpKTtjLmxlbmd0aDxlJiYobi5mcmVlKGMpLGM9bi5tYWxsb2NJbnQzMihlKSk7dS5sZW5ndGg8ZSYmKG4uZnJlZSh1KSx1PW4ubWFsbG9jSW50MzIoZSkpO2YubGVuZ3RoPGUmJihuLmZyZWUoZiksZj1uLm1hbGxvY0ludDMyKGUpKTt2YXIgcj04KmU7aC5sZW5ndGg8ciYmKG4uZnJlZShoKSxoPW4ubWFsbG9jRG91YmxlKHIpKX0sc3dlZXBCaXBhcnRpdGU6ZnVuY3Rpb24odCxlLHIsbixpLHUsZixtLGcsdil7Zm9yKHZhciB5PTAseD0yKnQsYj10LTEsXz14LTEsdz1yO3c8bjsrK3cpe3ZhciBUPXVbd10saz14Knc7aFt5KytdPWlbaytiXSxoW3krK109LShUKzEpLGhbeSsrXT1pW2srX10saFt5KytdPVR9Zm9yKHc9Zjt3PG07Kyt3KXtUPXZbd10rKDE8PDI4KTt2YXIgQT14Knc7aFt5KytdPWdbQStiXSxoW3krK109LVQsaFt5KytdPWdbQStfXSxoW3krK109VH12YXIgTT15Pj4+MTthKGgsTSk7dmFyIFM9MCxFPTA7Zm9yKHc9MDt3PE07Kyt3KXt2YXIgTD0wfGhbMip3KzFdO2lmKEw+PTE8PDI4KXAobCxjLEUtLSxMPUwtKDE8PDI4KXwwKTtlbHNlIGlmKEw+PTApcChvLHMsUy0tLEwpO2Vsc2UgaWYoTDw9LSgxPDwyOCkpe0w9LUwtKDE8PDI4KXwwO2Zvcih2YXIgQz0wO0M8UzsrK0Mpe2lmKHZvaWQgMCE9PShQPWUob1tDXSxMKSkpcmV0dXJuIFB9ZChsLGMsRSsrLEwpfWVsc2V7TD0tTC0xfDA7Zm9yKEM9MDtDPEU7KytDKXt2YXIgUDtpZih2b2lkIDAhPT0oUD1lKEwsbFtDXSkpKXJldHVybiBQfWQobyxzLFMrKyxMKX19fSxzd2VlcENvbXBsZXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxtLGcsdix5LHgpe2Zvcih2YXIgYj0wLF89Mip0LHc9dC0xLFQ9Xy0xLGs9cjtrPG47KytrKXt2YXIgQT1tW2tdKzE8PDEsTT1fKms7aFtiKytdPWlbTSt3XSxoW2IrK109LUEsaFtiKytdPWlbTStUXSxoW2IrK109QX1mb3Ioaz1nO2s8djsrK2spe0E9eFtrXSsxPDwxO3ZhciBTPV8qaztoW2IrK109eVtTK3ddLGhbYisrXT0xfC1BLGhbYisrXT15W1MrVF0saFtiKytdPTF8QX12YXIgRT1iPj4+MTthKGgsRSk7dmFyIEw9MCxDPTAsUD0wO2ZvcihrPTA7azxFOysrayl7dmFyIEk9MHxoWzIqaysxXSxPPTEmSTtpZihrPEUtMSYmST4+MT09aFsyKmsrM10+PjEmJihPPTIsays9MSksSTwwKXtmb3IodmFyIHo9LShJPj4xKS0xLEQ9MDtEPFA7KytEKXtpZih2b2lkIDAhPT0oUj1lKHVbRF0seikpKXJldHVybiBSfWlmKDAhPT1PKWZvcihEPTA7RDxMOysrRCl7aWYodm9pZCAwIT09KFI9ZShvW0RdLHopKSlyZXR1cm4gUn1pZigxIT09Tylmb3IoRD0wO0Q8QzsrK0Qpe3ZhciBSO2lmKHZvaWQgMCE9PShSPWUobFtEXSx6KSkpcmV0dXJuIFJ9MD09PU8/ZChvLHMsTCsrLHopOjE9PT1PP2QobCxjLEMrKyx6KToyPT09TyYmZCh1LGYsUCsrLHopfWVsc2V7ej0oST4+MSktMTswPT09Tz9wKG8scyxMLS0seik6MT09PU8/cChsLGMsQy0tLHopOjI9PT1PJiZwKHUsZixQLS0seil9fX0sc2NhbkJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksbCxjLHUsZixtLGcsdil7dmFyIHk9MCx4PTIqdCxiPWUsXz1lK3Qsdz0xLFQ9MTtuP1Q9MTw8Mjg6dz0xPDwyODtmb3IodmFyIGs9aTtrPGw7KytrKXt2YXIgQT1rK3csTT14Kms7aFt5KytdPWNbTStiXSxoW3krK109LUEsaFt5KytdPWNbTStfXSxoW3krK109QX1mb3Ioaz1mO2s8bTsrK2spe0E9aytUO3ZhciBTPXgqaztoW3krK109Z1tTK2JdLGhbeSsrXT0tQX12YXIgRT15Pj4+MTthKGgsRSk7dmFyIEw9MDtmb3Ioaz0wO2s8RTsrK2spe3ZhciBDPTB8aFsyKmsrMV07aWYoQzwwKXt2YXIgUD0hMTtpZigoQT0tQyk+PTE8PDI4PyhQPSFuLEEtPTE8PDI4KTooUD0hIW4sQS09MSksUClkKG8scyxMKyssQSk7ZWxzZXt2YXIgST12W0FdLE89eCpBLHo9Z1tPK2UrMV0sRD1nW08rZSsxK3RdO3Q6Zm9yKHZhciBSPTA7UjxMOysrUil7dmFyIEY9b1tSXSxCPXgqRjtpZighKEQ8Y1tCK2UrMV18fGNbQitlKzErdF08eikpe2Zvcih2YXIgTj1lKzI7Tjx0OysrTilpZihnW08rTit0XTxjW0IrTl18fGNbQitOK3RdPGdbTytOXSljb250aW51ZSB0O3ZhciBqLFU9dVtGXTtpZih2b2lkIDAhPT0oaj1uP3IoSSxVKTpyKFUsSSkpKXJldHVybiBqfX19fWVsc2UgcChvLHMsTC0tLEMtdyl9fSxzY2FuQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLHMsbCxjLHUsZixwKXtmb3IodmFyIGQ9MCxtPTIqdCxnPWUsdj1lK3QseT1uO3k8aTsrK3kpe3ZhciB4PXkrKDE8PDI4KSxiPW0qeTtoW2QrK109c1tiK2ddLGhbZCsrXT0teCxoW2QrK109c1tiK3ZdLGhbZCsrXT14fWZvcih5PWM7eTx1OysreSl7eD15KzE7dmFyIF89bSp5O2hbZCsrXT1mW18rZ10saFtkKytdPS14fXZhciB3PWQ+Pj4xO2EoaCx3KTt2YXIgVD0wO2Zvcih5PTA7eTx3OysreSl7dmFyIGs9MHxoWzIqeSsxXTtpZihrPDApe2lmKCh4PS1rKT49MTw8Mjgpb1tUKytdPXgtKDE8PDI4KTtlbHNle3ZhciBBPXBbeC09MV0sTT1tKngsUz1mW00rZSsxXSxFPWZbTStlKzErdF07dDpmb3IodmFyIEw9MDtMPFQ7KytMKXt2YXIgQz1vW0xdLFA9bFtDXTtpZihQPT09QSlicmVhazt2YXIgST1tKkM7aWYoIShFPHNbSStlKzFdfHxzW0krZSsxK3RdPFMpKXtmb3IodmFyIE89ZSsyO088dDsrK08paWYoZltNK08rdF08c1tJK09dfHxzW0krTyt0XTxmW00rT10pY29udGludWUgdDt2YXIgej1yKFAsQSk7aWYodm9pZCAwIT09eilyZXR1cm4gen19fX1lbHNle2Zvcih4PWstKDE8PDI4KSxMPVQtMTtMPj0wOy0tTClpZihvW0xdPT09eCl7Zm9yKE89TCsxO088VDsrK08pb1tPLTFdPW9bT107YnJlYWt9LS1UfX19fTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoImJpdC10d2lkZGxlIiksYT10KCIuL3NvcnQiKSxvPW4ubWFsbG9jSW50MzIoMTAyNCkscz1uLm1hbGxvY0ludDMyKDEwMjQpLGw9bi5tYWxsb2NJbnQzMigxMDI0KSxjPW4ubWFsbG9jSW50MzIoMTAyNCksdT1uLm1hbGxvY0ludDMyKDEwMjQpLGY9bi5tYWxsb2NJbnQzMigxMDI0KSxoPW4ubWFsbG9jRG91YmxlKDgxOTIpO2Z1bmN0aW9uIHAodCxlLHIsbil7dmFyIGk9ZVtuXSxhPXRbci0xXTt0W2ldPWEsZVthXT1pfWZ1bmN0aW9uIGQodCxlLHIsbil7dFtyXT1uLGVbbl09cn19LHsiLi9zb3J0Ijo0MCwiYml0LXR3aWRkbGUiOjMyLCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL21vbm90b25lIiksaT10KCIuL2xpYi90cmlhbmd1bGF0aW9uIiksYT10KCIuL2xpYi9kZWxhdW5heSIpLG89dCgiLi9saWIvZmlsdGVyIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm5bTWF0aC5taW4odFswXSx0WzFdKSxNYXRoLm1heCh0WzBdLHRbMV0pXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShlKT8ocj1yfHx7fSxlPWV8fFtdKToocj1lfHx7fSxlPVtdKTt2YXIgdT0hIWMociwiZGVsYXVuYXkiLCEwKSxmPSEhYyhyLCJpbnRlcmlvciIsITApLGg9ISFjKHIsImV4dGVyaW9yIiwhMCkscD0hIWMociwiaW5maW5pdHkiLCExKTtpZighZiYmIWh8fDA9PT10Lmxlbmd0aClyZXR1cm5bXTt2YXIgZD1uKHQsZSk7aWYodXx8ZiE9PWh8fHApe2Zvcih2YXIgbT1pKHQubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5zb3J0KGwpfShlKSksZz0wO2c8ZC5sZW5ndGg7KytnKXt2YXIgdj1kW2ddO20uYWRkVHJpYW5nbGUodlswXSx2WzFdLHZbMl0pfXJldHVybiB1JiZhKHQsbSksaD9mP3A/byhtLDAscCk6bS5jZWxscygpOm8obSwxLHApOm8obSwtMSl9cmV0dXJuIGR9fSx7Ii4vbGliL2RlbGF1bmF5Ijo0MywiLi9saWIvZmlsdGVyIjo0NCwiLi9saWIvbW9ub3RvbmUiOjQ1LCIuL2xpYi90cmlhbmd1bGF0aW9uIjo0Nn1dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1pbi1zcGhlcmUiKVs0XTt0KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlLHIsaSxhLG8pe3ZhciBzPWUub3Bwb3NpdGUoaSxhKTtpZighKHM8MCkpe2lmKGE8aSl7dmFyIGw9aTtpPWEsYT1sLGw9byxvPXMscz1sfWUuaXNDb25zdHJhaW50KGksYSl8fG4odFtpXSx0W2FdLHRbb10sdFtzXSk8MCYmci5wdXNoKGksYSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQubGVuZ3RoLG89ZS5zdGFycyxzPTA7czxhOysrcylmb3IodmFyIGw9b1tzXSxjPTE7YzxsLmxlbmd0aDtjKz0yKXtpZighKChwPWxbY10pPHMpJiYhZS5pc0NvbnN0cmFpbnQocyxwKSl7Zm9yKHZhciB1PWxbYy0xXSxmPS0xLGg9MTtoPGwubGVuZ3RoO2grPTIpaWYobFtoLTFdPT09cCl7Zj1sW2hdO2JyZWFrfWY8MHx8bih0W3NdLHRbcF0sdFt1XSx0W2ZdKTwwJiZyLnB1c2gocyxwKX19Zm9yKDtyLmxlbmd0aD4wOyl7Zm9yKHZhciBwPXIucG9wKCksZD0ocz1yLnBvcCgpLHU9LTEsZj0tMSxsPW9bc10sMSk7ZDxsLmxlbmd0aDtkKz0yKXt2YXIgbT1sW2QtMV0sZz1sW2RdO209PT1wP2Y9ZzpnPT09cCYmKHU9bSl9dTwwfHxmPDB8fChuKHRbc10sdFtwXSx0W3VdLHRbZl0pPj0wfHwoZS5mbGlwKHMscCksaSh0LGUscix1LHMsZiksaSh0LGUscixzLGYsdSksaSh0LGUscixmLHAsdSksaSh0LGUscixwLHUsZikpKX19fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwicm9idXN0LWluLXNwaGVyZSI6MjgyfV0sNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9aSx0aGlzLm5leHQ9YSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jZWxscygpLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBzPSh2PXJbaV0pWzBdLGw9dlsxXSxjPXZbMl07bDxjP2w8cyYmKHZbMF09bCx2WzFdPWMsdlsyXT1zKTpjPHMmJih2WzBdPWMsdlsxXT1zLHZbMl09bCl9ci5zb3J0KG8pO3ZhciB1PW5ldyBBcnJheShuKTtmb3IoaT0wO2k8dS5sZW5ndGg7KytpKXVbaV09MDt2YXIgZj1bXSxoPVtdLHA9bmV3IEFycmF5KDMqbiksZD1uZXcgQXJyYXkoMypuKSxtPW51bGw7ZSYmKG09W10pO3ZhciBnPW5ldyBhKHIscCxkLHUsZixoLG0pO2ZvcihpPTA7aTxuOysraSlmb3IodmFyIHY9cltpXSx5PTA7eTwzOysreSl7cz12W3ldLGw9dlsoeSsxKSUzXTt2YXIgeD1wWzMqaSt5XT1nLmxvY2F0ZShsLHMsdC5vcHBvc2l0ZShsLHMpKSxiPWRbMyppK3ldPXQuaXNDb25zdHJhaW50KHMsbCk7eDwwJiYoYj9oLnB1c2goaSk6KGYucHVzaChpKSx1W2ldPTEpLGUmJm0ucHVzaChbbCxzLC0xXSkpfXJldHVybiBnfSh0LHIpO2lmKDA9PT1lKXJldHVybiByP24uY2VsbHMuY29uY2F0KG4uYm91bmRhcnkpOm4uY2VsbHM7dmFyIGk9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LGM9bi5mbGFncyx1PW4uY2VsbHMsZj1uLmNvbnN0cmFpbnQsaD1uLm5laWdoYm9yO2Zvcig7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBwPXMucG9wKCk7aWYoY1twXSE9PS1pKXtjW3BdPWk7dVtwXTtmb3IodmFyIGQ9MDtkPDM7KytkKXt2YXIgbT1oWzMqcCtkXTttPj0wJiYwPT09Y1ttXSYmKGZbMypwK2RdP2wucHVzaChtKToocy5wdXNoKG0pLGNbbV09aSkpfX19dmFyIGc9bDtsPXMscz1nLGwubGVuZ3RoPTAsaT0taX12YXIgdj1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKWVbaV09PT1yJiYodFtuKytdPXRbaV0pO3JldHVybiB0Lmxlbmd0aD1uLHR9KHUsYyxlKTtpZihyKXJldHVybiB2LmNvbmNhdChuLmJvdW5kYXJ5KTtyZXR1cm4gdn0sYS5wcm90b3R5cGUubG9jYXRlPShuPVswLDAsMF0sZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQscz1lLGw9cjtyZXR1cm4gZTxyP2U8dCYmKGE9ZSxzPXIsbD10KTpyPHQmJihhPXIscz10LGw9ZSksYTwwPy0xOihuWzBdPWEsblsxXT1zLG5bMl09bCxpLmVxKHRoaXMuY2VsbHMsbixvKSl9KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzF9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgicm9idXN0LW9yaWVudGF0aW9uIilbM107ZnVuY3Rpb24gYSh0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gcyh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCgwIT09dC50eXBlJiYocj1pKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpKHQuYSx0LmIsZSl9ZnVuY3Rpb24gYyh0LGUscixhLG8pe2Zvcih2YXIgcz1uLmx0KGUsYSxsKSxjPW4uZ3QoZSxhLGwpLHU9czt1PGM7Kyt1KXtmb3IodmFyIGY9ZVt1XSxoPWYubG93ZXJJZHMscD1oLmxlbmd0aDtwPjEmJmkocltoW3AtMl1dLHJbaFtwLTFdXSxhKT4wOyl0LnB1c2goW2hbcC0xXSxoW3AtMl0sb10pLHAtPTE7aC5sZW5ndGg9cCxoLnB1c2gobyk7dmFyIGQ9Zi51cHBlcklkcztmb3IocD1kLmxlbmd0aDtwPjEmJmkocltkW3AtMl1dLHJbZFtwLTFdXSxhKTwwOyl0LnB1c2goW2RbcC0yXSxkW3AtMV0sb10pLHAtPTE7ZC5sZW5ndGg9cCxkLnB1c2gobyl9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2kodC5hLHQuYixlLmEpOmkoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/aSh0LmEsdC5iLGUuYik6aShlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1uLmxlKHQscix1KSxvPXRbaV0scz1vLnVwcGVySWRzLGw9c1tzLmxlbmd0aC0xXTtvLnVwcGVySWRzPVtsXSx0LnNwbGljZShpKzEsMCxuZXcgYShyLmEsci5iLHIuaWR4LFtsXSxzKSl9ZnVuY3Rpb24gaCh0LGUscil7dmFyIGk9ci5hO3IuYT1yLmIsci5iPWk7dmFyIGE9bi5lcSh0LHIsdSksbz10W2FdO3RbYS0xXS51cHBlcklkcz1vLnVwcGVySWRzLHQuc3BsaWNlKGEsMSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT1bXSxsPTA7bDxyOysrbClpLnB1c2gobmV3IG8odFtsXSxudWxsLDAsbCkpO2ZvcihsPTA7bDxuOysrbCl7dmFyIHU9ZVtsXSxwPXRbdVswXV0sZD10W3VbMV1dO3BbMF08ZFswXT9pLnB1c2gobmV3IG8ocCxkLDIsbCksbmV3IG8oZCxwLDEsbCkpOnBbMF0+ZFswXSYmaS5wdXNoKG5ldyBvKGQscCwyLGwpLG5ldyBvKHAsZCwxLGwpKX1pLnNvcnQocyk7Zm9yKHZhciBtPWlbMF0uYVswXS0oMStNYXRoLmFicyhpWzBdLmFbMF0pKSpNYXRoLnBvdygyLC01MiksZz1bbmV3IGEoW20sMV0sW20sMF0sLTEsW10sW10sW10sW10pXSx2PVtdLHk9KGw9MCxpLmxlbmd0aCk7bDx5OysrbCl7dmFyIHg9aVtsXSxiPXgudHlwZTswPT09Yj9jKHYsZyx0LHguYSx4LmlkeCk6Mj09PWI/ZihnLHQseCk6aChnLHQseCl9cmV0dXJuIHZ9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwicm9idXN0LW9yaWVudGF0aW9uIjoyODR9XSw0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlKXt0aGlzLnN0YXJzPXQsdGhpcy5lZGdlcz1lfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1bXTtyZXR1cm4gbmV3IGkocixlKX07dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPTEsaT10Lmxlbmd0aDtuPGk7bis9MilpZih0W24tMV09PT1lJiZ0W25dPT09cilyZXR1cm4gdFtuLTFdPXRbaS0yXSx0W25dPXRbaS0xXSx2b2lkKHQubGVuZ3RoPWktMil9YS5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXJldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiB0WzBdPU1hdGgubWluKHIsaSksdFsxXT1NYXRoLm1heChyLGkpLG4uZXEodGhpcy5lZGdlcyx0LGUpPj0wfX0oKSxhLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO28oblt0XSxlLHIpLG8obltlXSxyLHQpLG8obltyXSx0LGUpfSxhLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxhLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7bjxpO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0sYS5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxhLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzthKz0yKWUucHVzaChbaVthXSxpW2ErMV1dKTtyZXR1cm4gZX0sYS5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxfV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZHVwIiksaT10KCJyb2J1c3QtbGluZWFyLXNvbHZlIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsaT0wO2k8bjsrK2kpcis9dFtpXSplW2ldO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107dFswXS5sZW5ndGg7dmFyIHI9bihbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSxvPW4oW3QubGVuZ3RoKzFdLDEpO3JbZV1bZV09MDtmb3IodmFyIHM9MDtzPGU7KytzKXtmb3IodmFyIGw9MDtsPD1zOysrbClyW2xdW3NdPXJbc11bbF09MiphKHRbc10sdFtsXSk7b1tzXT1hKHRbc10sdFtzXSl9dmFyIGM9aShyLG8pLHU9MCxmPWNbZSsxXTtmb3Iocz0wO3M8Zi5sZW5ndGg7KytzKXUrPWZbc107dmFyIGg9bmV3IEFycmF5KGUpO2ZvcihzPTA7czxlOysrcyl7Zj1jW3NdO3ZhciBwPTA7Zm9yKGw9MDtsPGYubGVuZ3RoOysrbClwKz1mW2xdO2hbc109cC91fXJldHVybiBofWZ1bmN0aW9uIHModCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT10WzBdLmxlbmd0aCxyPW4oW2VdKSxpPW8odCksYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgcz0wO3M8ZTsrK3MpcltzXSs9dFthXVtzXSppW2FdO3JldHVybiByfXMuYmFyeWNlbmV0cmljPW8sZS5leHBvcnRzPXN9LHtkdXA6NjUsInJvYnVzdC1saW5lYXItc29sdmUiOjI4M31dLDQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQpLHI9MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfTt2YXIgbj10KCJjaXJjdW1jZW50ZXIiKX0se2NpcmN1bWNlbnRlcjo0OH1dLDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG47aWYocil7bj1lO2Zvcih2YXIgaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtpW2FdPVtvWzBdLG9bMV0sclthXV19ZT1pfXZhciBzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQsW10scCh0KSk7cmV0dXJuIHYoZSxuLHIpLCEhbn0odCxlLCEhcik7Zm9yKDt5KHQsZSwhIXIpOylzPSEwO2lmKHImJnMpe24ubGVuZ3RoPTAsci5sZW5ndGg9MDtmb3IoYT0wO2E8ZS5sZW5ndGg7KythKXtvPWVbYV07bi5wdXNoKFtvWzBdLG9bMV1dKSxyLnB1c2gob1syXSl9fXJldHVybiBzfTt2YXIgbj10KCJ1bmlvbi1maW5kIiksaT10KCJib3gtaW50ZXJzZWN0IiksYT10KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSxvPXQoImJpZy1yYXQiKSxzPXQoImJpZy1yYXQvY21wIiksbD10KCJiaWctcmF0L3RvLWZsb2F0IiksYz10KCJyYXQtdmVjIiksdT10KCJuZXh0YWZ0ZXIiKSxmPXQoIi4vbGliL3JhdC1zZWctaW50ZXJzZWN0Iik7ZnVuY3Rpb24gaCh0KXt2YXIgZT1sKHQpO3JldHVyblt1KGUsLTEvMCksdShlLDEvMCldfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W3UoblswXSwtMS8wKSx1KG5bMV0sLTEvMCksdShuWzBdLDEvMCksdShuWzFdLDEvMCldfXJldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPW5ldyBuKGEpLHM9W10sbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgYz1lW2xdLGY9aChjWzBdKSxwPWgoY1sxXSk7cy5wdXNoKFt1KGZbMF0sLTEvMCksdShwWzBdLC0xLzApLHUoZlsxXSwxLzApLHUocFsxXSwxLzApXSl9aShzLChmdW5jdGlvbih0LGUpe28ubGluayh0LGUpfSkpO3ZhciBkPSEwLG09bmV3IEFycmF5KGEpO2ZvcihsPTA7bDxhOysrbCl7KHY9by5maW5kKGwpKSE9PWwmJihkPSExLHRbdl09W01hdGgubWluKHRbbF1bMF0sdFt2XVswXSksTWF0aC5taW4odFtsXVsxXSx0W3ZdWzFdKV0pfWlmKGQpcmV0dXJuIG51bGw7dmFyIGc9MDtmb3IobD0wO2w8YTsrK2wpe3ZhciB2Oyh2PW8uZmluZChsKSk9PT1sPyhtW2xdPWcsdFtnKytdPXRbbF0pOm1bbF09LTF9dC5sZW5ndGg9Zztmb3IobD0wO2w8YTsrK2wpbVtsXTwwJiYobVtsXT1tW28uZmluZChsKV0pO3JldHVybiBtfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPXRbMF0tZVswXXx8dFsxXS1lWzFdO3JldHVybiByfHwodFsyXTxlWzJdPy0xOnRbMl0+ZVsyXT8xOjApfWZ1bmN0aW9uIHYodCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9ZVsobz10W25dKVswXV0sYT1lW29bMV1dO29bMF09TWF0aC5taW4oaSxhKSxvWzFdPU1hdGgubWF4KGksYSl9ZWxzZSBmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbztpPShvPXRbbl0pWzBdLGE9b1sxXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfXI/dC5zb3J0KGcpOnQuc29ydChtKTt2YXIgcz0xO2ZvcihuPTE7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbi0xXSxjPXRbbl07KGNbMF0hPT1sWzBdfHxjWzFdIT09bFsxXXx8ciYmY1syXSE9PWxbMl0pJiYodFtzKytdPWMpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dLGE9dFtpWzBdXSxvPXRbaVsxXV07cltuXT1bdShNYXRoLm1pbihhWzBdLG9bMF0pLC0xLzApLHUoTWF0aC5taW4oYVsxXSxvWzFdKSwtMS8wKSx1KE1hdGgubWF4KGFbMF0sb1swXSksMS8wKSx1KE1hdGgubWF4KGFbMV0sb1sxXSksMS8wKV19cmV0dXJuIHJ9KHQsZSksaD1mdW5jdGlvbih0LGUscil7dmFyIG49W107cmV0dXJuIGkociwoZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLHM9ZVtpXTtpZihvWzBdIT09c1swXSYmb1swXSE9PXNbMV0mJm9bMV0hPT1zWzBdJiZvWzFdIT09c1sxXSl7dmFyIGw9dFtvWzBdXSxjPXRbb1sxXV0sdT10W3NbMF1dLGY9dFtzWzFdXTthKGwsYyx1LGYpJiZuLnB1c2goW3IsaV0pfX0pKSxufSh0LGUsbiksbT1wKHQpLGc9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89W107cmV0dXJuIGkocixuLChmdW5jdGlvbihyLG4pe3ZhciBpPWVbcl07aWYoaVswXSE9PW4mJmlbMV0hPT1uKXt2YXIgcz10W25dLGw9dFtpWzBdXSxjPXRbaVsxXV07YShsLGMscyxzKSYmby5wdXNoKFtyLG5dKX19KSksb30odCxlLG4sbSkseT1kKHQsZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSx1LGg9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltvKHRbMF0pLG8odFsxXSldfSkpO2ZvcihhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBwPXJbYV07dT1wWzBdO3ZhciBkPXBbMV0sbT1lW3VdLGc9ZVtkXSx2PWYoYyh0W21bMF1dKSxjKHRbbVsxXV0pLGModFtnWzBdXSksYyh0W2dbMV1dKSk7aWYodil7dmFyIHk9dC5sZW5ndGg7dC5wdXNoKFtsKHZbMF0pLGwodlsxXSldKSxoLnB1c2godiksbi5wdXNoKFt1LHldLFtkLHldKX19Zm9yKG4uc29ydCgoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPWhbdFsxXV0sbj1oW2VbMV1dO3JldHVybiBzKHJbMF0sblswXSl8fHMoclsxXSxuWzFdKX0pKSxhPW4ubGVuZ3RoLTE7YT49MDstLWEpe3ZhciB4PWVbdT0oUz1uW2FdKVswXV0sYj14WzBdLF89eFsxXSx3PXRbYl0sVD10W19dO2lmKCh3WzBdLVRbMF18fHdbMV0tVFsxXSk8MCl7dmFyIGs9YjtiPV8sXz1rfXhbMF09Yjt2YXIgQSxNPXhbMV09U1sxXTtmb3IoaSYmKEE9eFsyXSk7YT4wJiZuW2EtMV1bMF09PT11Oyl7dmFyIFMsRT0oUz1uWy0tYV0pWzFdO2k/ZS5wdXNoKFtNLEUsQV0pOmUucHVzaChbTSxFXSksTT1FfWk/ZS5wdXNoKFtNLF8sQV0pOmUucHVzaChbTSxfXSl9cmV0dXJuIGh9KHQsZSxoLGcscikpO3JldHVybiB2KGUseSxyKSwhIXl8fChoLmxlbmd0aD4wfHxnLmxlbmd0aD4wKX19LHsiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3QiOjUxLCJiaWctcmF0IjoxOCwiYmlnLXJhdC9jbXAiOjE2LCJiaWctcmF0L3RvLWZsb2F0IjozMCwiYm94LWludGVyc2VjdCI6MzUsbmV4dGFmdGVyOjI2MCwicmF0LXZlYyI6MjczLCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjI4NywidW5pb24tZmluZCI6MzA5fV0sNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXMoZSx0KSxmPXMobixyKSxoPXUoYSxmKTtpZigwPT09byhoKSlyZXR1cm4gbnVsbDt2YXIgcD1zKHQsciksZD11KGYscCksbT1pKGQsaCksZz1jKGEsbSk7cmV0dXJuIGwodCxnKX07dmFyIG49dCgiYmlnLXJhdC9tdWwiKSxpPXQoImJpZy1yYXQvZGl2IiksYT10KCJiaWctcmF0L3N1YiIpLG89dCgiYmlnLXJhdC9zaWduIikscz10KCJyYXQtdmVjL3N1YiIpLGw9dCgicmF0LXZlYy9hZGQiKSxjPXQoInJhdC12ZWMvbXVscyIpO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gYShuKHRbMF0sZVsxXSksbih0WzFdLGVbMF0pKX19LHsiYmlnLXJhdC9kaXYiOjE3LCJiaWctcmF0L211bCI6MjcsImJpZy1yYXQvc2lnbiI6MjgsImJpZy1yYXQvc3ViIjoyOSwicmF0LXZlYy9hZGQiOjI3MiwicmF0LXZlYy9tdWxzIjoyNzQsInJhdC12ZWMvc3ViIjoyNzV9XSw1MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17amV0Olt7aW5kZXg6MCxyZ2I6WzAsMCwxMzFdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsNjAsMTcwXX0se2luZGV4Oi4zNzUscmdiOls1LDI1NSwyNTVdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NSwyNTUsMF19LHtpbmRleDouODc1LHJnYjpbMjUwLDAsMF19LHtpbmRleDoxLHJnYjpbMTI4LDAsMF19XSxoc3Y6W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDouMTY5LHJnYjpbMjUzLDI1NSwyXX0se2luZGV4Oi4xNzMscmdiOlsyNDcsMjU1LDJdfSx7aW5kZXg6LjMzNyxyZ2I6WzAsMjUyLDRdfSx7aW5kZXg6LjM0MSxyZ2I6WzAsMjUyLDEwXX0se2luZGV4Oi41MDYscmdiOlsxLDI0OSwyNTVdfSx7aW5kZXg6LjY3MSxyZ2I6WzIsMCwyNTNdfSx7aW5kZXg6LjY3NSxyZ2I6WzgsMCwyNTNdfSx7aW5kZXg6LjgzOSxyZ2I6WzI1NSwwLDI1MV19LHtpbmRleDouODQzLHJnYjpbMjU1LDAsMjQ1XX0se2luZGV4OjEscmdiOlsyNTUsMCw2XX1dLGhvdDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMyxyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjEwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sInJhaW5ib3ctc29mdCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSwiZnJlZXN1cmZhY2UtYmx1ZSI6W3tpbmRleDowLHJnYjpbMzAsNCwxMTBdfSx7aW5kZXg6LjEzLHJnYjpbNDcsMTQsMTc2XX0se2luZGV4Oi4yNSxyZ2I6WzQxLDQ1LDIzNl19LHtpbmRleDouMzgscmdiOlsyNSw5OSwyMTJdfSx7aW5kZXg6LjUscmdiOls2OCwxMzEsMjAwXX0se2luZGV4Oi42MyxyZ2I6WzExNCwxNTYsMTk3XX0se2luZGV4Oi43NSxyZ2I6WzE1NywxODEsMjAzXX0se2luZGV4Oi44OCxyZ2I6WzIwMCwyMDgsMjE2XX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSwiZnJlZXN1cmZhY2UtcmVkIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLCJ2ZWxvY2l0eS1ibHVlIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLCJ2ZWxvY2l0eS1ncmVlbiI6W3tpbmRleDowLHJnYjpbMjMsMzUsMTldfSx7aW5kZXg6LjEzLHJnYjpbMjQsNjQsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTEsOTUsNDVdfSx7aW5kZXg6LjM4LHJnYjpbMzksMTIzLDM1XX0se2luZGV4Oi41LHJnYjpbOTUsMTQ2LDEyXX0se2luZGV4Oi42MyxyZ2I6WzE1MiwxNjUsMThdfSx7aW5kZXg6Ljc1LHJnYjpbMjAxLDE4Niw2OV19LHtpbmRleDouODgscmdiOlsyMzMsMjE2LDEzN119LHtpbmRleDoxLHJnYjpbMjU1LDI1MywyMDVdfV0sY3ViZWhlbGl4Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4wNyxyZ2I6WzIyLDUsNTldfSx7aW5kZXg6LjEzLHJnYjpbNjAsNCwxMDVdfSx7aW5kZXg6LjIscmdiOlsxMDksMSwxMzVdfSx7aW5kZXg6LjI3LHJnYjpbMTYxLDAsMTQ3XX0se2luZGV4Oi4zMyxyZ2I6WzIxMCwyLDE0Ml19LHtpbmRleDouNCxyZ2I6WzI1MSwxMSwxMjNdfSx7aW5kZXg6LjQ3LHJnYjpbMjU1LDI5LDk3XX0se2luZGV4Oi41MyxyZ2I6WzI1NSw1NCw2OV19LHtpbmRleDouNixyZ2I6WzI1NSw4NSw0Nl19LHtpbmRleDouNjcscmdiOlsyNTUsMTIwLDM0XX0se2luZGV4Oi43MyxyZ2I6WzI1NSwxNTcsMzddfSx7aW5kZXg6LjgscmdiOlsyNDEsMTkxLDU3XX0se2luZGV4Oi44NyxyZ2I6WzIyNCwyMjAsOTNdfSx7aW5kZXg6LjkzLHJnYjpbMjE4LDI0MSwxNDJdfSx7aW5kZXg6MSxyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29sb3JTY2FsZSIpLGk9dCgibGVycCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuW3RbMF0vMjU1LHRbMV0vMjU1LHRbMl0vMjU1LHRbM11dfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLHI9IiMiLG49MDtuPDM7KytuKXIrPSgiMDAiKyhlPShlPXRbbl0pLnRvU3RyaW5nKDE2KSkpLnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4icmdiYSgiK3Quam9pbigiLCIpKyIpIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdSxmLGgscCxkLG07dHx8KHQ9e30pO3A9KHQubnNoYWRlc3x8NzIpLTEsaD10LmZvcm1hdHx8ImhleCIsKGY9dC5jb2xvcm1hcCl8fChmPSJqZXQiKTtpZigic3RyaW5nIj09dHlwZW9mIGYpe2lmKGY9Zi50b0xvd2VyQ2FzZSgpLCFuW2ZdKXRocm93IEVycm9yKGYrIiBub3QgYSBzdXBwb3J0ZWQgY29sb3JzY2FsZSIpO3U9bltmXX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGYpKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb24iLGYpO3U9Zi5zbGljZSgpfWlmKHUubGVuZ3RoPnArMSl0aHJvdyBuZXcgRXJyb3IoZisiIG1hcCByZXF1aXJlcyBuc2hhZGVzIHRvIGJlIGF0IGxlYXN0IHNpemUgIit1Lmxlbmd0aCk7ZD1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTp0LmFscGhhLnNsaWNlKCk6Im51bWJlciI9PXR5cGVvZiB0LmFscGhhP1t0LmFscGhhLHQuYWxwaGFdOlsxLDFdO2U9dS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSksZFswXT1NYXRoLm1pbihNYXRoLm1heChkWzBdLDApLDEpLGRbMV09TWF0aC5taW4oTWF0aC5tYXgoZFsxXSwwKSwxKTt2YXIgZz11Lm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj11W2VdLmluZGV4LG49dVtlXS5yZ2Iuc2xpY2UoKTtyZXR1cm4gND09PW4ubGVuZ3RoJiZuWzNdPj0wJiZuWzNdPD0xfHwoblszXT1kWzBdKyhkWzFdLWRbMF0pKnIpLG59KSksdj1bXTtmb3IobT0wO208ZS5sZW5ndGgtMTsrK20pe2M9ZVttKzFdLWVbbV0scj1nW21dLGw9Z1ttKzFdO2Zvcih2YXIgeT0wO3k8Yzt5Kyspe3ZhciB4PXkvYzt2LnB1c2goW01hdGgucm91bmQoaShyWzBdLGxbMF0seCkpLE1hdGgucm91bmQoaShyWzFdLGxbMV0seCkpLE1hdGgucm91bmQoaShyWzJdLGxbMl0seCkpLGkoclszXSxsWzNdLHgpXSl9fXYucHVzaCh1W3UubGVuZ3RoLTFdLnJnYi5jb25jYXQoZFsxXSkpLCJoZXgiPT09aD92PXYubWFwKG8pOiJyZ2JhU3RyaW5nIj09PWg/dj12Lm1hcChzKToiZmxvYXQiPT09aCYmKHY9di5tYXAoYSkpO3JldHVybiB2fX0seyIuL2NvbG9yU2NhbGUiOjUyLGxlcnA6MjQwfV0sNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4oZSxyLGEpO2lmKDA9PT1vKXt2YXIgcz1pKG4odCxlLHIpKSxjPWkobih0LGUsYSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksZj1sKHQsZSxhKTtyZXR1cm4gdT09PWY/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MHx8bCh0LGUsYSk/LTE6MTowPT09cz9jPjB8fGwodCxlLHIpPzE6LTE6aShjLXMpfXZhciBoPW4odCxlLHIpO3JldHVybiBoPjA/bz4wJiZuKHQsZSxhKT4wPzE6LTE6aDwwP28+MHx8bih0LGUsYSk+MD8xOi0xOm4odCxlLGEpPjB8fGwodCxlLHIpPzE6LTF9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGk9dCgic2lnbnVtIiksYT10KCJ0d28tc3VtIiksbz10KCJyb2J1c3QtcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBuPWEodFswXSwtZVswXSksaT1hKHRbMV0sLWVbMV0pLGw9YShyWzBdLC1lWzBdKSxjPWEoclsxXSwtZVsxXSksdT1zKG8obixsKSxvKGksYykpO3JldHVybiB1W3UubGVuZ3RoLTFdPj0wfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjI4NCwicm9idXN0LXByb2R1Y3QiOjI4NSwicm9idXN0LXN1bSI6Mjg5LHNpZ251bTo1NSwidHdvLXN1bSI6MzA3fV0sNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSw1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLGE9dC5sZW5ndGgtZS5sZW5ndGg7aWYoYSlyZXR1cm4gYTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4gdFswXSt0WzFdLWVbMF0tZVsxXXx8bih0WzBdLHRbMV0pLW4oZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGE9byt0WzJdLShzK2VbMl0pKXJldHVybiBhO3ZhciBsPW4odFswXSx0WzFdKSxjPW4oZVswXSxlWzFdKTtyZXR1cm4gbihsLHRbMl0pLW4oYyxlWzJdKXx8bihsK3RbMl0sbyktbihjK2VbMl0scyk7Y2FzZSA0OnZhciB1PXRbMF0sZj10WzFdLGg9dFsyXSxwPXRbM10sZD1lWzBdLG09ZVsxXSxnPWVbMl0sdj1lWzNdO3JldHVybiB1K2YraCtwLShkK20rZyt2KXx8bih1LGYsaCxwKS1uKGQsbSxnLHYsZCl8fG4odStmLHUraCx1K3AsZitoLGYrcCxoK3ApLW4oZCttLGQrZyxkK3YsbStnLG0rdixnK3YpfHxuKHUrZitoLHUrZitwLHUraCtwLGYraCtwKS1uKGQrbStnLGQrbSt2LGQrZyt2LG0rZyt2KTtkZWZhdWx0OmZvcih2YXIgeT10LnNsaWNlKCkuc29ydChpKSx4PWUuc2xpY2UoKS5zb3J0KGkpLGI9MDtiPHI7KytiKWlmKGE9eVtiXS14W2JdKXJldHVybiBhO3JldHVybiAwfX07dmFyIG49TWF0aC5taW47ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LWV9fSx7fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8aSh0KS1pKGUpfX0seyJjZWxsLW9yaWVudGF0aW9uIjo0NywiY29tcGFyZS1jZWxsIjo1Nn1dLDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NoMWQiKSxpPXQoIi4vbGliL2NoMmQiKSxhPXQoIi4vbGliL2NobmQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107aWYoMT09PXIpcmV0dXJuIG4odCk7aWYoMj09PXIpcmV0dXJuIGkodCk7cmV0dXJuIGEodCxyKX19LHsiLi9saWIvY2gxZCI6NTksIi4vbGliL2NoMmQiOjYwLCIuL2xpYi9jaG5kIjo2MX1dLDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfX0se31dLDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpLHI9ZS5sZW5ndGg7aWYocjw9MilyZXR1cm5bXTtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9ZVtyLTFdLG89MDtvPHI7KytvKXt2YXIgcz1lW29dO2lbb109W2Esc10sYT1zfXJldHVybiBpfTt2YXIgbj10KCJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCIpfSx7Im1vbm90b25lLWNvbnZleC1odWxsLTJkIjoyNDZ9XSw2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIG4odCwhMCl9Y2F0Y2gobyl7dmFyIHI9aSh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO3ZhciBhPWUubGVuZ3RoO2ZvcihpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn0odCxyKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTA7aTxyOysraSlmb3IodmFyIGE9dFtpXSxvPTA7bzxhLmxlbmd0aDsrK28pe3ZhciBzPWFbb107aWYoczxuKWFbb109ZVtzXTtlbHNle3MtPW47Zm9yKHZhciBsPTA7bDxuOysrbClzPj1lW2xdJiYocys9MSk7YVtvXT1zfX1yZXR1cm4gdH0obihhLCEwKSxyKX19O3ZhciBuPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIiksaT10KCJhZmZpbmUtaHVsbCIpfSx7ImFmZmluZS1odWxsIjoxMCwiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiOjIzM31dLDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aS0xLHM9aSppLGw9bypvLGM9KDErMippKSpsLHU9aSpsLGY9cyooMy0yKmkpLGg9cypvO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHA9dC5sZW5ndGgtMTtwPj0wOy0tcClhW3BdPWMqdFtwXSt1KmVbcF0rZipyW3BdK2gqbltwXTtyZXR1cm4gYX1yZXR1cm4gYyp0K3UqZStmKnIraCpufSxlLmV4cG9ydHMuZGVyaXZhdGl2ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NippKmktNippLHM9MyppKmktNCppKzEsbD0tNippKmkrNippLGM9MyppKmktMippO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSlhW3VdPW8qdFt1XStzKmVbdV0rbCpyW3VdK2Mqblt1XTtyZXR1cm4gYX1yZXR1cm4gbyp0K3MqZStsKnJbdV0rYypufX0se31dLDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIiksaT10KCJ1bmlxIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMucG9pbnQ9dCx0aGlzLmluZGV4PWV9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10LnBvaW50LG49ZS5wb2ludCxpPXIubGVuZ3RoLGE9MDthPGk7KythKXt2YXIgbz1uW2FdLXJbYV07aWYobylyZXR1cm4gb31yZXR1cm4gMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTt2YXIgcz10WzBdLmxlbmd0aDtpZihzPDEpcmV0dXJuW107aWYoMT09PXMpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZigxPT09dClyZXR1cm4gcj9bWy0xLDBdXTpbXTt2YXIgbj1lLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm5bdFswXSxlXX0pKTtuLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pKTtmb3IodmFyIGk9bmV3IEFycmF5KHQtMSksYT0xO2E8dDsrK2Epe3ZhciBvPW5bYS0xXSxzPW5bYV07aVthLTFdPVtvWzFdLHNbMV1dfXImJmkucHVzaChbLTEsaVswXVsxXV0sW2lbdC0xXVsxXSwtMV0pO3JldHVybiBpfShyLHQsZSk7Zm9yKHZhciBsPW5ldyBBcnJheShyKSxjPTEsdT0wO3U8cjsrK3Upe2Zvcih2YXIgZj10W3VdLGg9bmV3IEFycmF5KHMrMSkscD0wLGQ9MDtkPHM7KytkKXt2YXIgbT1mW2RdO2hbZF09bSxwKz1tKm19aFtzXT1wLGxbdV09bmV3IGEoaCx1KSxjPU1hdGgubWF4KHAsYyl9aShsLG8pLHI9bC5sZW5ndGg7dmFyIGc9bmV3IEFycmF5KHIrcysxKSx2PW5ldyBBcnJheShyK3MrMSkseT0ocysxKSoocysxKSpjLHg9bmV3IEFycmF5KHMrMSk7Zm9yKHU9MDt1PD1zOysrdSl4W3VdPTA7eFtzXT15LGdbMF09eC5zbGljZSgpLHZbMF09LTE7Zm9yKHU9MDt1PD1zOysrdSl7KGg9eC5zbGljZSgpKVt1XT0xLGdbdSsxXT1oLHZbdSsxXT0tMX1mb3IodT0wO3U8cjsrK3Upe3ZhciBiPWxbdV07Z1t1K3MrMV09Yi5wb2ludCx2W3UrcysxXT1iLmluZGV4fXZhciBfPW4oZywhMSk7Xz1lP18uZmlsdGVyKChmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjw9czsrK3Ipe3ZhciBuPXZbdFtyXV07aWYobjwwJiYrK2U+PTIpcmV0dXJuITE7dFtyXT1ufXJldHVybiEwfSkpOl8uZmlsdGVyKChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPD1zOysrZSl7dmFyIHI9dlt0W2VdXTtpZihyPDApcmV0dXJuITE7dFtlXT1yfXJldHVybiEwfSkpO2lmKDEmcylmb3IodT0wO3U8Xy5sZW5ndGg7Kyt1KXtoPShiPV9bdV0pWzBdO2JbMF09YlsxXSxiWzFdPWh9cmV0dXJuIF99fSx7ImluY3JlbWVudGFsLWNvbnZleC1odWxsIjoyMzMsdW5pcTozMTB9XSw2NDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXt2YXIgcj0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheSl7dmFyIG49bmV3IEZsb2F0NjRBcnJheSgxKSxpPW5ldyBVaW50MzJBcnJheShuLmJ1ZmZlcik7aWYoblswXT0xLHI9ITAsMTA3MjY5MzI0OD09PWlbMV0pe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LFtpWzBdLGlbMV1dfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpWzBdPXQsaVsxXT1lLG5bMF19LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMF19LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMV19fWVsc2UgaWYoMTA3MjY5MzI0OD09PWlbMF0pe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LFtpWzFdLGlbMF1dfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpWzFdPXQsaVswXT1lLG5bMF19LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMV19LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMF19fWVsc2Ugcj0hMX1pZighcil7dmFyIGE9bmV3IHQoOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhLndyaXRlRG91YmxlTEUodCwwLCEwKSxbYS5yZWFkVUludDMyTEUoMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCldfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBhLndyaXRlVUludDMyTEUodCwwLCEwKSxhLndyaXRlVUludDMyTEUoZSw0LCEwKSxhLnJlYWREb3VibGVMRSgwLCEwKX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBhLndyaXRlRG91YmxlTEUodCwwLCEwKSxhLnJlYWRVSW50MzJMRSgwLCEwKX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBhLndyaXRlRG91YmxlTEUodCwwLCEwKSxhLnJlYWRVSW50MzJMRSg0LCEwKX19ZS5leHBvcnRzLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGUuZXhwb3J0cy5oaSh0KT4+PjMxfSxlLmV4cG9ydHMuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuKGUuZXhwb3J0cy5oaSh0KTw8MT4+PjIxKS0xMDIzfSxlLmV4cG9ydHMuZnJhY3Rpb249ZnVuY3Rpb24odCl7dmFyIHI9ZS5leHBvcnRzLmxvKHQpLG49ZS5leHBvcnRzLmhpKHQpLGk9MTA0ODU3NSZuO3JldHVybiAyMTQ2NDM1MDcyJm4mJihpKz0xPDwyMCksW3IsaV19LGUuZXhwb3J0cy5kZW5vcm1hbGl6ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuISgyMTQ2NDM1MDcyJmUuZXhwb3J0cy5oaSh0KSl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjN9XSw2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtzd2l0Y2godm9pZCAwPT09ZSYmKGU9MCksdHlwZW9mIHQpe2Nhc2UibnVtYmVyIjppZih0PjApcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfSgwfHQsZSk7YnJlYWs7Y2FzZSJvYmplY3QiOmlmKCJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTB8ZVtuXTtpZihpPD0wKXJldHVybltdO3ZhciBhLG89bmV3IEFycmF5KGkpO2lmKG49PT1lLmxlbmd0aC0xKWZvcihhPTA7YTxpOysrYSlvW2FdPXI7ZWxzZSBmb3IoYT0wO2E8aTsrK2Epb1thXT10KGUscixuKzEpO3JldHVybiBvfSh0LGUsMCl9cmV0dXJuW119fSx7fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDt2YXIgbz1uZXcgQXJyYXkoZSk7Zm9yKGk9MDtpPGU7KytpKW9baV09W107Zm9yKGk9MDtpPHI7KytpKXthPXRbaV07b1thWzBdXS5wdXNoKGFbMV0pLG9bYVsxXV0ucHVzaChhWzBdKX1mb3IodmFyIHM9MDtzPGU7KytzKW4ob1tzXSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpO3JldHVybiBvfTt2YXIgbj10KCJ1bmlxIil9LHt1bmlxOjMxMH1dLDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfX0se31dLDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG8oWzBdLFswXSwwKTtjYXNlIDE6cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P25ldyBvKG49bCh0KSxuLDApOm5ldyBvKHQsbCh0Lmxlbmd0aCksMCk7Y2FzZSAyOmlmKCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIG49bCh0Lmxlbmd0aCk7cmV0dXJuIG5ldyBvKHQsbiwrZSl9cj0wO2Nhc2UgMzppZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigic3RhdGUgYW5kIHZlbG9jaXR5IGxlbmd0aHMgbXVzdCBtYXRjaCIpO3JldHVybiBuZXcgbyh0LGUscil9fTt2YXIgbj10KCJjdWJpYy1oZXJtaXRlIiksaT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGEodCxlLHIpe3JldHVybiBNYXRoLm1pbihlLE1hdGgubWF4KHQscikpfWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMuZGltZW5zaW9uPXQubGVuZ3RoLHRoaXMuYm91bmRzPVtuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pLG5ldyBBcnJheSh0aGlzLmRpbWVuc2lvbildO2Zvcih2YXIgbj0wO248dGhpcy5kaW1lbnNpb247KytuKXRoaXMuYm91bmRzWzBdW25dPS0xLzAsdGhpcy5ib3VuZHNbMV1bbl09MS8wO3RoaXMuX3N0YXRlPXQuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdmVsb2NpdHk9ZS5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl90aW1lPVtyXSx0aGlzLl9zY3JhdGNoPVt0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpXX12YXIgcz1vLnByb3RvdHlwZTtmdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfXMuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9aS5ndCh0aGlzLl90aW1lLHQpLTE7ZTw9MHx8KHRoaXMuX3RpbWUuc3BsaWNlKDAsZSksdGhpcy5fc3RhdGUuc3BsaWNlKDAsZSp0aGlzLmRpbWVuc2lvbiksdGhpcy5fdmVsb2NpdHkuc3BsaWNlKDAsZSp0aGlzLmRpbWVuc2lvbikpfSxzLmN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxvPWkubGUoZSx0KSxzPXRoaXMuX3NjcmF0Y2hbMF0sbD10aGlzLl9zdGF0ZSxjPXRoaXMuX3ZlbG9jaXR5LHU9dGhpcy5kaW1lbnNpb24sZj10aGlzLmJvdW5kcztpZihvPDApZm9yKHZhciBoPXUtMSxwPTA7cDx1OysrcCwtLWgpc1twXT1sW2hdO2Vsc2UgaWYobz49ci0xKXtoPWwubGVuZ3RoLTE7dmFyIGQ9dC1lW3ItMV07Zm9yKHA9MDtwPHU7KytwLC0taClzW3BdPWxbaF0rZCpjW2hdfWVsc2V7aD11KihvKzEpLTE7dmFyIG09ZVtvXSxnPWVbbysxXS1tfHwxLHY9dGhpcy5fc2NyYXRjaFsxXSx5PXRoaXMuX3NjcmF0Y2hbMl0seD10aGlzLl9zY3JhdGNoWzNdLGI9dGhpcy5fc2NyYXRjaFs0XSxfPSEwO2ZvcihwPTA7cDx1OysrcCwtLWgpdltwXT1sW2hdLHhbcF09Y1toXSpnLHlbcF09bFtoK3VdLGJbcF09Y1toK3VdKmcsXz1fJiZ2W3BdPT09eVtwXSYmeFtwXT09PWJbcF0mJjA9PT14W3BdO2lmKF8pZm9yKHA9MDtwPHU7KytwKXNbcF09dltwXTtlbHNlIG4odix4LHksYiwodC1tKS9nLHMpfXZhciB3PWZbMF0sVD1mWzFdO2ZvcihwPTA7cDx1OysrcClzW3BdPWEod1twXSxUW3BdLHNbcF0pO3JldHVybiBzfSxzLmRjdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsYT1pLmxlKGUsdCksbz10aGlzLl9zY3JhdGNoWzBdLHM9dGhpcy5fc3RhdGUsbD10aGlzLl92ZWxvY2l0eSxjPXRoaXMuZGltZW5zaW9uO2lmKGE+PXItMSlmb3IodmFyIHU9cy5sZW5ndGgtMSxmPShlW3ItMV0sMCk7ZjxjOysrZiwtLXUpb1tmXT1sW3VdO2Vsc2V7dT1jKihhKzEpLTE7dmFyIGg9ZVthXSxwPWVbYSsxXS1ofHwxLGQ9dGhpcy5fc2NyYXRjaFsxXSxtPXRoaXMuX3NjcmF0Y2hbMl0sZz10aGlzLl9zY3JhdGNoWzNdLHY9dGhpcy5fc2NyYXRjaFs0XSx5PSEwO2ZvcihmPTA7ZjxjOysrZiwtLXUpZFtmXT1zW3VdLGdbZl09bFt1XSpwLG1bZl09c1t1K2NdLHZbZl09bFt1K2NdKnAseT15JiZkW2ZdPT09bVtmXSYmZ1tmXT09PXZbZl0mJjA9PT1nW2ZdO2lmKHkpZm9yKGY9MDtmPGM7KytmKW9bZl09MDtlbHNle24uZGVyaXZhdGl2ZShkLGcsbSx2LCh0LWgpL3Asbyk7Zm9yKGY9MDtmPGM7KytmKW9bZl0vPXB9fXJldHVybiBvfSxzLmxhc3RUPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGltZTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0scy5zdGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdmVsb2NpdHksZT10Lmxlbmd0aCxyPXRoaXMuZGltZW5zaW9uLTE7cj49MDstLXIpaWYodFstLWVdKXJldHVybiExO3JldHVybiEwfSxzLmp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdO3RoaXMuX3RpbWUucHVzaChlLHQpO2Zvcih2YXIgdT0wO3U8MjsrK3UpZm9yKHZhciBmPTA7ZjxyOysrZiluLnB1c2gobltvKytdKSxpLnB1c2goMCk7dGhpcy5fdGltZS5wdXNoKHQpO2ZvcihmPXI7Zj4wOy0tZiluLnB1c2goYShsW2YtMV0sY1tmLTFdLGFyZ3VtZW50c1tmXSkpLGkucHVzaCgwKX19LHMucHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXQtZSxsPXRoaXMuYm91bmRzLGM9bFswXSx1PWxbMV0sZj1zPjFlLTY/MS9zOjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yO2g+MDstLWgpe3ZhciBwPWEoY1toLTFdLHVbaC0xXSxhcmd1bWVudHNbaF0pO24ucHVzaChwKSxpLnB1c2goKHAtbltvKytdKSpmKX19fSxzLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpbWVuc2lvbjtpZighKHQ8dGhpcy5sYXN0VCgpfHxhcmd1bWVudHMubGVuZ3RoIT09ZSsxKSl7dmFyIHI9dGhpcy5fc3RhdGUsbj10aGlzLl92ZWxvY2l0eSxpPXRoaXMuYm91bmRzLG89aVswXSxzPWlbMV07dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgbD1lO2w+MDstLWwpci5wdXNoKGEob1tsLTFdLHNbbC0xXSxhcmd1bWVudHNbbF0pKSxuLnB1c2goMCl9fSxzLm1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PD1lfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZSxmPXU+MWUtNj8xL3U6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXI7aD4wOy0taCl7dmFyIHA9YXJndW1lbnRzW2hdO24ucHVzaChhKGxbaC0xXSxjW2gtMV0sbltvKytdK3ApKSxpLnB1c2gocCpmKX19fSxzLmlkbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpO2lmKCEodDxlKSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtcixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWU7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yLTE7Zj49MDstLWYpbi5wdXNoKGEobFtmXSxjW2ZdLG5bb10rdSppW29dKSksaS5wdXNoKDApLG8rPTF9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsImN1YmljLWhlcm1pdGUiOjYyfV0sNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh0fHxtLG51bGwpfTtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt0aGlzLl9jb2xvcj10LHRoaXMua2V5PWUsdGhpcy52YWx1ZT1yLHRoaXMubGVmdD1uLHRoaXMucmlnaHQ9aSx0aGlzLl9jb3VudD1hfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBuKHQuX2NvbG9yLHQua2V5LHQudmFsdWUsdC5sZWZ0LHQucmlnaHQsdC5fY291bnQpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gbmV3IG4odCxlLmtleSxlLnZhbHVlLGUubGVmdCxlLnJpZ2h0LGUuX2NvdW50KX1mdW5jdGlvbiBvKHQpe3QuX2NvdW50PTErKHQubGVmdD90LmxlZnQuX2NvdW50OjApKyh0LnJpZ2h0P3QucmlnaHQuX2NvdW50OjApfWZ1bmN0aW9uIHModCxlKXt0aGlzLl9jb21wYXJlPXQsdGhpcy5yb290PWV9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe3ZhciByO2lmKGUubGVmdCYmKHI9Yyh0LGUubGVmdCkpKXJldHVybiByO3JldHVybihyPXQoZS5rZXksZS52YWx1ZSkpfHwoZS5yaWdodD9jKHQsZS5yaWdodCk6dm9pZCAwKX1mdW5jdGlvbiB1KHQsZSxyLG4pe2lmKGUodCxuLmtleSk8PTApe3ZhciBpO2lmKG4ubGVmdClpZihpPXUodCxlLHIsbi5sZWZ0KSlyZXR1cm4gaTtpZihpPXIobi5rZXksbi52YWx1ZSkpcmV0dXJuIGl9aWYobi5yaWdodClyZXR1cm4gdSh0LGUscixuLnJpZ2h0KX1mdW5jdGlvbiBmKHQsZSxyLG4saSl7dmFyIGEsbz1yKHQsaS5rZXkpLHM9cihlLGkua2V5KTtpZihvPD0wKXtpZihpLmxlZnQmJihhPWYodCxlLHIsbixpLmxlZnQpKSlyZXR1cm4gYTtpZihzPjAmJihhPW4oaS5rZXksaS52YWx1ZSkpKXJldHVybiBhfWlmKHM+MCYmaS5yaWdodClyZXR1cm4gZih0LGUscixuLGkucmlnaHQpfWZ1bmN0aW9uIGgodCxlKXt0aGlzLnRyZWU9dCx0aGlzLl9zdGFjaz1lfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJrZXlzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt0LnB1c2goZSl9KSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwidmFsdWVzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt0LnB1c2gocil9KSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuX2NvdW50OjB9fSksbC5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5fY29tcGFyZSxpPXRoaXMucm9vdCxsPVtdLGM9W107aTspe3ZhciB1PXIodCxpLmtleSk7bC5wdXNoKGkpLGMucHVzaCh1KSxpPXU8PTA/aS5sZWZ0OmkucmlnaHR9bC5wdXNoKG5ldyBuKDAsdCxlLG51bGwsbnVsbCwxKSk7Zm9yKHZhciBmPWwubGVuZ3RoLTI7Zj49MDstLWYpe2k9bFtmXTtjW2ZdPD0wP2xbZl09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxsW2YrMV0saS5yaWdodCxpLl9jb3VudCsxKTpsW2ZdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LGxbZisxXSxpLl9jb3VudCsxKX1mb3IoZj1sLmxlbmd0aC0xO2Y+MTstLWYpe3ZhciBoPWxbZi0xXTtpPWxbZl07aWYoMT09PWguX2NvbG9yfHwxPT09aS5fY29sb3IpYnJlYWs7dmFyIHA9bFtmLTJdO2lmKHAubGVmdD09PWgpaWYoaC5sZWZ0PT09aSl7aWYoIShkPXAucmlnaHQpfHwwIT09ZC5fY29sb3Ipe2lmKHAuX2NvbG9yPTAscC5sZWZ0PWgucmlnaHQsaC5fY29sb3I9MSxoLnJpZ2h0PXAsbFtmLTJdPWgsbFtmLTFdPWksbyhwKSxvKGgpLGY+PTMpKG09bFtmLTNdKS5sZWZ0PT09cD9tLmxlZnQ9aDptLnJpZ2h0PWg7YnJlYWt9aC5fY29sb3I9MSxwLnJpZ2h0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9ZWxzZXtpZighKGQ9cC5yaWdodCl8fDAhPT1kLl9jb2xvcil7aWYoaC5yaWdodD1pLmxlZnQscC5fY29sb3I9MCxwLmxlZnQ9aS5yaWdodCxpLl9jb2xvcj0xLGkubGVmdD1oLGkucmlnaHQ9cCxsW2YtMl09aSxsW2YtMV09aCxvKHApLG8oaCksbyhpKSxmPj0zKShtPWxbZi0zXSkubGVmdD09PXA/bS5sZWZ0PWk6bS5yaWdodD1pO2JyZWFrfWguX2NvbG9yPTEscC5yaWdodD1hKDEsZCkscC5fY29sb3I9MCxmLT0xfWVsc2UgaWYoaC5yaWdodD09PWkpe2lmKCEoZD1wLmxlZnQpfHwwIT09ZC5fY29sb3Ipe2lmKHAuX2NvbG9yPTAscC5yaWdodD1oLmxlZnQsaC5fY29sb3I9MSxoLmxlZnQ9cCxsW2YtMl09aCxsW2YtMV09aSxvKHApLG8oaCksZj49MykobT1sW2YtM10pLnJpZ2h0PT09cD9tLnJpZ2h0PWg6bS5sZWZ0PWg7YnJlYWt9aC5fY29sb3I9MSxwLmxlZnQ9YSgxLGQpLHAuX2NvbG9yPTAsZi09MX1lbHNle3ZhciBkO2lmKCEoZD1wLmxlZnQpfHwwIT09ZC5fY29sb3Ipe3ZhciBtO2lmKGgubGVmdD1pLnJpZ2h0LHAuX2NvbG9yPTAscC5yaWdodD1pLmxlZnQsaS5fY29sb3I9MSxpLnJpZ2h0PWgsaS5sZWZ0PXAsbFtmLTJdPWksbFtmLTFdPWgsbyhwKSxvKGgpLG8oaSksZj49MykobT1sW2YtM10pLnJpZ2h0PT09cD9tLnJpZ2h0PWk6bS5sZWZ0PWk7YnJlYWt9aC5fY29sb3I9MSxwLmxlZnQ9YSgxLGQpLHAuX2NvbG9yPTAsZi09MX19cmV0dXJuIGxbMF0uX2NvbG9yPTEsbmV3IHMocixsWzBdKX0sbC5mb3JFYWNoPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnJvb3Qpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gYyh0LHRoaXMucm9vdCk7Y2FzZSAyOnJldHVybiB1KGUsdGhpcy5fY29tcGFyZSx0LHRoaXMucm9vdCk7Y2FzZSAzOmlmKHRoaXMuX2NvbXBhcmUoZSxyKT49MClyZXR1cm47cmV0dXJuIGYoZSxyLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImJlZ2luIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5yb290O2U7KXQucHVzaChlKSxlPWUubGVmdDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiZW5kIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5yb290O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7cmV0dXJuIG5ldyBoKHRoaXMsdCl9fSksbC5hdD1mdW5jdGlvbih0KXtpZih0PDApcmV0dXJuIG5ldyBoKHRoaXMsW10pO2Zvcih2YXIgZT10aGlzLnJvb3Qscj1bXTs7KXtpZihyLnB1c2goZSksZS5sZWZ0KXtpZih0PGUubGVmdC5fY291bnQpe2U9ZS5sZWZ0O2NvbnRpbnVlfXQtPWUubGVmdC5fY291bnR9aWYoIXQpcmV0dXJuIG5ldyBoKHRoaXMscik7aWYodC09MSwhZS5yaWdodClicmVhaztpZih0Pj1lLnJpZ2h0Ll9jb3VudClicmVhaztlPWUucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSxsLmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPD0wJiYoaT1uLmxlbmd0aCkscj1hPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LGwuZ3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE8MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LGwubHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE+MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPj0wJiYoaT1uLmxlbmd0aCkscj1hPDA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sbC5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W107cjspe3ZhciBpPWUodCxyLmtleSk7aWYobi5wdXNoKHIpLDA9PT1pKXJldHVybiBuZXcgaCh0aGlzLG4pO3I9aTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbmV3IGgodGhpcyxbXSl9LGwucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZCh0KTtyZXR1cm4gZT9lLnJlbW92ZSgpOnRoaXN9LGwuZ2V0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290O3I7KXt2YXIgbj1lKHQsci5rZXkpO2lmKDA9PT1uKXJldHVybiByLnZhbHVlO3I9bjw9MD9yLmxlZnQ6ci5yaWdodH19O3ZhciBwPWgucHJvdG90eXBlO2Z1bmN0aW9uIGQodCxlKXt0LmtleT1lLmtleSx0LnZhbHVlPWUudmFsdWUsdC5sZWZ0PWUubGVmdCx0LnJpZ2h0PWUucmlnaHQsdC5fY29sb3I9ZS5fY29sb3IsdC5fY291bnQ9ZS5fY291bnR9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1PYmplY3QuZGVmaW5lUHJvcGVydHkocCwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjA/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOm51bGx9LGVudW1lcmFibGU6ITB9KSxwLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoKHRoaXMudHJlZSx0aGlzLl9zdGFjay5zbGljZSgpKX0scC5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMudHJlZTt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9dFt0Lmxlbmd0aC0xXTtlW2UubGVuZ3RoLTFdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpO2Zvcih2YXIgbD10Lmxlbmd0aC0yO2w+PTA7LS1sKXsocj10W2xdKS5sZWZ0PT09dFtsKzFdP2VbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxlW2wrMV0sci5yaWdodCxyLl9jb3VudCk6ZVtsXT1uZXcgbihyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW2wrMV0sci5fY291bnQpfWlmKChyPWVbZS5sZW5ndGgtMV0pLmxlZnQmJnIucmlnaHQpe3ZhciBjPWUubGVuZ3RoO2ZvcihyPXIubGVmdDtyLnJpZ2h0OyllLnB1c2gocikscj1yLnJpZ2h0O3ZhciB1PWVbYy0xXTtlLnB1c2gobmV3IG4oci5fY29sb3IsdS5rZXksdS52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCkpLGVbYy0xXS5rZXk9ci5rZXksZVtjLTFdLnZhbHVlPXIudmFsdWU7Zm9yKGw9ZS5sZW5ndGgtMjtsPj1jOy0tbClyPWVbbF0sZVtsXT1uZXcgbihyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW2wrMV0sci5fY291bnQpO2VbYy0xXS5sZWZ0PWVbY119aWYoMD09PShyPWVbZS5sZW5ndGgtMV0pLl9jb2xvcil7dmFyIGY9ZVtlLmxlbmd0aC0yXTtmLmxlZnQ9PT1yP2YubGVmdD1udWxsOmYucmlnaHQ9PT1yJiYoZi5yaWdodD1udWxsKSxlLnBvcCgpO2ZvcihsPTA7bDxlLmxlbmd0aDsrK2wpZVtsXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKHIubGVmdHx8ci5yaWdodCl7ci5sZWZ0P2QocixyLmxlZnQpOnIucmlnaHQmJmQocixyLnJpZ2h0KSxyLl9jb2xvcj0xO2ZvcihsPTA7bDxlLmxlbmd0aC0xOysrbCllW2xdLl9jb3VudC0tO3JldHVybiBuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoMT09PWUubGVuZ3RoKXJldHVybiBuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsbnVsbCk7Zm9yKGw9MDtsPGUubGVuZ3RoOysrbCllW2xdLl9jb3VudC0tO3ZhciBoPWVbZS5sZW5ndGgtMl07cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4scyxsPXQubGVuZ3RoLTE7bD49MDstLWwpe2lmKGU9dFtsXSwwPT09bClyZXR1cm4gdm9pZChlLl9jb2xvcj0xKTtpZigocj10W2wtMV0pLmxlZnQ9PT1lKXtpZigobj1yLnJpZ2h0KS5yaWdodCYmMD09PW4ucmlnaHQuX2NvbG9yKXtpZihzPShuPXIucmlnaHQ9aShuKSkucmlnaHQ9aShuLnJpZ2h0KSxyLnJpZ2h0PW4ubGVmdCxuLmxlZnQ9cixuLnJpZ2h0PXMsbi5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9MSxyLl9jb2xvcj0xLHMuX2NvbG9yPTEsbyhyKSxvKG4pLGw+MSkoYz10W2wtMl0pLmxlZnQ9PT1yP2MubGVmdD1uOmMucmlnaHQ9bjtyZXR1cm4gdm9pZCh0W2wtMV09bil9aWYobi5sZWZ0JiYwPT09bi5sZWZ0Ll9jb2xvcil7aWYocz0obj1yLnJpZ2h0PWkobikpLmxlZnQ9aShuLmxlZnQpLHIucmlnaHQ9cy5sZWZ0LG4ubGVmdD1zLnJpZ2h0LHMubGVmdD1yLHMucmlnaHQ9bixzLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj0xLG4uX2NvbG9yPTEsZS5fY29sb3I9MSxvKHIpLG8obiksbyhzKSxsPjEpKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9czpjLnJpZ2h0PXM7cmV0dXJuIHZvaWQodFtsLTFdPXMpfWlmKDE9PT1uLl9jb2xvcil7aWYoMD09PXIuX2NvbG9yKXJldHVybiByLl9jb2xvcj0xLHZvaWQoci5yaWdodD1hKDAsbikpO3IucmlnaHQ9YSgwLG4pO2NvbnRpbnVlfW49aShuKSxyLnJpZ2h0PW4ubGVmdCxuLmxlZnQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj0wLG8ociksbyhuKSxsPjEmJigoYz10W2wtMl0pLmxlZnQ9PT1yP2MubGVmdD1uOmMucmlnaHQ9biksdFtsLTFdPW4sdFtsXT1yLGwrMTx0Lmxlbmd0aD90W2wrMV09ZTp0LnB1c2goZSksbCs9Mn1lbHNle2lmKChuPXIubGVmdCkubGVmdCYmMD09PW4ubGVmdC5fY29sb3Ipe2lmKHM9KG49ci5sZWZ0PWkobikpLmxlZnQ9aShuLmxlZnQpLHIubGVmdD1uLnJpZ2h0LG4ucmlnaHQ9cixuLmxlZnQ9cyxuLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj0xLHIuX2NvbG9yPTEscy5fY29sb3I9MSxvKHIpLG8obiksbD4xKShjPXRbbC0yXSkucmlnaHQ9PT1yP2MucmlnaHQ9bjpjLmxlZnQ9bjtyZXR1cm4gdm9pZCh0W2wtMV09bil9aWYobi5yaWdodCYmMD09PW4ucmlnaHQuX2NvbG9yKXtpZihzPShuPXIubGVmdD1pKG4pKS5yaWdodD1pKG4ucmlnaHQpLHIubGVmdD1zLnJpZ2h0LG4ucmlnaHQ9cy5sZWZ0LHMucmlnaHQ9cixzLmxlZnQ9bixzLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj0xLG4uX2NvbG9yPTEsZS5fY29sb3I9MSxvKHIpLG8obiksbyhzKSxsPjEpKGM9dFtsLTJdKS5yaWdodD09PXI/Yy5yaWdodD1zOmMubGVmdD1zO3JldHVybiB2b2lkKHRbbC0xXT1zKX1pZigxPT09bi5fY29sb3Ipe2lmKDA9PT1yLl9jb2xvcilyZXR1cm4gci5fY29sb3I9MSx2b2lkKHIubGVmdD1hKDAsbikpO3IubGVmdD1hKDAsbik7Y29udGludWV9dmFyIGM7bj1pKG4pLHIubGVmdD1uLnJpZ2h0LG4ucmlnaHQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj0wLG8ociksbyhuKSxsPjEmJigoYz10W2wtMl0pLnJpZ2h0PT09cj9jLnJpZ2h0PW46Yy5sZWZ0PW4pLHRbbC0xXT1uLHRbbF09cixsKzE8dC5sZW5ndGg/dFtsKzFdPWU6dC5wdXNoKGUpLGwrPTJ9fX0oZSksaC5sZWZ0PT09cj9oLmxlZnQ9bnVsbDpoLnJpZ2h0PW51bGwsbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwia2V5Iix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS5rZXl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLnZhbHVlfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9MCxlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl7dmFyIHI9dGhpcy50cmVlLnJvb3Q7cmV0dXJuIHI/ci5fY291bnQ6MH1lW2UubGVuZ3RoLTFdLmxlZnQmJih0PWVbZS5sZW5ndGgtMV0ubGVmdC5fY291bnQpO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+PTA7LS1uKWVbbisxXT09PWVbbl0ucmlnaHQmJigrK3QsZVtuXS5sZWZ0JiYodCs9ZVtuXS5sZWZ0Ll9jb3VudCkpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSkscC5uZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUucmlnaHQpZm9yKGU9ZS5yaWdodDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLnJpZ2h0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwiaGFzTmV4dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLnJpZ2h0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLmxlZnQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pLHAudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YWNrO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHVwZGF0ZSBlbXB0eSBub2RlISIpO3ZhciByPW5ldyBBcnJheShlLmxlbmd0aCksaT1lW2UubGVuZ3RoLTFdO3Jbci5sZW5ndGgtMV09bmV3IG4oaS5fY29sb3IsaS5rZXksdCxpLmxlZnQsaS5yaWdodCxpLl9jb3VudCk7Zm9yKHZhciBhPWUubGVuZ3RoLTI7YT49MDstLWEpKGk9ZVthXSkubGVmdD09PWVbYSsxXT9yW2FdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsclthKzFdLGkucmlnaHQsaS5fY291bnQpOnJbYV09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxpLmxlZnQsclthKzFdLGkuX2NvdW50KTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLHJbMF0pfSxwLnByZXY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5sZWZ0KWZvcihlPWUubGVmdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5sZWZ0PT09ZTspZT10W3QubGVuZ3RoLTFdLHQucG9wKCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwiaGFzUHJldiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMTtpZih0W3QubGVuZ3RoLTFdLmxlZnQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ucmlnaHQ9PT10W2VdKXJldHVybiEwO3JldHVybiExfX0pfSx7fV0sNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHUodCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9O3ZhciBuPXQoIi4vbGliL3RleHQuanMiKSxpPXQoIi4vbGliL2xpbmVzLmpzIiksYT10KCIuL2xpYi9iYWNrZ3JvdW5kLmpzIiksbz10KCIuL2xpYi9jdWJlLmpzIikscz10KCIuL2xpYi90aWNrcy5qcyIpLGw9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiB1KHQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy5hdXRvVGlja3M9ITAsdGhpcy50aWNrU3BhY2luZz1bMSwxLDFdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tBbGlnbj1bImF1dG8iLCJhdXRvIiwiYXV0byJdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxMCwxMCwxMF0sdGhpcy5sYXN0Q3ViZVByb3BzPXtjdWJlRWRnZXM6WzAsMCwwXSxheGlzOlswLDAsMF19LHRoaXMubGFiZWxzPVsieCIsInkiLCJ6Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PSJzYW5zLXNlcmlmIix0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxBbGlnbj1bImF1dG8iLCJhdXRvIiwiYXV0byJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzEwLDEwLDEwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVswLDAsMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITEsITEsITFdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZmlyc3RJbml0PSEwLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9saW5lcz1udWxsLHRoaXMuX2JhY2tncm91bmQ9YSh0KX12YXIgZj11LnByb3RvdHlwZTtmdW5jdGlvbiBoKCl7dGhpcy5wcmltYWxPZmZzZXQ9WzAsMCwwXSx0aGlzLnByaW1hbE1pbm9yPVswLDAsMF0sdGhpcy5taXJyb3JPZmZzZXQ9WzAsMCwwXSx0aGlzLm1pcnJvck1pbm9yPVswLDAsMF19Zi51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7aWYobiBpbiB0KXt2YXIgaSxhPXRbbl0sbz10aGlzW25dOyhlP0FycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYVswXSk6QXJyYXkuaXNBcnJheShhKSk/dGhpc1tuXT1pPVtyKGFbMF0pLHIoYVsxXSkscihhWzJdKV06dGhpc1tuXT1pPVtyKGEpLHIoYSkscihhKV07Zm9yKHZhciBzPTA7czwzOysrcylpZihpW3NdIT09b1tzXSlyZXR1cm4hMH1yZXR1cm4hMX10PXR8fHt9O3ZhciByLGE9ZS5iaW5kKHRoaXMsITEsTnVtYmVyKSxvPWUuYmluZCh0aGlzLCExLEJvb2xlYW4pLGw9ZS5iaW5kKHRoaXMsITEsU3RyaW5nKSxjPWUuYmluZCh0aGlzLCEwLChmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigzPT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLDFdO2lmKDQ9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sK3RbM11dfXJldHVyblswLDAsMCwxXX0pKSx1PSExLGY9ITE7aWYoImJvdW5kcyJpbiB0KWZvcih2YXIgaD10LmJvdW5kcyxwPTA7cDwyOysrcClmb3IodmFyIGQ9MDtkPDM7KytkKWhbcF1bZF0hPT10aGlzLmJvdW5kc1twXVtkXSYmKGY9ITApLHRoaXMuYm91bmRzW3BdW2RdPWhbcF1bZF07aWYoInRpY2tzImluIHQpe3I9dC50aWNrcyx1PSEwLHRoaXMuYXV0b1RpY2tzPSExO2ZvcihwPTA7cDwzOysrcCl0aGlzLnRpY2tTcGFjaW5nW3BdPTB9ZWxzZSBhKCJ0aWNrU3BhY2luZyIpJiYodGhpcy5hdXRvVGlja3M9ITAsZj0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoInRpY2tzImluIHR8fCJ0aWNrU3BhY2luZyJpbiB0fHwodGhpcy5hdXRvVGlja3M9ITApLGY9ITAsdT0hMCx0aGlzLl9maXJzdEluaXQ9ITEpLGYmJnRoaXMuYXV0b1RpY2tzJiYocj1zLmNyZWF0ZSh0aGlzLmJvdW5kcyx0aGlzLnRpY2tTcGFjaW5nKSx1PSEwKSx1KXtmb3IocD0wO3A8MzsrK3ApcltwXS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSkpO3MuZXF1YWwocix0aGlzLnRpY2tzKT91PSExOnRoaXMudGlja3M9cn1vKCJ0aWNrRW5hYmxlIiksbCgidGlja0ZvbnQiKSYmKHU9ITApLGEoInRpY2tTaXplIiksYSgidGlja0FuZ2xlIiksYSgidGlja1BhZCIpLGMoInRpY2tDb2xvciIpO3ZhciBtPWwoImxhYmVscyIpO2woImxhYmVsRm9udCIpJiYobT0hMCksbygibGFiZWxFbmFibGUiKSxhKCJsYWJlbFNpemUiKSxhKCJsYWJlbFBhZCIpLGMoImxhYmVsQ29sb3IiKSxvKCJsaW5lRW5hYmxlIiksbygibGluZU1pcnJvciIpLGEoImxpbmVXaWR0aCIpLGMoImxpbmVDb2xvciIpLG8oImxpbmVUaWNrRW5hYmxlIiksbygibGluZVRpY2tNaXJyb3IiKSxhKCJsaW5lVGlja0xlbmd0aCIpLGEoImxpbmVUaWNrV2lkdGgiKSxjKCJsaW5lVGlja0NvbG9yIiksbygiZ3JpZEVuYWJsZSIpLGEoImdyaWRXaWR0aCIpLGMoImdyaWRDb2xvciIpLG8oInplcm9FbmFibGUiKSxjKCJ6ZXJvTGluZUNvbG9yIiksYSgiemVyb0xpbmVXaWR0aCIpLG8oImJhY2tncm91bmRFbmFibGUiKSxjKCJiYWNrZ3JvdW5kQ29sb3IiKSx0aGlzLl90ZXh0P3RoaXMuX3RleHQmJihtfHx1KSYmdGhpcy5fdGV4dC51cGRhdGUodGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KTp0aGlzLl90ZXh0PW4odGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpLHRoaXMuX2xpbmVzJiZ1JiYodGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwpLHRoaXMuX2xpbmVzfHwodGhpcy5fbGluZXM9aSh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMudGlja3MpKX07dmFyIHA9W25ldyBoLG5ldyBoLG5ldyBoXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcixjPW5bZV0sdT0wO3U8MzsrK3UpaWYoZSE9PXUpe3ZhciBmPWEsaD1zLHA9byxkPWw7YyYxPDx1JiYoZj1zLGg9YSxwPWwsZD1vKSxmW3VdPXJbMF1bdV0saFt1XT1yWzFdW3VdLGlbdV0+MD8ocFt1XT0tMSxkW3VdPTApOihwW3VdPTAsZFt1XT0xKX19dmFyIG09WzAsMCwwXSxnPXttb2RlbDpsLHZpZXc6bCxwcm9qZWN0aW9uOmwsX29ydGhvOiExfTtmLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGYuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxmLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9O3ZhciB2PVswLDAsMF0seT1bMCwwLDBdLHg9WzAsMCwwXTtmLmRyYXc9ZnVuY3Rpb24odCl7dD10fHxnO2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bCxuPXQudmlld3x8bCxpPXQucHJvamVjdGlvbnx8bCxhPXRoaXMuYm91bmRzLHM9dC5fb3J0aG98fCExLHU9byhyLG4saSxhLHMpLGY9dS5jdWJlRWRnZXMsaD11LmF4aXMsYj1uWzEyXSxfPW5bMTNdLHc9blsxNF0sVD1uWzE1XSxrPShzPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmIraVs3XSpfK2lbMTFdKncraVsxNV0qVCkvZS5kcmF3aW5nQnVmZmVySGVpZ2h0LEE9MDtBPDM7KytBKXRoaXMubGFzdEN1YmVQcm9wcy5jdWJlRWRnZXNbQV09ZltBXSx0aGlzLmxhc3RDdWJlUHJvcHMuYXhpc1tBXT1oW0FdO3ZhciBNPXA7Zm9yKEE9MDtBPDM7KytBKWQocFtBXSxBLHRoaXMuYm91bmRzLGYsaCk7ZT10aGlzLmdsO3ZhciBTLEU9bTtmb3IoQT0wO0E8MzsrK0EpdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW0FdP0VbQV09aFtBXTpFW0FdPTA7dGhpcy5fYmFja2dyb3VuZC5kcmF3KHIsbixpLGEsRSx0aGlzLmJhY2tncm91bmRDb2xvciksdGhpcy5fbGluZXMuYmluZChyLG4saSx0aGlzKTtmb3IoQT0wO0E8MzsrK0Epe3ZhciBMPVswLDAsMF07aFtBXT4wP0xbQV09YVsxXVtBXTpMW0FdPWFbMF1bQV07Zm9yKHZhciBDPTA7QzwyOysrQyl7dmFyIFA9KEErMStDKSUzLEk9KEErMSsoMV5DKSklMzt0aGlzLmdyaWRFbmFibGVbUF0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKFAsSSx0aGlzLmJvdW5kcyxMLHRoaXMuZ3JpZENvbG9yW1BdLHRoaXMuZ3JpZFdpZHRoW1BdKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKEM9MDtDPDI7KytDKXtQPShBKzErQyklMyxJPShBKzErKDFeQykpJTM7dGhpcy56ZXJvRW5hYmxlW0ldJiZNYXRoLm1pbihhWzBdW0ldLGFbMV1bSV0pPD0wJiZNYXRoLm1heChhWzBdW0ldLGFbMV1bSV0pPj0wJiZ0aGlzLl9saW5lcy5kcmF3WmVybyhQLEksdGhpcy5ib3VuZHMsTCx0aGlzLnplcm9MaW5lQ29sb3JbSV0sdGhpcy56ZXJvTGluZVdpZHRoW0ldKnRoaXMucGl4ZWxSYXRpbyl9fWZvcihBPTA7QTwzOysrQSl7dGhpcy5saW5lRW5hYmxlW0FdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoQSx0aGlzLmJvdW5kcyxNW0FdLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltBXSx0aGlzLmxpbmVXaWR0aFtBXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKEEsdGhpcy5ib3VuZHMsTVtBXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3JbQV0sdGhpcy5saW5lV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKTt2YXIgTz1jKHYsTVtBXS5wcmltYWxNaW5vciksej1jKHksTVtBXS5taXJyb3JNaW5vciksRD10aGlzLmxpbmVUaWNrTGVuZ3RoO2ZvcihDPTA7QzwzOysrQyl7dmFyIFI9ay9yWzUqQ107T1tDXSo9RFtDXSpSLHpbQ10qPURbQ10qUn10aGlzLmxpbmVUaWNrRW5hYmxlW0FdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKEEsTVtBXS5wcmltYWxPZmZzZXQsTyx0aGlzLmxpbmVUaWNrQ29sb3JbQV0sdGhpcy5saW5lVGlja1dpZHRoW0FdKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhBLE1bQV0ubWlycm9yT2Zmc2V0LHosdGhpcy5saW5lVGlja0NvbG9yW0FdLHRoaXMubGluZVRpY2tXaWR0aFtBXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX2xpbmVzLnVuYmluZCgpLHRoaXMuX3RleHQuYmluZChyLG4saSx0aGlzLnBpeGVsUmF0aW8pO3ZhciBGLEI7ZnVuY3Rpb24gTih0KXsoQj1bMCwwLDBdKVt0XT0xfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPSh0KzEpJTMsaT0odCsyKSUzLGE9ZVtuXSxvPWVbaV0scz1yW25dLGw9cltpXTthPjAmJmw+MHx8YT4wJiZsPDB8fGE8MCYmbD4wfHxhPDAmJmw8MD9OKG4pOihvPjAmJnM+MHx8bz4wJiZzPDB8fG88MCYmcz4wfHxvPDAmJnM8MCkmJk4oaSl9Zm9yKEE9MDtBPDM7KytBKXt2YXIgVT1NW0FdLnByaW1hbE1pbm9yLFY9TVtBXS5taXJyb3JNaW5vcixIPWMoeCxNW0FdLnByaW1hbE9mZnNldCk7Zm9yKEM9MDtDPDM7KytDKXRoaXMubGluZVRpY2tFbmFibGVbQV0mJihIW0NdKz1rKlVbQ10qTWF0aC5tYXgodGhpcy5saW5lVGlja0xlbmd0aFtDXSwwKS9yWzUqQ10pO3ZhciBxPVswLDAsMF07aWYocVtBXT0xLHRoaXMudGlja0VuYWJsZVtBXSl7LTM2MDA9PT10aGlzLnRpY2tBbmdsZVtBXT8odGhpcy50aWNrQW5nbGVbQV09MCx0aGlzLnRpY2tBbGlnbltBXT0iYXV0byIpOnRoaXMudGlja0FsaWduW0FdPS0xLEY9MSwiYXV0byI9PT0oUz1bdGhpcy50aWNrQWxpZ25bQV0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KCIiK1NbMF0pLEI9WzAsMCwwXSxqKEEsVSxWKTtmb3IoQz0wO0M8MzsrK0MpSFtDXSs9aypVW0NdKnRoaXMudGlja1BhZFtDXS9yWzUqQ107dGhpcy5fdGV4dC5kcmF3VGlja3MoQSx0aGlzLnRpY2tTaXplW0FdLHRoaXMudGlja0FuZ2xlW0FdLEgsdGhpcy50aWNrQ29sb3JbQV0scSxCLFMpfWlmKHRoaXMubGFiZWxFbmFibGVbQV0pe0Y9MCxCPVswLDAsMF0sdGhpcy5sYWJlbHNbQV0ubGVuZ3RoPjQmJihOKEEpLEY9MSksImF1dG8iPT09KFM9W3RoaXMubGFiZWxBbGlnbltBXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoIiIrU1swXSk7Zm9yKEM9MDtDPDM7KytDKUhbQ10rPWsqVVtDXSp0aGlzLmxhYmVsUGFkW0NdL3JbNSpDXTtIW0FdKz0uNSooYVswXVtBXSthWzFdW0FdKSx0aGlzLl90ZXh0LmRyYXdMYWJlbChBLHRoaXMubGFiZWxTaXplW0FdLHRoaXMubGFiZWxBbmdsZVtBXSxILHRoaXMubGFiZWxDb2xvcltBXSxbMCwwLDBdLEIsUyl9fXRoaXMuX3RleHQudW5iaW5kKCl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3RleHQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9iYWNrZ3JvdW5kLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsLHRoaXMuX3RleHQ9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPW51bGwsdGhpcy5nbD1udWxsfX0seyIuL2xpYi9iYWNrZ3JvdW5kLmpzIjo3MSwiLi9saWIvY3ViZS5qcyI6NzIsIi4vbGliL2xpbmVzLmpzIjo3MywiLi9saWIvdGV4dC5qcyI6NzUsIi4vbGliL3RpY2tzLmpzIjo3Nn1dLDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxzPTAsbD0wO2w8MzsrK2wpZm9yKHZhciBjPShsKzEpJTMsdT0obCsyKSUzLGY9WzAsMCwwXSxoPVswLDAsMF0scD0tMTtwPD0xO3ArPTIpe3IucHVzaChzLHMrMixzKzEscysxLHMrMixzKzMpLGZbbF09cCxoW2xdPXA7Zm9yKHZhciBkPS0xO2Q8PTE7ZCs9Mil7ZltjXT1kO2Zvcih2YXIgbT0tMTttPD0xO20rPTIpZlt1XT1tLGUucHVzaChmWzBdLGZbMV0sZlsyXSxoWzBdLGhbMV0saFsyXSkscys9MX12YXIgZz1jO2M9dSx1PWd9dmFyIHY9bih0LG5ldyBGbG9hdDMyQXJyYXkoZSkpLHk9bih0LG5ldyBVaW50MTZBcnJheShyKSx0LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx4PWkodCxbe2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI0fSx7YnVmZmVyOnYsdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI0fV0seSksYj1hKHQpO3JldHVybiBiLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxiLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTEsbmV3IG8odCx2LHgsYil9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5iZztmdW5jdGlvbiBvKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bn12YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0hMSxzPTA7czwzOysrcylvPW98fGlbc107aWYobyl7dmFyIGw9dGhpcy5nbDtsLmVuYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLGwucG9seWdvbk9mZnNldCgxLDIpLHRoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcz17bW9kZWw6dCx2aWV3OmUscHJvamVjdGlvbjpyLGJvdW5kczpuLGVuYWJsZTppLGNvbG9yczphfSx0aGlzLnZhby5iaW5kKCksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUywzNiksdGhpcy52YW8udW5iaW5kKCksbC5kaXNhYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCl9fSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjo3NCwiZ2wtYnVmZmVyIjo3OCwiZ2wtdmFvIjoxNTB9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxwKXtpKHMsZSx0KSxpKHMscixzKTtmb3IodmFyIHk9MCx4PTA7eDwyOysreCl7dVsyXT1hW3hdWzJdO2Zvcih2YXIgYj0wO2I8MjsrK2Ipe3VbMV09YVtiXVsxXTtmb3IodmFyIF89MDtfPDI7KytfKXVbMF09YVtfXVswXSxoKGxbeV0sdSxzKSx5Kz0xfX12YXIgdz0tMTtmb3IoeD0wO3g8ODsrK3gpe2Zvcih2YXIgVD1sW3hdWzNdLGs9MDtrPDM7KytrKWNbeF1ba109bFt4XVtrXS9UO3AmJihjW3hdWzJdKj0tMSksVDwwJiYodzwwfHxjW3hdWzJdPGNbd11bMl0pJiYodz14KX1pZih3PDApe3c9MDtmb3IodmFyIEE9MDtBPDM7KytBKXtmb3IodmFyIE09KEErMiklMyxTPShBKzEpJTMsRT0tMSxMPS0xLEM9MDtDPDI7KytDKXt2YXIgUD0oTz1DPDxBKSsoQzw8TSkrKDEtQzw8UyksST1PKygxLUM8PE0pKyhDPDxTKTtvKGNbT10sY1tQXSxjW0ldLGYpPDB8fChDP0U9MTpMPTEpfWlmKEU8MHx8TDwwKUw+RSYmKHd8PTE8PEEpO2Vsc2V7Zm9yKEM9MDtDPDI7KytDKXtQPShPPUM8PEEpKyhDPDxNKSsoMS1DPDxTKSxJPU8rKDEtQzw8TSkrKEM8PFMpO3ZhciBPLHo9ZChbbFtPXSxsW1BdLGxbSV0sbFtPKygxPDxNKSsoMTw8UyldXSk7Qz9FPXo6TD16fUw+RSYmKHd8PTE8PEEpfX19dmFyIEQ9N153LFI9LTE7Zm9yKHg9MDt4PDg7Kyt4KXghPT13JiZ4IT09RCYmKFI8MHx8Y1tSXVsxXT5jW3hdWzFdKSYmKFI9eCk7dmFyIEY9LTE7Zm9yKHg9MDt4PDM7Kyt4KXtpZigoTj1SXjE8PHgpIT09dyYmTiE9PUQpRjwwJiYoRj1OKSwoUz1jW05dKVswXTxjW0ZdWzBdJiYoRj1OKX12YXIgQj0tMTtmb3IoeD0wO3g8MzsrK3gpe3ZhciBOO2lmKChOPVJeMTw8eCkhPT13JiZOIT09RCYmTiE9PUYpQjwwJiYoQj1OKSwoUz1jW05dKVswXT5jW0JdWzBdJiYoQj1OKX12YXIgaj1tO2pbMF09alsxXT1qWzJdPTAsaltuLmxvZzIoRl5SKV09UiZGLGpbbi5sb2cyKFJeQildPVImQjt2YXIgVT03XkI7VT09PXd8fFU9PT1EPyhVPTdeRixqW24ubG9nMihCXlUpXT1VJkIpOmpbbi5sb2cyKEZeVSldPVUmRjt2YXIgVj1nLEg9dztmb3IoQT0wO0E8MzsrK0EpVltBXT1IJjE8PEE/LTE6MTtyZXR1cm4gdn07dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxhPXQoInNwbGl0LXBvbHlnb24iKSxvPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLHM9bmV3IEFycmF5KDE2KSxsPW5ldyBBcnJheSg4KSxjPW5ldyBBcnJheSg4KSx1PW5ldyBBcnJheSgzKSxmPVswLDAsMF07ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPTA7bjw0Oysrbil7dFtuXT1yWzEyK25dO2Zvcih2YXIgaT0wO2k8MzsrK2kpdFtuXSs9ZVtpXSpyWzQqaStuXX19IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDw4OysrdClsW3RdPVsxLDEsMSwxXSxjW3RdPVsxLDEsMV19KCk7dmFyIHA9W1swLDAsMSwwLDBdLFswLDAsLTEsMSwwXSxbMCwtMSwwLDEsMF0sWzAsMSwwLDEsMF0sWy0xLDAsMCwxLDBdLFsxLDAsMCwxLDBdXTtmdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7KytlKWlmKCh0PWEucG9zaXRpdmUodCxwW2VdKSkubGVuZ3RoPDMpcmV0dXJuIDA7dmFyIHI9dFswXSxuPXJbMF0vclszXSxpPXJbMV0vclszXSxvPTA7Zm9yKGU9MTtlKzE8dC5sZW5ndGg7KytlKXt2YXIgcz10W2VdLGw9dFtlKzFdLGM9c1swXS9zWzNdLW4sdT1zWzFdL3NbM10taSxmPWxbMF0vbFszXS1uLGg9bFsxXS9sWzNdLWk7bys9TWF0aC5hYnMoYypoLXUqZil9cmV0dXJuIG99dmFyIG09WzEsMSwxXSxnPVswLDAsMF0sdj17Y3ViZUVkZ2VzOm0sYXhpczpnfX0seyJiaXQtdHdpZGRsZSI6MzIsImdsLW1hdDQvbXVsdGlwbHkiOjEwMCwicm9idXN0LW9yaWVudGF0aW9uIjoyODQsInNwbGl0LXBvbHlnb24iOjMwMH1dLDczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89W10scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdO28ucHVzaCgwLDAsMSwwLDEsMSwwLDAsLTEsMCwwLC0xLDAsMSwxLDAsMSwtMSk7Zm9yKHZhciBmPTA7ZjwzOysrZil7Zm9yKHZhciBoPW8ubGVuZ3RoLzN8MCxkPTA7ZDxyW2ZdLmxlbmd0aDsrK2Qpe3ZhciBtPStyW2ZdW2RdLng7by5wdXNoKG0sMCwxLG0sMSwxLG0sMCwtMSxtLDAsLTEsbSwxLDEsbSwxLC0xKX12YXIgZz1vLmxlbmd0aC8zfDA7c1tmXT1oLGxbZl09Zy1oO2g9by5sZW5ndGgvM3wwO2Zvcih2YXIgdj0wO3Y8cltmXS5sZW5ndGg7Kyt2KXttPStyW2ZdW3ZdLng7by5wdXNoKG0sMCwxLG0sMSwxLG0sMCwtMSxtLDAsLTEsbSwxLDEsbSwxLC0xKX1nPW8ubGVuZ3RoLzN8MDtjW2ZdPWgsdVtmXT1nLWh9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1oKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWYobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89ZihsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWYobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9ZihsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1mKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWgoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWYobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBtPWYobCk7bVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9bSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9aChjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9ZihsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjc0LCJnbC1idWZmZXIiOjc4LCJnbC12YW8iOjE1MH1dLDc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgcz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xuICB2ZWMzIEIgPSBwcm9qZWN0KGIpO1xuXG4gIHJldHVybiBhdGFuKFxuICAgIChCLnkgLSBBLnkpICogcmVzb2x1dGlvbi55LFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XG4gICk7XG59XG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XG5jb25zdCBmbG9hdCBUV09fUEkgPSAyLjAgKiBQSTtcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xuXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xuYm9vbCBlbmFibGVBbGlnbiA9ICAgIChhbGlnbk9wdC56ICE9IDAuMCk7XG5cbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2QoYSwgUEkpO1xufVxuXG5mbG9hdCBwb3NpdGl2ZV9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cbiAgICBhICsgVFdPX1BJIDpcbiAgICBhXG4gICk7XG59XG5cbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgcmV0dXJuICgoYiA+IEhBTEZfUEkpICYmIChiIDw9IE9ORV9BTkRfSEFMRl9QSSkpID9cbiAgICBiIC0gUEkgOlxuICAgIGI7XG59XG5cbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xuICAvLyByYXRpbyBjb250cm9scyB0aGUgcmF0aW8gYmV0d2VlbiBiZWluZyBob3Jpem9udGFsIHRvICh2ZXJ0aWNhbCArIGhvcml6b250YWwpXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxuICAvLyBsaWtlbHkgYmUgbW9yZSBob3Jpem9udGFsIHRoYW4gdmVydGljYWwuXG5cbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuXG4gIHJldHVyblxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcbiAgICAoYiA8ICgyLjAgLSByYXRpbykgKiBIQUxGX1BJKSA/IC1IQUxGX1BJIDpcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDtcbn1cblxuZmxvYXQgcm91bmRUbyhmbG9hdCBhLCBmbG9hdCBiKSB7XG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcbn1cblxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuICBmbG9hdCBkaXYgPSBUV09fUEkgLyBmbG9hdChuKTtcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcbn1cblxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcbiAgcmV0dXJuXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgICAob3B0aW9uID09IDEpID8gcmF3QW5nbGUgKyBkZWx0YSA6ICAgICAgIC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgZmxpcCB0byBhbGlnbiB3aXRoIG9uZSBkaXJlY3Rpb24gb2YgdGhlIGF4aXNcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5nbGU7ICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gYmFjayByYXcgaW5wdXQgYW5nbGVcbn1cblxuYm9vbCBpc0F4aXNUaXRsZSA9IChheGlzLnggPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcblxudm9pZCBtYWluKCkge1xuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcblxuICBmbG9hdCBiZXRhID0gYW5nbGU7IC8vIGkuZS4gdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMgZm9yIGVhY2ggdGlja1xuXG4gIGZsb2F0IGF4aXNBbmdsZTtcbiAgZmxvYXQgY2xpcEFuZ2xlO1xuICBmbG9hdCBmbGlwO1xuXG4gIGlmIChlbmFibGVBbGlnbikge1xuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XG4gICAgY2xpcEFuZ2xlID0gY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGFsaWduRGlyKTtcblxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG4gICAgY2xpcEFuZ2xlICs9IChzaW4oY2xpcEFuZ2xlKSA8IDAuMCkgPyBQSSA6IDAuMDtcblxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcbiAgICAgICAgICAgICAgICB2ZWMyKHNpbihjbGlwQW5nbGUpLC1jb3MoY2xpcEFuZ2xlKSkpID4gMC4wKSA/IDEuMCA6IDAuMDtcblxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XG4gIH1cblxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcblxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXG4gICAgIGNvcyhiZXRhKSwgc2luKGJldGEpLFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxuICApO1xuXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcbn0iXSksbD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBjPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcblxuICB2ZWMzIHNpZ25BeGlzID0gc2lnbihib3VuZHNbMV0gLSBib3VuZHNbMF0pO1xuXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xuXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBtYXhSYW5nZSA9IG1heChib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cblxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XG59Il0pLHU9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3JDaGFubmVsLnggKiBjb2xvcnNbMF0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xufSJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjEzMixnbHNsaWZ5OjIzMX1dLDc1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxzLGwpe3ZhciB1PW4odCksZj1pKHQsW3tidWZmZXI6dSxzaXplOjN9XSksaD1vKHQpO2guYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wO3ZhciBwPW5ldyBjKHQsaCx1LGYpO3JldHVybiBwLnVwZGF0ZShlLHIsYSxzLGwpLHB9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCJ2ZWN0b3JpemUtdGV4dCIpLG89dCgiLi9zaGFkZXJzIikudGV4dCxzPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGw9cy5fX1RFWFRfQ0FDSEV8fHt9O3MuX19URVhUX0NBQ0hFPXt9O2Z1bmN0aW9uIGModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLnZhbz1uLHRoaXMudGlja09mZnNldD10aGlzLnRpY2tDb3VudD10aGlzLmxhYmVsT2Zmc2V0PXRoaXMubGFiZWxDb3VudD1udWxsfXZhciB1PWMucHJvdG90eXBlLGY9WzAsMF07dS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudmFvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCk7dmFyIGk9dGhpcy5zaGFkZXIudW5pZm9ybXM7aS5tb2RlbD10LGkudmlldz1lLGkucHJvamVjdGlvbj1yLGkucGl4ZWxTY2FsZT1uLGZbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsZlsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMucmVzb2x1dGlvbj1mfSx1LnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPVtdO2Z1bmN0aW9uIHModCxlLHIsbixpLHMpe3ZhciBjPWxbcl07Y3x8KGM9bFtyXT17fSk7dmFyIHU9Y1tlXTt1fHwodT1jW2VdPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBhKHQsZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUud2FybignZXJyb3IgdmVjdG9yaXppbmcgdGV4dDoiJyt0KyciIGVycm9yOicsZSkse2NlbGxzOltdLHBvc2l0aW9uczpbXX19fShlLHt0cmlhbmdsZXM6ITAsZm9udDpyLHRleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZVNwYWNpbmc6aSxzdHlsZXRhZ3M6c30pKTtmb3IodmFyIGY9KG58fDEyKS8xMixoPXUucG9zaXRpb25zLHA9dS5jZWxscyxkPTAsbT1wLmxlbmd0aDtkPG07KytkKWZvcih2YXIgZz1wW2RdLHY9Mjt2Pj0wOy0tdil7dmFyIHk9aFtnW3ZdXTtvLnB1c2goZip5WzBdLC1mKnlbMV0sdCl9fWZvcih2YXIgYz1bMCwwLDBdLHU9WzAsMCwwXSxmPVswLDAsMF0saD1bMCwwLDBdLHA9e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH0sZD0wO2Q8MzsrK2Qpe2ZbZF09by5sZW5ndGgvM3wwLHMoLjUqKHRbMF1bZF0rdFsxXVtkXSksZVtkXSxyW2RdLDEyLDEuMjUscCksaFtkXT0oby5sZW5ndGgvM3wwKS1mW2RdLGNbZF09by5sZW5ndGgvM3wwO2Zvcih2YXIgbT0wO208bltkXS5sZW5ndGg7KyttKW5bZF1bbV0udGV4dCYmcyhuW2RdW21dLngsbltkXVttXS50ZXh0LG5bZF1bbV0uZm9udHx8aSxuW2RdW21dLmZvbnRTaXplfHwxMiwxLjI1LHApO3VbZF09KG8ubGVuZ3RoLzN8MCktY1tkXX10aGlzLmJ1ZmZlci51cGRhdGUobyksdGhpcy50aWNrT2Zmc2V0PWMsdGhpcy50aWNrQ291bnQ9dSx0aGlzLmxhYmVsT2Zmc2V0PWYsdGhpcy5sYWJlbENvdW50PWh9LHUuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy50aWNrQ291bnRbdF0mJih0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25EaXI9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbk9wdD1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKSl9LHUuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMubGFiZWxDb3VudFt0XSx0aGlzLmxhYmVsT2Zmc2V0W3RdKSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHsiLi9zaGFkZXJzIjo3NCxfcHJvY2Vzczo1LCJnbC1idWZmZXIiOjc4LCJnbC12YW8iOjE1MCwidmVjdG9yaXplLXRleHQiOjMxMX1dLDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10KyIiLG49ci5pbmRleE9mKCIuIiksaT0wO24+PTAmJihpPXIubGVuZ3RoLW4tMSk7dmFyIGE9TWF0aC5wb3coMTAsaSksbz1NYXRoLnJvdW5kKHQqZSphKSxzPW8rIiI7aWYocy5pbmRleE9mKCJlIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLGM9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksYz0wfC1jKToobD0wfE1hdGguZmxvb3IobCksY3w9MCk7dmFyIHU9IiIrbDtpZihvPDAmJih1PSItIit1KSxpKXtmb3IodmFyIGY9IiIrYztmLmxlbmd0aDxpOylmPSIwIitmO3JldHVybiB1KyIuIitmfXJldHVybiB1fXIuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPDM7KytpKXtmb3IodmFyIGE9W10sbz0odFswXVtpXSx0WzFdW2ldLDApO28qZVtpXTw9dFsxXVtpXTsrK28pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO2ZvcihvPS0xO28qZVtpXT49dFswXVtpXTstLW8pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO3IucHVzaChhKX1yZXR1cm4gcn0sci5lcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDsrK24pe3ZhciBpPXRbcl1bbl0sYT1lW3JdW25dO2lmKGkueCE9PWEueHx8aS50ZXh0IT09YS50ZXh0fHxpLmZvbnQhPT1hLmZvbnR8fGkuZm9udENvbG9yIT09YS5mb250Q29sb3J8fGkuZm9udFNpemUhPT1hLmZvbnRTaXplfHxpLmR4IT09YS5keHx8aS5keSE9PWEuZHkpcmV0dXJuITF9fXJldHVybiEwfX0se31dLDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsLGYpe3ZhciBoPWUubW9kZWx8fGMscD1lLnZpZXd8fGMsdj1lLnByb2plY3Rpb258fGMseT1lLl9vcnRob3x8ITEseD10LmJvdW5kcyxiPShmPWZ8fGEoaCxwLHYseCx5KSkuYXhpcztvKHUscCxoKSxvKHUsdix1KTtmb3IodmFyIF89bSx3PTA7dzwzOysrdylfW3ddLmxvPTEvMCxfW3ddLmhpPS0xLzAsX1t3XS5waXhlbHNQZXJEYXRhVW5pdD0xLzA7dmFyIFQ9bihzKHUsdSkpO3ModSx1KTtmb3IodmFyIGs9MDtrPDM7KytrKXt2YXIgQT0oaysxKSUzLE09KGsrMiklMyxTPWc7dDpmb3Iodz0wO3c8MjsrK3cpe3ZhciBFPVtdO2lmKGJba108MCE9ISF3KXtTW2tdPXhbd11ba107Zm9yKHZhciBMPTA7TDwyOysrTCl7U1tBXT14W0xed11bQV07Zm9yKHZhciBDPTA7QzwyOysrQylTW01dPXhbQ15MXnddW01dLEUucHVzaChTLnNsaWNlKCkpfXZhciBQPXk/NTo0O2ZvcihMPVA7TD09PVA7KytMKXtpZigwPT09RS5sZW5ndGgpY29udGludWUgdDtFPWkucG9zaXRpdmUoRSxUW0xdKX1mb3IoTD0wO0w8RS5sZW5ndGg7KytMKXtNPUVbTF07dmFyIEk9ZChnLHUsTSxyLGwpO2ZvcihDPTA7QzwzOysrQylfW0NdLmxvPU1hdGgubWluKF9bQ10ubG8sTVtDXSksX1tDXS5oaT1NYXRoLm1heChfW0NdLmhpLE1bQ10pLEMhPT1rJiYoX1tDXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbihfW0NdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKElbQ10pKSl9fX19cmV0dXJuIF99O3ZhciBuPXQoImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiKSxpPXQoInNwbGl0LXBvbHlnb24iKSxhPXQoIi4vbGliL2N1YmUuanMiKSxvPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxzPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksbD10KCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiKSxjPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO2Z1bmN0aW9uIGYodCxlLHIpe3RoaXMubG89dCx0aGlzLmhpPWUsdGhpcy5waXhlbHNQZXJEYXRhVW5pdD1yfXZhciBoPVswLDAsMCwxXSxwPVswLDAsMCwxXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTwzOysrYSl7Zm9yKHZhciBvPWgscz1wLGM9MDtjPDM7KytjKXNbY109b1tjXT1yW2NdO3NbM109b1szXT0xLHNbYV0rPTEsbChzLHMsZSksc1szXTwwJiYodFthXT0xLzApLG9bYV0tPTEsbChvLG8sZSksb1szXTwwJiYodFthXT0xLzApO3ZhciB1PShvWzBdL29bM10tc1swXS9zWzNdKSpuLGY9KG9bMV0vb1szXS1zWzFdL3NbM10pKmk7dFthXT0uMjUqTWF0aC5zcXJ0KHUqdStmKmYpfXJldHVybiB0fXZhciBtPVtuZXcgZigxLzAsLTEvMCwxLzApLG5ldyBmKDEvMCwtMS8wLDEvMCksbmV3IGYoMS8wLC0xLzAsMS8wKV0sZz1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjcyLCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIjo2NywiZ2wtbWF0NC9tdWx0aXBseSI6MTAwLCJnbC1tYXQ0L3RyYW5zcG9zZSI6MTA5LCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiOjIyMSwic3BsaXQtcG9seWdvbiI6MzAwfV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJuZGFycmF5LW9wcyIpLGE9dCgibmRhcnJheSIpLG89WyJ1aW50OCIsInVpbnQ4X2NsYW1wZWQiLCJ1aW50MTYiLCJ1aW50MzIiLCJpbnQ4IiwiaW50MTYiLCJpbnQzMiIsImZsb2F0MzIiXTtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5nbD10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlPXIsdGhpcy5sZW5ndGg9bix0aGlzLnVzYWdlPWl9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7dmFyIG89aS5sZW5ndGgqaS5CWVRFU19QRVJfRUxFTUVOVDtpZihhPDApcmV0dXJuIHQuYnVmZmVyRGF0YShlLGksbiksbztpZihvK2E+cil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSWYgcmVzaXppbmcgYnVmZmVyLCBtdXN0IG5vdCBzcGVjaWZ5IG9mZnNldCIpO3JldHVybiB0LmJ1ZmZlclN1YkRhdGEoZSxhLGkpLHJ9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uLm1hbGxvYyh0Lmxlbmd0aCxlKSxpPXQubGVuZ3RoLGE9MDthPGk7KythKXJbYV09dFthXTtyZXR1cm4gcn1sLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sbC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGwudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksIm9iamVjdCI9PXR5cGVvZiB0JiZ2b2lkIDAhPT10LnNoYXBlKXt2YXIgcj10LmR0eXBlO2lmKG8uaW5kZXhPZihyKTwwJiYocj0iZmxvYXQzMiIpLHRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIpcj1nbC5nZXRFeHRlbnNpb24oIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSYmInVpbnQxNiIhPT1yPyJ1aW50MzIiOiJ1aW50MTYiO2lmKHI9PT10LmR0eXBlJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7aWYoZVtuXSE9PXIpcmV0dXJuITE7cio9dFtuXX1yZXR1cm4hMH0odC5zaGFwZSx0LnN0cmlkZSkpMD09PXQub2Zmc2V0JiZ0LmRhdGEubGVuZ3RoPT09dC5zaGFwZVswXT90aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLGUpOnRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEuc3ViYXJyYXkodC5vZmZzZXQsdC5zaGFwZVswXSksZSk7ZWxzZXt2YXIgcz1uLm1hbGxvYyh0LnNpemUsciksbD1hKHMsdC5zaGFwZSk7aS5hc3NpZ24obCx0KSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP3M6cy5zdWJhcnJheSgwLHQuc2l6ZSksZSksbi5mcmVlKHMpfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBmO2Y9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj91KHQsInVpbnQxNiIpOnUodCwiZmxvYXQzMiIpLHRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSxlPDA/ZjpmLnN1YmFycmF5KDAsdC5sZW5ndGgpLGUpLG4uZnJlZShmKX1lbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdCxlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdm9pZCAwIT09dCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCBkYXRhIHR5cGUiKTtpZihlPj0wKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBDYW5ub3Qgc3BlY2lmeSBvZmZzZXQgd2hlbiByZXNpemluZyBidWZmZXIiKTsodHw9MCk8PTAmJih0PTEpLHRoaXMuZ2wuYnVmZmVyRGF0YSh0aGlzLnR5cGUsMHx0LHRoaXMudXNhZ2UpLHRoaXMubGVuZ3RoPXR9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYocj1yfHx0LkFSUkFZX0JVRkZFUixuPW58fHQuRFlOQU1JQ19EUkFXLHIhPT10LkFSUkFZX0JVRkZFUiYmciE9PXQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdHlwZSBmb3Igd2ViZ2wgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5BUlJBWV9CVUZGRVIgb3IgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTtpZihuIT09dC5EWU5BTUlDX0RSQVcmJm4hPT10LlNUQVRJQ19EUkFXJiZuIT09dC5TVFJFQU1fRFJBVyl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB1c2FnZSBmb3IgYnVmZmVyLCBtdXN0IGJlIGVpdGhlciBnbC5EWU5BTUlDX0RSQVcsIGdsLlNUQVRJQ19EUkFXIG9yIGdsLlNUUkVBTV9EUkFXIik7dmFyIGk9dC5jcmVhdGVCdWZmZXIoKSxhPW5ldyBzKHQscixpLDAsbik7cmV0dXJuIGEudXBkYXRlKGUpLGF9fSx7bmRhcnJheToyNTksIm5kYXJyYXktb3BzIjoyNTQsInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdmVjMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzLGE9e3Bvc2l0aW9uczpbXSx2ZXJ0ZXhJbnRlbnNpdHk6W10sdmVydGV4SW50ZW5zaXR5Qm91bmRzOnQudmVydGV4SW50ZW5zaXR5Qm91bmRzLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLGE7Zm9yKHZhciBvPTAscz0xLzAsbD0tMS8wLGM9MS8wLHU9LTEvMCxmPTEvMCxoPS0xLzAscD1udWxsLGQ9bnVsbCxtPVtdLGc9MS8wLHY9ITEseT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgeD1yW3ldO3M9TWF0aC5taW4oeFswXSxzKSxsPU1hdGgubWF4KHhbMF0sbCksYz1NYXRoLm1pbih4WzFdLGMpLHU9TWF0aC5tYXgoeFsxXSx1KSxmPU1hdGgubWluKHhbMl0sZiksaD1NYXRoLm1heCh4WzJdLGgpO3ZhciBiPWlbeV07aWYobi5sZW5ndGgoYik+byYmKG89bi5sZW5ndGgoYikpLHkpe3ZhciBfPTIqbi5kaXN0YW5jZShwLHgpLyhuLmxlbmd0aChkKStuLmxlbmd0aChiKSk7Xz8oZz1NYXRoLm1pbihnLF8pLHY9ITEpOnY9ITB9dnx8KHA9eCxkPWIpLG0ucHVzaChiKX12YXIgdz1bcyxjLGZdLFQ9W2wsdSxoXTtlJiYoZVswXT13LGVbMV09VCksMD09PW8mJihvPTEpO3ZhciBrPTEvbztpc0Zpbml0ZShnKXx8KGc9MSksYS52ZWN0b3JTY2FsZT1nO3ZhciBBPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKEE9dC5hYnNvbHV0ZUNvbmVTaXplKmspLGEuY29uZVNjYWxlPUE7eT0wO2Zvcih2YXIgTT0wO3k8ci5sZW5ndGg7eSsrKWZvcih2YXIgUz0oeD1yW3ldKVswXSxFPXhbMV0sTD14WzJdLEM9bVt5XSxQPW4ubGVuZ3RoKEMpKmssST0wO0k8ODtJKyspe2EucG9zaXRpb25zLnB1c2goW1MsRSxMLE0rK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxMLE0rK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxMLE0rK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxMLE0rK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxMLE0rK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxMLE0rK10pLGEudmVjdG9ycy5wdXNoKEMpLGEudmVjdG9ycy5wdXNoKEMpLGEudmVjdG9ycy5wdXNoKEMpLGEudmVjdG9ycy5wdXNoKEMpLGEudmVjdG9ycy5wdXNoKEMpLGEudmVjdG9ycy5wdXNoKEMpLGEudmVydGV4SW50ZW5zaXR5LnB1c2goUCxQLFApLGEudmVydGV4SW50ZW5zaXR5LnB1c2goUCxQLFApO3ZhciBPPWEucG9zaXRpb25zLmxlbmd0aDthLmNlbGxzLnB1c2goW08tNixPLTUsTy00XSxbTy0zLE8tMixPLTFdKX1yZXR1cm4gYX07dmFyIGk9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cy5jcmVhdGVNZXNoPXQoIi4vY3JlYXRlX21lc2giKSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5leHBvcnRzLmNyZWF0ZU1lc2godCxyLHtzaGFkZXJzOmksdHJhY2VUeXBlOiJjb25lIn0pfX0seyIuL2NyZWF0ZV9tZXNoIjo4MCwiLi9saWIvc2hhZGVycyI6ODEsImdsLXZlYzMiOjE2OX1dLDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiZ2wtbWF0NC9pbnZlcnQiKSxjPXQoIm5kYXJyYXkiKSx1PXQoImNvbG9ybWFwIiksZj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gaCh0LGUscixuLGksYSxvLHMsbCxjLHUpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWksdGhpcy50cmlhbmdsZVZlY3RvcnM9YSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPWMsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFjZVR5cGU9dSx0aGlzLnR1YmVTY2FsZT0xLHRoaXMuY29uZVNjYWxlPTIsdGhpcy52ZWN0b3JTY2FsZT0xLHRoaXMuY29uZU9mZnNldD0uMjUsdGhpcy5fbW9kZWw9Zix0aGlzLl92aWV3PWYsdGhpcy5fcHJvamVjdGlvbj1mLHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIHA9aC5wcm90b3R5cGU7ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW4odCxlLm1lc2hTaGFkZXIudmVydGV4LGUubWVzaFNoYWRlci5mcmFnbWVudCxudWxsLGUubWVzaFNoYWRlci5hdHRyaWJ1dGVzKTtyZXR1cm4gci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsci5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj00LHJ9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPW4odCxlLnBpY2tTaGFkZXIudmVydGV4LGUucGlja1NoYWRlci5mcmFnbWVudCxudWxsLGUucGlja1NoYWRlci5hdHRyaWJ1dGVzKTtyZXR1cm4gci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj00LHJ9cC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHAuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0scC5waWNrU2xvdHM9MSxwLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLCJsaWdodFBvc2l0aW9uImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImFtYmllbnQiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksImRpZmZ1c2UiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksInNwZWN1bGFyImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksInJvdWdobmVzcyJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLCJmcmVzbmVsImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx2b2lkIDAhPT10LnR1YmVTY2FsZSYmKHRoaXMudHViZVNjYWxlPXQudHViZVNjYWxlKSx2b2lkIDAhPT10LnZlY3RvclNjYWxlJiYodGhpcy52ZWN0b3JTY2FsZT10LnZlY3RvclNjYWxlKSx2b2lkIDAhPT10LmNvbmVTY2FsZSYmKHRoaXMuY29uZVNjYWxlPXQuY29uZVNjYWxlKSx2b2lkIDAhPT10LmNvbmVPZmZzZXQmJih0aGlzLmNvbmVPZmZzZXQ9dC5jb25lT2Zmc2V0KSx0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11KHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIGMocixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnMsaT10LnZlY3RvcnM7aWYobiYmciYmaSl7dmFyIGE9W10sbz1bXSxzPVtdLGw9W10sZj1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9aTt2YXIgaD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLHA9dC52ZXJ0ZXhJbnRlbnNpdHksZD0xLzAsbT0tMS8wO2lmKHApaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpZD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sbT0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIGc9MDtnPHAubGVuZ3RoOysrZyl7dmFyIHY9cFtnXTtkPU1hdGgubWluKGQsdiksbT1NYXRoLm1heChtLHYpfWVsc2UgZm9yKGc9MDtnPG4ubGVuZ3RoOysrZyl7dj1uW2ddWzJdO2Q9TWF0aC5taW4oZCx2KSxtPU1hdGgubWF4KG0sdil9dGhpcy5pbnRlbnNpdHk9cHx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obiksdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGc9MDtnPG4ubGVuZ3RoOysrZylmb3IodmFyIHk9bltnXSx4PTA7eDwzOysreCkhaXNOYU4oeVt4XSkmJmlzRmluaXRlKHlbeF0pJiYodGhpcy5ib3VuZHNbMF1beF09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1beF0seVt4XSksdGhpcy5ib3VuZHNbMV1beF09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1beF0seVt4XSkpO3ZhciBiPTA7dDpmb3IoZz0wO2c8ci5sZW5ndGg7KytnKXt2YXIgXz1yW2ddO3N3aXRjaChfLmxlbmd0aCl7Y2FzZSAzOmZvcih4PTA7eDwzOysreCl7eT1uW1Q9X1t4XV07Zm9yKHZhciB3PTA7dzwzOysrdylpZihpc05hTih5W3ddKXx8IWlzRmluaXRlKHlbd10pKWNvbnRpbnVlIHR9Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgVDt5PW5bVD1fWzIteF1dO2EucHVzaCh5WzBdLHlbMV0seVsyXSx5WzNdKTt2YXIgaz1pW1RdO28ucHVzaChrWzBdLGtbMV0sa1syXSxrWzNdfHwwKTt2YXIgQSxNPWg7Mz09PU0ubGVuZ3RoP3MucHVzaChNWzBdLE1bMV0sTVsyXSwxKTpzLnB1c2goTVswXSxNWzFdLE1bMl0sTVszXSksQT1wP1socFtUXS1kKS8obS1kKSwwXTpbKHlbMl0tZCkvKG0tZCksMF0sbC5wdXNoKEFbMF0sQVsxXSksZi5wdXNoKGcpfWIrPTF9fXRoaXMudHJpYW5nbGVDb3VudD1iLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVWZWN0b3JzLnVwZGF0ZShvKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShzKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZikpfX0scC5kcmF3VHJhbnNwYXJlbnQ9cC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxmLG49dC52aWV3fHxmLGk9dC5wcm9qZWN0aW9ufHxmLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIGM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6Zi5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQsdGV4dHVyZTowfTtjLmludmVyc2VNb2RlbD1sKGMuaW52ZXJzZU1vZGVsLGMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtzKHUsYy52aWV3LGMubW9kZWwpLHModSxjLnByb2plY3Rpb24sdSksbCh1LHUpO2ZvcihvPTA7bzwzOysrbyljLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGg9dVsxNV07Zm9yKG89MDtvPDM7KytvKWgrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgcD11WzEyK29dLGQ9MDtkPDM7KytkKXArPXVbNCpkK29dKnRoaXMubGlnaHRQb3NpdGlvbltkXTtjLmxpZ2h0UG9zaXRpb25bb109cC9ofWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgbT10aGlzLnRyaVNoYWRlcjttLmJpbmQoKSxtLnVuaWZvcm1zPWMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9fSxwLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxmLG49dC52aWV3fHxmLGk9dC5wcm9qZWN0aW9ufHxmLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEsdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKX0scC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKSxpPXtwb3NpdGlvbjpuLGRhdGFDb29yZGluYXRlOm4saW5kZXg6TWF0aC5mbG9vcihyWzFdLzQ4KX07cmV0dXJuImNvbmUiPT09dGhpcy50cmFjZVR5cGU/aS5pbmRleD1NYXRoLmZsb29yKHJbMV0vNDgpOiJzdHJlYW10dWJlIj09PXRoaXMudHJhY2VUeXBlJiYoaS5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHlbclsxXV0saS52ZWxvY2l0eT10aGlzLnZlY3RvcnNbclsxXV0uc2xpY2UoMCwzKSxpLmRpdmVyZ2VuY2U9dGhpcy52ZWN0b3JzW3JbMV1dWzNdLGkuaW5kZXg9ZSksaX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ci5zaGFkZXJzOzE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHM9ZCh0LG4pLGw9bSh0LG4pLHU9byh0LGMobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTt1LmdlbmVyYXRlTWlwbWFwKCksdS5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUix1Lm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgZj1pKHQpLHA9aSh0KSxnPWkodCksdj1pKHQpLHk9aSh0KSx4PWEodCxbe2J1ZmZlcjpmLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eSx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpnLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6NH1dKSxiPW5ldyBoKHQsdSxzLGwsZixwLHksZyx2LHgsci50cmFjZVR5cGV8fCJjb25lIik7cmV0dXJuIGIudXBkYXRlKGUpLGJ9fSx7Y29sb3JtYXA6NTMsImdsLWJ1ZmZlciI6NzgsImdsLW1hdDQvaW52ZXJ0Ijo5OCwiZ2wtbWF0NC9tdWx0aXBseSI6MTAwLCJnbC1zaGFkZXIiOjEzMiwiZ2wtdGV4dHVyZTJkIjoxNDYsImdsLXZhbyI6MTUwLG5kYXJyYXk6MjU5fV0sODE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcbiAgfVxuXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcbiAgKSA/IDEuMCA6IDAuMDtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlLCBjb25lU2NhbGUsIGNvbmVPZmZzZXQ7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbiwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yKSwgcG9zaXRpb24udywgY29uZU9mZnNldCwgbm9ybWFsKTtcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwgMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcblxuICAvLyB2ZWM0IG1fcG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KGNvbmVQb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcblxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfZGF0YSAgICAgICAgICAgPSBjb25lUG9zaXRpb24ueHl6O1xuICBmX3Bvc2l0aW9uICAgICAgID0gcG9zaXRpb24ueHl6O1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksYT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MsIGZyZXNuZWwsIGthbWJpZW50LCBrZGlmZnVzZSwga3NwZWN1bGFyLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxuLy9cbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50LlxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcbi8vXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcblxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xuXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcblxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xuXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xuICB9XG5cbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxuICApID8gMS4wIDogMC4wO1xuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIHZlYzMgdjIgPSB2MSAtIGQ7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB9XG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgY29uZVNjYWxlLCBjb25lT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yLnh5eiksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XG4gIHZlYzQgY29uZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzMifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6MjMxfV0sODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ezA6Ik5PTkUiLDE6Ik9ORSIsMjoiTElORV9MT09QIiwzOiJMSU5FX1NUUklQIiw0OiJUUklBTkdMRVMiLDU6IlRSSUFOR0xFX1NUUklQIiw2OiJUUklBTkdMRV9GQU4iLDI1NjoiREVQVEhfQlVGRkVSX0JJVCIsNTEyOiJORVZFUiIsNTEzOiJMRVNTIiw1MTQ6IkVRVUFMIiw1MTU6IkxFUVVBTCIsNTE2OiJHUkVBVEVSIiw1MTc6Ik5PVEVRVUFMIiw1MTg6IkdFUVVBTCIsNTE5OiJBTFdBWVMiLDc2ODoiU1JDX0NPTE9SIiw3Njk6Ik9ORV9NSU5VU19TUkNfQ09MT1IiLDc3MDoiU1JDX0FMUEhBIiw3NzE6Ik9ORV9NSU5VU19TUkNfQUxQSEEiLDc3MjoiRFNUX0FMUEhBIiw3NzM6Ik9ORV9NSU5VU19EU1RfQUxQSEEiLDc3NDoiRFNUX0NPTE9SIiw3NzU6Ik9ORV9NSU5VU19EU1RfQ09MT1IiLDc3NjoiU1JDX0FMUEhBX1NBVFVSQVRFIiwxMDI0OiJTVEVOQ0lMX0JVRkZFUl9CSVQiLDEwMjg6IkZST05UIiwxMDI5OiJCQUNLIiwxMDMyOiJGUk9OVF9BTkRfQkFDSyIsMTI4MDoiSU5WQUxJRF9FTlVNIiwxMjgxOiJJTlZBTElEX1ZBTFVFIiwxMjgyOiJJTlZBTElEX09QRVJBVElPTiIsMTI4NToiT1VUX09GX01FTU9SWSIsMTI4NjoiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iLDIzMDQ6IkNXIiwyMzA1OiJDQ1ciLDI4NDk6IkxJTkVfV0lEVEgiLDI4ODQ6IkNVTExfRkFDRSIsMjg4NToiQ1VMTF9GQUNFX01PREUiLDI4ODY6IkZST05UX0ZBQ0UiLDI5Mjg6IkRFUFRIX1JBTkdFIiwyOTI5OiJERVBUSF9URVNUIiwyOTMwOiJERVBUSF9XUklURU1BU0siLDI5MzE6IkRFUFRIX0NMRUFSX1ZBTFVFIiwyOTMyOiJERVBUSF9GVU5DIiwyOTYwOiJTVEVOQ0lMX1RFU1QiLDI5NjE6IlNURU5DSUxfQ0xFQVJfVkFMVUUiLDI5NjI6IlNURU5DSUxfRlVOQyIsMjk2MzoiU1RFTkNJTF9WQUxVRV9NQVNLIiwyOTY0OiJTVEVOQ0lMX0ZBSUwiLDI5NjU6IlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwyOTY2OiJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsMjk2NzoiU1RFTkNJTF9SRUYiLDI5Njg6IlNURU5DSUxfV1JJVEVNQVNLIiwyOTc4OiJWSUVXUE9SVCIsMzAyNDoiRElUSEVSIiwzMDQyOiJCTEVORCIsMzA4ODoiU0NJU1NPUl9CT1giLDMwODk6IlNDSVNTT1JfVEVTVCIsMzEwNjoiQ09MT1JfQ0xFQVJfVkFMVUUiLDMxMDc6IkNPTE9SX1dSSVRFTUFTSyIsMzMxNzoiVU5QQUNLX0FMSUdOTUVOVCIsMzMzMzoiUEFDS19BTElHTk1FTlQiLDMzNzk6Ik1BWF9URVhUVVJFX1NJWkUiLDMzODY6Ik1BWF9WSUVXUE9SVF9ESU1TIiwzNDA4OiJTVUJQSVhFTF9CSVRTIiwzNDEwOiJSRURfQklUUyIsMzQxMToiR1JFRU5fQklUUyIsMzQxMjoiQkxVRV9CSVRTIiwzNDEzOiJBTFBIQV9CSVRTIiwzNDE0OiJERVBUSF9CSVRTIiwzNDE1OiJTVEVOQ0lMX0JJVFMiLDM1NTM6IlRFWFRVUkVfMkQiLDQzNTI6IkRPTlRfQ0FSRSIsNDM1MzoiRkFTVEVTVCIsNDM1NDoiTklDRVNUIiw1MTIwOiJCWVRFIiw1MTIxOiJVTlNJR05FRF9CWVRFIiw1MTIyOiJTSE9SVCIsNTEyMzoiVU5TSUdORURfU0hPUlQiLDUxMjQ6IklOVCIsNTEyNToiVU5TSUdORURfSU5UIiw1MTI2OiJGTE9BVCIsNTM4NjoiSU5WRVJUIiw1ODkwOiJURVhUVVJFIiw2NDAxOiJTVEVOQ0lMX0lOREVYIiw2NDAyOiJERVBUSF9DT01QT05FTlQiLDY0MDY6IkFMUEhBIiw2NDA3OiJSR0IiLDY0MDg6IlJHQkEiLDY0MDk6IkxVTUlOQU5DRSIsNjQxMDoiTFVNSU5BTkNFX0FMUEhBIiw3NjgwOiJLRUVQIiw3NjgxOiJSRVBMQUNFIiw3NjgyOiJJTkNSIiw3NjgzOiJERUNSIiw3OTM2OiJWRU5ET1IiLDc5Mzc6IlJFTkRFUkVSIiw3OTM4OiJWRVJTSU9OIiw5NzI4OiJORUFSRVNUIiw5NzI5OiJMSU5FQVIiLDk5ODQ6Ik5FQVJFU1RfTUlQTUFQX05FQVJFU1QiLDk5ODU6IkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsOTk4NjoiTkVBUkVTVF9NSVBNQVBfTElORUFSIiw5OTg3OiJMSU5FQVJfTUlQTUFQX0xJTkVBUiIsMTAyNDA6IlRFWFRVUkVfTUFHX0ZJTFRFUiIsMTAyNDE6IlRFWFRVUkVfTUlOX0ZJTFRFUiIsMTAyNDI6IlRFWFRVUkVfV1JBUF9TIiwxMDI0MzoiVEVYVFVSRV9XUkFQX1QiLDEwNDk3OiJSRVBFQVQiLDEwNzUyOiJQT0xZR09OX09GRlNFVF9VTklUUyIsMTYzODQ6IkNPTE9SX0JVRkZFUl9CSVQiLDMyNzY5OiJDT05TVEFOVF9DT0xPUiIsMzI3NzA6Ik9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIsMzI3NzE6IkNPTlNUQU5UX0FMUEhBIiwzMjc3MjoiT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIiwzMjc3MzoiQkxFTkRfQ09MT1IiLDMyNzc0OiJGVU5DX0FERCIsMzI3Nzc6IkJMRU5EX0VRVUFUSU9OX1JHQiIsMzI3Nzg6IkZVTkNfU1VCVFJBQ1QiLDMyNzc5OiJGVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLDMyODE5OiJVTlNJR05FRF9TSE9SVF80XzRfNF80IiwzMjgyMDoiVU5TSUdORURfU0hPUlRfNV81XzVfMSIsMzI4MjM6IlBPTFlHT05fT0ZGU0VUX0ZJTEwiLDMyODI0OiJQT0xZR09OX09GRlNFVF9GQUNUT1IiLDMyODU0OiJSR0JBNCIsMzI4NTU6IlJHQjVfQTEiLDMyODczOiJURVhUVVJFX0JJTkRJTkdfMkQiLDMyOTI2OiJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLDMyOTI4OiJTQU1QTEVfQ09WRVJBR0UiLDMyOTM2OiJTQU1QTEVfQlVGRkVSUyIsMzI5Mzc6IlNBTVBMRVMiLDMyOTM4OiJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLDMyOTM5OiJTQU1QTEVfQ09WRVJBR0VfSU5WRVJUIiwzMjk2ODoiQkxFTkRfRFNUX1JHQiIsMzI5Njk6IkJMRU5EX1NSQ19SR0IiLDMyOTcwOiJCTEVORF9EU1RfQUxQSEEiLDMyOTcxOiJCTEVORF9TUkNfQUxQSEEiLDMzMDcxOiJDTEFNUF9UT19FREdFIiwzMzE3MDoiR0VORVJBVEVfTUlQTUFQX0hJTlQiLDMzMTg5OiJERVBUSF9DT01QT05FTlQxNiIsMzMzMDY6IkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsMzM2MzU6IlVOU0lHTkVEX1NIT1JUXzVfNl81IiwzMzY0ODoiTUlSUk9SRURfUkVQRUFUIiwzMzkwMToiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIiwzMzkwMjoiQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIiwzMzk4NDoiVEVYVFVSRTAiLDMzOTg1OiJURVhUVVJFMSIsMzM5ODY6IlRFWFRVUkUyIiwzMzk4NzoiVEVYVFVSRTMiLDMzOTg4OiJURVhUVVJFNCIsMzM5ODk6IlRFWFRVUkU1IiwzMzk5MDoiVEVYVFVSRTYiLDMzOTkxOiJURVhUVVJFNyIsMzM5OTI6IlRFWFRVUkU4IiwzMzk5MzoiVEVYVFVSRTkiLDMzOTk0OiJURVhUVVJFMTAiLDMzOTk1OiJURVhUVVJFMTEiLDMzOTk2OiJURVhUVVJFMTIiLDMzOTk3OiJURVhUVVJFMTMiLDMzOTk4OiJURVhUVVJFMTQiLDMzOTk5OiJURVhUVVJFMTUiLDM0ZTM6IlRFWFRVUkUxNiIsMzQwMDE6IlRFWFRVUkUxNyIsMzQwMDI6IlRFWFRVUkUxOCIsMzQwMDM6IlRFWFRVUkUxOSIsMzQwMDQ6IlRFWFRVUkUyMCIsMzQwMDU6IlRFWFRVUkUyMSIsMzQwMDY6IlRFWFRVUkUyMiIsMzQwMDc6IlRFWFRVUkUyMyIsMzQwMDg6IlRFWFRVUkUyNCIsMzQwMDk6IlRFWFRVUkUyNSIsMzQwMTA6IlRFWFRVUkUyNiIsMzQwMTE6IlRFWFRVUkUyNyIsMzQwMTI6IlRFWFRVUkUyOCIsMzQwMTM6IlRFWFRVUkUyOSIsMzQwMTQ6IlRFWFRVUkUzMCIsMzQwMTU6IlRFWFRVUkUzMSIsMzQwMTY6IkFDVElWRV9URVhUVVJFIiwzNDAyNDoiTUFYX1JFTkRFUkJVRkZFUl9TSVpFIiwzNDA0MToiREVQVEhfU1RFTkNJTCIsMzQwNTU6IklOQ1JfV1JBUCIsMzQwNTY6IkRFQ1JfV1JBUCIsMzQwNjc6IlRFWFRVUkVfQ1VCRV9NQVAiLDM0MDY4OiJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAiLDM0MDY5OiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1giLDM0MDcwOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1giLDM0MDcxOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kiLDM0MDcyOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kiLDM0MDczOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1oiLDM0MDc0OiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1oiLDM0MDc2OiJNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFIiwzNDMzODoiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIiwzNDMzOToiVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFIiwzNDM0MDoiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLDM0MzQxOiJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUiLDM0MzQyOiJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiLDM0MzczOiJWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIiLDM0NDY2OiJOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NDY3OiJDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ2NjA6IkJVRkZFUl9TSVpFIiwzNDY2MToiQlVGRkVSX1VTQUdFIiwzNDgxNjoiU1RFTkNJTF9CQUNLX0ZVTkMiLDM0ODE3OiJTVEVOQ0lMX0JBQ0tfRkFJTCIsMzQ4MTg6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwiLDM0ODE5OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTIiwzNDg3NzoiQkxFTkRfRVFVQVRJT05fQUxQSEEiLDM0OTIxOiJNQVhfVkVSVEVYX0FUVFJJQlMiLDM0OTIyOiJWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQiLDM0OTMwOiJNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzQ5NjI6IkFSUkFZX0JVRkZFUiIsMzQ5NjM6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIiwzNDk2NDoiQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTY1OiJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk3NToiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyIsMzUwNDA6IlNUUkVBTV9EUkFXIiwzNTA0NDoiU1RBVElDX0RSQVciLDM1MDQ4OiJEWU5BTUlDX0RSQVciLDM1NjMyOiJGUkFHTUVOVF9TSEFERVIiLDM1NjMzOiJWRVJURVhfU0hBREVSIiwzNTY2MDoiTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MToiTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYzOiJTSEFERVJfVFlQRSIsMzU2NjQ6IkZMT0FUX1ZFQzIiLDM1NjY1OiJGTE9BVF9WRUMzIiwzNTY2NjoiRkxPQVRfVkVDNCIsMzU2Njc6IklOVF9WRUMyIiwzNTY2ODoiSU5UX1ZFQzMiLDM1NjY5OiJJTlRfVkVDNCIsMzU2NzA6IkJPT0wiLDM1NjcxOiJCT09MX1ZFQzIiLDM1NjcyOiJCT09MX1ZFQzMiLDM1NjczOiJCT09MX1ZFQzQiLDM1Njc0OiJGTE9BVF9NQVQyIiwzNTY3NToiRkxPQVRfTUFUMyIsMzU2NzY6IkZMT0FUX01BVDQiLDM1Njc4OiJTQU1QTEVSXzJEIiwzNTY4MDoiU0FNUExFUl9DVUJFIiwzNTcxMjoiREVMRVRFX1NUQVRVUyIsMzU3MTM6IkNPTVBJTEVfU1RBVFVTIiwzNTcxNDoiTElOS19TVEFUVVMiLDM1NzE1OiJWQUxJREFURV9TVEFUVVMiLDM1NzE2OiJJTkZPX0xPR19MRU5HVEgiLDM1NzE3OiJBVFRBQ0hFRF9TSEFERVJTIiwzNTcxODoiQUNUSVZFX1VOSUZPUk1TIiwzNTcxOToiQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCIsMzU3MjA6IlNIQURFUl9TT1VSQ0VfTEVOR1RIIiwzNTcyMToiQUNUSVZFX0FUVFJJQlVURVMiLDM1NzIyOiJBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgiLDM1NzI0OiJTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04iLDM1NzI1OiJDVVJSRU5UX1BST0dSQU0iLDM2MDAzOiJTVEVOQ0lMX0JBQ0tfUkVGIiwzNjAwNDoiU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0siLDM2MDA1OiJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwzNjAwNjoiRlJBTUVCVUZGRVJfQklORElORyIsMzYwMDc6IlJFTkRFUkJVRkZFUl9CSU5ESU5HIiwzNjA0ODoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSIsMzYwNDk6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUiLDM2MDUwOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwiLDM2MDUxOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSIsMzYwNTM6IkZSQU1FQlVGRkVSX0NPTVBMRVRFIiwzNjA1NDoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIiwzNjA1NToiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQiLDM2MDU3OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMiLDM2MDYxOiJGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCIsMzYwNjQ6IkNPTE9SX0FUVEFDSE1FTlQwIiwzNjA5NjoiREVQVEhfQVRUQUNITUVOVCIsMzYxMjg6IlNURU5DSUxfQVRUQUNITUVOVCIsMzYxNjA6IkZSQU1FQlVGRkVSIiwzNjE2MToiUkVOREVSQlVGRkVSIiwzNjE2MjoiUkVOREVSQlVGRkVSX1dJRFRIIiwzNjE2MzoiUkVOREVSQlVGRkVSX0hFSUdIVCIsMzYxNjQ6IlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQiLDM2MTY4OiJTVEVOQ0lMX0lOREVYOCIsMzYxNzY6IlJFTkRFUkJVRkZFUl9SRURfU0laRSIsMzYxNzc6IlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFIiwzNjE3ODoiUkVOREVSQlVGRkVSX0JMVUVfU0laRSIsMzYxNzk6IlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFIiwzNjE4MDoiUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUiLDM2MTgxOiJSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFIiwzNjE5NDoiUkdCNTY1IiwzNjMzNjoiTE9XX0ZMT0FUIiwzNjMzNzoiTUVESVVNX0ZMT0FUIiwzNjMzODoiSElHSF9GTE9BVCIsMzYzMzk6IkxPV19JTlQiLDM2MzQwOiJNRURJVU1fSU5UIiwzNjM0MToiSElHSF9JTlQiLDM2MzQ2OiJTSEFERVJfQ09NUElMRVIiLDM2MzQ3OiJNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyIsMzYzNDg6Ik1BWF9WQVJZSU5HX1ZFQ1RPUlMiLDM2MzQ5OiJNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTIiwzNzQ0MDoiVU5QQUNLX0ZMSVBfWV9XRUJHTCIsMzc0NDE6IlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsMzc0NDI6IkNPTlRFWFRfTE9TVF9XRUJHTCIsMzc0NDM6IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLDM3NDQ0OiJCUk9XU0VSX0RFRkFVTFRfV0VCR0wifX0se31dLDgzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi8xLjAvbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX19LHsiLi8xLjAvbnVtYmVycyI6ODJ9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksbz1pKGUsW3tidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjQsb2Zmc2V0OjEyLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjI4LHN0cmlkZTo0MH1dKSxsPWEoZSk7bC5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbC5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsbC5hdHRyaWJ1dGVzLm9mZnNldC5sb2NhdGlvbj0yO3ZhciBjPW5ldyBzKGUscixvLGwpO3JldHVybiBjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzL2luZGV4Iiksbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5zaGFkZXI9bix0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5jYXBTaXplPVsxMCwxMCwxMF0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXSx0aGlzLmxpbmVPZmZzZXQ9WzAsMCwwXSx0aGlzLm9wYWNpdHk9MSx0aGlzLmhhc0FscGhhPSExfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXRbMF1bcl09TWF0aC5taW4odFswXVtyXSxlW3JdKSx0WzFdW3JdPU1hdGgubWF4KHRbMV1bcl0sZVtyXSl9bC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0sbC5kcmF3VHJhbnNwYXJlbnQ9bC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlci51bmlmb3Jtczt0aGlzLnNoYWRlci5iaW5kKCk7dmFyIG49ci52aWV3PXQudmlld3x8byxpPXIucHJvamVjdGlvbj10LnByb2plY3Rpb258fG87ci5tb2RlbD10Lm1vZGVsfHxvLHIuY2xpcEJvdW5kcz10aGlzLmNsaXBCb3VuZHMsci5vcGFjaXR5PXRoaXMub3BhY2l0eTt2YXIgYT1uWzEyXSxzPW5bMTNdLGw9blsxNF0sYz1uWzE1XSx1PSh0Ll9vcnRob3x8ITE/MjoxKSp0aGlzLnBpeGVsUmF0aW8qKGlbM10qYStpWzddKnMraVsxMV0qbCtpWzE1XSpjKS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7dGhpcy52YW8uYmluZCgpO2Zvcih2YXIgZj0wO2Y8MzsrK2YpZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGhbZl0qdGhpcy5waXhlbFJhdGlvKSxyLmNhcFNpemU9dGhpcy5jYXBTaXplW2ZdKnUsdGhpcy5saW5lQ291bnRbZl0mJmUuZHJhd0FycmF5cyhlLkxJTkVTLHRoaXMubGluZU9mZnNldFtmXSx0aGlzLmxpbmVDb3VudFtmXSk7dGhpcy52YW8udW5iaW5kKCl9O3ZhciB1PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheSgzKSxlPTA7ZTwzOysrZSl7Zm9yKHZhciByPVtdLG49MTtuPD0yOysrbilmb3IodmFyIGk9LTE7aTw9MTtpKz0yKXt2YXIgYT1bMCwwLDBdO2FbKG4rZSklM109aSxyLnB1c2goYSl9dFtlXT1yfXJldHVybiB0fSgpO2Z1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPXVbbl0sYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgbz1pW2FdO3QucHVzaChlWzBdLGVbMV0sZVsyXSxyWzBdLHJbMV0sclsyXSxyWzNdLG9bMF0sb1sxXSxvWzJdKX1yZXR1cm4gaS5sZW5ndGh9bC51cGRhdGU9ZnVuY3Rpb24odCl7ImxpbmVXaWR0aCJpbih0PXR8fHt9KSYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoLEFycmF5LmlzQXJyYXkodGhpcy5saW5lV2lkdGgpfHwodGhpcy5saW5lV2lkdGg9W3RoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoXSkpLCJjYXBTaXplImluIHQmJih0aGlzLmNhcFNpemU9dC5jYXBTaXplLEFycmF5LmlzQXJyYXkodGhpcy5jYXBTaXplKXx8KHRoaXMuY2FwU2l6ZT1bdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemVdKSksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PSt0Lm9wYWNpdHksdGhpcy5vcGFjaXR5PDEmJih0aGlzLmhhc0FscGhhPSEwKSk7dmFyIGU9dC5jb2xvcnx8W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxyPXQucG9zaXRpb24sbj10LmVycm9yO2lmKEFycmF5LmlzQXJyYXkoZVswXSl8fChlPVtlLGUsZV0pLHImJm4pe3ZhciBpPVtdLGE9ci5sZW5ndGgsbz0wO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMubGluZUNvdW50PVswLDAsMF07Zm9yKHZhciBzPTA7czwzOysrcyl7dGhpcy5saW5lT2Zmc2V0W3NdPW87dDpmb3IodmFyIGw9MDtsPGE7KytsKXtmb3IodmFyIHU9cltsXSxoPTA7aDwzOysraClpZihpc05hTih1W2hdKXx8IWlzRmluaXRlKHVbaF0pKWNvbnRpbnVlIHQ7dmFyIHA9bltsXSxkPWVbc107aWYoQXJyYXkuaXNBcnJheShkWzBdKSYmKGQ9ZVtsXSksMz09PWQubGVuZ3RoP2Q9W2RbMF0sZFsxXSxkWzJdLDFdOjQ9PT1kLmxlbmd0aCYmKGQ9W2RbMF0sZFsxXSxkWzJdLGRbM11dLCF0aGlzLmhhc0FscGhhJiZkWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksIWlzTmFOKHBbMF1bc10pJiYhaXNOYU4ocFsxXVtzXSkpe3ZhciBtO2lmKHBbMF1bc108MCkobT11LnNsaWNlKCkpW3NdKz1wWzBdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLG1bMF0sbVsxXSxtWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsbSksbys9MitmKGksbSxkLHMpO2lmKHBbMV1bc10+MCkobT11LnNsaWNlKCkpW3NdKz1wWzFdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLG1bMF0sbVsxXSxtWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsbSksbys9MitmKGksbSxkLHMpfX10aGlzLmxpbmVDb3VudFtzXT1vLXRoaXMubGluZU9mZnNldFtzXX10aGlzLmJ1ZmZlci51cGRhdGUoaSl9fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4Ijo4NSwiZ2wtYnVmZmVyIjo3OCwiZ2wtdmFvIjoxNTB9XSw4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgb2Zmc2V0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IGNhcFNpemU7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB3b3JsZFBvc2l0aW9uICAgICAgID0gKHdvcmxkUG9zaXRpb24gLyB3b3JsZFBvc2l0aW9uLncpICsgdmVjNChjYXBTaXplICogb2Zmc2V0LCAwLjApO1xuICBnbF9Qb3NpdGlvbiAgICAgICAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBmcmFnQ29sb3IgICAgICAgICAgID0gY29sb3I7XG4gIGZyYWdQb3NpdGlvbiAgICAgICAgPSBwb3NpdGlvbjtcbn0iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZnJhZ1Bvc2l0aW9uKSB8fFxuICAgIGZyYWdDb2xvci5hICogb3BhY2l0eSA9PSAwLlxuICApIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eSAqIGZyYWdDb2xvcjtcbn0iXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJvZmZzZXQiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjEzMixnbHNsaWZ5OjIzMX1dLDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXRleHR1cmUyZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpfHwoaT10LkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVELGE9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQsbz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyxzPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQpO3ZhciBjPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTshbCYmYyYmZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldFBhcmFtZXRlcihlLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCk7bD1uZXcgQXJyYXkocisxKTtmb3IodmFyIG49MDtuPD1yOysrbil7Zm9yKHZhciBpPW5ldyBBcnJheShyKSxhPTA7YTxuOysrYSlpW2FdPXQuQ09MT1JfQVRUQUNITUVOVDArYTtmb3IoYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7bFtuXT1pfX0odCxjKTtBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKTtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIHU9dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT51fHxyPDB8fHI+dSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTt2YXIgZj0xO2lmKCJjb2xvciJpbihuPW58fHt9KSl7aWYoKGY9TWF0aC5tYXgoMHxuLmNvbG9yLDApKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzIik7aWYoZj4xKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVsdGlwbGUgZHJhdyBidWZmZXIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKTtpZihmPnQuZ2V0UGFyYW1ldGVyKGMuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0ICIrZisiIGRyYXcgYnVmZmVycyIpfX12YXIgaD10LlVOU0lHTkVEX0JZVEUscD10LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKTtpZihuLmZsb2F0JiZmPjApe2lmKCFwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMiKTtoPXQuRkxPQVR9ZWxzZSBuLnByZWZlckZsb2F0JiZmPjAmJnAmJihoPXQuRkxPQVQpO3ZhciBtPSEwOyJkZXB0aCJpbiBuJiYobT0hIW4uZGVwdGgpO3ZhciBnPSExOyJzdGVuY2lsImluIG4mJihnPSEhbi5zdGVuY2lsKTtyZXR1cm4gbmV3IGQodCxlLHIsaCxmLG0sZyxjKX07dmFyIGksYSxvLHMsbD1udWxsO2Z1bmN0aW9uIGModCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiB1KHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gZih0KXtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciB1bnN1cHBvcnRlZCIpO2Nhc2UgYTp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBhdHRhY2htZW50Iik7Y2FzZSBvOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGRpbWVuc2lvbnMiKTtjYXNlIHM6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgbWlzc2luZyBhdHRhY2htZW50Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb24iKX19ZnVuY3Rpb24gaCh0LGUscixpLGEsbyl7aWYoIWkpcmV0dXJuIG51bGw7dmFyIHM9bih0LGUscixhLGkpO3JldHVybiBzLm1hZ0ZpbHRlcj10Lk5FQVJFU1Qscy5taW5GaWx0ZXI9dC5ORUFSRVNULHMubWlwU2FtcGxlcz0xLHMuYmluZCgpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUixvLHQuVEVYVFVSRV8yRCxzLmhhbmRsZSwwKSxzfWZ1bmN0aW9uIHAodCxlLHIsbixpKXt2YXIgYT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsYSksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHQuUkVOREVSQlVGRkVSLG4sZSxyKSx0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHQuRlJBTUVCVUZGRVIsaSx0LlJFTkRFUkJVRkZFUixhKSxhfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy5fc2hhcGU9WzB8ZSwwfHJdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9leHQ9cyx0aGlzLmNvbG9yPW5ldyBBcnJheShpKTtmb3IodmFyIGQ9MDtkPGk7KytkKXRoaXMuY29sb3JbZF09bnVsbDt0aGlzLl9jb2xvcl9yYj1udWxsLHRoaXMuZGVwdGg9bnVsbCx0aGlzLl9kZXB0aF9yYj1udWxsLHRoaXMuX2NvbG9yVHlwZT1uLHRoaXMuX3VzZURlcHRoPWEsdGhpcy5fdXNlU3RlbmNpbD1vO3ZhciBtPXRoaXMsZz1bMHxlLDB8cl07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZyx7MDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0ud2lkdGg9dH19LDE6e2dldDpmdW5jdGlvbigpe3JldHVybiBtLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBtLmhlaWdodD10fX19KSx0aGlzLl9zaGFwZVZlY3Rvcj1nLGZ1bmN0aW9uKHQpe3ZhciBlPWModC5nbCkscj10LmdsLG49dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLGk9dC5fc2hhcGVbMF0sYT10Ll9zaGFwZVsxXSxvPXQuY29sb3IubGVuZ3RoLHM9dC5fZXh0LGQ9dC5fdXNlU3RlbmNpbCxtPXQuX3VzZURlcHRoLGc9dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbik7Zm9yKHZhciB2PTA7djxvOysrdil0LmNvbG9yW3ZdPWgocixpLGEsZyxyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCt2KTswPT09bz8odC5fY29sb3JfcmI9cChyLGksYSxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLHMmJnMuZHJhd0J1ZmZlcnNXRUJHTChsWzBdKSk6bz4xJiZzLmRyYXdCdWZmZXJzV0VCR0wobFtvXSk7dmFyIHk9ci5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKTt5P2Q/dC5kZXB0aD1oKHIsaSxhLHkuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTptJiYodC5kZXB0aD1oKHIsaSxhLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6bSYmZD90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6bT90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpkJiYodC5fZGVwdGhfcmI9cChyLGksYSxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgeD1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoeCE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe3QuX2Rlc3Ryb3llZD0hMCxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIuZGVsZXRlRnJhbWVidWZmZXIodC5oYW5kbGUpLHQuaGFuZGxlPW51bGwsdC5kZXB0aCYmKHQuZGVwdGguZGlzcG9zZSgpLHQuZGVwdGg9bnVsbCksdC5fZGVwdGhfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9kZXB0aF9yYiksdC5fZGVwdGhfcmI9bnVsbCk7Zm9yKHY9MDt2PHQuY29sb3IubGVuZ3RoOysrdil0LmNvbG9yW3ZdLmRpc3Bvc2UoKSx0LmNvbG9yW3ZdPW51bGw7dC5fY29sb3JfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9jb2xvcl9yYiksdC5fY29sb3JfcmI9bnVsbCksdShyLGUpLGYoeCl9dShyLGUpfSh0aGlzKX12YXIgbT1kLnByb3RvdHlwZTtmdW5jdGlvbiBnKHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBhPWMobiksbz0wO288dC5jb2xvci5sZW5ndGg7KytvKXQuY29sb3Jbb10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBzPW4uY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhuLkZSQU1FQlVGRkVSKTtzIT09bi5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLHUobixhKSxmKHMpKSx1KG4sYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG0se3NoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkP1swLDBdOnRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9WzB8dCwwfHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IFNoYXBlIHZlY3RvciBtdXN0IGJlIGxlbmd0aCAyIik7dmFyIGU9MHx0WzBdLHI9MHx0WzFdO3JldHVybiBnKHRoaXMsZSxyKSxbZSxyXX0sZW51bWVyYWJsZTohMX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxnKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxtLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LG0uZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjoxNDZ9XSw4NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInNwcmludGYtanMiKS5zcHJpbnRmLGk9dCgiZ2wtY29uc3RhbnRzL2xvb2t1cCIpLGE9dCgiZ2xzbC1zaGFkZXItbmFtZSIpLG89dCgiYWRkLWxpbmUtbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBzPWEoZSl8fCJvZiB1bmtub3duIG5hbWUgKHNlZSBucG0gZ2xzbC1zaGFkZXItbmFtZSkiLGw9InVua25vd24gdHlwZSI7dm9pZCAwIT09ciYmKGw9cj09PWkuRlJBR01FTlRfU0hBREVSPyJmcmFnbWVudCI6InZlcnRleCIpO2Zvcih2YXIgYz1uKCJFcnJvciBjb21waWxpbmcgJXMgc2hhZGVyICVzOlxuIixsLHMpLHU9bigiJXMlcyIsYyx0KSxmPXQuc3BsaXQoIlxuIiksaD17fSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF07aWYoIiIhPT1kJiYiXDAiIT09ZCl7dmFyIG09cGFyc2VJbnQoZC5zcGxpdCgiOiIpWzJdKTtpZihpc05hTihtKSl0aHJvdyBuZXcgRXJyb3IobigiQ291bGQgbm90IHBhcnNlIGVycm9yOiAlcyIsZCkpO2hbbV09ZH19dmFyIGc9byhlKS5zcGxpdCgiXG4iKTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKGhbcCszXXx8aFtwKzJdfHxoW3ArMV0pe3ZhciB2PWdbcF07aWYoYys9disiXG4iLGhbcCsxXSl7dmFyIHk9aFtwKzFdO3k9eS5zdWJzdHIoeS5zcGxpdCgiOiIsMykuam9pbigiOiIpLmxlbmd0aCsxKS50cmltKCksYys9bigiXl5eICVzXG5cbiIseSl9fXJldHVybntsb25nOmMudHJpbSgpLHNob3J0OnUudHJpbSgpfX19LHsiYWRkLWxpbmUtbnVtYmVycyI6OSwiZ2wtY29uc3RhbnRzL2xvb2t1cCI6ODMsImdsc2wtc2hhZGVyLW5hbWUiOjIyMywic3ByaW50Zi1qcyI6MzAxfV0sODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxuPW8ocixsLnZlcnRleCxsLmZyYWdtZW50KSxpPW8ocixsLnBpY2tWZXJ0ZXgsbC5waWNrRnJhZ21lbnQpLGE9cyhyKSx1PXMociksZj1zKHIpLGg9cyhyKSxwPW5ldyBjKHQsbixpLGEsdSxmLGgpO3JldHVybiBwLnVwZGF0ZShlKSx0LmFkZE9iamVjdChwKSxwfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiaW90YS1hcnJheSIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJnbC1zaGFkZXIiKSxzPXQoImdsLWJ1ZmZlciIpLGw9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dGhpcy5wbG90PXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLnBvc2l0aW9uQnVmZmVyPW4sdGhpcy53ZWlnaHRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5pZEJ1ZmZlcj1vLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnNoYXBlPVswLDBdLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5waWNrT2Zmc2V0PTB9dmFyIHUsZj1jLnByb3RvdHlwZSxoPVswLDAsMSwwLDAsMSwxLDAsMSwxLDAsMV07Zi5kcmF3PSh1PVsxLDAsMCwwLDEsMCwwLDAsMV0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXRoaXMuYm91bmRzLG49dGhpcy5udW1WZXJ0aWNlcztpZighKG48PTApKXt2YXIgaT10LmdsLGE9dC5kYXRhQm94LG89clsyXS1yWzBdLHM9clszXS1yWzFdLGw9YVsyXS1hWzBdLGM9YVszXS1hWzFdO3VbMF09MipvL2wsdVs0XT0yKnMvYyx1WzZdPTIqKHJbMF0tYVswXSkvbC0xLHVbN109MiooclsxXS1hWzFdKS9jLTEsZS5iaW5kKCk7dmFyIGY9ZS51bmlmb3JtcztmLnZpZXdUcmFuc2Zvcm09dSxmLnNoYXBlPXRoaXMuc2hhcGU7dmFyIGg9ZS5hdHRyaWJ1dGVzO3RoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGgucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxoLndlaWdodC5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMSksdGhpcy5jb2xvckJ1ZmZlci5iaW5kKCksaC5jb2xvci5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMCksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLDAsbil9fSksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV0sZT1bMCwwLDAsMF07cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMucGxvdCxpPXRoaXMucGlja1NoYWRlcixhPXRoaXMuYm91bmRzLG89dGhpcy5udW1WZXJ0aWNlcztpZighKG88PTApKXt2YXIgcz1uLmdsLGw9bi5kYXRhQm94LGM9YVsyXS1hWzBdLHU9YVszXS1hWzFdLGY9bFsyXS1sWzBdLGg9bFszXS1sWzFdO3RbMF09MipjL2YsdFs0XT0yKnUvaCx0WzZdPTIqKGFbMF0tbFswXSkvZi0xLHRbN109MiooYVsxXS1sWzFdKS9oLTE7Zm9yKHZhciBwPTA7cDw0OysrcCllW3BdPXI+PjgqcCYyNTU7dGhpcy5waWNrT2Zmc2V0PXIsaS5iaW5kKCk7dmFyIGQ9aS51bmlmb3JtcztkLnZpZXdUcmFuc2Zvcm09dCxkLnBpY2tPZmZzZXQ9ZSxkLnNoYXBlPXRoaXMuc2hhcGU7dmFyIG09aS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxtLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksbS53ZWlnaHQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuaWRCdWZmZXIuYmluZCgpLG0ucGlja0lkLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRVMsMCxvKSxyK3RoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXX19fSgpLGYucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdO2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMueERhdGEscz10aGlzLnlEYXRhO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvW2EldGhpcy5zaGFwZVswXV0sc1thL3RoaXMuc2hhcGVbMF18MF1dfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLnNoYXBlfHxbMCwwXSxyPXQueHx8aShlWzBdKSxvPXQueXx8aShlWzFdKSxzPXQuenx8bmV3IEZsb2F0MzJBcnJheShlWzBdKmVbMV0pLGw9ITEhPT10LnpzbW9vdGg7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bzt2YXIgYyx1LGYscCxkPXQuY29sb3JMZXZlbHN8fFswXSxtPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSxnPWQubGVuZ3RoLHY9dGhpcy5ib3VuZHM7bD8oYz12WzBdPXJbMF0sdT12WzFdPW9bMF0sZj12WzJdPXJbci5sZW5ndGgtMV0scD12WzNdPW9bby5sZW5ndGgtMV0pOihjPXZbMF09clswXSsoclsxXS1yWzBdKS8yLHU9dlsxXT1vWzBdKyhvWzFdLW9bMF0pLzIsZj12WzJdPXJbci5sZW5ndGgtMV0rKHJbci5sZW5ndGgtMV0tcltyLmxlbmd0aC0yXSkvMixwPXZbM109b1tvLmxlbmd0aC0xXSsob1tvLmxlbmd0aC0xXS1vW28ubGVuZ3RoLTJdKS8yKTt2YXIgeT0xLyhmLWMpLHg9MS8ocC11KSxiPWVbMF0sXz1lWzFdO3RoaXMuc2hhcGU9W2IsX107dmFyIHc9KGw/KGItMSkqKF8tMSk6YipfKSooaC5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXc7Zm9yKHZhciBUPWEubWFsbG9jVWludDgoNCp3KSxrPWEubWFsbG9jRmxvYXQzMigyKncpLEE9YS5tYWxsb2NVaW50OCgyKncpLE09YS5tYWxsb2NVaW50MzIodyksUz0wLEU9bD9iLTE6YixMPWw/Xy0xOl8sQz0wO0M8TDsrK0Mpe3ZhciBQLEk7bD8oUD14KihvW0NdLXUpLEk9eCoob1tDKzFdLXUpKTooUD1DPF8tMT94KihvW0NdLShvW0MrMV0tb1tDXSkvMi11KTp4KihvW0NdLShvW0NdLW9bQy0xXSkvMi11KSxJPUM8Xy0xP3gqKG9bQ10rKG9bQysxXS1vW0NdKS8yLXUpOngqKG9bQ10rKG9bQ10tb1tDLTFdKS8yLXUpKTtmb3IodmFyIE89MDtPPEU7KytPKXt2YXIgeixEO2w/KHo9eSoocltPXS1jKSxEPXkqKHJbTysxXS1jKSk6KHo9TzxiLTE/eSoocltPXS0ocltPKzFdLXJbT10pLzItYyk6eSoocltPXS0ocltPXS1yW08tMV0pLzItYyksRD1PPGItMT95KihyW09dKyhyW08rMV0tcltPXSkvMi1jKTp5KihyW09dKyhyW09dLXJbTy0xXSkvMi1jKSk7Zm9yKHZhciBSPTA7UjxoLmxlbmd0aDtSKz0yKXt2YXIgRixCLE4saixVPWhbUl0sVj1oW1IrMV0sSD1zW2w/KEMrVikqYisoTytVKTpDKmIrT10scT1uLmxlKGQsSCk7aWYocTwwKUY9bVswXSxCPW1bMV0sTj1tWzJdLGo9bVszXTtlbHNlIGlmKHE9PT1nLTEpRj1tWzQqZy00XSxCPW1bNCpnLTNdLE49bVs0KmctMl0saj1tWzQqZy0xXTtlbHNle3ZhciBHPShILWRbcV0pLyhkW3ErMV0tZFtxXSksWT0xLUcsVz00KnEsWD00KihxKzEpO0Y9WSptW1ddK0cqbVtYXSxCPVkqbVtXKzFdK0cqbVtYKzFdLE49WSptW1crMl0rRyptW1grMl0saj1ZKm1bVyszXStHKm1bWCszXX1UWzQqU109MjU1KkYsVFs0KlMrMV09MjU1KkIsVFs0KlMrMl09MjU1Kk4sVFs0KlMrM109MjU1Kmosa1syKlNdPS41KnorLjUqRCxrWzIqUysxXT0uNSpQKy41KkksQVsyKlNdPVUsQVsyKlMrMV09VixNW1NdPUMqYitPLFMrPTF9fX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShrKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUoQSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoVCksdGhpcy5pZEJ1ZmZlci51cGRhdGUoTSksYS5mcmVlKGspLGEuZnJlZShUKSxhLmZyZWUoQSksYS5mcmVlKE0pfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLndlaWdodEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6ODksImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwiZ2wtYnVmZmVyIjo3OCwiZ2wtc2hhZGVyIjoxMzIsImlvdGEtYXJyYXkiOjIzNSwidHlwZWRhcnJheS1wb29sIjozMDh9XSw4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ZS5leHBvcnRzPXtmcmFnbWVudDpuKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcbn1cbiJdKSx2ZXJ0ZXg6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKSxwaWNrRnJhZ21lbnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcbiAgdmVjNCBpZCA9IGZyYWdJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XG5cbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gaWQvMjU1Ljtcbn1cbiJdKSxwaWNrVmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuYXR0cmlidXRlIHZlYzIgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG52b2lkIG1haW4oKSB7XG4gIHZXZWlnaHQgPSB3ZWlnaHQ7XG5cbiAgZnJhZ0lkID0gcGlja0lkO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKX19LHtnbHNsaWZ5OjIzMX1dLDkwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG5leHRQb3NpdGlvbjtcbmF0dHJpYnV0ZSBmbG9hdCBhcmNMZW5ndGgsIGxpbmVXaWR0aDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuXG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XG5cbnZlYzQgcHJvamVjdCh2ZWMzIHApIHtcbiAgcmV0dXJuIHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBzdGFydFBvaW50ID0gcHJvamVjdChwb3NpdGlvbik7XG4gIHZlYzQgZW5kUG9pbnQgICA9IHByb2plY3QobmV4dFBvc2l0aW9uKTtcblxuICB2ZWMyIEEgPSBzdGFydFBvaW50Lnh5IC8gc3RhcnRQb2ludC53O1xuICB2ZWMyIEIgPSAgIGVuZFBvaW50Lnh5IC8gICBlbmRQb2ludC53O1xuXG4gIGZsb2F0IGNsaXBBbmdsZSA9IGF0YW4oXG4gICAgKEIueSAtIEEueSkgKiBzY3JlZW5TaGFwZS55LFxuICAgIChCLnggLSBBLngpICogc2NyZWVuU2hhcGUueFxuICApO1xuXG4gIHZlYzIgb2Zmc2V0ID0gMC41ICogcGl4ZWxSYXRpbyAqIGxpbmVXaWR0aCAqIHZlYzIoXG4gICAgc2luKGNsaXBBbmdsZSksXG4gICAgLWNvcyhjbGlwQW5nbGUpXG4gICkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc3RhcnRQb2ludC54eSArIHN0YXJ0UG9pbnQudyAqIG9mZnNldCwgc3RhcnRQb2ludC56dyk7XG5cbiAgd29ybGRQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICBwaXhlbEFyY0xlbmd0aCA9IGFyY0xlbmd0aDtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgICAgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgICAgIGRhc2hTY2FsZTtcbnVuaWZvcm0gZmxvYXQgICAgIG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjMyAgICB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCAgIHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0ICAgIGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZFBvc2l0aW9uKSB8fFxuICAgIGZyYWdDb2xvci5hICogb3BhY2l0eSA9PSAwLlxuICApIGRpc2NhcmQ7XG5cbiAgZmxvYXQgZGFzaFdlaWdodCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMihkYXNoU2NhbGUgKiBwaXhlbEFyY0xlbmd0aCwgMCkpLnI7XG4gIGlmKGRhc2hXZWlnaHQgPCAwLjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvciAqIG9wYWNpdHk7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuI2RlZmluZSBGTE9BVF9NQVggIDEuNzAxNDExODRlMzhcbiNkZWZpbmUgRkxPQVRfTUlOICAxLjE3NTQ5NDM1ZS0zOFxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWlrb2xhbHlzZW5rby9nbHNsLXJlYWQtZmxvYXQvYmxvYi9tYXN0ZXIvaW5kZXguZ2xzbFxudmVjNCBwYWNrRmxvYXQoZmxvYXQgdikge1xuICBmbG9hdCBhdiA9IGFicyh2KTtcblxuICAvL0hhbmRsZSBzcGVjaWFsIGNhc2VzXG4gIGlmKGF2IDwgRkxPQVRfTUlOKSB7XG4gICAgcmV0dXJuIHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgfSBlbHNlIGlmKHYgPiBGTE9BVF9NQVgpIHtcbiAgICByZXR1cm4gdmVjNCgxMjcuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xuICB9IGVsc2UgaWYodiA8IC1GTE9BVF9NQVgpIHtcbiAgICByZXR1cm4gdmVjNCgyNTUuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xuICB9XG5cbiAgdmVjNCBjID0gdmVjNCgwLDAsMCwwKTtcblxuICAvL0NvbXB1dGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhXG4gIGZsb2F0IGUgPSBmbG9vcihsb2cyKGF2KSk7XG4gIGZsb2F0IG0gPSBhdiAqIHBvdygyLjAsIC1lKSAtIDEuMDtcblxuICAvL1VucGFjayBtYW50aXNzYVxuICBjWzFdID0gZmxvb3IoMTI4LjAgKiBtKTtcbiAgbSAtPSBjWzFdIC8gMTI4LjA7XG4gIGNbMl0gPSBmbG9vcigzMjc2OC4wICogbSk7XG4gIG0gLT0gY1syXSAvIDMyNzY4LjA7XG4gIGNbM10gPSBmbG9vcig4Mzg4NjA4LjAgKiBtKTtcblxuICAvL1VucGFjayBleHBvbmVudFxuICBmbG9hdCBlYmlhcyA9IGUgKyAxMjcuMDtcbiAgY1swXSA9IGZsb29yKGViaWFzIC8gMi4wKTtcbiAgZWJpYXMgLT0gY1swXSAqIDIuMDtcbiAgY1sxXSArPSBmbG9vcihlYmlhcykgKiAxMjguMDtcblxuICAvL1VucGFjayBzaWduIGJpdFxuICBjWzBdICs9IDEyOC4wICogc3RlcCgwLjAsIC12KTtcblxuICAvL1NjYWxlIGJhY2sgdG8gcmFuZ2VcbiAgcmV0dXJuIGMgLyAyNTUuMDtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRQb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQvMjU1LjAsIHBhY2tGbG9hdChwaXhlbEFyY0xlbmd0aCkueHl6KTtcbn0iXSksbD1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5leHRQb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJhcmNMZW5ndGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImxpbmVXaWR0aCIsdHlwZToiZmxvYXQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifV07ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxsKX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxzLG51bGwsbCl9fSx7ImdsLXNoYWRlciI6MTMyLGdsc2xpZnk6MjMxfV0sOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2x8fHQuc2NlbmUmJnQuc2NlbmUuZ2wscj1mKGUpO3IuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O3ZhciBvPWgoZSk7by5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsby5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLG8uYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixvLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsby5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7Zm9yKHZhciBzPW4oZSksbD1pKGUsW3tidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6Mjgsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTo0LG9mZnNldDozMixzdHJpZGU6NDh9XSksdT1jKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pLHA9MDtwPDEwMjQ7KytwKXUuZGF0YVtwXT0yNTU7dmFyIGQ9YShlLHUpO2Qud3JhcD1lLlJFUEVBVDt2YXIgbT1uZXcgdihlLHIsbyxzLGwsZCk7cmV0dXJuIG0udXBkYXRlKHQpLG19O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCJnbC10ZXh0dXJlMmQiKSxvPW5ldyBVaW50OEFycmF5KDQpLHM9bmV3IEZsb2F0MzJBcnJheShvLmJ1ZmZlcik7dmFyIGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoIm5kYXJyYXkiKSx1PXQoIi4vbGliL3NoYWRlcnMiKSxmPXUuY3JlYXRlU2hhZGVyLGg9dS5jcmVhdGVQaWNrU2hhZGVyLHA9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIHYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgeT12LnByb3RvdHlwZTt5LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0seS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSx5LnBpY2tTbG90cz0xLHkuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seS5kcmF3VHJhbnNwYXJlbnQ9eS5kcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fHAsdmlldzp0LnZpZXd8fHAscHJvamVjdGlvbjp0LnByb2plY3Rpb258fHAsY2xpcEJvdW5kczptKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0seS5kcmF3UGljaz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8cCx2aWV3OnQudmlld3x8cCxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8cCxwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczptKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIG49ISF0LmNvbm5lY3RHYXBzOyJkYXNoU2NhbGUiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKTt2YXIgaT1bXSxhPVtdLG89W10scz0wLHU9MCxmPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLGg9dC5wb3NpdGlvbnx8dC5wb3NpdGlvbnM7aWYoaCl7dmFyIHA9dC5jb2xvcnx8dC5jb2xvcnN8fFswLDAsMCwxXSxtPXQubGluZVdpZHRofHwxLGc9ITE7dDpmb3IoZT0xO2U8aC5sZW5ndGg7KytlKXt2YXIgdix5LHgsYj1oW2UtMV0sXz1oW2VdO2ZvcihhLnB1c2gocyksby5wdXNoKGIuc2xpY2UoKSkscj0wO3I8MzsrK3Ipe2lmKGlzTmFOKGJbcl0pfHxpc05hTihfW3JdKXx8IWlzRmluaXRlKGJbcl0pfHwhaXNGaW5pdGUoX1tyXSkpe2lmKCFuJiZpLmxlbmd0aD4wKXtmb3IodmFyIHc9MDt3PDI0OysrdylpLnB1c2goaVtpLmxlbmd0aC0xMl0pO3UrPTIsZz0hMH1jb250aW51ZSB0fWZbMF1bcl09TWF0aC5taW4oZlswXVtyXSxiW3JdLF9bcl0pLGZbMV1bcl09TWF0aC5tYXgoZlsxXVtyXSxiW3JdLF9bcl0pfUFycmF5LmlzQXJyYXkocFswXSk/KHY9cC5sZW5ndGg+ZS0xP3BbZS0xXTpwLmxlbmd0aD4wP3BbcC5sZW5ndGgtMV06WzAsMCwwLDFdLHk9cC5sZW5ndGg+ZT9wW2VdOnAubGVuZ3RoPjA/cFtwLmxlbmd0aC0xXTpbMCwwLDAsMV0pOnY9eT1wLDM9PT12Lmxlbmd0aCYmKHY9W3ZbMF0sdlsxXSx2WzJdLDFdKSwzPT09eS5sZW5ndGgmJih5PVt5WzBdLHlbMV0seVsyXSwxXSksIXRoaXMuaGFzQWxwaGEmJnZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApLHg9QXJyYXkuaXNBcnJheShtKT9tLmxlbmd0aD5lLTE/bVtlLTFdOm0ubGVuZ3RoPjA/bVttLmxlbmd0aC0xXTpbMCwwLDAsMV06bTt2YXIgVD1zO2lmKHMrPWQoYixfKSxnKXtmb3Iocj0wO3I8MjsrK3IpaS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdKTt1Kz0yLGc9ITF9aS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdLGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQsLXgsdlswXSx2WzFdLHZbMl0sdlszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxzLC14LHlbMF0seVsxXSx5WzJdLHlbM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0scyx4LHlbMF0seVsxXSx5WzJdLHlbM10pLHUrPTR9fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShpKSxhLnB1c2gocyksby5wdXNoKGhbaC5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9Zix0aGlzLnZlcnRleENvdW50PXUsdGhpcy5wb2ludHM9byx0aGlzLmFyY0xlbmd0aD1hLCJkYXNoZXMiaW4gdCl7dmFyIGs9dC5kYXNoZXMuc2xpY2UoKTtmb3Ioay51bnNoaWZ0KDApLGU9MTtlPGsubGVuZ3RoOysrZSlrW2VdPWtbZS0xXStrW2VdO3ZhciBBPWMobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilBLnNldChlLDAsciwwKTsxJmwubGUoayxrW2subGVuZ3RoLTFdKmUvMjU1KT9BLnNldChlLDAsMCwwKTpBLnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoQSl9fSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0seS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gb1swXT1uLG9bMV09cixvWzJdPWUsb1szXT10LHNbMF19KHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9bC5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgZyh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLGM9MS1hLHU9WzAsMCwwXSxmPTA7ZjwzOysrZil1W2ZdPWMqbltmXSthKmlbZl07dmFyIGg9TWF0aC5taW4oYTwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBnKGUsdSxoLHRoaXMucG9pbnRzW2hdKX19LHsiLi9saWIvc2hhZGVycyI6OTAsImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwiZ2wtYnVmZmVyIjo3OCwiZ2wtdGV4dHVyZTJkIjoxNDYsImdsLXZhbyI6MTUwLG5kYXJyYXk6MjU5fV0sOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfX0se31dLDkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLGM9dFs4XSx1PXRbOV0sZj10WzEwXSxoPXRbMTFdLHA9dFsxMl0sZD10WzEzXSxtPXRbMTRdLGc9dFsxNV07cmV0dXJuKGUqby1yKmEpKihmKmctaCptKS0oZSpzLW4qYSkqKHUqZy1oKmQpKyhlKmwtaSphKSoodSptLWYqZCkrKHIqcy1uKm8pKihjKmctaCpwKS0ocipsLWkqbykqKGMqbS1mKnApKyhuKmwtaSpzKSooYypkLXUqcCl9fSx7fV0sOTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGY9bipzLGg9aSpvLHA9aSpzLGQ9aSpsLG09YSpvLGc9YSpzLHY9YSpsO3JldHVybiB0WzBdPTEtZi1kLHRbMV09dSt2LHRbMl09aC1nLHRbM109MCx0WzRdPXUtdix0WzVdPTEtYy1kLHRbNl09cCttLHRbN109MCx0WzhdPWgrZyx0WzldPXAtbSx0WzEwXT0xLWMtZix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSw5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPW4rbixsPWkraSxjPWErYSx1PW4qcyxmPW4qbCxoPW4qYyxwPWkqbCxkPWkqYyxtPWEqYyxnPW8qcyx2PW8qbCx5PW8qYztyZXR1cm4gdFswXT0xLShwK20pLHRbMV09Zit5LHRbMl09aC12LHRbM109MCx0WzRdPWYteSx0WzVdPTEtKHUrbSksdFs2XT1kK2csdFs3XT0wLHRbOF09aCt2LHRbOV09ZC1nLHRbMTBdPTEtKHUrcCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9fSx7fV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDk4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxtPWVbMTNdLGc9ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqbS1mKmQsQT11KmctaCpkLE09dSp2LXAqZCxTPWYqZy1oKm0sRT1mKnYtcCptLEw9aCp2LXAqZyxDPXkqTC14KkUrYipTK18qTS13KkErVCprO2lmKCFDKXJldHVybiBudWxsO3JldHVybiBDPTEvQyx0WzBdPShzKkwtbCpFK2MqUykqQyx0WzFdPShpKkUtbipMLWEqUykqQyx0WzJdPShtKlQtZyp3K3YqXykqQyx0WzNdPShoKnctZipULXAqXykqQyx0WzRdPShsKk0tbypMLWMqQSkqQyx0WzVdPShyKkwtaSpNK2EqQSkqQyx0WzZdPShnKmItZCpULXYqeCkqQyx0WzddPSh1KlQtaCpiK3AqeCkqQyx0WzhdPShvKkUtcypNK2MqaykqQyx0WzldPShuKk0tcipFLWEqaykqQyx0WzEwXT0oZCp3LW0qYit2KnkpKkMsdFsxMV09KGYqYi11KnctcCp5KSpDLHRbMTJdPShzKkEtbypTLWwqaykqQyx0WzEzXT0ocipTLW4qQStpKmspKkMsdFsxNF09KG0qeC1kKl8tZyp5KSpDLHRbMTVdPSh1Kl8tZip4K2gqeSkqQyx0fX0se31dLDk5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9pZGVudGl0eSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsZixoLHAsZCxtPWVbMF0sZz1lWzFdLHY9ZVsyXSx5PWlbMF0seD1pWzFdLGI9aVsyXSxfPXJbMF0sdz1yWzFdLFQ9clsyXTtpZihNYXRoLmFicyhtLV8pPDFlLTYmJk1hdGguYWJzKGctdyk8MWUtNiYmTWF0aC5hYnModi1UKTwxZS02KXJldHVybiBuKHQpO2Y9bS1fLGg9Zy13LHA9di1ULGQ9MS9NYXRoLnNxcnQoZipmK2gqaCtwKnApLGE9eCoocCo9ZCktYiooaCo9ZCksbz1iKihmKj1kKS15KnAscz15KmgteCpmLChkPU1hdGguc3FydChhKmErbypvK3MqcykpPyhhKj1kPTEvZCxvKj1kLHMqPWQpOihhPTAsbz0wLHM9MCk7bD1oKnMtcCpvLGM9cCphLWYqcyx1PWYqby1oKmEsKGQ9TWF0aC5zcXJ0KGwqbCtjKmMrdSp1KSk/KGwqPWQ9MS9kLGMqPWQsdSo9ZCk6KGw9MCxjPTAsdT0wKTtyZXR1cm4gdFswXT1hLHRbMV09bCx0WzJdPWYsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1oLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKGEqbStvKmcrcyp2KSx0WzEzXT0tKGwqbStjKmcrdSp2KSx0WzE0XT0tKGYqbStoKmcrcCp2KSx0WzE1XT0xLHR9fSx7Ii4vaWRlbnRpdHkiOjk3fV0sMTAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSxtPWVbMTJdLGc9ZVsxM10sdj1lWzE0XSx5PWVbMTVdLHg9clswXSxiPXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT14Km4rYipzK18qZit3Km0sdFsxXT14KmkrYipsK18qaCt3KmcsdFsyXT14KmErYipjK18qcCt3KnYsdFszXT14Km8rYip1K18qZCt3KnkseD1yWzRdLGI9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09eCpuK2IqcytfKmYrdyptLHRbNV09eCppK2IqbCtfKmgrdypnLHRbNl09eCphK2IqYytfKnArdyp2LHRbN109eCpvK2IqdStfKmQrdyp5LHg9cls4XSxiPXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09eCpuK2IqcytfKmYrdyptLHRbOV09eCppK2IqbCtfKmgrdypnLHRbMTBdPXgqYStiKmMrXypwK3cqdix0WzExXT14Km8rYip1K18qZCt3KnkseD1yWzEyXSxiPXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT14Km4rYipzK18qZit3Km0sdFsxM109eCppK2IqbCtfKmgrdypnLHRbMTRdPXgqYStiKmMrXypwK3cqdix0WzE1XT14Km8rYip1K18qZCt3KnksdH19LHt9XSwxMDE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fX0se31dLDEwMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fX0se31dLDEwMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMsRT1uWzBdLEw9blsxXSxDPW5bMl0sUD1NYXRoLnNxcnQoRSpFK0wqTCtDKkMpO2lmKE1hdGguYWJzKFApPDFlLTYpcmV0dXJuIG51bGw7RSo9UD0xL1AsTCo9UCxDKj1QLGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10sZj1lWzRdLGg9ZVs1XSxwPWVbNl0sZD1lWzddLG09ZVs4XSxnPWVbOV0sdj1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUwqRSpvK0MqaSxfPUMqRSpvLUwqaSx3PUUqTCpvLUMqaSxUPUwqTCpvK2Esaz1DKkwqbytFKmksQT1FKkMqbytMKmksTT1MKkMqby1FKmksUz1DKkMqbythLHRbMF09cyp4K2YqYittKl8sdFsxXT1sKngraCpiK2cqXyx0WzJdPWMqeCtwKmIrdipfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncrZipUK20qayx0WzVdPWwqdytoKlQrZyprLHRbNl09Yyp3K3AqVCt2KmssdFs3XT11KncrZCpUK3kqayx0WzhdPXMqQStmKk0rbSpTLHRbOV09bCpBK2gqTStnKlMsdFsxMF09YypBK3AqTSt2KlMsdFsxMV09dSpBK2QqTSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMTA0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fX0se31dLDEwNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWYqbix0WzNdPWwqaS1oKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4rZippLHRbMTFdPWwqbitoKmksdH19LHt9XSwxMDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9fSx7fV0sMTA3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDEwODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG09clswXSxnPXJbMV0sdj1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKm0rZVs0XSpnK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKm0rZVs1XSpnK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKm0rZVs2XSpnK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSptK2VbN10qZytlWzExXSp2K2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09Zix0WzldPWgsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qbStzKmcrZip2K2VbMTJdLHRbMTNdPWkqbStsKmcraCp2K2VbMTNdLHRbMTRdPWEqbStjKmcrcCp2K2VbMTRdLHRbMTVdPW8qbSt1KmcrZCp2K2VbMTVdKTtyZXR1cm4gdH19LHt9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJhcnljZW50cmljIiksaT10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIG89YShuLGEocixhKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmlbMF0qKDErb1swXSksLjUqaVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsYyl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciB1PW5ldyBBcnJheSh0Lmxlbmd0aCksZj0wO2Y8dC5sZW5ndGg7KytmKXVbZl09byh0W2ZdLHIsYSxsLGMpO3ZhciBoPTAscD0xLzA7Zm9yKGY9MDtmPHUubGVuZ3RoOysrZil7Zm9yKHZhciBkPTAsbT0wO208MjsrK20pZCs9TWF0aC5wb3codVtmXVttXS1lW21dLDIpO2Q8cCYmKHA9ZCxoPWYpfXZhciBnPWZ1bmN0aW9uKHQsZSl7aWYoMj09PXQubGVuZ3RoKXtmb3IodmFyIHI9MCxhPTAsbz0wO288MjsrK28pcis9TWF0aC5wb3coZVtvXS10WzBdW29dLDIpLGErPU1hdGgucG93KGVbb10tdFsxXVtvXSwyKTtyZXR1cm4gcj1NYXRoLnNxcnQociksYT1NYXRoLnNxcnQoYSkscithPDFlLTY/WzEsMF06W2EvKHIrYSksci8oYStyKV19aWYoMz09PXQubGVuZ3RoKXt2YXIgcz1bMCwwXTtyZXR1cm4gaSh0WzBdLHRbMV0sdFsyXSxlLHMpLG4odCxzKX1yZXR1cm5bXX0odSxlKSx2PTA7Zm9yKGY9MDtmPDM7KytmKXtpZihnW2ZdPC0uMDAxfHxnW2ZdPjEuMDAwMSlyZXR1cm4gbnVsbDt2Kz1nW2ZdfWlmKE1hdGguYWJzKHYtMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5baCxzKHQsZyksZ119fSx7YmFyeWNlbnRyaWM6MTQsInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiOjI3MH1dLDExMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsXG4gICAgICAgICAgICwgdmlld1xuICAgICAgICAgICAsIHByb2plY3Rpb25cbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0KHBvc2l0aW9uKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHZlYzQocG9zaXRpb24gLCAxLjApO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksYT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuLy8jcHJhZ21hIGdsc2xpZnk6IGJlY2ttYW5uID0gcmVxdWlyZShnbHNsLXNwZWN1bGFyLWJlY2ttYW5uKSAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKGZfY29sb3IuYSA9PSAwLjAgfHxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSlcbiAgKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICAvL2Zsb2F0IHNwZWN1bGFyID0gbWF4KDAuMCwgYmVja21hbm4oTCwgViwgTiwgcm91Z2huZXNzKSk7IC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSB2ZWM0KGZfY29sb3IucmdiLCAxLjApICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBmX2NvbG9yLmE7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59Il0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCAsMC4wICwwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iXSksYz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwgMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksZj1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pLGg9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59Il0pLHA9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbn0iXSksZD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGNvbnRvdXJDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbnRvdXJDb2xvciwgMS4wKTtcbn1cbiJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDppLGZyYWdtZW50OmEsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci5wb2ludFNoYWRlcj17dmVydGV4OmwsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToicG9pbnRTaXplIix0eXBlOiJmbG9hdCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6dSxmcmFnbWVudDpmLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XX0sci5wb2ludFBpY2tTaGFkZXI9e3ZlcnRleDpoLGZyYWdtZW50OmYsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIuY29udG91clNoYWRlcj17dmVydGV4OnAsZnJhZ21lbnQ6ZCxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7Z2xzbGlmeToyMzF9XSwxMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGY9dCgiY29sb3JtYXAiKSxoPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vbGliL3NoYWRlcnMiKSxtPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxnPWQubWVzaFNoYWRlcix2PWQud2lyZVNoYWRlcix5PWQucG9pbnRTaGFkZXIseD1kLnBpY2tTaGFkZXIsYj1kLnBvaW50UGlja1NoYWRlcixfPWQuY29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sVCxrLEEsTSxTKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1hLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9dSx0aGlzLnRyaWFuZ2xlTm9ybWFscz1oLHRoaXMudHJpYW5nbGVVVnM9Zix0aGlzLnRyaWFuZ2xlSWRzPWMsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPWcsdGhpcy5lZGdlVVZzPXYsdGhpcy5lZGdlSWRzPW0sdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXgsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9VCx0aGlzLnBvaW50U2l6ZXM9ayx0aGlzLnBvaW50SWRzPWIsdGhpcy5wb2ludFZBTz1BLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1NLHRoaXMuY29udG91clZBTz1TLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrVmVydGV4PSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5vcGFjaXR5c2NhbGU9ITEsdGhpcy5fbW9kZWw9dyx0aGlzLl92aWV3PXcsdGhpcy5fcHJvamVjdGlvbj13LHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIGs9VC5wcm90b3R5cGU7ZnVuY3Rpb24gQSh0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9ZnVuY3Rpb24gTSh0KXt2YXIgZT1uKHQsZy52ZXJ0ZXgsZy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfWZ1bmN0aW9uIFModCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LHkudmVydGV4LHkuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBMKHQpe3ZhciBlPW4odCx4LnZlcnRleCx4LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBDKHQpe3ZhciBlPW4odCxiLnZlcnRleCxiLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gUCh0KXt2YXIgZT1uKHQsXy52ZXJ0ZXgsXy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9ay5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxrLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0say5waWNrU2xvdHM9MSxrLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LGsuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLG09bltmXVsxXSxnPWlbZl0sdj0xLWcseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW21dLGI9MDtiPDM7KytiKW9bcysrXT1nKnlbYl0rdip4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSxrLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSx0aGlzLmhhc0FscGhhPSEwKSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSksbj1uZXcgVWludDhBcnJheSgxMDI0KSxpPTA7aTwyNTY7KytpKXtmb3IodmFyIGE9cltpXSxvPTA7bzwzOysrbyluWzQqaStvXT1hW29dO25bNCppKzNdPWU/MjU1KkEoaS8yNTUsZSk6MjU1KmFbM119cmV0dXJuIHUobixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCx0aGlzLm9wYWNpdHlzY2FsZSkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnM7aWYobiYmcil7dmFyIGk9W10sYT1bXSxsPVtdLGM9W10saD1bXSxwPVtdLGQ9W10sbT1bXSxnPVtdLHY9W10seT1bXSx4PVtdLGI9W10sXz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bjt2YXIgdz10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLGs9dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sTT12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sTSkpLFR8fHd8fCh3PXMudmVydGV4Tm9ybWFscyhyLG4saykpO3ZhciBTPXQudmVydGV4Q29sb3JzLEU9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSxDPXQudmVydGV4VVZzLFA9dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsTz10LmNlbGxJbnRlbnNpdHksej0xLzAsRD0tMS8wO2lmKCFDJiYhSSlpZihQKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKXo9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLEQ9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBSPTA7UjxQLmxlbmd0aDsrK1Ipe3ZhciBGPVBbUl07ej1NYXRoLm1pbih6LEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGlmKE8paWYodC5jZWxsSW50ZW5zaXR5Qm91bmRzKXo9K3QuY2VsbEludGVuc2l0eUJvdW5kc1swXSxEPSt0LmNlbGxJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IoUj0wO1I8Ty5sZW5ndGg7KytSKXtGPU9bUl07ej1NYXRoLm1pbih6LEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGZvcihSPTA7UjxuLmxlbmd0aDsrK1Ipe0Y9bltSXVsyXTt6PU1hdGgubWluKHosRiksRD1NYXRoLm1heChELEYpfXRoaXMuaW50ZW5zaXR5PVB8fChPfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSksdGhpcy5waWNrVmVydGV4PSEoT3x8RSk7dmFyIEI9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKFI9MDtSPG4ubGVuZ3RoOysrUilmb3IodmFyIGo9bltSXSxVPTA7VTwzOysrVSkhaXNOYU4oaltVXSkmJmlzRmluaXRlKGpbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0saltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0saltVXSkpO3ZhciBWPTAsSD0wLHE9MDt0OmZvcihSPTA7UjxyLmxlbmd0aDsrK1Ipe3ZhciBHPXJbUl07c3dpdGNoKEcubGVuZ3RoKXtjYXNlIDE6Zm9yKGo9bltXPUdbMF1dLFU9MDtVPDM7KytVKWlmKGlzTmFOKGpbVV0pfHwhaXNGaW5pdGUoaltVXSkpY29udGludWUgdDt2LnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpMLHRoaXMub3BhY2l0eXNjYWxlJiZQP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqQSgoUFtXXS16KS8oRC16KSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD95LnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooeS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1DP0NbV106UD9bKFBbV10teikvKEQteiksMF06ST9JW1JdOk8/WyhPW1JdLXopLyhELXopLDBdOlsoalsyXS16KS8oRC16KSwwXSx4LnB1c2goWlswXSxaWzFdKSxCP2IucHVzaChCW1ddKTpiLnB1c2goTiksXy5wdXNoKFIpLHErPTE7YnJlYWs7Y2FzZSAyOmZvcihVPTA7VTwyOysrVSl7aj1uW1c9R1tVXV07Zm9yKHZhciBZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHR9Zm9yKFU9MDtVPDI7KytVKXtqPW5bVz1HW1VdXTtwLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpMLHRoaXMub3BhY2l0eXNjYWxlJiZQP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqQSgoUFtXXS16KS8oRC16KSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1DP0NbV106UD9bKFBbV10teikvKEQteiksMF06ST9JW1JdOk8/WyhPW1JdLXopLyhELXopLDBdOlsoalsyXS16KS8oRC16KSwwXSxtLnB1c2goWlswXSxaWzFdKSxnLnB1c2goUil9SCs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihqPW5bVz1HW1VdXSxZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgVyxYLFosSjtqPW5bVz1HWzItVV1dO2kucHVzaChqWzBdLGpbMV0salsyXSksKFg9Uz9TW1ddOkU/RVtSXTpMKT90aGlzLm9wYWNpdHlzY2FsZSYmUD9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KkEoKFBbV10teikvKEQteiksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGEucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpOmEucHVzaCguNSwuNSwuNSwxKSxaPUM/Q1tXXTpQP1soUFtXXS16KS8oRC16KSwwXTpJP0lbUl06Tz9bKE9bUl0teikvKEQteiksMF06WyhqWzJdLXopLyhELXopLDBdLGMucHVzaChaWzBdLFpbMV0pLEo9dz93W1ddOlRbUl0sbC5wdXNoKEpbMF0sSlsxXSxKWzJdKSxoLnB1c2goUil9Vis9MX19dGhpcy5wb2ludENvdW50PXEsdGhpcy5lZGdlQ291bnQ9SCx0aGlzLnRyaWFuZ2xlQ291bnQ9Vix0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZSh2KSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZSh5KSx0aGlzLnBvaW50VVZzLnVwZGF0ZSh4KSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKGIpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShfKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShwKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKGQpLHRoaXMuZWRnZVVWcy51cGRhdGUobSksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZykpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGkpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaCkpfX0say5kcmF3VHJhbnNwYXJlbnQ9ay5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6dy5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGYsaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO3MubGlnaHRQb3NpdGlvbltvXT1wL2h9dGhpcy50cmlhbmdsZUNvdW50PjAmJigoZj10aGlzLnRyaVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSk7dGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCYmKChmPXRoaXMubGluZVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGY9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoZj10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSxrLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fTsoKHM9dGhpcy5waWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LGsucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9ucyxpPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKWlbYV09bltyW2FdXTt2YXIgbz10LmNvb3JkWzBdLHM9dC5jb29yZFsxXTtpZighdGhpcy5waWNrVmVydGV4KXt2YXIgbD10aGlzLnBvc2l0aW9uc1tyWzBdXSxjPXRoaXMucG9zaXRpb25zW3JbMV1dLHU9dGhpcy5wb3NpdGlvbnNbclsyXV0sZj1bKGxbMF0rY1swXSt1WzBdKS8zLChsWzFdK2NbMV0rdVsxXSkvMywobFsyXStjWzJdK3VbMl0pLzNdO3JldHVybntfY2VsbENlbnRlcjohMCxwb3NpdGlvbjpbbyxzXSxpbmRleDplLGNlbGw6cixjZWxsSWQ6ZSxpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbZV0sZGF0YUNvb3JkaW5hdGU6Zn19dmFyIGg9bShpLFtvKnRoaXMucGl4ZWxSYXRpbyx0aGlzLl9yZXNvbHV0aW9uWzFdLXMqdGhpcy5waXhlbFJhdGlvXSx0aGlzLl9tb2RlbCx0aGlzLl92aWV3LHRoaXMuX3Byb2plY3Rpb24sdGhpcy5fcmVzb2x1dGlvbik7aWYoIWgpcmV0dXJuIG51bGw7dmFyIHA9aFsyXSxkPTA7Zm9yKGE9MDthPHIubGVuZ3RoOysrYSlkKz1wW2FdKnRoaXMuaW50ZW5zaXR5W3JbYV1dO3JldHVybntwb3NpdGlvbjpoWzFdLGluZGV4OnJbaFswXV0sY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTpkLGRhdGFDb29yZGluYXRlOnRoaXMucG9zaXRpb25zW3JbaFswXV1dfX0say5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuY29udG91clNoYWRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9dC5nZXRFeHRlbnNpb24oIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiZGVyaXZhdGl2ZXMgbm90IHN1cHBvcnRlZCIpO3ZhciBuPU0odCkscz1TKHQpLGw9RSh0KSxjPUwodCksZj1DKHQpLGg9UCh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxtPWkodCksZz1pKHQpLHY9aSh0KSx5PWkodCkseD1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOnksdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksYj1pKHQpLF89aSh0KSx3PWkodCksaz1pKHQpLEE9YSh0LFt7YnVmZmVyOmIsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjprLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOl8sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp3LHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksST1pKHQpLE89aSh0KSx6PWkodCksRD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkQsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1hKHQsW3tidWZmZXI6Qix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLGo9bmV3IFQodCxwLG4scyxsLGMsZixoLGQseSxtLGcsdix4LGIsayxfLHcsQSxJLFIsTyx6LEQsRixCLE4pO3JldHVybiBqLnVwZGF0ZShlKSxqfX0seyIuL2xpYi9jbG9zZXN0LXBvaW50IjoxMTAsIi4vbGliL3NoYWRlcnMiOjExMSxjb2xvcm1hcDo1MywiZ2wtYnVmZmVyIjo3OCwiZ2wtbWF0NC9pbnZlcnQiOjk4LCJnbC1tYXQ0L211bHRpcGx5IjoxMDAsImdsLXNoYWRlciI6MTMyLCJnbC10ZXh0dXJlMmQiOjE0NiwiZ2wtdmFvIjoxNTAsbmRhcnJheToyNTksbm9ybWFsczoyNjEsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjoyOTEsInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFswLDAsMCwxLDEsMCwxLDFdKSxzPWkoZSxhLmJveFZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0JveD0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wbG90LG89dGhpcy5zaGFkZXIsYz1hLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixvLnVuaWZvcm1zLmxvPXMsby51bmlmb3Jtcy5oaT1sLG8udW5pZm9ybXMuY29sb3I9aSxjLmRyYXdBcnJheXMoYy5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxMTYsImdsLWJ1ZmZlciI6NzgsImdsLXNoYWRlciI6MTMyfV0sMTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9aShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixhLGwpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja1NoYWRlcj1uLHRoaXMudGlja3M9W1tdLFtdXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQtZX12YXIgYyx1LGYsaCxwLGQ9cy5wcm90b3R5cGU7ZC5kcmF3PShjPVswLDBdLHU9WzAsMF0sZj1bMCwwXSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBsb3QsZT10aGlzLnZibyxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrcyxpPXQuZ2wsYT10Ll90aWNrQm91bmRzLG89dC5kYXRhQm94LHM9dC52aWV3Qm94LGw9dC5ncmlkTGluZVdpZHRoLGg9dC5ncmlkTGluZUNvbG9yLHA9dC5ncmlkTGluZUVuYWJsZSxkPXQucGl4ZWxSYXRpbyxtPTA7bTwyOysrbSl7dmFyIGc9YVttXSx2PWFbbSsyXS1nLHk9LjUqKG9bbSsyXStvW21dKSx4PW9bbSsyXS1vW21dO3VbbV09Mip2L3gsY1ttXT0yKihnLXkpL3h9ci5iaW5kKCksZS5iaW5kKCksci5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCksci51bmlmb3Jtcy5kYXRhU2hpZnQ9YyxyLnVuaWZvcm1zLmRhdGFTY2FsZT11O3ZhciBiPTA7Zm9yKG09MDttPDI7KyttKXtmWzBdPWZbMV09MCxmW21dPTEsci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMubGluZVdpZHRoPWxbbV0vKHNbbSsyXS1zW21dKSpkLHIudW5pZm9ybXMuY29sb3I9aFttXTt2YXIgXz02Km5bbV0ubGVuZ3RoO3BbbV0mJl8mJmkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyxiLF8pLGIrPV99fSksZC5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0saT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsYz10aGlzLnZibyx1PXRoaXMudGlja1NoYWRlcixmPXRoaXMudGlja3MsaD1zLmdsLHA9cy5fdGlja0JvdW5kcyxkPXMuZGF0YUJveCxtPXMudmlld0JveCxnPXMucGl4ZWxSYXRpbyx2PXMuc2NyZWVuQm94LHk9dlsyXS12WzBdLHg9dlszXS12WzFdLGI9bVsyXS1tWzBdLF89bVszXS1tWzFdLHc9MDt3PDI7Kyt3KXt2YXIgVD1wW3ddLGs9cFt3KzJdLVQsQT0uNSooZFt3KzJdK2Rbd10pLE09ZFt3KzJdLWRbd107ZVt3XT0yKmsvTSx0W3ddPTIqKFQtQSkvTX1lWzBdKj1iL3ksdFswXSo9Yi95LGVbMV0qPV8veCx0WzFdKj1fL3gsdS5iaW5kKCksYy5iaW5kKCksdS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9dS51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEU9cy50aWNrTWFya0xlbmd0aCxMPXMudGlja01hcmtXaWR0aCxDPXMudGlja01hcmtDb2xvcixQPTYqZlswXS5sZW5ndGgsST1NYXRoLm1pbihhLmdlKGZbMF0sKGRbMF0tcFswXSkvKHBbMl0tcFswXSksbCksZlswXS5sZW5ndGgpLE89TWF0aC5taW4oYS5ndChmWzBdLChkWzJdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGZbMF0ubGVuZ3RoKSx6PTArNipJLEQ9NipNYXRoLm1heCgwLE8tSSksUj1NYXRoLm1pbihhLmdlKGZbMV0sKGRbMV0tcFsxXSkvKHBbM10tcFsxXSksbCksZlsxXS5sZW5ndGgpLEY9TWF0aC5taW4oYS5ndChmWzFdLChkWzNdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGZbMV0ubGVuZ3RoKSxCPVArNipSLE49NipNYXRoLm1heCgwLEYtUik7aVswXT0yKihtWzBdLUVbMV0pL3ktMSxpWzFdPShtWzNdK21bMV0pL3gtMSxvWzBdPUVbMV0qZy95LG9bMV09TFsxXSpnL3gsTiYmKFMuY29sb3I9Q1sxXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyxCLE4pKSxpWzBdPShtWzJdK21bMF0pL3ktMSxpWzFdPTIqKG1bMV0tRVswXSkveC0xLG9bMF09TFswXSpnL3ksb1sxXT1FWzBdKmcveCxEJiYoUy5jb2xvcj1DWzBdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLHosRCkpLGlbMF09MioobVsyXStFWzNdKS95LTEsaVsxXT0obVszXSttWzFdKS94LTEsb1swXT1FWzNdKmcveSxvWzFdPUxbM10qZy94LE4mJihTLmNvbG9yPUNbM10sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsQixOKSksaVswXT0obVsyXSttWzBdKS95LTEsaVsxXT0yKihtWzNdK0VbMl0pL3gtMSxvWzBdPUxbMl0qZy95LG9bMV09RVsyXSpnL3gsRCYmKFMuY29sb3I9Q1syXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyx6LEQpKX19KCksZC51cGRhdGU9KGg9WzEsMSwtMSwtMSwxLC0xXSxwPVsxLC0xLDEsMSwtMSwtMV0sZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGlja3Mscj10LmJvdW5kcyxuPW5ldyBGbG9hdDMyQXJyYXkoMTgqKGVbMF0ubGVuZ3RoK2VbMV0ubGVuZ3RoKSksaT0odGhpcy5wbG90Lnplcm9MaW5lRW5hYmxlLDApLGE9W1tdLFtdXSxvPTA7bzwyOysrbylmb3IodmFyIHM9YVtvXSxsPWVbb10sYz1yW29dLHU9cltvKzJdLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIGQ9KGxbZl0ueC1jKS8odS1jKTtzLnB1c2goZCk7Zm9yKHZhciBtPTA7bTw2OysrbSluW2krK109ZCxuW2krK109aFttXSxuW2krK109cFttXX10aGlzLnRpY2tzPWEsdGhpcy52Ym8udXBkYXRlKG4pfSksZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjExNiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxLCJnbC1idWZmZXIiOjc4LCJnbC1zaGFkZXIiOjEzMn1dLDExNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbLTEsLTEsLTEsMSwxLC0xLDEsMV0pLHM9aShlLGEubGluZVZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0xpbmU9KHM9WzAsMF0sbD1bMCwwXSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5wbG90LGM9dGhpcy5zaGFkZXIsdT1vLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixjLnVuaWZvcm1zLnN0YXJ0PXMsYy51bmlmb3Jtcy5lbmQ9bCxjLnVuaWZvcm1zLndpZHRoPWkqby5waXhlbFJhdGlvLGMudW5pZm9ybXMuY29sb3I9YSx1LmRyYXdBcnJheXModS5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxMTYsImdsLWJ1ZmZlciI6NzgsImdsLXNoYWRlciI6MTMyfV0sMTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XG59XG4iXSk7ZS5leHBvcnRzPXtsaW5lVmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBzdGFydCwgZW5kO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmVjMiBwZXJwKHZlYzIgdikge1xuICByZXR1cm4gdmVjMih2LnksIC12LngpO1xufVxuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgZGVsdGEgPSBub3JtYWxpemUocGVycChzdGFydCAtIGVuZCkpO1xuICB2ZWMyIG9mZnNldCA9IG1peChzdGFydCwgZW5kLCAwLjUgKiAoY29vcmQueSsxLjApKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihvZmZzZXQgKyAwLjUgKiB3aWR0aCAqIGRlbHRhICogY29vcmQueCksIDAsIDEpO1xufVxuIl0pLGxpbmVGcmFnOmksdGV4dFZlcnQ6bihbIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIl0pLHRleHRGcmFnOmksZ3JpZFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcbn1cbiJdKSxncmlkRnJhZzppLGJveFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgbG8sIGhpO1xuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4obWl4KGxvLCBoaSwgY29vcmQpKSwgMCwgMSk7XG59XG4iXSksdGlja1ZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIl0pfX0se2dsc2xpZnk6MjMxfV0sMTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxzLnRleHRWZXJ0LHMudGV4dEZyYWcpO3JldHVybiBuZXcgbCh0LHIsYSl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCJ0ZXh0LWNhY2hlIiksbz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHM9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX12YXIgYyx1LGYsaCxwLGQsbT1sLnByb3RvdHlwZTttLmRyYXdUaWNrcz0oYz1bMCwwXSx1PVswLDBdLGY9WzAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tYW3RdLGk9dGhpcy50aWNrT2Zmc2V0W3RdLGE9ZS5nbCxzPWUudmlld0JveCxsPWUuZGF0YUJveCxoPWUuc2NyZWVuQm94LHA9ZS5waXhlbFJhdGlvLGQ9ZS50aWNrRW5hYmxlLG09ZS50aWNrUGFkLGc9ZS50aWNrQ29sb3Isdj1lLnRpY2tBbmdsZSx5PWUubGFiZWxFbmFibGUseD1lLmxhYmVsUGFkLGI9ZS5sYWJlbENvbG9yLF89ZS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFt0XSxUPXRoaXMubGFiZWxDb3VudFt0XSxrPW8ubHQobixsW3RdKSxBPW8ubGUobixsW3QrMl0pO2NbMF09Y1sxXT0wLGNbdF09MSx1W3RdPShzWzIrdF0rc1t0XSkvKGhbMit0XS1oW3RdKS0xO3ZhciBNPTIvaFsyKygxXnQpXS1oWzFedF07dVsxXnRdPU0qc1sxXnRdLTEsZFt0XSYmKHVbMV50XS09TSpwKm1bdF0sazxBJiZpW0FdPmlba10mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWdbdF0sci51bmlmb3Jtcy5hbmdsZT12W3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW2tdLGlbQV0taVtrXSkpKSx5W3RdJiZUJiYodVsxXnRdLT1NKnAqeFt0XSxyLnVuaWZvcm1zLmRhdGFBeGlzPWYsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdF0sci51bmlmb3Jtcy5hbmdsZT1fW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyx3LFQpKSx1WzFedF09TSpzWzIrKDFedCldLTEsZFt0KzJdJiYodVsxXnRdKz1NKnAqbVt0KzJdLGs8QSYmaVtBXT5pW2tdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1nW3QrMl0sci51bmlmb3Jtcy5hbmdsZT12W3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLGlba10saVtBXS1pW2tdKSkpLHlbdCsyXSYmVCYmKHVbMV50XSs9TSpwKnhbdCsyXSxyLnVuaWZvcm1zLmRhdGFBeGlzPWYsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPV9bdCsyXSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxUKSl9KSxtLmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsaT1yLmdsLGE9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1hW3VdKS8oYVsyK3VdLWFbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksbS5iaW5kPShoPVswLDBdLHA9WzAsMF0sZD1bMCwwXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dC5fdGlja0JvdW5kcyxuPXQuZGF0YUJveCxpPXQuc2NyZWVuQm94LGE9dC52aWV3Qm94O2UuYmluZCgpO2Zvcih2YXIgbz0wO288MjsrK28pe3ZhciBzPXJbb10sbD1yW28rMl0tcyxjPS41KihuW28rMl0rbltvXSksdT1uW28rMl0tbltvXSxmPWFbb10sbT1hW28rMl0tZixnPWlbb10sdj1pW28rMl0tZztwW29dPTIqbC91Km0vdixoW29dPTIqKHMtYykvdSptL3Z9ZFsxXT0yKnQucGl4ZWxSYXRpby8oaVszXS1pWzFdKSxkWzBdPWRbMV0qKGlbM10taVsxXSkvKGlbMl0taVswXSksZS51bmlmb3Jtcy5kYXRhU2NhbGU9cCxlLnVuaWZvcm1zLmRhdGFTaGlmdD1oLGUudW5pZm9ybXMudGV4dFNjYWxlPWQsdGhpcy52Ym8uYmluZCgpLGUuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9KSxtLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLHM9W10sbD10LnRpY2tzLGM9dC5ib3VuZHM7Zm9yKG89MDtvPDI7KytvKXt2YXIgdT1bTWF0aC5mbG9vcihzLmxlbmd0aC8zKV0sZj1bLTEvMF0saD1sW29dO2ZvcihlPTA7ZTxoLmxlbmd0aDsrK2Upe3ZhciBwPWhbZV0sZD1wLngsbT1wLnRleHQsZz1wLmZvbnR8fCJzYW5zLXNlcmlmIjtpPXAuZm9udFNpemV8fDEyO2Zvcih2YXIgdj0xLyhjW28rMl0tY1tvXSkseT1jW29dLHg9bS5zcGxpdCgiXG4iKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZm9yKG49YShnLHhbYl0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilzLnB1c2gobltyXSppLC1uW3IrMV0qaS1iKmkqMS4yLChkLXkpKnYpO3UucHVzaChNYXRoLmZsb29yKHMubGVuZ3RoLzMpKSxmLnB1c2goZCl9dGhpcy50aWNrT2Zmc2V0W29dPXUsdGhpcy50aWNrWFtvXT1mfWZvcihvPTA7bzwyOysrbyl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC5sYWJlbEZvbnRbb10sdC5sYWJlbHNbb10se3RleHRBbGlnbjoiY2VudGVyIn0pLmRhdGEsaT10LmxhYmVsU2l6ZVtvXSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMubGFiZWxDb3VudFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMubGFiZWxPZmZzZXRbb119Zm9yKHRoaXMudGl0bGVPZmZzZXQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxpPXQudGl0bGVTaXplLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUocyl9LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MTE2LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsImdsLWJ1ZmZlciI6NzgsImdsLXNoYWRlciI6MTMyLCJ0ZXh0LWNhY2hlIjozMDN9XSwxMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWkoYyksYy50ZXh0PWEoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksaT10KCIuL2xpYi9ncmlkIiksYT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGY9dGhpcy56ZXJvTGluZUVuYWJsZSxoPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihmWzBdfHxmWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGZbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIG09ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKG0sZVsxXSxtLGVbM10scFtkXSxoW2RdKTpvLmRyYXdMaW5lKGVbMF0sbSxlWzJdLG0scFtkXSxoW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIGc9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLHY9dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IoZ1sxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqdlsxXSppLHJbMF0sclszXSsuNSp2WzNdKmksdlsxXSx5WzFdKSxnWzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqdlswXSppLHJbMV0sclsyXSsuNSp2WzJdKmksclsxXSx2WzBdLHlbMF0pLGdbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41KnZbMV0qaSxyWzJdLHJbM10rLjUqdlszXSppLHZbM10seVszXSksZ1syXSYmby5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzNdLHJbMl0rLjUqdlsyXSppLHJbM10sdlsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbCx0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgZj1jW3VdLnBpY2soYSxvLGwpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0KXx8ISF0LnRpdGxlRW5hYmxlLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoZiksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFsieCIsInkiXSxsYWJlbFNpemU6dC5sYWJlbFNpemV8fFsxMiwxMl0sbGFiZWxGb250OnQubGFiZWxGb250fHxbInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGl0bGU6dC50aXRsZXx8IiIsdGl0bGVTaXplOnQudGl0bGVTaXplfHwxOCx0aXRsZUZvbnQ6dC50aXRsZUZvbnR8fCJzYW5zLXNlcmlmIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjExMywiLi9saWIvZ3JpZCI6MTE0LCIuL2xpYi9saW5lIjoxMTUsIi4vbGliL3RleHQiOjExNywiZ2wtc2VsZWN0LXN0YXRpYyI6MTMxfV0sMTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pOyJ6b29tTWluImluIGUmJihyWzBdPWUuem9vbU1pbik7Inpvb21NYXgiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxmPTAsaD10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6InJvdGF0ZSIsZW5hYmxlV2hlZWw6ITAsdmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyxfb3J0aG86ZS5fb3J0aG98fGUucHJvamVjdGlvbiYmIm9ydGhvZ3JhcGhpYyI9PT1lLnByb2plY3Rpb24udHlwZXx8ITEsdGljazpmdW5jdGlvbigpe3ZhciBlPW4oKSxyPXRoaXMuZGVsYXksaT1lLTIqcjtjLmlkbGUoZS1yKSxjLnJlY2FsY01hdHJpeChpKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09aCYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBoPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihmPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLGk9Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSwidHVybnRhYmxlIj09PXQpe3ZhciBhPW4oKTtjLl9hY3RpdmUubG9va0F0KGEscixpLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixpLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSkpLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxoPSEhYS5jb250cm9sLHA9ISFhLmFsdCxtPSEhYS5zaGlmdCxnPSEhKDEmZSksdj0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLFQ9ZC5mbGlwWT8xOi0xLGs9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLEE9bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmZyYmIWgmJiFwJiYhbXx8ZyYmIWgmJiFwJiZtKSYmYy5yb3RhdGUoQSx3KmsqYiwtVCprKl8sMCksKGwmJmcmJiFoJiYhcCYmIW18fHZ8fGcmJmgmJiFwJiYhbSkmJmMucGFuKEEsLWQudHJhbnNsYXRlU3BlZWQqYipmLGQudHJhbnNsYXRlU3BlZWQqXypmLDApLHUmJmcmJiFoJiYhcCYmIW18fHl8fGcmJiFoJiZwJiYhbSkpe3ZhciBNPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooQS1jLmxhc3RUKCkpKjEwMDtjLnBhbihBLDAsMCxmKihNYXRoLmV4cChNKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDAsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKX0pLCEhbCYme3Bhc3NpdmU6ITB9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxyLnByZXZlbnREZWZhdWx0KCl9KSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uKHQpe2UoMCxkLl9sYXN0WCxkLl9sYXN0WSxkLl9sYXN0TW9kcyl9KSwhIWwmJntwYXNzaXZlOiEwfSksZC53aGVlbExpc3RlbmVyPW8odCwoZnVuY3Rpb24odCxlKXtpZighMSE9PWQua2V5QmluZGluZ01vZGUmJmQuZW5hYmxlV2hlZWwpe3ZhciByPWQuZmxpcFg/MTotMSxpPWQuZmxpcFk/MTotMSxhPW4oKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSljLnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqZC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZSBpZighZC5fb3J0aG8pe3ZhciBvPS1kLnpvb21TcGVlZCppKmUvd2luZG93LmlubmVySGVpZ2h0KihhLWMubGFzdFQoKSkvMjA7Yy5wYW4oYSwwLDAsZiooTWF0aC5leHAobyktMSkpfX19KSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KCJyaWdodC1ub3ciKSxpPXQoIjNkLXZpZXciKSxhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIil9LHsiM2QtdmlldyI6NywiaGFzLXBhc3NpdmUtZXZlbnRzIjoyMzIsIm1vdXNlLWNoYW5nZSI6MjQ3LCJtb3VzZS1ldmVudC1vZmZzZXQiOjI0OCwibW91c2Utd2hlZWwiOjI1MCwicmlnaHQtbm93IjoyNzh9XSwxMjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbnZhcnlpbmcgdmVjMiB1djtcbnZvaWQgbWFpbigpIHtcbiAgdXYgPSBwb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLCAxKTtcbn0iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCBhY2N1bUJ1ZmZlcjtcbnZhcnlpbmcgdmVjMiB1djtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IGFjY3VtID0gdGV4dHVyZTJEKGFjY3VtQnVmZmVyLCAwLjUgKiAodXYgKyAxLjApKTtcbiAgZ2xfRnJhZ0NvbG9yID0gbWluKHZlYzQoMSwxLDEsMSksIGFjY3VtKTtcbn0iXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMiJ9XSl9fSx7ImdsLXNoYWRlciI6MTMyLGdsc2xpZnk6MjMxfV0sMTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2FtZXJhLmpzIiksaT10KCJnbC1heGVzM2QiKSxhPXQoImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIiksbz10KCJnbC1zcGlrZXMzZCIpLHM9dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGw9dCgiZ2wtZmJvIiksYz10KCJhLWJpZy10cmlhbmdsZSIpLHU9dCgibW91c2UtY2hhbmdlIiksZj10KCJnbC1tYXQ0L3BlcnNwZWN0aXZlIiksaD10KCJnbC1tYXQ0L29ydGhvIikscD10KCIuL2xpYi9zaGFkZXIiKSxkPXQoImlzLW1vYmlsZSIpKHt0YWJsZXQ6ITAsZmVhdHVyZURldGVjdDohMH0pO2Z1bmN0aW9uIG0oKXt0aGlzLm1vdXNlPVstMSwtMV0sdGhpcy5zY3JlZW49bnVsbCx0aGlzLmRpc3RhbmNlPTEvMCx0aGlzLmluZGV4PW51bGwsdGhpcy5kYXRhQ29vcmRpbmF0ZT1udWxsLHRoaXMuZGF0YVBvc2l0aW9uPW51bGwsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLmRhdGE9bnVsbH1mdW5jdGlvbiBnKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXtyPU1hdGgucm91bmQoTWF0aC5wb3coMTAsZSkpO3JldHVybiBNYXRoLmNlaWwodC9yKSpyfXJldHVybiBNYXRoLmNlaWwodCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4iYm9vbGVhbiIhPXR5cGVvZiB0fHx0fWUuZXhwb3J0cz17Y3JlYXRlU2NlbmU6ZnVuY3Rpb24odCl7KHQ9dHx8e30pLmNhbWVyYT10LmNhbWVyYXx8e307dmFyIGU9dC5jYW52YXM7aWYoIWUpe2lmKGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdC5jb250YWluZXIpdC5jb250YWluZXIuYXBwZW5kQ2hpbGQoZSk7ZWxzZSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpfXZhciByPXQuZ2w7cnx8KHQuZ2xPcHRpb25zJiYoZD0hIXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikscj1mdW5jdGlvbih0LGUpe3ZhciByPW51bGw7dHJ5eyhyPXQuZ2V0Q29udGV4dCgid2ViZ2wiLGUpKXx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn0oZSx0LmdsT3B0aW9uc3x8e3ByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITAscHJlc2VydmVEcmF3aW5nQnVmZmVyOmR9KSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkIik7dmFyIHk9dC5ib3VuZHN8fFtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHg9bmV3IG0sYj1sKHIsci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0LHtwcmVmZXJGbG9hdDohZH0pLF89cChyKSx3PXQuY2FtZXJhT2JqZWN0JiYhMD09PXQuY2FtZXJhT2JqZWN0Ll9vcnRob3x8dC5jYW1lcmEucHJvamVjdGlvbiYmIm9ydGhvZ3JhcGhpYyI9PT10LmNhbWVyYS5wcm9qZWN0aW9uLnR5cGV8fCExLFQ9e2V5ZTp0LmNhbWVyYS5leWV8fFsyLDAsMF0sY2VudGVyOnQuY2FtZXJhLmNlbnRlcnx8WzAsMCwwXSx1cDp0LmNhbWVyYS51cHx8WzAsMSwwXSx6b29tTWluOnQuY2FtZXJhLnpvb21NYXh8fC4xLHpvb21NYXg6dC5jYW1lcmEuem9vbU1pbnx8MTAwLG1vZGU6dC5jYW1lcmEubW9kZXx8InR1cm50YWJsZSIsX29ydGhvOnd9LGs9dC5heGVzfHx7fSxBPWkocixrKTtBLmVuYWJsZT0hay5kaXNhYmxlO3ZhciBNPXQuc3Bpa2VzfHx7fSxTPW8ocixNKSxFPVtdLEw9W10sQz1bXSxQPVtdLEk9ITAsTz0hMCx6PW5ldyBBcnJheSgxNiksRD1uZXcgQXJyYXkoMTYpLFI9e3ZpZXc6bnVsbCxwcm9qZWN0aW9uOnosbW9kZWw6RCxfb3J0aG86ITF9LEY9KE89ITAsW3IuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodF0pLEI9dC5jYW1lcmFPYmplY3R8fG4oZSxUKSxOPXtnbDpyLGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHwxLGNhbnZhczplLHNlbGVjdGlvbjp4LGNhbWVyYTpCLGF4ZXM6QSxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOlMsYm91bmRzOnksb2JqZWN0czpFLHNoYXBlOkYsYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOnYodC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOnYodC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOnYodC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6dih0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOlIsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbCxfc3RvcHBlZDohMSxnZXRBc3BlY3RyYXRpbzpmdW5jdGlvbigpe3JldHVybnt4OnRoaXMuYXNwZWN0WzBdLHk6dGhpcy5hc3BlY3RbMV0sejp0aGlzLmFzcGVjdFsyXX19LHNldEFzcGVjdHJhdGlvOmZ1bmN0aW9uKHQpe3RoaXMuYXNwZWN0WzBdPXQueCx0aGlzLmFzcGVjdFsxXT10LnksdGhpcy5hc3BlY3RbMl09dC56LE89ITB9LHNldEJvdW5kczpmdW5jdGlvbih0LGUpe3RoaXMuYm91bmRzWzBdW3RdPWUubWluLHRoaXMuYm91bmRzWzFdW3RdPWUubWF4fSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJDb2xvcj10fSxjbGVhclJHQkE6ZnVuY3Rpb24oKXt0aGlzLmdsLmNsZWFyQ29sb3IodGhpcy5jbGVhckNvbG9yWzBdLHRoaXMuY2xlYXJDb2xvclsxXSx0aGlzLmNsZWFyQ29sb3JbMl0sdGhpcy5jbGVhckNvbG9yWzNdKSx0aGlzLmdsLmNsZWFyKHRoaXMuZ2wuQ09MT1JfQlVGRkVSX0JJVHx0aGlzLmdsLkRFUFRIX0JVRkZFUl9CSVQpfX0saj1bci5kcmF3aW5nQnVmZmVyV2lkdGgvTi5waXhlbFJhdGlvfDAsci5kcmF3aW5nQnVmZmVySGVpZ2h0L04ucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBVKCl7aWYoIU4uX3N0b3BwZWQmJk4uYXV0b1Jlc2l6ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLHI9MSxuPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KHI9dC5jbGllbnRXaWR0aCxuPXQuY2xpZW50SGVpZ2h0KToocj13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGk9MHxNYXRoLmNlaWwocipOLnBpeGVsUmF0aW8pLGE9MHxNYXRoLmNlaWwobipOLnBpeGVsUmF0aW8pO2lmKGkhPT1lLndpZHRofHxhIT09ZS5oZWlnaHQpe2Uud2lkdGg9aSxlLmhlaWdodD1hO3ZhciBvPWUuc3R5bGU7by5wb3NpdGlvbj1vLnBvc2l0aW9ufHwiYWJzb2x1dGUiLG8ubGVmdD0iMHB4IixvLnRvcD0iMHB4IixvLndpZHRoPXIrInB4IixvLmhlaWdodD1uKyJweCIsST0hMH19fU4uYXV0b1Jlc2l6ZSYmVSgpO2Z1bmN0aW9uIFYoKXtmb3IodmFyIHQ9RS5sZW5ndGgsZT1QLmxlbmd0aCxuPTA7bjxlOysrbilDW25dPTA7dDpmb3Iobj0wO248dDsrK24pe3ZhciBpPUVbbl0sYT1pLnBpY2tTbG90cztpZihhKXtmb3IodmFyIG89MDtvPGU7KytvKWlmKENbb10rYTwyNTUpe0xbbl09byxpLnNldFBpY2tCYXNlKENbb10rMSksQ1tvXSs9YTtjb250aW51ZSB0fXZhciBsPXMocixGKTtMW25dPWUsUC5wdXNoKGwpLEMucHVzaChhKSxpLnNldFBpY2tCYXNlKDEpLGUrPTF9ZWxzZSBMW25dPS0xfWZvcig7ZT4wJiYwPT09Q1tlLTFdOylDLnBvcCgpLFAucG9wKCkuZGlzcG9zZSgpfWZ1bmN0aW9uIEgoKXtpZihOLmNvbnRleHRMb3N0KXJldHVybiEwO3IuaXNDb250ZXh0TG9zdCgpJiYoTi5jb250ZXh0TG9zdD0hMCxOLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSxOLnNlbGVjdGlvbi5vYmplY3Q9bnVsbCxOLm9uY29udGV4dGxvc3MmJk4ub25jb250ZXh0bG9zcygpKX13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKSxOLnVwZGF0ZT1mdW5jdGlvbih0KXtOLl9zdG9wcGVkfHwodD10fHx7fSxJPSEwLE89ITApfSxOLmFkZD1mdW5jdGlvbih0KXtOLl9zdG9wcGVkfHwodC5heGVzPUEsRS5wdXNoKHQpLEwucHVzaCgtMSksST0hMCxPPSEwLFYoKSl9LE4ucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKCFOLl9zdG9wcGVkKXt2YXIgZT1FLmluZGV4T2YodCk7ZTwwfHwoRS5zcGxpY2UoZSwxKSxMLnBvcCgpLEk9ITAsTz0hMCxWKCkpfX0sTi5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIU4uX3N0b3BwZWQmJihOLl9zdG9wcGVkPSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFUpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsSCksTi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsIU4uY29udGV4dExvc3QpKXtBLmRpc3Bvc2UoKSxTLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PEUubGVuZ3RoOysrdClFW3RdLmRpc3Bvc2UoKTtiLmRpc3Bvc2UoKTtmb3IodD0wO3Q8UC5sZW5ndGg7Kyt0KVBbdF0uZGlzcG9zZSgpO18uZGlzcG9zZSgpLHI9bnVsbCxBPW51bGwsUz1udWxsLEU9W119fSxOLl9tb3VzZVJvdGF0aW5nPSExLE4uX3ByZXZCdXR0b25zPTAsTi5lbmFibGVNb3VzZUxpc3RlbmVycz1mdW5jdGlvbigpe04ubW91c2VMaXN0ZW5lcj11KGUsKGZ1bmN0aW9uKHQsZSxyKXtpZighTi5fc3RvcHBlZCl7dmFyIG49UC5sZW5ndGgsaT1FLmxlbmd0aCxhPXgub2JqZWN0O3guZGlzdGFuY2U9MS8wLHgubW91c2VbMF09ZSx4Lm1vdXNlWzFdPXIseC5vYmplY3Q9bnVsbCx4LnNjcmVlbj1udWxsLHguZGF0YUNvb3JkaW5hdGU9eC5kYXRhUG9zaXRpb249bnVsbDt2YXIgbz0hMTtpZih0JiZOLl9wcmV2QnV0dG9ucylOLl9tb3VzZVJvdGF0aW5nPSEwO2Vsc2V7Ti5fbW91c2VSb3RhdGluZyYmKE89ITApLE4uX21vdXNlUm90YXRpbmc9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9UFtzXS5xdWVyeShlLGpbMV0tci0xLE4ucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT54LmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgYz0wO2M8aTsrK2Mpe3ZhciB1PUVbY107aWYoTFtjXT09PXMpe3ZhciBmPXUucGljayhsKTtmJiYoeC5idXR0b25zPXQseC5zY3JlZW49bC5jb29yZCx4LmRpc3RhbmNlPWwuZGlzdGFuY2UseC5vYmplY3Q9dSx4LmluZGV4PWYuZGlzdGFuY2UseC5kYXRhUG9zaXRpb249Zi5wb3NpdGlvbix4LmRhdGFDb29yZGluYXRlPWYuZGF0YUNvb3JkaW5hdGUseC5kYXRhPWYsbz0hMCl9fX19fWEmJmEhPT14Lm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxJPSEwKSx4Lm9iamVjdCYmKHgub2JqZWN0LmhpZ2hsaWdodCYmeC5vYmplY3QuaGlnaGxpZ2h0KHguZGF0YSksST0hMCksKG89b3x8eC5vYmplY3QhPT1hKSYmTi5vbnNlbGVjdCYmTi5vbnNlbGVjdCh4KSwxJnQmJiEoMSZOLl9wcmV2QnV0dG9ucykmJk4ub25jbGljayYmTi5vbmNsaWNrKHgpLE4uX3ByZXZCdXR0b25zPXR9fSkpfSxlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEgpO3ZhciBxPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLEc9W3FbMF0uc2xpY2UoKSxxWzFdLnNsaWNlKCldO2Z1bmN0aW9uIFkoKXtpZighSCgpKXtVKCk7dmFyIHQ9Ti5jYW1lcmEudGljaygpO1Iudmlldz1OLmNhbWVyYS5tYXRyaXgsST1JfHx0LE89T3x8dCxBLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvLFMucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW87dmFyIGU9RS5sZW5ndGgsbj1xWzBdLGk9cVsxXTtuWzBdPW5bMV09blsyXT0xLzAsaVswXT1pWzFdPWlbMl09LTEvMDtmb3IodmFyIG89MDtvPGU7KytvKXsoQz1FW29dKS5waXhlbFJhdGlvPU4ucGl4ZWxSYXRpbyxDLmF4ZXM9Ti5heGVzLEk9SXx8ISFDLmRpcnR5LE89T3x8ISFDLmRpcnR5O3ZhciBzPUMuYm91bmRzO2lmKHMpZm9yKHZhciBsPXNbMF0sdT1zWzFdLHA9MDtwPDM7KytwKW5bcF09TWF0aC5taW4obltwXSxsW3BdKSxpW3BdPU1hdGgubWF4KGlbcF0sdVtwXSl9dmFyIGQ9Ti5ib3VuZHM7aWYoTi5hdXRvQm91bmRzKWZvcihwPTA7cDwzOysrcCl7aWYoaVtwXTxuW3BdKW5bcF09LTEsaVtwXT0xO2Vsc2V7bltwXT09PWlbcF0mJihuW3BdLT0xLGlbcF0rPTEpO3ZhciBtPS4wNSooaVtwXS1uW3BdKTtuW3BdPW5bcF0tbSxpW3BdPWlbcF0rbX1kWzBdW3BdPW5bcF0sZFsxXVtwXT1pW3BdfXZhciB2PSExO2ZvcihwPTA7cDwzOysrcCl2PXZ8fEdbMF1bcF0hPT1kWzBdW3BdfHxHWzFdW3BdIT09ZFsxXVtwXSxHWzBdW3BdPWRbMF1bcF0sR1sxXVtwXT1kWzFdW3BdO2lmKE89T3x8dixJPUl8fHYpe2lmKHYpe3ZhciB5PVswLDAsMF07Zm9yKG89MDtvPDM7KytvKXlbb109ZygoZFsxXVtvXS1kWzBdW29dKS8xMCk7QS5hdXRvVGlja3M/QS51cGRhdGUoe2JvdW5kczpkLHRpY2tTcGFjaW5nOnl9KTpBLnVwZGF0ZSh7Ym91bmRzOmR9KX12YXIgVD1yLmRyYXdpbmdCdWZmZXJXaWR0aCxrPXIuZHJhd2luZ0J1ZmZlckhlaWdodDtGWzBdPVQsRlsxXT1rLGpbMF09MHxNYXRoLm1heChUL04ucGl4ZWxSYXRpbywxKSxqWzFdPTB8TWF0aC5tYXgoay9OLnBpeGVsUmF0aW8sMSksZnVuY3Rpb24odCxlKXt2YXIgcj10LmJvdW5kcyxuPXQuY2FtZXJhUGFyYW1zLGk9bi5wcm9qZWN0aW9uLGE9bi5tb2RlbCxvPXQuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHM9dC5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LGw9dC56TmVhcixjPXQuekZhcix1PXQuZm92eSxwPW8vcztlPyhoKGksLXAscCwtMSwxLGwsYyksbi5fb3J0aG89ITApOihmKGksdSxwLGwsYyksbi5fb3J0aG89ITEpO2Zvcih2YXIgZD0wO2Q8MTY7KytkKWFbZF09MDthWzE1XT0xO3ZhciBtPTA7Zm9yKGQ9MDtkPDM7KytkKW09TWF0aC5tYXgobSxyWzFdW2RdLXJbMF1bZF0pO2ZvcihkPTA7ZDwzOysrZCl0LmF1dG9TY2FsZT9hWzUqZF09dC5hc3BlY3RbZF0vKHJbMV1bZF0tclswXVtkXSk6YVs1KmRdPTEvbSx0LmF1dG9DZW50ZXImJihhWzEyK2RdPS41Ki1hWzUqZF0qKHJbMF1bZF0rclsxXVtkXSkpfShOLHcpO2ZvcihvPTA7bzxlOysrbyl7KEM9RVtvXSkuYXhlc0JvdW5kcz1kLE4uY2xpcFRvQm91bmRzJiYoQy5jbGlwQm91bmRzPWQpfXgub2JqZWN0JiYoTi5zbmFwVG9EYXRhP1MucG9zaXRpb249eC5kYXRhQ29vcmRpbmF0ZTpTLnBvc2l0aW9uPXguZGF0YVBvc2l0aW9uLFMuYm91bmRzPWQpLE8mJihPPSExLGZ1bmN0aW9uKCl7aWYoIUgoKSl7ci5jb2xvck1hc2soITAsITAsITAsITApLHIuZGVwdGhNYXNrKCEwKSxyLmRpc2FibGUoci5CTEVORCksci5lbmFibGUoci5ERVBUSF9URVNUKSxyLmRlcHRoRnVuYyhyLkxFUVVBTCk7Zm9yKHZhciB0PUUubGVuZ3RoLGU9UC5sZW5ndGgsbj0wO248ZTsrK24pe3ZhciBpPVBbbl07aS5zaGFwZT1qLGkuYmVnaW4oKTtmb3IodmFyIGE9MDthPHQ7KythKWlmKExbYV09PT1uKXt2YXIgbz1FW2FdO28uZHJhd1BpY2smJihvLnBpeGVsUmF0aW89MSxvLmRyYXdQaWNrKFIpKX1pLmVuZCgpfX19KCkpLE4uYXhlc1BpeGVscz1hKE4uYXhlcyxSLFQsayksTi5vbnJlbmRlciYmTi5vbnJlbmRlcigpLHIuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbnVsbCksci52aWV3cG9ydCgwLDAsVCxrKSxOLmNsZWFyUkdCQSgpLHIuZGVwdGhNYXNrKCEwKSxyLmNvbG9yTWFzayghMCwhMCwhMCwhMCksci5lbmFibGUoci5ERVBUSF9URVNUKSxyLmRlcHRoRnVuYyhyLkxFUVVBTCksci5kaXNhYmxlKHIuQkxFTkQpLHIuZGlzYWJsZShyLkNVTExfRkFDRSk7dmFyIE09ITE7QS5lbmFibGUmJihNPU18fEEuaXNUcmFuc3BhcmVudCgpLEEuZHJhdyhSKSksUy5heGVzPUEseC5vYmplY3QmJlMuZHJhdyhSKSxyLmRpc2FibGUoci5DVUxMX0ZBQ0UpO2ZvcihvPTA7bzxlOysrbyl7KEM9RVtvXSkuYXhlcz1BLEMucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW8sQy5pc09wYXF1ZSYmQy5pc09wYXF1ZSgpJiZDLmRyYXcoUiksQy5pc1RyYW5zcGFyZW50JiZDLmlzVHJhbnNwYXJlbnQoKSYmKE09ITApfWlmKE0pe2Iuc2hhcGU9RixiLmJpbmQoKSxyLmNsZWFyKHIuREVQVEhfQlVGRkVSX0JJVCksci5jb2xvck1hc2soITEsITEsITEsITEpLHIuZGVwdGhNYXNrKCEwKSxyLmRlcHRoRnVuYyhyLkxFU1MpLEEuZW5hYmxlJiZBLmlzVHJhbnNwYXJlbnQoKSYmQS5kcmF3VHJhbnNwYXJlbnQoUik7Zm9yKG89MDtvPGU7KytvKXsoQz1FW29dKS5pc09wYXF1ZSYmQy5pc09wYXF1ZSgpJiZDLmRyYXcoUil9ci5lbmFibGUoci5CTEVORCksci5ibGVuZEVxdWF0aW9uKHIuRlVOQ19BREQpLHIuYmxlbmRGdW5jKHIuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQSksci5jb2xvck1hc2soITAsITAsITAsITApLHIuZGVwdGhNYXNrKCExKSxyLmNsZWFyQ29sb3IoMCwwLDAsMCksci5jbGVhcihyLkNPTE9SX0JVRkZFUl9CSVQpLEEuaXNUcmFuc3BhcmVudCgpJiZBLmRyYXdUcmFuc3BhcmVudChSKTtmb3Iobz0wO288ZTsrK28pe3ZhciBDOyhDPUVbb10pLmlzVHJhbnNwYXJlbnQmJkMuaXNUcmFuc3BhcmVudCgpJiZDLmRyYXdUcmFuc3BhcmVudChSKX1yLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIuYmxlbmRGdW5jKHIuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQSksci5kaXNhYmxlKHIuREVQVEhfVEVTVCksXy5iaW5kKCksYi5jb2xvclswXS5iaW5kKDApLF8udW5pZm9ybXMuYWNjdW1CdWZmZXI9MCxjKHIpLHIuZGlzYWJsZShyLkJMRU5EKX1JPSExO2ZvcihvPTA7bzxlOysrbylFW29dLmRpcnR5PSExfX19cmV0dXJuIE4uZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxmdW5jdGlvbiB0KCl7aWYoTi5fc3RvcHBlZHx8Ti5jb250ZXh0TG9zdClyZXR1cm47WSgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX0oKSxOLnJlZHJhdz1mdW5jdGlvbigpe04uX3N0b3BwZWR8fChJPSEwLFkoKSl9LE59LGNyZWF0ZUNhbWVyYTpufX0seyIuL2NhbWVyYS5qcyI6MTE5LCIuL2xpYi9zaGFkZXIiOjEyMCwiYS1iaWctdHJpYW5nbGUiOjgsImdsLWF4ZXMzZCI6NzAsImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIjo3NywiZ2wtZmJvIjo4NiwiZ2wtbWF0NC9vcnRobyI6MTAxLCJnbC1tYXQ0L3BlcnNwZWN0aXZlIjoxMDIsImdsLXNlbGVjdC1zdGF0aWMiOjEzMSwiZ2wtc3Bpa2VzM2QiOjE0MSwiaXMtbW9iaWxlIjoyMzgsIm1vdXNlLWNoYW5nZSI6MjQ3fV0sMTIyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpO3IucG9pbnRWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIGNvKSB7XG4gIGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4O1xuICBoaWdocCBmbG9hdCBiID0gNzguMjMzO1xuICBoaWdocCBmbG9hdCBjID0gNDM3NTguNTQ1MztcbiAgaGlnaHAgZmxvYXQgZCA9IGRvdChjby54eSwgdmVjMihhLCBiKSk7XG4gIGhpZ2hwIGZsb2F0IGUgPSBtb2QoZCwgMy4xNCk7XG4gIHJldHVybiBmcmFjdChzaW4oZSkgKiBjKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xuICAgIC8vIGlmIHdlIGRvbid0IGppdHRlciB0aGUgcG9pbnQgc2l6ZSBhIGJpdCwgb3ZlcmFsbCBwb2ludCBjbG91ZFxuICAgIC8vIHNhdHVyYXRpb24gJ2p1bXBzJyBvbiB6b29taW5nLCB3aGljaCBpcyBkaXN0dXJiaW5nIGFuZCBjb25mdXNpbmdcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplICogKCgxOS41ICsgcmFuZChwb3NpdGlvbikpIC8gMjAuMCk7XG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XG4gICAgLy8gZ2V0IHRoZSBzYW1lIHNxdWFyZSBzdXJmYWNlIGFzIGNpcmNsZSB3b3VsZCBiZVxuICAgIGdsX1BvaW50U2l6ZSAqPSAwLjg4NjtcbiAgfVxufSJdKSxyLnBvaW50RnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yLCBib3JkZXJDb2xvcjtcbnVuaWZvcm0gZmxvYXQgY2VudGVyRnJhY3Rpb247XG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzO1xuICB2ZWM0IGJhc2VDb2xvcjtcbiAgaWYocG9pbnRDbG91ZCAhPSAwLjApIHsgLy8gcG9pbnRDbG91ZCBpcyB0cnV0aHlcbiAgICBpZihjZW50ZXJGcmFjdGlvbiA9PSAxLjApIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBjZW50ZXJGcmFjdGlvbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgICBpZihyYWRpdXMgPiAxLjApIHtcbiAgICAgIGRpc2NhcmQ7XG4gICAgfVxuICAgIGJhc2VDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIHN0ZXAocmFkaXVzLCBjZW50ZXJGcmFjdGlvbikpO1xuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZUNvbG9yLnJnYiAqIGJhc2VDb2xvci5hLCBiYXNlQ29sb3IuYSk7XG4gIH1cbn1cbiJdKSxyLnBpY2tWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcblxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkID0gaWQ7XG59XG4iXSksci5waWNrRnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59XG4iXSl9LHtnbHNsaWZ5OjIzMX1dLDEyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCIuL2xpYi9zaGFkZXIiKTtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5wbG90PXQsdGhpcy5vZmZzZXRCdWZmZXI9ZSx0aGlzLnBpY2tCdWZmZXI9cix0aGlzLnNoYWRlcj1uLHRoaXMucGlja1NoYWRlcj1pLHRoaXMuc2l6ZU1pbj0uNSx0aGlzLnNpemVNaW5DYXA9Mix0aGlzLnNpemVNYXg9MjAsdGhpcy5hcmVhUmF0aW89MSx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLmNvbG9yPVsxLDAsMCwxXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmJsZW5kPSExLHRoaXMucGlja09mZnNldD0wLHRoaXMucG9pbnRzPW51bGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxhPWkociksbD1pKHIpLGM9bihyLG8ucG9pbnRWZXJ0ZXgsby5wb2ludEZyYWdtZW50KSx1PW4ocixvLnBpY2tWZXJ0ZXgsby5waWNrRnJhZ21lbnQpLGY9bmV3IHModCxhLGwsYyx1KTtyZXR1cm4gZi51cGRhdGUoZSksdC5hZGRPYmplY3QoZiksZn07dmFyIGwsYyx1PXMucHJvdG90eXBlO3UuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMub2Zmc2V0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlO2Z1bmN0aW9uIHIoZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn10PXR8fHt9LHRoaXMuc2l6ZU1pbj1yKCJzaXplTWluIiwuNSksdGhpcy5zaXplTWF4PXIoInNpemVNYXgiLDIwKSx0aGlzLmNvbG9yPXIoImNvbG9yIixbMSwwLDAsMV0pLnNsaWNlKCksdGhpcy5hcmVhUmF0aW89cigiYXJlYVJhdGlvIiwxKSx0aGlzLmJvcmRlckNvbG9yPXIoImJvcmRlckNvbG9yIixbMCwwLDAsMV0pLnNsaWNlKCksdGhpcy5ibGVuZD1yKCJibGVuZCIsITEpO3ZhciBuPXQucG9zaXRpb25zLmxlbmd0aD4+PjEsaT10LnBvc2l0aW9ucyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSxvPXQuaWRUb0luZGV4IGluc3RhbmNlb2YgSW50MzJBcnJheSYmdC5pZFRvSW5kZXgubGVuZ3RoPj1uLHM9dC5wb3NpdGlvbnMsbD1pP3M6YS5tYWxsb2NGbG9hdDMyKHMubGVuZ3RoKSxjPW8/dC5pZFRvSW5kZXg6YS5tYWxsb2NJbnQzMihuKTtpZihpfHxsLnNldChzKSwhbylmb3IobC5zZXQocyksZT0wO2U8bjtlKyspY1tlXT1lO3RoaXMucG9pbnRzPXMsdGhpcy5vZmZzZXRCdWZmZXIudXBkYXRlKGwpLHRoaXMucGlja0J1ZmZlci51cGRhdGUoYyksaXx8YS5mcmVlKGwpLG98fGEuZnJlZShjKSx0aGlzLnBvaW50Q291bnQ9bix0aGlzLnBpY2tPZmZzZXQ9MH0sdS51bmlmaWVkRHJhdz0obD1bMSwwLDAsMCwxLDAsMCwwLDFdLGM9WzAsMCwwLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCE9PXQscj1lP3RoaXMucGlja1NoYWRlcjp0aGlzLnNoYWRlcixuPXRoaXMucGxvdC5nbCxpPXRoaXMucGxvdC5kYXRhQm94O2lmKDA9PT10aGlzLnBvaW50Q291bnQpcmV0dXJuIHQ7dmFyIGE9aVsyXS1pWzBdLG89aVszXS1pWzFdLHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aD4+PjE7Zm9yKHI9MDtyPGk7cisrKXt2YXIgYT10WzIqcl0sbz10WzIqcisxXTthPj1lWzBdJiZhPD1lWzJdJiZvPj1lWzFdJiZvPD1lWzNdJiZuKyt9cmV0dXJuIG59KHRoaXMucG9pbnRzLGkpLHU9dGhpcy5wbG90LnBpY2tQaXhlbFJhdGlvKk1hdGgubWF4KE1hdGgubWluKHRoaXMuc2l6ZU1pbkNhcCx0aGlzLnNpemVNaW4pLE1hdGgubWluKHRoaXMuc2l6ZU1heCx0aGlzLnNpemVNYXgvTWF0aC5wb3cocywuMzMzMzMpKSk7bFswXT0yL2EsbFs0XT0yL28sbFs2XT0tMippWzBdL2EtMSxsWzddPS0yKmlbMV0vby0xLHRoaXMub2Zmc2V0QnVmZmVyLmJpbmQoKSxyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucG9zaXRpb24ucG9pbnRlcigpLHIudW5pZm9ybXMubWF0cml4PWwsci51bmlmb3Jtcy5jb2xvcj10aGlzLmNvbG9yLHIudW5pZm9ybXMuYm9yZGVyQ29sb3I9dGhpcy5ib3JkZXJDb2xvcixyLnVuaWZvcm1zLnBvaW50Q2xvdWQ9dTw1LHIudW5pZm9ybXMucG9pbnRTaXplPXUsci51bmlmb3Jtcy5jZW50ZXJGcmFjdGlvbj1NYXRoLm1pbigxLE1hdGgubWF4KDAsTWF0aC5zcXJ0KDEtdGhpcy5hcmVhUmF0aW8pKSksZSYmKGNbMF09MjU1JnQsY1sxXT10Pj44JjI1NSxjWzJdPXQ+PjE2JjI1NSxjWzNdPXQ+PjI0JjI1NSx0aGlzLnBpY2tCdWZmZXIuYmluZCgpLHIuYXR0cmlidXRlcy5waWNrSWQucG9pbnRlcihuLlVOU0lHTkVEX0JZVEUpLHIudW5pZm9ybXMucGlja09mZnNldD1jLHRoaXMucGlja09mZnNldD10KTt2YXIgZj1uLmdldFBhcmFtZXRlcihuLkJMRU5EKSxoPW4uZ2V0UGFyYW1ldGVyKG4uRElUSEVSKTtyZXR1cm4gZiYmIXRoaXMuYmxlbmQmJm4uZGlzYWJsZShuLkJMRU5EKSxoJiZuLmRpc2FibGUobi5ESVRIRVIpLG4uZHJhd0FycmF5cyhuLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksZiYmIXRoaXMuYmxlbmQmJm4uZW5hYmxlKG4uQkxFTkQpLGgmJm4uZW5hYmxlKG4uRElUSEVSKSx0K3RoaXMucG9pbnRDb3VudH0pLHUuZHJhdz11LnVuaWZpZWREcmF3LHUuZHJhd1BpY2s9dS51bmlmaWVkRHJhdyx1LnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMucG9pbnRDb3VudDtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnBvaW50cztyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1syKmFdLG9bMiphKzFdXX19fSx7Ii4vbGliL3NoYWRlciI6MTIyLCJnbC1idWZmZXIiOjc4LCJnbC1zaGFkZXIiOjEzMiwidHlwZWRhcnJheS1wb29sIjozMDh9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGY9ZVsyXSxoPWVbM10scD1yWzBdLGQ9clsxXSxtPXJbMl0sZz1yWzNdOyhhPWMqcCt1KmQrZiptK2gqZyk8MCYmKGE9LWEscD0tcCxkPS1kLG09LW0sZz0tZyk7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqZitsKm0sdFszXT1zKmgrbCpnLHR9fSx7fV0sMTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/dC50b1N0cmluZygpOiIifX0se31dLDEyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ2ZWN0b3JpemUtdGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9aVtlXTthfHwoYT1pW2VdPXt9KTtpZih0IGluIGEpcmV0dXJuIGFbdF07dmFyIG89e3RleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZSxsaW5lU3BhY2luZzoxLjI1LHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSx0cmlhbmdsZXM6ITB9LHM9bih0LG8pO28udHJpYW5nbGVzPSExO3ZhciBsLGMsdT1uKHQsbyk7aWYociYmMSE9PXIpe2ZvcihsPTA7bDxzLnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7YzxzLnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXMucG9zaXRpb25zW2xdW2NdLz1yO2ZvcihsPTA7bDx1LnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7Yzx1LnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXUucG9zaXRpb25zW2xdW2NdLz1yfXZhciBmPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGg9dS5wb3NpdGlvbnMubGVuZ3RoO2ZvcihsPTA7bDxoOysrbCl7dmFyIHA9dS5wb3NpdGlvbnNbbF07Zm9yKGM9MDtjPDI7KytjKWZbMF1bY109TWF0aC5taW4oZlswXVtjXSxwW2NdKSxmWzFdW2NdPU1hdGgubWF4KGZbMV1bY10scFtjXSl9cmV0dXJuIGFbdF09W3MsdSxmXX07dmFyIGk9e319LHsidmVjdG9yaXplLXRleHQiOjMxMX1dLDEyNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2xzbGlmeSIpLGE9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gMS4wO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIHNjYWxlID0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZpZXdQb3NpdGlvbiA9IHZpZXdQb3NpdGlvbiAvIHZpZXdQb3NpdGlvbi53O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqICh2aWV3UG9zaXRpb24gKyBzY2FsZSAqIHZlYzQoZ2x5cGgueCwgLWdseXBoLnksIDAsIDApKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlLCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gcGl4ZWxSYXRpbztcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZC5iZ3IsIGlkLmJncikgPCAwLjAwMSkge1xuICAgICAgc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xuICAgIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIHZlYzMgYXhlc1syXTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBwaXhlbFJhdGlvO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XG4gIH1cbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKFxuICAgIG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkgfHxcbiAgICBpbnRlcnBDb2xvci5hICogb3BhY2l0eSA9PSAwLlxuICApIGRpc2NhcmQ7XG4gIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxjPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrR3JvdXA7XG5cbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrR3JvdXAsIHBpY2tJZC5iZ3IpO1xufSJdKSx1PVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToiZ2x5cGgiLHR5cGU6InZlYzIifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV0sZj17dmVydGV4OmEsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGg9e3ZlcnRleDpvLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxwPXt2ZXJ0ZXg6cyxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZD17dmVydGV4OmEsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LG09e3ZlcnRleDpvLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSxnPXt2ZXJ0ZXg6cyxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX07ZnVuY3Rpb24gdih0LGUpe3ZhciByPW4odCxlKSxpPXIuYXR0cmlidXRlcztyZXR1cm4gaS5wb3NpdGlvbi5sb2NhdGlvbj0wLGkuY29sb3IubG9jYXRpb249MSxpLmdseXBoLmxvY2F0aW9uPTIsaS5pZC5sb2NhdGlvbj0zLHJ9ci5jcmVhdGVQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGYpfSxyLmNyZWF0ZU9ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsaCl9LHIuY3JlYXRlUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdih0LHApfSxyLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGQpfSxyLmNyZWF0ZVBpY2tPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gdih0LG0pfSxyLmNyZWF0ZVBpY2tQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZyl9fSx7ImdsLXNoYWRlciI6MTMyLGdsc2xpZnk6MjMxfV0sMTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLXN0cmluZy1ibGFuayIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoInR5cGVkYXJyYXktcG9vbCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiLi9saWIvc2hhZGVycyIpLGM9dCgiLi9saWIvZ2x5cGhzIiksdT10KCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZyIpLGY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdO3JldHVybiB0WzBdPWVbMF0qcitlWzRdKm4rZVs4XSppK2VbMTJdKmEsdFsxXT1lWzFdKnIrZVs1XSpuK2VbOV0qaStlWzEzXSphLHRbMl09ZVsyXSpyK2VbNl0qbitlWzEwXSppK2VbMTRdKmEsdFszXT1lWzNdKnIrZVs3XSpuK2VbMTFdKmkrZVsxNV0qYSx0fWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuIGgobixuKSxoKG4sbiksaChuLG4pfWZ1bmN0aW9uIGQodCxlKXt0aGlzLmluZGV4PXQsdGhpcy5kYXRhQ29vcmRpbmF0ZT10aGlzLnBvc2l0aW9uPWV9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hMD09PXR8fHQ+MT8xOnR9ZnVuY3Rpb24gZyh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5nbHlwaEJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9cyx0aGlzLnZhbz1sLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnByb2plY3RIYXNBbHBoYT0hMSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9dSx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWYsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBkKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPWwuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj1sLmNyZWF0ZU9ydGhvKGUpLG89bC5jcmVhdGVQcm9qZWN0KGUpLHM9bC5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSksYz1sLmNyZWF0ZVBpY2tPcnRobyhlKSx1PWwuY3JlYXRlUGlja1Byb2plY3QoZSksZj1pKGUpLGg9aShlKSxwPWkoZSksZD1pKGUpLG09YShlLFt7YnVmZmVyOmYsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpoLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmQsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksdj1uZXcgZyhlLHIsbixvLGYsaCxwLGQsbSxzLGMsdSk7cmV0dXJuIHYudXBkYXRlKHQpLHZ9O3ZhciB2PWcucHJvdG90eXBlO3YucGlja1Nsb3RzPTEsdi5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx2LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9LHYuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJiF0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHk9WzAsMF0seD1bMCwwLDBdLGI9WzAsMCwwXSxfPVswLDAsMCwxXSx3PVswLDAsMCwxXSxUPWYuc2xpY2UoKSxrPVswLDAsMF0sQT1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBNKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBpLGE9ZS5heGVzUHJvamVjdCxvPWUuZ2wsbD10LnVuaWZvcm1zLGM9ci5tb2RlbHx8Zix1PXIudmlld3x8ZixoPXIucHJvamVjdGlvbnx8ZixkPWUuYXhlc0JvdW5kcyxtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9KGUuY2xpcEJvdW5kcyk7aT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzP2UuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXM6WzEsMSwxXSx5WzBdPTIvby5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL28uZHJhd2luZ0J1ZmZlckhlaWdodCx0LmJpbmQoKSxsLnZpZXc9dSxsLnByb2plY3Rpb249aCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPWUuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1lLmhpZ2hsaWdodFNjYWxlLGwuY2xpcEJvdW5kcz1tLGwucGlja0dyb3VwPWUucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89bjtmb3IodmFyIGc9MDtnPDM7KytnKWlmKGFbZ10pe2wuc2NhbGU9ZS5wcm9qZWN0U2NhbGVbZ10sbC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbZ107Zm9yKHZhciB2PVQsTD0wO0w8MTY7KytMKXZbTF09MDtmb3IoTD0wO0w8NDsrK0wpdls1KkxdPTE7dls1KmddPTAsaVtnXTwwP3ZbMTIrZ109ZFswXVtnXTp2WzEyK2ddPWRbMV1bZ10scyh2LGMsdiksbC5tb2RlbD12O3ZhciBDPShnKzEpJTMsUD0oZysyKSUzLEk9TSh4KSxPPU0oYik7SVtDXT0xLE9bUF09MTt2YXIgej1wKDAsMCwwLFMoXyxJKSksRD1wKDAsMCwwLFModyxPKSk7aWYoTWF0aC5hYnMoelsxXSk+TWF0aC5hYnMoRFsxXSkpe3ZhciBSPXo7ej1ELEQ9UixSPUksST1PLE89Ujt2YXIgRj1DO0M9UCxQPUZ9elswXTwwJiYoSVtDXT0tMSksRFsxXT4wJiYoT1tQXT0tMSk7dmFyIEI9MCxOPTA7Zm9yKEw9MDtMPDQ7KytMKUIrPU1hdGgucG93KGNbNCpDK0xdLDIpLE4rPU1hdGgucG93KGNbNCpQK0xdLDIpO0lbQ10vPU1hdGguc3FydChCKSxPW1BdLz1NYXRoLnNxcnQoTiksbC5heGVzWzBdPUksbC5heGVzWzFdPU8sbC5mcmFnQ2xpcEJvdW5kc1swXT1FKGssbVswXSxnLC0xZTgpLGwuZnJhZ0NsaXBCb3VuZHNbMV09RShrLG1bMV0sZywxZTgpLGUudmFvLmJpbmQoKSxlLnZhby5kcmF3KG8uVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChlLmxpbmVXaWR0aCpuKSxlLnZhby5kcmF3KG8uTElORVMsZS5saW5lVmVydGV4Q291bnQsZS52ZXJ0ZXhDb3VudCkpLGUudmFvLnVuYmluZCgpfX12YXIgQz1bWy0xZTgsLTFlOCwtMWU4XSxbMWU4LDFlOCwxZThdXTtmdW5jdGlvbiBQKHQsZSxyLG4saSxhLG8pe3ZhciBzPXIuZ2w7aWYoKGE9PT1yLnByb2plY3RIYXNBbHBoYXx8bykmJkwoZSxyLG4saSksYT09PXIuaGFzQWxwaGF8fG8pe3QuYmluZCgpO3ZhciBsPXQudW5pZm9ybXM7bC5tb2RlbD1uLm1vZGVsfHxmLGwudmlldz1uLnZpZXd8fGYsbC5wcm9qZWN0aW9uPW4ucHJvamVjdGlvbnx8Zix5WzBdPTIvcy5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL3MuZHJhd2luZ0J1ZmZlckhlaWdodCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPXIuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1yLmhpZ2hsaWdodFNjYWxlLGwuZnJhZ0NsaXBCb3VuZHM9QyxsLmNsaXBCb3VuZHM9ci5heGVzLmJvdW5kcyxsLm9wYWNpdHk9ci5vcGFjaXR5LGwucGlja0dyb3VwPXIucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89aSxyLnZhby5iaW5kKCksci52YW8uZHJhdyhzLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYocy5saW5lV2lkdGgoci5saW5lV2lkdGgqaSksci52YW8uZHJhdyhzLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKSxyLnZhby51bmJpbmQoKX19ZnVuY3Rpb24gSSh0LGUscixpKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnZvaWQgMDp0LGE9dShhKTt2YXIgbz0hMDtuKGEpJiYoYT0iXHUyNWJjIixvPSExKTt2YXIgcz1jKGEscixpKTtyZXR1cm57bWVzaDpzWzBdLGxpbmVzOnNbMV0sYm91bmRzOnNbMl0sdmlzaWJsZTpvfX12LmRyYXc9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITEsITEpfSx2LmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtQKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMCwhMSl9LHYuZHJhd1BpY2s9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LDEsITAsITApfSx2LnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LHYuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCJwZXJzcGVjdGl2ZSJpbih0PXR8fHt9KSYmKHRoaXMudXNlT3J0aG89IXQucGVyc3BlY3RpdmUpLCJvcnRob2dyYXBoaWMiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJwcm9qZWN0ImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3QpKXRoaXMuYXhlc1Byb2plY3Q9dC5wcm9qZWN0O2Vsc2V7dmFyIGU9ISF0LnByb2plY3Q7dGhpcy5heGVzUHJvamVjdD1bZSxlLGVdfWlmKCJwcm9qZWN0U2NhbGUiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsInByb2plY3RPcGFjaXR5ImluIHQpe2lmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX1mb3IodmFyIG49MDtuPDM7KytuKXRoaXMucHJvamVjdE9wYWNpdHlbbl09bSh0aGlzLnByb2plY3RPcGFjaXR5W25dKSx0aGlzLnByb2plY3RPcGFjaXR5W25dPDEmJih0aGlzLnByb2plY3RIYXNBbHBoYT0hMCl9dGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PW0odC5vcGFjaXR5KSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSx0aGlzLmRpcnR5PSEwO3ZhciBpLGEscz10LnBvc2l0aW9uLGw9dC5mb250fHwibm9ybWFsIixjPXQuYWxpZ25tZW50fHxbMCwwXTtpZigyPT09Yy5sZW5ndGgpaT1jWzBdLGE9Y1sxXTtlbHNle2k9W10sYT1bXTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWlbbl09Y1tuXVswXSxhW25dPWNbbl1bMV19dmFyIHU9WzEvMCwxLzAsMS8wXSxmPVstMS8wLC0xLzAsLTEvMF0saD10LmdseXBoLHA9dC5jb2xvcixkPXQuc2l6ZSxnPXQuYW5nbGUsdj10LmxpbmVDb2xvcix5PS0xLHg9MCxiPTAsXz0wO2lmKHMubGVuZ3RoKXtfPXMubGVuZ3RoO3Q6Zm9yKG49MDtuPF87KytuKXtmb3IodmFyIHc9c1tuXSxUPTA7VDwzOysrVClpZihpc05hTih3W1RdKXx8IWlzRmluaXRlKHdbVF0pKWNvbnRpbnVlIHQ7dmFyIGs9KE49SShoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLEE9Ti5saW5lcyxNPU4uYm91bmRzO3grPTMqay5jZWxscy5sZW5ndGgsYis9MipBLmVkZ2VzLmxlbmd0aH19dmFyIFM9eCtiLEU9by5tYWxsb2NGbG9hdCgzKlMpLEw9by5tYWxsb2NGbG9hdCg0KlMpLEM9by5tYWxsb2NGbG9hdCgyKlMpLFA9by5tYWxsb2NVaW50MzIoUyk7aWYoUz4wKXt2YXIgTz0wLHo9eCxEPVswLDAsMCwxXSxSPVswLDAsMCwxXSxGPUFycmF5LmlzQXJyYXkocCkmJkFycmF5LmlzQXJyYXkocFswXSksQj1BcnJheS5pc0FycmF5KHYpJiZBcnJheS5pc0FycmF5KHZbMF0pO3Q6Zm9yKG49MDtuPF87KytuKXt5Kz0xO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1Qpe2lmKGlzTmFOKHdbVF0pfHwhaXNGaW5pdGUod1tUXSkpY29udGludWUgdDtmW1RdPU1hdGgubWF4KGZbVF0sd1tUXSksdVtUXT1NYXRoLm1pbih1W1RdLHdbVF0pfWs9KE49SShoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLEE9Ti5saW5lcyxNPU4uYm91bmRzO3ZhciBOLGo9Ti52aXNpYmxlO2lmKGopaWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMz09PShVPUY/bjxwLmxlbmd0aD9wW25dOlswLDAsMCwwXTpwKS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClEW1RdPVVbVF07RFszXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpRFtUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBEWzBdPURbMV09RFsyXT0wLERbM109MTtlbHNlIEQ9WzEsMSwxLDBdO2lmKGopaWYoQXJyYXkuaXNBcnJheSh2KSl7dmFyIFU7aWYoMz09PShVPUI/bjx2Lmxlbmd0aD92W25dOlswLDAsMCwwXTp2KS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClSW1RdPVVbVF07UltUXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpUltUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBSWzBdPVJbMV09UlsyXT0wLFJbM109MTtlbHNlIFI9WzEsMSwxLDBdO3ZhciBWPS41O2o/QXJyYXkuaXNBcnJheShkKT9WPW48ZC5sZW5ndGg/K2Rbbl06MTI6ZD9WPStkOnRoaXMudXNlT3J0aG8mJihWPTEyKTpWPTA7dmFyIEg9MDtBcnJheS5pc0FycmF5KGcpP0g9bjxnLmxlbmd0aD8rZ1tuXTowOmcmJihIPStnKTt2YXIgcT1NYXRoLmNvcyhIKSxHPU1hdGguc2luKEgpO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1QpZltUXT1NYXRoLm1heChmW1RdLHdbVF0pLHVbVF09TWF0aC5taW4odVtUXSx3W1RdKTt2YXIgWT1pLFc9YTtZPTA7QXJyYXkuaXNBcnJheShpKT9ZPW48aS5sZW5ndGg/aVtuXTowOmkmJihZPWkpO1c9MDtBcnJheS5pc0FycmF5KGEpP1c9bjxhLmxlbmd0aD9hW25dOjA6YSYmKFc9YSk7dmFyIFg9W1kqPVk+MD8xLU1bMF1bMF06WTwwPzErTVsxXVswXToxLFcqPVc+MD8xLU1bMF1bMV06VzwwPzErTVsxXVsxXToxXSxaPWsuY2VsbHN8fFtdLEo9ay5wb3NpdGlvbnN8fFtdO2ZvcihUPTA7VDxaLmxlbmd0aDsrK1QpZm9yKHZhciBLPVpbVF0sUT0wO1E8MzsrK1Epe2Zvcih2YXIgJD0wOyQ8MzsrKyQpRVszKk8rJF09d1skXTtmb3IoJD0wOyQ8NDsrKyQpTFs0Kk8rJF09RFskXTtQW09dPXk7dmFyIHR0PUpbS1tRXV07Q1syKk9dPVYqKHEqdHRbMF0tRyp0dFsxXStYWzBdKSxDWzIqTysxXT1WKihHKnR0WzBdK3EqdHRbMV0rWFsxXSksTys9MX1mb3IoWj1BLmVkZ2VzLEo9QS5wb3NpdGlvbnMsVD0wO1Q8Wi5sZW5ndGg7KytUKWZvcihLPVpbVF0sUT0wO1E8MjsrK1Epe2ZvcigkPTA7JDwzOysrJClFWzMqeiskXT13WyRdO2ZvcigkPTA7JDw0OysrJClMWzQqeiskXT1SWyRdO1Bbel09eTt0dD1KW0tbUV1dO0NbMip6XT1WKihxKnR0WzBdLUcqdHRbMV0rWFswXSksQ1syKnorMV09ViooRyp0dFswXStxKnR0WzFdK1hbMV0pLHorPTF9fX10aGlzLmJvdW5kcz1bdSxmXSx0aGlzLnBvaW50cz1zLHRoaXMucG9pbnRDb3VudD1zLmxlbmd0aCx0aGlzLnZlcnRleENvdW50PXgsdGhpcy5saW5lVmVydGV4Q291bnQ9Yix0aGlzLnBvaW50QnVmZmVyLnVwZGF0ZShFKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShMKSx0aGlzLmdseXBoQnVmZmVyLnVwZGF0ZShDKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShQKSxvLmZyZWUoRSksby5mcmVlKEwpLG8uZnJlZShDKSxvLmZyZWUoUCl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrT3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnBvaW50QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmdseXBoQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKX19LHsiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciOjEyNSwiLi9saWIvZ2x5cGhzIjoxMjYsIi4vbGliL3NoYWRlcnMiOjEyNywiZ2wtYnVmZmVyIjo3OCwiZ2wtbWF0NC9tdWx0aXBseSI6MTAwLCJnbC12YW8iOjE1MCwiaXMtc3RyaW5nLWJsYW5rIjoyMzksInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKTtyLmJveFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iXSksci5ib3hGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSl9LHtnbHNsaWZ5OjIzMX1dLDEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMuYm94QnVmZmVyPWUsdGhpcy5ib3hTaGFkZXI9cix0aGlzLmVuYWJsZWQ9ITAsdGhpcy5zZWxlY3RCb3g9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmlubmVyRmlsbD0hMSx0aGlzLmlubmVyQ29sb3I9WzAsMCwwLC4yNV0sdGhpcy5vdXRlckZpbGw9ITAsdGhpcy5vdXRlckNvbG9yPVswLDAsMCwuNV0sdGhpcy5ib3JkZXJXaWR0aD0xMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLHM9aShyLFswLDAsMCwxLDEsMCwxLDFdKSxsPW4ocixhLmJveFZlcnRleCxhLmJveEZyYWdtZW50KSxjPW5ldyBvKHQscyxsKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPdmVybGF5KGMpLGN9O3ZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LGM9dC52aWV3Qm94LHU9dC5waXhlbFJhdGlvLGY9KGVbMF0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxoPShlWzFdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV0scD0oZVsyXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGQ9KGVbM10tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXTtpZihmPU1hdGgubWF4KGYsY1swXSksaD1NYXRoLm1heChoLGNbMV0pLHA9TWF0aC5taW4ocCxjWzJdKSxkPU1hdGgubWluKGQsY1szXSksIShwPGZ8fGQ8aCkpe28uYmluZCgpO3ZhciBtPXNbMl0tc1swXSxnPXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsbSxoLGkpLG8uZHJhd0JveCgwLGgsZixkLGkpLG8uZHJhd0JveCgwLGQsbSxnLGkpLG8uZHJhd0JveChwLGgsbSxkLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGYsaCxwLGQsbikscj4wKXt2YXIgdj1yKnU7by5kcmF3Qm94KGYtdixoLXYscCt2LGgrdixhKSxvLmRyYXdCb3goZi12LGQtdixwK3YsZCt2LGEpLG8uZHJhd0JveChmLXYsaC12LGYrdixkK3YsYSksby5kcmF3Qm94KHAtdixoLXYscCt2LGQrdixhKX19fX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoxMjksImdsLWJ1ZmZlciI6NzgsImdsLXNoYWRlciI6MTMyfV0sMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sYT1lWzFdLG89bih0LHIsYSx7fSkscz1pLm1hbGxvY1VpbnQ4KHIqYSo0KTtyZXR1cm4gbmV3IGwodCxvLHMpfTt2YXIgbj10KCJnbC1mYm8iKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibmRhcnJheSIpLG89dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MjtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBsKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fXZhciBjPWwucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJzaGFwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdsP3RoaXMuZmJvLnNoYXBlLnNsaWNlKCk6WzAsMF19LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmdsKXt0aGlzLmZiby5zaGFwZT10O3ZhciBlPXRoaXMuZmJvLnNoYXBlWzBdLHI9dGhpcy5mYm8uc2hhcGVbMV07aWYociplKjQ+dGhpcy5idWZmZXIubGVuZ3RoKXtpLmZyZWUodGhpcy5idWZmZXIpO2Zvcih2YXIgbj10aGlzLmJ1ZmZlcj1pLm1hbGxvY1VpbnQ4KG8ociplKjQpKSxhPTA7YTxyKmUqNDsrK2EpblthXT0yNTV9cmV0dXJuIHR9fX0pLGMuYmVnaW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3RoaXMuc2hhcGU7dCYmKHRoaXMuZmJvLmJpbmQoKSx0LmNsZWFyQ29sb3IoMSwxLDEsMSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSl9LGMuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0JiYodC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0aGlzLl9yZWFkVGltZW91dHx8Y2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSx0aGlzLl9yZWFkVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3JlYWRDYWxsYmFjaywxKSl9LGMucXVlcnk9ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLmdsKXJldHVybiBudWxsO3ZhciBuPXRoaXMuZmJvLnNoYXBlLnNsaWNlKCk7dHw9MCxlfD0wLCJudW1iZXIiIT10eXBlb2YgciYmKHI9MSk7dmFyIGk9MHxNYXRoLm1pbihNYXRoLm1heCh0LXIsMCksblswXSksbz0wfE1hdGgubWluKE1hdGgubWF4KHQrciwwKSxuWzBdKSxsPTB8TWF0aC5taW4oTWF0aC5tYXgoZS1yLDApLG5bMV0pLGM9MHxNYXRoLm1pbihNYXRoLm1heChlK3IsMCksblsxXSk7aWYobzw9aXx8Yzw9bClyZXR1cm4gbnVsbDt2YXIgdT1bby1pLGMtbF0sZj1hKHRoaXMuYnVmZmVyLFt1WzBdLHVbMV0sNF0sWzQsNCpuWzBdLDFdLDQqKGkrblswXSpsKSksaD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTFlOCxpPS0xLGE9LTEsbz10LnNoYXBlWzBdLHM9dC5zaGFwZVsxXSxsPTA7bDxvO2wrKylmb3IodmFyIGM9MDtjPHM7YysrKXt2YXIgdT10LmdldChsLGMsMCksZj10LmdldChsLGMsMSksaD10LmdldChsLGMsMikscD10LmdldChsLGMsMyk7aWYodTwyNTV8fGY8MjU1fHxoPDI1NXx8cDwyNTUpe3ZhciBkPWUtbCxtPXItYyxnPWQqZCttKm07ZzxuJiYobj1nLGk9bCxhPWMpfX1yZXR1cm5baSxhLG5dfShmLmhpKHVbMF0sdVsxXSwxKSxyLHIpLHA9aFswXSxkPWhbMV07cmV0dXJuIHA8MHx8TWF0aC5wb3codGhpcy5yYWRpdXMsMik8aFsyXT9udWxsOm5ldyBzKHAraXwwLGQrbHwwLGYuZ2V0KHAsZCwwKSxbZi5nZXQocCxkLDEpLGYuZ2V0KHAsZCwyKSxmLmdldChwLGQsMyldLE1hdGguc3FydChoWzJdKSl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wmJih0aGlzLmZiby5kaXNwb3NlKCksaS5mcmVlKHRoaXMuYnVmZmVyKSx0aGlzLmdsPW51bGwsdGhpcy5fcmVhZFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9yZWFkVGltZW91dCkpfX0seyJiaXQtdHdpZGRsZSI6MzIsImdsLWZibyI6ODYsbmRhcnJheToyNTksInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NyZWF0ZS11bmlmb3JtcyIpLGk9dCgiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiKSxhPXQoIi4vbGliL3JlZmxlY3QiKSxvPXQoIi4vbGliL3NoYWRlci1jYWNoZSIpLHM9dCgiLi9saWIvcnVudGltZS1yZWZsZWN0IiksbD10KCIuL2xpYi9HTEVycm9yIik7ZnVuY3Rpb24gYyh0KXt0aGlzLmdsPXQsdGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl92cmVmPXRoaXMuX2ZyZWY9dGhpcy5fcmVsaW5rPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuYXR0cmlidXRlcz10aGlzLnVuaWZvcm1zPXRoaXMudHlwZXM9bnVsbH12YXIgdT1jLnByb3RvdHlwZTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQubmFtZTxlLm5hbWU/LTE6MX11LmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpO3ZhciBlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsYyl7aWYoIWV8fDE9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgdT10O3Q9dS52ZXJ0ZXgsZT11LmZyYWdtZW50LHI9dS51bmlmb3JtcyxjPXUuYXR0cmlidXRlc312YXIgaD10aGlzLHA9aC5nbCxkPWguX3ZyZWY7aC5fdnJlZj1vLnNoYWRlcihwLHAuVkVSVEVYX1NIQURFUix0KSxkJiZkLmRpc3Bvc2UoKSxoLnZlcnRTaGFkZXI9aC5fdnJlZi5zaGFkZXI7dmFyIG09dGhpcy5fZnJlZjtpZihoLl9mcmVmPW8uc2hhZGVyKHAscC5GUkFHTUVOVF9TSEFERVIsZSksbSYmbS5kaXNwb3NlKCksaC5mcmFnU2hhZGVyPWguX2ZyZWYuc2hhZGVyLCFyfHwhYyl7dmFyIGc9cC5jcmVhdGVQcm9ncmFtKCk7aWYocC5hdHRhY2hTaGFkZXIoZyxoLmZyYWdTaGFkZXIpLHAuYXR0YWNoU2hhZGVyKGcsaC52ZXJ0U2hhZGVyKSxwLmxpbmtQcm9ncmFtKGcpLCFwLmdldFByb2dyYW1QYXJhbWV0ZXIoZyxwLkxJTktfU1RBVFVTKSl7dmFyIHY9cC5nZXRQcm9ncmFtSW5mb0xvZyhnKTt0aHJvdyBuZXcgbCh2LCJFcnJvciBsaW5raW5nIHByb2dyYW06Iit2KX1yPXJ8fHMudW5pZm9ybXMocCxnKSxjPWN8fHMuYXR0cmlidXRlcyhwLGcpLHAuZGVsZXRlUHJvZ3JhbShnKX0oYz1jLnNsaWNlKCkpLnNvcnQoZik7dmFyIHkseD1bXSxiPVtdLF89W107Zm9yKHk9MDt5PGMubGVuZ3RoOysreSl7dmFyIHc9Y1t5XTtpZih3LnR5cGUuaW5kZXhPZigibWF0Iik+PTApe2Zvcih2YXIgVD0wfHcudHlwZS5jaGFyQXQody50eXBlLmxlbmd0aC0xKSxrPW5ldyBBcnJheShUKSxBPTA7QTxUOysrQSlrW0FdPV8ubGVuZ3RoLGIucHVzaCh3Lm5hbWUrIlsiK0ErIl0iKSwibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKHcubG9jYXRpb24rQSk6QXJyYXkuaXNBcnJheSh3LmxvY2F0aW9uKSYmdy5sb2NhdGlvbi5sZW5ndGg9PT1UJiYibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb25bQV0/Xy5wdXNoKDB8dy5sb2NhdGlvbltBXSk6Xy5wdXNoKC0xKTt4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczprfSl9ZWxzZSB4LnB1c2goe25hbWU6dy5uYW1lLHR5cGU6dy50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSksYi5wdXNoKHcubmFtZSksIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCgwfHcubG9jYXRpb24pOl8ucHVzaCgtMSl9dmFyIE09MDtmb3IoeT0wO3k8Xy5sZW5ndGg7Kyt5KWlmKF9beV08MCl7Zm9yKDtfLmluZGV4T2YoTSk+PTA7KU0rPTE7X1t5XT1NfXZhciBTPW5ldyBBcnJheShyLmxlbmd0aCk7ZnVuY3Rpb24gRSgpe2gucHJvZ3JhbT1vLnByb2dyYW0ocCxoLl92cmVmLGguX2ZyZWYsYixfKTtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClTW3RdPXAuZ2V0VW5pZm9ybUxvY2F0aW9uKGgucHJvZ3JhbSxyW3RdLm5hbWUpfUUoKSxoLl9yZWxpbms9RSxoLnR5cGVzPXt1bmlmb3JtczphKHIpLGF0dHJpYnV0ZXM6YShjKX0saC5hdHRyaWJ1dGVzPWkocCxoLHgsXyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInVuaWZvcm1zIixuKHAsaCxyLFMpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bmV3IGModCk7cmV0dXJuIGEudXBkYXRlKGUscixuLGkpLGF9fSx7Ii4vbGliL0dMRXJyb3IiOjEzMywiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiOjEzNCwiLi9saWIvY3JlYXRlLXVuaWZvcm1zIjoxMzUsIi4vbGliL3JlZmxlY3QiOjEzNiwiLi9saWIvcnVudGltZS1yZWZsZWN0IjoxMzcsIi4vbGliL3NoYWRlci1jYWNoZSI6MTM4fV0sMTMzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zaG9ydE1lc3NhZ2U9ZXx8IiIsdGhpcy5sb25nTWVzc2FnZT1yfHwiIix0aGlzLnJhd0Vycm9yPXR8fCIiLHRoaXMubWVzc2FnZT0iZ2wtc2hhZGVyOiAiKyhlfHx0fHwiIikrKHI/IlxuIityOiIiKSx0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfW4ucHJvdG90eXBlPW5ldyBFcnJvcixuLnByb3RvdHlwZS5uYW1lPSJHTEVycm9yIixuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLGUuZXhwb3J0cz1ufSx7fV0sMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9e30sbz0wLGM9ci5sZW5ndGg7bzxjOysrbyl7dmFyIHU9cltvXSxmPXUubmFtZSxoPXUudHlwZSxwPXUubG9jYXRpb25zO3N3aXRjaChoKXtjYXNlImJvb2wiOmNhc2UiaW50IjpjYXNlImZsb2F0IjpzKHQsZSxwWzBdLGksMSxhLGYpO2JyZWFrO2RlZmF1bHQ6aWYoaC5pbmRleE9mKCJ2ZWMiKT49MCl7aWYoKGQ9aC5jaGFyQ29kZUF0KGgubGVuZ3RoLTEpLTQ4KTwyfHxkPjQpdGhyb3cgbmV3IG4oIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitmKyI6ICIraCk7cyh0LGUscFswXSxpLGQsYSxmKX1lbHNle2lmKCEoaC5pbmRleE9mKCJtYXQiKT49MCkpdGhyb3cgbmV3IG4oIiIsIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitmKyI6ICIraCk7dmFyIGQ7aWYoKGQ9aC5jaGFyQ29kZUF0KGgubGVuZ3RoLTEpLTQ4KTwyfHxkPjQpdGhyb3cgbmV3IG4oIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitmKyI6ICIraCk7bCh0LGUscCxpLGQsYSxmKX19fXJldHVybiBhfTt2YXIgbj10KCIuL0dMRXJyb3IiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLl9nbD10LHRoaXMuX3dyYXBwZXI9ZSx0aGlzLl9pbmRleD1yLHRoaXMuX2xvY2F0aW9ucz1uLHRoaXMuX2RpbWVuc2lvbj1pLHRoaXMuX2NvbnN0RnVuYz1hfXZhciBhPWkucHJvdG90eXBlO2EucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9nbCxhPXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF07aS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsdGhpcy5fZGltZW5zaW9uLHR8fGkuRkxPQVQsISFlLHJ8fDAsbnx8MCksaS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKX0sYS5zZXQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX2NvbnN0RnVuYyh0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdLHQsZSxyLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSYmKHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF09MHx0LHRoaXMuX3dyYXBwZXIucHJvZ3JhbT1udWxsKSwwfHR9fSk7dmFyIG89W2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWIxZihlLHIpOnQudmVydGV4QXR0cmliMWZ2KGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB2b2lkIDA9PT1yLmxlbmd0aD90LnZlcnRleEF0dHJpYjJmKGUscixuKTp0LnZlcnRleEF0dHJpYjJmdihlLHIpfSxmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB2b2lkIDA9PT1yLmxlbmd0aD90LnZlcnRleEF0dHJpYjNmKGUscixuLGkpOnQudmVydGV4QXR0cmliM2Z2KGUscil9LGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWI0ZihlLHIsbixpLGEpOnQudmVydGV4QXR0cmliNGZ2KGUscil9XTtmdW5jdGlvbiBzKHQsZSxyLG4sYSxzLGwpe3ZhciBjPW9bYV0sdT1uZXcgaSh0LGUscixuLGEsYyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsbCx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuW3JdKSxjKHQsbltyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIGwodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPW5ldyBBcnJheShpKSx1PTA7dTxpOysrdSlzKHQsZSxyW3VdLG4saSxsLHUpLGNbdV09bFt1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGk7KytlKWNbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcihlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXQrZTtyZXR1cm4gdH0sZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheShpKSxlPTA7ZTxpOysrZSl0W2VdPW5bcltlXV07cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxsLnBvaW50ZXI9ZnVuY3Rpb24oZSxhLG8scyl7ZT1lfHx0LkZMT0FULGE9ISFhLG89b3x8aSppLHM9c3x8MDtmb3IodmFyIGw9MDtsPGk7KytsKXt2YXIgYz1uW3JbbF1dO3QudmVydGV4QXR0cmliUG9pbnRlcihjLGksZSxhLG8scytsKmkpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYyl9fTt2YXIgZj1uZXcgQXJyYXkoaSksaD10WyJ2ZXJ0ZXhBdHRyaWIiK2krImZ2Il07T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsbyx7c2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgYT0wO2E8aTsrK2Epe3ZhciBvPW5bclthXV07aWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobyksQXJyYXkuaXNBcnJheShlWzBdKSloLmNhbGwodCxvLGVbYV0pO2Vsc2V7Zm9yKHZhciBzPTA7czxpOysrcylmW3NdPWVbaSphK3NdO2guY2FsbCh0LG8sZil9fXJldHVybiBlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZW51bWVyYWJsZTohMH0pfX0seyIuL0dMRXJyb3IiOjEzM31dLDEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3JlZmxlY3QiKSxpPXQoIi4vR0xFcnJvciIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKHZhciBhPWZ1bmN0aW9uIHQoZSxyKXtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuW1tlLHJdXTt2YXIgbj1bXTtmb3IodmFyIGkgaW4gcil7dmFyIGE9cltpXSxvPWU7cGFyc2VJbnQoaSkrIiI9PT1pP28rPSJbIitpKyJdIjpvKz0iLiIraSwib2JqZWN0Ij09dHlwZW9mIGE/bi5wdXNoLmFwcGx5KG4sdChvLGEpKTpuLnB1c2goW28sYV0pfXJldHVybiBufSgiIixlKSxvPTA7bzxhLmxlbmd0aDsrK28pe3ZhciBsPWFbb10sYz1sWzBdLHU9bFsxXTtpZihzW3VdKXt2YXIgZj1uO2lmKCJzdHJpbmciPT10eXBlb2YgYyYmKDA9PT1jLmluZGV4T2YoIi4iKXx8MD09PWMuaW5kZXhPZigiWyIpKSl7dmFyIGg9YztpZigwPT09Yy5pbmRleE9mKCIuIikmJihoPWMuc2xpY2UoMSkpLGguaW5kZXhPZigiXSIpPT09aC5sZW5ndGgtMSl7dmFyIHA9aC5pbmRleE9mKCJbIiksZD1oLnNsaWNlKDAscCksbT1oLnNsaWNlKHArMSxoLmxlbmd0aC0xKTtmPWQ/bltkXVttXTpuW21dfWVsc2UgZj1uW2hdfXZhciBnLHY9clt1XS50eXBlO3N3aXRjaCh2KXtjYXNlImJvb2wiOmNhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6dC51bmlmb3JtMWkoc1t1XSxmKTticmVhaztjYXNlImZsb2F0Ijp0LnVuaWZvcm0xZihzW3VdLGYpO2JyZWFrO2RlZmF1bHQ6dmFyIHk9di5pbmRleE9mKCJ2ZWMiKTtpZighKDA8PXkmJnk8PTEmJnYubGVuZ3RoPT09NCt5KSl7aWYoMD09PXYuaW5kZXhPZigibWF0IikmJjQ9PT12Lmxlbmd0aCl7aWYoKGc9di5jaGFyQ29kZUF0KHYubGVuZ3RoLTEpLTQ4KTwyfHxnPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3YpO3RbInVuaWZvcm1NYXRyaXgiK2crImZ2Il0oc1t1XSwhMSxmKTticmVha310aHJvdyBuZXcgaSgiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdil9aWYoKGc9di5jaGFyQ29kZUF0KHYubGVuZ3RoLTEpLTQ4KTwyfHxnPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7c3dpdGNoKHYuY2hhckF0KDApKXtjYXNlImIiOmNhc2UiaSI6dFsidW5pZm9ybSIrZysiaXYiXShzW3VdLGYpO2JyZWFrO2Nhc2UidiI6dFsidW5pZm9ybSIrZysiZnYiXShzW3VdLGYpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGkoIiIsIlVucmVjb2duaXplZCBkYXRhIHR5cGUgZm9yIHZlY3RvciAiK25hbWUrIjogIit2KX19fX19fWZ1bmN0aW9uIGModCxlLG4pe2lmKCJvYmplY3QiPT10eXBlb2Ygbil7dmFyIGM9dShuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6YShjKSxzZXQ6bChuKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2Ugc1tuXT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6KGY9bixmdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZ2V0VW5pZm9ybShlLnByb2dyYW0scltmXSl9KSxzZXQ6bChuKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOnRbZV09ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe2lmKChyPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00OCk8Mnx8cj40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSIpO3JldHVybiJiIj09PXQuY2hhckF0KDApP28ociwhMSk6byhyLDApfWlmKDA9PT10LmluZGV4T2YoIm1hdCIpJiY0PT09dC5sZW5ndGgpe3ZhciByO2lmKChyPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00OCk8Mnx8cj40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIit0KTtyZXR1cm4gbyhyKnIsMCl9dGhyb3cgbmV3IGkoIiIsIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yICIrbmFtZSsiOiAiK3QpfX0ocltuXS50eXBlKTt2YXIgZn1mdW5jdGlvbiB1KHQpe3ZhciBlO2lmKEFycmF5LmlzQXJyYXkodCkpe2U9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrciljKGUscix0W3JdKX1lbHNlIGZvcih2YXIgbiBpbiBlPXt9LHQpYyhlLG4sdFtuXSk7cmV0dXJuIGV9dmFyIGY9bihyLCEwKTtyZXR1cm57Z2V0OmEodShmKSksc2V0OmwoZiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9fX0seyIuL0dMRXJyb3IiOjEzMywiLi9yZWZsZWN0IjoxMzZ9XSwxMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXS5uYW1lLnNwbGl0KCIuIiksYT1yLG89MDtvPGkubGVuZ3RoOysrbyl7dmFyIHM9aVtvXS5zcGxpdCgiWyIpO2lmKHMubGVuZ3RoPjEpe3NbMF1pbiBhfHwoYVtzWzBdXT1bXSksYT1hW3NbMF1dO2Zvcih2YXIgbD0xO2w8cy5sZW5ndGg7KytsKXt2YXIgYz1wYXJzZUludChzW2xdKTtsPHMubGVuZ3RoLTF8fG88aS5sZW5ndGgtMT8oYyBpbiBhfHwobDxzLmxlbmd0aC0xP2FbY109W106YVtjXT17fSksYT1hW2NdKTphW2NdPWU/bjp0W25dLnR5cGV9fWVsc2UgbzxpLmxlbmd0aC0xPyhzWzBdaW4gYXx8KGFbc1swXV09e30pLGE9YVtzWzBdXSk6YVtzWzBdXT1lP246dFtuXS50eXBlfXJldHVybiByfX0se31dLDEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuQUNUSVZFX1VOSUZPUk1TKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZVVuaWZvcm0oZSxpKTtpZihvKXt2YXIgcz1hKHQsby50eXBlKTtpZihvLnNpemU+MSlmb3IodmFyIGw9MDtsPG8uc2l6ZTsrK2wpbi5wdXNoKHtuYW1lOm8ubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitsKyJdIiksdHlwZTpzfSk7ZWxzZSBuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6c30pfX1yZXR1cm4gbn0sci5hdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuQUNUSVZFX0FUVFJJQlVURVMpLG49W10saT0wO2k8cjsrK2kpe3ZhciBvPXQuZ2V0QWN0aXZlQXR0cmliKGUsaSk7byYmbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOmEodCxvLnR5cGUpfSl9cmV0dXJuIG59O3ZhciBuPXtGTE9BVDoiZmxvYXQiLEZMT0FUX1ZFQzI6InZlYzIiLEZMT0FUX1ZFQzM6InZlYzMiLEZMT0FUX1ZFQzQ6InZlYzQiLElOVDoiaW50IixJTlRfVkVDMjoiaXZlYzIiLElOVF9WRUMzOiJpdmVjMyIsSU5UX1ZFQzQ6Iml2ZWM0IixCT09MOiJib29sIixCT09MX1ZFQzI6ImJ2ZWMyIixCT09MX1ZFQzM6ImJ2ZWMzIixCT09MX1ZFQzQ6ImJ2ZWM0IixGTE9BVF9NQVQyOiJtYXQyIixGTE9BVF9NQVQzOiJtYXQzIixGTE9BVF9NQVQ0OiJtYXQ0IixTQU1QTEVSXzJEOiJzYW1wbGVyMkQiLFNBTVBMRVJfQ1VCRToic2FtcGxlckN1YmUifSxpPW51bGw7ZnVuY3Rpb24gYSh0LGUpe2lmKCFpKXt2YXIgcj1PYmplY3Qua2V5cyhuKTtpPXt9O2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lbdFtvXV09bltvXX19cmV0dXJuIGlbZV19fSx7fV0sMTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3Iuc2hhZGVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdSh0KS5nZXRTaGFkZXJSZWZlcmVuY2UoZSxyKX0sci5wcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHUodCkuZ2V0UHJvZ3JhbShlLHIsbixpKX07dmFyIG49dCgiLi9HTEVycm9yIiksaT10KCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiKSxhPW5ldygidW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXA/dCgid2Vha21hcC1zaGltIik6V2Vha01hcCksbz0wO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gbCh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1zLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoMD09LS10aGlzLmNvdW50KXtmb3IodmFyIHQ9dGhpcy5jYWNoZSxlPXQuZ2wscj10aGlzLnByb2dyYW1zLG49MCxpPXIubGVuZ3RoO248aTsrK24pe3ZhciBhPXQucHJvZ3JhbXNbcltuXV07YSYmKGRlbGV0ZSB0LnByb2dyYW1zW25dLGUuZGVsZXRlUHJvZ3JhbShhKSl9ZS5kZWxldGVTaGFkZXIodGhpcy5zaGFkZXIpLGRlbGV0ZSB0LnNoYWRlcnNbdGhpcy50eXBlPT09ZS5GUkFHTUVOVF9TSEFERVJ8MF1bdGhpcy5zcmNdfX07dmFyIGM9bC5wcm90b3R5cGU7ZnVuY3Rpb24gdSh0KXt2YXIgZT1hLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGwodCksYS5zZXQodCxlKSksZX1jLmdldFNoYWRlclJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2wsYT10aGlzLnNoYWRlcnNbdD09PXIuRlJBR01FTlRfU0hBREVSfDBdLGw9YVtlXTtpZihsJiZyLmlzU2hhZGVyKGwuc2hhZGVyKSlsLmNvdW50Kz0xO2Vsc2V7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY3JlYXRlU2hhZGVyKGUpO2lmKHQuc2hhZGVyU291cmNlKGEsciksdC5jb21waWxlU2hhZGVyKGEpLCF0LmdldFNoYWRlclBhcmFtZXRlcihhLHQuQ09NUElMRV9TVEFUVVMpKXt2YXIgbz10LmdldFNoYWRlckluZm9Mb2coYSk7dHJ5e3ZhciBzPWkobyxyLGUpfWNhdGNoKHQpe3Rocm93IGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZvcm1hdCBjb21waWxlciBlcnJvcjogIit0KSxuZXcgbihvLCJFcnJvciBjb21waWxpbmcgc2hhZGVyOlxuIitvKX10aHJvdyBuZXcgbihvLHMuc2hvcnQscy5sb25nKX1yZXR1cm4gYX0ocix0LGUpO2w9YVtlXT1uZXcgcyhvKyssZSx0LGMsW10sMSx0aGlzKX1yZXR1cm4gbH0sYy5nZXRQcm9ncmFtPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPVt0LmlkLGUuaWQsci5qb2luKCI6IiksaS5qb2luKCI6IildLmpvaW4oIkAiKSxvPXRoaXMucHJvZ3JhbXNbYV07cmV0dXJuIG8mJnRoaXMuZ2wuaXNQcm9ncmFtKG8pfHwodGhpcy5wcm9ncmFtc1thXT1vPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIobyxlKSx0LmF0dGFjaFNoYWRlcihvLHIpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7KytzKXQuYmluZEF0dHJpYkxvY2F0aW9uKG8sYVtzXSxpW3NdKTtpZih0LmxpbmtQcm9ncmFtKG8pLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIobyx0LkxJTktfU1RBVFVTKSl7dmFyIGw9dC5nZXRQcm9ncmFtSW5mb0xvZyhvKTt0aHJvdyBuZXcgbihsLCJFcnJvciBsaW5raW5nIHByb2dyYW06ICIrbCl9cmV0dXJuIG99KHRoaXMuZ2wsdC5zaGFkZXIsZS5zaGFkZXIscixpKSx0LnByb2dyYW1zLnB1c2goYSksZS5wcm9ncmFtcy5wdXNoKGEpKSxvfX0seyIuL0dMRXJyb3IiOjEzMywiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjo4Nywid2Vha21hcC1zaGltIjozMTZ9XSwxMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnBsb3Q9dCx0aGlzLmVuYWJsZT1bITAsITAsITEsITFdLHRoaXMud2lkdGg9WzEsMSwxLDFdLHRoaXMuY29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5jZW50ZXI9WzEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuKHQpO3JldHVybiByLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkocikscn07dmFyIGk9bi5wcm90b3R5cGU7aS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmVuYWJsZT0odC5lbmFibGV8fFshMCwhMCwhMSwhMV0pLnNsaWNlKCksdGhpcy53aWR0aD0odC53aWR0aHx8WzEsMSwxLDFdKS5zbGljZSgpLHRoaXMuY29sb3I9KHQuY29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSksdGhpcy5jZW50ZXI9KHQuY2VudGVyfHxbMS8wLDEvMF0pLnNsaWNlKCksdGhpcy5wbG90LnNldE92ZXJsYXlEaXJ0eSgpfSxpLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVuYWJsZSxlPXRoaXMud2lkdGgscj10aGlzLmNvbG9yLG49dGhpcy5jZW50ZXIsaT10aGlzLnBsb3QsYT1pLmxpbmUsbz1pLmRhdGFCb3gscz1pLnZpZXdCb3g7aWYoYS5iaW5kKCksb1swXTw9blswXSYmblswXTw9b1syXSYmb1sxXTw9blsxXSYmblsxXTw9b1szXSl7dmFyIGw9c1swXSsoblswXS1vWzBdKS8ob1syXS1vWzBdKSooc1syXS1zWzBdKSxjPXNbMV0rKG5bMV0tb1sxXSkvKG9bM10tb1sxXSkqKHNbM10tc1sxXSk7dFswXSYmYS5kcmF3TGluZShsLGMsc1swXSxjLGVbMF0sclswXSksdFsxXSYmYS5kcmF3TGluZShsLGMsbCxzWzFdLGVbMV0sclsxXSksdFsyXSYmYS5kcmF3TGluZShsLGMsc1syXSxjLGVbMl0sclsyXSksdFszXSYmYS5kcmF3TGluZShsLGMsbCxzWzNdLGVbM10sclszXSl9fSxpLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHt9XSwxNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY29vcmRpbmF0ZXNbM107XG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2ZXJ0ZXhQb3NpdGlvbiA9IG1peChjb29yZGluYXRlc1swXSxcbiAgICBtaXgoY29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzFdLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKSwgYWJzKHBvc2l0aW9uKSk7XG5cbiAgdmVjNCBjbGlwUG9zID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQodmVydGV4UG9zaXRpb24sIDEuMCk7XG4gIHZlYzIgY2xpcE9mZnNldCA9IChwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChjb2xvciwgMC4wKSkueHk7XG4gIHZlYzIgZGVsdGEgPSB3ZWlnaHQgKiBjbGlwT2Zmc2V0ICogc2NyZWVuU2hhcGU7XG4gIHZlYzIgbGluZU9mZnNldCA9IG5vcm1hbGl6ZSh2ZWMyKGRlbHRhLnksIC1kZWx0YS54KSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiAgID0gdmVjNChjbGlwUG9zLnh5ICsgY2xpcFBvcy53ICogMC41ICogbGluZVdpZHRoICogbGluZU9mZnNldCwgY2xpcFBvcy56LCBjbGlwUG9zLncpO1xuICBmcmFnQ29sb3IgICAgID0gY29sb3IueCAqIGNvbG9yc1swXSArIGNvbG9yLnkgKiBjb2xvcnNbMV0gKyBjb2xvci56ICogY29sb3JzWzJdO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzMifSx7bmFtZToid2VpZ2h0Iix0eXBlOiJmbG9hdCJ9XSl9fSx7ImdsLXNoYWRlciI6MTMyLGdsc2xpZnk6MjMxfV0sMTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMvaW5kZXgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmdW5jdGlvbiBvKHQsZSxuLGksYSxvKXt2YXIgcz1bdCxlLG4sMCwwLDAsMV07c1tpKzNdPTEsc1tpXT1hLHIucHVzaC5hcHBseShyLHMpLHNbNl09LTEsci5wdXNoLmFwcGx5KHIscyksc1tpXT1vLHIucHVzaC5hcHBseShyLHMpLHIucHVzaC5hcHBseShyLHMpLHNbNl09MSxyLnB1c2guYXBwbHkocixzKSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyl9bygwLDAsMCwwLDAsMSksbygwLDAsMCwxLDAsMSksbygwLDAsMCwyLDAsMSksbygxLDAsMCwxLC0xLDEpLG8oMSwwLDAsMiwtMSwxKSxvKDAsMSwwLDAsLTEsMSksbygwLDEsMCwyLC0xLDEpLG8oMCwwLDEsMCwtMSwxKSxvKDAsMCwxLDEsLTEsMSk7dmFyIGw9bih0LHIpLGM9aSh0LFt7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6Mjh9XSksdT1hKHQpO3UuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLHUuYXR0cmlidXRlcy53ZWlnaHQubG9jYXRpb249Mjt2YXIgZj1uZXcgcyh0LGwsYyx1KTtyZXR1cm4gZi51cGRhdGUoZSksZn07dmFyIG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTFlMywtMWUzLC0xZTNdLFsxZTMsMWUzLDFlM11dLHRoaXMucG9zaXRpb249WzAsMCwwXSx0aGlzLmxpbmVXaWR0aD1bMiwyLDJdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmF4ZXM9bnVsbH12YXIgbD1zLnByb3RvdHlwZSxjPVswLDAsMF0sdT1bMCwwLDBdLGY9WzAsMF07bC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe30sbC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnZhbyxuPXRoaXMuc2hhZGVyO3IuYmluZCgpLG4uYmluZCgpO3ZhciBpLGE9dC5tb2RlbHx8byxzPXQudmlld3x8byxsPXQucHJvamVjdGlvbnx8bzt0aGlzLmF4ZXMmJihpPXRoaXMuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXMpO2Zvcih2YXIgaD1jLHA9dSxkPTA7ZDwzOysrZClpJiZpW2RdPDA/KGhbZF09dGhpcy5ib3VuZHNbMF1bZF0scFtkXT10aGlzLmJvdW5kc1sxXVtkXSk6KGhbZF09dGhpcy5ib3VuZHNbMV1bZF0scFtkXT10aGlzLmJvdW5kc1swXVtkXSk7ZlswXT1lLmRyYXdpbmdCdWZmZXJXaWR0aCxmWzFdPWUuZHJhd2luZ0J1ZmZlckhlaWdodCxuLnVuaWZvcm1zLm1vZGVsPWEsbi51bmlmb3Jtcy52aWV3PXMsbi51bmlmb3Jtcy5wcm9qZWN0aW9uPWwsbi51bmlmb3Jtcy5jb29yZGluYXRlcz1bdGhpcy5wb3NpdGlvbixoLHBdLG4udW5pZm9ybXMuY29sb3JzPXRoaXMuY29sb3JzLG4udW5pZm9ybXMuc2NyZWVuU2hhcGU9Zjtmb3IoZD0wO2Q8MzsrK2Qpbi51bmlmb3Jtcy5saW5lV2lkdGg9dGhpcy5saW5lV2lkdGhbZF0qdGhpcy5waXhlbFJhdGlvLHRoaXMuZW5hYmxlZFtkXSYmKHIuZHJhdyhlLlRSSUFOR0xFUyw2LDYqZCksdGhpcy5kcmF3U2lkZXNbZF0mJnIuZHJhdyhlLlRSSUFOR0xFUywxMiwxOCsxMipkKSk7ci51bmJpbmQoKX0sbC51cGRhdGU9ZnVuY3Rpb24odCl7dCYmKCJib3VuZHMiaW4gdCYmKHRoaXMuYm91bmRzPXQuYm91bmRzKSwicG9zaXRpb24iaW4gdCYmKHRoaXMucG9zaXRpb249dC5wb3NpdGlvbiksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJjb2xvcnMiaW4gdCYmKHRoaXMuY29sb3JzPXQuY29sb3JzKSwiZW5hYmxlZCJpbiB0JiYodGhpcy5lbmFibGVkPXQuZW5hYmxlZCksImRyYXdTaWRlcyJpbiB0JiYodGhpcy5kcmF3U2lkZXM9dC5kcmF3U2lkZXMpKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MTQwLCJnbC1idWZmZXIiOjc4LCJnbC12YW8iOjE1MH1dLDE0MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSB0dWJlIHJpbmcgd2l0aCBpdHMgY2VudGVyIGF0IG9yaWdpbiwgcmFkaXVzIG9mIGxlbmd0aChkKSwgcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiBkLlxuLy9cbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSB0dWJlIGJ5IGNvbm5lY3RpbmcgdGhlbSB0b2dldGhlciBpbiB0aGUgdmVydGV4IGFycmF5LlxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXG4vL1xudmVjMyBnZXRUdWJlUG9zaXRpb24odmVjMyBkLCBmbG9hdCBpbmRleCwgb3V0IHZlYzMgbm9ybWFsKSB7XG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoaW5kZXggLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHYzID0geCArIHk7XG5cbiAgbm9ybWFsID0gbm9ybWFsaXplKHYzKTtcblxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlLCB0dWJlU2NhbGU7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbiwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XG4gIHZlYzQgdHViZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNCh0dWJlUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gdHViZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzQifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfX0se2dsc2xpZnk6MjMxfV0sMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXZlYzMiKSxpPXQoImdsLXZlYzQiKSxhPVsieHl6IiwieHp5IiwieXh6IiwieXp4Iiwienh5Iiwienl4Il0sbz1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspbz1NYXRoLm1heChvLG4ubGVuZ3RoKGxbY10pKTt2YXIgdT10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz10LnBvaW50cyxzPXQudmVsb2NpdGllcyxsPXQuZGl2ZXJnZW5jZXMsYz1bXSx1PVtdLGY9W10saD1bXSxwPVtdLGQ9W10sbT0wLGc9MCx2PWkuY3JlYXRlKCkseT1pLmNyZWF0ZSgpLHg9MDt4PG8ubGVuZ3RoO3grKyl7dmFyIGI9b1t4XSxfPXNbeF0sdz1sW3hdOzA9PT1lJiYodz0uMDUqciksZz1uLmxlbmd0aChfKS9hLHY9aS5jcmVhdGUoKSxuLmNvcHkodixfKSx2WzNdPXc7Zm9yKHZhciBUPTA7VDw4O1QrKylwW1RdPVtiWzBdLGJbMV0sYlsyXSxUXTtpZihoLmxlbmd0aD4wKWZvcihUPTA7VDw4O1QrKyl7dmFyIGs9KFQrMSklODtjLnB1c2goaFtUXSxwW1RdLHBba10scFtrXSxoW2tdLGhbVF0pLGYucHVzaCh5LHYsdix2LHkseSksZC5wdXNoKG0sZyxnLGcsbSxtKTt2YXIgQT1jLmxlbmd0aDt1LnB1c2goW0EtNixBLTUsQS00XSxbQS0zLEEtMixBLTFdKX12YXIgTT1oO2g9cCxwPU07dmFyIFM9eTt5PXYsdj1TO3ZhciBFPW07bT1nLGc9RX1yZXR1cm57cG9zaXRpb25zOmMsY2VsbHM6dSx2ZWN0b3JzOmYsdmVydGV4SW50ZW5zaXR5OmR9fSh0LHIsYSxvKX0pKSxmPVtdLGg9W10scD1bXSxkPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspe3ZhciBtPXVbc10sZz1mLmxlbmd0aDtmPWYuY29uY2F0KG0ucG9zaXRpb25zKSxwPXAuY29uY2F0KG0udmVjdG9ycyksZD1kLmNvbmNhdChtLnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPG0uY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHY9bS5jZWxsc1tjXSx5PVtdO2gucHVzaCh5KTtmb3IodmFyIHg9MDt4PHYubGVuZ3RoO3grKyl5LnB1c2godlt4XStnKX19cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOmgsdmVjdG9yczpwLHZlcnRleEludGVuc2l0eTpkLGNvbG9ybWFwOmV9fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aDtmb3Iocj0wO3I8bjtyKyspe3ZhciBpPXRbcl07aWYoaT09PWUpcmV0dXJuIHI7aWYoaT5lKXJldHVybiByLTF9cmV0dXJuIHJ9LGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxjPWZ1bmN0aW9uKHQpe3ZhciBlPTEvMDt0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtmb3IodmFyIHI9dC5sZW5ndGgsbj0xO248cjtuKyspe3ZhciBpPU1hdGguYWJzKHRbbl0tdFtuLTFdKTtpPGUmJihlPWkpfXJldHVybiBlfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXJ0aW5nUG9zaXRpb25zLGk9dC5tYXhMZW5ndGh8fDFlMyx1PXQudHViZVNpemV8fDEsZj10LmFic29sdXRlVHViZVNpemUsaD10LmdyaWRGaWxsfHwiK3greSt6IixwPXt9Oy0xIT09aC5pbmRleE9mKCIteCIpJiYocC5yZXZlcnNlZFg9ITApLC0xIT09aC5pbmRleE9mKCIteSIpJiYocC5yZXZlcnNlZFk9ITApLC0xIT09aC5pbmRleE9mKCIteiIpJiYocC5yZXZlcnNlZFo9ITApLHAuZmlsbGVkPWEuaW5kZXhPZihoLnJlcGxhY2UoLy0vZywiIikucmVwbGFjZSgvXCsvZywiIikpO3ZhciBkPXQuZ2V0VmVsb2NpdHl8fGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGk9ZS52ZWN0b3JzLGE9ZS5tZXNoZ3JpZCxvPXRbMF0sYz10WzFdLHU9dFsyXSxmPWFbMF0ubGVuZ3RoLGg9YVsxXS5sZW5ndGgscD1hWzJdLmxlbmd0aCxkPXMoYVswXSxvKSxtPXMoYVsxXSxjKSxnPXMoYVsyXSx1KSx2PWQrMSx5PW0rMSx4PWcrMTtpZihkPWwoZCwwLGYtMSksdj1sKHYsMCxmLTEpLG09bChtLDAsaC0xKSx5PWwoeSwwLGgtMSksZz1sKGcsMCxwLTEpLHg9bCh4LDAscC0xKSxkPDB8fG08MHx8ZzwwfHx2PmYtMXx8eT5oLTF8fHg+cC0xKXJldHVybiBuLmNyZWF0ZSgpO3ZhciBiLF8sdyxULGssQSxNPWFbMF1bZF0sUz1hWzBdW3ZdLEU9YVsxXVttXSxMPWFbMV1beV0sQz1hWzJdW2ddLFA9KG8tTSkvKFMtTSksST0oYy1FKS8oTC1FKSxPPSh1LUMpLyhhWzJdW3hdLUMpO3N3aXRjaChpc0Zpbml0ZShQKXx8KFA9LjUpLGlzRmluaXRlKEkpfHwoST0uNSksaXNGaW5pdGUoTyl8fChPPS41KSxyLnJldmVyc2VkWCYmKGQ9Zi0xLWQsdj1mLTEtdiksci5yZXZlcnNlZFkmJihtPWgtMS1tLHk9aC0xLXkpLHIucmV2ZXJzZWRaJiYoZz1wLTEtZyx4PXAtMS14KSxyLmZpbGxlZCl7Y2FzZSA1Oms9ZyxBPXgsdz1tKnAsVD15KnAsYj1kKnAqaCxfPXYqcCpoO2JyZWFrO2Nhc2UgNDprPWcsQT14LGI9ZCpwLF89dipwLHc9bSpwKmYsVD15KnAqZjticmVhaztjYXNlIDM6dz1tLFQ9eSxrPWcqaCxBPXgqaCxiPWQqaCpwLF89dipoKnA7YnJlYWs7Y2FzZSAyOnc9bSxUPXksYj1kKmgsXz12Kmgsaz1nKmgqZixBPXgqaCpmO2JyZWFrO2Nhc2UgMTpiPWQsXz12LGs9ZypmLEE9eCpmLHc9bSpmKnAsVD15KmYqcDticmVhaztkZWZhdWx0OmI9ZCxfPXYsdz1tKmYsVD15KmYsaz1nKmYqaCxBPXgqZipofXZhciB6PWlbYit3K2tdLEQ9aVtiK3crQV0sUj1pW2IrVCtrXSxGPWlbYitUK0FdLEI9aVtfK3cra10sTj1pW18rdytBXSxqPWlbXytUK2tdLFU9aVtfK1QrQV0sVj1uLmNyZWF0ZSgpLEg9bi5jcmVhdGUoKSxxPW4uY3JlYXRlKCksRz1uLmNyZWF0ZSgpO24ubGVycChWLHosQixQKSxuLmxlcnAoSCxELE4sUCksbi5sZXJwKHEsUixqLFApLG4ubGVycChHLEYsVSxQKTt2YXIgWT1uLmNyZWF0ZSgpLFc9bi5jcmVhdGUoKTtuLmxlcnAoWSxWLHEsSSksbi5sZXJwKFcsSCxHLEkpO3ZhciBYPW4uY3JlYXRlKCk7cmV0dXJuIG4ubGVycChYLFksVyxPKSxYfShlLHQscCl9LG09dC5nZXREaXZlcmdlbmNlfHxmdW5jdGlvbih0LGUpe3ZhciByPW4uY3JlYXRlKCksaT0xZS00O24uYWRkKHIsdCxbaSwwLDBdKTt2YXIgYT1kKHIpO24uc3VidHJhY3QoYSxhLGUpLG4uc2NhbGUoYSxhLDEvaSksbi5hZGQocix0LFswLGksMF0pO3ZhciBvPWQocik7bi5zdWJ0cmFjdChvLG8sZSksbi5zY2FsZShvLG8sMS9pKSxuLmFkZChyLHQsWzAsMCxpXSk7dmFyIHM9ZChyKTtyZXR1cm4gbi5zdWJ0cmFjdChzLHMsZSksbi5zY2FsZShzLHMsMS9pKSxuLmFkZChyLGEsbyksbi5hZGQocixyLHMpLHJ9LGc9W10sdj1lWzBdWzBdLHk9ZVswXVsxXSx4PWVbMF1bMl0sYj1lWzFdWzBdLF89ZVsxXVsxXSx3PWVbMV1bMl0sVD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIShlPHZ8fGU+Ynx8cjx5fHxyPl98fG48eHx8bj53KX0saz0xMCpuLmRpc3RhbmNlKGVbMF0sZVsxXSkvaSxBPWsqayxNPTEsUz0wLEU9ci5sZW5ndGg7RT4xJiYoTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxuPVtdLGk9e30sYT17fSxvPXt9LHM9dC5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciB1PXRbbF0sZj11WzBdLGg9dVsxXSxwPXVbMl07aVtmXXx8KGUucHVzaChmKSxpW2ZdPSEwKSxhW2hdfHwoci5wdXNoKGgpLGFbaF09ITApLG9bcF18fChuLnB1c2gocCksb1twXT0hMCl9dmFyIGQ9YyhlKSxtPWMociksZz1jKG4pLHY9TWF0aC5taW4oZCxtLGcpO3JldHVybiBpc0Zpbml0ZSh2KT92OjF9KHIpKTtmb3IodmFyIEw9MDtMPEU7TCsrKXt2YXIgQz1uLmNyZWF0ZSgpO24uY29weShDLHJbTF0pO3ZhciBQPVtDXSxJPVtdLE89ZChDKSx6PUM7SS5wdXNoKE8pO3ZhciBEPVtdLFI9bShDLE8pLEY9bi5sZW5ndGgoUik7aXNGaW5pdGUoRikmJkY+UyYmKFM9RiksRC5wdXNoKEYpLGcucHVzaCh7cG9pbnRzOlAsdmVsb2NpdGllczpJLGRpdmVyZ2VuY2VzOkR9KTtmb3IodmFyIEI9MDtCPDEwMCppJiZQLmxlbmd0aDxpJiZUKEMpOyl7QisrO3ZhciBOPW4uY2xvbmUoTyksaj1uLnNxdWFyZWRMZW5ndGgoTik7aWYoMD09PWopYnJlYWs7aWYoaj5BJiZuLnNjYWxlKE4sTixrL01hdGguc3FydChqKSksbi5hZGQoTixOLEMpLE89ZChOKSxuLnNxdWFyZWREaXN0YW5jZSh6LE4pLUE+LTFlLTQqQSl7UC5wdXNoKE4pLHo9TixJLnB1c2goTyk7Uj1tKE4sTyksRj1uLmxlbmd0aChSKTtpc0Zpbml0ZShGKSYmRj5TJiYoUz1GKSxELnB1c2goRil9Qz1OfX12YXIgVT1vKGcsdC5jb2xvcm1hcCxTLE0pO3JldHVybiBmP1UudHViZVNjYWxlPWY6KDA9PT1TJiYoUz0xKSxVLnR1YmVTY2FsZT0uNSp1Kk0vUyksVX07dmFyIHU9dCgiLi9saWIvc2hhZGVycyIpLGY9dCgiZ2wtY29uZTNkIikuY3JlYXRlTWVzaDtlLmV4cG9ydHMuY3JlYXRlVHViZU1lc2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUse3NoYWRlcnM6dSx0cmFjZVR5cGU6InN0cmVhbXR1YmUifSl9fSx7Ii4vbGliL3NoYWRlcnMiOjE0MiwiZ2wtY29uZTNkIjo3OSwiZ2wtdmVjMyI6MTY5LCJnbC12ZWM0IjoyMDV9XSwxNDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsc2xpZnkiKSxhPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSB2ZWMzIGY7XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gdmVjMyBvYmplY3RPZmZzZXQ7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uLCBleWVQb3NpdGlvbjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBsb2NhbENvb3JkaW5hdGUgPSB2ZWMzKHV2Lnp3LCBmLngpO1xuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBsb2NhbENvb3JkaW5hdGU7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNCh3b3JsZENvb3JkaW5hdGUsIDEuMCk7XG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAga2lsbCA9IGYueTtcbiAgdmFsdWUgPSBmLno7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnh5O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGV5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgc3VyZmFjZU5vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDApICogaW52ZXJzZU1vZGVsKS54eXopO1xufVxuIl0pLG89aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgYmVja21hbm5TcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcykge1xuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb24oZG90KHN1cmZhY2VOb3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pKSwgcm91Z2huZXNzKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBsb3dlckJvdW5kLCB1cHBlckJvdW5kO1xudW5pZm9ybSBmbG9hdCBjb250b3VyVGludDtcbnVuaWZvcm0gdmVjNCBjb250b3VyQ29sb3I7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MsIGZyZXNuZWwsIGthbWJpZW50LCBrZGlmZnVzZSwga3NwZWN1bGFyLCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCB2ZXJ0ZXhDb2xvcjtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKFxuICAgIGtpbGwgPiAwLjAgfHxcbiAgICB2Q29sb3IuYSA9PSAwLjAgfHxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSlcbiAgKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShzdXJmYWNlTm9ybWFsKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZURpcmVjdGlvbik7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1heChiZWNrbWFublNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcyksIDAuKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgLy9kZWNpZGUgaG93IHRvIGludGVycG9sYXRlIGNvbG9yIFx1MjAxNCBpbiB2ZXJ0ZXggb3IgaW4gZnJhZ21lbnRcbiAgdmVjNCBzdXJmYWNlQ29sb3IgPVxuICAgIHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArXG4gICAgc3RlcCguNSwgdmVydGV4Q29sb3IpICogdkNvbG9yO1xuXG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBtaXgobGl0Q29sb3IsIGNvbnRvdXJDb2xvciwgY29udG91clRpbnQpICogb3BhY2l0eTtcbn1cbiJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSBmbG9hdCBmO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IG9iamVjdE9mZnNldCArIGRhdGFDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuXG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjbGlwUG9zaXRpb24ueiArPSB6T2Zmc2V0O1xuXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICB2YWx1ZSA9IGYgKyBvYmplY3RPZmZzZXQuejtcbiAga2lsbCA9IC0xLjA7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnp3O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0Rvbid0IGRvIGxpZ2h0aW5nIGZvciBjb250b3Vyc1xuICBzdXJmYWNlTm9ybWFsICAgPSB2ZWMzKDEsMCwwKTtcbiAgZXllRGlyZWN0aW9uICAgID0gdmVjMygwLDEsMCk7XG4gIGxpZ2h0RGlyZWN0aW9uICA9IHZlYzMoMCwwLDEpO1xufVxuIl0pLGw9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcblxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XG4gIGZsb2F0IHVwcGVyID0gZmxvb3IodmgpO1xuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmICgoa2lsbCA+IDAuMCkgfHxcbiAgICAgIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkQ29vcmRpbmF0ZSkpKSBkaXNjYXJkO1xuXG4gIHZlYzIgdXggPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS54IC8gc2hhcGUueCk7XG4gIHZlYzIgdXkgPSBzcGxpdEZsb2F0KHBsYW5lQ29vcmRpbmF0ZS55IC8gc2hhcGUueSk7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCB1eC54LCB1eS54LCB1eC55ICsgKHV5LnkvMTYuMCkpO1xufVxuIl0pO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxhLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTIsZX0sci5jcmVhdGVDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLG8sbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfSxyLmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCxzLGwsbnVsbCxbe25hbWU6InV2Iix0eXBlOiJ2ZWM0In0se25hbWU6ImYiLHR5cGU6ImZsb2F0In1dKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmYubG9jYXRpb249MSxlfX0seyJnbC1zaGFkZXIiOjEzMixnbHNsaWZ5OjIzMX1dLDE0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPXkoZSksbj1iKGUpLHM9eChlKSxsPV8oZSksYz1pKGUpLHU9YShlLFt7YnVmZmVyOmMsc2l6ZTo0LHN0cmlkZTo0MCxvZmZzZXQ6MH0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6NDAsb2Zmc2V0OjE2fSx7YnVmZmVyOmMsc2l6ZTozLHN0cmlkZTo0MCxvZmZzZXQ6Mjh9XSksZj1pKGUpLGg9YShlLFt7YnVmZmVyOmYsc2l6ZTo0LHN0cmlkZToyMCxvZmZzZXQ6MH0se2J1ZmZlcjpmLHNpemU6MSxzdHJpZGU6MjAsb2Zmc2V0OjE2fV0pLHA9aShlKSxkPWEoZSxbe2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9XSksbT1vKGUsMSwyNTYsZS5SR0JBLGUuVU5TSUdORURfQllURSk7bS5taW5GaWx0ZXI9ZS5MSU5FQVIsbS5tYWdGaWx0ZXI9ZS5MSU5FQVI7dmFyIGc9bmV3IE0oZSxbMCwwXSxbWzAsMCwwXSxbMCwwLDBdXSxyLG4sYyx1LG0scyxsLGYsaCxwLGQsWzAsMCwwXSksdj17bGV2ZWxzOltbXSxbXSxbXV19O2Zvcih2YXIgdyBpbiB0KXZbd109dFt3XTtyZXR1cm4gdi5jb2xvcm1hcD12LmNvbG9ybWFwfHwiamV0IixnLnVwZGF0ZSh2KSxnfTt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgidHlwZWRhcnJheS1wb29sIiksbD10KCJjb2xvcm1hcCIpLGM9dCgibmRhcnJheS1vcHMiKSx1PXQoIm5kYXJyYXktcGFjayIpLGY9dCgibmRhcnJheSIpLGg9dCgic3VyZmFjZS1uZXRzIikscD10KCJnbC1tYXQ0L211bHRpcGx5IiksZD10KCJnbC1tYXQ0L2ludmVydCIpLG09dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxnPXQoIm5kYXJyYXktZ3JhZGllbnQiKSx2PXQoIi4vbGliL3NoYWRlcnMiKSx5PXYuY3JlYXRlU2hhZGVyLHg9di5jcmVhdGVDb250b3VyU2hhZGVyLGI9di5jcmVhdGVQaWNrU2hhZGVyLF89di5jcmVhdGVQaWNrQ29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxUPVtbMCwwXSxbMCwxXSxbMSwwXSxbMSwxXSxbMSwwXSxbMCwxXV0saz1bWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF1dO2Z1bmN0aW9uIEEodCxlLHIsbixpKXt0aGlzLnBvc2l0aW9uPXQsdGhpcy5pbmRleD1lLHRoaXMudXY9cix0aGlzLmxldmVsPW4sdGhpcy5kYXRhQ29vcmRpbmF0ZT1pfSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzsrK3Qpe3ZhciBlPWtbdF0scj0odCsyKSUzO2VbKHQrMSklMyswXT0xLGVbciszXT0xLGVbdCs2XT0xfX0oKTtmdW5jdGlvbiBNKHQsZSxyLG4saSxhLG8sbCxjLHUsaCxwLGQsbSxnKXt0aGlzLmdsPXQsdGhpcy5zaGFwZT1lLHRoaXMuYm91bmRzPXIsdGhpcy5vYmplY3RPZmZzZXQ9Zyx0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9bix0aGlzLl9waWNrU2hhZGVyPWksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1hLHRoaXMuX3Zhbz1vLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj1jLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPXUsdGhpcy5fY29udG91ckJ1ZmZlcj1oLHRoaXMuX2NvbnRvdXJWQU89cCx0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IEEoWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9ZCx0aGlzLl9keW5hbWljVkFPPW0sdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W2Yocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksZihzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxmKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLnZlcnRleENvbG9yPTAsdGhpcy5kaXJ0eT0hMH12YXIgUz1NLnByb3RvdHlwZTtTLmdlbkNvbG9ybWFwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj11KFtsKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIGk9ZT9mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9KG4vMjU1LGUpOnRbM107cmV0dXJuIGk8MSYmKHI9ITApLFt0WzBdLHRbMV0sdFsyXSwyNTUqaV19KSldKTtyZXR1cm4gYy5kaXZzZXEobiwyNTUpLHRoaXMuaGFzQWxwaGFTY2FsZT1yLG59LFMuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MXx8dGhpcy5oYXNBbHBoYVNjYWxlfSxTLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNUcmFuc3BhcmVudCgpfSxTLnBpY2tTbG90cz0xLFMuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH07dmFyIEU9WzAsMCwwXSxMPXtzaG93U3VyZmFjZTohMSxzaG93Q29udG91cjohMSxwcm9qZWN0aW9uczpbdy5zbGljZSgpLHcuc2xpY2UoKSx3LnNsaWNlKCldLGNsaXBCb3VuZHM6W1tbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dXX07ZnVuY3Rpb24gQyh0LGUpe3ZhciByLG4saSxhPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpc3x8RSxvPWUuc2hvd1N1cmZhY2Uscz1lLnNob3dDb250b3VyO2ZvcihyPTA7cjwzOysrcilmb3Iobz1vfHxlLnN1cmZhY2VQcm9qZWN0W3JdLG49MDtuPDM7KytuKXM9c3x8ZS5jb250b3VyUHJvamVjdFtyXVtuXTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBsPUwucHJvamVjdGlvbnNbcl07Zm9yKG49MDtuPDE2OysrbilsW25dPTA7Zm9yKG49MDtuPDQ7KytuKWxbNSpuXT0xO2xbNSpyXT0wLGxbMTIrcl09ZS5heGVzQm91bmRzWysoYVtyXT4wKV1bcl0scChsLHQubW9kZWwsbCk7dmFyIGM9TC5jbGlwQm91bmRzW3JdO2ZvcihpPTA7aTwyOysraSlmb3Iobj0wO248MzsrK24pY1tpXVtuXT10LmNsaXBCb3VuZHNbaV1bbl07Y1swXVtyXT0tMWU4LGNbMV1bcl09MWU4fXJldHVybiBMLnNob3dTdXJmYWNlPW8sTC5zaG93Q29udG91cj1zLEx9dmFyIFA9e21vZGVsOncsdmlldzp3LHByb2plY3Rpb246dyxpbnZlcnNlTW9kZWw6dy5zbGljZSgpLGxvd2VyQm91bmQ6WzAsMCwwXSx1cHBlckJvdW5kOlswLDAsMF0sY29sb3JNYXA6MCxjbGlwQm91bmRzOltbMCwwLDBdLFswLDAsMF1dLGhlaWdodDowLGNvbnRvdXJUaW50OjAsY29udG91ckNvbG9yOlswLDAsMCwxXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLHpPZmZzZXQ6LTFlLTQsb2JqZWN0T2Zmc2V0OlswLDAsMF0sa2FtYmllbnQ6MSxrZGlmZnVzZToxLGtzcGVjdWxhcjoxLGxpZ2h0UG9zaXRpb246WzFlMywxZTMsMWUzXSxleWVQb3NpdGlvbjpbMCwwLDBdLHJvdWdobmVzczoxLGZyZXNuZWw6MSxvcGFjaXR5OjEsdmVydGV4Q29sb3I6MH0sST13LnNsaWNlKCksTz1bMSwwLDAsMCwxLDAsMCwwLDFdO2Z1bmN0aW9uIHoodCxlKXt0PXR8fHt9O3ZhciByPXRoaXMuZ2w7ci5kaXNhYmxlKHIuQ1VMTF9GQUNFKSx0aGlzLl9jb2xvck1hcC5iaW5kKDApO3ZhciBuPVA7bi5tb2RlbD10Lm1vZGVsfHx3LG4udmlldz10LnZpZXd8fHcsbi5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8dyxuLmxvd2VyQm91bmQ9W3RoaXMuYm91bmRzWzBdWzBdLHRoaXMuYm91bmRzWzBdWzFdLHRoaXMuY29sb3JCb3VuZHNbMF18fHRoaXMuYm91bmRzWzBdWzJdXSxuLnVwcGVyQm91bmQ9W3RoaXMuYm91bmRzWzFdWzBdLHRoaXMuYm91bmRzWzFdWzFdLHRoaXMuY29sb3JCb3VuZHNbMV18fHRoaXMuYm91bmRzWzFdWzJdXSxuLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxuLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvclswXSxuLmludmVyc2VNb2RlbD1kKG4uaW52ZXJzZU1vZGVsLG4ubW9kZWwpO2Zvcih2YXIgaT0wO2k8MjsrK2kpZm9yKHZhciBhPW4uY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylhW29dPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tpXVtvXSwtMWU4KSwxZTgpO24ua2FtYmllbnQ9dGhpcy5hbWJpZW50TGlnaHQsbi5rZGlmZnVzZT10aGlzLmRpZmZ1c2VMaWdodCxuLmtzcGVjdWxhcj10aGlzLnNwZWN1bGFyTGlnaHQsbi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3Msbi5mcmVzbmVsPXRoaXMuZnJlc25lbCxuLm9wYWNpdHk9dGhpcy5vcGFjaXR5LG4uaGVpZ2h0PTAsbi5wZXJtdXRhdGlvbj1PLG4udmVydGV4Q29sb3I9dGhpcy52ZXJ0ZXhDb2xvcjt2YXIgcz1JO2ZvcihwKHMsbi52aWV3LG4ubW9kZWwpLHAocyxuLnByb2plY3Rpb24scyksZChzLHMpLGk9MDtpPDM7KytpKW4uZXllUG9zaXRpb25baV09c1sxMitpXS9zWzE1XTt2YXIgbD1zWzE1XTtmb3IoaT0wO2k8MzsrK2kpbCs9dGhpcy5saWdodFBvc2l0aW9uW2ldKnNbNCppKzNdO2ZvcihpPTA7aTwzOysraSl7dmFyIGM9c1sxMitpXTtmb3Iobz0wO288MzsrK28pYys9c1s0Km8raV0qdGhpcy5saWdodFBvc2l0aW9uW29dO24ubGlnaHRQb3NpdGlvbltpXT1jL2x9dmFyIHU9QyhuLHRoaXMpO2lmKHUuc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9zaGFkZXIuYmluZCgpLHRoaXMuX3NoYWRlci51bmlmb3Jtcz1uLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5zaG93U3VyZmFjZSYmdGhpcy5fdmVydGV4Q291bnQmJnRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxpPTA7aTwzOysraSl0aGlzLnN1cmZhY2VQcm9qZWN0W2ldJiZ0aGlzLnZlcnRleENvdW50JiYodGhpcy5fc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sdGhpcy5fc2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW2ldLHRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKHUuc2hvd0NvbnRvdXIpe3ZhciBmPXRoaXMuX2NvbnRvdXJTaGFkZXI7bi5rYW1iaWVudD0xLG4ua2RpZmZ1c2U9MCxuLmtzcGVjdWxhcj0wLG4ub3BhY2l0eT0xLGYuYmluZCgpLGYudW5pZm9ybXM9bjt2YXIgaD10aGlzLl9jb250b3VyVkFPO2ZvcihoLmJpbmQoKSxpPTA7aTwzOysraSlmb3IoZi51bmlmb3Jtcy5wZXJtdXRhdGlvbj1rW2ldLHIubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbyksbz0wO288dGhpcy5jb250b3VyTGV2ZWxzW2ldLmxlbmd0aDsrK28pbz09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbaV0/KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3JbaV0sZi51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbaV0pOjAhPT1vJiZvLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW2ldfHwoZi51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbaV0sZi51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W2ldKSx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dJiYoZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2ldW29dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bb10sdGhpcy5fY29udG91ck9mZnNldHNbaV1bb10pKTtmb3IoaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tpXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW2ldLG89MDtvPDM7KytvKWlmKHRoaXMuY29udG91clByb2plY3RbaV1bb10pe2YudW5pZm9ybXMucGVybXV0YXRpb249a1tvXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtvXSp0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgbT0wO208dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aDsrK20pbT09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb10/KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3Jbb10sZi51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbb10pOjAhPT1tJiZtLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW29dfHwoZi51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3Jbb10sZi51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W29dKSx0aGlzLl9jb250b3VyQ291bnRzW29dW21dJiYoZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW29dW21dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbb11bbV0sdGhpcy5fY29udG91ck9mZnNldHNbb11bbV0pKX1mb3IoaC51bmJpbmQoKSwoaD10aGlzLl9keW5hbWljVkFPKS5iaW5kKCksaT0wO2k8MzsrK2kpaWYoMCE9PXRoaXMuX2R5bmFtaWNDb3VudHNbaV0pZm9yKGYudW5pZm9ybXMubW9kZWw9bi5tb2RlbCxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9bi5jbGlwQm91bmRzLGYudW5pZm9ybXMucGVybXV0YXRpb249a1tpXSxyLmxpbmVXaWR0aCh0aGlzLmR5bmFtaWNXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuZHluYW1pY0NvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5keW5hbWljVGludFtpXSxmLnVuaWZvcm1zLmhlaWdodD10aGlzLmR5bmFtaWNMZXZlbFtpXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSxvPTA7bzwzOysrbyl0aGlzLmNvbnRvdXJQcm9qZWN0W29dW2ldJiYoZi51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW29dLGYudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbb10saC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSkpO2gudW5iaW5kKCl9fVMuZHJhdz1mdW5jdGlvbih0KXtyZXR1cm4gei5jYWxsKHRoaXMsdCwhMSl9LFMuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3JldHVybiB6LmNhbGwodGhpcyx0LCEwKX07dmFyIEQ9e21vZGVsOncsdmlldzp3LHByb2plY3Rpb246dyxpbnZlcnNlTW9kZWw6dyxjbGlwQm91bmRzOltbMCwwLDBdLFswLDAsMF1dLGhlaWdodDowLHNoYXBlOlswLDBdLHBpY2tJZDowLGxvd2VyQm91bmQ6WzAsMCwwXSx1cHBlckJvdW5kOlswLDAsMF0sek9mZnNldDowLG9iamVjdE9mZnNldDpbMCwwLDBdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGV5ZVBvc2l0aW9uOlswLDAsMF19O2Z1bmN0aW9uIFIodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9bZSh0WzBdKSxlKHRbMV0pLGUodFsyXSldOltlKHQpLGUodCksZSh0KV19ZnVuY3Rpb24gRih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8zPT09dC5sZW5ndGg/W3RbMF0sdFsxXSx0WzJdLDFdOlt0WzBdLHRbMV0sdFsyXSx0WzNdXTpbMCwwLDAsMV19ZnVuY3Rpb24gQih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybltGKHRbMF0pLEYodFsxXSksRih0WzJdKV07dmFyIGU9Rih0KTtyZXR1cm5bZS5zbGljZSgpLGUuc2xpY2UoKSxlLnNsaWNlKCldfX1TLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDtlLmRpc2FibGUoZS5DVUxMX0ZBQ0UpO3ZhciByPUQ7ci5tb2RlbD10Lm1vZGVsfHx3LHIudmlldz10LnZpZXd8fHcsci5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8dyxyLnNoYXBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHIucGlja0lkPXRoaXMucGlja0lkLzI1NSxyLmxvd2VyQm91bmQ9dGhpcy5ib3VuZHNbMF0sci51cHBlckJvdW5kPXRoaXMuYm91bmRzWzFdLHIub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHIucGVybXV0YXRpb249Tztmb3IodmFyIG49MDtuPDI7KytuKWZvcih2YXIgaT1yLmNsaXBCb3VuZHNbbl0sYT0wO2E8MzsrK2EpaVthXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbbl1bYV0sLTFlOCksMWU4KTt2YXIgbz1DKHIsdGhpcyk7aWYoby5zaG93U3VyZmFjZSl7Zm9yKHRoaXMuX3BpY2tTaGFkZXIuYmluZCgpLHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXM9cix0aGlzLl92YW8uYmluZCgpLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxuPTA7bjwzOysrbil0aGlzLnN1cmZhY2VQcm9qZWN0W25dJiYodGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcy5tb2RlbD1vLnByb2plY3Rpb25zW25dLHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMuY2xpcEJvdW5kcz1vLmNsaXBCb3VuZHNbbl0sdGhpcy5fdmFvLmRyYXcoZS5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpKTt0aGlzLl92YW8udW5iaW5kKCl9aWYoby5zaG93Q29udG91cil7dmFyIHM9dGhpcy5fY29udG91clBpY2tTaGFkZXI7cy5iaW5kKCkscy51bmlmb3Jtcz1yO3ZhciBsPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGwuYmluZCgpLGE9MDthPDM7KythKWZvcihlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSp0aGlzLnBpeGVsUmF0aW8pLHMudW5pZm9ybXMucGVybXV0YXRpb249a1thXSxuPTA7bjx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbil0aGlzLl9jb250b3VyQ291bnRzW2FdW25dJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW25dLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bbl0pKTtmb3Iobj0wO248MzsrK24pZm9yKHMudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSxzLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlmKHRoaXMuY29udG91clByb2plY3Rbbl1bYV0pe3MudW5pZm9ybXMucGVybXV0YXRpb249a1thXSxlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSp0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgYz0wO2M8dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK2MpdGhpcy5fY29udG91ckNvdW50c1thXVtjXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtjXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW2NdKSl9bC51bmJpbmQoKX19LFMucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5fZmllbGRbMl0uc2hhcGUscj10aGlzLl9waWNrUmVzdWx0LG49ZVswXSoodC52YWx1ZVswXSsodC52YWx1ZVsyXT4+NCkvMTYpLzI1NSxpPU1hdGguZmxvb3IobiksYT1uLWksbz1lWzFdKih0LnZhbHVlWzFdKygxNSZ0LnZhbHVlWzJdKS8xNikvMjU1LHM9TWF0aC5mbG9vcihvKSxsPW8tcztpKz0xLHMrPTE7dmFyIGM9ci5wb3NpdGlvbjtjWzBdPWNbMV09Y1syXT0wO2Zvcih2YXIgdT0wO3U8MjsrK3UpZm9yKHZhciBmPXU/YToxLWEsaD0wO2g8MjsrK2gpZm9yKHZhciBwPWkrdSxkPXMraCxnPWYqKGg/bDoxLWwpLHY9MDt2PDM7Kyt2KWNbdl0rPXRoaXMuX2ZpZWxkW3ZdLmdldChwLGQpKmc7Zm9yKHZhciB5PXRoaXMuX3BpY2tSZXN1bHQubGV2ZWwseD0wO3g8MzsrK3gpaWYoeVt4XT1tLmxlKHRoaXMuY29udG91ckxldmVsc1t4XSxjW3hdKSx5W3hdPDApdGhpcy5jb250b3VyTGV2ZWxzW3hdLmxlbmd0aD4wJiYoeVt4XT0wKTtlbHNlIGlmKHlbeF08dGhpcy5jb250b3VyTGV2ZWxzW3hdLmxlbmd0aC0xKXt2YXIgYj10aGlzLmNvbnRvdXJMZXZlbHNbeF1beVt4XV0sXz10aGlzLmNvbnRvdXJMZXZlbHNbeF1beVt4XSsxXTtNYXRoLmFicyhiLWNbeF0pPk1hdGguYWJzKF8tY1t4XSkmJih5W3hdKz0xKX1mb3Ioci5pbmRleFswXT1hPC41P2k6aSsxLHIuaW5kZXhbMV09bDwuNT9zOnMrMSxyLnV2WzBdPW4vZVswXSxyLnV2WzFdPW8vZVsxXSx2PTA7djwzOysrdilyLmRhdGFDb29yZGluYXRlW3ZdPXRoaXMuX2ZpZWxkW3ZdLmdldChyLmluZGV4WzBdLHIuaW5kZXhbMV0pO3JldHVybiByfSxTLnBhZEZpZWxkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaGFwZS5zbGljZSgpLG49dC5zaGFwZS5zbGljZSgpO2MuYXNzaWduKHQubG8oMSwxKS5oaShyWzBdLHJbMV0pLGUpLGMuYXNzaWduKHQubG8oMSkuaGkoclswXSwxKSxlLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMSxuWzFdLTEpLmhpKHJbMF0sMSksZS5sbygwLHJbMV0tMSkuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygwLDEpLmhpKDEsclsxXSksZS5oaSgxKSksYy5hc3NpZ24odC5sbyhuWzBdLTEsMSkuaGkoMSxyWzFdKSxlLmxvKHJbMF0tMSkpLHQuc2V0KDAsMCxlLmdldCgwLDApKSx0LnNldCgwLG5bMV0tMSxlLmdldCgwLHJbMV0tMSkpLHQuc2V0KG5bMF0tMSwwLGUuZ2V0KHJbMF0tMSwwKSksdC5zZXQoblswXS0xLG5bMV0tMSxlLmdldChyWzBdLTEsclsxXS0xKSl9LFMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5vYmplY3RPZmZzZXQ9dC5vYmplY3RPZmZzZXR8fHRoaXMub2JqZWN0T2Zmc2V0LHRoaXMuZGlydHk9ITAsImNvbnRvdXJXaWR0aCJpbiB0JiYodGhpcy5jb250b3VyV2lkdGg9Uih0LmNvbnRvdXJXaWR0aCxOdW1iZXIpKSwic2hvd0NvbnRvdXIiaW4gdCYmKHRoaXMuc2hvd0NvbnRvdXI9Uih0LnNob3dDb250b3VyLEJvb2xlYW4pKSwic2hvd1N1cmZhY2UiaW4gdCYmKHRoaXMuc2hvd1N1cmZhY2U9ISF0LnNob3dTdXJmYWNlKSwiY29udG91clRpbnQiaW4gdCYmKHRoaXMuY29udG91clRpbnQ9Uih0LmNvbnRvdXJUaW50LEJvb2xlYW4pKSwiY29udG91ckNvbG9yImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj1CKHQuY29udG91ckNvbG9yKSksImNvbnRvdXJQcm9qZWN0ImluIHQmJih0aGlzLmNvbnRvdXJQcm9qZWN0PVIodC5jb250b3VyUHJvamVjdCwoZnVuY3Rpb24odCl7cmV0dXJuIFIodCxCb29sZWFuKX0pKSksInN1cmZhY2VQcm9qZWN0ImluIHQmJih0aGlzLnN1cmZhY2VQcm9qZWN0PXQuc3VyZmFjZVByb2plY3QpLCJkeW5hbWljQ29sb3IiaW4gdCYmKHRoaXMuZHluYW1pY0NvbG9yPUIodC5keW5hbWljQ29sb3IpKSwiZHluYW1pY1RpbnQiaW4gdCYmKHRoaXMuZHluYW1pY1RpbnQ9Uih0LmR5bmFtaWNUaW50LE51bWJlcikpLCJkeW5hbWljV2lkdGgiaW4gdCYmKHRoaXMuZHluYW1pY1dpZHRoPVIodC5keW5hbWljV2lkdGgsTnVtYmVyKSksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJvcGFjaXR5c2NhbGUiaW4gdCYmKHRoaXMub3BhY2l0eXNjYWxlPXQub3BhY2l0eXNjYWxlKSwiY29sb3JCb3VuZHMiaW4gdCYmKHRoaXMuY29sb3JCb3VuZHM9dC5jb2xvckJvdW5kcyksInZlcnRleENvbG9yImluIHQmJih0aGlzLnZlcnRleENvbG9yPXQudmVydGV4Q29sb3I/MTowKSwiY29sb3JtYXAiaW4gdCYmdGhpcy5fY29sb3JNYXAuc2V0UGl4ZWxzKHRoaXMuZ2VuQ29sb3JtYXAodC5jb2xvcm1hcCx0aGlzLm9wYWNpdHlzY2FsZSkpO3ZhciBlPXQuZmllbGR8fHQuY29vcmRzJiZ0LmNvb3Jkc1syXXx8bnVsbCxyPSExO2lmKGV8fChlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdfHx0aGlzLl9maWVsZFsyXS5zaGFwZVsyXT90aGlzLl9maWVsZFsyXS5sbygxLDEpLmhpKHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdLTIsdGhpcy5fZmllbGRbMl0uc2hhcGVbMV0tMik6dGhpcy5fZmllbGRbMl0uaGkoMCwwKSksImZpZWxkImluIHR8fCJjb29yZHMiaW4gdCl7dmFyIGk9KGUuc2hhcGVbMF0rMikqKGUuc2hhcGVbMV0rMik7aT50aGlzLl9maWVsZFsyXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkWzJdLmRhdGEpLHRoaXMuX2ZpZWxkWzJdLmRhdGE9cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKGkpKSksdGhpcy5fZmllbGRbMl09Zih0aGlzLl9maWVsZFsyXS5kYXRhLFtlLnNoYXBlWzBdKzIsZS5zaGFwZVsxXSsyXSksdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFsyXSxlKSx0aGlzLnNoYXBlPWUuc2hhcGUuc2xpY2UoKTtmb3IodmFyIGE9dGhpcy5zaGFwZSxvPTA7bzwyOysrbyl0aGlzLl9maWVsZFsyXS5zaXplPnRoaXMuX2ZpZWxkW29dLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbb10uZGF0YSksdGhpcy5fZmllbGRbb10uZGF0YT1zLm1hbGxvY0Zsb2F0KHRoaXMuX2ZpZWxkWzJdLnNpemUpKSx0aGlzLl9maWVsZFtvXT1mKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdKTtpZih0LmNvb3Jkcyl7dmFyIGw9dC5jb29yZHM7aWYoIUFycmF5LmlzQXJyYXkobCl8fDMhPT1sLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgY29vcmRpbmF0ZXMgZm9yIHgveSIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIGM9bFtvXTtmb3Iodj0wO3Y8MjsrK3YpaWYoYy5zaGFwZVt2XSE9PWFbdl0pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBjb29yZHMgaGF2ZSBpbmNvcnJlY3Qgc2hhcGUiKTt0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkW29dLGMpfX1lbHNlIGlmKHQudGlja3Mpe3ZhciB1PXQudGlja3M7aWYoIUFycmF5LmlzQXJyYXkodSl8fDIhPT11Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGlja3MiKTtmb3Iobz0wO288MjsrK28pe3ZhciBwPXVbb107aWYoKEFycmF5LmlzQXJyYXkocCl8fHAubGVuZ3RoKSYmKHA9ZihwKSkscC5zaGFwZVswXSE9PWFbb10pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2sgbGVuZ3RoIik7dmFyIGQ9ZihwLmRhdGEsYSk7ZC5zdHJpZGVbb109cC5zdHJpZGVbMF0sZC5zdHJpZGVbMV5vXT0wLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10sZCl9fWVsc2V7Zm9yKG89MDtvPDI7KytvKXt2YXIgbT1bMCwwXTttW29dPTEsdGhpcy5fZmllbGRbb109Zih0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSxtLDApfXRoaXMuX2ZpZWxkWzBdLnNldCgwLDAsMCk7Zm9yKHZhciB2PTA7djxhWzBdOysrdil0aGlzLl9maWVsZFswXS5zZXQodisxLDAsdik7Zm9yKHRoaXMuX2ZpZWxkWzBdLnNldChhWzBdKzEsMCxhWzBdLTEpLHRoaXMuX2ZpZWxkWzFdLnNldCgwLDAsMCksdj0wO3Y8YVsxXTsrK3YpdGhpcy5fZmllbGRbMV0uc2V0KDAsdisxLHYpO3RoaXMuX2ZpZWxkWzFdLnNldCgwLGFbMV0rMSxhWzFdLTEpfXZhciB5PXRoaXMuX2ZpZWxkLHg9ZihzLm1hbGxvY0Zsb2F0KDMqeVsyXS5zaXplKjIpLFszLGFbMF0rMixhWzFdKzIsMl0pO2ZvcihvPTA7bzwzOysrbylnKHgucGljayhvKSx5W29dLCJtaXJyb3IiKTt2YXIgYj1mKHMubWFsbG9jRmxvYXQoMyp5WzJdLnNpemUpLFthWzBdKzIsYVsxXSsyLDNdKTtmb3Iobz0wO288YVswXSsyOysrbylmb3Iodj0wO3Y8YVsxXSsyOysrdil7dmFyIF89eC5nZXQoMCxvLHYsMCksdz14LmdldCgwLG8sdiwxKSxrPXguZ2V0KDEsbyx2LDApLEE9eC5nZXQoMSxvLHYsMSksTT14LmdldCgyLG8sdiwwKSxTPXguZ2V0KDIsbyx2LDEpLEU9aypTLUEqTSxMPU0qdy1TKl8sQz1fKkEtdyprLFA9TWF0aC5zcXJ0KEUqRStMKkwrQypDKTtQPDFlLTg/KFA9TWF0aC5tYXgoTWF0aC5hYnMoRSksTWF0aC5hYnMoTCksTWF0aC5hYnMoQykpKTwxZS04PyhDPTEsTD1FPTAsUD0xKTpQPTEvUDpQPTEvTWF0aC5zcXJ0KFApLGIuc2V0KG8sdiwwLEUqUCksYi5zZXQobyx2LDEsTCpQKSxiLnNldChvLHYsMixDKlApfXMuZnJlZSh4LmRhdGEpO3ZhciBJPVsxLzAsMS8wLDEvMF0sTz1bLTEvMCwtMS8wLC0xLzBdLHo9MS8wLEQ9LTEvMCxGPShhWzBdLTEpKihhWzFdLTEpKjYsTj1zLm1hbGxvY0Zsb2F0KG4ubmV4dFBvdzIoMTAqRikpLGo9MCxVPTA7Zm9yKG89MDtvPGFbMF0tMTsrK28pdDpmb3Iodj0wO3Y8YVsxXS0xOysrdil7Zm9yKHZhciBWPTA7VjwyOysrVilmb3IodmFyIEg9MDtIPDI7KytIKWZvcih2YXIgcT0wO3E8MzsrK3Epe3ZhciBHPXRoaXMuX2ZpZWxkW3FdLmdldCgxK28rViwxK3YrSCk7aWYoaXNOYU4oRyl8fCFpc0Zpbml0ZShHKSljb250aW51ZSB0fWZvcihxPTA7cTw2OysrcSl7dmFyIFk9bytUW3FdWzBdLFc9ditUW3FdWzFdLFg9dGhpcy5fZmllbGRbMF0uZ2V0KFkrMSxXKzEpLFo9dGhpcy5fZmllbGRbMV0uZ2V0KFkrMSxXKzEpO0c9dGhpcy5fZmllbGRbMl0uZ2V0KFkrMSxXKzEpLEU9Yi5nZXQoWSsxLFcrMSwwKSxMPWIuZ2V0KFkrMSxXKzEsMSksQz1iLmdldChZKzEsVysxLDIpLHQuaW50ZW5zaXR5JiYoSj10LmludGVuc2l0eS5nZXQoWSxXKSk7dmFyIEo9dC5pbnRlbnNpdHk/dC5pbnRlbnNpdHkuZ2V0KFksVyk6Ryt0aGlzLm9iamVjdE9mZnNldFsyXTtOW2orK109WSxOW2orK109VyxOW2orK109WCxOW2orK109WixOW2orK109RyxOW2orK109MCxOW2orK109SixOW2orK109RSxOW2orK109TCxOW2orK109QyxJWzBdPU1hdGgubWluKElbMF0sWCt0aGlzLm9iamVjdE9mZnNldFswXSksSVsxXT1NYXRoLm1pbihJWzFdLFordGhpcy5vYmplY3RPZmZzZXRbMV0pLElbMl09TWF0aC5taW4oSVsyXSxHK3RoaXMub2JqZWN0T2Zmc2V0WzJdKSx6PU1hdGgubWluKHosSiksT1swXT1NYXRoLm1heChPWzBdLFgrdGhpcy5vYmplY3RPZmZzZXRbMF0pLE9bMV09TWF0aC5tYXgoT1sxXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxPWzJdPU1hdGgubWF4KE9bMl0sRyt0aGlzLm9iamVjdE9mZnNldFsyXSksRD1NYXRoLm1heChELEopLFUrPTF9fWZvcih0LmludGVuc2l0eUJvdW5kcyYmKHo9K3QuaW50ZW5zaXR5Qm91bmRzWzBdLEQ9K3QuaW50ZW5zaXR5Qm91bmRzWzFdKSxvPTY7bzxqO28rPTEwKU5bb109KE5bb10teikvKEQteik7dGhpcy5fdmVydGV4Q291bnQ9VSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLnVwZGF0ZShOLnN1YmFycmF5KDAsaikpLHMuZnJlZUZsb2F0KE4pLHMuZnJlZShiLmRhdGEpLHRoaXMuYm91bmRzPVtJLE9dLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5fHx0aGlzLl9maWVsZFsyXSx0aGlzLmludGVuc2l0eUJvdW5kc1swXT09PXomJnRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdPT09RHx8KHI9ITApLHRoaXMuaW50ZW5zaXR5Qm91bmRzPVt6LERdfWlmKCJsZXZlbHMiaW4gdCl7dmFyIEs9dC5sZXZlbHM7Zm9yKEs9QXJyYXkuaXNBcnJheShLWzBdKT9LLnNsaWNlKCk6W1tdLFtdLEtdLG89MDtvPDM7KytvKUtbb109S1tvXS5zbGljZSgpLEtbb10uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpO2ZvcihvPTA7bzwzOysrbylmb3Iodj0wO3Y8S1tvXS5sZW5ndGg7Kyt2KUtbb11bdl0tPXRoaXMub2JqZWN0T2Zmc2V0W29dO3Q6Zm9yKG89MDtvPDM7KytvKXtpZihLW29dLmxlbmd0aCE9PXRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGgpe3I9ITA7YnJlYWt9Zm9yKHY9MDt2PEtbb10ubGVuZ3RoOysrdilpZihLW29dW3ZdIT09dGhpcy5jb250b3VyTGV2ZWxzW29dW3ZdKXtyPSEwO2JyZWFrIHR9fXRoaXMuY29udG91ckxldmVscz1LfWlmKHIpe3k9dGhpcy5fZmllbGQsYT10aGlzLnNoYXBlO2Zvcih2YXIgUT1bXSwkPTA7JDwzOysrJCl7dmFyIHR0PXRoaXMuY29udG91ckxldmVsc1skXSxldD1bXSxydD1bXSxudD1bMCwwLDBdO2ZvcihvPTA7bzx0dC5sZW5ndGg7KytvKXt2YXIgaXQ9aCh0aGlzLl9maWVsZFskXSx0dFtvXSk7ZXQucHVzaChRLmxlbmd0aC81fDApLFU9MDt0OmZvcih2PTA7djxpdC5jZWxscy5sZW5ndGg7Kyt2KXt2YXIgYXQ9aXQuY2VsbHNbdl07Zm9yKHE9MDtxPDI7KytxKXt2YXIgb3Q9aXQucG9zaXRpb25zW2F0W3FdXSxzdD1vdFswXSxsdD0wfE1hdGguZmxvb3Ioc3QpLGN0PXN0LWx0LHV0PW90WzFdLGZ0PTB8TWF0aC5mbG9vcih1dCksaHQ9dXQtZnQscHQ9ITE7ZTpmb3IodmFyIGR0PTA7ZHQ8MzsrK2R0KXtudFtkdF09MDt2YXIgbXQ9KCQrZHQrMSklMztmb3IoVj0wO1Y8MjsrK1Ype3ZhciBndD1WP2N0OjEtY3Q7Zm9yKFk9MHxNYXRoLm1pbihNYXRoLm1heChsdCtWLDApLGFbMF0pLEg9MDtIPDI7KytIKXt2YXIgdnQ9SD9odDoxLWh0O2lmKFc9MHxNYXRoLm1pbihNYXRoLm1heChmdCtILDApLGFbMV0pLEc9ZHQ8Mj90aGlzLl9maWVsZFttdF0uZ2V0KFksVyk6KHRoaXMuaW50ZW5zaXR5LmdldChZLFcpLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKS8odGhpcy5pbnRlbnNpdHlCb3VuZHNbMV0tdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF0pLCFpc0Zpbml0ZShHKXx8aXNOYU4oRykpe3B0PSEwO2JyZWFrIGV9dmFyIHl0PWd0KnZ0O250W2R0XSs9eXQqR319fWlmKHB0KXtpZihxPjApe2Zvcih2YXIgeHQ9MDt4dDw1OysreHQpUS5wb3AoKTtVLT0xfWNvbnRpbnVlIHR9US5wdXNoKG50WzBdLG50WzFdLG90WzBdLG90WzFdLG50WzJdKSxVKz0xfX1ydC5wdXNoKFUpfXRoaXMuX2NvbnRvdXJPZmZzZXRzWyRdPWV0LHRoaXMuX2NvbnRvdXJDb3VudHNbJF09cnR9dmFyIGJ0PXMubWFsbG9jRmxvYXQoUS5sZW5ndGgpO2ZvcihvPTA7bzxRLmxlbmd0aDsrK28pYnRbb109UVtvXTt0aGlzLl9jb250b3VyQnVmZmVyLnVwZGF0ZShidCkscy5mcmVlRmxvYXQoYnQpfX0sUy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl92YW8uZGlzcG9zZSgpLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbG9yTWFwLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyUGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY0J1ZmZlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY1ZBTy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDwzOysrdClzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFt0XS5kYXRhKX0sUy5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IoZT0wO2U8MzsrK2UpdGhpcy5lbmFibGVIaWdobGlnaHRbZV0/dGhpcy5oaWdobGlnaHRMZXZlbFtlXT10LmxldmVsW2VdOnRoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09LTE7Zm9yKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbixlPTA7ZTwzOysrZSlyW2VdLT10aGlzLm9iamVjdE9mZnNldFtlXTtpZih0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1zLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBsPShvKzEpJTMsYz0obysyKSUzLHU9dGhpcy5fZmllbGRbb10sZj10aGlzLl9maWVsZFtsXSxwPXRoaXMuX2ZpZWxkW2NdLGQ9aCh1LHJbb10pLG09ZC5jZWxscyxnPWQucG9zaXRpb25zO2Zvcih0aGlzLl9keW5hbWljT2Zmc2V0c1tvXT1uLGU9MDtlPG0ubGVuZ3RoOysrZSlmb3IodmFyIHY9bVtlXSx5PTA7eTwyOysreSl7dmFyIHg9Z1t2W3ldXSxiPSt4WzBdLF89MHxiLHc9MHxNYXRoLm1pbihfKzEsaVswXSksVD1iLV8saz0xLVQsQT0reFsxXSxNPTB8QSxTPTB8TWF0aC5taW4oTSsxLGlbMV0pLEU9QS1NLEw9MS1FLEM9aypMLFA9aypFLEk9VCpMLE89VCpFLHo9QypmLmdldChfLE0pK1AqZi5nZXQoXyxTKStJKmYuZ2V0KHcsTSkrTypmLmdldCh3LFMpLEQ9QypwLmdldChfLE0pK1AqcC5nZXQoXyxTKStJKnAuZ2V0KHcsTSkrTypwLmdldCh3LFMpO2lmKGlzTmFOKHopfHxpc05hTihEKSl7eSYmKG4tPTEpO2JyZWFrfWFbMipuKzBdPXosYVsyKm4rMV09RCxuKz0xfXRoaXMuX2R5bmFtaWNDb3VudHNbb109bi10aGlzLl9keW5hbWljT2Zmc2V0c1tvXX1lbHNlIHRoaXMuZHluYW1pY0xldmVsW29dPU5hTix0aGlzLl9keW5hbWljQ291bnRzW29dPTA7dGhpcy5fZHluYW1pY0J1ZmZlci51cGRhdGUoYS5zdWJhcnJheSgwLDIqbikpLHMuZnJlZUZsb2F0KGEpfX19LHsiLi9saWIvc2hhZGVycyI6MTQ0LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MzEsImJpdC10d2lkZGxlIjozMixjb2xvcm1hcDo1MywiZ2wtYnVmZmVyIjo3OCwiZ2wtbWF0NC9pbnZlcnQiOjk4LCJnbC1tYXQ0L211bHRpcGx5IjoxMDAsImdsLXRleHR1cmUyZCI6MTQ2LCJnbC12YW8iOjE1MCxuZGFycmF5OjI1OSwibmRhcnJheS1ncmFkaWVudCI6MjUyLCJuZGFycmF5LW9wcyI6MjU0LCJuZGFycmF5LXBhY2siOjI1NSwic3VyZmFjZS1uZXRzIjozMDIsInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoIm5kYXJyYXktb3BzIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpO298fGModCk7aWYoIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIHYodCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIHYodCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPXUoZSk/ZTplLnJhdztpZihyKXJldHVybiB5KHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4geCh0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe289W3QuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9ORUFSRVNUXSxzPVt0Lk5FQVJFU1QsdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9MSU5FQVJdLGw9W3QuUkVQRUFULHQuQ0xBTVBfVE9fRURHRSx0Lk1JUlJPUkVEX1JFUEVBVF19ZnVuY3Rpb24gdSh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2YgSW1hZ2VEYXRhfXZhciBmPWZ1bmN0aW9uKHQsZSl7aS5tdWxzKHQsZSwyNTUpfTtmdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj10LmdsLGk9bi5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplIik7cmV0dXJuIHQuX3NoYXBlPVtlLHJdLHQuYmluZCgpLG4udGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCx0LmZvcm1hdCxlLHIsMCx0LmZvcm1hdCx0LnR5cGUsbnVsbCksdC5fbWlwTGV2ZWxzPVswXSx0fWZ1bmN0aW9uIHAodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLmhhbmRsZT1lLHRoaXMuZm9ybWF0PWksdGhpcy50eXBlPWEsdGhpcy5fc2hhcGU9W3Isbl0sdGhpcy5fbWlwTGV2ZWxzPVswXSx0aGlzLl9tYWdGaWx0ZXI9dC5ORUFSRVNULHRoaXMuX21pbkZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fd3JhcFM9dC5DTEFNUF9UT19FREdFLHRoaXMuX3dyYXBUPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl9hbmlzb1NhbXBsZXM9MTt2YXIgbz10aGlzLHM9W3RoaXMuX3dyYXBTLHRoaXMuX3dyYXBUXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFM9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwVD10fX1dKSx0aGlzLl93cmFwVmVjdG9yPXM7dmFyIGw9W3RoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2lkdGg9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby5oZWlnaHQ9dH19XSksdGhpcy5fc2hhcGVWZWN0b3I9bH12YXIgZD1wLnByb3RvdHlwZTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIDM9PT10Lmxlbmd0aD8xPT09ZVsyXSYmZVsxXT09PXRbMF0qdFsyXSYmZVswXT09PXRbMl06MT09PWVbMF0mJmVbMV09PT10WzBdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+YXx8cjwwfHxyPmEpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0IikpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpO3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgcCh0LG8sZSxyLG4saSl9ZnVuY3Rpb24geSh0LGUscixuLGksYSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBwKHQsbyxyLG4saSxhKX1mdW5jdGlvbiB4KHQsZSl7dmFyIHI9ZS5kdHlwZSxvPWUuc2hhcGUuc2xpY2UoKSxzPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYob1swXTwwfHxvWzBdPnN8fG9bMV08MHx8b1sxXT5zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3ZhciBsPW0obyxlLnN0cmlkZS5zbGljZSgpKSxjPTA7ImZsb2F0MzIiPT09cj9jPXQuRkxPQVQ6ImZsb2F0NjQiPT09cj8oYz10LkZMT0FULGw9ITEscj0iZmxvYXQzMiIpOiJ1aW50OCI9PT1yP2M9dC5VTlNJR05FRF9CWVRFOihjPXQuVU5TSUdORURfQllURSxsPSExLHI9InVpbnQ4Iik7dmFyIHUsaCxkPTA7aWYoMj09PW8ubGVuZ3RoKWQ9dC5MVU1JTkFOQ0Usbz1bb1swXSxvWzFdLDFdLGU9bihlLmRhdGEsbyxbZS5zdHJpZGVbMF0sZS5zdHJpZGVbMV0sMV0sZS5vZmZzZXQpO2Vsc2V7aWYoMyE9PW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PW9bMl0pZD10LkFMUEhBO2Vsc2UgaWYoMj09PW9bMl0pZD10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1vWzJdKWQ9dC5SR0I7ZWxzZXtpZig0IT09b1syXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7ZD10LlJHQkF9fWMhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKXx8KGM9dC5VTlNJR05FRF9CWVRFLGw9ITEpO3ZhciB2PWUuc2l6ZTtpZihsKXU9MD09PWUub2Zmc2V0JiZlLmRhdGEubGVuZ3RoPT09dj9lLmRhdGE6ZS5kYXRhLnN1YmFycmF5KGUub2Zmc2V0LGUub2Zmc2V0K3YpO2Vsc2V7dmFyIHk9W29bMl0sb1syXSpvWzBdLDFdO2g9YS5tYWxsb2ModixyKTt2YXIgeD1uKGgsbyx5LDApOyJmbG9hdDMyIiE9PXImJiJmbG9hdDY0IiE9PXJ8fGMhPT10LlVOU0lHTkVEX0JZVEU/aS5hc3NpZ24oeCxlKTpmKHgsZSksdT1oLnN1YmFycmF5KDAsdil9dmFyIGI9Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGQsb1swXSxvWzFdLDAsZCxjLHUpLGx8fGEuZnJlZShoKSxuZXcgcCh0LGIsb1swXSxvWzFdLGQsYyl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsdCksdGhpcy5fbWluRmlsdGVyPXR9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYWdGaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSx0aGlzLl9tYWdGaWx0ZXI9dH19LG1pcFNhbXBsZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hbmlzb1NhbXBsZXM7aWYodGhpcy5fYW5pc29TYW1wbGVzPTB8TWF0aC5tYXgodCwxKSxlIT09dGhpcy5fYW5pc29TYW1wbGVzKXt2YXIgcj10aGlzLmdsLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7ciYmdGhpcy5nbC50ZXhQYXJhbWV0ZXJmKHRoaXMuZ2wuVEVYVFVSRV8yRCxyLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULHRoaXMuX2FuaXNvU2FtcGxlcyl9cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc319LHdyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9TLHQpLHRoaXMuX3dyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfVCx0KSx0aGlzLl93cmFwVD10fX0sd3JhcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdCx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNdXN0IHNwZWNpZnkgd3JhcCBtb2RlIGZvciByb3dzIGFuZCBjb2x1bW5zIik7Zm9yKHZhciBlPTA7ZTwyOysrZSlpZihsLmluZGV4T2YodFtlXSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTt0aGlzLl93cmFwUz10WzBdLHRoaXMuX3dyYXBUPXRbMV07dmFyIHI9dGhpcy5nbDtyZXR1cm4gdGhpcy5iaW5kKCksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9TLHRoaXMuX3dyYXBTKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1QsdGhpcy5fd3JhcFQpLHR9fSxzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKX1lbHNlIHQ9WzB8dCwwfHRdO3JldHVybiBoKHRoaXMsMHx0WzBdLDB8dFsxXSksWzB8dFswXSwwfHRbMV1dfX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsaCh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLGQuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LGQuZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LGQuc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obz1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbz1vfHwwO3ZhciBsPXUodCk/dDp0LnJhdztpZihsKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihvKTwwPyhzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpLHRoaXMuX21pcExldmVscy5wdXNoKG8pKTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELG8sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO2lmKHQuc2hhcGUubGVuZ3RoPDJ8fGUrdC5zaGFwZVsxXT50aGlzLl9zaGFwZVsxXT4+Pm98fHIrdC5zaGFwZVswXT50aGlzLl9zaGFwZVswXT4+Pm98fGU8MHx8cjwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHMiKTshZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgaD11LmR0eXBlLHA9dS5zaGFwZS5zbGljZSgpO2lmKHAubGVuZ3RoPDJ8fHAubGVuZ3RoPjMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgbmRhcnJheSwgbXVzdCBiZSAyZCBvciAzZCIpO3ZhciBkPTAsZz0wLHY9bShwLHUuc3RyaWRlLnNsaWNlKCkpOyJmbG9hdDMyIj09PWg/ZD10LkZMT0FUOiJmbG9hdDY0Ij09PWg/KGQ9dC5GTE9BVCx2PSExLGg9ImZsb2F0MzIiKToidWludDgiPT09aD9kPXQuVU5TSUdORURfQllURTooZD10LlVOU0lHTkVEX0JZVEUsdj0hMSxoPSJ1aW50OCIpO2lmKDI9PT1wLmxlbmd0aClnPXQuTFVNSU5BTkNFLHA9W3BbMF0scFsxXSwxXSx1PW4odS5kYXRhLHAsW3Uuc3RyaWRlWzBdLHUuc3RyaWRlWzFdLDFdLHUub2Zmc2V0KTtlbHNle2lmKDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1wWzJdKWc9dC5BTFBIQTtlbHNlIGlmKDI9PT1wWzJdKWc9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09cFsyXSlnPXQuUkdCO2Vsc2V7aWYoNCE9PXBbMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO2c9dC5SR0JBfXBbMl19ZyE9PXQuTFVNSU5BTkNFJiZnIT09dC5BTFBIQXx8cyE9PXQuTFVNSU5BTkNFJiZzIT09dC5BTFBIQXx8KGc9cyk7aWYoZyE9PXMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEluY29tcGF0aWJsZSB0ZXh0dXJlIGZvcm1hdCBmb3Igc2V0UGl4ZWxzIik7dmFyIHk9dS5zaXplLHg9Yy5pbmRleE9mKG8pPDA7eCYmYy5wdXNoKG8pO2lmKGQ9PT1sJiZ2KTA9PT11Lm9mZnNldCYmdS5kYXRhLmxlbmd0aD09PXk/eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsdS5kYXRhKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsdS5kYXRhKTp4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCx1LmRhdGEuc3ViYXJyYXkodS5vZmZzZXQsdS5vZmZzZXQreSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCx1LmRhdGEuc3ViYXJyYXkodS5vZmZzZXQsdS5vZmZzZXQreSkpO2Vsc2V7dmFyIGI7Yj1sPT09dC5GTE9BVD9hLm1hbGxvY0Zsb2F0MzIoeSk6YS5tYWxsb2NVaW50OCh5KTt2YXIgXz1uKGIscCxbcFsyXSxwWzJdKnBbMF0sMV0pO2Q9PT10LkZMT0FUJiZsPT09dC5VTlNJR05FRF9CWVRFP2YoXyx1KTppLmFzc2lnbihfLHUpLHg/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGIuc3ViYXJyYXkoMCx5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGIuc3ViYXJyYXkoMCx5KSksbD09PXQuRkxPQVQ/YS5mcmVlRmxvYXQzMihiKTphLmZyZWVVaW50OChiKX19KHMsZSxyLG8sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheToyNTksIm5kYXJyYXktb3BzIjoyNTQsInR5cGVkYXJyYXktcG9vbCI6MzA4fV0sMTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT9lLmJpbmQoKTp0LmJpbmRCdWZmZXIodC5FTEVNRU5UX0FSUkFZX0JVRkZFUixudWxsKTt2YXIgbj0wfHQuZ2V0UGFyYW1ldGVyKHQuTUFYX1ZFUlRFWF9BVFRSSUJTKTtpZihyKXtpZihyLmxlbmd0aD5uKXRocm93IG5ldyBFcnJvcigiZ2wtdmFvOiBUb28gbWFueSB2ZXJ0ZXggYXR0cmlidXRlcyIpO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgYT1yW2ldO2lmKGEuYnVmZmVyKXt2YXIgbz1hLmJ1ZmZlcixzPWEuc2l6ZXx8NCxsPWEudHlwZXx8dC5GTE9BVCxjPSEhYS5ub3JtYWxpemVkLHU9YS5zdHJpZGV8fDAsZj1hLm9mZnNldHx8MDtvLmJpbmQoKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLHMsbCxjLHUsZil9ZWxzZXtpZigibnVtYmVyIj09dHlwZW9mIGEpdC52ZXJ0ZXhBdHRyaWIxZihpLGEpO2Vsc2UgaWYoMT09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMWYoaSxhWzBdKTtlbHNlIGlmKDI9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjJmKGksYVswXSxhWzFdKTtlbHNlIGlmKDM9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjNmKGksYVswXSxhWzFdLGFbMl0pO2Vsc2V7aWYoNCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdmFvOiBJbnZhbGlkIHZlcnRleCBhdHRyaWJ1dGUiKTt0LnZlcnRleEF0dHJpYjRmKGksYVswXSxhWzFdLGFbMl0sYVszXSl9dC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fWZvcig7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX1lbHNle3QuYmluZEJ1ZmZlcih0LkFSUkFZX0JVRkZFUixudWxsKTtmb3IoaT0wO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fX0se31dLDE0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQpe3RoaXMuZ2w9dCx0aGlzLl9lbGVtZW50cz1udWxsLHRoaXMuX2F0dHJpYnV0ZXM9bnVsbCx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7bih0aGlzLmdsLHRoaXMuX2VsZW1lbnRzLHRoaXMuX2F0dHJpYnV0ZXMpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2VsZW1lbnRzPWUsdGhpcy5fYXR0cmlidXRlcz10LHRoaXMuX2VsZW1lbnRzVHlwZT1yfHx0aGlzLmdsLlVOU0lHTkVEX1NIT1JUfSxpLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX2VsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX19LHsiLi9kby1iaW5kLmpzIjoxNDd9XSwxNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kby1iaW5kLmpzIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5sb2NhdGlvbj10LHRoaXMuZGltZW5zaW9uPWUsdGhpcy5hPXIsdGhpcy5iPW4sdGhpcy5jPWksdGhpcy5kPWF9ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5nbD10LHRoaXMuX2V4dD1lLHRoaXMuaGFuZGxlPXIsdGhpcy5fYXR0cmlicz1bXSx0aGlzLl91c2VFbGVtZW50cz0hMSx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmRpbWVuc2lvbil7Y2FzZSAxOnQudmVydGV4QXR0cmliMWYodGhpcy5sb2NhdGlvbix0aGlzLmEpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYik7YnJlYWs7Y2FzZSAzOnQudmVydGV4QXR0cmliM2YodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyk7YnJlYWs7Y2FzZSA0OnQudmVydGV4QXR0cmliNGYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyx0aGlzLmQpfX0sYS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5fYXR0cmlicy5sZW5ndGg7Kyt0KXRoaXMuX2F0dHJpYnNbdF0uYmluZCh0aGlzLmdsKX0sYS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0sYS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSl9LGEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5iaW5kKCksbih0aGlzLmdsLGUsdCksdGhpcy51bmJpbmQoKSx0aGlzLl9hdHRyaWJzLmxlbmd0aD0wLHQpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvPXRbYV07Im51bWJlciI9PXR5cGVvZiBvP3RoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLDEsbykpOkFycmF5LmlzQXJyYXkobykmJnRoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLG8ubGVuZ3RoLG9bMF0sb1sxXSxvWzJdLG9bM10pKX10aGlzLl91c2VFbGVtZW50cz0hIWUsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGEucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX3VzZUVsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBhKHQsZSxlLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpfX0seyIuL2RvLWJpbmQuanMiOjE0N31dLDE1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi92YW8tbmF0aXZlLmpzIiksaT10KCIuL2xpYi92YW8tZW11bGF0ZWQuanMiKTtmdW5jdGlvbiBhKHQpe3RoaXMuYmluZFZlcnRleEFycmF5T0VTPXQuYmluZFZlcnRleEFycmF5LmJpbmQodCksdGhpcy5jcmVhdGVWZXJ0ZXhBcnJheU9FUz10LmNyZWF0ZVZlcnRleEFycmF5LmJpbmQodCksdGhpcy5kZWxldGVWZXJ0ZXhBcnJheU9FUz10LmRlbGV0ZVZlcnRleEFycmF5LmJpbmQodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGw9dC5jcmVhdGVWZXJ0ZXhBcnJheT9uZXcgYSh0KTp0LmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTtyZXR1cm4ocz1sP24odCxsKTppKHQpKS51cGRhdGUoZSxyLG8pLHN9fSx7Ii4vbGliL3Zhby1lbXVsYXRlZC5qcyI6MTQ4LCIuL2xpYi92YW8tbmF0aXZlLmpzIjoxNDl9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0fX0se31dLDE1MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4odFswXSx0WzFdLHRbMl0pLG89bihlWzBdLGVbMV0sZVsyXSk7aShyLHIpLGkobyxvKTt2YXIgcz1hKHIsbyk7cmV0dXJuIHM+MT8wOk1hdGguYWNvcyhzKX07dmFyIG49dCgiLi9mcm9tVmFsdWVzIiksaT10KCIuL25vcm1hbGl6ZSIpLGE9dCgiLi9kb3QiKX0seyIuL2RvdCI6MTYyLCIuL2Zyb21WYWx1ZXMiOjE2OCwiLi9ub3JtYWxpemUiOjE3OX1dLDE1MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguY2VpbChlWzBdKSx0WzFdPU1hdGguY2VpbChlWzFdKSx0WzJdPU1hdGguY2VpbChlWzJdKSx0fX0se31dLDE1NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlfX0se31dLDE1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fX0se31dLDE1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHR9fSx7fV0sMTU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl07cmV0dXJuIHRbMF09aSpsLWEqcyx0WzFdPWEqby1uKmwsdFsyXT1uKnMtaSpvLHR9fSx7fV0sMTU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vZGlzdGFuY2UiKX0seyIuL2Rpc3RhbmNlIjoxNTl9XSwxNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2kqaSl9fSx7fV0sMTYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vZGl2aWRlIil9LHsiLi9kaXZpZGUiOjE2MX1dLDE2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHR9fSx7fV0sMTYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfX0se31dLDE2MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0xZS02fSx7fV0sMTY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89ZVswXSxzPWVbMV0sbD1lWzJdO3JldHVybiBNYXRoLmFicyhyLW8pPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMociksTWF0aC5hYnMobykpJiZNYXRoLmFicyhpLXMpPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMocykpJiZNYXRoLmFicyhhLWwpPD1uKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMobCkpfTt2YXIgbj10KCIuL2Vwc2lsb24iKX0seyIuL2Vwc2lsb24iOjE2M31dLDE2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdfX0se31dLDE2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguZmxvb3IoZVswXSksdFsxXT1NYXRoLmZsb29yKGVbMV0pLHRbMl09TWF0aC5mbG9vcihlWzJdKSx0fX0se31dLDE2NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHMsbDtlfHwoZT0zKTtyfHwocj0wKTtsPWk/TWF0aC5taW4oaSplK3IsdC5sZW5ndGgpOnQubGVuZ3RoO2ZvcihzPXI7czxsO3MrPWUpblswXT10W3NdLG5bMV09dFtzKzFdLG5bMl09dFtzKzJdLGEobixuLG8pLHRbc109blswXSx0W3MrMV09blsxXSx0W3MrMl09blsyXTtyZXR1cm4gdH07dmFyIG49dCgiLi9jcmVhdGUiKSgpfSx7Ii4vY3JlYXRlIjoxNTZ9XSwxNjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIG5bMF09dCxuWzFdPWUsblsyXT1yLG59fSx7fV0sMTY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtFUFNJTE9OOnQoIi4vZXBzaWxvbiIpLGNyZWF0ZTp0KCIuL2NyZWF0ZSIpLGNsb25lOnQoIi4vY2xvbmUiKSxhbmdsZTp0KCIuL2FuZ2xlIiksZnJvbVZhbHVlczp0KCIuL2Zyb21WYWx1ZXMiKSxjb3B5OnQoIi4vY29weSIpLHNldDp0KCIuL3NldCIpLGVxdWFsczp0KCIuL2VxdWFscyIpLGV4YWN0RXF1YWxzOnQoIi4vZXhhY3RFcXVhbHMiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0Iiksc3ViOnQoIi4vc3ViIiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLG11bDp0KCIuL211bCIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLGRpdjp0KCIuL2RpdiIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLGZsb29yOnQoIi4vZmxvb3IiKSxjZWlsOnQoIi4vY2VpbCIpLHJvdW5kOnQoIi4vcm91bmQiKSxzY2FsZTp0KCIuL3NjYWxlIiksc2NhbGVBbmRBZGQ6dCgiLi9zY2FsZUFuZEFkZCIpLGRpc3RhbmNlOnQoIi4vZGlzdGFuY2UiKSxkaXN0OnQoIi4vZGlzdCIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLHNxckRpc3Q6dCgiLi9zcXJEaXN0IiksbGVuZ3RoOnQoIi4vbGVuZ3RoIiksbGVuOnQoIi4vbGVuIiksc3F1YXJlZExlbmd0aDp0KCIuL3NxdWFyZWRMZW5ndGgiKSxzcXJMZW46dCgiLi9zcXJMZW4iKSxuZWdhdGU6dCgiLi9uZWdhdGUiKSxpbnZlcnNlOnQoIi4vaW52ZXJzZSIpLG5vcm1hbGl6ZTp0KCIuL25vcm1hbGl6ZSIpLGRvdDp0KCIuL2RvdCIpLGNyb3NzOnQoIi4vY3Jvc3MiKSxsZXJwOnQoIi4vbGVycCIpLHJhbmRvbTp0KCIuL3JhbmRvbSIpLHRyYW5zZm9ybU1hdDQ6dCgiLi90cmFuc2Zvcm1NYXQ0IiksdHJhbnNmb3JtTWF0Mzp0KCIuL3RyYW5zZm9ybU1hdDMiKSx0cmFuc2Zvcm1RdWF0OnQoIi4vdHJhbnNmb3JtUXVhdCIpLHJvdGF0ZVg6dCgiLi9yb3RhdGVYIikscm90YXRlWTp0KCIuL3JvdGF0ZVkiKSxyb3RhdGVaOnQoIi4vcm90YXRlWiIpLGZvckVhY2g6dCgiLi9mb3JFYWNoIil9fSx7Ii4vYWRkIjoxNTEsIi4vYW5nbGUiOjE1MiwiLi9jZWlsIjoxNTMsIi4vY2xvbmUiOjE1NCwiLi9jb3B5IjoxNTUsIi4vY3JlYXRlIjoxNTYsIi4vY3Jvc3MiOjE1NywiLi9kaXN0IjoxNTgsIi4vZGlzdGFuY2UiOjE1OSwiLi9kaXYiOjE2MCwiLi9kaXZpZGUiOjE2MSwiLi9kb3QiOjE2MiwiLi9lcHNpbG9uIjoxNjMsIi4vZXF1YWxzIjoxNjQsIi4vZXhhY3RFcXVhbHMiOjE2NSwiLi9mbG9vciI6MTY2LCIuL2ZvckVhY2giOjE2NywiLi9mcm9tVmFsdWVzIjoxNjgsIi4vaW52ZXJzZSI6MTcwLCIuL2xlbiI6MTcxLCIuL2xlbmd0aCI6MTcyLCIuL2xlcnAiOjE3MywiLi9tYXgiOjE3NCwiLi9taW4iOjE3NSwiLi9tdWwiOjE3NiwiLi9tdWx0aXBseSI6MTc3LCIuL25lZ2F0ZSI6MTc4LCIuL25vcm1hbGl6ZSI6MTc5LCIuL3JhbmRvbSI6MTgwLCIuL3JvdGF0ZVgiOjE4MSwiLi9yb3RhdGVZIjoxODIsIi4vcm90YXRlWiI6MTgzLCIuL3JvdW5kIjoxODQsIi4vc2NhbGUiOjE4NSwiLi9zY2FsZUFuZEFkZCI6MTg2LCIuL3NldCI6MTg3LCIuL3NxckRpc3QiOjE4OCwiLi9zcXJMZW4iOjE4OSwiLi9zcXVhcmVkRGlzdGFuY2UiOjE5MCwiLi9zcXVhcmVkTGVuZ3RoIjoxOTEsIi4vc3ViIjoxOTIsIi4vc3VidHJhY3QiOjE5MywiLi90cmFuc2Zvcm1NYXQzIjoxOTQsIi4vdHJhbnNmb3JtTWF0NCI6MTk1LCIuL3RyYW5zZm9ybVF1YXQiOjE5Nn1dLDE3MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0fX0se31dLDE3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL2xlbmd0aCIpfSx7Ii4vbGVuZ3RoIjoxNzJ9XSwxNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4pfX0se31dLDE3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl07cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHR9fSx7fV0sMTc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdH19LHt9XSwxNzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oZVsyXSxyWzJdKSx0fX0se31dLDE3NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL211bHRpcGx5Iil9LHsiLi9tdWx0aXBseSI6MTc3fV0sMTc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdH19LHt9XSwxNzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdH19LHt9XSwxNzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1yKnIrbipuK2kqaTthPjAmJihhPTEvTWF0aC5zcXJ0KGEpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphKTtyZXR1cm4gdH19LHt9XSwxODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fDE7dmFyIHI9MipNYXRoLnJhbmRvbSgpKk1hdGguUEksbj0yKk1hdGgucmFuZG9tKCktMSxpPU1hdGguc3FydCgxLW4qbikqZTtyZXR1cm4gdFswXT1NYXRoLmNvcyhyKSppLHRbMV09TWF0aC5zaW4ocikqaSx0WzJdPW4qZSx0fX0se31dLDE4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yWzFdLGE9clsyXSxvPWVbMV0taSxzPWVbMl0tYSxsPU1hdGguc2luKG4pLGM9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWkrbypjLXMqbCx0WzJdPWErbypsK3MqYyx0fX0se31dLDE4MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yWzBdLGE9clsyXSxvPWVbMF0taSxzPWVbMl0tYSxsPU1hdGguc2luKG4pLGM9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09aStzKmwrbypjLHRbMV09ZVsxXSx0WzJdPWErcypjLW8qbCx0fX0se31dLDE4MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yWzBdLGE9clsxXSxvPWVbMF0taSxzPWVbMV0tYSxsPU1hdGguc2luKG4pLGM9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09aStvKmMtcypsLHRbMV09YStvKmwrcypjLHRbMl09ZVsyXSx0fX0se31dLDE4NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGgucm91bmQoZVswXSksdFsxXT1NYXRoLnJvdW5kKGVbMV0pLHRbMl09TWF0aC5yb3VuZChlWzJdKSx0fX0se31dLDE4NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHR9fSx7fV0sMTg2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0fX0se31dLDE4NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdH19LHt9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zcXVhcmVkRGlzdGFuY2UiKX0seyIuL3NxdWFyZWREaXN0YW5jZSI6MTkwfV0sMTg5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vc3F1YXJlZExlbmd0aCIpfSx7Ii4vc3F1YXJlZExlbmd0aCI6MTkxfV0sMTkwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdO3JldHVybiByKnIrbipuK2kqaX19LHt9XSwxOTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiBlKmUrcipyK24qbn19LHt9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zdWJ0cmFjdCIpfSx7Ii4vc3VidHJhY3QiOjE5M31dLDE5MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHR9fSx7fV0sMTk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl07cmV0dXJuIHRbMF09bipyWzBdK2kqclszXSthKnJbNl0sdFsxXT1uKnJbMV0raSpyWzRdK2Eqcls3XSx0WzJdPW4qclsyXStpKnJbNV0rYSpyWzhdLHR9fSx7fV0sMTk1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV07cmV0dXJuIG89b3x8MSx0WzBdPShyWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSkvbyx0WzFdPShyWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSkvbyx0WzJdPShyWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0pL28sdH19LHt9XSwxOTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxmPWMqaStsKm4tbyphLGg9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8rZiotbC1oKi1zLHRbMV09ZipjK3AqLXMraCotby11Ki1sLHRbMl09aCpjK3AqLWwrdSotcy1mKi1vLHR9fSx7fV0sMTk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdFszXT1lWzNdK3JbM10sdH19LHt9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGV9fSx7fV0sMTk5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0fX0se31dLDIwMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCx0fX0se31dLDIwMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXSxhPWVbM10tdFszXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppK2EqYSl9fSx7fV0sMjAyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdFszXT1lWzNdL3JbM10sdH19LHt9XSwyMDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfX0se31dLDIwNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBpWzBdPXQsaVsxXT1lLGlbMl09cixpWzNdPW4saX19LHt9XSwyMDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTp0KCIuL2NyZWF0ZSIpLGNsb25lOnQoIi4vY2xvbmUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksYWRkOnQoIi4vYWRkIiksc3VidHJhY3Q6dCgiLi9zdWJ0cmFjdCIpLG11bHRpcGx5OnQoIi4vbXVsdGlwbHkiKSxkaXZpZGU6dCgiLi9kaXZpZGUiKSxtaW46dCgiLi9taW4iKSxtYXg6dCgiLi9tYXgiKSxzY2FsZTp0KCIuL3NjYWxlIiksc2NhbGVBbmRBZGQ6dCgiLi9zY2FsZUFuZEFkZCIpLGRpc3RhbmNlOnQoIi4vZGlzdGFuY2UiKSxzcXVhcmVkRGlzdGFuY2U6dCgiLi9zcXVhcmVkRGlzdGFuY2UiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksbGVycDp0KCIuL2xlcnAiKSxyYW5kb206dCgiLi9yYW5kb20iKSx0cmFuc2Zvcm1NYXQ0OnQoIi4vdHJhbnNmb3JtTWF0NCIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iil9fSx7Ii4vYWRkIjoxOTcsIi4vY2xvbmUiOjE5OCwiLi9jb3B5IjoxOTksIi4vY3JlYXRlIjoyMDAsIi4vZGlzdGFuY2UiOjIwMSwiLi9kaXZpZGUiOjIwMiwiLi9kb3QiOjIwMywiLi9mcm9tVmFsdWVzIjoyMDQsIi4vaW52ZXJzZSI6MjA2LCIuL2xlbmd0aCI6MjA3LCIuL2xlcnAiOjIwOCwiLi9tYXgiOjIwOSwiLi9taW4iOjIxMCwiLi9tdWx0aXBseSI6MjExLCIuL25lZ2F0ZSI6MjEyLCIuL25vcm1hbGl6ZSI6MjEzLCIuL3JhbmRvbSI6MjE0LCIuL3NjYWxlIjoyMTUsIi4vc2NhbGVBbmRBZGQiOjIxNiwiLi9zZXQiOjIxNywiLi9zcXVhcmVkRGlzdGFuY2UiOjIxOCwiLi9zcXVhcmVkTGVuZ3RoIjoyMTksIi4vc3VidHJhY3QiOjIyMCwiLi90cmFuc2Zvcm1NYXQ0IjoyMjEsIi4vdHJhbnNmb3JtUXVhdCI6MjIyfV0sMjA2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHRbM109MS9lWzNdLHR9fSx7fV0sMjA3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbitpKmkpfX0se31dLDIwODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0WzNdPXMrbiooclszXS1zKSx0fX0se31dLDIwOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHRbM109TWF0aC5tYXgoZVszXSxyWzNdKSx0fX0se31dLDIxMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHRbM109TWF0aC5taW4oZVszXSxyWzNdKSx0fX0se31dLDIxMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHRbM109ZVszXSpyWzNdLHR9fSx7fV0sMjEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109LWVbM10sdH19LHt9XSwyMTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cipyK24qbitpKmkrYSphO28+MCYmKG89MS9NYXRoLnNxcnQobyksdFswXT1yKm8sdFsxXT1uKm8sdFsyXT1pKm8sdFszXT1hKm8pO3JldHVybiB0fX0se31dLDIxNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbm9ybWFsaXplIiksaT10KCIuL3NjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8MSx0WzBdPU1hdGgucmFuZG9tKCksdFsxXT1NYXRoLnJhbmRvbSgpLHRbMl09TWF0aC5yYW5kb20oKSx0WzNdPU1hdGgucmFuZG9tKCksbih0LHQpLGkodCx0LGUpLHR9fSx7Ii4vbm9ybWFsaXplIjoyMTMsIi4vc2NhbGUiOjIxNX1dLDIxNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHR9fSx7fV0sMjE2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHR9fSx7fV0sMjE3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0fX0se31dLDIxODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXSxhPWVbM10tdFszXTtyZXR1cm4gcipyK24qbitpKmkrYSphfX0se31dLDIxOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiBlKmUrcipyK24qbitpKml9fSx7fV0sMjIwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdFszXT1lWzNdLXJbM10sdH19LHt9XSwyMjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9fSx7fV0sMjIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sYz1yWzNdLHU9YypuK3MqYS1sKmksZj1jKmkrbCpuLW8qYSxoPWMqYStvKmktcypuLHA9LW8qbi1zKmktbCphO3JldHVybiB0WzBdPXUqYytwKi1vK2YqLWwtaCotcyx0WzFdPWYqYytwKi1zK2gqLW8tdSotbCx0WzJdPWgqYytwKi1sK3UqLXMtZiotbyx0WzNdPWVbM10sdH19LHt9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsLXRva2VuaXplciIpLGk9dCgiYXRvYi1saXRlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5pc0FycmF5KHQpP3Q6bih0KSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPWVbcl07aWYoInByZXByb2Nlc3NvciI9PT1hLnR5cGUpe3ZhciBvPWEuZGF0YS5tYXRjaCgvXCNkZWZpbmVccytTSEFERVJfTkFNRShfQjY0KT9ccysoLispJC8pO2lmKG8mJm9bMl0pe3ZhciBzPW9bMV0sbD1vWzJdO3JldHVybihzP2kobCk6bCkudHJpbSgpfX19fX0seyJhdG9iLWxpdGUiOjEzLCJnbHNsLXRva2VuaXplciI6MjMwfV0sMjI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYyx1PTAsZj0wLGg9OTk5LHA9W10sZD1bXSxtPTEsZz0wLHY9MCx5PSExLHg9ITEsYj0iIixfPWEsdz1uOyIzMDAgZXMiPT09KHQ9dHx8e30pLnZlcnNpb24mJihfPXMsdz1vKTt2YXIgVD17fSxrPXt9O2Zvcih1PTA7dTxfLmxlbmd0aDt1KyspVFtfW3VdXT0hMDtmb3IodT0wO3U8dy5sZW5ndGg7dSsrKWtbd1t1XV09ITA7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBkPVtdLG51bGwhPT10P2Z1bmN0aW9uKHQpe3U9MCx0LnRvU3RyaW5nJiYodD10LnRvU3RyaW5nKCkpO3ZhciByO2IrPXQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLGM9Yi5sZW5ndGg7Zm9yKDtlPWJbdV0sdTxjOyl7c3dpdGNoKHI9dSxoKXtjYXNlIDA6dT1MKCk7YnJlYWs7Y2FzZSAxOmNhc2UgMjp1PUUoKTticmVhaztjYXNlIDM6dT1DKCk7YnJlYWs7Y2FzZSA0OnU9TygpO2JyZWFrO2Nhc2UgMTE6dT1JKCk7YnJlYWs7Y2FzZSA1OnU9eigpO2JyZWFrO2Nhc2UgOTk5OTp1PUQoKTticmVhaztjYXNlIDk6dT1TKCk7YnJlYWs7Y2FzZSA5OTk6dT1NKCl9aWYociE9PXUpc3dpdGNoKGJbcl0pe2Nhc2UiXG4iOmc9MCwrK207YnJlYWs7ZGVmYXVsdDorK2d9fXJldHVybiBmKz11LGI9Yi5zbGljZSh1KSxkfSh0KTpmdW5jdGlvbih0KXtwLmxlbmd0aCYmQShwLmpvaW4oIiIpKTtyZXR1cm4gaD0xMCxBKCIoZW9mKSIpLGR9KCl9O2Z1bmN0aW9uIEEodCl7dC5sZW5ndGgmJmQucHVzaCh7dHlwZTpsW2hdLGRhdGE6dCxwb3NpdGlvbjp2LGxpbmU6bSxjb2x1bW46Z30pfWZ1bmN0aW9uIE0oKXtyZXR1cm4gcD1wLmxlbmd0aD9bXTpwLCIvIj09PXImJiIqIj09PWU/KHY9Zit1LTEsaD0wLHI9ZSx1KzEpOiIvIj09PXImJiIvIj09PWU/KHY9Zit1LTEsaD0xLHI9ZSx1KzEpOiIjIj09PWU/KGg9Mix2PWYrdSx1KTovXHMvLnRlc3QoZSk/KGg9OSx2PWYrdSx1KTooeT0vXGQvLnRlc3QoZSkseD0vW15cd19dLy50ZXN0KGUpLHY9Zit1LGg9eT80Ong/Mzo5OTk5LHUpfWZ1bmN0aW9uIFMoKXtyZXR1cm4vW15cc10vZy50ZXN0KGUpPyhBKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gRSgpe3JldHVybiJcciIhPT1lJiYiXG4iIT09ZXx8IlxcIj09PXI/KHAucHVzaChlKSxyPWUsdSsxKTooQShwLmpvaW4oIiIpKSxoPTk5OSx1KX1mdW5jdGlvbiBMKCl7cmV0dXJuIi8iPT09ZSYmIioiPT09cj8ocC5wdXNoKGUpLEEocC5qb2luKCIiKSksaD05OTksdSsxKToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIEMoKXtpZigiLiI9PT1yJiYvXGQvLnRlc3QoZSkpcmV0dXJuIGg9NSx1O2lmKCIvIj09PXImJiIqIj09PWUpcmV0dXJuIGg9MCx1O2lmKCIvIj09PXImJiIvIj09PWUpcmV0dXJuIGg9MSx1O2lmKCIuIj09PWUmJnAubGVuZ3RoKXtmb3IoO1AocCk7KTtyZXR1cm4gaD01LHV9aWYoIjsiPT09ZXx8IikiPT09ZXx8IigiPT09ZSl7aWYocC5sZW5ndGgpZm9yKDtQKHApOyk7cmV0dXJuIEEoZSksaD05OTksdSsxfXZhciB0PTI9PT1wLmxlbmd0aCYmIj0iIT09ZTtpZigvW1x3X1xkXHNdLy50ZXN0KGUpfHx0KXtmb3IoO1AocCk7KTtyZXR1cm4gaD05OTksdX1yZXR1cm4gcC5wdXNoKGUpLHI9ZSx1KzF9ZnVuY3Rpb24gUCh0KXtmb3IodmFyIGUscixuPTA7Oyl7aWYoZT1pLmluZGV4T2YodC5zbGljZSgwLHQubGVuZ3RoK24pLmpvaW4oIiIpKSxyPWlbZV0sLTE9PT1lKXtpZihuLS0rdC5sZW5ndGg+MCljb250aW51ZTtyPXQuc2xpY2UoMCwxKS5qb2luKCIiKX1yZXR1cm4gQShyKSx2Kz1yLmxlbmd0aCwocD1wLnNsaWNlKHIubGVuZ3RoKSkubGVuZ3RofX1mdW5jdGlvbiBJKCl7cmV0dXJuL1teYS1mQS1GMC05XS8udGVzdChlKT8oQShwLmpvaW4oIiIpKSxoPTk5OSx1KToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIE8oKXtyZXR1cm4iLiI9PT1lfHwvW2VFXS8udGVzdChlKT8ocC5wdXNoKGUpLGg9NSxyPWUsdSsxKToieCI9PT1lJiYxPT09cC5sZW5ndGgmJiIwIj09PXBbMF0/KGg9MTEscC5wdXNoKGUpLHI9ZSx1KzEpOi9bXlxkXS8udGVzdChlKT8oQShwLmpvaW4oIiIpKSxoPTk5OSx1KToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIHooKXtyZXR1cm4iZiI9PT1lJiYocC5wdXNoKGUpLHI9ZSx1Kz0xKSwvW2VFXS8udGVzdChlKT8ocC5wdXNoKGUpLHI9ZSx1KzEpOigiLSIhPT1lJiYiKyIhPT1lfHwhL1tlRV0vLnRlc3QocikpJiYvW15cZF0vLnRlc3QoZSk/KEEocC5qb2luKCIiKSksaD05OTksdSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiBEKCl7aWYoL1teXGRcd19dLy50ZXN0KGUpKXt2YXIgdD1wLmpvaW4oIiIpO3JldHVybiBoPWtbdF0/ODpUW3RdPzc6NixBKHAuam9pbigiIikpLGg9OTk5LHV9cmV0dXJuIHAucHVzaChlKSxyPWUsdSsxfX07dmFyIG49dCgiLi9saWIvbGl0ZXJhbHMiKSxpPXQoIi4vbGliL29wZXJhdG9ycyIpLGE9dCgiLi9saWIvYnVpbHRpbnMiKSxvPXQoIi4vbGliL2xpdGVyYWxzLTMwMGVzIikscz10KCIuL2xpYi9idWlsdGlucy0zMDBlcyIpLGw9WyJibG9jay1jb21tZW50IiwibGluZS1jb21tZW50IiwicHJlcHJvY2Vzc29yIiwib3BlcmF0b3IiLCJpbnRlZ2VyIiwiZmxvYXQiLCJpZGVudCIsImJ1aWx0aW4iLCJrZXl3b3JkIiwid2hpdGVzcGFjZSIsImVvZiIsImludGVnZXIiXX0seyIuL2xpYi9idWlsdGlucyI6MjI2LCIuL2xpYi9idWlsdGlucy0zMDBlcyI6MjI1LCIuL2xpYi9saXRlcmFscyI6MjI4LCIuL2xpYi9saXRlcmFscy0zMDBlcyI6MjI3LCIuL2xpYi9vcGVyYXRvcnMiOjIyOX1dLDIyNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vYnVpbHRpbnMiKTtuPW4uc2xpY2UoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiEvXihnbFxffHRleHR1cmUpLy50ZXN0KHQpfSkpLGUuZXhwb3J0cz1uLmNvbmNhdChbImdsX1ZlcnRleElEIiwiZ2xfSW5zdGFuY2VJRCIsImdsX1Bvc2l0aW9uIiwiZ2xfUG9pbnRTaXplIiwiZ2xfRnJhZ0Nvb3JkIiwiZ2xfRnJvbnRGYWNpbmciLCJnbF9GcmFnRGVwdGgiLCJnbF9Qb2ludENvb3JkIiwiZ2xfTWF4VmVydGV4QXR0cmlicyIsImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwiZ2xfTWF4VmVydGV4T3V0cHV0VmVjdG9ycyIsImdsX01heEZyYWdtZW50SW5wdXRWZWN0b3JzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIiwiZ2xfTWF4RHJhd0J1ZmZlcnMiLCJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCJnbF9NYXhQcm9ncmFtVGV4ZWxPZmZzZXQiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0RlcHRoUmFuZ2UiLCJ0cnVuYyIsInJvdW5kIiwicm91bmRFdmVuIiwiaXNuYW4iLCJpc2luZiIsImZsb2F0Qml0c1RvSW50IiwiZmxvYXRCaXRzVG9VaW50IiwiaW50Qml0c1RvRmxvYXQiLCJ1aW50Qml0c1RvRmxvYXQiLCJwYWNrU25vcm0yeDE2IiwidW5wYWNrU25vcm0yeDE2IiwicGFja1Vub3JtMngxNiIsInVucGFja1Vub3JtMngxNiIsInBhY2tIYWxmMngxNiIsInVucGFja0hhbGYyeDE2Iiwib3V0ZXJQcm9kdWN0IiwidHJhbnNwb3NlIiwiZGV0ZXJtaW5hbnQiLCJpbnZlcnNlIiwidGV4dHVyZSIsInRleHR1cmVTaXplIiwidGV4dHVyZVByb2oiLCJ0ZXh0dXJlTG9kIiwidGV4dHVyZU9mZnNldCIsInRleGVsRmV0Y2giLCJ0ZXhlbEZldGNoT2Zmc2V0IiwidGV4dHVyZVByb2pPZmZzZXQiLCJ0ZXh0dXJlTG9kT2Zmc2V0IiwidGV4dHVyZVByb2pMb2QiLCJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsInRleHR1cmVHcmFkIiwidGV4dHVyZUdyYWRPZmZzZXQiLCJ0ZXh0dXJlUHJvakdyYWQiLCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiXSl9LHsiLi9idWlsdGlucyI6MjI2fV0sMjI2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiYWJzIiwiYWNvcyIsImFsbCIsImFueSIsImFzaW4iLCJhdGFuIiwiY2VpbCIsImNsYW1wIiwiY29zIiwiY3Jvc3MiLCJkRmR4IiwiZEZkeSIsImRlZ3JlZXMiLCJkaXN0YW5jZSIsImRvdCIsImVxdWFsIiwiZXhwIiwiZXhwMiIsImZhY2Vmb3J3YXJkIiwiZmxvb3IiLCJmcmFjdCIsImdsX0JhY2tDb2xvciIsImdsX0JhY2tMaWdodE1vZGVsUHJvZHVjdCIsImdsX0JhY2tMaWdodFByb2R1Y3QiLCJnbF9CYWNrTWF0ZXJpYWwiLCJnbF9CYWNrU2Vjb25kYXJ5Q29sb3IiLCJnbF9DbGlwUGxhbmUiLCJnbF9DbGlwVmVydGV4IiwiZ2xfQ29sb3IiLCJnbF9EZXB0aFJhbmdlIiwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiLCJnbF9FeWVQbGFuZVEiLCJnbF9FeWVQbGFuZVIiLCJnbF9FeWVQbGFuZVMiLCJnbF9FeWVQbGFuZVQiLCJnbF9Gb2ciLCJnbF9Gb2dDb29yZCIsImdsX0ZvZ0ZyYWdDb29yZCIsImdsX0ZvZ1BhcmFtZXRlcnMiLCJnbF9GcmFnQ29sb3IiLCJnbF9GcmFnQ29vcmQiLCJnbF9GcmFnRGF0YSIsImdsX0ZyYWdEZXB0aCIsImdsX0ZyYWdEZXB0aEVYVCIsImdsX0Zyb250Q29sb3IiLCJnbF9Gcm9udEZhY2luZyIsImdsX0Zyb250TGlnaHRNb2RlbFByb2R1Y3QiLCJnbF9Gcm9udExpZ2h0UHJvZHVjdCIsImdsX0Zyb250TWF0ZXJpYWwiLCJnbF9Gcm9udFNlY29uZGFyeUNvbG9yIiwiZ2xfTGlnaHRNb2RlbCIsImdsX0xpZ2h0TW9kZWxQYXJhbWV0ZXJzIiwiZ2xfTGlnaHRNb2RlbFByb2R1Y3RzIiwiZ2xfTGlnaHRQcm9kdWN0cyIsImdsX0xpZ2h0U291cmNlIiwiZ2xfTGlnaHRTb3VyY2VQYXJhbWV0ZXJzIiwiZ2xfTWF0ZXJpYWxQYXJhbWV0ZXJzIiwiZ2xfTWF4Q2xpcFBsYW5lcyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01heEZyYWdtZW50VW5pZm9ybUNvbXBvbmVudHMiLCJnbF9NYXhMaWdodHMiLCJnbF9NYXhUZXh0dXJlQ29vcmRzIiwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlVW5pdHMiLCJnbF9NYXhWYXJ5aW5nRmxvYXRzIiwiZ2xfTWF4VmVydGV4QXR0cmlicyIsImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHMiLCJnbF9Nb2RlbFZpZXdNYXRyaXgiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX01vZGVsVmlld01hdHJpeFRyYW5zcG9zZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXgiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSIsImdsX011bHRpVGV4Q29vcmQwIiwiZ2xfTXVsdGlUZXhDb29yZDEiLCJnbF9NdWx0aVRleENvb3JkMiIsImdsX011bHRpVGV4Q29vcmQzIiwiZ2xfTXVsdGlUZXhDb29yZDQiLCJnbF9NdWx0aVRleENvb3JkNSIsImdsX011bHRpVGV4Q29vcmQ2IiwiZ2xfTXVsdGlUZXhDb29yZDciLCJnbF9Ob3JtYWwiLCJnbF9Ob3JtYWxNYXRyaXgiLCJnbF9Ob3JtYWxTY2FsZSIsImdsX09iamVjdFBsYW5lUSIsImdsX09iamVjdFBsYW5lUiIsImdsX09iamVjdFBsYW5lUyIsImdsX09iamVjdFBsYW5lVCIsImdsX1BvaW50IiwiZ2xfUG9pbnRDb29yZCIsImdsX1BvaW50UGFyYW1ldGVycyIsImdsX1BvaW50U2l6ZSIsImdsX1Bvc2l0aW9uIiwiZ2xfUHJvamVjdGlvbk1hdHJpeCIsImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfU2Vjb25kYXJ5Q29sb3IiLCJnbF9UZXhDb29yZCIsImdsX1RleHR1cmVFbnZDb2xvciIsImdsX1RleHR1cmVNYXRyaXgiLCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZSIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfVGV4dHVyZU1hdHJpeFRyYW5zcG9zZSIsImdsX1ZlcnRleCIsImdyZWF0ZXJUaGFuIiwiZ3JlYXRlclRoYW5FcXVhbCIsImludmVyc2VzcXJ0IiwibGVuZ3RoIiwibGVzc1RoYW4iLCJsZXNzVGhhbkVxdWFsIiwibG9nIiwibG9nMiIsIm1hdHJpeENvbXBNdWx0IiwibWF4IiwibWluIiwibWl4IiwibW9kIiwibm9ybWFsaXplIiwibm90Iiwibm90RXF1YWwiLCJwb3ciLCJyYWRpYW5zIiwicmVmbGVjdCIsInJlZnJhY3QiLCJzaWduIiwic2luIiwic21vb3Roc3RlcCIsInNxcnQiLCJzdGVwIiwidGFuIiwidGV4dHVyZTJEIiwidGV4dHVyZTJETG9kIiwidGV4dHVyZTJEUHJvaiIsInRleHR1cmUyRFByb2pMb2QiLCJ0ZXh0dXJlQ3ViZSIsInRleHR1cmVDdWJlTG9kIiwidGV4dHVyZTJETG9kRVhUIiwidGV4dHVyZTJEUHJvakxvZEVYVCIsInRleHR1cmVDdWJlTG9kRVhUIiwidGV4dHVyZTJER3JhZEVYVCIsInRleHR1cmUyRFByb2pHcmFkRVhUIiwidGV4dHVyZUN1YmVHcmFkRVhUIl19LHt9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2xpdGVyYWxzIik7ZS5leHBvcnRzPW4uc2xpY2UoKS5jb25jYXQoWyJsYXlvdXQiLCJjZW50cm9pZCIsInNtb290aCIsImNhc2UiLCJtYXQyeDIiLCJtYXQyeDMiLCJtYXQyeDQiLCJtYXQzeDIiLCJtYXQzeDMiLCJtYXQzeDQiLCJtYXQ0eDIiLCJtYXQ0eDMiLCJtYXQ0eDQiLCJ1dmVjMiIsInV2ZWMzIiwidXZlYzQiLCJzYW1wbGVyQ3ViZVNoYWRvdyIsInNhbXBsZXIyREFycmF5Iiwic2FtcGxlcjJEQXJyYXlTaGFkb3ciLCJpc2FtcGxlcjJEIiwiaXNhbXBsZXIzRCIsImlzYW1wbGVyQ3ViZSIsImlzYW1wbGVyMkRBcnJheSIsInVzYW1wbGVyMkQiLCJ1c2FtcGxlcjNEIiwidXNhbXBsZXJDdWJlIiwidXNhbXBsZXIyREFycmF5IiwiY29oZXJlbnQiLCJyZXN0cmljdCIsInJlYWRvbmx5Iiwid3JpdGVvbmx5IiwicmVzb3VyY2UiLCJhdG9taWNfdWludCIsIm5vcGVyc3BlY3RpdmUiLCJwYXRjaCIsInNhbXBsZSIsInN1YnJvdXRpbmUiLCJjb21tb24iLCJwYXJ0aXRpb24iLCJhY3RpdmUiLCJmaWx0ZXIiLCJpbWFnZTFEIiwiaW1hZ2UyRCIsImltYWdlM0QiLCJpbWFnZUN1YmUiLCJpaW1hZ2UxRCIsImlpbWFnZTJEIiwiaWltYWdlM0QiLCJpaW1hZ2VDdWJlIiwidWltYWdlMUQiLCJ1aW1hZ2UyRCIsInVpbWFnZTNEIiwidWltYWdlQ3ViZSIsImltYWdlMURBcnJheSIsImltYWdlMkRBcnJheSIsImlpbWFnZTFEQXJyYXkiLCJpaW1hZ2UyREFycmF5IiwidWltYWdlMURBcnJheSIsInVpbWFnZTJEQXJyYXkiLCJpbWFnZTFEU2hhZG93IiwiaW1hZ2UyRFNoYWRvdyIsImltYWdlMURBcnJheVNoYWRvdyIsImltYWdlMkRBcnJheVNoYWRvdyIsImltYWdlQnVmZmVyIiwiaWltYWdlQnVmZmVyIiwidWltYWdlQnVmZmVyIiwic2FtcGxlcjFEQXJyYXkiLCJzYW1wbGVyMURBcnJheVNoYWRvdyIsImlzYW1wbGVyMUQiLCJpc2FtcGxlcjFEQXJyYXkiLCJ1c2FtcGxlcjFEIiwidXNhbXBsZXIxREFycmF5IiwiaXNhbXBsZXIyRFJlY3QiLCJ1c2FtcGxlcjJEUmVjdCIsInNhbXBsZXJCdWZmZXIiLCJpc2FtcGxlckJ1ZmZlciIsInVzYW1wbGVyQnVmZmVyIiwic2FtcGxlcjJETVMiLCJpc2FtcGxlcjJETVMiLCJ1c2FtcGxlcjJETVMiLCJzYW1wbGVyMkRNU0FycmF5IiwiaXNhbXBsZXIyRE1TQXJyYXkiLCJ1c2FtcGxlcjJETVNBcnJheSJdKX0seyIuL2xpdGVyYWxzIjoyMjh9XSwyMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJwcmVjaXNpb24iLCJoaWdocCIsIm1lZGl1bXAiLCJsb3dwIiwiYXR0cmlidXRlIiwiY29uc3QiLCJ1bmlmb3JtIiwidmFyeWluZyIsImJyZWFrIiwiY29udGludWUiLCJkbyIsImZvciIsIndoaWxlIiwiaWYiLCJlbHNlIiwiaW4iLCJvdXQiLCJpbm91dCIsImZsb2F0IiwiaW50IiwidWludCIsInZvaWQiLCJib29sIiwidHJ1ZSIsImZhbHNlIiwiZGlzY2FyZCIsInJldHVybiIsIm1hdDIiLCJtYXQzIiwibWF0NCIsInZlYzIiLCJ2ZWMzIiwidmVjNCIsIml2ZWMyIiwiaXZlYzMiLCJpdmVjNCIsImJ2ZWMyIiwiYnZlYzMiLCJidmVjNCIsInNhbXBsZXIxRCIsInNhbXBsZXIyRCIsInNhbXBsZXIzRCIsInNhbXBsZXJDdWJlIiwic2FtcGxlcjFEU2hhZG93Iiwic2FtcGxlcjJEU2hhZG93Iiwic3RydWN0IiwiYXNtIiwiY2xhc3MiLCJ1bmlvbiIsImVudW0iLCJ0eXBlZGVmIiwidGVtcGxhdGUiLCJ0aGlzIiwicGFja2VkIiwiZ290byIsInN3aXRjaCIsImRlZmF1bHQiLCJpbmxpbmUiLCJub2lubGluZSIsInZvbGF0aWxlIiwicHVibGljIiwic3RhdGljIiwiZXh0ZXJuIiwiZXh0ZXJuYWwiLCJpbnRlcmZhY2UiLCJsb25nIiwic2hvcnQiLCJkb3VibGUiLCJoYWxmIiwiZml4ZWQiLCJ1bnNpZ25lZCIsImlucHV0Iiwib3V0cHV0IiwiaHZlYzIiLCJodmVjMyIsImh2ZWM0IiwiZHZlYzIiLCJkdmVjMyIsImR2ZWM0IiwiZnZlYzIiLCJmdmVjMyIsImZ2ZWM0Iiwic2FtcGxlcjJEUmVjdCIsInNhbXBsZXIzRFJlY3QiLCJzYW1wbGVyMkRSZWN0U2hhZG93Iiwic2l6ZW9mIiwiY2FzdCIsIm5hbWVzcGFjZSIsInVzaW5nIl19LHt9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyI8PD0iLCI+Pj0iLCIrKyIsIi0tIiwiPDwiLCI+PiIsIjw9IiwiPj0iLCI9PSIsIiE9IiwiJiYiLCJ8fCIsIis9IiwiLT0iLCIqPSIsIi89IiwiJT0iLCImPSIsIl5eIiwiXj0iLCJ8PSIsIigiLCIpIiwiWyIsIl0iLCIuIiwiISIsIn4iLCIqIiwiLyIsIiUiLCIrIiwiLSIsIjwiLCI+IiwiJiIsIl4iLCJ8IiwiPyIsIjoiLCI9IiwiLCIsIjsiLCJ7IiwifSJdfSx7fV0sMjMwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9pbmRleCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSksaT1bXTtyZXR1cm4gaT0oaT1pLmNvbmNhdChyKHQpKSkuY29uY2F0KHIobnVsbCkpfX0seyIuL2luZGV4IjoyMjR9XSwyMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pO2Zvcih2YXIgZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyPVtdLG49MDtuPHQubGVuZ3RoLTE7bisrKXIucHVzaCh0W25dLGVbbl18fCIiKTtyZXR1cm4gci5wdXNoKHRbbl0pLHIuam9pbigiIil9fSx7fV0sMjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLWJyb3dzZXIiKTtlLmV4cG9ydHM9biYmZnVuY3Rpb24oKXt2YXIgdD0hMTt0cnl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7dD0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKX1jYXRjaChlKXt0PSExfXJldHVybiB0fSgpfSx7ImlzLWJyb3dzZXIiOjIzNn1dLDIzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoIk11c3QgaGF2ZSBhdCBsZWFzdCBkKzEgcG9pbnRzIik7dmFyIGk9dFswXS5sZW5ndGg7aWYocjw9aSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgaW5wdXQgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBvPXQuc2xpY2UoMCxpKzEpLHM9bi5hcHBseSh2b2lkIDAsbyk7aWYoMD09PXMpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBub3QgaW4gZ2VuZXJhbCBwb3NpdGlvbiIpO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSsxKSx1PTA7dTw9aTsrK3UpbFt1XT11O3M8MCYmKGxbMF09MSxsWzFdPTApO3ZhciBmPW5ldyBhKGwsbmV3IEFycmF5KGkrMSksITEpLGg9Zi5hZGphY2VudCxwPW5ldyBBcnJheShpKzIpO2Zvcih1PTA7dTw9aTsrK3Upe2Zvcih2YXIgZD1sLnNsaWNlKCksbT0wO208PWk7KyttKW09PT11JiYoZFttXT0tMSk7dmFyIGc9ZFswXTtkWzBdPWRbMV0sZFsxXT1nO3ZhciB2PW5ldyBhKGQsbmV3IEFycmF5KGkrMSksITApO2hbdV09dixwW3VdPXZ9cFtpKzFdPWY7Zm9yKHU9MDt1PD1pOysrdSl7ZD1oW3VdLnZlcnRpY2VzO3ZhciB5PWhbdV0uYWRqYWNlbnQ7Zm9yKG09MDttPD1pOysrbSl7dmFyIHg9ZFttXTtpZih4PDApeVttXT1mO2Vsc2UgZm9yKHZhciBiPTA7Yjw9aTsrK2IpaFtiXS52ZXJ0aWNlcy5pbmRleE9mKHgpPDAmJih5W21dPWhbYl0pfX12YXIgXz1uZXcgYyhpLG8scCksdz0hIWU7Zm9yKHU9aSsxO3U8cjsrK3UpXy5pbnNlcnQodFt1XSx3KTtyZXR1cm4gXy5ib3VuZGFyeSgpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxpPXQoInNpbXBsaWNpYWwtY29tcGxleCIpLmNvbXBhcmVDZWxscztmdW5jdGlvbiBhKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5hZGphY2VudD1lLHRoaXMuYm91bmRhcnk9cix0aGlzLmxhc3RWaXNpdGVkPS0xfWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmNlbGw9ZSx0aGlzLmluZGV4PXJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBpKHQudmVydGljZXMsZS52ZXJ0aWNlcyl9YS5wcm90b3R5cGUuZmxpcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmVydGljZXNbMF07dGhpcy52ZXJ0aWNlc1swXT10aGlzLnZlcnRpY2VzWzFdLHRoaXMudmVydGljZXNbMV09dDt2YXIgZT10aGlzLmFkamFjZW50WzBdO3RoaXMuYWRqYWNlbnRbMF09dGhpcy5hZGphY2VudFsxXSx0aGlzLmFkamFjZW50WzFdPWV9O3ZhciBsPVtdO2Z1bmN0aW9uIGModCxlLHIpe3RoaXMuZGltZW5zaW9uPXQsdGhpcy52ZXJ0aWNlcz1lLHRoaXMuc2ltcGxpY2VzPXIsdGhpcy5pbnRlcmlvcj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQuYm91bmRhcnl9KSksdGhpcy50dXBsZT1uZXcgQXJyYXkodCsxKTtmb3IodmFyIGk9MDtpPD10OysraSl0aGlzLnR1cGxlW2ldPXRoaXMudmVydGljZXNbaV07dmFyIGEsbz1sW3RdO298fChvPWxbdF09KChhPW5bdCsxXSl8fChhPW4pLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMudHVwbGU7cmV0dXJuIHQuYXBwbHkodGhpcyxlKX19KGEpKSksdGhpcy5vcmllbnQ9b312YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxpPXRoaXMudHVwbGUsYT10aGlzLnZlcnRpY2VzLG89W3RdO2Zvcih0Lmxhc3RWaXNpdGVkPS1uO28ubGVuZ3RoPjA7KWZvcih2YXIgcz0odD1vLnBvcCgpKS5hZGphY2VudCxsPTA7bDw9cjsrK2wpe3ZhciBjPXNbbF07aWYoYy5ib3VuZGFyeSYmIShjLmxhc3RWaXNpdGVkPD0tbikpe2Zvcih2YXIgdT1jLnZlcnRpY2VzLGY9MDtmPD1yOysrZil7dmFyIGg9dVtmXTtpW2ZdPWg8MD9lOmFbaF19dmFyIHA9dGhpcy5vcmllbnQoKTtpZihwPjApcmV0dXJuIGM7Yy5sYXN0VmlzaXRlZD0tbiwwPT09cCYmby5wdXNoKGMpfX1yZXR1cm4gbnVsbH0sdS53YWxrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxhPXRoaXMudHVwbGUsbz1lP3RoaXMuaW50ZXJpb3IubGVuZ3RoKk1hdGgucmFuZG9tKCl8MDp0aGlzLmludGVyaW9yLmxlbmd0aC0xLHM9dGhpcy5pbnRlcmlvcltvXTt0OmZvcig7IXMuYm91bmRhcnk7KXtmb3IodmFyIGw9cy52ZXJ0aWNlcyxjPXMuYWRqYWNlbnQsdT0wO3U8PW47Kyt1KWFbdV09aVtsW3VdXTtzLmxhc3RWaXNpdGVkPXI7Zm9yKHU9MDt1PD1uOysrdSl7dmFyIGY9Y1t1XTtpZighKGYubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgaD1hW3VdO2FbdV09dDt2YXIgcD10aGlzLm9yaWVudCgpO2lmKGFbdV09aCxwPDApe3M9Zjtjb250aW51ZSB0fWYuYm91bmRhcnk/Zi5sYXN0VmlzaXRlZD0tcjpmLmxhc3RWaXNpdGVkPXJ9fXJldHVybn1yZXR1cm4gc30sdS5hZGRQZWFrcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsbD10aGlzLnR1cGxlLGM9dGhpcy5pbnRlcmlvcix1PXRoaXMuc2ltcGxpY2VzLGY9W2VdO2UubGFzdFZpc2l0ZWQ9cixlLnZlcnRpY2VzW2UudmVydGljZXMuaW5kZXhPZigtMSldPXIsZS5ib3VuZGFyeT0hMSxjLnB1c2goZSk7Zm9yKHZhciBoPVtdO2YubGVuZ3RoPjA7KXt2YXIgcD0oZT1mLnBvcCgpKS52ZXJ0aWNlcyxkPWUuYWRqYWNlbnQsbT1wLmluZGV4T2Yocik7aWYoIShtPDApKWZvcih2YXIgZz0wO2c8PW47KytnKWlmKGchPT1tKXt2YXIgdj1kW2ddO2lmKHYuYm91bmRhcnkmJiEodi5sYXN0VmlzaXRlZD49cikpe3ZhciB5PXYudmVydGljZXM7aWYodi5sYXN0VmlzaXRlZCE9PS1yKXtmb3IodmFyIHg9MCxiPTA7Yjw9bjsrK2IpeVtiXTwwPyh4PWIsbFtiXT10KTpsW2JdPWlbeVtiXV07aWYodGhpcy5vcmllbnQoKT4wKXt5W3hdPXIsdi5ib3VuZGFyeT0hMSxjLnB1c2godiksZi5wdXNoKHYpLHYubGFzdFZpc2l0ZWQ9cjtjb250aW51ZX12Lmxhc3RWaXNpdGVkPS1yfXZhciBfPXYuYWRqYWNlbnQsdz1wLnNsaWNlKCksVD1kLnNsaWNlKCksaz1uZXcgYSh3LFQsITApO3UucHVzaChrKTt2YXIgQT1fLmluZGV4T2YoZSk7aWYoIShBPDApKXtfW0FdPWssVFttXT12LHdbZ109LTEsVFtnXT1lLGRbZ109ayxrLmZsaXAoKTtmb3IoYj0wO2I8PW47KytiKXt2YXIgTT13W2JdO2lmKCEoTTwwfHxNPT09cikpe2Zvcih2YXIgUz1uZXcgQXJyYXkobi0xKSxFPTAsTD0wO0w8PW47KytMKXt2YXIgQz13W0xdO0M8MHx8TD09PWJ8fChTW0UrK109Qyl9aC5wdXNoKG5ldyBvKFMsayxiKSl9fX19fX1oLnNvcnQocyk7Zm9yKGc9MDtnKzE8aC5sZW5ndGg7Zys9Mil7dmFyIFA9aFtnXSxJPWhbZysxXSxPPVAuaW5kZXgsej1JLmluZGV4O088MHx8ejwwfHwoUC5jZWxsLmFkamFjZW50W1AuaW5kZXhdPUkuY2VsbCxJLmNlbGwuYWRqYWNlbnRbSS5pbmRleF09UC5jZWxsKX19LHUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcztyLnB1c2godCk7dmFyIG49dGhpcy53YWxrKHQsZSk7aWYobil7Zm9yKHZhciBpPXRoaXMuZGltZW5zaW9uLGE9dGhpcy50dXBsZSxvPTA7bzw9aTsrK28pe3ZhciBzPW4udmVydGljZXNbb107YVtvXT1zPDA/dDpyW3NdfXZhciBsPXRoaXMub3JpZW50KGEpO2w8MHx8KDAhPT1sfHwobj10aGlzLmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeShuLHQpKSkmJnRoaXMuYWRkUGVha3ModCxuKX19LHUuYm91bmRhcnk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5kaW1lbnNpb24sZT1bXSxyPXRoaXMuc2ltcGxpY2VzLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBhPXJbaV07aWYoYS5ib3VuZGFyeSl7Zm9yKHZhciBvPW5ldyBBcnJheSh0KSxzPWEudmVydGljZXMsbD0wLGM9MCx1PTA7dTw9dDsrK3Upc1t1XT49MD9vW2wrK109c1t1XTpjPTEmdTtpZihjPT09KDEmdCkpe3ZhciBmPW9bMF07b1swXT1vWzFdLG9bMV09Zn1lLnB1c2gobyl9fXJldHVybiBlfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjI4NCwic2ltcGxpY2lhbC1jb21wbGV4IjoyOTN9XSwyMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSl7dGhpcy5taWQ9dCx0aGlzLmxlZnQ9ZSx0aGlzLnJpZ2h0PXIsdGhpcy5sZWZ0UG9pbnRzPW4sdGhpcy5yaWdodFBvaW50cz1pLHRoaXMuY291bnQ9KGU/ZS5jb3VudDowKSsocj9yLmNvdW50OjApK24ubGVuZ3RofWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybiBuZXcgdihudWxsKTtyZXR1cm4gbmV3IHYoZyh0KSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlKXt0Lm1pZD1lLm1pZCx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0LmxlZnRQb2ludHM9ZS5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ZS5yaWdodFBvaW50cyx0LmNvdW50PWUuY291bnR9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWcoZSk7dC5taWQ9ci5taWQsdC5sZWZ0PXIubGVmdCx0LnJpZ2h0PXIucmlnaHQsdC5sZWZ0UG9pbnRzPXIubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPXIucmlnaHRQb2ludHMsdC5jb3VudD1yLmNvdW50fWZ1bmN0aW9uIGwodCxlKXt2YXIgcj10LmludGVydmFscyhbXSk7ci5wdXNoKGUpLHModCxyKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pLG49ci5pbmRleE9mKGUpO3JldHVybiBuPDA/MDooci5zcGxpY2UobiwxKSxzKHQsciksMSl9ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmdFtuXVswXTw9ZTsrK24pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmdFtuXVsxXT49ZTstLW4pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj1lKHRbcl0pO2lmKG4pcmV0dXJuIG59fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10WzBdLWVbMF07cmV0dXJuIHJ8fHRbMV0tZVsxXX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9dFsxXS1lWzFdO3JldHVybiByfHx0WzBdLWVbMF19ZnVuY3Rpb24gZyh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2godFtyXVswXSx0W3JdWzFdKTtlLnNvcnQocCk7dmFyIG49ZVtlLmxlbmd0aD4+MV0sYT1bXSxvPVtdLHM9W107Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIGw9dFtyXTtsWzFdPG4/YS5wdXNoKGwpOm48bFswXT9vLnB1c2gobCk6cy5wdXNoKGwpfXZhciBjPXMsdT1zLnNsaWNlKCk7cmV0dXJuIGMuc29ydChkKSx1LnNvcnQobSksbmV3IGkobixnKGEpLGcobyksYyx1KX1mdW5jdGlvbiB2KHQpe3RoaXMucm9vdD10fWEuaW50ZXJ2YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2guYXBwbHkodCx0aGlzLmxlZnRQb2ludHMpLHRoaXMubGVmdCYmdGhpcy5sZWZ0LmludGVydmFscyh0KSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmludGVydmFscyh0KSx0fSxhLmluc2VydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cy5sZW5ndGg7aWYodGhpcy5jb3VudCs9MSx0WzFdPHRoaXMubWlkKXRoaXMubGVmdD80Kih0aGlzLmxlZnQuY291bnQrMSk+MyooZSsxKT9sKHRoaXMsdCk6dGhpcy5sZWZ0Lmluc2VydCh0KTp0aGlzLmxlZnQ9ZyhbdF0pO2Vsc2UgaWYodFswXT50aGlzLm1pZCl0aGlzLnJpZ2h0PzQqKHRoaXMucmlnaHQuY291bnQrMSk+MyooZSsxKT9sKHRoaXMsdCk6dGhpcy5yaWdodC5pbnNlcnQodCk6dGhpcy5yaWdodD1nKFt0XSk7ZWxzZXt2YXIgcj1uLmdlKHRoaXMubGVmdFBvaW50cyx0LGQpLGk9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsbSk7dGhpcy5sZWZ0UG9pbnRzLnNwbGljZShyLDAsdCksdGhpcy5yaWdodFBvaW50cy5zcGxpY2UoaSwwLHQpfX0sYS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHM7aWYodFsxXTx0aGlzLm1pZClyZXR1cm4gdGhpcy5sZWZ0PzQqKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKT4zKihlLTEpP2ModGhpcyx0KToyPT09KHM9dGhpcy5sZWZ0LnJlbW92ZSh0KSk/KHRoaXMubGVmdD1udWxsLHRoaXMuY291bnQtPTEsMSk6KDE9PT1zJiYodGhpcy5jb3VudC09MSkscyk6MDtpZih0WzBdPnRoaXMubWlkKXJldHVybiB0aGlzLnJpZ2h0PzQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyooZS0xKT9jKHRoaXMsdCk6Mj09PShzPXRoaXMucmlnaHQucmVtb3ZlKHQpKT8odGhpcy5yaWdodD1udWxsLHRoaXMuY291bnQtPTEsMSk6KDE9PT1zJiYodGhpcy5jb3VudC09MSkscyk6MDtpZigxPT09dGhpcy5jb3VudClyZXR1cm4gdGhpcy5sZWZ0UG9pbnRzWzBdPT09dD8yOjA7aWYoMT09PXRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1swXT09PXQpe2lmKHRoaXMubGVmdCYmdGhpcy5yaWdodCl7Zm9yKHZhciByPXRoaXMsaT10aGlzLmxlZnQ7aS5yaWdodDspcj1pLGk9aS5yaWdodDtpZihyPT09dGhpcylpLnJpZ2h0PXRoaXMucmlnaHQ7ZWxzZXt2YXIgYT10aGlzLmxlZnQscz10aGlzLnJpZ2h0O3IuY291bnQtPWkuY291bnQsci5yaWdodD1pLmxlZnQsaS5sZWZ0PWEsaS5yaWdodD1zfW8odGhpcyxpKSx0aGlzLmNvdW50PSh0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApKyh0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCkrdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aH1lbHNlIHRoaXMubGVmdD9vKHRoaXMsdGhpcy5sZWZ0KTpvKHRoaXMsdGhpcy5yaWdodCk7cmV0dXJuIDF9Zm9yKGE9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCxkKTthPHRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1thXVswXT09PXRbMF07KythKWlmKHRoaXMubGVmdFBvaW50c1thXT09PXQpe3RoaXMuY291bnQtPTEsdGhpcy5sZWZ0UG9pbnRzLnNwbGljZShhLDEpO2ZvcihzPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LG0pO3M8dGhpcy5yaWdodFBvaW50cy5sZW5ndGgmJnRoaXMucmlnaHRQb2ludHNbc11bMV09PT10WzFdOysrcylpZih0aGlzLnJpZ2h0UG9pbnRzW3NdPT09dClyZXR1cm4gdGhpcy5yaWdodFBvaW50cy5zcGxpY2UocywxKSwxfXJldHVybiAwfSxhLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0PHRoaXMubWlkKXtpZih0aGlzLmxlZnQpaWYocj10aGlzLmxlZnQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiB1KHRoaXMubGVmdFBvaW50cyx0LGUpfWlmKHQ+dGhpcy5taWQpe3ZhciByO2lmKHRoaXMucmlnaHQpaWYocj10aGlzLnJpZ2h0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gZih0aGlzLnJpZ2h0UG9pbnRzLHQsZSl9cmV0dXJuIGgodGhpcy5sZWZ0UG9pbnRzLGUpfSxhLnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHQ8dGhpcy5taWQmJnRoaXMubGVmdCYmKG49dGhpcy5sZWZ0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtpZihlPnRoaXMubWlkJiZ0aGlzLnJpZ2h0JiYobj10aGlzLnJpZ2h0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtyZXR1cm4gZTx0aGlzLm1pZD91KHRoaXMubGVmdFBvaW50cyxlLHIpOnQ+dGhpcy5taWQ/Zih0aGlzLnJpZ2h0UG9pbnRzLHQscik6aCh0aGlzLmxlZnRQb2ludHMscil9O3ZhciB5PXYucHJvdG90eXBlO3kuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMucm9vdD90aGlzLnJvb3QuaW5zZXJ0KHQpOnRoaXMucm9vdD1uZXcgaSh0WzBdLG51bGwsbnVsbCxbdF0sW3RdKX0seS5yZW1vdmU9ZnVuY3Rpb24odCl7aWYodGhpcy5yb290KXt2YXIgZT10aGlzLnJvb3QucmVtb3ZlKHQpO3JldHVybiAyPT09ZSYmKHRoaXMucm9vdD1udWxsKSwwIT09ZX1yZXR1cm4hMX0seS5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlQb2ludCh0LGUpfSx5LnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQ8PWUmJnRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiY291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5jb3VudDowfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJpbnRlcnZhbHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5pbnRlcnZhbHMoW10pOltdfX0pfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMX1dLDIzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPXI7cmV0dXJuIGV9fSx7fV0sMjM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPSEwfSx7fV0sMjM3OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4hIXQuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHQpfQovKiEKICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlcgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPgogKiBAbGljZW5zZSAgTUlUCiAqLwplLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJihuKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc2xpY2UmJm4odC5zbGljZSgwLDApKX0odCl8fCEhdC5faXNCdWZmZXIpfX0se31dLDIzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YSxlLmV4cG9ydHMuZGVmYXVsdD1hO3ZhciBuPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm8vaSxpPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaTtmdW5jdGlvbiBhKHQpe3R8fCh0PXt9KTt2YXIgZT10LnVhO2lmKGV8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwoZT1uYXZpZ2F0b3IudXNlckFnZW50KSxlJiZlLmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJihlPWUuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIHI9dC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKTtyZXR1cm4hciYmdC50YWJsZXQmJnQuZmVhdHVyZURldGVjdCYmbmF2aWdhdG9yJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MSYmLTEhPT1lLmluZGV4T2YoIk1hY2ludG9zaCIpJiYtMSE9PWUuaW5kZXhPZigiU2FmYXJpIikmJihyPSEwKSxyfX0se31dLDIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYoKChlPXQuY2hhckNvZGVBdChuKSk8OXx8ZT4xMykmJjMyIT09ZSYmMTMzIT09ZSYmMTYwIT09ZSYmNTc2MCE9PWUmJjYxNTghPT1lJiYoZTw4MTkyfHxlPjgyMDUpJiY4MjMyIT09ZSYmODIzMyE9PWUmJjgyMzkhPT1lJiY4Mjg3IT09ZSYmODI4OCE9PWUmJjEyMjg4IT09ZSYmNjUyNzkhPT1lKXJldHVybiExO3JldHVybiEwfX0se31dLDI0MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqKDEtcikrZSpyfX0se31dLDI0MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbm9ybWFsaXplIiksaT10KCJnbC1tYXQ0L2NyZWF0ZSIpLGE9dCgiZ2wtbWF0NC9jbG9uZSIpLG89dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLHM9dCgiZ2wtbWF0NC9pbnZlcnQiKSxsPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksYz17bGVuZ3RoOnQoImdsLXZlYzMvbGVuZ3RoIiksbm9ybWFsaXplOnQoImdsLXZlYzMvbm9ybWFsaXplIiksZG90OnQoImdsLXZlYzMvZG90IiksY3Jvc3M6dCgiZ2wtdmVjMy9jcm9zcyIpfSx1PWkoKSxmPWkoKSxoPVswLDAsMCwwXSxwPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sZD1bMCwwLDBdO2Z1bmN0aW9uIG0odCxlLHIsbixpKXt0WzBdPWVbMF0qbityWzBdKmksdFsxXT1lWzFdKm4rclsxXSppLHRbMl09ZVsyXSpuK3JbMl0qaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxnLHYpe2lmKGV8fChlPVswLDAsMF0pLHJ8fChyPVswLDAsMF0pLGl8fChpPVswLDAsMF0pLGd8fChnPVswLDAsMCwxXSksdnx8KHY9WzAsMCwwLDFdKSwhbih1LHQpKXJldHVybiExO2lmKGEoZix1KSxmWzNdPTAsZls3XT0wLGZbMTFdPTAsZlsxNV09MSxNYXRoLmFicyhvKGYpPDFlLTgpKXJldHVybiExO3ZhciB5LHgsYixfLHcsVCxrLEE9dVszXSxNPXVbN10sUz11WzExXSxFPXVbMTJdLEw9dVsxM10sQz11WzE0XSxQPXVbMTVdO2lmKDAhPT1BfHwwIT09TXx8MCE9PVMpe2lmKGhbMF09QSxoWzFdPU0saFsyXT1TLGhbM109UCwhcyhmLGYpKXJldHVybiExO2woZixmKSx5PWcsYj1mLF89KHg9aClbMF0sdz14WzFdLFQ9eFsyXSxrPXhbM10seVswXT1iWzBdKl8rYls0XSp3K2JbOF0qVCtiWzEyXSprLHlbMV09YlsxXSpfK2JbNV0qdytiWzldKlQrYlsxM10qayx5WzJdPWJbMl0qXytiWzZdKncrYlsxMF0qVCtiWzE0XSprLHlbM109YlszXSpfK2JbN10qdytiWzExXSpUK2JbMTVdKmt9ZWxzZSBnWzBdPWdbMV09Z1syXT0wLGdbM109MTtpZihlWzBdPUUsZVsxXT1MLGVbMl09QyxmdW5jdGlvbih0LGUpe3RbMF1bMF09ZVswXSx0WzBdWzFdPWVbMV0sdFswXVsyXT1lWzJdLHRbMV1bMF09ZVs0XSx0WzFdWzFdPWVbNV0sdFsxXVsyXT1lWzZdLHRbMl1bMF09ZVs4XSx0WzJdWzFdPWVbOV0sdFsyXVsyXT1lWzEwXX0ocCx1KSxyWzBdPWMubGVuZ3RoKHBbMF0pLGMubm9ybWFsaXplKHBbMF0scFswXSksaVswXT1jLmRvdChwWzBdLHBbMV0pLG0ocFsxXSxwWzFdLHBbMF0sMSwtaVswXSksclsxXT1jLmxlbmd0aChwWzFdKSxjLm5vcm1hbGl6ZShwWzFdLHBbMV0pLGlbMF0vPXJbMV0saVsxXT1jLmRvdChwWzBdLHBbMl0pLG0ocFsyXSxwWzJdLHBbMF0sMSwtaVsxXSksaVsyXT1jLmRvdChwWzFdLHBbMl0pLG0ocFsyXSxwWzJdLHBbMV0sMSwtaVsyXSksclsyXT1jLmxlbmd0aChwWzJdKSxjLm5vcm1hbGl6ZShwWzJdLHBbMl0pLGlbMV0vPXJbMl0saVsyXS89clsyXSxjLmNyb3NzKGQscFsxXSxwWzJdKSxjLmRvdChwWzBdLGQpPDApZm9yKHZhciBJPTA7STwzO0krKylyW0ldKj0tMSxwW0ldWzBdKj0tMSxwW0ldWzFdKj0tMSxwW0ldWzJdKj0tMTtyZXR1cm4gdlswXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStwWzBdWzBdLXBbMV1bMV0tcFsyXVsyXSwwKSksdlsxXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1wWzBdWzBdK3BbMV1bMV0tcFsyXVsyXSwwKSksdlsyXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS1wWzBdWzBdLXBbMV1bMV0rcFsyXVsyXSwwKSksdlszXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMStwWzBdWzBdK3BbMV1bMV0rcFsyXVsyXSwwKSkscFsyXVsxXT5wWzFdWzJdJiYodlswXT0tdlswXSkscFswXVsyXT5wWzJdWzBdJiYodlsxXT0tdlsxXSkscFsxXVswXT5wWzBdWzFdJiYodlsyXT0tdlsyXSksITB9fSx7Ii4vbm9ybWFsaXplIjoyNDIsImdsLW1hdDQvY2xvbmUiOjkyLCJnbC1tYXQ0L2NyZWF0ZSI6OTMsImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjk0LCJnbC1tYXQ0L2ludmVydCI6OTgsImdsLW1hdDQvdHJhbnNwb3NlIjoxMDksImdsLXZlYzMvY3Jvc3MiOjE1NywiZ2wtdmVjMy9kb3QiOjE2MiwiZ2wtdmVjMy9sZW5ndGgiOjE3MiwiZ2wtdmVjMy9ub3JtYWxpemUiOjE3OX1dLDI0MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDI0MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXZlYzMvbGVycCIpLGk9dCgibWF0NC1yZWNvbXBvc2UiKSxhPXQoIm1hdDQtZGVjb21wb3NlIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJxdWF0LXNsZXJwIiksbD1mKCksYz1mKCksdT1mKCk7ZnVuY3Rpb24gZigpe3JldHVybnt0cmFuc2xhdGU6aCgpLHNjYWxlOmgoMSksc2tldzpoKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBoKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgaD1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFofHwhcCkmJihuKHUudHJhbnNsYXRlLGwudHJhbnNsYXRlLGMudHJhbnNsYXRlLGYpLG4odS5za2V3LGwuc2tldyxjLnNrZXcsZiksbih1LnNjYWxlLGwuc2NhbGUsYy5zY2FsZSxmKSxuKHUucGVyc3BlY3RpdmUsbC5wZXJzcGVjdGl2ZSxjLnBlcnNwZWN0aXZlLGYpLHModS5xdWF0ZXJuaW9uLGwucXVhdGVybmlvbixjLnF1YXRlcm5pb24sZiksaSh0LHUudHJhbnNsYXRlLHUuc2NhbGUsdS5za2V3LHUucGVyc3BlY3RpdmUsdS5xdWF0ZXJuaW9uKSwhMCl9fSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjk0LCJnbC12ZWMzL2xlcnAiOjE3MywibWF0NC1kZWNvbXBvc2UiOjI0MSwibWF0NC1yZWNvbXBvc2UiOjI0NCwicXVhdC1zbGVycCI6MjcxfV0sMjQ0OltmdW5jdGlvbih0LGUscil7dmFyIG49e2lkZW50aXR5OnQoImdsLW1hdDQvaWRlbnRpdHkiKSx0cmFuc2xhdGU6dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxtdWx0aXBseTp0KCJnbC1tYXQ0L211bHRpcGx5IiksY3JlYXRlOnQoImdsLW1hdDQvY3JlYXRlIiksc2NhbGU6dCgiZ2wtbWF0NC9zY2FsZSIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iKX0saT0obi5jcmVhdGUoKSxuLmNyZWF0ZSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3JldHVybiBuLmlkZW50aXR5KHQpLG4uZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odCxzLGUpLHRbM109b1swXSx0WzddPW9bMV0sdFsxMV09b1syXSx0WzE1XT1vWzNdLG4uaWRlbnRpdHkoaSksMCE9PWFbMl0mJihpWzldPWFbMl0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzFdJiYoaVs5XT0wLGlbOF09YVsxXSxuLm11bHRpcGx5KHQsdCxpKSksMCE9PWFbMF0mJihpWzhdPTAsaVs0XT1hWzBdLG4ubXVsdGlwbHkodCx0LGkpKSxuLnNjYWxlKHQsdCxyKSx0fX0seyJnbC1tYXQ0L2NyZWF0ZSI6OTMsImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iOjk2LCJnbC1tYXQ0L2lkZW50aXR5Ijo5NywiZ2wtbWF0NC9tdWx0aXBseSI6MTAwLCJnbC1tYXQ0L3NjYWxlIjoxMDcsImdsLW1hdDQvdHJhbnNsYXRlIjoxMDh9XSwyNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoIm1hdDQtaW50ZXJwb2xhdGUiKSxhPXQoImdsLW1hdDQvaW52ZXJ0Iiksbz10KCJnbC1tYXQ0L3JvdGF0ZVgiKSxzPXQoImdsLW1hdDQvcm90YXRlWSIpLGw9dCgiZ2wtbWF0NC9yb3RhdGVaIiksYz10KCJnbC1tYXQ0L2xvb2tBdCIpLHU9dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxmPSh0KCJnbC1tYXQ0L3NjYWxlIiksdCgiZ2wtdmVjMy9ub3JtYWxpemUiKSksaD1bMCwwLDBdO2Z1bmN0aW9uIHAodCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLTEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAoKHQ9dHx8e30pLm1hdHJpeHx8WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKX07dmFyIGQ9cC5wcm90b3R5cGU7ZC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPW4ubGUoZSx0KSxvPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoIShyPDApKXt2YXIgcz10aGlzLl9jb21wb25lbnRzO2lmKHI9PT1lLmxlbmd0aC0xKWZvcih2YXIgbD0xNipyLGM9MDtjPDE2OysrYylvW2NdPXNbbCsrXTtlbHNle3ZhciB1PWVbcisxXS1lW3JdLGg9KGw9MTYqcix0aGlzLnByZXZNYXRyaXgpLHA9ITA7Zm9yKGM9MDtjPDE2OysrYyloW2NdPXNbbCsrXTt2YXIgZD10aGlzLm5leHRNYXRyaXg7Zm9yKGM9MDtjPDE2OysrYylkW2NdPXNbbCsrXSxwPXAmJmhbY109PT1kW2NdO2lmKHU8MWUtNnx8cClmb3IoYz0wO2M8MTY7KytjKW9bY109aFtjXTtlbHNlIGkobyxoLGQsKHQtZVtyXSkvdSl9dmFyIG09dGhpcy5jb21wdXRlZFVwO21bMF09b1sxXSxtWzFdPW9bNV0sbVsyXT1vWzldLGYobSxtKTt2YXIgZz10aGlzLmNvbXB1dGVkSW52ZXJzZTthKGcsbyk7dmFyIHY9dGhpcy5jb21wdXRlZEV5ZSx5PWdbMTVdO3ZbMF09Z1sxMl0veSx2WzFdPWdbMTNdL3ksdlsyXT1nWzE0XS95O3ZhciB4PXRoaXMuY29tcHV0ZWRDZW50ZXIsYj1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtmb3IoYz0wO2M8MzsrK2MpeFtjXT12W2NdLW9bMis0KmNdKmJ9fSxkLmlkbGU9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMubGFzdFQoKSkpe2Zvcih2YXIgZT10aGlzLl9jb21wb25lbnRzLHI9ZS5sZW5ndGgtMTYsbj0wO248MTY7KytuKWUucHVzaChlW3IrK10pO3RoaXMuX3RpbWUucHVzaCh0KX19LGQuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9bi5ndCh0aGlzLl90aW1lLHQpLTI7ZTwwfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9jb21wb25lbnRzLnNwbGljZSgwLDE2KmUpKX0sZC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxoLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsYyh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsYT0wO2E8MzsrK2EpaSs9TWF0aC5wb3coclthXS1lW2FdLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LGQucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnMoaSxpLGUpLHImJm8oaSxpLHIpLG4mJmwoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQsYSh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIG09WzAsMCwwXTtkLnBhbj1mdW5jdGlvbih0LGUscixuKXttWzBdPS0oZXx8MCksbVsxXT0tKHJ8fDApLG1bMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTt1KGksaSxtKSx0aGlzLnNldE1hdHJpeCh0LGEoaSxpKSl9LGQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe21bMF09ZXx8MCxtWzFdPXJ8fDAsbVsyXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGksbSksdGhpcy5zZXRNYXRyaXgodCxpKX0sZC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8MTY7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LGQuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LGQuc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sZC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxLCJnbC1tYXQ0L2ludmVydCI6OTgsImdsLW1hdDQvbG9va0F0Ijo5OSwiZ2wtbWF0NC9yb3RhdGVYIjoxMDQsImdsLW1hdDQvcm90YXRlWSI6MTA1LCJnbC1tYXQ0L3JvdGF0ZVoiOjEwNiwiZ2wtbWF0NC9zY2FsZSI6MTA3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MTA4LCJnbC12ZWMzL25vcm1hbGl6ZSI6MTc5LCJtYXQ0LWludGVycG9sYXRlIjoyNDN9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlyW2ldPWk7cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9dmFyIGE9bmV3IEFycmF5KGUpO2ZvcihpPTA7aTxlOysraSlhW2ldPWk7YS5zb3J0KChmdW5jdGlvbihlLHIpe3ZhciBuPXRbZV1bMF0tdFtyXVswXTtyZXR1cm4gbnx8dFtlXVsxXS10W3JdWzFdfSkpO3ZhciBvPVthWzBdLGFbMV1dLHM9W2FbMF0sYVsxXV07Zm9yKGk9MjtpPGU7KytpKXtmb3IodmFyIGw9YVtpXSxjPXRbbF0sdT1vLmxlbmd0aDt1PjEmJm4odFtvW3UtMl1dLHRbb1t1LTFdXSxjKTw9MDspdS09MSxvLnBvcCgpO2ZvcihvLnB1c2gobCksdT1zLmxlbmd0aDt1PjEmJm4odFtzW3UtMl1dLHRbc1t1LTFdXSxjKT49MDspdS09MSxzLnBvcCgpO3MucHVzaChsKX1yPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKTtmb3IodmFyIGY9MCxoPShpPTAsby5sZW5ndGgpO2k8aDsrK2kpcltmKytdPW9baV07Zm9yKHZhciBwPXMubGVuZ3RoLTI7cD4wOy0tcClyW2YrK109c1twXTtyZXR1cm4gcn07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM119LHsicm9idXN0LW9yaWVudGF0aW9uIjoyODR9XSwyNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9dCx0PXdpbmRvdyk7dmFyIHI9MCxpPTAsYT0wLG89e3NoaWZ0OiExLGFsdDohMSxjb250cm9sOiExLG1ldGE6ITF9LHM9ITE7ZnVuY3Rpb24gbCh0KXt2YXIgZT0hMTtyZXR1cm4iYWx0S2V5ImluIHQmJihlPWV8fHQuYWx0S2V5IT09by5hbHQsby5hbHQ9ISF0LmFsdEtleSksInNoaWZ0S2V5ImluIHQmJihlPWV8fHQuc2hpZnRLZXkhPT1vLnNoaWZ0LG8uc2hpZnQ9ISF0LnNoaWZ0S2V5KSwiY3RybEtleSJpbiB0JiYoZT1lfHx0LmN0cmxLZXkhPT1vLmNvbnRyb2wsby5jb250cm9sPSEhdC5jdHJsS2V5KSwibWV0YUtleSJpbiB0JiYoZT1lfHx0Lm1ldGFLZXkhPT1vLm1ldGEsby5tZXRhPSEhdC5tZXRhS2V5KSxlfWZ1bmN0aW9uIGModCxzKXt2YXIgYz1uLngocyksdT1uLnkocyk7ImJ1dHRvbnMiaW4gcyYmKHQ9MHxzLmJ1dHRvbnMpLCh0IT09cnx8YyE9PWl8fHUhPT1hfHxsKHMpKSYmKHI9MHx0LGk9Y3x8MCxhPXV8fDAsZSYmZShyLGksYSxvKSl9ZnVuY3Rpb24gdSh0KXtjKDAsdCl9ZnVuY3Rpb24gZigpeyhyfHxpfHxhfHxvLnNoaWZ0fHxvLmFsdHx8by5tZXRhfHxvLmNvbnRyb2wpJiYoaT1hPTAscj0wLG8uc2hpZnQ9by5hbHQ9by5jb250cm9sPW8ubWV0YT0hMSxlJiZlKDAsMCwwLG8pKX1mdW5jdGlvbiBoKHQpe2wodCkmJmUmJmUocixpLGEsbyl9ZnVuY3Rpb24gcCh0KXswPT09bi5idXR0b25zKHQpP2MoMCx0KTpjKHIsdCl9ZnVuY3Rpb24gZCh0KXtjKHJ8bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIG0odCl7YyhyJn5uLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gZygpe3N8fChzPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixtKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSx0IT09d2luZG93JiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCkpKX1nKCk7dmFyIHY9e2VsZW1lbnQ6dH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHYse2VuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7ZT9nKCk6ZnVuY3Rpb24oKXtpZighcylyZXR1cm47cz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpKX0oKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGVudW1lcmFibGU6ITB9fSksdn07dmFyIG49dCgibW91c2UtZXZlbnQiKX0seyJtb3VzZS1ldmVudCI6MjQ5fV0sMjQ4OltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSwyNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudHx8d2luZG93fXIuYnV0dG9ucz1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJidXR0b25zImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZigid2hpY2giaW4gdCl7aWYoMj09PShlPXQud2hpY2gpKXJldHVybiA0O2lmKDM9PT1lKXJldHVybiAyO2lmKGU+MClyZXR1cm4gMTw8ZS0xfWVsc2UgaWYoImJ1dHRvbiJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WCJpbiB0KXJldHVybiB0Lm9mZnNldFg7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRYLWUubGVmdH1yZXR1cm4gMH0sci55PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFkiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSwyNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidG8tcHgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKCJleCIsdCksYT1mdW5jdGlvbih0KXtyJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dC5kZWx0YVh8fDAsYT10LmRlbHRhWXx8MCxvPXQuZGVsdGFafHwwLHM9MTtzd2l0Y2godC5kZWx0YU1vZGUpe2Nhc2UgMTpzPWk7YnJlYWs7Y2FzZSAyOnM9d2luZG93LmlubmVySGVpZ2h0fWlmKGEqPXMsbyo9cywobio9cyl8fGF8fG8pcmV0dXJuIGUobixhLG8sdCl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhKSxhfX0seyJ0by1weCI6MzA0fV0sMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3Rocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6ICIrdCl9Im9iamVjdCIhPXR5cGVvZiB0JiZlKCJNdXN0IHNwZWNpZnkgYXJndW1lbnRzIik7dmFyIHI9dC5vcmRlcjtBcnJheS5pc0FycmF5KHIpfHxlKCJNdXN0IHNwZWNpZnkgb3JkZXIiKTt2YXIgYT10LmFycmF5QXJndW1lbnRzfHwxO2E8MSYmZSgiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnJheSBhcmd1bWVudCIpO3ZhciBvPXQuc2NhbGFyQXJndW1lbnRzfHwwO288MCYmZSgiU2NhbGFyIGFyZyBjb3VudCBtdXN0IGJlID4gMCIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnZlcnRleCYmZSgiTXVzdCBzcGVjaWZ5IHZlcnRleCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LmNlbGwmJmUoIk11c3Qgc3BlY2lmeSBjZWxsIGNyZWF0aW9uIGZ1bmN0aW9uIik7ImZ1bmN0aW9uIiE9dHlwZW9mIHQucGhhc2UmJmUoIk11c3Qgc3BlY2lmeSBwaGFzZSBmdW5jdGlvbiIpO2Zvcih2YXIgcz10LmdldHRlcnN8fFtdLGw9bmV3IEFycmF5KGEpLGM9MDtjPGE7KytjKXMuaW5kZXhPZihjKT49MD9sW2NdPSEwOmxbY109ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1bcyxvXS5qb2luKCIsIik7cmV0dXJuKDAsaVtsXSkodCxlLHIsbi5tYWxsb2NVaW50MzIsbi5mcmVlVWludDMyKX0odC52ZXJ0ZXgsdC5jZWxsLHQucGhhc2UsMCxyLGwpfTt2YXIgaT17ImZhbHNlLDAsMSI6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSxvLHMsbCl7dmFyIGMsdT0wfGEuc2hhcGVbMF0sZj0wfGEuc2hhcGVbMV0saD1hLmRhdGEscD0wfGEub2Zmc2V0LGQ9MHxhLnN0cmlkZVswXSxtPTB8YS5zdHJpZGVbMV0sZz1wLHY9MHwtZCx5PTAseD0wfC1tLGI9MCxfPS1kLW18MCx3PTAsVD0wfGQsaz1tLWQqdXwwLEE9MCxNPTAsUz0wLEU9Mip1fDAsTD1uKEUpLEM9bihFKSxQPTAsST0wLE89LTEsej0tMSxEPTAsUj0wfC11LEY9MHx1LEI9MCxOPS11LTF8MCxqPXUtMXwwLFU9MCxWPTAsSD0wO2ZvcihBPTA7QTx1OysrQSlMW1ArK109cihoW2ddLG8scyxsKSxnKz1UO2lmKGcrPWssZj4wKXtpZihNPTEsTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VCx1PjApZm9yKEE9MSxjPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksRD1MW1ArT10sQj1MW1ArUl0sVT1MW1ArTl0sST09PUQmJkk9PT1CJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxELEIsVSxvLHMsbCksVj1DW1BdPVMrKyksUCs9MSxnKz1ULEE9MjtBPHU7KytBKWM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxEPUxbUCtPXSxCPUxbUCtSXSxVPUxbUCtOXSxJPT09RCYmST09PUImJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEQsQixVLG8scyxsKSxWPUNbUF09UysrLFUhPT1EJiZlKENbUCtPXSxWLHcseSxVLEQsbyxzLGwpKSxQKz0xLGcrPVQ7Zm9yKGcrPWssUD0wLEg9TyxPPXosej1ILEg9UixSPUYsRj1ILEg9TixOPWosaj1ILE09MjtNPGY7KytNKXtpZihMW1ArK109cihoW2ddLG8scyxsKSxnKz1ULHU+MClmb3IoQT0xLGM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxEPUxbUCtPXSxCPUxbUCtSXSxVPUxbUCtOXSxJPT09RCYmST09PUImJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEQsQixVLG8scyxsKSxWPUNbUF09UysrLFUhPT1CJiZlKENbUCtSXSxWLGIsdyxCLFUsbyxzLGwpKSxQKz0xLGcrPVQsQT0yO0E8dTsrK0EpYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEQ9TFtQK09dLEI9TFtQK1JdLFU9TFtQK05dLEk9PT1EJiZJPT09QiYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksRCxCLFUsbyxzLGwpLFY9Q1tQXT1TKyssVSE9PUImJmUoQ1tQK1JdLFYsYix3LEIsVSxvLHMsbCksVSE9PUQmJmUoQ1tQK09dLFYsdyx5LFUsRCxvLHMsbCkpLFArPTEsZys9VDsxJk0mJihQPTApLEg9TyxPPXosej1ILEg9UixSPUYsRj1ILEg9TixOPWosaj1ILGcrPWt9fWkoQyksaShMKX19LCJmYWxzZSwxLDAiOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEsbyxzLGwpe3ZhciBjLHU9MHxhLnNoYXBlWzBdLGY9MHxhLnNoYXBlWzFdLGg9YS5kYXRhLHA9MHxhLm9mZnNldCxkPTB8YS5zdHJpZGVbMF0sbT0wfGEuc3RyaWRlWzFdLGc9cCx2PTB8LWQseT0wLHg9MHwtbSxiPTAsXz0tZC1tfDAsdz0wLFQ9MHxtLGs9ZC1tKmZ8MCxBPTAsTT0wLFM9MCxFPTIqZnwwLEw9bihFKSxDPW4oRSksUD0wLEk9MCxPPS0xLHo9LTEsRD0wLFI9MHwtZixGPTB8ZixCPTAsTj0tZi0xfDAsaj1mLTF8MCxVPTAsVj0wLEg9MDtmb3IoTT0wO008ZjsrK00pTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VDtpZihnKz1rLHU+MCl7aWYoQT0xLExbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQsZj4wKWZvcihNPTEsYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEI9TFtQK1JdLEQ9TFtQK09dLFU9TFtQK05dLEk9PT1CJiZJPT09RCYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksQixELFUsbyxzLGwpLFY9Q1tQXT1TKyspLFArPTEsZys9VCxNPTI7TTxmOysrTSljPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksQj1MW1ArUl0sRD1MW1ArT10sVT1MW1ArTl0sST09PUImJkk9PT1EJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxCLEQsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09RCYmZShDW1ArT10sVixiLHcsRCxVLG8scyxsKSksUCs9MSxnKz1UO2ZvcihnKz1rLFA9MCxIPVIsUj1GLEY9SCxIPU8sTz16LHo9SCxIPU4sTj1qLGo9SCxBPTI7QTx1OysrQSl7aWYoTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VCxmPjApZm9yKE09MSxjPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksQj1MW1ArUl0sRD1MW1ArT10sVT1MW1ArTl0sST09PUImJkk9PT1EJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxCLEQsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09QiYmZShDW1ArUl0sVix3LHksVSxCLG8scyxsKSksUCs9MSxnKz1ULE09MjtNPGY7KytNKWM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxCPUxbUCtSXSxEPUxbUCtPXSxVPUxbUCtOXSxJPT09QiYmST09PUQmJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEIsRCxVLG8scyxsKSxWPUNbUF09UysrLFUhPT1EJiZlKENbUCtPXSxWLGIsdyxELFUsbyxzLGwpLFUhPT1CJiZlKENbUCtSXSxWLHcseSxVLEIsbyxzLGwpKSxQKz0xLGcrPVQ7MSZBJiYoUD0wKSxIPVIsUj1GLEY9SCxIPU8sTz16LHo9SCxIPU4sTj1qLGo9SCxnKz1rfX1pKEMpLGkoTCl9fX19LHsidHlwZWRhcnJheS1wb29sIjozMDh9XSwyNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZHVwIiksaT17emVybzpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10WzBdO258PTA7dmFyIGE9MCxvPXJbMF07Zm9yKGE9MDthPGk7KythKWVbbl09MCxuKz1vfSxmZFRlbXBsYXRlMTpmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10WzBdLGw9clswXSxjPS0xKmwsdT1sO258PTAsb3w9MDt2YXIgZj0wLGg9bCxwPWFbMF07Zm9yKGY9MDtmPHM7KytmKWlbb109LjUqKGVbbitjXS1lW24rdV0pLG4rPWgsbys9cH0sZmRUZW1wbGF0ZTI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9dFswXSxmPXRbMV0saD1yWzBdLHA9clsxXSxkPWFbMF0sbT1hWzFdLGc9bFswXSx2PWxbMV0seT0tMSpoLHg9aCxiPS0xKnAsXz1wO258PTAsb3w9MCxjfD0wO3ZhciB3PTAsVD0wLGs9cCxBPWgtZipwLE09bSxTPWQtZiptLEU9dixMPWctZip2O2ZvcihUPTA7VDx1OysrVCl7Zm9yKHc9MDt3PGY7Kyt3KWlbb109LjUqKGVbbit5XS1lW24reF0pLHNbY109LjUqKGVbbitiXS1lW24rX10pLG4rPWssbys9TSxjKz1FO24rPUEsbys9UyxjKz1MfX19LGE9e2NkaWZmOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fSx6ZXJvOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yLmR0eXBlLGk9ci5vcmRlcixhPVtuLGkuam9pbigpXS5qb2luKCksbz1lW2FdO3JldHVybiBvfHwoZVthXT1vPXQoW24saV0pKSxvKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQpfX0sZmRUZW1wbGF0ZTE6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5kdHlwZSxhPXIub3JkZXIsbz1uLmR0eXBlLHM9bi5vcmRlcixsPVtpLGEuam9pbigpLG8scy5qb2luKCldLmpvaW4oKSxjPWVbbF07cmV0dXJuIGN8fChlW2xdPWM9dChbaSxhLG8sc10pKSxjKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQpfX0sZmRUZW1wbGF0ZTI6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1yLmR0eXBlLG89ci5vcmRlcixzPW4uZHR5cGUsbD1uLm9yZGVyLGM9aS5kdHlwZSx1PWkub3JkZXIsZj1bYSxvLmpvaW4oKSxzLGwuam9pbigpLGMsdS5qb2luKCldLmpvaW4oKSxoPWVbZl07cmV0dXJuIGh8fChlW2ZdPWg9dChbYSxvLHMsbCxjLHVdKSksaChyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0LGkuZGF0YSxpLnN0cmlkZSwwfGkub2Zmc2V0KX19fTtmdW5jdGlvbiBvKHQpe3JldHVybigwLGFbdC5mdW5jTmFtZV0pKHMuYmluZCh2b2lkIDAsdCkpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGlbdC5mdW5jTmFtZV19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbyh7ZnVuY05hbWU6dC5mdW5jTmFtZX0pfXZhciBjPXt9LHU9e30sZj1sKHtmdW5jTmFtZToiY2RpZmYifSksaD1sKHtmdW5jTmFtZToiemVybyJ9KTtmdW5jdGlvbiBwKHQpe3JldHVybiB0IGluIGM/Y1t0XTpjW3RdPWwoe2Z1bmNOYW1lOiJmZFRlbXBsYXRlIit0fSl9ZnVuY3Rpb24gZCh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgYT1pLnNoYXBlLnNsaWNlKCk7cmV0dXJuIGFbMF0+MiYmYVsxXT4yJiZuKGkucGljaygtMSwtMSkubG8oMSwxKS5oaShhWzBdLTIsYVsxXS0yKSx0LnBpY2soLTEsLTEsMCkubG8oMSwxKS5oaShhWzBdLTIsYVsxXS0yKSx0LnBpY2soLTEsLTEsMSkubG8oMSwxKS5oaShhWzBdLTIsYVsxXS0yKSksYVsxXT4yJiYocihpLnBpY2soMCwtMSkubG8oMSkuaGkoYVsxXS0yKSx0LnBpY2soMCwtMSwxKS5sbygxKS5oaShhWzFdLTIpKSxlKHQucGljaygwLC0xLDApLmxvKDEpLmhpKGFbMV0tMikpKSxhWzFdPjImJihyKGkucGljayhhWzBdLTEsLTEpLmxvKDEpLmhpKGFbMV0tMiksdC5waWNrKGFbMF0tMSwtMSwxKS5sbygxKS5oaShhWzFdLTIpKSxlKHQucGljayhhWzBdLTEsLTEsMCkubG8oMSkuaGkoYVsxXS0yKSkpLGFbMF0+MiYmKHIoaS5waWNrKC0xLDApLmxvKDEpLmhpKGFbMF0tMiksdC5waWNrKC0xLDAsMCkubG8oMSkuaGkoYVswXS0yKSksZSh0LnBpY2soLTEsMCwxKS5sbygxKS5oaShhWzBdLTIpKSksYVswXT4yJiYocihpLnBpY2soLTEsYVsxXS0xKS5sbygxKS5oaShhWzBdLTIpLHQucGljaygtMSxhWzFdLTEsMCkubG8oMSkuaGkoYVswXS0yKSksZSh0LnBpY2soLTEsYVsxXS0xLDEpLmxvKDEpLmhpKGFbMF0tMikpKSx0LnNldCgwLDAsMCwwKSx0LnNldCgwLDAsMSwwKSx0LnNldChhWzBdLTEsMCwwLDApLHQuc2V0KGFbMF0tMSwwLDEsMCksdC5zZXQoMCxhWzFdLTEsMCwwKSx0LnNldCgwLGFbMV0tMSwxLDApLHQuc2V0KGFbMF0tMSxhWzFdLTEsMCwwKSx0LnNldChhWzBdLTEsYVsxXS0xLDEsMCksdH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKXx8KHI9bihlLmRpbWVuc2lvbiwic3RyaW5nIj09dHlwZW9mIHI/cjoiY2xhbXAiKSksMD09PWUuc2l6ZT90OjA9PT1lLmRpbWVuc2lvbj8odC5zZXQoMCksdCk6ZnVuY3Rpb24odCl7dmFyIGU9dC5qb2luKCk7aWYoYT11W2VdKXJldHVybiBhO2Zvcih2YXIgcj10Lmxlbmd0aCxuPVtmLGhdLGk9MTtpPD1yOysraSluLnB1c2gocChpKSk7dmFyIGE9ZC5hcHBseSh2b2lkIDAsbik7cmV0dXJuIHVbZV09YSxhfShyKSh0LGUpfX0se2R1cDo2NX1dLDI1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9TWF0aC5mbG9vcihlKSxuPWUtcixpPTA8PXImJnI8dC5zaGFwZVswXSxhPTA8PXIrMSYmcisxPHQuc2hhcGVbMF07cmV0dXJuKDEtbikqKGk/K3QuZ2V0KHIpOjApK24qKGE/K3QuZ2V0KHIrMSk6MCl9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49TWF0aC5mbG9vcihlKSxpPWUtbixhPTA8PW4mJm48dC5zaGFwZVswXSxvPTA8PW4rMSYmbisxPHQuc2hhcGVbMF0scz1NYXRoLmZsb29yKHIpLGw9ci1zLGM9MDw9cyYmczx0LnNoYXBlWzFdLHU9MDw9cysxJiZzKzE8dC5zaGFwZVsxXSxmPWEmJmM/dC5nZXQobixzKTowLGg9YSYmdT90LmdldChuLHMrMSk6MDtyZXR1cm4oMS1sKSooKDEtaSkqZitpKihvJiZjP3QuZ2V0KG4rMSxzKTowKSkrbCooKDEtaSkqaCtpKihvJiZ1P3QuZ2V0KG4rMSxzKzEpOjApKX1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpPU1hdGguZmxvb3IoZSksYT1lLWksbz0wPD1pJiZpPHQuc2hhcGVbMF0scz0wPD1pKzEmJmkrMTx0LnNoYXBlWzBdLGw9TWF0aC5mbG9vcihyKSxjPXItbCx1PTA8PWwmJmw8dC5zaGFwZVsxXSxmPTA8PWwrMSYmbCsxPHQuc2hhcGVbMV0saD1NYXRoLmZsb29yKG4pLHA9bi1oLGQ9MDw9aCYmaDx0LnNoYXBlWzJdLG09MDw9aCsxJiZoKzE8dC5zaGFwZVsyXSxnPW8mJnUmJmQ/dC5nZXQoaSxsLGgpOjAsdj1vJiZmJiZkP3QuZ2V0KGksbCsxLGgpOjAseT1zJiZ1JiZkP3QuZ2V0KGkrMSxsLGgpOjAseD1zJiZmJiZkP3QuZ2V0KGkrMSxsKzEsaCk6MCxiPW8mJnUmJm0/dC5nZXQoaSxsLGgrMSk6MCxfPW8mJmYmJm0/dC5nZXQoaSxsKzEsaCsxKTowO3JldHVybigxLXApKigoMS1jKSooKDEtYSkqZythKnkpK2MqKCgxLWEpKnYrYSp4KSkrcCooKDEtYykqKCgxLWEpKmIrYSoocyYmdSYmbT90LmdldChpKzEsbCxoKzEpOjApKStjKigoMS1hKSpfK2EqKHMmJmYmJm0/dC5nZXQoaSsxLGwrMSxoKzEpOjApKSl9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyLG49MHx0LnNoYXBlLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2Upcj0rYXJndW1lbnRzW2UrMV0saVtlXT1NYXRoLmZsb29yKHIpLGFbZV09ci1pW2VdLG9bZV09MDw9aVtlXSYmaVtlXTx0LnNoYXBlW2VdLHNbZV09MDw9aVtlXSsxJiZpW2VdKzE8dC5zaGFwZVtlXTt2YXIgbCxjLHUsZj0wO3Q6Zm9yKGU9MDtlPDE8PG47KytlKXtmb3IoYz0xLHU9dC5vZmZzZXQsbD0wO2w8bjsrK2wpaWYoZSYxPDxsKXtpZighc1tsXSljb250aW51ZSB0O2MqPWFbbF0sdSs9dC5zdHJpZGVbbF0qKGlbbF0rMSl9ZWxzZXtpZighb1tsXSljb250aW51ZSB0O2MqPTEtYVtsXSx1Kz10LnN0cmlkZVtsXSppW2xdfWYrPWMqdC5kYXRhW3VdfXJldHVybiBmfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtzd2l0Y2godC5zaGFwZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIG4odCxlKTtjYXNlIDI6cmV0dXJuIGkodCxlLHIpO2Nhc2UgMzpyZXR1cm4gYSh0LGUscixzKTtkZWZhdWx0OnJldHVybiBvLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX0sZS5leHBvcnRzLmQxPW4sZS5leHBvcnRzLmQyPWksZS5leHBvcnRzLmQzPWF9LHt9XSwyNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49eyJmbG9hdDY0LDIsMSwwIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxsPXJbMF0sYz1yWzFdLHU9clsyXTtufD0wO3ZhciBmPTAsaD0wLHA9MCxkPXUsbT1jLXMqdSxnPWwtbypjO2ZvcihwPTA7cDxhOysrcCl7Zm9yKGg9MDtoPG87KytoKXtmb3IoZj0wO2Y8czsrK2YpZVtuXS89aSxuKz1kO24rPW19bis9Z319fSwidWludDgsMiwwLDEsZmxvYXQ2NCwyLDEsMCI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9dFswXSxjPXRbMV0sdT10WzJdLGY9clswXSxoPXJbMV0scD1yWzJdLGQ9YVswXSxtPWFbMV0sZz1hWzJdLHY9bnw9MCx5PW98PTAseD0wfHRbMF07eD4wOyl7eDw2ND8obD14LHg9MCk6KGw9NjQseC09NjQpO2Zvcih2YXIgYj0wfHRbMV07Yj4wOyl7Yjw2ND8oYz1iLGI9MCk6KGM9NjQsYi09NjQpLG49dit4KmYrYipoLG89eSt4KmQrYiptO3ZhciBfPTAsdz0wLFQ9MCxrPXAsQT1mLXUqcCxNPWgtbCpmLFM9ZyxFPWQtdSpnLEw9bS1sKmQ7Zm9yKFQ9MDtUPGM7KytUKXtmb3Iodz0wO3c8bDsrK3cpe2ZvcihfPTA7Xzx1OysrXyllW25dPWlbb10qcyxuKz1rLG8rPVM7bis9QSxvKz1FfW4rPU0sbys9TH19fX19LCJmbG9hdDMyLDEsMCxmbG9hdDMyLDEsMCI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dFswXSxsPXRbMV0sYz1yWzBdLHU9clsxXSxmPWFbMF0saD1hWzFdO258PTAsb3w9MDt2YXIgcD0wLGQ9MCxtPXUsZz1jLWwqdSx2PWgseT1mLWwqaDtmb3IoZD0wO2Q8czsrK2Qpe2ZvcihwPTA7cDxsOysrcCllW25dPWlbb10sbis9bSxvKz12O24rPWcsbys9eX19fSwiZmxvYXQzMiwxLDAsZmxvYXQzMiwwLDEiOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10WzBdLGw9dFsxXSxjPXJbMF0sdT1yWzFdLGY9YVswXSxoPWFbMV0scD1ufD0wLGQ9b3w9MCxtPTB8dFsxXTttPjA7KXttPDY0PyhsPW0sbT0wKToobD02NCxtLT02NCk7Zm9yKHZhciBnPTB8dFswXTtnPjA7KXtnPDY0PyhzPWcsZz0wKToocz02NCxnLT02NCksbj1wK20qdStnKmMsbz1kK20qaCtnKmY7dmFyIHY9MCx5PTAseD11LGI9Yy1sKnUsXz1oLHc9Zi1sKmg7Zm9yKHk9MDt5PHM7Kyt5KXtmb3Iodj0wO3Y8bDsrK3YpZVtuXT1pW29dLG4rPXgsbys9XztuKz1iLG8rPXd9fX19fSwidWludDgsMiwwLDEsdWludDgsMSwyLDAiOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz10WzBdLGw9dFsxXSxjPXRbMl0sdT1yWzBdLGY9clsxXSxoPXJbMl0scD1hWzBdLGQ9YVsxXSxtPWFbMl0sZz1ufD0wLHY9b3w9MCx5PTB8dFsyXTt5PjA7KXt5PDY0PyhjPXkseT0wKTooYz02NCx5LT02NCk7Zm9yKHZhciB4PTB8dFswXTt4PjA7KXt4PDY0PyhzPXgseD0wKToocz02NCx4LT02NCk7Zm9yKHZhciBiPTB8dFsxXTtiPjA7KXtiPDY0PyhsPWIsYj0wKToobD02NCxiLT02NCksbj1nK3kqaCt4KnUrYipmLG89dit5Km0reCpwK2IqZDt2YXIgXz0wLHc9MCxUPTAsaz1oLEE9dS1jKmgsTT1mLXMqdSxTPW0sRT1wLWMqbSxMPWQtcypwO2ZvcihUPTA7VDxsOysrVCl7Zm9yKHc9MDt3PHM7Kyt3KXtmb3IoXz0wO188YzsrK18pZVtuXT1pW29dLG4rPWssbys9UztuKz1BLG8rPUV9bis9TSxvKz1MfX19fX19LCJ1aW50OCwyLDAsMSxhcnJheSwyLDAsMSI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dFswXSxsPXRbMV0sYz10WzJdLHU9clswXSxmPXJbMV0saD1yWzJdLHA9YVswXSxkPWFbMV0sbT1hWzJdO258PTAsb3w9MDt2YXIgZz0wLHY9MCx5PTAseD1oLGI9dS1jKmgsXz1mLXMqdSx3PW0sVD1wLWMqbSxrPWQtcypwO2Zvcih5PTA7eTxsOysreSl7Zm9yKHY9MDt2PHM7Kyt2KXtmb3IoZz0wO2c8YzsrK2cpZVtuXT1pW29dLG4rPXgsbys9dztuKz1iLG8rPVR9bis9XyxvKz1rfX19fTt2YXIgaT1mdW5jdGlvbih0LGUpe3ZhciByPWUuam9pbigiLCIpO3JldHVybigwLG5bcl0pKCl9LGE9e211bDpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9bi5kdHlwZSxsPW4ub3JkZXIsYz1pLmR0eXBlLHU9aS5vcmRlcixmPVthLG8uam9pbigpLHMsbC5qb2luKCksYyx1LmpvaW4oKV0uam9pbigpLGg9ZVtmXTtyZXR1cm4gaHx8KGVbZl09aD10KFthLG8scyxsLGMsdV0pKSxoKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaS5kYXRhLGkuc3RyaWRlLDB8aS5vZmZzZXQpfX0sbXVsczpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9bi5kdHlwZSxsPW4ub3JkZXIsYz1bYSxvLmpvaW4oKSxzLGwuam9pbigpXS5qb2luKCksdT1lW2NdO3JldHVybiB1fHwoZVtjXT11PXQoW2EsbyxzLGxdKSksdShyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0LGkpfX0sbXVsc2VxOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89W2ksYS5qb2luKCldLmpvaW4oKSxzPWVbb107cmV0dXJuIHN8fChlW29dPXM9dChbaSxhXSkpLHMoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuKX19LGRpdjpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9bi5kdHlwZSxsPW4ub3JkZXIsYz1pLmR0eXBlLHU9aS5vcmRlcixmPVthLG8uam9pbigpLHMsbC5qb2luKCksYyx1LmpvaW4oKV0uam9pbigpLGg9ZVtmXTtyZXR1cm4gaHx8KGVbZl09aD10KFthLG8scyxsLGMsdV0pKSxoKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaS5kYXRhLGkuc3RyaWRlLDB8aS5vZmZzZXQpfX0sZGl2czpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9bi5kdHlwZSxsPW4ub3JkZXIsYz1bYSxvLmpvaW4oKSxzLGwuam9pbigpXS5qb2luKCksdT1lW2NdO3JldHVybiB1fHwoZVtjXT11PXQoW2EsbyxzLGxdKSksdShyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0LGkpfX0sZGl2c2VxOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89W2ksYS5qb2luKCldLmpvaW4oKSxzPWVbb107cmV0dXJuIHN8fChlW29dPXM9dChbaSxhXSkpLHMoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuKX19LGFzc2lnbjpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT1yLmR0eXBlLGE9ci5vcmRlcixvPW4uZHR5cGUscz1uLm9yZGVyLGw9W2ksYS5qb2luKCksbyxzLmpvaW4oKV0uam9pbigpLGM9ZVtsXTtyZXR1cm4gY3x8KGVbbF09Yz10KFtpLGEsbyxzXSkpLGMoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCl9fX07ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZT17ZnVuY05hbWU6dC5mdW5jTmFtZX0sKDAsYVtlLmZ1bmNOYW1lXSkoaS5iaW5kKHZvaWQgMCxlKSk7dmFyIGV9dmFyIHM9e211bDoiKiIsZGl2OiIvIn07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHMpclt0XT1vKHtmdW5jTmFtZTp0fSksclt0KyJzIl09byh7ZnVuY05hbWU6dCsicyJ9KSxyW3QrInNlcSJdPW8oe2Z1bmNOYW1lOnQrInNlcSJ9KX0oKSxyLmFzc2lnbj1vKHtmdW5jTmFtZToiYXNzaWduIn0pfSx7fV0sMjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoIi4vZG9Db252ZXJ0LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9dCxvPTE7QXJyYXkuaXNBcnJheShhKTspci5wdXNoKGEubGVuZ3RoKSxvKj1hLmxlbmd0aCxhPWFbMF07cmV0dXJuIDA9PT1yLmxlbmd0aD9uKCk6KGV8fChlPW4obmV3IEZsb2F0NjRBcnJheShvKSxyKSksaShlLHQpLGUpfX0seyIuL2RvQ29udmVydC5qcyI6MjU2LG5kYXJyYXk6MjU5fV0sMjU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10WzBdLG89dFsxXSxzPXRbMl0sbD1yWzBdLGM9clsxXSx1PXJbMl0sZj1bMCwwLDBdO258PTA7dmFyIGg9MCxwPTAsZD0wLG09dSxnPWMtcyp1LHY9bC1vKmM7Zm9yKGQ9MDtkPGE7KytkKXtmb3IocD0wO3A8bzsrK3Ape2ZvcihoPTA7aDxzOysraCl7dmFyIHkseD1pO2Zvcih5PTA7eTxmLmxlbmd0aC0xOysreSl4PXhbZlt5XV07ZVtuXT14W2ZbZi5sZW5ndGgtMV1dLG4rPW0sKytmWzJdfW4rPWcsZlsyXS09cywrK2ZbMV19bis9dixmWzFdLT1vLCsrZlswXX19fTtlLmV4cG9ydHM9KG49e2Z1bmNOYW1lOntmdW5jTmFtZToiY29udmVydCJ9LmZ1bmNOYW1lfSxmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT1yLmR0eXBlLGE9ci5vcmRlcixvPVtpLGEuam9pbigpXS5qb2luKCkscz1lW29dO3JldHVybiBzfHwoZVtvXT1zPXQoW2ksYV0pKSxzKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbil9fShpLmJpbmQodm9pZCAwLG4pKSl9LHt9XSwyNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIik7ZnVuY3Rpb24gaSh0KXtzd2l0Y2godCl7Y2FzZSJ1aW50MzIiOnJldHVybltuLm1hbGxvY1VpbnQzMixuLmZyZWVVaW50MzJdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBhPXsidWludDMyLDEsMCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcCxkLG0sZyx2LHkseCxiLF89cipvK2Esdz10KGMpO2ZvcihwPXIrMTtwPD1uOysrcCl7Zm9yKGQ9cCxtPV8rPW8sdj0wLHk9XyxnPTA7ZzxjOysrZyl3W3YrK109aVt5XSx5Kz11O3Q6Zm9yKDtkLS0gPnI7KXt2PTAseT1tLW87ZTpmb3IoZz0wO2c8YzsrK2cpe2lmKCh4PWlbeV0pPChiPXdbdl0pKWJyZWFrIHQ7aWYoeD5iKWJyZWFrIGU7eSs9Zix2Kz1ofWZvcih2PW0seT1tLW8sZz0wO2c8YzsrK2cpaVt2XT1pW3ldLHYrPXUseSs9dTttLT1vfWZvcih2PW0seT0wLGc9MDtnPGM7KytnKWlbdl09d1t5KytdLHYrPXV9ZSh3KX19fTt2YXIgbz17InVpbnQzMiwxLDAiOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24gbihpLGEsbyxzLGwsYyx1LGYsaCxwLGQpe3ZhciBtLGcsdix5LHgsYixfLHcsVCxrLEEsTSxTLEUsTCxDLFAsSSxPLHosRCxSLEYsQixOLGo9KGEtaSsxKS82fDAsVT1pK2osVj1hLWosSD1pK2E+PjEscT1ILWosRz1IK2osWT1VLFc9cSxYPUgsWj1HLEo9VixLPWkrMSxRPWEtMSwkPSEwLHR0PTAsZXQ9MCxydD0wLG50PWYsaXQ9ZShudCksYXQ9ZShudCk7QT1sKlksTT1sKlcsTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1ZLFk9VyxXPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqWixNPWwqSixOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVosWj1KLEo9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpZLE09bCpYLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WSxZPVgsWD1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlcsTT1sKlgsTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1XLFc9WCxYPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqWSxNPWwqWixOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVksWT1aLFo9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpYLE09bCpaLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WCxYPVosWj1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlcsTT1sKkosTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1XLFc9SixKPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqVyxNPWwqWCxOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVcsVz1YLFg9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpaLE09bCpKLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WixaPUosSj1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9Zm9yKEE9bCpZLE09bCpXLFM9bCpYLEU9bCpaLEw9bCpKLEM9bCpVLFA9bCpILEk9bCpWLEI9MCxOPXMsaz0wO2s8ZjsrK2spXz1BK04sdz1NK04sVD1TK04sTz1FK04sej1MK04sRD1DK04sUj1QK04sRj1JK04saXRbQl09b1t3XSxhdFtCXT1vW09dLCQ9JCYmaXRbQl09PT1hdFtCXSx2PW9bX10seT1vW1RdLHg9b1t6XSxvW0RdPXYsb1tSXT15LG9bRl09eCwrK0IsTis9aDtmb3IoQT1sKnEsTT1sKmksTj1zLGs9MDtrPGY7KytrKXc9TStOLG9bXz1BK05dPW9bd10sTis9aDtmb3IoQT1sKkcsTT1sKmEsTj1zLGs9MDtrPGY7KytrKXc9TStOLG9bXz1BK05dPW9bd10sTis9aDtpZigkKWZvcihiPUs7Yjw9UTsrK2Ipe189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0ocnQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZigwIT09cnQpaWYocnQ8MCl7aWYoYiE9PUspZm9yKEE9bCpiLE09bCpLLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDsrK0t9ZWxzZSBmb3IoOzspe189cytRKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0ocnQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZighKHJ0PjApKXtpZihydDwwKXtmb3IoQT1sKmIsTT1sKkssUz1sKlEsTj1zLGs9MDtrPGY7KytrKXc9TStOLFQ9UytOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109b1tUXSxvW1RdPW0sTis9aDsrK0ssLS1RO2JyZWFrfWZvcihBPWwqYixNPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1tLE4rPWg7LS1RO2JyZWFrfVEtLX19ZWxzZSBmb3IoYj1LO2I8PVE7KytiKXtfPXMrYipsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHR0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYodHQ8MCl7aWYoYiE9PUspZm9yKEE9bCpiLE09bCpLLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDsrK0t9ZWxzZXtfPXMrYipsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KGV0PW9bX10tYXRbQl0pOysraylCKz1kLF8rPXA7aWYoZXQ+MClmb3IoOzspe189cytRKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0ocnQ9b1tfXS1hdFtCXSk7KytrKUIrPWQsXys9cDtpZighKHJ0PjApKXtfPXMrUSpsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYocnQ8MCl7Zm9yKEE9bCpiLE09bCpLLFM9bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixUPVMrTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW9bVF0sb1tUXT1tLE4rPWg7KytLLC0tUX1lbHNle2ZvcihBPWwqYixNPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1tLE4rPWg7LS1RfWJyZWFrfWlmKC0tUTxiKWJyZWFrfX19Zm9yKEE9bCppLE09bCooSy0xKSxCPTAsTj1zLGs9MDtrPGY7KytrKXc9TStOLG9bXz1BK05dPW9bd10sb1t3XT1pdFtCXSwrK0IsTis9aDtmb3IoQT1sKmEsTT1sKihRKzEpLEI9MCxOPXMsaz0wO2s8ZjsrK2spdz1NK04sb1tfPUErTl09b1t3XSxvW3ddPWF0W0JdLCsrQixOKz1oO2lmKEstMi1pPD0zMj90KGksSy0yLG8scyxsLGMsdSxmLGgscCxkKTpuKGksSy0yLG8scyxsLGMsdSxmLGgscCxkKSxhLShRKzIpPD0zMj90KFErMixhLG8scyxsLGMsdSxmLGgscCxkKTpuKFErMixhLG8scyxsLGMsdSxmLGgscCxkKSwkKXJldHVybiByKGl0KSx2b2lkIHIoYXQpO2lmKEs8VSYmUT5WKXt0OmZvcig7Oyl7Zm9yKF89cytLKmwsQj0wLE49cyxrPTA7azxmOysrayl7aWYob1tfXSE9PWl0W0JdKWJyZWFrIHQ7KytCLF8rPWh9KytLfXQ6Zm9yKDs7KXtmb3IoXz1zK1EqbCxCPTAsTj1zLGs9MDtrPGY7KytrKXtpZihvW19dIT09YXRbQl0pYnJlYWsgdDsrK0IsXys9aH0tLVF9Zm9yKGI9SztiPD1ROysrYil7Xz1zK2IqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PSh0dD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKDA9PT10dCl7aWYoYiE9PUspZm9yKEE9bCpiLE09bCpLLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDsrK0t9ZWxzZXtfPXMrYipsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KGV0PW9bX10tYXRbQl0pOysraylCKz1kLF8rPXA7aWYoMD09PWV0KWZvcig7Oyl7Xz1zK1EqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWF0W0JdKTsrK2spQis9ZCxfKz1wO2lmKDAhPT1ydCl7Xz1zK1EqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKHJ0PDApe2ZvcihBPWwqYixNPWwqSyxTPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sVD1TK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1vW1RdLG9bVF09bSxOKz1oOysrSywtLVF9ZWxzZXtmb3IoQT1sKmIsTT1sKlEsTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOy0tUX1icmVha31pZigtLVE8YilicmVha319fX1yKGl0KSxyKGF0KSxRLUs8PTMyP3QoSyxRLG8scyxsLGMsdSxmLGgscCxkKTpuKEssUSxvLHMsbCxjLHUsZixoLHAsZCl9fX07dmFyIHM9eyJ1aW50MzIsMSwwIjpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yLmRhdGEsaT0wfHIub2Zmc2V0LGE9ci5zaGFwZSxvPXIuc3RyaWRlLHM9MHxvWzBdLGw9MHxhWzBdLGM9MHxvWzFdLHU9MHxhWzFdLGY9YyxoPWM7bDw9MzI/dCgwLGwtMSxuLGkscyxjLGwsdSxmLGgsMSk6ZSgwLGwtMSxuLGkscyxjLGwsdSxmLGgsMSl9fX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W2UsdF0uam9pbigiLCIpLG49c1tyXSxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlKSxuPVtlLHRdLmpvaW4oIiwiKSxvPWFbbl07cmV0dXJuIHI/byhyWzBdLHJbMV0pOm8oKX0odCxlKSxjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pKGUpLGE9W2UsdF0uam9pbigiLCIpLHM9b1thXTtyZXR1cm4gdC5sZW5ndGg+MSYmbj9zKHIsblswXSxuWzFdKTpzKHIpfSh0LGUsbCk7cmV0dXJuIG4obCxjKX19LHsidHlwZWRhcnJheS1wb29sIjozMDh9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY29tcGlsZV9zb3J0LmpzIiksaT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmRlcixyPXQuZHR5cGUsYT1bZSxyXS5qb2luKCI6Iiksbz1pW2FdO3JldHVybiBvfHwoaVthXT1vPW4oZSxyKSksbyh0KSx0fX0seyIuL2xpYi9jb21waWxlX3NvcnQuanMiOjI1N31dLDI1OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImlzLWJ1ZmZlciIpLGk9InVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gbygpe3ZhciB0LGU9dGhpcy5zdHJpZGUscj1uZXcgQXJyYXkoZS5sZW5ndGgpO2Zvcih0PTA7dDxyLmxlbmd0aDsrK3Qpclt0XT1bTWF0aC5hYnMoZVt0XSksdF07ci5zb3J0KGEpO3ZhciBuPW5ldyBBcnJheShyLmxlbmd0aCk7Zm9yKHQ9MDt0PG4ubGVuZ3RoOysrdCluW3RdPXJbdF1bMV07cmV0dXJuIG59dmFyIHM9e1Q6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmRhdGE9dH12YXIgcj1lLnByb3RvdHlwZTtyZXR1cm4gci5kdHlwZT10LHIuaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sci5zaXplPTAsci5kaW1lbnNpb249LTEsci5zaGFwZT1yLnN0cmlkZT1yLm9yZGVyPVtdLHIubG89ci5oaT1yLnRyYW5zcG9zZT1yLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy5kYXRhKX0sci5nZXQ9ci5zZXQ9ZnVuY3Rpb24oKXt9LHIucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodCl9fSwwOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3RoaXMuZGF0YT10LHRoaXMub2Zmc2V0PWV9dmFyIG49ci5wcm90b3R5cGU7cmV0dXJuIG4uZHR5cGU9dCxuLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0fSxuLmRpbWVuc2lvbj0wLG4uc2l6ZT0xLG4uc2hhcGU9bi5zdHJpZGU9bi5vcmRlcj1bXSxuLmxvPW4uaGk9bi50cmFuc3Bvc2U9bi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMuZGF0YSx0aGlzLm9mZnNldCl9LG4ucGljaz1mdW5jdGlvbigpe3JldHVybiBlKHRoaXMuZGF0YSl9LG4udmFsdWVPZj1uLmdldD1mdW5jdGlvbigpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldCk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0XX0sbi5zZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LGUpOnRoaXMuZGF0YVt0aGlzLm9mZnNldF09ZX0sZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIG5ldyByKHQsaSl9fSwxOmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2VdLHRoaXMuc3RyaWRlPVtyXSx0aGlzLm9mZnNldD0wfG59dmFyIGk9bi5wcm90b3R5cGU7cmV0dXJuIGkuZHR5cGU9dCxpLmRpbWVuc2lvbj0xLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcGVbMF19fSksaS5vcmRlcj1bMF0saS5zZXQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSxyKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZV09cn0saS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplXX0saS5pbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qdH0saS5oaT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLCJudW1iZXIiIT10eXBlb2YgdHx8dDwwP3RoaXMuc2hhcGVbMF06MHx0LHRoaXMuc3RyaWRlWzBdLHRoaXMub2Zmc2V0KX0saS5sbz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9mZnNldCxyPTAsaT10aGlzLnNoYXBlWzBdLGE9dGhpcy5zdHJpZGVbMF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiYoZSs9YSoocj0wfHQpLGktPXIpLG5ldyBuKHRoaXMuZGF0YSxpLGEsZSl9LGkuc3RlcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNoYXBlWzBdLHI9dGhpcy5zdHJpZGVbMF0saT10aGlzLm9mZnNldCxhPTAsbz1NYXRoLmNlaWw7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYoKGE9MHx0KTwwPyhpKz1yKihlLTEpLGU9bygtZS9hKSk6ZT1vKGUvYSkscio9YSksbmV3IG4odGhpcy5kYXRhLGUscixpKX0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCl7dD12b2lkIDA9PT10PzA6MHx0O3ZhciBlPXRoaXMuc2hhcGUscj10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLGVbdF0sclt0XSx0aGlzLm9mZnNldCl9LGkucGljaz1mdW5jdGlvbih0KXt2YXIgcj1bXSxuPVtdLGk9dGhpcy5vZmZzZXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wP2k9aSt0aGlzLnN0cmlkZVswXSp0fDA6KHIucHVzaCh0aGlzLnNoYXBlWzBdKSxuLnB1c2godGhpcy5zdHJpZGVbMF0pKSwoMCxlW3IubGVuZ3RoKzFdKSh0aGlzLmRhdGEscixuLGkpfSxmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbmV3IG4odCxlWzBdLHJbMF0saSl9fSwyOmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt0aGlzLmRhdGE9dCx0aGlzLnNoYXBlPVtlLHJdLHRoaXMuc3RyaWRlPVtuLGldLHRoaXMub2Zmc2V0PTB8YX12YXIgaT1uLnByb3RvdHlwZTtyZXR1cm4gaS5kdHlwZT10LGkuZGltZW5zaW9uPTIsT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJvcmRlciIse2dldDpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLnN0cmlkZVswXSk+TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pP1sxLDBdOlswLDFdfX0pLGkuc2V0PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyLG4pOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnJdPW59LGkuZ2V0PWZ1bmN0aW9uKGUscil7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcik6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcl19LGkuaW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qdCt0aGlzLnN0cmlkZVsxXSplfSxpLmhpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MD90aGlzLnNoYXBlWzBdOjB8dCwibnVtYmVyIiE9dHlwZW9mIGV8fGU8MD90aGlzLnNoYXBlWzFdOjB8ZSx0aGlzLnN0cmlkZVswXSx0aGlzLnN0cmlkZVsxXSx0aGlzLm9mZnNldCl9LGkubG89ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9mZnNldCxpPTAsYT10aGlzLnNoYXBlWzBdLG89dGhpcy5zaGFwZVsxXSxzPXRoaXMuc3RyaWRlWzBdLGw9dGhpcy5zdHJpZGVbMV07cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiYocis9cyooaT0wfHQpLGEtPWkpLCJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmKHIrPWwqKGk9MHxlKSxvLT1pKSxuZXcgbih0aGlzLmRhdGEsYSxvLHMsbCxyKX0saS5zdGVwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zaGFwZVswXSxpPXRoaXMuc2hhcGVbMV0sYT10aGlzLnN0cmlkZVswXSxvPXRoaXMuc3RyaWRlWzFdLHM9dGhpcy5vZmZzZXQsbD0wLGM9TWF0aC5jZWlsO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKChsPTB8dCk8MD8ocys9YSooci0xKSxyPWMoLXIvbCkpOnI9YyhyL2wpLGEqPWwpLCJudW1iZXIiPT10eXBlb2YgZSYmKChsPTB8ZSk8MD8ocys9byooaS0xKSxpPWMoLWkvbCkpOmk9YyhpL2wpLG8qPWwpLG5ldyBuKHRoaXMuZGF0YSxyLGksYSxvLHMpfSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0LGUpe3Q9dm9pZCAwPT09dD8wOjB8dCxlPXZvaWQgMD09PWU/MTowfGU7dmFyIHI9dGhpcy5zaGFwZSxpPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgbih0aGlzLmRhdGEsclt0XSxyW2VdLGlbdF0saVtlXSx0aGlzLm9mZnNldCl9LGkucGljaz1mdW5jdGlvbih0LHIpe3ZhciBuPVtdLGk9W10sYT10aGlzLm9mZnNldDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTA/YT1hK3RoaXMuc3RyaWRlWzBdKnR8MDoobi5wdXNoKHRoaXMuc2hhcGVbMF0pLGkucHVzaCh0aGlzLnN0cmlkZVswXSkpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MD9hPWErdGhpcy5zdHJpZGVbMV0qcnwwOihuLnB1c2godGhpcy5zaGFwZVsxXSksaS5wdXNoKHRoaXMuc3RyaWRlWzFdKSksKDAsZVtuLmxlbmd0aCsxXSkodGhpcy5kYXRhLG4saSxhKX0sZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG5ldyBuKHQsZVswXSxlWzFdLHJbMF0sclsxXSxpKX19LDM6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzKXt0aGlzLmRhdGE9dCx0aGlzLnNoYXBlPVtlLHIsbl0sdGhpcy5zdHJpZGU9W2ksYSxvXSx0aGlzLm9mZnNldD0wfHN9dmFyIGk9bi5wcm90b3R5cGU7cmV0dXJuIGkuZHR5cGU9dCxpLmRpbWVuc2lvbj0zLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXSp0aGlzLnNoYXBlWzJdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJvcmRlciIse2dldDpmdW5jdGlvbigpe3ZhciB0PU1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKSxlPU1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSxyPU1hdGguYWJzKHRoaXMuc3RyaWRlWzJdKTtyZXR1cm4gdD5lP2U+cj9bMiwxLDBdOnQ+cj9bMSwyLDBdOlsxLDAsMl06dD5yP1syLDAsMV06cj5lP1swLDEsMl06WzAsMiwxXX19KSxpLnNldD1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4saSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuXT1pfSxpLmdldD1mdW5jdGlvbihlLHIsbil7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm5dfSxpLmluZGV4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qdCt0aGlzLnN0cmlkZVsxXSplK3RoaXMuc3RyaWRlWzJdKnJ9LGkuaGk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsIm51bWJlciIhPXR5cGVvZiBlfHxlPDA/dGhpcy5zaGFwZVsxXTowfGUsIm51bWJlciIhPXR5cGVvZiByfHxyPDA/dGhpcy5zaGFwZVsyXTowfHIsdGhpcy5zdHJpZGVbMF0sdGhpcy5zdHJpZGVbMV0sdGhpcy5zdHJpZGVbMl0sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLm9mZnNldCxhPTAsbz10aGlzLnNoYXBlWzBdLHM9dGhpcy5zaGFwZVsxXSxsPXRoaXMuc2hhcGVbMl0sYz10aGlzLnN0cmlkZVswXSx1PXRoaXMuc3RyaWRlWzFdLGY9dGhpcy5zdHJpZGVbMl07cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiYoaSs9YyooYT0wfHQpLG8tPWEpLCJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmKGkrPXUqKGE9MHxlKSxzLT1hKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJihpKz1mKihhPTB8ciksbC09YSksbmV3IG4odGhpcy5kYXRhLG8scyxsLGMsdSxmLGkpfSxpLnN0ZXA9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuc2hhcGVbMF0sYT10aGlzLnNoYXBlWzFdLG89dGhpcy5zaGFwZVsyXSxzPXRoaXMuc3RyaWRlWzBdLGw9dGhpcy5zdHJpZGVbMV0sYz10aGlzLnN0cmlkZVsyXSx1PXRoaXMub2Zmc2V0LGY9MCxoPU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigoZj0wfHQpPDA/KHUrPXMqKGktMSksaT1oKC1pL2YpKTppPWgoaS9mKSxzKj1mKSwibnVtYmVyIj09dHlwZW9mIGUmJigoZj0wfGUpPDA/KHUrPWwqKGEtMSksYT1oKC1hL2YpKTphPWgoYS9mKSxsKj1mKSwibnVtYmVyIj09dHlwZW9mIHImJigoZj0wfHIpPDA/KHUrPWMqKG8tMSksbz1oKC1vL2YpKTpvPWgoby9mKSxjKj1mKSxuZXcgbih0aGlzLmRhdGEsaSxhLG8scyxsLGMsdSl9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSxyKXt0PXZvaWQgMD09PXQ/MDowfHQsZT12b2lkIDA9PT1lPzE6MHxlLHI9dm9pZCAwPT09cj8yOjB8cjt2YXIgaT10aGlzLnNoYXBlLGE9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSxpW3RdLGlbZV0saVtyXSxhW3RdLGFbZV0sYVtyXSx0aGlzLm9mZnNldCl9LGkucGljaz1mdW5jdGlvbih0LHIsbil7dmFyIGk9W10sYT1bXSxvPXRoaXMub2Zmc2V0O3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MD9vPW8rdGhpcy5zdHJpZGVbMF0qdHwwOihpLnB1c2godGhpcy5zaGFwZVswXSksYS5wdXNoKHRoaXMuc3RyaWRlWzBdKSksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wP289byt0aGlzLnN0cmlkZVsxXSpyfDA6KGkucHVzaCh0aGlzLnNoYXBlWzFdKSxhLnB1c2godGhpcy5zdHJpZGVbMV0pKSwibnVtYmVyIj09dHlwZW9mIG4mJm4+PTA/bz1vK3RoaXMuc3RyaWRlWzJdKm58MDooaS5wdXNoKHRoaXMuc2hhcGVbMl0pLGEucHVzaCh0aGlzLnN0cmlkZVsyXSkpLCgwLGVbaS5sZW5ndGgrMV0pKHRoaXMuZGF0YSxpLGEsbyl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sZVsxXSxlWzJdLHJbMF0sclsxXSxyWzJdLGkpfX0sNDpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMsbCxjKXt0aGlzLmRhdGE9dCx0aGlzLnNoYXBlPVtlLHIsbixpXSx0aGlzLnN0cmlkZT1bYSxvLHMsbF0sdGhpcy5vZmZzZXQ9MHxjfXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLmR0eXBlPXQsaS5kaW1lbnNpb249NCxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV0qdGhpcy5zaGFwZVsyXSp0aGlzLnNoYXBlWzNdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJvcmRlciIse2dldDpyfSksaS5zZXQ9ZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSxhKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaV09YX0saS5nZXQ9ZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmkpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppXX0saS5pbmRleD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qdCt0aGlzLnN0cmlkZVsxXSplK3RoaXMuc3RyaWRlWzJdKnIrdGhpcy5zdHJpZGVbM10qbn0saS5oaT1mdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLCJudW1iZXIiIT10eXBlb2YgdHx8dDwwP3RoaXMuc2hhcGVbMF06MHx0LCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwP3RoaXMuc2hhcGVbMV06MHxlLCJudW1iZXIiIT10eXBlb2Ygcnx8cjwwP3RoaXMuc2hhcGVbMl06MHxyLCJudW1iZXIiIT10eXBlb2YgaXx8aTwwP3RoaXMuc2hhcGVbM106MHxpLHRoaXMuc3RyaWRlWzBdLHRoaXMuc3RyaWRlWzFdLHRoaXMuc3RyaWRlWzJdLHRoaXMuc3RyaWRlWzNdLHRoaXMub2Zmc2V0KX0saS5sbz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT10aGlzLm9mZnNldCxvPTAscz10aGlzLnNoYXBlWzBdLGw9dGhpcy5zaGFwZVsxXSxjPXRoaXMuc2hhcGVbMl0sdT10aGlzLnNoYXBlWzNdLGY9dGhpcy5zdHJpZGVbMF0saD10aGlzLnN0cmlkZVsxXSxwPXRoaXMuc3RyaWRlWzJdLGQ9dGhpcy5zdHJpZGVbM107cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiYoYSs9Zioobz0wfHQpLHMtPW8pLCJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmKGErPWgqKG89MHxlKSxsLT1vKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJihhKz1wKihvPTB8ciksYy09byksIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wJiYoYSs9ZCoobz0wfGkpLHUtPW8pLG5ldyBuKHRoaXMuZGF0YSxzLGwsYyx1LGYsaCxwLGQsYSl9LGkuc3RlcD1mdW5jdGlvbih0LGUscixpKXt2YXIgYT10aGlzLnNoYXBlWzBdLG89dGhpcy5zaGFwZVsxXSxzPXRoaXMuc2hhcGVbMl0sbD10aGlzLnNoYXBlWzNdLGM9dGhpcy5zdHJpZGVbMF0sdT10aGlzLnN0cmlkZVsxXSxmPXRoaXMuc3RyaWRlWzJdLGg9dGhpcy5zdHJpZGVbM10scD10aGlzLm9mZnNldCxkPTAsbT1NYXRoLmNlaWw7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYoKGQ9MHx0KTwwPyhwKz1jKihhLTEpLGE9bSgtYS9kKSk6YT1tKGEvZCksYyo9ZCksIm51bWJlciI9PXR5cGVvZiBlJiYoKGQ9MHxlKTwwPyhwKz11KihvLTEpLG89bSgtby9kKSk6bz1tKG8vZCksdSo9ZCksIm51bWJlciI9PXR5cGVvZiByJiYoKGQ9MHxyKTwwPyhwKz1mKihzLTEpLHM9bSgtcy9kKSk6cz1tKHMvZCksZio9ZCksIm51bWJlciI9PXR5cGVvZiBpJiYoKGQ9MHxpKTwwPyhwKz1oKihsLTEpLGw9bSgtbC9kKSk6bD1tKGwvZCksaCo9ZCksbmV3IG4odGhpcy5kYXRhLGEsbyxzLGwsYyx1LGYsaCxwKX0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlLHIsaSl7dD12b2lkIDA9PT10PzA6MHx0LGU9dm9pZCAwPT09ZT8xOjB8ZSxyPXZvaWQgMD09PXI/MjowfHIsaT12b2lkIDA9PT1pPzM6MHxpO3ZhciBhPXRoaXMuc2hhcGUsbz10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLGFbdF0sYVtlXSxhW3JdLGFbaV0sb1t0XSxvW2VdLG9bcl0sb1tpXSx0aGlzLm9mZnNldCl9LGkucGljaz1mdW5jdGlvbih0LHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9dGhpcy5vZmZzZXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wP3M9cyt0aGlzLnN0cmlkZVswXSp0fDA6KGEucHVzaCh0aGlzLnNoYXBlWzBdKSxvLnB1c2godGhpcy5zdHJpZGVbMF0pKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTA/cz1zK3RoaXMuc3RyaWRlWzFdKnJ8MDooYS5wdXNoKHRoaXMuc2hhcGVbMV0pLG8ucHVzaCh0aGlzLnN0cmlkZVsxXSkpLCJudW1iZXIiPT10eXBlb2YgbiYmbj49MD9zPXMrdGhpcy5zdHJpZGVbMl0qbnwwOihhLnB1c2godGhpcy5zaGFwZVsyXSksby5wdXNoKHRoaXMuc3RyaWRlWzJdKSksIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wP3M9cyt0aGlzLnN0cmlkZVszXSppfDA6KGEucHVzaCh0aGlzLnNoYXBlWzNdKSxvLnB1c2godGhpcy5zdHJpZGVbM10pKSwoMCxlW2EubGVuZ3RoKzFdKSh0aGlzLmRhdGEsYSxvLHMpfSxmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbmV3IG4odCxlWzBdLGVbMV0sZVsyXSxlWzNdLHJbMF0sclsxXSxyWzJdLHJbM10saSl9fSw1OmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXt0aGlzLmRhdGE9dCx0aGlzLnNoYXBlPVtlLHIsbixpLGFdLHRoaXMuc3RyaWRlPVtvLHMsbCxjLHVdLHRoaXMub2Zmc2V0PTB8Zn12YXIgaT1uLnByb3RvdHlwZTtyZXR1cm4gaS5kdHlwZT10LGkuZGltZW5zaW9uPTUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdKnRoaXMuc2hhcGVbMl0qdGhpcy5zaGFwZVszXSp0aGlzLnNoYXBlWzRdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJvcmRlciIse2dldDpyfSksaS5zZXQ9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppK3RoaXMuc3RyaWRlWzRdKmEsbyk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmkrdGhpcy5zdHJpZGVbNF0qYV09b30saS5nZXQ9ZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSt0aGlzLnN0cmlkZVs0XSphKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSt0aGlzLnN0cmlkZVs0XSphXX0saS5pbmRleD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0K3RoaXMuc3RyaWRlWzFdKmUrdGhpcy5zdHJpZGVbMl0qcit0aGlzLnN0cmlkZVszXSpuK3RoaXMuc3RyaWRlWzRdKml9LGkuaGk9ZnVuY3Rpb24odCxlLHIsaSxhKXtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLCJudW1iZXIiIT10eXBlb2YgdHx8dDwwP3RoaXMuc2hhcGVbMF06MHx0LCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwP3RoaXMuc2hhcGVbMV06MHxlLCJudW1iZXIiIT10eXBlb2Ygcnx8cjwwP3RoaXMuc2hhcGVbMl06MHxyLCJudW1iZXIiIT10eXBlb2YgaXx8aTwwP3RoaXMuc2hhcGVbM106MHxpLCJudW1iZXIiIT10eXBlb2YgYXx8YTwwP3RoaXMuc2hhcGVbNF06MHxhLHRoaXMuc3RyaWRlWzBdLHRoaXMuc3RyaWRlWzFdLHRoaXMuc3RyaWRlWzJdLHRoaXMuc3RyaWRlWzNdLHRoaXMuc3RyaWRlWzRdLHRoaXMub2Zmc2V0KX0saS5sbz1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPXRoaXMub2Zmc2V0LHM9MCxsPXRoaXMuc2hhcGVbMF0sYz10aGlzLnNoYXBlWzFdLHU9dGhpcy5zaGFwZVsyXSxmPXRoaXMuc2hhcGVbM10saD10aGlzLnNoYXBlWzRdLHA9dGhpcy5zdHJpZGVbMF0sZD10aGlzLnN0cmlkZVsxXSxtPXRoaXMuc3RyaWRlWzJdLGc9dGhpcy5zdHJpZGVbM10sdj10aGlzLnN0cmlkZVs0XTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihvKz1wKihzPTB8dCksbC09cyksIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiYobys9ZCoocz0wfGUpLGMtPXMpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmKG8rPW0qKHM9MHxyKSx1LT1zKSwibnVtYmVyIj09dHlwZW9mIGkmJmk+PTAmJihvKz1nKihzPTB8aSksZi09cyksIm51bWJlciI9PXR5cGVvZiBhJiZhPj0wJiYobys9dioocz0wfGEpLGgtPXMpLG5ldyBuKHRoaXMuZGF0YSxsLGMsdSxmLGgscCxkLG0sZyx2LG8pfSxpLnN0ZXA9ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz10aGlzLnNoYXBlWzBdLHM9dGhpcy5zaGFwZVsxXSxsPXRoaXMuc2hhcGVbMl0sYz10aGlzLnNoYXBlWzNdLHU9dGhpcy5zaGFwZVs0XSxmPXRoaXMuc3RyaWRlWzBdLGg9dGhpcy5zdHJpZGVbMV0scD10aGlzLnN0cmlkZVsyXSxkPXRoaXMuc3RyaWRlWzNdLG09dGhpcy5zdHJpZGVbNF0sZz10aGlzLm9mZnNldCx2PTAseT1NYXRoLmNlaWw7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYoKHY9MHx0KTwwPyhnKz1mKihvLTEpLG89eSgtby92KSk6bz15KG8vdiksZio9diksIm51bWJlciI9PXR5cGVvZiBlJiYoKHY9MHxlKTwwPyhnKz1oKihzLTEpLHM9eSgtcy92KSk6cz15KHMvdiksaCo9diksIm51bWJlciI9PXR5cGVvZiByJiYoKHY9MHxyKTwwPyhnKz1wKihsLTEpLGw9eSgtbC92KSk6bD15KGwvdikscCo9diksIm51bWJlciI9PXR5cGVvZiBpJiYoKHY9MHxpKTwwPyhnKz1kKihjLTEpLGM9eSgtYy92KSk6Yz15KGMvdiksZCo9diksIm51bWJlciI9PXR5cGVvZiBhJiYoKHY9MHxhKTwwPyhnKz1tKih1LTEpLHU9eSgtdS92KSk6dT15KHUvdiksbSo9diksbmV3IG4odGhpcy5kYXRhLG8scyxsLGMsdSxmLGgscCxkLG0sZyl9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSxyLGksYSl7dD12b2lkIDA9PT10PzA6MHx0LGU9dm9pZCAwPT09ZT8xOjB8ZSxyPXZvaWQgMD09PXI/MjowfHIsaT12b2lkIDA9PT1pPzM6MHxpLGE9dm9pZCAwPT09YT80OjB8YTt2YXIgbz10aGlzLnNoYXBlLHM9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSxvW3RdLG9bZV0sb1tyXSxvW2ldLG9bYV0sc1t0XSxzW2VdLHNbcl0sc1tpXSxzW2FdLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQscixuLGksYSl7dmFyIG89W10scz1bXSxsPXRoaXMub2Zmc2V0O3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MD9sPWwrdGhpcy5zdHJpZGVbMF0qdHwwOihvLnB1c2godGhpcy5zaGFwZVswXSkscy5wdXNoKHRoaXMuc3RyaWRlWzBdKSksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wP2w9bCt0aGlzLnN0cmlkZVsxXSpyfDA6KG8ucHVzaCh0aGlzLnNoYXBlWzFdKSxzLnB1c2godGhpcy5zdHJpZGVbMV0pKSwibnVtYmVyIj09dHlwZW9mIG4mJm4+PTA/bD1sK3RoaXMuc3RyaWRlWzJdKm58MDooby5wdXNoKHRoaXMuc2hhcGVbMl0pLHMucHVzaCh0aGlzLnN0cmlkZVsyXSkpLCJudW1iZXIiPT10eXBlb2YgaSYmaT49MD9sPWwrdGhpcy5zdHJpZGVbM10qaXwwOihvLnB1c2godGhpcy5zaGFwZVszXSkscy5wdXNoKHRoaXMuc3RyaWRlWzNdKSksIm51bWJlciI9PXR5cGVvZiBhJiZhPj0wP2w9bCt0aGlzLnN0cmlkZVs0XSphfDA6KG8ucHVzaCh0aGlzLnNoYXBlWzRdKSxzLnB1c2godGhpcy5zdHJpZGVbNF0pKSwoMCxlW28ubGVuZ3RoKzFdKSh0aGlzLmRhdGEsbyxzLGwpfSxmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbmV3IG4odCxlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sclswXSxyWzFdLHJbMl0sclszXSxyWzRdLGkpfX19O2Z1bmN0aW9uIGwodCxlKXt2YXIgcj0tMT09PWU/IlQiOlN0cmluZyhlKSxuPXNbcl07cmV0dXJuLTE9PT1lP24odCk6MD09PWU/bih0LGNbdF1bMF0pOm4odCxjW3RdLG8pfXZhciBjPXtnZW5lcmljOltdLGJ1ZmZlcjpbXSxhcnJheTpbXSxmbG9hdDMyOltdLGZsb2F0NjQ6W10saW50ODpbXSxpbnQxNjpbXSxpbnQzMjpbXSx1aW50OF9jbGFtcGVkOltdLHVpbnQ4OltdLHVpbnQxNjpbXSx1aW50MzI6W10sYmlnaW50NjQ6W10sYmlndWludDY0OltdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7aWYodm9pZCAwPT09dClyZXR1cm4oMCxjLmFycmF5WzBdKShbXSk7Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pLHZvaWQgMD09PWUmJihlPVt0Lmxlbmd0aF0pO3ZhciBvPWUubGVuZ3RoO2lmKHZvaWQgMD09PXIpe3I9bmV3IEFycmF5KG8pO2Zvcih2YXIgcz1vLTEsdT0xO3M+PTA7LS1zKXJbc109dSx1Kj1lW3NdfWlmKHZvaWQgMD09PWEpe2E9MDtmb3Iocz0wO3M8bzsrK3MpcltzXTwwJiYoYS09KGVbc10tMSkqcltzXSl9Zm9yKHZhciBmPWZ1bmN0aW9uKHQpe2lmKG4odCkpcmV0dXJuImJ1ZmZlciI7aWYoaSlzd2l0Y2goT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXtjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6cmV0dXJuImZsb2F0NjQiO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpyZXR1cm4iZmxvYXQzMiI7Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOnJldHVybiJpbnQ4IjtjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOnJldHVybiJpbnQxNiI7Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpyZXR1cm4iaW50MzIiO2Nhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOnJldHVybiJ1aW50OF9jbGFtcGVkIjtjYXNlIltvYmplY3QgVWludDhBcnJheV0iOnJldHVybiJ1aW50OCI7Y2FzZSJbb2JqZWN0IFVpbnQxNkFycmF5XSI6cmV0dXJuInVpbnQxNiI7Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuInVpbnQzMiI7Y2FzZSJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIjpyZXR1cm4iYmlnaW50NjQiO2Nhc2UiW29iamVjdCBCaWdVaW50NjRBcnJheV0iOnJldHVybiJiaWd1aW50NjQifXJldHVybiBBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6ImdlbmVyaWMifSh0KSxoPWNbZl07aC5sZW5ndGg8PW8rMTspaC5wdXNoKGwoZixoLmxlbmd0aC0xKSk7cmV0dXJuKDAsaFtvKzFdKSh0LGUscixhKX19LHsiaXMtYnVmZmVyIjoyMzd9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZG91YmxlLWJpdHMiKSxpPU1hdGgucG93KDIsLTEwNzQpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO2lmKHQ9PT1lKXJldHVybiB0O2lmKDA9PT10KXJldHVybiBlPDA/LWk6aTt2YXIgcj1uLmhpKHQpLGE9bi5sbyh0KTtlPnQ9PXQ+MD9hPT09LTE+Pj4wPyhyKz0xLGE9MCk6YSs9MTowPT09YT8oYT0tMT4+PjAsci09MSk6YS09MTtyZXR1cm4gbi5wYWNrKGEscil9fSx7ImRvdWJsZS1iaXRzIjo2NH1dLDI2MTpbZnVuY3Rpb24odCxlLHIpe3IudmVydGV4Tm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28paVtvXT1bMCwwLDBdO2ZvcihvPTA7bzx0Lmxlbmd0aDsrK28pZm9yKHZhciBzPXRbb10sbD0wLGM9c1tzLmxlbmd0aC0xXSx1PXNbMF0sZj0wO2Y8cy5sZW5ndGg7KytmKXtsPWMsYz11LHU9c1soZisxKSVzLmxlbmd0aF07Zm9yKHZhciBoPWVbbF0scD1lW2NdLGQ9ZVt1XSxtPW5ldyBBcnJheSgzKSxnPTAsdj1uZXcgQXJyYXkoMykseT0wLHg9MDt4PDM7Kyt4KW1beF09aFt4XS1wW3hdLGcrPW1beF0qbVt4XSx2W3hdPWRbeF0tcFt4XSx5Kz12W3hdKnZbeF07aWYoZyp5PmEpe3ZhciBiPWlbY10sXz0xL01hdGguc3FydChnKnkpO2Zvcih4PTA7eDwzOysreCl7dmFyIHc9KHgrMSklMyxUPSh4KzIpJTM7Ylt4XSs9Xyoodlt3XSptW1RdLXZbVF0qbVt3XSl9fX1mb3Iobz0wO288bjsrK28pe2I9aVtvXTt2YXIgaz0wO2Zvcih4PTA7eDwzOysreClrKz1iW3hdKmJbeF07aWYoaz5hKWZvcihfPTEvTWF0aC5zcXJ0KGspLHg9MDt4PDM7Kyt4KWJbeF0qPV87ZWxzZSBmb3IoeD0wO3g8MzsrK3gpYlt4XT0wfXJldHVybiBpfSxyLmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbyl7Zm9yKHZhciBzPXRbb10sbD1uZXcgQXJyYXkoMyksYz0wO2M8MzsrK2MpbFtjXT1lW3NbY11dO3ZhciB1PW5ldyBBcnJheSgzKSxmPW5ldyBBcnJheSgzKTtmb3IoYz0wO2M8MzsrK2MpdVtjXT1sWzFdW2NdLWxbMF1bY10sZltjXT1sWzJdW2NdLWxbMF1bY107dmFyIGg9bmV3IEFycmF5KDMpLHA9MDtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBkPShjKzEpJTMsbT0oYysyKSUzO2hbY109dVtkXSpmW21dLXVbbV0qZltkXSxwKz1oW2NdKmhbY119cD1wPmE/MS9NYXRoLnNxcnQocCk6MDtmb3IoYz0wO2M8MzsrK2MpaFtjXSo9cDtpW29dPWh9cmV0dXJuIGl9fSx7fV0sMjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1lK2ErYztpZihmPjApe3ZhciBmPU1hdGguc3FydCh1KzEpO3RbMF09LjUqKG8tbCkvZix0WzFdPS41KihzLW4pL2YsdFsyXT0uNSooci1hKS9mLHRbM109LjUqZn1lbHNle3ZhciBoPU1hdGgubWF4KGUsYSxjKTtmPU1hdGguc3FydCgyKmgtdSsxKTtlPj1oPyh0WzBdPS41KmYsdFsxXT0uNSooaStyKS9mLHRbMl09LjUqKHMrbikvZix0WzNdPS41KihvLWwpL2YpOmE+PWg/KHRbMF09LjUqKHIraSkvZix0WzFdPS41KmYsdFsyXT0uNSoobCtvKS9mLHRbM109LjUqKHMtbikvZik6KHRbMF09LjUqKG4rcykvZix0WzFdPS41KihvK2wpL2YsdFsyXT0uNSpmLHRbM109LjUqKHItaSkvZil9cmV0dXJuIHR9fSx7fV0sMjYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGYocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKTtyZXR1cm4gaX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2xvb2tBdCIpLGE9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLG89dCgiZ2wtbWF0NC9pbnZlcnQiKSxzPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gZih0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGg9Zi5wcm90b3R5cGU7aC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0saC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGY9MDtmPDM7KytmKWMrPXJbbCs0KmZdKmlbZl07clsxMitsXT0tY319LGguZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGguaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxoLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGgucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWwodS09YSpwLGYtPW8qcCxoLT1zKnApO3UvPWQsZi89ZCxoLz1kO3ZhciBtPWlbMl0sZz1pWzZdLHY9aVsxMF0seT1tKmErZypvK3Yqcyx4PW0qdStnKmYrdipoLGI9bChtLT15KmEreCp1LGctPXkqbyt4KmYsdi09eSpzK3gqaCk7bS89YixnLz1iLHYvPWI7dmFyIF89dSplK2Eqcix3PWYqZStvKnIsVD1oKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsVCk7dmFyIGs9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7az1NYXRoLm1heCgxZS00LGsrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coaykpfSxoLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGY9aVs1XSxoPWlbOV0scD1pWzJdLGQ9aVs2XSxtPWlbMTBdLGc9ZSphK3IqdSx2PWUqbytyKmYseT1lKnMrcipoLHg9LShkKnktbSp2KSxiPS0obSpnLXAqeSksXz0tKHAqdi1kKmcpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLFQ9Yyh4LGIsXyx3KTtUPjFlLTY/KHgvPVQsYi89VCxfLz1ULHcvPVQpOih4PWI9Xz0wLHc9MSk7dmFyIGs9dGhpcy5jb21wdXRlZFJvdGF0aW9uLEE9a1swXSxNPWtbMV0sUz1rWzJdLEU9a1szXSxMPUEqdytFKngrTSpfLVMqYixDPU0qdytFKmIrUyp4LUEqXyxQPVMqdytFKl8rQSpiLU0qeCxJPUUqdy1BKngtTSpiLVMqXztpZihuKXt4PXAsYj1kLF89bTt2YXIgTz1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj1PLGIqPU8sXyo9TyxJPUkqKHc9TWF0aC5jb3MoZSkpLShMPUwqdytJKngrQypfLVAqYikqeC0oQz1DKncrSSpiK1AqeC1MKl8pKmItKFA9UCp3K0kqXytMKmItQyp4KSpffXZhciB6PWMoTCxDLFAsSSk7ej4xZS02PyhMLz16LEMvPXosUC89eixJLz16KTooTD1DPVA9MCxJPTEpLHRoaXMucm90YXRpb24uc2V0KHQsTCxDLFAsSSl9LGgubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0saC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0saC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBmPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpmLGwtbls2XSpmLGMtblsxMF0qZiksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0saC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxoLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxoLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGgudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxoLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0seyIuL2xpYi9xdWF0RnJvbUZyYW1lIjoyNjIsImZpbHRlcmVkLXZlY3RvciI6NjgsImdsLW1hdDQvZnJvbVF1YXQiOjk1LCJnbC1tYXQ0L2ludmVydCI6OTgsImdsLW1hdDQvbG9va0F0Ijo5OX1dLDI2NDpbZnVuY3Rpb24odCxlLHIpewovKiEKICogcGFkLWxlZnQgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3BhZC1sZWZ0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICovCiJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZXBlYXQtc3RyaW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbihyPXZvaWQgMCE9PXI/cisiIjoiICIsZSkrdH19LHsicmVwZWF0LXN0cmluZyI6Mjc3fV0sMjY1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9WzAsIiJdKSx0PVN0cmluZyh0KTt2YXIgcj1wYXJzZUZsb2F0KHQsMTApO3JldHVybiBlWzBdPXIsZVsxXT10Lm1hdGNoKC9bXGQuXC1cK10qXHMqKC4qKS8pWzFdfHwiIixlfX0se31dLDI2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MHxlLmxlbmd0aCxpPXQubGVuZ3RoLGE9W25ldyBBcnJheShyKSxuZXcgQXJyYXkocildLG89MDtvPHI7KytvKWFbMF1bb109W10sYVsxXVtvXT1bXTtmb3Iobz0wO288aTsrK28pe3ZhciBzPXRbb107YVswXVtzWzBdXS5wdXNoKHMpLGFbMV1bc1sxXV0ucHVzaChzKX12YXIgbD1bXTtmb3Iobz0wO288cjsrK28pYVswXVtvXS5sZW5ndGgrYVsxXVtvXS5sZW5ndGg9PT0wJiZsLnB1c2goW29dKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9YVtlXVt0W2VdXTtyLnNwbGljZShyLmluZGV4T2YodCksMSl9ZnVuY3Rpb24gdSh0LHIsaSl7Zm9yKHZhciBvLHMsbCx1PTA7dTwyOysrdSlpZihhW3VdW3JdLmxlbmd0aD4wKXtvPWFbdV1bcl1bMF0sbD11O2JyZWFrfXM9b1sxXmxdO2Zvcih2YXIgZj0wO2Y8MjsrK2YpZm9yKHZhciBoPWFbZl1bcl0scD0wO3A8aC5sZW5ndGg7KytwKXt2YXIgZD1oW3BdLG09ZFsxXmZdO24oZVt0XSxlW3JdLGVbc10sZVttXSk+MCYmKG89ZCxzPW0sbD1mKX1yZXR1cm4gaXx8byYmYyhvLGwpLHN9ZnVuY3Rpb24gZih0LHIpe3ZhciBpPWFbcl1bdF1bMF0sbz1bdF07YyhpLHIpO2Zvcih2YXIgcz1pWzFecl07Oyl7Zm9yKDtzIT09dDspby5wdXNoKHMpLHM9dShvW28ubGVuZ3RoLTJdLHMsITEpO2lmKGFbMF1bdF0ubGVuZ3RoK2FbMV1bdF0ubGVuZ3RoPT09MClicmVhazt2YXIgbD1vW28ubGVuZ3RoLTFdLGY9dCxoPW9bMV0scD11KGwsZiwhMCk7aWYobihlW2xdLGVbZl0sZVtoXSxlW3BdKTwwKWJyZWFrO28ucHVzaCh0KSxzPXUobCxmKX1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGVbMV09PT1lW2UubGVuZ3RoLTFdfWZvcihvPTA7bzxyOysrbylmb3IodmFyIHA9MDtwPDI7KytwKXtmb3IodmFyIGQ9W107YVtwXVtvXS5sZW5ndGg+MDspe2FbMF1bb10ubGVuZ3RoO3ZhciBtPWYobyxwKTtoKDAsbSk/ZC5wdXNoLmFwcGx5KGQsbSk6KGQubGVuZ3RoPjAmJmwucHVzaChkKSxkPW0pfWQubGVuZ3RoPjAmJmwucHVzaChkKX1yZXR1cm4gbH07dmFyIG49dCgiY29tcGFyZS1hbmdsZSIpfSx7ImNvbXBhcmUtYW5nbGUiOjU0fV0sMjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKHQsZS5sZW5ndGgpLGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPW5ldyBBcnJheShlLmxlbmd0aCksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPXJbc10ubGVuZ3RoO2Fbc109bCxpW3NdPSEwLGw8PTEmJm8ucHVzaChzKX1mb3IoO28ubGVuZ3RoPjA7KXt2YXIgYz1vLnBvcCgpO2lbY109ITE7dmFyIHU9cltjXTtmb3Iocz0wO3M8dS5sZW5ndGg7KytzKXt2YXIgZj11W3NdOzA9PS0tYVtmXSYmby5wdXNoKGYpfX12YXIgaD1uZXcgQXJyYXkoZS5sZW5ndGgpLHA9W107Zm9yKHM9MDtzPGUubGVuZ3RoOysrcylpZihpW3NdKXtjPXAubGVuZ3RoO2hbc109YyxwLnB1c2goZVtzXSl9ZWxzZSBoW3NdPS0xO3ZhciBkPVtdO2ZvcihzPTA7czx0Lmxlbmd0aDsrK3Mpe3ZhciBtPXRbc107aVttWzBdXSYmaVttWzFdXSYmZC5wdXNoKFtoW21bMF1dLGhbbVsxXV1dKX1yZXR1cm5bZCxwXX07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKX0seyJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6NjZ9XSwyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGY9KGU9clsxXSkubGVuZ3RoLGg9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGY7KytwKWlmKGhbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZD1pKHQsZSk7dmFyIG09KGQ9ZC5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVswXSxpPTA7aTxyOysraSl7dmFyIGE9ZVt0W2ldXSxsPWVbdFsoaSsxKSVyXV0sYz1vKC1hWzBdLGFbMV0pLHU9bygtYVswXSxsWzFdKSxmPW8obFswXSxhWzFdKSxoPW8obFswXSxsWzFdKTtuPXMobixzKHMoYyx1KSxzKGYsaCkpKX1yZXR1cm4gbltuLmxlbmd0aC0xXT4wfSkpKS5sZW5ndGgsZz1uZXcgQXJyYXkobSksdj1uZXcgQXJyYXkobSk7Zm9yKHA9MDtwPG07KytwKXtnW3BdPXA7dmFyIHk9bmV3IEFycmF5KG0pLHg9ZFtwXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpLGI9YShbeF0pLF89MDt0OmZvcih2YXIgdz0wO3c8bTsrK3cpaWYoeVt3XT0wLHAhPT13KXtmb3IodmFyIFQ9KEg9ZFt3XSkubGVuZ3RoLGs9MDtrPFQ7KytrKXt2YXIgQT1iKGVbSFtrXV0pO2lmKDAhPT1BKXtBPDAmJih5W3ddPTEsXys9MSk7Y29udGludWUgdH19eVt3XT0xLF8rPTF9dltwXT1bXyxwLHldfXYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSkpO2ZvcihwPTA7cDxtOysrcCl7dmFyIE09KHk9dltwXSlbMV0sUz15WzJdO2Zvcih3PTA7dzxtOysrdylTW3ddJiYoZ1t3XT1NKX12YXIgRT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09W107cmV0dXJuIGV9KG0pO2ZvcihwPTA7cDxtOysrcClFW3BdLnB1c2goZ1twXSksRVtnW3BdXS5wdXNoKHApO3ZhciBMPXt9LEM9dShmLCExKTtmb3IocD0wO3A8bTsrK3ApZm9yKFQ9KEg9ZFtwXSkubGVuZ3RoLHc9MDt3PFQ7Kyt3KXt2YXIgUD1IW3ddLEk9SFsodysxKSVUXSxPPU1hdGgubWluKFAsSSkrIjoiK01hdGgubWF4KFAsSSk7aWYoTyBpbiBMKXt2YXIgej1MW09dO0Vbel0ucHVzaChwKSxFW3BdLnB1c2goeiksQ1tQXT1DW0ldPSEwfWVsc2UgTFtPXT1wfWZ1bmN0aW9uIEQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGU7KytyKWlmKCFDW3Rbcl1dKXJldHVybiExO3JldHVybiEwfXZhciBSPVtdLEY9dShtLC0xKTtmb3IocD0wO3A8bTsrK3ApZ1twXSE9PXB8fEQoZFtwXSk/RltwXT0tMTooUi5wdXNoKHApLEZbcF09MCk7cj1bXTtmb3IoO1IubGVuZ3RoPjA7KXt2YXIgQj1SLnBvcCgpLE49RVtCXTtsKE4sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTt2YXIgaixVPU4ubGVuZ3RoLFY9RltCXTtpZigwPT09Vil7dmFyIEg9ZFtCXTtqPVtIXX1mb3IocD0wO3A8VTsrK3Ape3ZhciBxPU5bcF07aWYoIShGW3FdPj0wKSlpZihGW3FdPTFeVixSLnB1c2gocSksMD09PVYpRChIPWRbcV0pfHwoSC5yZXZlcnNlKCksai5wdXNoKEgpKX0wPT09ViYmci5wdXNoKGopfXJldHVybiByfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpLGk9dCgicGxhbmFyLWR1YWwiKSxhPXQoInBvaW50LWluLWJpZy1wb2x5Z29uIiksbz10KCJ0d28tcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpLGw9dCgidW5pcSIpLGM9dCgiLi9saWIvdHJpbS1sZWF2ZXMiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7Ii4vbGliL3RyaW0tbGVhdmVzIjoyNjcsImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0Ijo2NiwicGxhbmFyLWR1YWwiOjI2NiwicG9pbnQtaW4tYmlnLXBvbHlnb24iOjI2OSwicm9idXN0LXN1bSI6Mjg5LCJ0d28tcHJvZHVjdCI6MzA2LHVuaXE6MzEwfV0sMjY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLGE9W10scz0wO3M8ZTsrK3MpZm9yKHZhciB1PXRbc10sZj11Lmxlbmd0aCxoPWYtMSxwPTA7cDxmO2g9cCsrKXt2YXIgZD11W2hdLG09dVtwXTtkWzBdPT09bVswXT9hLnB1c2goW2QsbV0pOnIucHVzaChbZCxtXSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09YS5sZW5ndGg/YzooZz1sKGEpLGZ1bmN0aW9uKHQpe3JldHVybiBnKHRbMF0sdFsxXSk/MDoxfSk7dmFyIGc7dmFyIHY9aShyKSx5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW8ubGUoZSxyWzBdKTtpZihpPDApcmV0dXJuIDE7dmFyIGE9dFtpXTtpZighYSl7aWYoIShpPjAmJmVbaV09PT1yWzBdKSlyZXR1cm4gMTthPXRbaS0xXX1mb3IodmFyIHM9MTthOyl7dmFyIGw9YS5rZXksYz1uKHIsbFswXSxsWzFdKTtpZihsWzBdWzBdPGxbMV1bMF0paWYoYzwwKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPjApKXJldHVybiAwO3M9LTEsYT1hLnJpZ2h0fWVsc2UgaWYoYz4wKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPDApKXJldHVybiAwO3M9MSxhPWEucmlnaHR9fXJldHVybiBzfX0odi5zbGFicyx2LmNvb3JkaW5hdGVzKTtyZXR1cm4gMD09PWEubGVuZ3RoP3k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoclswXSxyWzFdKT8wOmUocil9fShsKGEpLHkpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxpPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGE9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGk9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07aSBpbiBlP2VbaV0ucHVzaChjKTplW2ldPVtjXX12YXIgdT17fSxmPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxmLmxlbmd0aDsrK3Ipe3ZhciBoPWVbZltyXV07dVtmW3JdXT1hKGgpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjozMSwiaW50ZXJ2YWwtdHJlZS0xZCI6MjM0LCJyb2J1c3Qtb3JpZW50YXRpb24iOjI4NCwic2xhYi1kZWNvbXBvc2l0aW9uIjoyOTl9XSwyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49bmV3IEZsb2F0NjRBcnJheSg0KSxpPW5ldyBGbG9hdDY0QXJyYXkoNCksYT1uZXcgRmxvYXQ2NEFycmF5KDQpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe24ubGVuZ3RoPG8ubGVuZ3RoJiYobj1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxpPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGE9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCkpO2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7KytsKW5bbF09dFtsXS1vW2xdLGlbbF09ZVtsXS10W2xdLGFbbF09cltsXS10W2xdO3ZhciBjPTAsdT0wLGY9MCxoPTAscD0wLGQ9MDtmb3IobD0wO2w8by5sZW5ndGg7KytsKXt2YXIgbT1pW2xdLGc9YVtsXSx2PW5bbF07Yys9bSptLHUrPW0qZyxmKz1nKmcsaCs9diptLHArPXYqZyxkKz12KnZ9dmFyIHkseCxiLF8sdyxUPU1hdGguYWJzKGMqZi11KnUpLGs9dSpwLWYqaCxBPXUqaC1jKnA7aWYoaytBPD1UKWlmKGs8MClBPDAmJmg8MD8oQT0wLC1oPj1jPyhrPTEseT1jKzIqaCtkKTp5PWgqKGs9LWgvYykrZCk6KGs9MCxwPj0wPyhBPTAseT1kKTotcD49Zj8oQT0xLHk9ZisyKnArZCk6eT1wKihBPS1wL2YpK2QpO2Vsc2UgaWYoQTwwKUE9MCxoPj0wPyhrPTAseT1kKTotaD49Yz8oaz0xLHk9YysyKmgrZCk6eT1oKihrPS1oL2MpK2Q7ZWxzZXt2YXIgTT0xL1Q7eT0oayo9TSkqKGMqayt1KihBKj1NKSsyKmgpK0EqKHUqaytmKkErMipwKStkfWVsc2UgazwwPyhiPWYrcCk+KHg9dStoKT8oXz1iLXgpPj0odz1jLTIqdStmKT8oaz0xLEE9MCx5PWMrMipoK2QpOnk9KGs9Xy93KSooYyprK3UqKEE9MS1rKSsyKmgpK0EqKHUqaytmKkErMipwKStkOihrPTAsYjw9MD8oQT0xLHk9ZisyKnArZCk6cD49MD8oQT0wLHk9ZCk6eT1wKihBPS1wL2YpK2QpOkE8MD8oYj1jK2gpPih4PXUrcCk/KF89Yi14KT49KHc9Yy0yKnUrZik/KEE9MSxrPTAseT1mKzIqcCtkKTp5PShrPTEtKEE9Xy93KSkqKGMqayt1KkErMipoKStBKih1KmsrZipBKzIqcCkrZDooQT0wLGI8PTA/KGs9MSx5PWMrMipoK2QpOmg+PTA/KGs9MCx5PWQpOnk9aCooaz0taC9jKStkKTooXz1mK3AtdS1oKTw9MD8oaz0wLEE9MSx5PWYrMipwK2QpOl8+PSh3PWMtMip1K2YpPyhrPTEsQT0wLHk9YysyKmgrZCk6eT0oaz1fL3cpKihjKmsrdSooQT0xLWspKzIqaCkrQSoodSprK2YqQSsyKnApK2Q7dmFyIFM9MS1rLUE7Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbClzW2xdPVMqdFtsXStrKmVbbF0rQSpyW2xdO3JldHVybiB5PDA/MDp5fX0se31dLDI3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJnbC1xdWF0L3NsZXJwIil9LHsiZ2wtcXVhdC9zbGVycCI6MTI0fV0sMjcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQvYWRkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0seyJiaWctcmF0L2FkZCI6MTV9XSwyNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcillW3JdPW4odFtyXSk7cmV0dXJuIGV9O3ZhciBuPXQoImJpZy1yYXQiKX0seyJiaWctcmF0IjoxOH1dLDI3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0IiksaT10KCJiaWctcmF0L211bCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKGUpLGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTsrK3Mpb1tzXT1pKHRbc10scik7cmV0dXJuIG99fSx7ImJpZy1yYXQiOjE4LCJiaWctcmF0L211bCI6Mjd9XSwyNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdC9zdWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1uKHRbYV0sZVthXSk7cmV0dXJuIGl9fSx7ImJpZy1yYXQvc3ViIjoyOX1dLDI3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb21wYXJlLWNlbGwiKSxpPXQoImNvbXBhcmUtb3JpZW50ZWQtY2VsbCIpLGE9dCgiY2VsbC1vcmllbnRhdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0LnNvcnQoaSk7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxvPTA7bzxlOysrbyl7dmFyIHM9dFtvXSxsPWEocyk7aWYoMCE9PWwpe2lmKHI+MCl7dmFyIGM9dFtyLTFdO2lmKDA9PT1uKHMsYykmJmEoYykhPT1sKXtyLT0xO2NvbnRpbnVlfX10W3IrK109c319cmV0dXJuIHQubGVuZ3RoPXIsdH19LHsiY2VsbC1vcmllbnRhdGlvbiI6NDcsImNvbXBhcmUtY2VsbCI6NTYsImNvbXBhcmUtb3JpZW50ZWQtY2VsbCI6NTd9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXsKLyohCiAqIHJlcGVhdC1zdHJpbmcgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3JlcGVhdC1zdHJpbmc+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC4KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KInVzZSBzdHJpY3QiO3ZhciBuLGk9IiI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIik7aWYoMT09PWUpcmV0dXJuIHQ7aWYoMj09PWUpcmV0dXJuIHQrdDt2YXIgcj10Lmxlbmd0aCplO2lmKG4hPT10fHx2b2lkIDA9PT1uKW49dCxpPSIiO2Vsc2UgaWYoaS5sZW5ndGg+PXIpcmV0dXJuIGkuc3Vic3RyKDAscik7Zm9yKDtyPmkubGVuZ3RoJiZlPjE7KTEmZSYmKGkrPXQpLGU+Pj0xLHQrPXQ7cmV0dXJuIGk9KGkrPXQpLnN1YnN0cigwLHIpfX0se31dLDI3ODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXtlLmV4cG9ydHM9dC5wZXJmb3JtYW5jZSYmdC5wZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHZvaWQgMCE9PW4/bjoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sMjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj10W3QubGVuZ3RoLTFdLG49ZSxpPWUtMjtpPj0wOy0taSl7dmFyIGE9cixvPXRbaV07KGw9by0oKHI9YStvKS1hKSkmJih0Wy0tbl09cixyPWwpfXZhciBzPTA7Zm9yKGk9bjtpPGU7KytpKXt2YXIgbDthPXRbaV07KGw9KG89ciktKChyPWErbyktYSkpJiYodFtzKytdPWwpfXJldHVybiB0W3MrK109cix0Lmxlbmd0aD1zLHR9fSx7fV0sMjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1jb21wcmVzcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuKHQocihlWzBdWzBdLGVbMV1bMV0pLHIoLWVbMF1bMV0sZVsxXVswXSkpKX19ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIG4odChlKHQocihpWzFdWzFdLGlbMl1bMl0pLHIoLWlbMV1bMl0saVsyXVsxXSkpLGlbMF1bMF0pLHQoZSh0KHIoaVsxXVswXSxpWzJdWzJdKSxyKC1pWzFdWzJdLGlbMl1bMF0pKSwtaVswXVsxXSksZSh0KHIoaVsxXVswXSxpWzJdWzFdKSxyKC1pWzFdWzFdLGlbMl1bMF0pKSxpWzBdWzJdKSkpKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4oMj09PXQ/czozPT09dD9sOnZvaWQgMCkoaSxhLG4sbyl9dmFyIHU9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTtmdW5jdGlvbiBmKHQsZSxyLG4saSxhKXtyZXR1cm4gZnVuY3Rpb24obyl7c3dpdGNoKG8ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQobyk7Y2FzZSAxOnJldHVybiBlKG8pO2Nhc2UgMjpyZXR1cm4gcihvKTtjYXNlIDM6cmV0dXJuIG4obyl9dmFyIHM9aVtvLmxlbmd0aF07cmV0dXJuIHN8fChzPWlbby5sZW5ndGhdPWEoby5sZW5ndGgpKSxzKG8pfX0hZnVuY3Rpb24oKXtmb3IoO3UubGVuZ3RoPDQ7KXUucHVzaChjKHUubGVuZ3RoKSk7ZS5leHBvcnRzPWYuYXBwbHkodm9pZCAwLHUuY29uY2F0KFt1LGNdKSk7Zm9yKHZhciB0PTA7dDx1Lmxlbmd0aDsrK3QpZS5leHBvcnRzW3RdPXVbdF19KCl9LHsicm9idXN0LWNvbXByZXNzIjoyNzksInJvYnVzdC1zY2FsZSI6Mjg2LCJyb2J1c3Qtc3VtIjoyODksInR3by1wcm9kdWN0IjozMDZ9XSwyODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0WzBdLGVbMF0pLGE9MTthPHQubGVuZ3RoOysrYSlyPWkocixuKHRbYV0sZVthXSkpO3JldHVybiByfX0seyJyb2J1c3Qtc3VtIjoyODksInR3by1wcm9kdWN0IjozMDZ9XSwyODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zdWJ0cmFjdCIpLG89dCgicm9idXN0LXNjYWxlIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4oMz09PXQ/bDo0PT09dD9jOjU9PT10P3U6ZikoaSxhLG4sbyl9ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzPXIoaVswXSxpWzBdKSxsPW4ocyxhWzBdKSxjPW4ocyxvWzBdKSx1PXIoYVswXSxhWzBdKSxmPW4odSxpWzBdKSxoPW4odSxvWzBdKSxwPXIob1swXSxvWzBdKSxkPW4ocCxpWzBdKSxtPW4ocCxhWzBdKSxnPXQoZShtLGgpLGUoZixsKSksdj1lKGQsYykseT1lKGcsdik7cmV0dXJuIHlbeS5sZW5ndGgtMV19fWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsPXQocihpWzBdLGlbMF0pLHIoaVsxXSxpWzFdKSksYz1uKGwsYVswXSksdT1uKGwsb1swXSksZj1uKGwsc1swXSksaD10KHIoYVswXSxhWzBdKSxyKGFbMV0sYVsxXSkpLHA9bihoLGlbMF0pLGQ9bihoLG9bMF0pLG09bihoLHNbMF0pLGc9dChyKG9bMF0sb1swXSkscihvWzFdLG9bMV0pKSx2PW4oZyxpWzBdKSx5PW4oZyxhWzBdKSx4PW4oZyxzWzBdKSxiPXQocihzWzBdLHNbMF0pLHIoc1sxXSxzWzFdKSksXz1uKGIsaVswXSksdz1uKGIsYVswXSksVD1uKGIsb1swXSksaz10KHQobihlKFQseCksYVsxXSksdChuKGUodyxtKSwtb1sxXSksbihlKHksZCksc1sxXSkpKSx0KG4oZSh3LG0pLGlbMV0pLHQobihlKF8sZiksLWFbMV0pLG4oZShwLGMpLHNbMV0pKSkpLEE9dCh0KG4oZShULHgpLGlbMV0pLHQobihlKF8sZiksLW9bMV0pLG4oZSh2LHUpLHNbMV0pKSksdChuKGUoeSxkKSxpWzFdKSx0KG4oZSh2LHUpLC1hWzFdKSxuKGUocCxjKSxvWzFdKSkpKSxNPWUoayxBKTtyZXR1cm4gTVtNLmxlbmd0aC0xXX19ZnVuY3Rpb24gdSh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8scyxsKXt2YXIgYz10KHIoaVswXSxpWzBdKSx0KHIoaVsxXSxpWzFdKSxyKGlbMl0saVsyXSkpKSx1PW4oYyxhWzBdKSxmPW4oYyxvWzBdKSxoPW4oYyxzWzBdKSxwPW4oYyxsWzBdKSxkPXQocihhWzBdLGFbMF0pLHQocihhWzFdLGFbMV0pLHIoYVsyXSxhWzJdKSkpLG09bihkLGlbMF0pLGc9bihkLG9bMF0pLHY9bihkLHNbMF0pLHk9bihkLGxbMF0pLHg9dChyKG9bMF0sb1swXSksdChyKG9bMV0sb1sxXSkscihvWzJdLG9bMl0pKSksYj1uKHgsaVswXSksXz1uKHgsYVswXSksdz1uKHgsc1swXSksVD1uKHgsbFswXSksaz10KHIoc1swXSxzWzBdKSx0KHIoc1sxXSxzWzFdKSxyKHNbMl0sc1syXSkpKSxBPW4oayxpWzBdKSxNPW4oayxhWzBdKSxTPW4oayxvWzBdKSxFPW4oayxsWzBdKSxMPXQocihsWzBdLGxbMF0pLHQocihsWzFdLGxbMV0pLHIobFsyXSxsWzJdKSkpLEM9bihMLGlbMF0pLFA9bihMLGFbMF0pLEk9bihMLG9bMF0pLE89bihMLHNbMF0pLHo9dCh0KHQobih0KG4oZShPLEUpLG9bMV0pLHQobihlKEksVCksLXNbMV0pLG4oZShTLHcpLGxbMV0pKSksYVsyXSksdChuKHQobihlKE8sRSksYVsxXSksdChuKGUoUCx5KSwtc1sxXSksbihlKE0sdiksbFsxXSkpKSwtb1syXSksbih0KG4oZShJLFQpLGFbMV0pLHQobihlKFAseSksLW9bMV0pLG4oZShfLGcpLGxbMV0pKSksc1syXSkpKSx0KG4odChuKGUoUyx3KSxhWzFdKSx0KG4oZShNLHYpLC1vWzFdKSxuKGUoXyxnKSxzWzFdKSkpLC1sWzJdKSx0KG4odChuKGUoTyxFKSxhWzFdKSx0KG4oZShQLHkpLC1zWzFdKSxuKGUoTSx2KSxsWzFdKSkpLGlbMl0pLG4odChuKGUoTyxFKSxpWzFdKSx0KG4oZShDLHApLC1zWzFdKSxuKGUoQSxoKSxsWzFdKSkpLC1hWzJdKSkpKSx0KHQobih0KG4oZShQLHkpLGlbMV0pLHQobihlKEMscCksLWFbMV0pLG4oZShtLHUpLGxbMV0pKSksc1syXSksdChuKHQobihlKE0sdiksaVsxXSksdChuKGUoQSxoKSwtYVsxXSksbihlKG0sdSksc1sxXSkpKSwtbFsyXSksbih0KG4oZShTLHcpLGFbMV0pLHQobihlKE0sdiksLW9bMV0pLG4oZShfLGcpLHNbMV0pKSksaVsyXSkpKSx0KG4odChuKGUoUyx3KSxpWzFdKSx0KG4oZShBLGgpLC1vWzFdKSxuKGUoYixmKSxzWzFdKSkpLC1hWzJdKSx0KG4odChuKGUoTSx2KSxpWzFdKSx0KG4oZShBLGgpLC1hWzFdKSxuKGUobSx1KSxzWzFdKSkpLG9bMl0pLG4odChuKGUoXyxnKSxpWzFdKSx0KG4oZShiLGYpLC1hWzFdKSxuKGUobSx1KSxvWzFdKSkpLC1zWzJdKSkpKSksRD10KHQodChuKHQobihlKE8sRSksb1sxXSksdChuKGUoSSxUKSwtc1sxXSksbihlKFMsdyksbFsxXSkpKSxpWzJdKSxuKHQobihlKE8sRSksaVsxXSksdChuKGUoQyxwKSwtc1sxXSksbihlKEEsaCksbFsxXSkpKSwtb1syXSkpLHQobih0KG4oZShJLFQpLGlbMV0pLHQobihlKEMscCksLW9bMV0pLG4oZShiLGYpLGxbMV0pKSksc1syXSksbih0KG4oZShTLHcpLGlbMV0pLHQobihlKEEsaCksLW9bMV0pLG4oZShiLGYpLHNbMV0pKSksLWxbMl0pKSksdCh0KG4odChuKGUoSSxUKSxhWzFdKSx0KG4oZShQLHkpLC1vWzFdKSxuKGUoXyxnKSxsWzFdKSkpLGlbMl0pLG4odChuKGUoSSxUKSxpWzFdKSx0KG4oZShDLHApLC1vWzFdKSxuKGUoYixmKSxsWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFAseSksaVsxXSksdChuKGUoQyxwKSwtYVsxXSksbihlKG0sdSksbFsxXSkpKSxvWzJdKSxuKHQobihlKF8sZyksaVsxXSksdChuKGUoYixmKSwtYVsxXSksbihlKG0sdSksb1sxXSkpKSwtbFsyXSkpKSksUj1lKHosRCk7cmV0dXJuIFJbUi5sZW5ndGgtMV19fWZ1bmN0aW9uIGYodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMsbCxjKXt2YXIgdT10KHQocihpWzBdLGlbMF0pLHIoaVsxXSxpWzFdKSksdChyKGlbMl0saVsyXSkscihpWzNdLGlbM10pKSksZj1uKHUsYVswXSksaD1uKHUsb1swXSkscD1uKHUsc1swXSksZD1uKHUsbFswXSksbT1uKHUsY1swXSksZz10KHQocihhWzBdLGFbMF0pLHIoYVsxXSxhWzFdKSksdChyKGFbMl0sYVsyXSkscihhWzNdLGFbM10pKSksdj1uKGcsaVswXSkseT1uKGcsb1swXSkseD1uKGcsc1swXSksYj1uKGcsbFswXSksXz1uKGcsY1swXSksdz10KHQocihvWzBdLG9bMF0pLHIob1sxXSxvWzFdKSksdChyKG9bMl0sb1syXSkscihvWzNdLG9bM10pKSksVD1uKHcsaVswXSksaz1uKHcsYVswXSksQT1uKHcsc1swXSksTT1uKHcsbFswXSksUz1uKHcsY1swXSksRT10KHQocihzWzBdLHNbMF0pLHIoc1sxXSxzWzFdKSksdChyKHNbMl0sc1syXSkscihzWzNdLHNbM10pKSksTD1uKEUsaVswXSksQz1uKEUsYVswXSksUD1uKEUsb1swXSksST1uKEUsbFswXSksTz1uKEUsY1swXSksej10KHQocihsWzBdLGxbMF0pLHIobFsxXSxsWzFdKSksdChyKGxbMl0sbFsyXSkscihsWzNdLGxbM10pKSksRD1uKHosaVswXSksUj1uKHosYVswXSksRj1uKHosb1swXSksQj1uKHosc1swXSksTj1uKHosY1swXSksaj10KHQocihjWzBdLGNbMF0pLHIoY1sxXSxjWzFdKSksdChyKGNbMl0sY1syXSkscihjWzNdLGNbM10pKSksVT1uKGosaVswXSksVj1uKGosYVswXSksSD1uKGosb1swXSkscT1uKGosc1swXSksRz1uKGosbFswXSksWT10KHQodChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxvWzJdKSxuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksLWNbMl0pKSksYVszXSksdChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksLWNbMl0pKSksLW9bM10pLG4odCh0KG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLGFbMl0pLG4odChuKGUoRyxOKSxhWzFdKSx0KG4oZShWLF8pLC1sWzFdKSxuKGUoUixiKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxsWzJdKSxuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSwtY1syXSkpKSxzWzNdKSkpLHQodChuKHQodChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxhWzJdKSxuKHQobihlKHEsTyksYVsxXSksdChuKGUoVixfKSwtc1sxXSksbihlKEMseCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksLWNbMl0pKSksLWxbM10pLG4odCh0KG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLGFbMl0pLG4odChuKGUoQixJKSxhWzFdKSx0KG4oZShSLGIpLC1zWzFdKSxuKGUoQyx4KSxsWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksYVsxXSksdChuKGUoQyx4KSwtb1sxXSksbihlKGsseSksc1sxXSkpKSwtbFsyXSkpKSxjWzNdKSksdChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksLWNbMl0pKSksaVszXSksbih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxpWzFdKSx0KG4oZShELGQpLC1zWzFdKSxuKGUoTCxwKSxsWzFdKSkpLC1jWzJdKSkpLC1hWzNdKSkpKSx0KHQodChuKHQodChuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksbFsyXSksbih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksLWNbMl0pKSksc1szXSksbih0KHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksaVsyXSksbih0KG4oZShxLE8pLGlbMV0pLHQobihlKFUsbSksLXNbMV0pLG4oZShMLHApLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1jWzJdKSkpLC1sWzNdKSksdChuKHQodChuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSxpWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksc1syXSksbih0KG4oZShDLHgpLGlbMV0pLHQobihlKEwscCksLWFbMV0pLG4oZSh2LGYpLHNbMV0pKSksLWxbMl0pKSksY1szXSksbih0KHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksYVsyXSksbih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxhWzFdKSx0KG4oZShWLF8pLC1vWzFdKSxuKGUoayx5KSxjWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLC1jWzJdKSkpLGlbM10pKSksdCh0KG4odCh0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtY1syXSkpKSwtYVszXSksbih0KHQobih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksaVsyXSksbih0KG4oZShxLE8pLGlbMV0pLHQobihlKFUsbSksLXNbMV0pLG4oZShMLHApLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1jWzJdKSkpLG9bM10pKSx0KG4odCh0KG4odChuKGUoSCxTKSxhWzFdKSx0KG4oZShWLF8pLC1vWzFdKSxuKGUoayx5KSxjWzFdKSkpLGlbMl0pLG4odChuKGUoSCxTKSxpWzFdKSx0KG4oZShVLG0pLC1vWzFdKSxuKGUoVCxoKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtY1syXSkpKSwtc1szXSksbih0KHQobih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksaVsyXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1zWzJdKSkpLGNbM10pKSkpKSxXPXQodCh0KG4odCh0KG4odChuKGUoRyxOKSxzWzFdKSx0KG4oZShxLE8pLC1sWzFdKSxuKGUoQixJKSxjWzFdKSkpLG9bMl0pLG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLC1zWzJdKSksdChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxsWzJdKSxuKHQobihlKEIsSSksb1sxXSksdChuKGUoRixNKSwtc1sxXSksbihlKFAsQSksbFsxXSkpKSwtY1syXSkpKSxpWzNdKSx0KG4odCh0KG4odChuKGUoRyxOKSxzWzFdKSx0KG4oZShxLE8pLC1sWzFdKSxuKGUoQixJKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1zWzJdKSksdChuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSxsWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtY1syXSkpKSwtb1szXSksbih0KHQobih0KG4oZShHLE4pLG9bMV0pLHQobihlKEgsUyksLWxbMV0pLG4oZShGLE0pLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxpWzFdKSx0KG4oZShVLG0pLC1vWzFdKSxuKGUoVCxoKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1jWzJdKSkpLHNbM10pKSksdCh0KG4odCh0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtY1syXSkpKSwtbFszXSksbih0KHQobih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxpWzFdKSx0KG4oZShMLHApLC1vWzFdKSxuKGUoVCxoKSxzWzFdKSkpLC1sWzJdKSkpLGNbM10pKSx0KG4odCh0KG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLGFbMl0pLG4odChuKGUoRyxOKSxhWzFdKSx0KG4oZShWLF8pLC1sWzFdKSxuKGUoUixiKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxsWzJdKSxuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSwtY1syXSkpKSxpWzNdKSxuKHQodChuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksbFsyXSksbih0KG4oZShGLE0pLGlbMV0pLHQobihlKEQsZCksLW9bMV0pLG4oZShULGgpLGxbMV0pKSksLWNbMl0pKSksLWFbM10pKSkpLHQodCh0KG4odCh0KG4odChuKGUoRyxOKSxhWzFdKSx0KG4oZShWLF8pLC1sWzFdKSxuKGUoUixiKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxsWzJdKSxuKHQobihlKFIsYiksaVsxXSksdChuKGUoRCxkKSwtYVsxXSksbihlKHYsZiksbFsxXSkpKSwtY1syXSkpKSxvWzNdKSxuKHQodChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLWNbMl0pKSksLWxbM10pKSx0KG4odCh0KG4odChuKGUoRixNKSxhWzFdKSx0KG4oZShSLGIpLC1vWzFdKSxuKGUoayx5KSxsWzFdKSkpLGlbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFIsYiksaVsxXSksdChuKGUoRCxkKSwtYVsxXSksbihlKHYsZiksbFsxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtbFsyXSkpKSxjWzNdKSxuKHQodChuKHQobihlKEIsSSksb1sxXSksdChuKGUoRixNKSwtc1sxXSksbihlKFAsQSksbFsxXSkpKSxhWzJdKSxuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSwtb1syXSkpLHQobih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksLWxbMl0pKSksaVszXSkpKSx0KHQobih0KHQobih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxpWzFdKSx0KG4oZShMLHApLC1vWzFdKSxuKGUoVCxoKSxzWzFdKSkpLC1sWzJdKSkpLC1hWzNdKSxuKHQodChuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSxpWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksc1syXSksbih0KG4oZShDLHgpLGlbMV0pLHQobihlKEwscCksLWFbMV0pLG4oZSh2LGYpLHNbMV0pKSksLWxbMl0pKSksb1szXSkpLHQobih0KHQobih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksaVsyXSksbih0KG4oZShGLE0pLGlbMV0pLHQobihlKEQsZCksLW9bMV0pLG4oZShULGgpLGxbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1sWzJdKSkpLC1zWzNdKSxuKHQodChuKHQobihlKFAsQSksYVsxXSksdChuKGUoQyx4KSwtb1sxXSksbihlKGsseSksc1sxXSkpKSxpWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShDLHgpLGlbMV0pLHQobihlKEwscCksLWFbMV0pLG4oZSh2LGYpLHNbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLXNbMl0pKSksbFszXSkpKSkpLFg9ZShZLFcpO3JldHVybiBYW1gubGVuZ3RoLTFdfX12YXIgaD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH1dO2Z1bmN0aW9uIHAodCl7dmFyIGU9aFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPWhbdC5sZW5ndGhdPXModC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1mdW5jdGlvbiBkKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKGUscixsLGMsdSxmKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIG4oZSxyKTtjYXNlIDM6cmV0dXJuIGkoZSxyLGwpO2Nhc2UgNDpyZXR1cm4gYShlLHIsbCxjKTtjYXNlIDU6cmV0dXJuIG8oZSxyLGwsYyx1KTtjYXNlIDY6cmV0dXJuIHMoZSxyLGwsYyx1LGYpfWZvcih2YXIgaD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscD0wO3A8YXJndW1lbnRzLmxlbmd0aDsrK3ApaFtwXT1hcmd1bWVudHNbcF07cmV0dXJuIHQoaCl9fSFmdW5jdGlvbigpe2Zvcig7aC5sZW5ndGg8PTY7KWgucHVzaChzKGgubGVuZ3RoKSk7ZS5leHBvcnRzPWQuYXBwbHkodm9pZCAwLFtwXS5jb25jYXQoaCkpO2Zvcih2YXIgdD0wO3Q8PTY7Kyt0KWUuZXhwb3J0c1t0XT1oW3RdfSgpfSx7InJvYnVzdC1zY2FsZSI6Mjg2LCJyb2J1c3Qtc3VidHJhY3QiOjI4OCwicm9idXN0LXN1bSI6Mjg5LCJ0d28tcHJvZHVjdCI6MzA2fV0sMjgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kZXRlcm1pbmFudCIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9Mj09PXQ/YTpvO3JldHVybiBlKHQ8Mz9uW3RdOm4pfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuW3QoW1srclswXSwrZVswXVsxXV0sWytyWzFdLCtlWzFdWzFdXV0pLHQoW1srZVswXVswXSwrclswXV0sWytlWzFdWzBdLCtyWzFdXV0pLHQoZSldfX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblt0KFtbK3JbMF0sK2VbMF1bMV0sK2VbMF1bMl1dLFsrclsxXSwrZVsxXVsxXSwrZVsxXVsyXV0sWytyWzJdLCtlWzJdWzFdLCtlWzJdWzJdXV0pLHQoW1srZVswXVswXSwrclswXSwrZVswXVsyXV0sWytlWzFdWzBdLCtyWzFdLCtlWzFdWzJdXSxbK2VbMl1bMF0sK3JbMl0sK2VbMl1bMl1dXSksdChbWytlWzBdWzBdLCtlWzBdWzFdLCtyWzBdXSxbK2VbMV1bMF0sK2VbMV1bMV0sK3JbMV1dLFsrZVsyXVswXSwrZVsyXVsxXSwrclsyXV1dKSx0KGUpXX19dmFyIHM9W2Z1bmN0aW9uKCl7cmV0dXJuW1swXV19LGZ1bmN0aW9uKHQsZSl7cmV0dXJuW1tlWzBdXSxbdFswXVswXV1dfV07ZnVuY3Rpb24gbCh0LGUscixuLGksYSl7cmV0dXJuIGZ1bmN0aW9uKG8scyl7c3dpdGNoKG8ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQobyxzKTtjYXNlIDE6cmV0dXJuIGUobyxzKTtjYXNlIDI6cmV0dXJuIHIobyxzKTtjYXNlIDM6cmV0dXJuIG4obyxzKX12YXIgbD1pW28ubGVuZ3RoXTtyZXR1cm4gbHx8KGw9aVtvLmxlbmd0aF09YShvLmxlbmd0aCkpLGwobyxzKX19IWZ1bmN0aW9uKCl7Zm9yKDtzLmxlbmd0aDw9Mzspcy5wdXNoKGkocy5sZW5ndGgpKTtlLmV4cG9ydHM9bC5hcHBseSh2b2lkIDAscy5jb25jYXQoW3MsaV0pKTtmb3IodmFyIHQ9MDt0PDM7Kyt0KWUuZXhwb3J0c1t0XT1zW3RdfSgpfSx7InJvYnVzdC1kZXRlcm1pbmFudCI6MjgwfV0sMjg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKSxvPXQoInJvYnVzdC1zdWJ0cmFjdCIpO2Z1bmN0aW9uIHModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHIsaSxhKXt2YXIgbz10KHQoZShpWzFdLGFbMF0pLGUoLWFbMV0saVswXSkpLHQoZShyWzFdLGlbMF0pLGUoLWlbMV0sclswXSkpKSxzPXQoZShyWzFdLGFbMF0pLGUoLWFbMV0sclswXSkpLGw9bihvLHMpO3JldHVybiBsW2wubGVuZ3RoLTFdfX1mdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD10KHQocih0KGUob1sxXSxzWzBdKSxlKC1zWzFdLG9bMF0pKSxhWzJdKSx0KHIodChlKGFbMV0sc1swXSksZSgtc1sxXSxhWzBdKSksLW9bMl0pLHIodChlKGFbMV0sb1swXSksZSgtb1sxXSxhWzBdKSksc1syXSkpKSx0KHIodChlKGFbMV0sc1swXSksZSgtc1sxXSxhWzBdKSksaVsyXSksdChyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLC1hWzJdKSxyKHQoZShpWzFdLGFbMF0pLGUoLWFbMV0saVswXSkpLHNbMl0pKSkpLGM9dCh0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLHNbMl0pKSksdChyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxvWzJdKSkpKSx1PW4obCxjKTtyZXR1cm4gdVt1Lmxlbmd0aC0xXX19ZnVuY3Rpb24gYyh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8scyxsKXt2YXIgYz10KHQodChyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxvWzJdKSx0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksLXNbMl0pLHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksbFsyXSkpKSxhWzNdKSx0KHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSwtc1syXSkscih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSxsWzJdKSkpLC1vWzNdKSxyKHQocih0KGUob1sxXSxsWzBdKSxlKC1sWzFdLG9bMF0pKSxhWzJdKSx0KHIodChlKGFbMV0sbFswXSksZSgtbFsxXSxhWzBdKSksLW9bMl0pLHIodChlKGFbMV0sb1swXSksZSgtb1sxXSxhWzBdKSksbFsyXSkpKSxzWzNdKSkpLHQocih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLHNbMl0pKSksLWxbM10pLHQocih0KHIodChlKHNbMV0sbFswXSksZSgtbFsxXSxzWzBdKSksYVsyXSksdChyKHQoZShhWzFdLGxbMF0pLGUoLWxbMV0sYVswXSkpLC1zWzJdKSxyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGxbMl0pKSksaVszXSkscih0KHIodChlKHNbMV0sbFswXSksZSgtbFsxXSxzWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1zWzJdKSxyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLGxbMl0pKSksLWFbM10pKSkpLHQodChyKHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksbFsyXSkpKSxzWzNdKSx0KHIodChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxzWzJdKSkpLC1sWzNdKSxyKHQocih0KGUob1sxXSxzWzBdKSxlKC1zWzFdLG9bMF0pKSxhWzJdKSx0KHIodChlKGFbMV0sc1swXSksZSgtc1sxXSxhWzBdKSksLW9bMl0pLHIodChlKGFbMV0sb1swXSksZSgtb1sxXSxhWzBdKSksc1syXSkpKSxpWzNdKSkpLHQocih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLHNbMl0pKSksLWFbM10pLHQocih0KHIodChlKGFbMV0sc1swXSksZSgtc1sxXSxhWzBdKSksaVsyXSksdChyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLC1hWzJdKSxyKHQoZShpWzFdLGFbMF0pLGUoLWFbMV0saVswXSkpLHNbMl0pKSksb1szXSkscih0KHIodChlKGFbMV0sb1swXSksZSgtb1sxXSxhWzBdKSksaVsyXSksdChyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLC1hWzJdKSxyKHQoZShpWzFdLGFbMF0pLGUoLWFbMV0saVswXSkpLG9bMl0pKSksLXNbM10pKSkpKSx1PXQodCh0KHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLG9bMl0pLHQocih0KGUob1sxXSxsWzBdKSxlKC1sWzFdLG9bMF0pKSwtc1syXSkscih0KGUob1sxXSxzWzBdKSxlKC1zWzFdLG9bMF0pKSxsWzJdKSkpLGlbM10pLHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtc1syXSkscih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSxsWzJdKSkpLC1vWzNdKSksdChyKHQocih0KGUob1sxXSxsWzBdKSxlKC1sWzFdLG9bMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLW9bMl0pLHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksbFsyXSkpKSxzWzNdKSxyKHQocih0KGUob1sxXSxzWzBdKSxlKC1zWzFdLG9bMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sc1swXSksZSgtc1sxXSxpWzBdKSksLW9bMl0pLHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksc1syXSkpKSwtbFszXSkpKSx0KHQocih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLGxbMF0pLGUoLWxbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGxbMl0pKSksaVszXSkscih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLGxbMl0pKSksLWFbM10pKSx0KHIodChyKHQoZShhWzFdLGxbMF0pLGUoLWxbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxsWzJdKSkpLG9bM10pLHIodChyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxvWzJdKSkpLC1sWzNdKSkpKSxmPW4oYyx1KTtyZXR1cm4gZltmLmxlbmd0aC0xXX19ZnVuY3Rpb24gdSh0KXtyZXR1cm4oMz09PXQ/czo0PT09dD9sOmMpKGksbixhLG8pfXZhciBmPXUoMyksaD11KDQpLHA9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHRbMV0tclsxXSkqKGVbMF0tclswXSksYT0odFswXS1yWzBdKSooZVsxXS1yWzFdKSxvPWktYTtpZihpPjApe2lmKGE8PTApcmV0dXJuIG87bj1pK2F9ZWxzZXtpZighKGk8MCkpcmV0dXJuIG87aWYoYT49MClyZXR1cm4gbztuPS0oaSthKX12YXIgcz0zMzMwNjY5MDczODc1NDcxNmUtMzIqbjtyZXR1cm4gbz49c3x8bzw9LXM/bzpmKHQsZSxyKX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1uWzBdLGE9ZVswXS1uWzBdLG89clswXS1uWzBdLHM9dFsxXS1uWzFdLGw9ZVsxXS1uWzFdLGM9clsxXS1uWzFdLHU9dFsyXS1uWzJdLGY9ZVsyXS1uWzJdLHA9clsyXS1uWzJdLGQ9YSpjLG09bypsLGc9bypzLHY9aSpjLHk9aSpsLHg9YSpzLGI9dSooZC1tKStmKihnLXYpK3AqKHkteCksXz03NzcxNTYxMTcyMzc2MTAzZS0zMSooKE1hdGguYWJzKGQpK01hdGguYWJzKG0pKSpNYXRoLmFicyh1KSsoTWF0aC5hYnMoZykrTWF0aC5hYnModikpKk1hdGguYWJzKGYpKyhNYXRoLmFicyh5KStNYXRoLmFicyh4KSkqTWF0aC5hYnMocCkpO3JldHVybiBiPl98fC1iPl8/YjpoKHQsZSxyLG4pfV07ZnVuY3Rpb24gZCh0KXt2YXIgZT1wW3QubGVuZ3RoXTtyZXR1cm4gZXx8KGU9cFt0Lmxlbmd0aF09dSh0Lmxlbmd0aCkpLGUuYXBwbHkodm9pZCAwLHQpfWZ1bmN0aW9uIG0odCxlLHIsbixpLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKGUscixzLGwsYyl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiBuKGUscik7Y2FzZSAzOnJldHVybiBpKGUscixzKTtjYXNlIDQ6cmV0dXJuIGEoZSxyLHMsbCk7Y2FzZSA1OnJldHVybiBvKGUscixzLGwsYyl9Zm9yKHZhciB1PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxmPTA7Zjxhcmd1bWVudHMubGVuZ3RoOysrZil1W2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gdCh1KX19IWZ1bmN0aW9uKCl7Zm9yKDtwLmxlbmd0aDw9NTspcC5wdXNoKHUocC5sZW5ndGgpKTtlLmV4cG9ydHM9bS5hcHBseSh2b2lkIDAsW2RdLmNvbmNhdChwKSk7Zm9yKHZhciB0PTA7dDw9NTsrK3QpZS5leHBvcnRzW3RdPXBbdF19KCl9LHsicm9idXN0LXNjYWxlIjoyODYsInJvYnVzdC1zdWJ0cmFjdCI6Mjg4LCJyb2J1c3Qtc3VtIjoyODksInR3by1wcm9kdWN0IjozMDZ9XSwyODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LXN1bSIpLGk9dCgicm9idXN0LXNjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBpKGUsdFswXSk7aWYoMT09PWUubGVuZ3RoKXJldHVybiBpKHQsZVswXSk7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuWzBdO3ZhciByPVswXTtpZih0Lmxlbmd0aDxlLmxlbmd0aClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSlyPW4ocixpKGUsdFthXSkpO2Vsc2UgZm9yKGE9MDthPGUubGVuZ3RoOysrYSlyPW4ocixpKHQsZVthXSkpO3JldHVybiByfX0seyJyb2J1c3Qtc2NhbGUiOjI4Niwicm9idXN0LXN1bSI6Mjg5fV0sMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJ0d28tc3VtIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMT09PXIpe3ZhciBhPW4odFswXSxlKTtyZXR1cm4gYVswXT9hOlthWzFdXX12YXIgbz1uZXcgQXJyYXkoMipyKSxzPVsuMSwuMV0sbD1bLjEsLjFdLGM9MDtuKHRbMF0sZSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO2Zvcih2YXIgdT0xO3U8cjsrK3Upe24odFt1XSxlLGwpO3ZhciBmPXNbMV07aShmLGxbMF0scyksc1swXSYmKG9bYysrXT1zWzBdKTt2YXIgaD1sWzFdLHA9c1sxXSxkPWgrcCxtPXAtKGQtaCk7c1sxXT1kLG0mJihvW2MrK109bSl9c1sxXSYmKG9bYysrXT1zWzFdKTswPT09YyYmKG9bYysrXT0wKTtyZXR1cm4gby5sZW5ndGg9YyxvfX0seyJ0d28tcHJvZHVjdCI6MzA2LCJ0d28tc3VtIjozMDd9XSwyODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxyLGkpLG89bihlLHIsaSk7aWYoYT4wJiZvPjB8fGE8MCYmbzwwKXJldHVybiExO3ZhciBzPW4ocix0LGUpLGw9bihpLHQsZSk7aWYocz4wJiZsPjB8fHM8MCYmbDwwKXJldHVybiExO2lmKDA9PT1hJiYwPT09byYmMD09PXMmJjA9PT1sKXJldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPDI7KytpKXt2YXIgYT10W2ldLG89ZVtpXSxzPU1hdGgubWluKGEsbyksbD1NYXRoLm1heChhLG8pLGM9cltpXSx1PW5baV0sZj1NYXRoLm1pbihjLHUpO2lmKE1hdGgubWF4KGMsdSk8c3x8bDxmKXJldHVybiExfXJldHVybiEwfSh0LGUscixpKTtyZXR1cm4hMH07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM119LHsicm9idXN0LW9yaWVudGF0aW9uIjoyODR9XSwyODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sLWVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGY9dFtsXSxoPXUoZikscD0tZVtjXSxkPXUocCk7aDxkPyhhPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGE9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7bDxyJiZoPGR8fGM+PW4/KGk9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooaT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKTt2YXIgbSxnLHY9aSthLHk9di1pLHg9YS15LGI9eCxfPXY7Zm9yKDtsPHImJmM8bjspaDxkPyhpPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KHY9aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bTtmb3IoO2w8cjspKHg9KGE9YiktKHk9KHY9KGk9ZikrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW0sKGwrPTEpPHImJihmPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0odj0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bSwoYys9MSk8biYmKHA9LWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sMjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLGVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGY9dFtsXSxoPXUoZikscD1lW2NdLGQ9dShwKTtoPGQ/KGE9ZiwobCs9MSk8ciYmKGY9dFtsXSxoPXUoZikpKTooYT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO2w8ciYmaDxkfHxjPj1uPyhpPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTt2YXIgbSxnLHY9aSthLHk9di1pLHg9YS15LGI9eCxfPXY7Zm9yKDtsPHImJmM8bjspaDxkPyhpPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKSwoeD0oYT1iKS0oeT0odj1pK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChtPV8rdiktKGc9bS1fKSkrKHYtZyksXz1tO2Zvcig7bDxyOykoeD0oYT1iKS0oeT0odj0oaT1mKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bSwobCs9MSk8ciYmKGY9dFtsXSk7Zm9yKDtjPG47KSh4PShhPWIpLSh5PSh2PShpPXApK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChtPV8rdiktKGc9bS1fKSkrKHYtZyksXz1tLChjKz0xKTxuJiYocD1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDI5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KSl9O3ZhciBuPXQoImJvdW5kYXJ5LWNlbGxzIiksaT10KCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Iil9LHsiYm91bmRhcnktY2VsbHMiOjM0LCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4IjoyNzZ9XSwyOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3I9cnx8MCx2b2lkIDA9PT1zJiYocz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXI9MHxNYXRoLm1heChyLHRbbl0ubGVuZ3RoKTtyZXR1cm4gci0xfSh0KSk7aWYoMD09PXQubGVuZ3RofHxzPDEpcmV0dXJue2NlbGxzOltdLHZlcnRleElkczpbXSx2ZXJ0ZXhXZWlnaHRzOltdfTt2YXIgbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWkubWFsbG9jVWludDgociksYT0wO2E8cjsrK2EpblthXT10W2FdPGV8MDtyZXR1cm4gbn0oZSwrciksYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUqKGUrMSkvMipyfDAscz1pLm1hbGxvY1VpbnQzMigyKm8pLGw9MCxjPTA7YzxyOysrYylmb3IodmFyIHU9dFtjXSxmPShlPXUubGVuZ3RoLDApO2Y8ZTsrK2YpZm9yKHZhciBoPTA7aDxmOysraCl7dmFyIHA9dVtoXSxkPXVbZl07c1tsKytdPTB8TWF0aC5taW4ocCxkKSxzW2wrK109MHxNYXRoLm1heChwLGQpfWEobihzLFtsLzJ8MCwyXSkpO3ZhciBtPTI7Zm9yKGM9MjtjPGw7Yys9MilzW2MtMl09PT1zW2NdJiZzW2MtMV09PT1zW2MrMV18fChzW20rK109c1tjXSxzW20rK109c1tjKzFdKTtyZXR1cm4gbihzLFttLzJ8MCwyXSl9KHQscyksdT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89dC5kYXRhLHM9dC5zaGFwZVswXSxsPWkubWFsbG9jRG91YmxlKHMpLGM9MCx1PTA7dTxzOysrdSl7dmFyIGY9b1syKnVdLGg9b1syKnUrMV07aWYocltmXSE9PXJbaF0pe3ZhciBwPWVbZl0sZD1lW2hdO29bMipjXT1mLG9bMipjKzFdPWgsbFtjKytdPShkLWEpLyhkLXApfX1yZXR1cm4gdC5zaGFwZVswXT1jLG4obCxbY10pfShjLGUsbCwrciksZj1mdW5jdGlvbih0LGUpe3ZhciByPWkubWFsbG9jSW50MzIoMiplKSxuPXQuc2hhcGVbMF0sYT10LmRhdGE7clswXT0wO2Zvcih2YXIgbz0wLHM9MDtzPG47KytzKXt2YXIgbD1hWzIqc107aWYobCE9PW8pe2ZvcihyWzIqbysxXT1zOysrbzxsOylyWzIqb109cyxyWzIqbysxXT1zO3JbMipvXT1zfX1yWzIqbysxXT1uO2Zvcig7KytvPGU7KXJbMipvXT1yWzIqbysxXT1uO3JldHVybiByfShjLDB8ZS5sZW5ndGgpLGg9byhzKSh0LGMuZGF0YSxmLGwpLHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTB8dC5zaGFwZVswXSxyPXQuZGF0YSxuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPVtyWzIqaV0sclsyKmkrMV1dO3JldHVybiBufShjKSxkPVtdLnNsaWNlLmNhbGwodS5kYXRhLDAsdS5zaGFwZVswXSk7cmV0dXJuIGkuZnJlZShsKSxpLmZyZWUoYy5kYXRhKSxpLmZyZWUodS5kYXRhKSxpLmZyZWUoZikse2NlbGxzOmgsdmVydGV4SWRzOnAsdmVydGV4V2VpZ2h0czpkfX07dmFyIG49dCgibmRhcnJheSIpLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCJuZGFycmF5LXNvcnQiKSxvPXQoIi4vbGliL2NvZGVnZW4iKX0seyIuL2xpYi9jb2RlZ2VuIjoyOTIsbmRhcnJheToyNTksIm5kYXJyYXktc29ydCI6MjU4LCJ0eXBlZGFycmF5LXBvb2wiOjMwOH1dLDI5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF0oKX07dmFyIG49W2Z1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTA7YTxpOysrYSl0W2FdLmxlbmd0aDtyZXR1cm5bXX19LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUscixuKXtmb3IodmFyIGk9MHxNYXRoLm1pbihyLG4pLGE9MHxNYXRoLm1heChyLG4pLG89dFsyKmldLHM9dFsyKmkrMV07bzxzOyl7dmFyIGw9bytzPj4xLGM9ZVsyKmwrMV07aWYoYz09PWEpcmV0dXJuIGw7YTxjP3M9bDpvPWwrMX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7Zm9yKHZhciBhPWUubGVuZ3RoLG89W10scz0wO3M8YTsrK3Mpe3ZhciBsPWVbc107aWYoMj09PWwubGVuZ3RoKXt2YXIgYz0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpO2lmKDA9PT1jfHwzPT09Yyljb250aW51ZTtzd2l0Y2goYyl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnB1c2goW3QobixyLGxbMF0sbFsxXSldKTticmVhaztjYXNlIDI6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pXSl9fX1yZXR1cm4gb319LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUscixuKXtmb3IodmFyIGk9MHxNYXRoLm1pbihyLG4pLGE9MHxNYXRoLm1heChyLG4pLG89dFsyKmldLHM9dFsyKmkrMV07bzxzOyl7dmFyIGw9bytzPj4xLGM9ZVsyKmwrMV07aWYoYz09PWEpcmV0dXJuIGw7YTxjP3M9bDpvPWwrMX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7Zm9yKHZhciBhPWUubGVuZ3RoLG89W10scz0wO3M8YTsrK3Mpe3ZhciBsPWVbc10sYz1sLmxlbmd0aDtpZigzPT09Yyl7aWYoMD09PSh1PShpW2xbMF1dPDwwKSsoaVtsWzFdXTw8MSkrKGlbbFsyXV08PDIpKXx8Nz09PXUpY29udGludWU7c3dpdGNoKHUpe2Nhc2UgMDpicmVhaztjYXNlIDE6by5wdXNoKFt0KG4scixsWzBdLGxbMl0pLHQobixyLGxbMF0sbFsxXSldKTticmVhaztjYXNlIDI6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pLHQobixyLGxbMV0sbFsyXSldKTticmVhaztjYXNlIDM6by5wdXNoKFt0KG4scixsWzBdLGxbMl0pLHQobixyLGxbMV0sbFsyXSldKTticmVhaztjYXNlIDQ6by5wdXNoKFt0KG4scixsWzJdLGxbMV0pLHQobixyLGxbMl0sbFswXSldKTticmVhaztjYXNlIDU6by5wdXNoKFt0KG4scixsWzJdLGxbMV0pLHQobixyLGxbMF0sbFsxXSldKTticmVhaztjYXNlIDY6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pLHQobixyLGxbMl0sbFswXSldKX19ZWxzZSBpZigyPT09Yyl7dmFyIHU7aWYoMD09PSh1PShpW2xbMF1dPDwwKSsoaVtsWzFdXTw8MSkpfHwzPT09dSljb250aW51ZTtzd2l0Y2godSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnB1c2goW3QobixyLGxbMF0sbFsxXSldKTticmVhaztjYXNlIDI6by5wdXNoKFt0KG4scixsWzFdLGxbMF0pXSl9fX1yZXR1cm4gb319LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUscixuKXtmb3IodmFyIGk9MHxNYXRoLm1pbihyLG4pLGE9MHxNYXRoLm1heChyLG4pLG89dFsyKmldLHM9dFsyKmkrMV07bzxzOyl7dmFyIGw9bytzPj4xLGM9ZVsyKmwrMV07aWYoYz09PWEpcmV0dXJuIGw7YTxjP3M9bDpvPWwrMX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7Zm9yKHZhciBhPWUubGVuZ3RoLG89W10scz0wO3M8YTsrK3Mpe3ZhciBsPWVbc10sYz1sLmxlbmd0aDtpZig0PT09Yyl7aWYoMD09PSh1PShpW2xbMF1dPDwwKSsoaVtsWzFdXTw8MSkrKGlbbFsyXV08PDIpKyhpW2xbM11dPDwzKSl8fDE1PT09dSljb250aW51ZTtzd2l0Y2godSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnB1c2goW3QobixyLGxbMF0sbFsxXSksdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzBdLGxbM10pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzJdKSx0KG4scixsWzFdLGxbMF0pLHQobixyLGxbMV0sbFszXSldKTticmVhaztjYXNlIDM6by5wdXNoKFt0KG4scixsWzFdLGxbMl0pLHQobixyLGxbMF0sbFsyXSksdChuLHIsbFswXSxsWzNdKV0sW3QobixyLGxbMV0sbFszXSksdChuLHIsbFsxXSxsWzJdKSx0KG4scixsWzBdLGxbM10pXSk7YnJlYWs7Y2FzZSA0Om8ucHVzaChbdChuLHIsbFsyXSxsWzBdKSx0KG4scixsWzJdLGxbMV0pLHQobixyLGxbMl0sbFszXSldKTticmVhaztjYXNlIDU6by5wdXNoKFt0KG4scixsWzBdLGxbMV0pLHQobixyLGxbMl0sbFsxXSksdChuLHIsbFswXSxsWzNdKV0sW3QobixyLGxbMl0sbFsxXSksdChuLHIsbFsyXSxsWzNdKSx0KG4scixsWzBdLGxbM10pXSk7YnJlYWs7Y2FzZSA2Om8ucHVzaChbdChuLHIsbFsyXSxsWzBdKSx0KG4scixsWzFdLGxbMF0pLHQobixyLGxbMV0sbFszXSldLFt0KG4scixsWzJdLGxbM10pLHQobixyLGxbMl0sbFswXSksdChuLHIsbFsxXSxsWzNdKV0pO2JyZWFrO2Nhc2UgNzpvLnB1c2goW3QobixyLGxbMF0sbFszXSksdChuLHIsbFsxXSxsWzNdKSx0KG4scixsWzJdLGxbM10pXSk7YnJlYWs7Y2FzZSA4Om8ucHVzaChbdChuLHIsbFszXSxsWzFdKSx0KG4scixsWzNdLGxbMF0pLHQobixyLGxbM10sbFsyXSldKTticmVhaztjYXNlIDk6by5wdXNoKFt0KG4scixsWzNdLGxbMV0pLHQobixyLGxbMF0sbFsxXSksdChuLHIsbFswXSxsWzJdKV0sW3QobixyLGxbM10sbFsyXSksdChuLHIsbFszXSxsWzFdKSx0KG4scixsWzBdLGxbMl0pXSk7YnJlYWs7Y2FzZSAxMDpvLnB1c2goW3QobixyLGxbMV0sbFswXSksdChuLHIsbFszXSxsWzBdKSx0KG4scixsWzFdLGxbMl0pXSxbdChuLHIsbFszXSxsWzBdKSx0KG4scixsWzNdLGxbMl0pLHQobixyLGxbMV0sbFsyXSldKTticmVhaztjYXNlIDExOm8ucHVzaChbdChuLHIsbFsxXSxsWzJdKSx0KG4scixsWzBdLGxbMl0pLHQobixyLGxbM10sbFsyXSldKTticmVhaztjYXNlIDEyOm8ucHVzaChbdChuLHIsbFszXSxsWzBdKSx0KG4scixsWzJdLGxbMF0pLHQobixyLGxbMl0sbFsxXSldLFt0KG4scixsWzNdLGxbMV0pLHQobixyLGxbM10sbFswXSksdChuLHIsbFsyXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMTM6by5wdXNoKFt0KG4scixsWzBdLGxbMV0pLHQobixyLGxbMl0sbFsxXSksdChuLHIsbFszXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMTQ6by5wdXNoKFt0KG4scixsWzJdLGxbMF0pLHQobixyLGxbMV0sbFswXSksdChuLHIsbFszXSxsWzBdKV0pfX1lbHNlIGlmKDM9PT1jKXtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSsoaVtsWzJdXTw8MikpfHw3PT09dSljb250aW51ZTtzd2l0Y2godSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnB1c2goW3QobixyLGxbMF0sbFsyXSksdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMzpvLnB1c2goW3QobixyLGxbMF0sbFsyXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgNDpvLnB1c2goW3QobixyLGxbMl0sbFsxXSksdChuLHIsbFsyXSxsWzBdKV0pO2JyZWFrO2Nhc2UgNTpvLnB1c2goW3QobixyLGxbMl0sbFsxXSksdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgNjpvLnB1c2goW3QobixyLGxbMV0sbFswXSksdChuLHIsbFsyXSxsWzBdKV0pfX1lbHNlIGlmKDI9PT1jKXt2YXIgdTtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSl8fDM9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSldKX19fXJldHVybiBvfX1dfSx7fV0sMjkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJ1bmlvbi1maW5kIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQubGVuZ3RoLG49dC5sZW5ndGgtZS5sZW5ndGgsaT1NYXRoLm1pbjtpZihuKXJldHVybiBuO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybihzPXRbMF0rdFsxXS1lWzBdLWVbMV0pfHxpKHRbMF0sdFsxXSktaShlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgYT10WzBdK3RbMV0sbz1lWzBdK2VbMV07aWYocz1hK3RbMl0tKG8rZVsyXSkpcmV0dXJuIHM7dmFyIHMsbD1pKHRbMF0sdFsxXSksYz1pKGVbMF0sZVsxXSk7cmV0dXJuKHM9aShsLHRbMl0pLWkoYyxlWzJdKSl8fGkobCt0WzJdLGEpLWkoYytlWzJdLG8pO2RlZmF1bHQ6dmFyIHU9dC5zbGljZSgwKTt1LnNvcnQoKTt2YXIgZj1lLnNsaWNlKDApO2Yuc29ydCgpO2Zvcih2YXIgaD0wO2g8cjsrK2gpaWYobj11W2hdLWZbaF0pcmV0dXJuIG47cmV0dXJuIDB9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gYSh0WzBdLGVbMF0pfWZ1bmN0aW9uIHModCxlKXtpZihlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpbltpXT1bdFtpXSxlW2ldXTtuLnNvcnQobyk7Zm9yKGk9MDtpPHI7KytpKXRbaV09bltpXVswXSxlW2ldPW5baV1bMV07cmV0dXJuIHR9cmV0dXJuIHQuc29ydChhKSx0fWZ1bmN0aW9uIGwodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj0xO248cjsrK24pe3ZhciBpPXRbbl07aWYoYShpLHRbbi0xXSkpe2lmKG49PT1lKXtlKys7Y29udGludWV9dFtlKytdPWl9fXJldHVybiB0Lmxlbmd0aD1lLHR9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPS0xO3I8PW47KXt2YXIgbz1yK24+PjEscz1hKHRbb10sZSk7czw9MD8oMD09PXMmJihpPW8pLHI9bysxKTpzPjAmJihuPW8tMSl9cmV0dXJuIGl9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXT1bXTtmb3IodmFyIHM9W10sbD0oaT0wLGUubGVuZ3RoKTtpPGw7KytpKWZvcih2YXIgdT1lW2ldLGY9dS5sZW5ndGgsaD0xLHA9MTw8ZjtoPHA7KytoKXtzLmxlbmd0aD1uLnBvcENvdW50KGgpO2Zvcih2YXIgZD0wLG09MDttPGY7KyttKWgmMTw8bSYmKHNbZCsrXT11W21dKTt2YXIgZz1jKHQscyk7aWYoIShnPDApKWZvcig7cltnKytdLnB1c2goaSksIShnPj10Lmxlbmd0aHx8MCE9PWEodFtnXSxzKSk7KTt9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0LGUpe2lmKGU8MClyZXR1cm5bXTtmb3IodmFyIHI9W10saT0oMTw8ZSsxKS0xLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIG89dFthXSxsPWk7bDwxPDxvLmxlbmd0aDtsPW4ubmV4dENvbWJpbmF0aW9uKGwpKXtmb3IodmFyIGM9bmV3IEFycmF5KGUrMSksdT0wLGY9MDtmPG8ubGVuZ3RoOysrZilsJjE8PGYmJihjW3UrK109b1tmXSk7ci5wdXNoKGMpfXJldHVybiBzKHIpfXIuZGltZW5zaW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbillPXIoZSx0W25dLmxlbmd0aCk7cmV0dXJuIGUtMX0sci5jb3VudFZlcnRpY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPU1hdGgubWF4LG49MCxpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyllPXIoZSxhW29dKTtyZXR1cm4gZSsxfSxyLmNsb25lQ2VsbHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPXRbcl0uc2xpY2UoMCk7cmV0dXJuIGV9LHIuY29tcGFyZUNlbGxzPWEsci5ub3JtYWxpemU9cyxyLnVuaXF1ZT1sLHIuZmluZENlbGw9YyxyLmluY2lkZW5jZT11LHIuZHVhbD1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB1KGwoZih0LDApKSx0KTtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09W107bj0wO2Zvcih2YXIgaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pclthW29dXS5wdXNoKG4pO3JldHVybiByfSxyLmV4cGxvZGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wfGkubGVuZ3RoLG89MSxsPTE8PGE7bzxsOysrbyl7Zm9yKHZhciBjPVtdLHU9MDt1PGE7Kyt1KW8+Pj51JjEmJmMucHVzaChpW3VdKTtlLnB1c2goYyl9cmV0dXJuIHMoZSl9LHIuc2tlbGV0b249ZixyLmJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzsrK2Epe2Zvcih2YXIgbD1uZXcgQXJyYXkoaS5sZW5ndGgtMSksYz0wLHU9MDtjPG87KytjKWMhPT1hJiYobFt1KytdPWlbY10pO2UucHVzaChsKX1yZXR1cm4gcyhlKX0sci5jb25uZWN0ZWRDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IGkoZSksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT10W25dLG89MDtvPGEubGVuZ3RoOysrbylmb3IodmFyIHM9bysxO3M8YS5sZW5ndGg7KytzKXIubGluayhhW29dLGFbc10pO3ZhciBsPVtdLGM9ci5yYW5rcztmb3Iobj0wO248Yy5sZW5ndGg7KytuKWNbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIHU9ci5maW5kKHRbbl1bMF0pO2NbdV08MD8oY1t1XT1sLmxlbmd0aCxsLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6bFtjW3VdXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBsfSh0LGUpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1sKHMoZih0LDApKSkscj1uZXcgaShlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT10W25dLG89MDtvPGEubGVuZ3RoOysrbylmb3IodmFyIHU9YyhlLFthW29dXSksaD1vKzE7aDxhLmxlbmd0aDsrK2gpci5saW5rKHUsYyhlLFthW2hdXSkpO3ZhciBwPVtdLGQ9ci5yYW5rcztmb3Iobj0wO248ZC5sZW5ndGg7KytuKWRbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG09ci5maW5kKGMoZSxbdFtuXVswXV0pKTtkW21dPDA/KGRbbV09cC5sZW5ndGgscC5wdXNoKFt0W25dLnNsaWNlKDApXSkpOnBbZFttXV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gcH0odCl9fSx7ImJpdC10d2lkZGxlIjozMiwidW5pb24tZmluZCI6MzA5fV0sMjk0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzMyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MzJ9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjkzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiYml0LXR3aWRkbGUiOjI5NCxkdXA6MjkzLCJ1bmlvbi1maW5kIjoyOTZ9XSwyOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofSxuLnByb3RvdHlwZS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0sbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5yb290cztlW3RdIT09dDspe3ZhciByPWVbdF07ZVt0XT1lW3JdLHQ9cn1yZXR1cm4gdH0sbi5wcm90b3R5cGUubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSwyOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxmPTA7ZjxhOysrZilzW2ZdPWxbZl09LTEsY1tmXT0xLzAsdVtmXT0hMTtmb3IoZj0wO2Y8bzsrK2Ype3ZhciBoPXRbZl07aWYoMiE9PWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbXVzdCBiZSBhIGdyYXBoIik7dmFyIHA9aFsxXSxkPWhbMF07LTEhPT1sW2RdP2xbZF09LTI6bFtkXT1wLC0xIT09c1twXT9zW3BdPS0yOnNbcF09ZH1mdW5jdGlvbiBtKHQpe2lmKHVbdF0pcmV0dXJuIDEvMDt2YXIgcixpLGEsbyxjLGY9c1t0XSxoPWxbdF07cmV0dXJuIGY8MHx8aDwwPzEvMDoocj1lW3RdLGk9ZVtmXSxhPWVbaF0sbz1NYXRoLmFicyhuKHIsaSxhKSksYz1NYXRoLnNxcnQoTWF0aC5wb3coaVswXS1hWzBdLDIpK01hdGgucG93KGlbMV0tYVsxXSwyKSksby9jKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9a1t0XSxuPWtbZV07a1t0XT1uLGtbZV09cixBW3JdPWUsQVtuXT10fWZ1bmN0aW9uIHYodCl7cmV0dXJuIGNba1t0XV19ZnVuY3Rpb24geSh0KXtyZXR1cm4gMSZ0P3QtMT4+MToodD4+MSktMX1mdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT12KHQpOzspe3ZhciByPWUsbj0yKnQrMSxpPTIqKHQrMSksYT10O2lmKG48TSl7dmFyIG89dihuKTtvPHImJihhPW4scj1vKX1pZihpPE0pdihpKTxyJiYoYT1pKTtpZihhPT09dClyZXR1cm4gdDtnKHQsYSksdD1hfX1mdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT12KHQpO3Q+MDspe3ZhciByPXkodCk7aWYocj49MClpZihlPHYocikpe2codCxyKSx0PXI7Y29udGludWV9cmV0dXJuIHR9fWZ1bmN0aW9uIF8oKXtpZihNPjApe3ZhciB0PWtbMF07cmV0dXJuIGcoMCxNLTEpLE0tPTEseCgwKSx0fXJldHVybi0xfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1rW3RdO3JldHVybiBjW3JdPT09ZT90OihjW3JdPS0xLzAsYih0KSxfKCksY1tyXT1lLGIoKE0rPTEpLTEpKX1mdW5jdGlvbiBUKHQpe2lmKCF1W3RdKXt1W3RdPSEwO3ZhciBlPXNbdF0scj1sW3RdO3Nbcl0+PTAmJihzW3JdPWUpLGxbZV0+PTAmJihsW2VdPXIpLEFbZV0+PTAmJncoQVtlXSxtKGUpKSxBW3JdPj0wJiZ3KEFbcl0sbShyKSl9fXZhciBrPVtdLEE9bmV3IEFycmF5KGEpO2ZvcihmPTA7ZjxhOysrZil7KGNbZl09bShmKSk8MS8wPyhBW2ZdPWsubGVuZ3RoLGsucHVzaChmKSk6QVtmXT0tMX12YXIgTT1rLmxlbmd0aDtmb3IoZj1NPj4xO2Y+PTA7LS1mKXgoZik7Zm9yKDs7KXt2YXIgUz1fKCk7aWYoUzwwfHxjW1NdPnIpYnJlYWs7VChTKX12YXIgRT1bXTtmb3IoZj0wO2Y8YTsrK2YpdVtmXXx8KEFbZl09RS5sZW5ndGgsRS5wdXNoKGVbZl0uc2xpY2UoKSkpO0UubGVuZ3RoO2Z1bmN0aW9uIEwodCxlKXtpZih0W2VdPDApcmV0dXJuIGU7dmFyIHI9ZSxuPWU7ZG97dmFyIGk9dFtuXTtpZighdVtuXXx8aTwwfHxpPT09bilicmVhaztpZihpPXRbbj1pXSwhdVtuXXx8aTwwfHxpPT09bilicmVhaztuPWkscj10W3JdfXdoaWxlKHIhPT1uKTtmb3IodmFyIGE9ZTthIT09bjthPXRbYV0pdFthXT1uO3JldHVybiBufXZhciBDPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPUwocyx0WzBdKSxyPUwobCx0WzFdKTtpZihlPj0wJiZyPj0wJiZlIT09cil7dmFyIG49QVtlXSxpPUFbcl07biE9PWkmJkMucHVzaChbbixpXSl9fSkpLGkudW5pcXVlKGkubm9ybWFsaXplKEMpKSx7cG9zaXRpb25zOkUsZWRnZXM6Q319O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4Iil9LHsicm9idXN0LW9yaWVudGF0aW9uIjoyODQsInNpbXBsaWNpYWwtY29tcGxleCI6Mjk1fV0sMjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0sYT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXJldHVybiBpKGUsdCk7cj1lWzFdLGE9ZVswXX1pZih0WzBdWzBdPHRbMV1bMF0pbz10WzBdLHM9dFsxXTtlbHNle2lmKCEodFswXVswXT50WzFdWzBdKSlyZXR1cm4taSh0LGUpO289dFsxXSxzPXRbMF19dmFyIGw9bihyLGEscyksYz1uKHIsYSxvKTtpZihsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO2lmKGw9bihzLG8sYSksYz1uKHMsbyxyKSxsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO3JldHVybiBhWzBdLXNbMF19O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpO2Z1bmN0aW9uIGkodCxlKXt2YXIgcixpLGEsbztpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGk9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSl7dmFyIHM9TWF0aC5taW4odFswXVsxXSx0WzFdWzFdKSxsPU1hdGgubWF4KHRbMF1bMV0sdFsxXVsxXSksYz1NYXRoLm1pbihlWzBdWzFdLGVbMV1bMV0pLHU9TWF0aC5tYXgoZVswXVsxXSxlWzFdWzFdKTtyZXR1cm4gbDxjP2wtYzpzPnU/cy11OmwtdX1yPWVbMV0saT1lWzBdfXRbMF1bMV08dFsxXVsxXT8oYT10WzBdLG89dFsxXSk6KGE9dFsxXSxvPXRbMF0pO3ZhciBmPW4oaSxyLGEpO3JldHVybiBmfHwoKGY9bihpLHIsbykpfHxvLWkpfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjI4NH1dLDI5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MiplLG49bmV3IEFycmF5KHIpLGE9MDthPGU7KythKXt2YXIgbD10W2FdLGM9bFswXVswXTxsWzFdWzBdO25bMiphXT1uZXcgZihsWzBdWzBdLGwsYyxhKSxuWzIqYSsxXT1uZXcgZihsWzFdWzBdLGwsIWMsYSl9bi5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1lLng7cmV0dXJuIHJ8fCgocj10LmNyZWF0ZS1lLmNyZWF0ZSl8fE1hdGgubWluKHQuc2VnbWVudFswXVsxXSx0LnNlZ21lbnRbMV1bMV0pLU1hdGgubWluKGUuc2VnbWVudFswXVsxXSxlLnNlZ21lbnRbMV1bMV0pKX0pKTt2YXIgaD1pKG8pLHA9W10sZD1bXSxtPVtdO2ZvcihhPTA7YTxyOyl7Zm9yKHZhciBnPW5bYV0ueCx2PVtdO2E8cjspe3ZhciB5PW5bYV07aWYoeS54IT09ZylicmVhazthKz0xLHkuc2VnbWVudFswXVswXT09PXkueCYmeS5zZWdtZW50WzFdWzBdPT09eS54P3kuY3JlYXRlJiYoeS5zZWdtZW50WzBdWzFdPHkuc2VnbWVudFsxXVsxXT8odi5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCEwLCEwKSksdi5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCExLCExKSkpOih2LnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITAsITEpKSx2LnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITEsITApKSkpOmg9eS5jcmVhdGU/aC5pbnNlcnQoeS5zZWdtZW50LHkuaW5kZXgpOmgucmVtb3ZlKHkuc2VnbWVudCl9cC5wdXNoKGgucm9vdCksZC5wdXNoKGcpLG0ucHVzaCh2KX1yZXR1cm4gbmV3IHMocCxkLG0pfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSIpLGE9dCgicm9idXN0LW9yaWVudGF0aW9uIiksbz10KCIuL2xpYi9vcmRlci1zZWdtZW50cyIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuc2xhYnM9dCx0aGlzLmNvb3JkaW5hdGVzPWUsdGhpcy5ob3Jpem9udGFsPXJ9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LnktZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPW51bGw7dDspe3ZhciBuLGksbz10LmtleTtvWzBdWzBdPG9bMV1bMF0/KG49b1swXSxpPW9bMV0pOihuPW9bMV0saT1vWzBdKTt2YXIgcz1hKG4saSxlKTtpZihzPDApdD10LmxlZnQ7ZWxzZSBpZihzPjApaWYoZVswXSE9PW9bMV1bMF0pcj10LHQ9dC5yaWdodDtlbHNle2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fWVsc2V7aWYoZVswXSE9PW9bMV1bMF0pcmV0dXJuIHQ7dmFyIGw7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9fXJldHVybiByfWZ1bmN0aW9uIHUodCxlLHIsbil7dGhpcy55PXQsdGhpcy5pbmRleD1lLHRoaXMuc3RhcnQ9cix0aGlzLmNsb3NlZD1ufWZ1bmN0aW9uIGYodCxlLHIsbil7dGhpcy54PXQsdGhpcy5zZWdtZW50PWUsdGhpcy5jcmVhdGU9cix0aGlzLmluZGV4PW59cy5wcm90b3R5cGUuY2FzdFVwPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGUodGhpcy5jb29yZGluYXRlcyx0WzBdKTtpZihlPDApcmV0dXJuLTE7dGhpcy5zbGFic1tlXTt2YXIgcj1jKHRoaXMuc2xhYnNbZV0sdCksaT0tMTtpZihyJiYoaT1yLnZhbHVlKSx0aGlzLmNvb3JkaW5hdGVzW2VdPT09dFswXSl7dmFyIHM9bnVsbDtpZihyJiYocz1yLmtleSksZT4wKXt2YXIgdT1jKHRoaXMuc2xhYnNbZS0xXSx0KTt1JiYocz9vKHUua2V5LHMpPjAmJihzPXUua2V5LGk9dS52YWx1ZSk6KGk9dS52YWx1ZSxzPXUua2V5KSl9dmFyIGY9dGhpcy5ob3Jpem9udGFsW2VdO2lmKGYubGVuZ3RoPjApe3ZhciBoPW4uZ2UoZix0WzFdLGwpO2lmKGg8Zi5sZW5ndGgpe3ZhciBwPWZbaF07aWYodFsxXT09PXAueSl7aWYocC5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7Zm9yKDtoPGYubGVuZ3RoLTEmJmZbaCsxXS55PT09dFsxXTspaWYoKHA9ZltoKz0xXSkuY2xvc2VkKXJldHVybiBwLmluZGV4O2lmKHAueT09PXRbMV0mJiFwLnN0YXJ0KXtpZigoaCs9MSk+PWYubGVuZ3RoKXJldHVybiBpO3A9ZltoXX19aWYocC5zdGFydClpZihzKXt2YXIgZD1hKHNbMF0sc1sxXSxbdFswXSxwLnldKTtzWzBdWzBdPnNbMV1bMF0mJihkPS1kKSxkPjAmJihpPXAuaW5kZXgpfWVsc2UgaT1wLmluZGV4O2Vsc2UgcC55IT09dFsxXSYmKGk9cC5pbmRleCl9fX1yZXR1cm4gaX19LHsiLi9saWIvb3JkZXItc2VnbWVudHMiOjI5OCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxLCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjo2OSwicm9idXN0LW9yaWVudGF0aW9uIjoyODR9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LWRvdC1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWkobih0LGUpLFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHJbci5sZW5ndGgtMV19ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT0tZS8obi1lKTtpPDA/aT0wOmk+MSYmKGk9MSk7Zm9yKHZhciBhPTEtaSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXNbbF09aSp0W2xdK2EqcltsXTtyZXR1cm4gc31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1bXSxpPWEodFt0Lmxlbmd0aC0xXSxlKSxzPXRbdC5sZW5ndGgtMV0sbD10WzBdLGM9MDtjPHQubGVuZ3RoOysrYyxzPWwpe3ZhciB1PWEobD10W2NdLGUpO2lmKGk8MCYmdT4wfHxpPjAmJnU8MCl7dmFyIGY9byhzLHUsbCxpKTtyLnB1c2goZiksbi5wdXNoKGYuc2xpY2UoKSl9dTwwP24ucHVzaChsLnNsaWNlKCkpOnU+MD9yLnB1c2gobC5zbGljZSgpKTooci5wdXNoKGwuc2xpY2UoKSksbi5wdXNoKGwuc2xpY2UoKSkpLGk9dX1yZXR1cm57cG9zaXRpdmU6cixuZWdhdGl2ZTpufX0sZS5leHBvcnRzLnBvc2l0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49YSh0W3QubGVuZ3RoLTFdLGUpLGk9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGk9cyl7dmFyIGM9YShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGksYyxzLG4pKSxjPj0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9LGUuZXhwb3J0cy5uZWdhdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYzw9MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfX0seyJyb2J1c3QtZG90LXByb2R1Y3QiOjI4MSwicm9idXN0LXN1bSI6Mjg5fV0sMzAxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PXtub3Rfc3RyaW5nOi9bXnNdLyxub3RfYm9vbDovW150XS8sbm90X3R5cGU6L1teVF0vLG5vdF9wcmltaXRpdmU6L1tedl0vLG51bWJlcjovW2RpZWZnXS8sbnVtZXJpY19hcmc6L1tiY2RpZWZndXhYXS8sanNvbjovW2pdLyxub3RfanNvbjovW15qXS8sdGV4dDovXlteXHgyNV0rLyxtb2R1bG86L15ceDI1ezJ9LyxwbGFjZWhvbGRlcjovXlx4MjUoPzooWzEtOV1cZCopXCR8XCgoW14pXSspXCkpPyhcKyk/KDB8J1teJF0pPygtKT8oXGQrKT8oPzpcLihcZCspKT8oW2ItZ2lqb3N0VHV2eFhdKS8sa2V5Oi9eKFthLXpfXVthLXpfXGRdKikvaSxrZXlfYWNjZXNzOi9eXC4oW2Etel9dW2Etel9cZF0qKS9pLGluZGV4X2FjY2VzczovXlxbKFxkKylcXS8sc2lnbjovXlsrLV0vfTtmdW5jdGlvbiBlKHQpe3JldHVybiBpKG8odCksYXJndW1lbnRzKX1mdW5jdGlvbiBuKHQscil7cmV0dXJuIGUuYXBwbHkobnVsbCxbdF0uY29uY2F0KHJ8fFtdKSl9ZnVuY3Rpb24gaShyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGYsaCxwPTEsZD1yLmxlbmd0aCxtPSIiO2ZvcihhPTA7YTxkO2ErKylpZigic3RyaW5nIj09dHlwZW9mIHJbYV0pbSs9clthXTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgclthXSl7aWYoKHM9clthXSkua2V5cylmb3IoaT1uW3BdLG89MDtvPHMua2V5cy5sZW5ndGg7bysrKXtpZihudWxsPT1pKXRocm93IG5ldyBFcnJvcihlKCdbc3ByaW50Zl0gQ2Fubm90IGFjY2VzcyBwcm9wZXJ0eSAiJXMiIG9mIHVuZGVmaW5lZCB2YWx1ZSAiJXMiJyxzLmtleXNbb10scy5rZXlzW28tMV0pKTtpPWlbcy5rZXlzW29dXX1lbHNlIGk9cy5wYXJhbV9ubz9uW3MucGFyYW1fbm9dOm5bcCsrXTtpZih0Lm5vdF90eXBlLnRlc3Qocy50eXBlKSYmdC5ub3RfcHJpbWl0aXZlLnRlc3Qocy50eXBlKSYmaSBpbnN0YW5jZW9mIEZ1bmN0aW9uJiYoaT1pKCkpLHQubnVtZXJpY19hcmcudGVzdChzLnR5cGUpJiYibnVtYmVyIiE9dHlwZW9mIGkmJmlzTmFOKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoZSgiW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUIixpKSk7c3dpdGNoKHQubnVtYmVyLnRlc3Qocy50eXBlKSYmKGY9aT49MCkscy50eXBlKXtjYXNlImIiOmk9cGFyc2VJbnQoaSwxMCkudG9TdHJpbmcoMik7YnJlYWs7Y2FzZSJjIjppPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaSwxMCkpO2JyZWFrO2Nhc2UiZCI6Y2FzZSJpIjppPXBhcnNlSW50KGksMTApO2JyZWFrO2Nhc2UiaiI6aT1KU09OLnN0cmluZ2lmeShpLG51bGwscy53aWR0aD9wYXJzZUludChzLndpZHRoKTowKTticmVhaztjYXNlImUiOmk9cy5wcmVjaXNpb24/cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKHMucHJlY2lzaW9uKTpwYXJzZUZsb2F0KGkpLnRvRXhwb25lbnRpYWwoKTticmVhaztjYXNlImYiOmk9cy5wcmVjaXNpb24/cGFyc2VGbG9hdChpKS50b0ZpeGVkKHMucHJlY2lzaW9uKTpwYXJzZUZsb2F0KGkpO2JyZWFrO2Nhc2UiZyI6aT1zLnByZWNpc2lvbj9TdHJpbmcoTnVtYmVyKGkudG9QcmVjaXNpb24ocy5wcmVjaXNpb24pKSk6cGFyc2VGbG9hdChpKTticmVhaztjYXNlIm8iOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoOCk7YnJlYWs7Y2FzZSJzIjppPVN0cmluZyhpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ0IjppPVN0cmluZyghIWkpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlIlQiOmk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UidSI6aT1wYXJzZUludChpLDEwKT4+PjA7YnJlYWs7Y2FzZSJ2IjppPWkudmFsdWVPZigpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlIngiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpO2JyZWFrO2Nhc2UiWCI6aT0ocGFyc2VJbnQoaSwxMCk+Pj4wKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX10Lmpzb24udGVzdChzLnR5cGUpP20rPWk6KCF0Lm51bWJlci50ZXN0KHMudHlwZSl8fGYmJiFzLnNpZ24/aD0iIjooaD1mPyIrIjoiLSIsaT1pLnRvU3RyaW5nKCkucmVwbGFjZSh0LnNpZ24sIiIpKSxjPXMucGFkX2NoYXI/IjAiPT09cy5wYWRfY2hhcj8iMCI6cy5wYWRfY2hhci5jaGFyQXQoMSk6IiAiLHU9cy53aWR0aC0oaCtpKS5sZW5ndGgsbD1zLndpZHRoJiZ1PjA/Yy5yZXBlYXQodSk6IiIsbSs9cy5hbGlnbj9oK2krbDoiMCI9PT1jP2grbCtpOmwraCtpKX1yZXR1cm4gbX12YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIG8oZSl7aWYoYVtlXSlyZXR1cm4gYVtlXTtmb3IodmFyIHIsbj1lLGk9W10sbz0wO247KXtpZihudWxsIT09KHI9dC50ZXh0LmV4ZWMobikpKWkucHVzaChyWzBdKTtlbHNlIGlmKG51bGwhPT0ocj10Lm1vZHVsby5leGVjKG4pKSlpLnB1c2goIiUiKTtlbHNle2lmKG51bGw9PT0ocj10LnBsYWNlaG9sZGVyLmV4ZWMobikpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXIiKTtpZihyWzJdKXtvfD0xO3ZhciBzPVtdLGw9clsyXSxjPVtdO2lmKG51bGw9PT0oYz10LmtleS5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7Zm9yKHMucHVzaChjWzFdKTsiIiE9PShsPWwuc3Vic3RyaW5nKGNbMF0ubGVuZ3RoKSk7KWlmKG51bGwhPT0oYz10LmtleV9hY2Nlc3MuZXhlYyhsKSkpcy5wdXNoKGNbMV0pO2Vsc2V7aWYobnVsbD09PShjPXQuaW5kZXhfYWNjZXNzLmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXkiKTtzLnB1c2goY1sxXSl9clsyXT1zfWVsc2Ugb3w9MjtpZigzPT09byl0aHJvdyBuZXcgRXJyb3IoIltzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQiKTtpLnB1c2goe3BsYWNlaG9sZGVyOnJbMF0scGFyYW1fbm86clsxXSxrZXlzOnJbMl0sc2lnbjpyWzNdLHBhZF9jaGFyOnJbNF0sYWxpZ246cls1XSx3aWR0aDpyWzZdLHByZWNpc2lvbjpyWzddLHR5cGU6cls4XX0pfW49bi5zdWJzdHJpbmcoclswXS5sZW5ndGgpfXJldHVybiBhW2VdPWl9dm9pZCAwIT09ciYmKHIuc3ByaW50Zj1lLHIudnNwcmludGY9biksInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuc3ByaW50Zj1lLHdpbmRvdy52c3ByaW50Zj1uKX0oKX0se31dLDMwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0LmRpbWVuc2lvbjw9MClyZXR1cm57cG9zaXRpb25zOltdLGNlbGxzOltdfTtpZigxPT09dC5kaW1lbnNpb24pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWkodCxlKSxuPXIubGVuZ3RoLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLHM9MDtzPG47KytzKWFbc109W3Jbc11dLG9bc109W3NdO3JldHVybntwb3NpdGlvbnM6YSxjZWxsczpvfX0odCxlKTt2YXIgcj10Lm9yZGVyLmpvaW4oKSsiLSIrdC5kdHlwZSxzPW9bcl07ZT0rZXx8MDtzfHwocz1vW3JdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgrImQiLGk9YVtyXTtpZihpKXJldHVybiBpKG4sdCxlKX0odC5vcmRlcix0LmR0eXBlKSk7cmV0dXJuIHModCxlKX07dmFyIG49dCgibmRhcnJheS1leHRyYWN0LWNvbnRvdXIiKSxpPXQoInplcm8tY3Jvc3NpbmdzIiksYT17IjJkIjpmdW5jdGlvbih0LGUscil7dmFyIG49dCh7b3JkZXI6ZSxzY2FsYXJBcmd1bWVudHM6MyxnZXR0ZXJzOiJnZW5lcmljIj09PXI/WzBdOnZvaWQgMCxwaGFzZTpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdD5ufDB9LHZlcnRleDpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcD0obzw8MCkrKHM8PDEpKyhsPDwyKSsoYzw8Myl8MDtpZigwIT09cCYmMTUhPT1wKXN3aXRjaChwKXtjYXNlIDA6dS5wdXNoKFt0LS41LGUtLjVdKTticmVhaztjYXNlIDE6dS5wdXNoKFt0LS4yNS0uMjUqKG4rci0yKmgpLyhyLW4pLGUtLjI1LS4yNSooaStyLTIqaCkvKHItaSldKTticmVhaztjYXNlIDI6dS5wdXNoKFt0LS43NS0uMjUqKC1uLXIrMipoKS8obi1yKSxlLS4yNS0uMjUqKGErbi0yKmgpLyhuLWEpXSk7YnJlYWs7Y2FzZSAzOnUucHVzaChbdC0uNSxlLS41LS41KihpK3IrYStuLTQqaCkvKHItaStuLWEpXSk7YnJlYWs7Y2FzZSA0OnUucHVzaChbdC0uMjUtLjI1KihhK2ktMipoKS8oaS1hKSxlLS43NS0uMjUqKC1pLXIrMipoKS8oaS1yKV0pO2JyZWFrO2Nhc2UgNTp1LnB1c2goW3QtLjUtLjUqKG4rcithK2ktNCpoKS8oci1uK2ktYSksZS0uNV0pO2JyZWFrO2Nhc2UgNjp1LnB1c2goW3QtLjUtLjI1Kigtbi1yK2EraSkvKG4tcitpLWEpLGUtLjUtLjI1KigtaS1yK2ErbikvKGktcituLWEpXSk7YnJlYWs7Y2FzZSA3OnUucHVzaChbdC0uNzUtLjI1KihhK2ktMipoKS8oaS1hKSxlLS43NS0uMjUqKGErbi0yKmgpLyhuLWEpXSk7YnJlYWs7Y2FzZSA4OnUucHVzaChbdC0uNzUtLjI1KigtYS1pKzIqaCkvKGEtaSksZS0uNzUtLjI1KigtYS1uKzIqaCkvKGEtbildKTticmVhaztjYXNlIDk6dS5wdXNoKFt0LS41LS4yNSoobityKy1hLWkpLyhyLW4rYS1pKSxlLS41LS4yNSooaStyKy1hLW4pLyhyLWkrYS1uKV0pO2JyZWFrO2Nhc2UgMTA6dS5wdXNoKFt0LS41LS41Kigtbi1yLWEtaSs0KmgpLyhuLXIrYS1pKSxlLS41XSk7YnJlYWs7Y2FzZSAxMTp1LnB1c2goW3QtLjI1LS4yNSooLWEtaSsyKmgpLyhhLWkpLGUtLjc1LS4yNSooaStyLTIqaCkvKHItaSldKTticmVhaztjYXNlIDEyOnUucHVzaChbdC0uNSxlLS41LS41KigtaS1yLWEtbis0KmgpLyhpLXIrYS1uKV0pO2JyZWFrO2Nhc2UgMTM6dS5wdXNoKFt0LS43NS0uMjUqKG4rci0yKmgpLyhyLW4pLGUtLjI1LS4yNSooLWEtbisyKmgpLyhhLW4pXSk7YnJlYWs7Y2FzZSAxNDp1LnB1c2goW3QtLjI1LS4yNSooLW4tcisyKmgpLyhuLXIpLGUtLjI1LS4yNSooLWktcisyKmgpLyhpLXIpXSk7YnJlYWs7Y2FzZSAxNTp1LnB1c2goW3QtLjUsZS0uNV0pfX0sY2VsbDpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7aT9zLnB1c2goW3QsZV0pOnMucHVzaChbZSx0XSl9fSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10saT1bXTtyZXR1cm4gbih0LHIsaSxlKSx7cG9zaXRpb25zOnIsY2VsbHM6aX19fX07dmFyIG89e319LHsibmRhcnJheS1leHRyYWN0LWNvbnRvdXIiOjI1MSwiemVyby1jcm9zc2luZ3MiOjMxOH1dLDMwMzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLGkpe2k9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXGR8XHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxmPTAsaD0wO2g8bC5sZW5ndGg7KytoKWNbaF09dChlLGxbaF0pLHUrPWNbaF0uZGF0YS5sZW5ndGgsZis9Y1toXS5zaGFwZSxoPjAmJihmKz0uMDIpO3ZhciBwPW5ldyBGbG9hdDMyQXJyYXkodSksZD0wLG09LS41KmY7Zm9yKGg9MDtoPGMubGVuZ3RoOysraCl7Zm9yKHZhciBnPWNbaF0uZGF0YSx2PTA7djxnLmxlbmd0aDt2Kz0yKXBbZCsrXT1nW3ZdK20scFtkKytdPWdbdisxXTttKz1jW2hdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpmfX1yZXR1cm4gc307dmFyIG49dCgidmVjdG9yaXplLXRleHQiKSxpPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGE9aS5fX1RFWFRfQ0FDSEV8fHt9O2kuX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjUsInZlY3Rvcml6ZS10ZXh0IjozMTF9XSwzMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2UtdW5pdCIpO2UuZXhwb3J0cz1hO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj1uKGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIHJbMF0qYShyWzFdLHQpfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fCJweCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZSIlIjpyZXR1cm4gZS5jbGllbnRIZWlnaHQvMTAwO2Nhc2UiY2giOmNhc2UiZXgiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGVbImZvbnQtc2l6ZSJdPSIxMjgiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1pKHIsImZvbnQtc2l6ZSIpLzEyODtyZXR1cm4gZS5yZW1vdmVDaGlsZChyKSxufSh0LGUpO2Nhc2UiZW0iOnJldHVybiBpKGUsImZvbnQtc2l6ZSIpO2Nhc2UicmVtIjpyZXR1cm4gaShkb2N1bWVudC5ib2R5LCJmb250LXNpemUiKTtjYXNlInZ3IjpyZXR1cm4gd2luZG93LmlubmVyV2lkdGgvMTAwO2Nhc2UidmgiOnJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQvMTAwO2Nhc2Uidm1pbiI6cmV0dXJuIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2Uidm1heCI6cmV0dXJuIE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2UiaW4iOnJldHVybiA5NjtjYXNlImNtIjpyZXR1cm4gOTYvMi41NDtjYXNlIm1tIjpyZXR1cm4gOTYvMjUuNDtjYXNlInB0IjpyZXR1cm4gOTYvNzI7Y2FzZSJwYyI6cmV0dXJuIDE2fXJldHVybiAxfX0seyJwYXJzZS11bml0IjoyNjV9XSwzMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5jZW50ZXJ8fFswLDAsMF0scj10LnVwfHxbMCwxLDBdLG49dC5yaWdodHx8ZihyKSxpPXQucmFkaXVzfHwxLGE9dC50aGV0YXx8MCx1PXQucGhpfHwwO2lmKGU9W10uc2xpY2UuY2FsbChlLDAsMykscj1bXS5zbGljZS5jYWxsKHIsMCwzKSxzKHIsciksbj1bXS5zbGljZS5jYWxsKG4sMCwzKSxzKG4sbiksImV5ZSJpbiB0KXt2YXIgcD10LmV5ZSxkPVtwWzBdLWVbMF0scFsxXS1lWzFdLHBbMl0tZVsyXV07byhuLGQsciksYyhuWzBdLG5bMV0sblsyXSk8MWUtNj9uPWYocik6cyhuLG4pLGk9YyhkWzBdLGRbMV0sZFsyXSk7dmFyIG09bChyLGQpL2ksZz1sKG4sZCkvaTt1PU1hdGguYWNvcyhtKSxhPU1hdGguYWNvcyhnKX1yZXR1cm4gaT1NYXRoLmxvZyhpKSxuZXcgaCh0Lnpvb21NaW4sdC56b29tTWF4LGUscixuLGksYSx1KX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2ludmVydCIpLGE9dCgiZ2wtbWF0NC9yb3RhdGUiKSxvPXQoImdsLXZlYzMvY3Jvc3MiKSxzPXQoImdsLXZlYzMvbm9ybWFsaXplIiksbD10KCJnbC12ZWMzL2RvdCIpO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoLTEsdCkpfWZ1bmN0aW9uIGYodCl7dmFyIGU9TWF0aC5hYnModFswXSkscj1NYXRoLmFicyh0WzFdKSxuPU1hdGguYWJzKHRbMl0pLGk9WzAsMCwwXTtlPk1hdGgubWF4KHIsbik/aVsyXT0xOnI+TWF0aC5tYXgoZSxuKT9pWzBdPTE6aVsxXT0xO2Zvcih2YXIgYT0wLG89MCxsPTA7bDwzOysrbClhKz10W2xdKnRbbF0sbys9aVtsXSp0W2xdO2ZvcihsPTA7bDwzOysrbClpW2xdLT1vL2EqdFtsXTtyZXR1cm4gcyhpLGkpLGl9ZnVuY3Rpb24gaCh0LGUscixpLGEsbyxzLGwpe3RoaXMuY2VudGVyPW4ociksdGhpcy51cD1uKGkpLHRoaXMucmlnaHQ9bihhKSx0aGlzLnJhZGl1cz1uKFtvXSksdGhpcy5hbmdsZT1uKFtzLGxdKSx0aGlzLmFuZ2xlLmJvdW5kcz1bWy0xLzAsLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgYz0wO2M8MTY7KytjKXRoaXMuY29tcHV0ZWRNYXRyaXhbY109LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIHA9aC5wcm90b3R5cGU7cC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LG49MCxpPTAsYT0wO2E8MzsrK2EpaSs9ZVthXSpyW2FdLG4rPWVbYV0qZVthXTt2YXIgbD1NYXRoLnNxcnQobiksdT0wO2ZvcihhPTA7YTwzOysrYSlyW2FdLT1lW2FdKmkvbix1Kz1yW2FdKnJbYV0sZVthXS89bDt2YXIgZj1NYXRoLnNxcnQodSk7Zm9yKGE9MDthPDM7KythKXJbYV0vPWY7dmFyIGg9dGhpcy5jb21wdXRlZFRvd2FyZDtvKGgsZSxyKSxzKGgsaCk7dmFyIHA9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksZD10aGlzLmNvbXB1dGVkQW5nbGVbMF0sbT10aGlzLmNvbXB1dGVkQW5nbGVbMV0sZz1NYXRoLmNvcyhkKSx2PU1hdGguc2luKGQpLHk9TWF0aC5jb3MobSkseD1NYXRoLnNpbihtKSxiPXRoaXMuY29tcHV0ZWRDZW50ZXIsXz1nKnksdz12KnksVD14LGs9LWcqeCxBPS12KngsTT15LFM9dGhpcy5jb21wdXRlZEV5ZSxFPXRoaXMuY29tcHV0ZWRNYXRyaXg7Zm9yKGE9MDthPDM7KythKXt2YXIgTD1fKnJbYV0rdypoW2FdK1QqZVthXTtFWzQqYSsxXT1rKnJbYV0rQSpoW2FdK00qZVthXSxFWzQqYSsyXT1MLEVbNCphKzNdPTB9dmFyIEM9RVsxXSxQPUVbNV0sST1FWzldLE89RVsyXSx6PUVbNl0sRD1FWzEwXSxSPVAqRC1JKnosRj1JKk8tQypELEI9Qyp6LVAqTyxOPWMoUixGLEIpO1IvPU4sRi89TixCLz1OLEVbMF09UixFWzRdPUYsRVs4XT1CO2ZvcihhPTA7YTwzOysrYSlTW2FdPWJbYV0rRVsyKzQqYV0qcDtmb3IoYT0wO2E8MzsrK2Epe3U9MDtmb3IodmFyIGo9MDtqPDM7KytqKXUrPUVbYSs0KmpdKlNbal07RVsxMithXT0tdX1FWzE1XT0xfSxwLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfTt2YXIgZD1bMCwwLDBdO3Aucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMuYW5nbGUubW92ZSh0LGUsciksbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDtkWzBdPWlbMl0sZFsxXT1pWzZdLGRbMl09aVsxMF07Zm9yKHZhciBvPXRoaXMuY29tcHV0ZWRVcCxzPXRoaXMuY29tcHV0ZWRSaWdodCxsPXRoaXMuY29tcHV0ZWRUb3dhcmQsYz0wO2M8MzsrK2MpaVs0KmNdPW9bY10saVs0KmMrMV09c1tjXSxpWzQqYysyXT1sW2NdO2EoaSxpLG4sZCk7Zm9yKGM9MDtjPDM7KytjKW9bY109aVs0KmNdLHNbY109aVs0KmMrMV07dGhpcy51cC5zZXQodCxvWzBdLG9bMV0sb1syXSksdGhpcy5yaWdodC5zZXQodCxzWzBdLHNbMV0sc1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGlbMV0pLG89aVs1XSxzPWlbOV0sbD1jKGEsbyxzKTthLz1sLG8vPWwscy89bDt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWModS09YSpwLGYtPW8qcCxoLT1zKnApLG09KHUvPWQpKmUrYSpyLGc9KGYvPWQpKmUrbypyLHY9KGgvPWQpKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxtLGcsdik7dmFyIHk9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7eT1NYXRoLm1heCgxZS00LHkrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coeSkpfSxwLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNlbnRlci5tb3ZlKHQsZXx8MCxyfHwwLG58fDApfSxwLnNldE1hdHJpeD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT0xOyJudW1iZXIiPT10eXBlb2YgciYmKGE9MHxyKSwoYTwwfHxhPjMpJiYoYT0xKTt2YXIgbz0oYSsyKSUzO2V8fCh0aGlzLnJlY2FsY01hdHJpeCh0KSxlPXRoaXMuY29tcHV0ZWRNYXRyaXgpO3ZhciBzPWVbYV0sbD1lW2ErNF0sZj1lW2ErOF07aWYobil7dmFyIGg9TWF0aC5hYnMocykscD1NYXRoLmFicyhsKSxkPU1hdGguYWJzKGYpLG09TWF0aC5tYXgoaCxwLGQpO2g9PT1tPyhzPXM8MD8tMToxLGw9Zj0wKTpkPT09bT8oZj1mPDA/LTE6MSxzPWw9MCk6KGw9bDwwPy0xOjEscz1mPTApfWVsc2V7dmFyIGc9YyhzLGwsZik7cy89ZyxsLz1nLGYvPWd9dmFyIHYseSx4PWVbb10sYj1lW28rNF0sXz1lW28rOF0sdz14KnMrYipsK18qZixUPWMoeC09cyp3LGItPWwqdyxfLT1mKncpLGs9bCooXy89VCktZiooYi89VCksQT1mKih4Lz1UKS1zKl8sTT1zKmItbCp4LFM9YyhrLEEsTSk7aWYoay89UyxBLz1TLE0vPVMsdGhpcy5jZW50ZXIuanVtcCh0LHEsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LHMsbCxmKSx0aGlzLnJpZ2h0Lmp1bXAodCx4LGIsXyksMj09PWEpe3ZhciBFPWVbMV0sTD1lWzVdLEM9ZVs5XSxQPUUqeCtMKmIrQypfLEk9RSprK0wqQStDKk07dj1SPDA/LU1hdGguUEkvMjpNYXRoLlBJLzIseT1NYXRoLmF0YW4yKEksUCl9ZWxzZXt2YXIgTz1lWzJdLHo9ZVs2XSxEPWVbMTBdLFI9TypzK3oqbCtEKmYsRj1PKngreipiK0QqXyxCPU8qayt6KkErRCpNO3Y9TWF0aC5hc2luKHUoUikpLHk9TWF0aC5hdGFuMihCLEYpfXRoaXMuYW5nbGUuanVtcCh0LHksdiksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIE49ZVsyXSxqPWVbNl0sVT1lWzEwXSxWPXRoaXMuY29tcHV0ZWRNYXRyaXg7aShWLGUpO3ZhciBIPVZbMTVdLHE9VlsxMl0vSCxHPVZbMTNdL0gsWT1WWzE0XS9ILFc9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7dGhpcy5jZW50ZXIuanVtcCh0LHEtTipXLEctaipXLFktVSpXKX0scC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMudXAubGFzdFQoKSx0aGlzLnJpZ2h0Lmxhc3RUKCksdGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmFuZ2xlLmxhc3RUKCkpfSxwLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnVwLmlkbGUodCksdGhpcy5yaWdodC5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5hbmdsZS5pZGxlKHQpfSxwLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMudXAuZmx1c2godCksdGhpcy5yaWdodC5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLmFuZ2xlLmZsdXNoKHQpfSxwLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7ZT4wJiZ0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhlKSl9LHAubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXI7dmFyIGk9KG49bnx8dGhpcy5jb21wdXRlZFVwKVswXSxhPW5bMV0sbz1uWzJdLHM9YyhpLGEsbyk7aWYoIShzPDFlLTYpKXtpLz1zLGEvPXMsby89czt2YXIgbD1lWzBdLXJbMF0sZj1lWzFdLXJbMV0saD1lWzJdLXJbMl0scD1jKGwsZixoKTtpZighKHA8MWUtNikpe2wvPXAsZi89cCxoLz1wO3ZhciBkPXRoaXMuY29tcHV0ZWRSaWdodCxtPWRbMF0sZz1kWzFdLHY9ZFsyXSx5PWkqbSthKmcrbyp2LHg9YyhtLT15KmksZy09eSphLHYtPXkqbyk7aWYoISh4PC4wMSYmKHg9YyhtPWEqaC1vKmYsZz1vKmwtaSpoLHY9aSpmLWEqbCkpPDFlLTYpKXttLz14LGcvPXgsdi89eCx0aGlzLnVwLnNldCh0LGksYSxvKSx0aGlzLnJpZ2h0LnNldCh0LG0sZyx2KSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2cocCkpO3ZhciBiPWEqdi1vKmcsXz1vKm0taSp2LHc9aSpnLWEqbSxUPWMoYixfLHcpLGs9aSpsK2EqZitvKmgsQT1tKmwrZypmK3YqaCxNPShiLz1UKSpsKyhfLz1UKSpmKyh3Lz1UKSpoLFM9TWF0aC5hc2luKHUoaykpLEU9TWF0aC5hdGFuMihNLEEpLEw9dGhpcy5hbmdsZS5fc3RhdGUsQz1MW0wubGVuZ3RoLTFdLFA9TFtMLmxlbmd0aC0yXTtDJT0yKk1hdGguUEk7dmFyIEk9TWF0aC5hYnMoQysyKk1hdGguUEktRSksTz1NYXRoLmFicyhDLUUpLHo9TWF0aC5hYnMoQy0yKk1hdGguUEktRSk7STxPJiYoQys9MipNYXRoLlBJKSx6PE8mJihDLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksQyxQKSx0aGlzLmFuZ2xlLnNldCh0LEUsUyl9fX19fSx7ImZpbHRlcmVkLXZlY3RvciI6NjgsImdsLW1hdDQvaW52ZXJ0Ijo5OCwiZ2wtbWF0NC9yb3RhdGUiOjEwMywiZ2wtdmVjMy9jcm9zcyI6MTU3LCJnbC12ZWMzL2RvdCI6MTYyLCJnbC12ZWMzL25vcm1hbGl6ZSI6MTc5fV0sMzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCplLGE9bip0LG89YS0oYS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsZj1zKnUtKGktbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09ZixyWzFdPWkscjtyZXR1cm5bZixpXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDMwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxpPW4tdCxhPWUtaSxvPXQtKG4taSk7aWYocilyZXR1cm4gclswXT1vK2EsclsxXT1uLHI7cmV0dXJuW28rYSxuXX19LHt9XSwzMDg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJkdXAiKSxhPXQoImJ1ZmZlciIpLkJ1ZmZlcjtlLl9fVFlQRURBUlJBWV9QT09MfHwoZS5fX1RZUEVEQVJSQVlfUE9PTD17VUlOVDg6aShbMzIsMF0pLFVJTlQxNjppKFszMiwwXSksVUlOVDMyOmkoWzMyLDBdKSxCSUdVSU5UNjQ6aShbMzIsMF0pLElOVDg6aShbMzIsMF0pLElOVDE2OmkoWzMyLDBdKSxJTlQzMjppKFszMiwwXSksQklHSU5UNjQ6aShbMzIsMF0pLEZMT0FUOmkoWzMyLDBdKSxET1VCTEU6aShbMzIsMF0pLERBVEE6aShbMzIsMF0pLFVJTlQ4QzppKFszMiwwXSksQlVGRkVSOmkoWzMyLDBdKX0pO3ZhciBvPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkscz0idW5kZWZpbmVkIiE9dHlwZW9mIEJpZ1VpbnQ2NEFycmF5LGw9InVuZGVmaW5lZCIhPXR5cGVvZiBCaWdJbnQ2NEFycmF5LGM9ZS5fX1RZUEVEQVJSQVlfUE9PTDtjLlVJTlQ4Q3x8KGMuVUlOVDhDPWkoWzMyLDBdKSksYy5CSUdVSU5UNjR8fChjLkJJR1VJTlQ2ND1pKFszMiwwXSkpLGMuQklHSU5UNjR8fChjLkJJR0lOVDY0PWkoWzMyLDBdKSksYy5CVUZGRVJ8fChjLkJVRkZFUj1pKFszMiwwXSkpO3ZhciB1PWMuREFUQSxmPWMuQlVGRkVSO2Z1bmN0aW9uIGgodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPW4ubG9nMihlKTt1W3JdLnB1c2godCl9fWZ1bmN0aW9uIHAodCl7dD1uLm5leHRQb3cyKHQpO3ZhciBlPW4ubG9nMih0KSxyPXVbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocCh0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBVaW50MTZBcnJheShwKDIqdCksMCx0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IEludDhBcnJheShwKHQpLDAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IEludDE2QXJyYXkocCgyKnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShwKDQqdCksMCx0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRmxvYXQ2NEFycmF5KHAoOCp0KSwwLHQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIG8/bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHAodCksMCx0KTpkKHQpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHM/bmV3IEJpZ1VpbnQ2NEFycmF5KHAoOCp0KSwwLHQpOm51bGx9ZnVuY3Rpb24gayh0KXtyZXR1cm4gbD9uZXcgQmlnSW50NjRBcnJheShwKDgqdCksMCx0KTpudWxsfWZ1bmN0aW9uIEEodCl7cmV0dXJuIG5ldyBEYXRhVmlldyhwKHQpLDAsdCl9ZnVuY3Rpb24gTSh0KXt0PW4ubmV4dFBvdzIodCk7dmFyIGU9bi5sb2cyKHQpLHI9ZltlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBhKHQpfXIuZnJlZT1mdW5jdGlvbih0KXtpZihhLmlzQnVmZmVyKHQpKWZbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KTtlbHNle2lmKCJbb2JqZWN0IEFycmF5QnVmZmVyXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJih0PXQuYnVmZmVyKSwhdClyZXR1cm47dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPTB8bi5sb2cyKGUpO3Vbcl0ucHVzaCh0KX19LHIuZnJlZVVpbnQ4PXIuZnJlZVVpbnQxNj1yLmZyZWVVaW50MzI9ci5mcmVlQmlnVWludDY0PXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlQmlnSW50NjQ9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7aCh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPWgsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2Zbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gcCh0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGQodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBtKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZyh0KTtjYXNlImludDgiOnJldHVybiB2KHQpO2Nhc2UiaW50MTYiOnJldHVybiB5KHQpO2Nhc2UiaW50MzIiOnJldHVybiB4KHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIGIodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIF8odCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gdyh0KTtjYXNlImJpZ2ludDY0IjpyZXR1cm4gayh0KTtjYXNlImJpZ3VpbnQ2NCI6cmV0dXJuIFQodCk7Y2FzZSJidWZmZXIiOnJldHVybiBNKHQpO2Nhc2UiZGF0YSI6Y2FzZSJkYXRhdmlldyI6cmV0dXJuIEEodCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1wLHIubWFsbG9jVWludDg9ZCxyLm1hbGxvY1VpbnQxNj1tLHIubWFsbG9jVWludDMyPWcsci5tYWxsb2NJbnQ4PXYsci5tYWxsb2NJbnQxNj15LHIubWFsbG9jSW50MzI9eCxyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD1iLHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT1fLHIubWFsbG9jVWludDhDbGFtcGVkPXcsci5tYWxsb2NCaWdVaW50NjQ9VCxyLm1hbGxvY0JpZ0ludDY0PWssci5tYWxsb2NEYXRhVmlldz1BLHIubWFsbG9jQnVmZmVyPU0sci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3QpYy5VSU5UOFt0XS5sZW5ndGg9MCxjLlVJTlQxNlt0XS5sZW5ndGg9MCxjLlVJTlQzMlt0XS5sZW5ndGg9MCxjLklOVDhbdF0ubGVuZ3RoPTAsYy5JTlQxNlt0XS5sZW5ndGg9MCxjLklOVDMyW3RdLmxlbmd0aD0wLGMuRkxPQVRbdF0ubGVuZ3RoPTAsYy5ET1VCTEVbdF0ubGVuZ3RoPTAsYy5CSUdVSU5UNjRbdF0ubGVuZ3RoPTAsYy5CSUdJTlQ2NFt0XS5sZW5ndGg9MCxjLlVJTlQ4Q1t0XS5sZW5ndGg9MCx1W3RdLmxlbmd0aD0wLGZbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx2b2lkIDAhPT1uP246InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJiaXQtdHdpZGRsZSI6MzIsYnVmZmVyOjMsZHVwOjY1fV0sMzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uO3ZhciBpPW4ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9fSksaS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0saS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LHI9dGhpcy5yb290cztyW3RdIT09dDspdD1yW3RdO2Zvcig7cltlXSE9PXQ7KXt2YXIgbj1yW2VdO3JbZV09dCxlPW59cmV0dXJuIHR9LGkubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSwzMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMD09PXQubGVuZ3RoP3Q6ZT8ocnx8dC5zb3J0KGUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj10Lmxlbmd0aCxpPXRbMF0sYT10WzBdLG89MTtvPG47KytvKWlmKGE9aSxlKGk9dFtvXSxhKSl7aWYobz09PXIpe3IrKztjb250aW51ZX10W3IrK109aX1yZXR1cm4gdC5sZW5ndGg9cix0fSh0LGUpKToocnx8dC5zb3J0KCksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT10WzBdLGE9MTthPHI7KythLGk9bilpZihpPW4sKG49dFthXSkhPT1pKXtpZihhPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1ufXJldHVybiB0Lmxlbmd0aD1lLHR9KHQpKX19LHt9XSwzMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KGU9e30pO3JldHVybiBuKHQsZS5jYW52YXN8fGksZS5jb250ZXh0fHxhLGUpfTt2YXIgbj10KCIuL2xpYi92dGV4dCIpLGk9bnVsbCxhPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS53aWR0aD04MTkyLGkuaGVpZ2h0PTEwMjQsYT1pLmdldENvbnRleHQoIjJkIikpfSx7Ii4vbGliL3Z0ZXh0IjozMTJ9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9NjQsbz0xLjI1LHM9e2JyZWFrbGluZXM6ITEsYm9sZHM6ITEsaXRhbGljczohMSxzdWJzY3JpcHRzOiExLHN1cGVyc2NyaXB0czohMX07biYmKG4uc2l6ZSYmbi5zaXplPjAmJihhPW4uc2l6ZSksbi5saW5lU3BhY2luZyYmbi5saW5lU3BhY2luZz4wJiYobz1uLmxpbmVTcGFjaW5nKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyYmKHMuYnJlYWtsaW5lcz0hIW4uc3R5bGV0YWdzLmJyZWFrbGluZXMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5ib2xkcyYmKHMuYm9sZHM9ISFuLnN0eWxldGFncy5ib2xkcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLml0YWxpY3MmJihzLml0YWxpY3M9ISFuLnN0eWxldGFncy5pdGFsaWNzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyYmKHMuc3Vic2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1YnNjcmlwdHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMmJihzLnN1cGVyc2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cykpO3JldHVybiByLmZvbnQ9W24uZm9udFN0eWxlLG4uZm9udFZhcmlhbnQsbi5mb250V2VpZ2h0LGErInB4IixuLmZvbnRdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuam9pbigiICIpLHIudGV4dEFsaWduPSJzdGFydCIsci50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLHIuZGlyZWN0aW9uPSJsdHIiLGgoZnVuY3Rpb24odCxlLHIsbixhLG8pe3I9ci5yZXBsYWNlKC9cbi9nLCIiKSxyPSEwPT09by5icmVha2xpbmVzP3IucmVwbGFjZSgvXDxiclw+L2csIlxuIik6ci5yZXBsYWNlKC9cPGJyXD4vZywiICIpO3ZhciBzPSIiLGw9W107Zm9yKHA9MDtwPHIubGVuZ3RoOysrcClsW3BdPXM7ITA9PT1vLmJvbGRzJiYobD1jKCJiIiwiYnwiLHIsbCkpOyEwPT09by5pdGFsaWNzJiYobD1jKCJpIiwiaXwiLHIsbCkpOyEwPT09by5zdXBlcnNjcmlwdHMmJihsPWMoInN1cCIsIisxIixyLGwpKTshMD09PW8uc3Vic2NyaXB0cyYmKGw9Yygic3ViIiwiLTEiLHIsbCkpO3ZhciB1PVtdLGY9IiI7Zm9yKHA9MDtwPHIubGVuZ3RoOysrcCludWxsIT09bFtwXSYmKGYrPXJbcF0sdS5wdXNoKGxbcF0pKTt2YXIgaCxwLGQsbSxnLHY9Zi5zcGxpdCgiXG4iKSx5PXYubGVuZ3RoLHg9TWF0aC5yb3VuZChhKm4pLGI9bixfPTIqbix3PTAsVD15KngrXzt0LmhlaWdodDxUJiYodC5oZWlnaHQ9VCk7ZS5maWxsU3R5bGU9IiMwMDAiLGUuZmlsbFJlY3QoMCwwLHQud2lkdGgsdC5oZWlnaHQpLGUuZmlsbFN0eWxlPSIjZmZmIjt2YXIgaz0wLEE9IiI7ZnVuY3Rpb24gTSgpe2lmKCIiIT09QSl7dmFyIHQ9ZS5tZWFzdXJlVGV4dChBKS53aWR0aDtlLmZpbGxUZXh0KEEsYitkLF8rbSksZCs9dH19ZnVuY3Rpb24gUygpe3JldHVybiBNYXRoLnJvdW5kKGcpKyJweCAifWZ1bmN0aW9uIEUodCxyKXt2YXIgbj0iIitlLmZvbnQ7aWYoITA9PT1vLnN1YnNjcmlwdHMpe3ZhciBpPXQuaW5kZXhPZigiLSIpLGE9ci5pbmRleE9mKCItIikscz1pPi0xP3BhcnNlSW50KHRbMStpXSk6MCxsPWE+LTE/cGFyc2VJbnQoclsxK2FdKTowO3MhPT1sJiYobj1uLnJlcGxhY2UoUygpLCI/cHggIiksZyo9TWF0aC5wb3coLjc1LGwtcyksbj1uLnJlcGxhY2UoIj9weCAiLFMoKSkpLG0rPS4yNSp4KihsLXMpfWlmKCEwPT09by5zdXBlcnNjcmlwdHMpe3ZhciBjPXQuaW5kZXhPZigiKyIpLHU9ci5pbmRleE9mKCIrIiksZj1jPi0xP3BhcnNlSW50KHRbMStjXSk6MCxoPXU+LTE/cGFyc2VJbnQoclsxK3VdKTowO2YhPT1oJiYobj1uLnJlcGxhY2UoUygpLCI/cHggIiksZyo9TWF0aC5wb3coLjc1LGgtZiksbj1uLnJlcGxhY2UoIj9weCAiLFMoKSkpLG0tPS4yNSp4KihoLWYpfWlmKCEwPT09by5ib2xkcyl7dmFyIHA9dC5pbmRleE9mKCJifCIpPi0xLGQ9ci5pbmRleE9mKCJifCIpPi0xOyFwJiZkJiYobj12P24ucmVwbGFjZSgiaXRhbGljICIsIml0YWxpYyBib2xkICIpOiJib2xkICIrbikscCYmIWQmJihuPW4ucmVwbGFjZSgiYm9sZCAiLCIiKSl9aWYoITA9PT1vLml0YWxpY3Mpe3ZhciB2PXQuaW5kZXhPZigiaXwiKT4tMSx5PXIuaW5kZXhPZigiaXwiKT4tMTshdiYmeSYmKG49Iml0YWxpYyAiK24pLHYmJiF5JiYobj1uLnJlcGxhY2UoIml0YWxpYyAiLCIiKSl9ZS5mb250PW59Zm9yKGg9MDtoPHk7KytoKXt2YXIgTD12W2hdKyJcbiI7Zm9yKGQ9MCxtPWgqeCxnPW4sQT0iIixwPTA7cDxMLmxlbmd0aDsrK3Ape3ZhciBDPXArazx1Lmxlbmd0aD91W3Ara106dVt1Lmxlbmd0aC0xXTtzPT09Qz9BKz1MW3BdOihNKCksQT1MW3BdLHZvaWQgMCE9PUMmJihFKHMsQykscz1DKSl9TSgpLGsrPUwubGVuZ3RoO3ZhciBQPTB8TWF0aC5yb3VuZChkKzIqYik7dzxQJiYodz1QKX12YXIgST13LE89Xyt4Knk7cmV0dXJuIGkoZS5nZXRJbWFnZURhdGEoMCwwLEksTykuZGF0YSxbTyxJLDRdKS5waWNrKC0xLC0xLDApLnRyYW5zcG9zZSgxLDApfShlLHIsdCxhLG8scyksbixhKX0sZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9aDt2YXIgbj10KCJzdXJmYWNlLW5ldHMiKSxpPXQoIm5kYXJyYXkiKSxhPXQoInNpbXBsaWZ5LXBsYW5hci1ncmFwaCIpLG89dCgiY2xlYW4tcHNsZyIpLHM9dCgiY2R0MmQiKSxsPXQoInBsYW5hci1ncmFwaC10by1wb2x5bGluZSIpO2Z1bmN0aW9uIGModCxlLHIsbil7Zm9yKHZhciBpPSI8Iit0KyI+IixhPSI8LyIrdCsiPiIsbz1pLmxlbmd0aCxzPWEubGVuZ3RoLGw9IisiPT09ZVswXXx8Ii0iPT09ZVswXSxjPTAsdT0tcztjPi0xJiYtMSE9PShjPXIuaW5kZXhPZihpLGMpKSYmLTEhPT0odT1yLmluZGV4T2YoYSxjK28pKSYmISh1PD1jKTspe2Zvcih2YXIgZj1jO2Y8dStzOysrZilpZihmPGMrb3x8Zj49dSluW2ZdPW51bGwscj1yLnN1YnN0cigwLGYpKyIgIityLnN1YnN0cihmKzEpO2Vsc2UgaWYobnVsbCE9PW5bZl0pe3ZhciBoPW5bZl0uaW5kZXhPZihlWzBdKTstMT09PWg/bltmXSs9ZTpsJiYobltmXT1uW2ZdLnN1YnN0cigwLGgrMSkrKDErcGFyc2VJbnQobltmXVtoKzFdKSkrbltmXS5zdWJzdHIoaCsyKSl9dmFyIHA9YytvLGQ9ci5zdWJzdHIocCx1LXApLmluZGV4T2YoaSk7Yz0tMSE9PWQ/ZDp1K3N9cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe3ZhciByPW4odCwxMjgpO3JldHVybiBlP2Eoci5jZWxscyxyLnBvc2l0aW9ucywuMjUpOntlZGdlczpyLmNlbGxzLHBvc2l0aW9uczpyLnBvc2l0aW9uc319ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT11KHQsbiksYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUudGV4dEFsaWdufHwic3RhcnQiLGk9ZS50ZXh0QmFzZWxpbmV8fCJhbHBoYWJldGljIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgYz10W2xdLHU9MDt1PDI7Kyt1KWFbdV09MHxNYXRoLm1pbihhW3VdLGNbdV0pLG9bdV09MHxNYXRoLm1heChvW3VdLGNbdV0pO3ZhciBmPTA7c3dpdGNoKG4pe2Nhc2UiY2VudGVyIjpmPS0uNSooYVswXStvWzBdKTticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6Zj0tb1swXTticmVhaztjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmY9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29nbml6ZWQgdGV4dEFsaWduOiAnIituKyInIil9dmFyIGg9MDtzd2l0Y2goaSl7Y2FzZSJoYW5naW5nIjpjYXNlInRvcCI6aD0tYVsxXTticmVhaztjYXNlIm1pZGRsZSI6aD0tLjUqKGFbMV0rb1sxXSk7YnJlYWs7Y2FzZSJhbHBoYWJldGljIjpjYXNlImlkZW9ncmFwaGljIjpoPS0zKnI7YnJlYWs7Y2FzZSJib3R0b20iOmg9LW9bMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJyIraSsiJyIpfXZhciBwPTEvcjtyZXR1cm4ibGluZUhlaWdodCJpbiBlP3AqPStlLmxpbmVIZWlnaHQ6IndpZHRoImluIGU/cD1lLndpZHRoLyhvWzBdLWFbMF0pOiJoZWlnaHQiaW4gZSYmKHA9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bcCoodFswXStmKSxwKih0WzFdK2gpXX0pKX0oaS5wb3NpdGlvbnMsZSxyKSxjPWkuZWRnZXMsZj0iY2N3Ij09PWUub3JpZW50YXRpb247aWYobyhhLGMpLGUucG9seWdvbnN8fGUucG9seWdvbnx8ZS5wb2x5bGluZSl7Zm9yKHZhciBoPWwoYyxhKSxwPW5ldyBBcnJheShoLmxlbmd0aCksZD0wO2Q8aC5sZW5ndGg7KytkKXtmb3IodmFyIG09aFtkXSxnPW5ldyBBcnJheShtLmxlbmd0aCksdj0wO3Y8bS5sZW5ndGg7Kyt2KXtmb3IodmFyIHk9bVt2XSx4PW5ldyBBcnJheSh5Lmxlbmd0aCksYj0wO2I8eS5sZW5ndGg7KytiKXhbYl09YVt5W2JdXS5zbGljZSgpO2YmJngucmV2ZXJzZSgpLGdbdl09eH1wW2RdPWd9cmV0dXJuIHB9cmV0dXJuIGUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpzKGEsYyx7ZGVsYXVuYXk6ITEsZXh0ZXJpb3I6ITEsaW50ZXJpb3I6ITB9KSxwb3NpdGlvbnM6YX06e2VkZ2VzOmMscG9zaXRpb25zOmF9fWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm4gZih0LGUsciwhMCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZih0LGUsciwhMSl9Y2F0Y2godCl7fXJldHVybiBlLnBvbHlnb25zfHxlLnBvbHlsaW5lfHxlLnBvbHlnb24/W106ZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOltdLHBvc2l0aW9uczpbXX06e2VkZ2VzOltdLHBvc2l0aW9uczpbXX19fSx7Y2R0MmQ6NDIsImNsZWFuLXBzbGciOjUwLG5kYXJyYXk6MjU5LCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmUiOjI2OCwic2ltcGxpZnktcGxhbmFyLWdyYXBoIjoyOTcsInN1cmZhY2UtbmV0cyI6MzAyfV0sMzEzOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygc2VzfHwhc2VzLm9rfHxzZXMub2soKSl7InVuZGVmaW5lZCIhPXR5cGVvZiBzZXMmJihzZXMud2Vha01hcFBlcm1pdEhvc3RPYmplY3RzPW0pO3ZhciB0PSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXZWFrTWFwKXt2YXIgcj1XZWFrTWFwO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYvRmlyZWZveC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSk7ZWxzZXt2YXIgbj1uZXcgcixpPU9iamVjdC5mcmVlemUoe30pO2lmKG4uc2V0KGksMSksMT09PW4uZ2V0KGkpKXJldHVybiB2b2lkKGUuZXhwb3J0cz1XZWFrTWFwKTt0PSEwfX1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLG89T2JqZWN0LmRlZmluZVByb3BlcnR5LHM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxsPSJ3ZWFrbWFwOmlkZW50OiIrTWF0aC5yYW5kb20oKSsiX19fIjtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkpe3ZhciBjPW5ldyBBcnJheUJ1ZmZlcigyNSksdT1uZXcgVWludDhBcnJheShjKTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHUpLGw9IndlYWttYXA6cmFuZDoiK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh1LChmdW5jdGlvbih0KXtyZXR1cm4odCUzNikudG9TdHJpbmcoMzYpfSkpLmpvaW4oIiIpKyJfX18ifWlmKG8oT2JqZWN0LCJnZXRPd25Qcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkuZmlsdGVyKGcpfX0pLCJnZXRQcm9wZXJ0eU5hbWVzImluIE9iamVjdCl7dmFyIGY9T2JqZWN0LmdldFByb3BlcnR5TmFtZXM7byhPYmplY3QsImdldFByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZih0KS5maWx0ZXIoZyl9fSl9IWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmZyZWV6ZTtvKE9iamVjdCwiZnJlZXplIix7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSksdChlKX19KTt2YXIgZT1PYmplY3Quc2VhbDtvKE9iamVjdCwic2VhbCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2KHQpLGUodCl9fSk7dmFyIHI9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO28oT2JqZWN0LCJwcmV2ZW50RXh0ZW5zaW9ucyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2KHQpLHIodCl9fSl9KCk7dmFyIGg9ITEscD0wLGQ9ZnVuY3Rpb24oKXt0aGlzIGluc3RhbmNlb2YgZHx8eCgpO3ZhciB0PVtdLGU9W10scj1wKys7cmV0dXJuIE9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eSgoZnVuY3Rpb24obixpKXt2YXIgYSxvPXYobik7cmV0dXJuIG8/ciBpbiBvP29bcl06aTooYT10LmluZGV4T2YobikpPj0wP2VbYV06aX0pKX0saGFzX19fOnt2YWx1ZTp5KChmdW5jdGlvbihlKXt2YXIgbj12KGUpO3JldHVybiBuP3IgaW4gbjp0LmluZGV4T2YoZSk+PTB9KSl9LHNldF9fXzp7dmFsdWU6eSgoZnVuY3Rpb24obixpKXt2YXIgYSxvPXYobik7cmV0dXJuIG8/b1tyXT1pOihhPXQuaW5kZXhPZihuKSk+PTA/ZVthXT1pOihhPXQubGVuZ3RoLGVbYV09aSx0W2FdPW4pLHRoaXN9KSl9LGRlbGV0ZV9fXzp7dmFsdWU6eSgoZnVuY3Rpb24obil7dmFyIGksYSxvPXYobik7cmV0dXJuIG8/ciBpbiBvJiZkZWxldGUgb1tyXTohKChpPXQuaW5kZXhPZihuKSk8MCkmJihhPXQubGVuZ3RoLTEsdFtpXT12b2lkIDAsZVtpXT1lW2FdLHRbaV09dFthXSx0Lmxlbmd0aD1hLGUubGVuZ3RoPWEsITApfSkpfX0pfTtkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUse2dldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxoYXM6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc19fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sZGVsZXRlOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxldGVfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzIGluc3RhbmNlb2YgZHx8eCgpO3ZhciBlLG49bmV3IHIsaT12b2lkIDAsYT0hMTtyZXR1cm4gZT10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2V0KHQsZSksbi5oYXModCl8fChpfHwoaT1uZXcgZCksaS5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihhKXRyeXtuLnNldCh0LGUpfWNhdGNoKHIpe2l8fChpPW5ldyBkKSxpLnNldF9fXyh0LGUpfWVsc2Ugbi5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp5KChmdW5jdGlvbih0LGUpe3JldHVybiBpP24uaGFzKHQpP24uZ2V0KHQpOmkuZ2V0X19fKHQsZSk6bi5nZXQodCxlKX0pKX0saGFzX19fOnt2YWx1ZTp5KChmdW5jdGlvbih0KXtyZXR1cm4gbi5oYXModCl8fCEhaSYmaS5oYXNfX18odCl9KSl9LHNldF9fXzp7dmFsdWU6eShlKX0sZGVsZXRlX19fOnt2YWx1ZTp5KChmdW5jdGlvbih0KXt2YXIgZT0hIW4uZGVsZXRlKHQpO3JldHVybiBpJiZpLmRlbGV0ZV9fXyh0KXx8ZX0pKX0scGVybWl0SG9zdE9iamVjdHNfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKHQpe2lmKHQhPT1tKXRocm93IG5ldyBFcnJvcigiYm9ndXMgY2FsbCB0byBwZXJtaXRIb3N0T2JqZWN0c19fXyIpO2E9ITB9KSl9fSl9dCYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksbi5wcm90b3R5cGU9ZC5wcm90b3R5cGUsZS5leHBvcnRzPW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYWtNYXAucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOldlYWtNYXAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX0oKTooInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksZS5leHBvcnRzPWQpfWZ1bmN0aW9uIG0odCl7dC5wZXJtaXRIb3N0T2JqZWN0c19fXyYmdC5wZXJtaXRIb3N0T2JqZWN0c19fXyhtKX1mdW5jdGlvbiBnKHQpe3JldHVybiEoIndlYWttYXA6Ij09dC5zdWJzdHIoMCwid2Vha21hcDoiLmxlbmd0aCkmJiJfX18iPT09dC5zdWJzdHIodC5sZW5ndGgtMykpfWZ1bmN0aW9uIHYodCl7aWYodCE9PU9iamVjdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb3QgYW4gb2JqZWN0OiAiK3QpO3ZhciBlPXRbbF07aWYoZSYmZS5rZXk9PT10KXJldHVybiBlO2lmKHModCkpe2U9e2tleTp0fTt0cnl7cmV0dXJuIG8odCxsLHt2YWx1ZTplLHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExfSksZX1jYXRjaCh0KXtyZXR1cm59fX1mdW5jdGlvbiB5KHQpe3JldHVybiB0LnByb3RvdHlwZT1udWxsLE9iamVjdC5mcmVlemUodCl9ZnVuY3Rpb24geCgpe2h8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZXx8KGg9ITAsY29uc29sZS53YXJuKCJXZWFrTWFwIHNob3VsZCBiZSBpbnZva2VkIGFzIG5ldyBXZWFrTWFwKCksIG5vdCBXZWFrTWFwKCkuIFRoaXMgd2lsbCBiZSBhbiBlcnJvciBpbiB0aGUgZnV0dXJlLiIpKX19KCl9LHt9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2hpZGRlbi1zdG9yZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihlKXtpZigoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiV2Vha21hcC1zaGltOiBLZXkgbXVzdCBiZSBvYmplY3QiKTt2YXIgcj1lLnZhbHVlT2YodCk7cmV0dXJuIHImJnIuaWRlbnRpdHk9PT10P3I6bihlLHQpfX19LHsiLi9oaWRkZW4tc3RvcmUuanMiOjMxNX1dLDMxNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXtpZGVudGl0eTplfSxuPXQudmFsdWVPZjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbHVlT2YiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cn0sd3JpdGFibGU6ITB9KSxyfX0se31dLDMxNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY3JlYXRlLXN0b3JlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bigpO3JldHVybntnZXQ6ZnVuY3Rpb24oZSxyKXt2YXIgbj10KGUpO3JldHVybiBuLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP24udmFsdWU6cn0sc2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQoZSkudmFsdWU9cix0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuInZhbHVlImluIHQoZSl9LGRlbGV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIHQoZSkudmFsdWV9fX19LHsiLi9jcmVhdGUtc3RvcmUuanMiOjMxNH1dLDMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10WzBdLHM9clswXSxsPVswXSxjPXM7bnw9MDt2YXIgdT0wLGY9cztmb3IodT0wO3U8bzsrK3Upe3ZhciBoPWVbbl0tYSxwPWVbbitjXS1hO2g+PTAhPXA+PTAmJmkucHVzaChsWzBdKy41Ky41KihoK3ApLyhoLXApKSxuKz1mLCsrbFswXX19fTtlLmV4cG9ydHM9KG49e2Z1bmNOYW1lOntmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9LmZ1bmNOYW1lfSxmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9W2Esby5qb2luKCldLmpvaW4oKSxsPWVbc107cmV0dXJuIGx8fChlW3NdPWw9dChbYSxvXSkpLGwoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLGkpfX0oaS5iaW5kKHZvaWQgMCxuKSkpfSx7fV0sMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBlPStlfHwwLG4odC5oaSh0LnNoYXBlWzBdLTEpLHIsZSkscn07dmFyIG49dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjMxN31dfSx7fSxbNl0pKDYpfSkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dfSx7fSxbMjddKSgyNyl9KSk7`; export default content;