/*===================layout===================*/
* {
	-webkit-box-sizing: border-box;
	        box-sizing: border-box;
}

html {
	font-size: 16px;
	color: #252525;
	font-family: "Lato", "Noto Sans TC", sans-serif;
	line-height: 24px;
	letter-spacing: 0em;
}

body {
	padding-top: 80px;
	position: relative;
	background-color: #fff;
	word-break: break-word;
	-webkit-text-size-adjust: none;
}

@media only screen and (max-width: 1200px) {
	body {
		padding-top: 50px;
	}
}

.body-hidden {
	height: auto;
	overflow: hidden;
}

a {
	color: #252525;
	text-decoration: none;
	-webkit-transition: all .3s ease-out;
	-o-transition: all .3s ease-out;
	transition: all .3s ease-out;
}

a:hover {
	color: #004AAC;
	text-decoration: none;
	-webkit-transition: all .3s ease-out;
	-o-transition: all .3s ease-out;
	transition: all .3s ease-out;
}

.a1 {
	font-size: 24px;
	font-size: 1.5rem;
	line-height: 2.25rem;
}

.a2 {
	font-size: 32px;
	font-size: 2rem;
	line-height: 3rem;
}

.a3 {
	font-size: 40px;
	font-size: 2.5rem;
	line-height: 3.75rem;
}

.a4 {
	font-size: 48px;
	font-size: 3rem;
	line-height: 4.5rem;
}

.a5 {
	font-size: 56px;
	font-size: 3.5rem;
	line-height: 5.25rem;
}

@media only screen and (max-width: 1280px) {
	.a1 {
		font-size: 20px;
		font-size: 1.25rem;
		line-height: 1.875rem;
	}
	.a2 {
		font-size: 24px;
		font-size: 1.5rem;
		line-height: 2.25rem;
	}
	.a3 {
		font-size: 28px;
		font-size: 1.75rem;
		line-height: 2.625rem;
	}
	.a4 {
		font-size: 32px;
		font-size: 2rem;
		line-height: 3rem;
	}
	.a5 {
		font-size: 36px;
		font-size: 2.25rem;
		line-height: 3.375rem;
	}
}

@media only screen and (max-width: 768px) {
	.a1 {
		font-size: 19px;
		font-size: 1.188rem;
		line-height: 1.813rem;
	}
	.a2 {
		font-size: 22px;
		font-size: 1.375rem;
		line-height: 2.063rem;
	}
	.a3 {
		font-size: 25px;
		font-size: 1.563rem;
		line-height: 2.375rem;
	}
	.a4 {
		font-size: 28px;
		font-size: 1.75rem;
		line-height: 2.625rem;
	}
	.a5 {
		font-size: 31px;
		font-size: 1.938rem;
		line-height: 2.938rem;
	}
}

@media only screen and (max-width: 480px) {
	.a1 {
		font-size: 18.4px;
		font-size: 1.15rem;
		line-height: 1.75rem;
	}
	.a2 {
		font-size: 20.8px;
		font-size: 1.3rem;
		line-height: 2rem;
	}
	.a3 {
		font-size: 23.2px;
		font-size: 1.45rem;
		line-height: 2.188rem;
	}
	.a4 {
		font-size: 25.6px;
		font-size: 1.6rem;
		line-height: 2.438rem;
	}
	.a5 {
		font-size: 28px;
		font-size: 1.75rem;
		line-height: 2.625rem;
	}
}

input {
	line-height: 24px;
	-webkit-box-shadow: none;
	        box-shadow: none;
	border-radius: 0;
}

input[type="file"], input[type="button"], input[type="submit"], input[type="reset"], input[type="text"], input[type="number"], input[type="email"], input[type="tel"] {
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
}

input::-webkit-input-placeholder {
	color: #888;
}

input::-moz-placeholder {
	color: #888;
}

input:-ms-input-placeholder {
	color: #888;
}

input::-ms-input-placeholder {
	color: #888;
}

input::placeholder {
	color: #888;
}

input:focus::-webkit-input-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

input:focus::-moz-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

input:focus:-ms-input-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

input:focus::-ms-input-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

input:focus::placeholder {
	color: rgba(136, 136, 136, 0.5);
}

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
	-webkit-appearance: none !important;
	        appearance: none !important;
}

select, textarea {
	border-radius: 0;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
	line-height: 24px;
}

textarea {
	width: 100%;
	max-width: 100%;
	padding: 5px;
	-webkit-box-sizing: border-box;
	        box-sizing: border-box;
	border: 1px solid #f2f2f2;
}

select::-ms-expand {
	display: none;
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS9tYXN0ZXIuY3NzIiwic291cmNlcyI6WyJiYXNlL21hc3Rlci5zYXNzIiwic2V0dGluZy9fZGVmYXVsdC5zYXNzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS1wcmVmaXguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3MvX3ZlcnNpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fdXRpbGl0aWVzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LXZhbGlkYXRlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LW1hdGguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fc2V0dGluZ3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fbm9ybWFsaXplLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3BhcnNlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N5bnRheC1oZWxwZXJzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX2FwaS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L191bnByZWZpeC5zY3NzIiwic2V0dGluZy9fdmFyaWFibGUuc2FzcyIsInNldHRpbmcvX2Z1bmN0aW9uLnNhc3MiLCJzZXR0aW5nL19taXhpbi5zYXNzIiwic2V0dGluZy9fZXh0ZW5kLnNhc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy9UaGlzIGlzIHNhc3MgZmlsZVxuQGltcG9ydCBcIi4uL3NldHRpbmcvZGVmYXVsdFwiO1xuLyo9PT09PT09PT09PT09PT09PT09bGF5b3V0PT09PT09PT09PT09PT09PT09PSovXG4qIHtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDsgfVxuaHRtbCB7XG5cdGZvbnQtc2l6ZTogJGZvbnRTaXplO1xuXHRjb2xvcjogJHRleHRDb2xvcjtcblx0Zm9udC1mYW1pbHk6ICRmb250O1xuXHRsaW5lLWhlaWdodDogJGZvbnRMaDtcblx0bGV0dGVyLXNwYWNpbmc6ICRsZXR0ZXJTcGFjaW5nOyB9XG5ib2R5IHtcblx0cGFkZGluZy10b3A6IGdhcCg4KTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAkd2hpdGU7XG5cdHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG5cdC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogbm9uZTtcblx0QGluY2x1ZGUgcndkKDEyMDApIHtcblx0XHRwYWRkaW5nLXRvcDogZ2FwKDUpOyB9IH1cbi5ib2R5LWhpZGRlbiB7XG5cdGhlaWdodDogYXV0bztcblx0b3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4vL+aWh+Wtl+ioreWumlxuYSB7XG5cdGNvbG9yOiAkdGV4dENvbG9yO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZS1vdXQ7XG5cdCY6aG92ZXIge1xuXHRcdGNvbG9yOiAkdGV4dEhDb2xvcjtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0dHJhbnNpdGlvbjogYWxsIC4zcyBlYXNlLW91dDsgfSB9XG4vL+aWh+Wtl+Wtl+e0mueUoueUn+WZqFxuQG1peGluIGZMdigkZkx2OiAxKSB7XG5cdEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJEZvbnRMZXZlbCB7XG5cdFx0LmEjeyRpfSB7XG5cdFx0XHRAaWYgJGZMdiA9PSAxIHtcblx0XHRcdFx0QGluY2x1ZGUgZm9udC1sZXZlbCgkaSk7IH1cblx0XHRcdEBlbHNlIHtcblx0XHRcdFx0JGZMdnRleHQ6ICRpIC8gJGZMdiAqIDEuNTtcblx0XHRcdFx0QGluY2x1ZGUgZm9udC1sZXZlbCgkZkx2dGV4dCk7IH0gfSB9IH1cbkBpbmNsdWRlIGZMdigpO1xuQGVhY2ggJGFNb2RpZnksJGFQb2ludCBpbiAkZ3JpZC1wcm9wcyB7XG5cdEBpZiAkYVBvaW50IDw9ICRncmlkTGcge1xuXHRcdEBpbmNsdWRlIHJ3ZCgkYVBvaW50KSB7XG5cdFx0XHRAaW5jbHVkZSBmTHYoaW5kZXgoJGdyaWQtcHJvcHMsJGFNb2RpZnkgJGFQb2ludCkpOyB9IH0gfVxuLy9pbnB1dCDoqK3lrppcbmlucHV0IHtcblx0bGluZS1oZWlnaHQ6ICRmb250TGg7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG5cdC8vSU9T5Y675ZyT6KeSXG5cdGJvcmRlci1yYWRpdXM6IDA7XG5cdCZbdHlwZT1cImZpbGVcIl0sJlt0eXBlPVwiYnV0dG9uXCJdLCZbdHlwZT1cInN1Ym1pdFwiXSwmW3R5cGU9XCJyZXNldFwiXSwmW3R5cGU9XCJ0ZXh0XCJdLCZbdHlwZT1cIm51bWJlclwiXSwmW3R5cGU9XCJlbWFpbFwiXSwmW3R5cGU9XCJ0ZWxcIl0ge1xuXHRcdGFwcGVhcmFuY2U6IG5vbmU7IH1cblx0Jjo6cGxhY2Vob2xkZXIge1xuXHRcdGNvbG9yOiAkcGxhY2Vob2xkZXJDb2xvcjsgfVxuXHQmOmZvY3VzIHtcblx0XHQmOjpwbGFjZWhvbGRlciB7XG5cdFx0XHRjb2xvcjogcmdiYSgkcGxhY2Vob2xkZXJDb2xvciwuNSk7IH0gfSB9XG5cbi8vIGlucHV0IG51bWJlcuS4jeWHuuePvuS4iuS4i+euremgrVxuaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXG5pbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG5cdGFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDsgfVxuXG5zZWxlY3QsIHRleHRhcmVhIHtcblx0Ly9JT1PljrvlnJPop5Jcblx0Ym9yZGVyLXJhZGl1czogMDtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0bGluZS1oZWlnaHQ6ICRmb250TGg7IH1cblxudGV4dGFyZWEge1xuXHR3aWR0aDogMTAwJTtcblx0bWF4LXdpZHRoOiAxMDAlO1xuXHRwYWRkaW5nOiA1cHg7XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdGJvcmRlcjogMXB4IHNvbGlkICRmb3JtTGluZUNvbG9yOyB9XG4vL2llIGFwcGVhcmFuY2VcbnNlbGVjdDo6LW1zLWV4cGFuZCB7XG5cdGRpc3BsYXk6IG5vbmU7IH1cbiIsIi8vVGhpcyBpcyBzYXNzIGZpbGVcbkBpbXBvcnQgJ3N1c3knO1xuQGltcG9ydCBcInZhcmlhYmxlXCI7XG5AaW1wb3J0IFwiZnVuY3Rpb25cIjtcbkBpbXBvcnQgXCJtaXhpblwiO1xuQGltcG9ydCBcImV4dGVuZFwiO1xuIiwiLy8gU3VzeSAoVW4tUHJlZml4ZWQpXG4vLyA9PT09PT09PT09PT09PT09PT1cblxuQGltcG9ydCAnc3VzeS1wcmVmaXgnO1xuQGltcG9ydCAnc3VzeS91bnByZWZpeCc7XG4iLCIvLyBTdXN5IChQcmVmaXhlZClcbi8vID09PT09PT09PT09PT09PVxuXG5cbkBpbXBvcnQgJ3ZlcnNpb24nO1xuQGltcG9ydCAnc3VzeS91dGlsaXRpZXMnO1xuQGltcG9ydCAnc3VzeS9zdS12YWxpZGF0ZSc7XG5AaW1wb3J0ICdzdXN5L3N1LW1hdGgnO1xuQGltcG9ydCAnc3VzeS9zZXR0aW5ncyc7XG5AaW1wb3J0ICdzdXN5L25vcm1hbGl6ZSc7XG5AaW1wb3J0ICdzdXN5L3BhcnNlJztcbkBpbXBvcnQgJ3N1c3kvc3ludGF4LWhlbHBlcnMnO1xuQGltcG9ydCAnc3VzeS9hcGknO1xuIiwiLy8gUmVsZWFzZSBNYW5hZ2VtZW50IGluIFN1c3lcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxuLy8gU3VzeSBWZXJzaW9uIFt2YXJpYWJsZV1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBTdXN5IGJlaW5nIHVzZWQuXG4vLy8gLSBXZSB3aWxsIHJlbGVhc2UgYSBtYWpvciB2ZXJzaW9uIGZvciBhbnkgQlJFQUtJTkcgY2hhbmdlcy5cbi8vLyAtIFdlIHdpbGwgcmVsZWFzZSBhIG1pbm9yIHZlcnNpb24gZm9yIGFueSBzaWduaWZpY2FudCBORVcgZmVhdHVyZXMuXG4vLy8gLSBXZSB3aWxsIHJlbGVhc2UgYSBwYXRjaCBmb3IgYW55IEJVR0ZJWCBjaGFuZ2VzLlxuLy8vXG4vLy8gQGdyb3VwIF92ZXJzaW9uXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8gQHNpbmNlIDMuMC4xXG4vLy9cbi8vLyBAcHJvcCB7aW50ZWdlcn0gJ21ham9yJyAtIHRoZSBtYWpvciByZWxlYXNlIG51bWJlclxuLy8vIEBwcm9wIHtpbnRlZ2VyfSAnbWlub3InIC0gdGhlIG1pbm9yIHJlbGVhc2UgbnVtYmVyXG4vLy8gQHByb3Age2ludGVnZXJ9ICdwYXRjaCcgLSB0aGUgcGF0Y2ggbnVtYmVyXG4kX3N1c3ktdmVyc2lvbjogKFxuICAnbWFqb3InOiAzLFxuICAnbWlub3InOiAwLFxuICAncGF0Y2gnOiA3LFxuKTtcblxuXG4vLyBTdXN5IFZlcnNpb24gW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgU3VzeVxuLy8vIGFzIGEgc3RyaW5nIGluIHRoZSBjb21tb24gYG1ham9yLm1pbm9yLnBhdGNoYCBmb3JtYXQg4oCTXG4vLy8gb3IgcmV0dXJucyBvbmUgcGFydCAobWFqb3IgfCBtaW5vciB8IHBhdGNoKSBhcyBhIG51bWJlclxuLy8vIGZvciB2ZXJzaW9uIGNvbXBhcmlzb25zLlxuLy8vIFNpbmNlIHZlcnNpb24gbnVtYmVycyBhcmVuJ3QgYWN0dWFsIGRlY2ltYWxzLFxuLy8vIHRoZXJlIGlzIG5vIHNpbXBsZSB3YXkgdG8gcmV0dXJuIHRoZSBmdWxsIHZlcnNpb25cbi8vLyBhcyBhIGNvbXBhcmFibGUgbnVtYmVyIGluIFNhc3MuXG4vLy9cbi8vLyBAZ3JvdXAgX3ZlcnNpb25cbi8vL1xuLy8vIEBwYXJhbSB7J21ham9yJyB8ICdtaW5vcicgfCAncGF0Y2gnfSAkcGFydCBbbnVsbF0gLVxuLy8vICAgVGhlIHBhcnQgKG1ham9yIHwgbWlub3IgfCBwYXRjaCkgdG8gcmV0dXJuIGFzIGEgbnVtYmVyLlxuLy8vICAgQW55IG90aGVyIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHZlcnNpb24gYXMgYSBzdHJpbmcuXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEN1cnJlbnQgU3VzeSBWZXJzaW9uXG4vLy8gICAvKiBGdWxsIFZlcnNpb246ICN7c3VzeS12ZXJzaW9uKCl9ICovXG4vLy8gICAvKiBNYWpvciBSZWxlYXNlOiAje3N1c3ktdmVyc2lvbignbWFqb3InKX0gKi9cbkBmdW5jdGlvbiBzdXN5LXZlcnNpb24oXG4gICRwYXJ0OiBudWxsXG4pIHtcbiAgJG1ham9yOiBtYXAtZ2V0KCRfc3VzeS12ZXJzaW9uLCAnbWFqb3InKTtcbiAgJG1pbm9yOiBtYXAtZ2V0KCRfc3VzeS12ZXJzaW9uLCAnbWlub3InKTtcbiAgJHBhdGNoOiBtYXAtZ2V0KCRfc3VzeS12ZXJzaW9uLCAncGF0Y2gnKTtcbiAgJGZ1bGw6ICcjeyRtYWpvcn0uI3skbWlub3J9LiN7JHBhdGNofSc7XG5cbiAgQHJldHVybiBtYXAtZ2V0KCRfc3VzeS12ZXJzaW9uLCAkcGFydCkgb3IgJGZ1bGw7XG59XG4iLCIvLyBTYXNzIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT1cbi8vIC0gU3VzeSBFcnJvciBPdXRwdXQgT3ZlcnJpZGUgW3ZhcmlhYmxlXVxuLy8gLSBTdXN5IEVycm9yIFtmdW5jdGlvbl1cblxuXG5cbi8vIFN1c3kgRXJyb3IgT3V0cHV0IE92ZXJyaWRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8vIFR1cm4gb2ZmIGVycm9yIG91dHB1dCBmb3IgdGVzdGluZ1xuLy8vIEBncm91cCB4LXV0aWxpdHlcbi8vLyBAYWNjZXNzIHByaXZhdGVcbiRfc3VzeS1lcnJvci1vdXRwdXQtb3ZlcnJpZGU6IGZhbHNlICFkZWZhdWx0O1xuXG5cblxuLy8gU3VzeSBFcnJvclxuLy8gLS0tLS0tLS0tLVxuLy8vIE9wdGlvbmFsbHkgcmV0dXJuIGVycm9yIG1lc3NhZ2VzIHdpdGhvdXQgZmFpbGluZyxcbi8vLyBhcyBhIHdheSB0byB0ZXN0IGVycm9yIGNhc2VzXG4vLy9cbi8vLyBAZ3JvdXAgeC11dGlsaXR5XG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge3N0cmluZ30gJG1lc3NhZ2UgLVxuLy8vICAgQSB1c2VmdWwgZXJyb3IgbWVzc2FnZSwgZXhwbGFpbmluZyB0aGUgcHJvYmxlbVxuLy8vIEBwYXJhbSB7c3RyaW5nfSAkc291cmNlIC1cbi8vLyAgIFRoZSBvcmlnaW5hbCBzb3VyY2Ugb2YgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmdcbi8vLyBAcGFyYW0ge2Jvb2x9ICRvdmVycmlkZSBbJF9zdXN5LWVycm9yLW91dHB1dC1vdmVycmlkZV0gLVxuLy8vICAgT3B0aW9uYWxseSByZXR1cm4gdGhlIGVycm9yIHJhdGhlciB0aGFuIGZhaWxpbmdcbi8vLyBAcmV0dXJuIHtzdHJpbmd9IC1cbi8vLyAgIENvbWJpbmVkIGVycm9yIHdpdGggc291cmNlIGFuZCBtZXNzYWdlXG4vLy8gQHRocm93cyBXaGVuIGAkb3ZlcnJpZGUgPT0gdHJ1ZWBcbkBmdW5jdGlvbiBfc3VzeS1lcnJvcihcbiAgJG1lc3NhZ2UsXG4gICRzb3VyY2UsXG4gICRvdmVycmlkZTogJF9zdXN5LWVycm9yLW91dHB1dC1vdmVycmlkZVxuKSB7XG4gIEBpZiAkb3ZlcnJpZGUge1xuICAgIEByZXR1cm4gJ0VSUk9SIFsjeyRzb3VyY2V9XSAjeyRtZXNzYWdlfSc7XG4gIH1cblxuICBAZXJyb3IgJ1sjeyRzb3VyY2V9XSAjeyRtZXNzYWdlfSc7XG59XG5cblxuLy8gU3UgSXMgQ29tcGFyYWJsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIHVuaXRzIGluIGEgZ3JpZCBhcmUgY29tcGFyYWJsZVxuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlcnN9ICRsZW5ndGhz4oCmIC1cbi8vLyAgIEFyZ2xpc3Qgb2YgYWxsIHRoZSBudW1iZXIgdmFsdWVzIHRvIGNvbXBhcmVcbi8vLyAgIChjb2x1bW5zLCBndXR0ZXJzLCBzcGFuLCBldGMpXG4vLy9cbi8vLyBAcmV0dXJuIHsnZmx1aWQnIHwgJ3N0YXRpYycgfCBmYWxzZX0gLVxuLy8vICAgVGhlIHR5cGUgb2Ygc3BhbiAoZmx1aWQgb3Igc3RhdGljKSB3aGVuIHVuaXRzIG1hdGNoLFxuLy8vICAgb3IgYGZhbHNlYCBmb3IgbWlzbWF0Y2hlZCB1bml0c1xuQGZ1bmN0aW9uIF9zdS1pcy1jb21wYXJhYmxlKFxuICAkbGVuZ3Rocy4uLlxuKSB7XG4gICRmaXJzdDogbnRoKCRsZW5ndGhzLCAxKTtcblxuICBAaWYgKGxlbmd0aCgkbGVuZ3RocykgPT0gMSkge1xuICAgIEByZXR1cm4gaWYodW5pdGxlc3MoJGZpcnN0KSwgJ2ZsdWlkJywgJ3N0YXRpYycpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCBsZW5ndGgoJGxlbmd0aHMpIHtcbiAgICAkY29tcDogbnRoKCRsZW5ndGhzLCAkaSk7XG5cbiAgICAkZmFpbDogbm90IGNvbXBhcmFibGUoJGZpcnN0LCAkY29tcCk7XG4gICAgJGZhaWw6ICRmYWlsIG9yICh1bml0bGVzcygkZmlyc3QpIGFuZCBub3QgdW5pdGxlc3MoJGNvbXApKTtcbiAgICAkZmFpbDogJGZhaWwgb3IgKHVuaXRsZXNzKCRjb21wKSBhbmQgbm90IHVuaXRsZXNzKCRmaXJzdCkpO1xuXG4gICAgQGlmICRmYWlsIHtcbiAgICAgIEByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBpZih1bml0bGVzcygkZmlyc3QpLCAnZmx1aWQnLCAnc3RhdGljJyk7XG59XG5cblxuLy8gU3UgTWFwIEFkZCBVbml0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8vIFRoZSBjYWxjIGZlYXR1cmVzIHVzZSBhIG1hcCBvZiB1bml0cyBhbmQgdmFsdWVzXG4vLy8gdG8gY29tcGlsZSB0aGUgcHJvcGVyIGFsZ29yeXRobS5cbi8vLyBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBuZXcgdmFsdWUgdG8gYW55IGNvbXBhcmFibGUgZXhpc3RpbmcgdW5pdC92YWx1ZSxcbi8vLyBvciBhZGRzIGEgbmV3IHVuaXQvdmFsdWUgcGFpciB0byB0aGUgbWFwXG4vLy9cbi8vLyBAZ3JvdXAgeC11dGlsaXR5XG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJG1hcCAtXG4vLy8gICBBIG1hcCBvZiB1bml0L3ZhbHVlIHBhaXJzLCBlLmcuICgncHgnOiAxMjBweClcbi8vLyBAcGFyYW0ge2xlbmd0aH0gJHZhbHVlIC1cbi8vLyAgIEEgbmV3IGxlbmd0aCB0byBiZSBhZGRlZCB0byB0aGUgbWFwXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBUaGUgdXBkYXRlZCBtYXAsIHdpdGggbmV3IHZhbHVlIGFkZGVkXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC1cbi8vLyAgICRtYXA6ICgwcHg6IDEyMHB4KTtcbi8vLyAgICRtYXA6IF9zdS1tYXAtYWRkLXVuaXRzKCRtYXAsIDFpbik7IC8vIGFkZCBhIGNvbXBhcmFibGUgdW5pdFxuLy8vICAgJG1hcDogX3N1LW1hcC1hZGQtdW5pdHMoJG1hcCwgM3Z3KTsgLy8gYWRkIGEgbmV3IHVuaXRcbi8vL1xuLy8vICAgQGVhY2ggJHVuaXRzLCAkdmFsdWUgaW4gJG1hcCB7XG4vLy8gICAgIC8qICN7JHVuaXRzfTogI3skdmFsdWV9ICovXG4vLy8gICB9XG5AZnVuY3Rpb24gX3N1LW1hcC1hZGQtdW5pdHMoXG4gICRtYXAsXG4gICR2YWx1ZVxuKSB7XG4gICR1bml0OiAkdmFsdWUgKiAwO1xuICAkaGFzOiBtYXAtZ2V0KCRtYXAsICR1bml0KSBvciAwO1xuXG4gIEBpZiAoJGhhcyA9PSAwKSB7XG4gICAgQGVhY2ggJHRyeSwgJGNvdWxkIGluICRtYXAge1xuICAgICAgJG1hdGNoOiBjb21wYXJhYmxlKCR0cnksICR2YWx1ZSk7XG4gICAgICAkdW5pdDogaWYoJG1hdGNoLCAkdHJ5LCAkdW5pdCk7XG4gICAgICAkaGFzOiBpZigkbWF0Y2gsICRjb3VsZCwgJGhhcyk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJG1hcCwgKCR1bml0OiAkaGFzICsgJHZhbHVlKSk7XG59XG5cblxuLy8gU3VzeSBGbGF0dGVuXG4vLyAtLS0tLS0tLS0tLS1cbi8vLyBGbGF0dGVuIGEgbXVsdGlkaW1lbnNpb25hbCBsaXN0XG4vLy9cbi8vLyBAZ3JvdXAgeC11dGlsaXR5XG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRsaXN0IC1cbi8vLyAgIFRoZSBsaXN0IHRvIGJlIGZsYXR0ZW5lZFxuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIFRoZSBmbGF0dGVuZWQgbGlzdFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkbGlzdDogMTIwcHggKDMwZW0gMzBlbSkgMTIwcHg7XG4vLy8gICAvKiAje19zdXN5LWZsYXR0ZW4oJGxpc3QpfSAqL1xuQGZ1bmN0aW9uIF9zdXN5LWZsYXR0ZW4oXG4gICRsaXN0XG4pIHtcbiAgJGZsYXQ6ICgpO1xuXG4gIC8vIERvbid0IGl0ZXJhdGUgb3ZlciBtYXBzXG4gIEBpZiAodHlwZS1vZigkbGlzdCkgPT0gJ21hcCcpIHtcbiAgICBAcmV0dXJuICRsaXN0O1xuICB9XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIGxpc3RzIChvciBzaW5nbGUgaXRlbXMpXG4gIEBlYWNoICRpdGVtIGluICRsaXN0IHtcbiAgICBAaWYgKHR5cGUtb2YoJGl0ZW0pID09ICdsaXN0Jykge1xuICAgICAgJGl0ZW06IF9zdXN5LWZsYXR0ZW4oJGl0ZW0pO1xuICAgICAgJGZsYXQ6IGpvaW4oJGZsYXQsICRpdGVtKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmbGF0OiBhcHBlbmQoJGZsYXQsICRpdGVtKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gZmxhdHRlbmVkIGxpc3RcbiAgQHJldHVybiAkZmxhdDtcbn1cbiIsIi8vLyBWYWxpZGF0aW9uXG4vLy8gPT09PT09PT09PVxuLy8vIEVhY2ggYXJndW1lbnQgdG8gU3UgaGFzIGEgc2luZ2xlIGNhbm9uaWNhbCBzeW50YXguXG4vLy8gVGhlc2UgdmFsaWRhdGlvbiBmdW5jdGlvbnMgY2hlY2sgdG8gZW5zdXJlXG4vLy8gdGhhdCBlYWNoIGFyZ3VtZW50IGlzIHZhbGlkLFxuLy8vIGluIG9yZGVyIHRvIHByb3ZpZGUgdXNlZnVsIGVycm9yc1xuLy8vIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNhbGN1bGF0ZSB0aGUgcmVzdWx0cy9cbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vXG4vLy8gQHNlZSBzdS12YWxpZC1jb2x1bW5zXG4vLy8gQHNlZSBzdS12YWxpZC1ndXR0ZXJzXG4vLy8gQHNlZSBzdS12YWxpZC1zcHJlYWRcbi8vLyBAc2VlIHN1LXZhbGlkLWxvY2F0aW9uXG5cblxuXG4vLyBWYWxpZCBTcGFuXG4vLyAtLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYHNwYW5gIGFyZ3VtZW50XG4vLy8gaXMgYSBudW1iZXIsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3Rcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXIgfCBsaXN0fSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgY29sdW1ucywgb3IgbGVuZ3RoIG9mIHNwYW5cbi8vL1xuLy8vIEByZXR1cm4ge251bWJlciB8IGxpc3R9IC1cbi8vLyAgIFZhbGlkYXRlZCBgJHNwYW5gIG51bWJlciwgbGVuZ3RoLCBvciBjb2x1bW5zIGxpc3Rcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBzcGFuIHZhbHVlIGlzIG5vdCBhIG51bWJlciwgb3IgdmFsaWQgY29sdW1uIGxpc3RcbkBmdW5jdGlvbiBzdS12YWxpZC1zcGFuKFxuICAkc3BhblxuKSB7XG4gICR0eXBlOiB0eXBlLW9mKCRzcGFuKTtcbiAgQGlmICgkdHlwZSA9PSAnbnVtYmVyJykge1xuICAgIEByZXR1cm4gJHNwYW47XG4gIH0gQGVsc2UgaWYgKCR0eXBlID09ICdsaXN0JykgYW5kIHN1LXZhbGlkLWNvbHVtbnMoJHNwYW4sICdzaWxlbnQtZmFpbHVyZScpIHtcbiAgICBAcmV0dXJuICRzcGFuO1xuICB9XG5cbiAgJGFjdHVhbDogJ1sje3R5cGUtb2YoJHNwYW4pfV0gYCN7aW5zcGVjdCgkc3Bhbil9YCc7XG4gIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgJyN7JGFjdHVhbH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyLCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0IGZvciAkc3Bhbi4nLFxuICAgICdzdS12YWxpZC1zcGFuJyk7XG59XG5cblxuXG4vLyBWYWxpZCBDb2x1bW5zXG4vLyAtLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYGNvbHVtbnNgIGFyZ3VtZW50IGlzIGEgdmFsaWRcbi8vLyBsaXN0IG9mIGNvbHVtbi1sZW5ndGhzXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW4tbGVuZ3Roc1xuLy8vIEBwYXJhbSB7Ym9vbH0gJHNpbGVudC1mYWlsdXJlIFt0cnVlXSAtXG4vLy8gICBTZXQgZmFsc2UgdG8gcmV0dXJuIG51bGwgb24gZmFpbHVyZVxuLy8vXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgVmFsaWRhdGVkIGAkY29sdW1uc2AgbGlzdFxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIGNvbHVtbiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBsaXN0IG9mIG51bWJlcnNcbkBmdW5jdGlvbiBzdS12YWxpZC1jb2x1bW5zKFxuICAkY29sdW1ucyxcbiAgJHNpbGVudC1mYWlsdXJlOiBmYWxzZVxuKSB7XG4gIEBpZiAodHlwZS1vZigkY29sdW1ucykgPT0gJ2xpc3QnKSB7XG4gICAgJGZhaWw6IGZhbHNlO1xuXG4gICAgQGVhY2ggJGNvbCBpbiAkY29sdW1ucyB7XG4gICAgICBAaWYgKHR5cGUtb2YoJGNvbCkgIT0gJ251bWJlcicpIHtcbiAgICAgICAgJGZhaWw6IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmIG5vdCAkZmFpbCB7XG4gICAgICBAcmV0dXJuICRjb2x1bW5zO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNpbGVudCBGYWlsdXJlXG4gIEBpZiAkc2lsZW50LWZhaWx1cmUge1xuICAgIEByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEVycm9yIE1lc3NhZ2VcbiAgJGFjdHVhbDogJ1sje3R5cGUtb2YoJGNvbHVtbnMpfV0gYCN7aW5zcGVjdCgkY29sdW1ucyl9YCc7XG5cbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSB2YWxpZCBsaXN0IG9mIG51bWJlcnMgZm9yICRjb2x1bW5zLicsXG4gICAgJ3N1LXZhbGlkLWNvbHVtbnMnKTtcbn1cblxuXG5cbi8vIFZhbGlkIEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSBgZ3V0dGVyc2AgYXJndW1lbnQgaXMgYSB2YWxpZCBudW1iZXJcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXJ9IC1cbi8vLyAgIFZhbGlkYXRlZCBgJGd1dHRlcnNgIG51bWJlclxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIGd1dHRlciB2YWx1ZSBpcyBub3QgYSBudW1iZXJcbkBmdW5jdGlvbiBzdS12YWxpZC1ndXR0ZXJzKFxuICAkZ3V0dGVyc1xuKSB7XG4gICR0eXBlOiB0eXBlLW9mKCRndXR0ZXJzKTtcblxuICBAaWYgKCR0eXBlID09ICdudW1iZXInKSB7XG4gICAgQHJldHVybiAkZ3V0dGVycztcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3skdHlwZX1dIGAje2luc3BlY3QoJGd1dHRlcnMpfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICcjeyRhY3R1YWx9IGlzIG5vdCBhIG51bWJlciBvciBsZW5ndGggZm9yICRndXR0ZXJzLicsXG4gICAgJ3N1LXZhbGlkLWd1dHRlcnMnKTtcbn1cblxuXG5cbi8vIFZhbGlkIFNwcmVhZFxuLy8gLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYHNwcmVhZGAgYXJndW1lbnQgaXMgYSB2YWxpZFxuLy8vIGludGlnZXIgYmV0d2VlbiBgLTFgIGFuZCBgMWBcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHRvIGluY2x1ZGUgaW4gYSBzcGFuLFxuLy8vICAgcmVsYXRpdmUgdG8gdGhlIG51bWJlciBjb2x1bW5zXG4vLy9cbi8vLyBAcmV0dXJuIHswIHwgMSB8IC0xfSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRzcHJlYWRgIG51bWJlclxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIHNwcmVhZCB2YWx1ZSBpcyBub3QgYSB2YWxpZCBzcHJlYWRcbkBmdW5jdGlvbiBzdS12YWxpZC1zcHJlYWQoXG4gICRzcHJlYWRcbikge1xuICBAaWYgaW5kZXgoMCAxIC0xLCAkc3ByZWFkKSB7XG4gICAgQHJldHVybiAkc3ByZWFkO1xuICB9XG5cbiAgJGFjdHVhbDogJ1sje3R5cGUtb2YoJHNwcmVhZCl9XSBgI3tpbnNwZWN0KCRzcHJlYWQpfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICcjeyRhY3R1YWx9IGlzIG5vdCBhIG5vcm1hbGl6ZWQgWzAgfCAxIHwgLTFdIHZhbHVlIGZvciBgJHNwcmVhZGAuJyxcbiAgICAnc3UtdmFsaWQtc3ByZWFkJyk7XG59XG5cblxuXG4vLyBWYWxpZCBMb2NhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSBgbG9jYXRpb25gIGFyZ3VtZW50IGlzIGEgdmFsaWQgbnVtYmVyLFxuLy8vIHdpdGhpbiB0aGUgc2NvcGUgb2YgYXZhaWxhYmxlIGNvbHVtbnNcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRzcGFuIC1cbi8vLyAgIE51bWJlciBvZiBncmlkLWNvbHVtbnMgdG8gYmUgc3Bhbm5lZFxuLy8vIEBwYXJhbSB7aW50ZWdlciB8IHN0cmluZ30gJGxvY2F0aW9uIC1cbi8vLyAgIFN0YXJ0aW5nICgxLWluZGV4ZWQpIGNvbHVtbi1wb3NpdGlvbiBvZiB0aGF0IHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vL1xuLy8vIEByZXR1cm4ge2ludGVnZXJ9IC1cbi8vLyAgIFZhbGlkYXRlZCBgJGxvY2F0aW9uYCBpbnRpZ2VyXG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gbG9jYXRpb24gdmFsdWUgaXMgbm90IGEgdmFsaWQgaW5kZXgsXG4vLy8gICBnaXZlbiB0aGUgY29udGV4dCBhbmQgc3Bhbi5cbkBmdW5jdGlvbiBzdS12YWxpZC1sb2NhdGlvbihcbiAgJHNwYW4sXG4gICRsb2NhdGlvbixcbiAgJGNvbHVtbnNcbikge1xuICAkY291bnQ6IGxlbmd0aCgkY29sdW1ucyk7XG5cbiAgQGlmICRsb2NhdGlvbiB7XG4gICAgQGlmICh0eXBlLW9mKCRsb2NhdGlvbikgIT0gJ251bWJlcicpIG9yIChub3QgdW5pdGxlc3MoJGxvY2F0aW9uKSkge1xuICAgICAgJGFjdHVhbDogJ1sje3R5cGUtb2YoJGxvY2F0aW9uKX1dIGAjeyRsb2NhdGlvbn1gJztcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICcjeyRhY3R1YWx9IGlzIG5vdCBhIHVuaXRsZXNzIG51bWJlciBmb3IgJGxvY2F0aW9uLicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH0gQGVsc2UgaWYgKHJvdW5kKCRsb2NhdGlvbikgIT0gJGxvY2F0aW9uKSB7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnTG9jYXRpb24gKGAjeyRsb2NhdGlvbn1gKSBtdXN0IGJlIGEgMS1pbmRleGVkIGludGlnZXIgcG9zaXRpb24uJyxcbiAgICAgICAgJ3N1LXZhbGlkLWxvY2F0aW9uJyk7XG4gICAgfSBAZWxzZSBpZiAoJGxvY2F0aW9uID4gJGNvdW50KSBvciAoJGxvY2F0aW9uIDwgMSkge1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICAgJ1Bvc2l0aW9uIGAjeyRsb2NhdGlvbn1gIGRvZXMgbm90IGV4aXN0IGluIGdyaWQgYCN7JGNvbHVtbnN9YC4nLFxuICAgICAgICAnc3UtdmFsaWQtbG9jYXRpb24nKTtcbiAgICB9IEBlbHNlIGlmICgkbG9jYXRpb24gKyAkc3BhbiAtIDEgPiAkY291bnQpIHtcbiAgICAgICRkZXRhaWxzOiAnZ3JpZCBgI3skY29sdW1uc31gIGZvciBzcGFuIGAjeyRzcGFufWAgYXQgYCN7JGxvY2F0aW9ufWAnO1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICAgJ1RoZXJlIGFyZSBub3QgZW5vdWdoIGNvbHVtbnMgaW4gI3skZGV0YWlsc30uJyxcbiAgICAgICAgJ3N1LXZhbGlkLWxvY2F0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbG9jYXRpb247XG59XG4iLCIvLy8gR3JpZCBNYXRoIEVuZ2luZVxuLy8vID09PT09PT09PT09PT09PT1cbi8vLyBUaGUgYHN1YCBmdW5jdGlvbnMgZ2l2ZSB5b3UgZGlyZWN0IGFjY2VzcyB0byB0aGUgbWF0aCBsYXllcixcbi8vLyB3aXRob3V0IGFueSBzeW50YXgtc3VnYXIgbGlrZSBzaG9ydGhhbmQgcGFyc2luZywgYW5kIG5vcm1hbGl6YXRpb24uXG4vLy8gSWYgeW91IHByZWZlciBuYW1lZCBhcmd1bWVudHMsIGFuZCBzdHJpcHBlZC1kb3duIHN5bnRheCxcbi8vLyB5b3UgY2FuIHVzZSB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW4geW91ciBjb2RlIOKAk1xuLy8vIHJlcGxhY2luZyBgc3BhbmAsIGBndXR0ZXJgLCBhbmQgYHNsaWNlYC5cbi8vL1xuLy8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxzbyB1c2VmdWxcbi8vLyBmb3IgYnVpbGRpbmcgbWl4aW5zIG9yIG90aGVyIGV4dGVuc2lvbnMgdG8gU3VzeS5cbi8vLyBBcHBseSB0aGUgU3VzeSBzeW50YXggdG8gbmV3IG1peGlucyBhbmQgZnVuY3Rpb25zLFxuLy8vIHVzaW5nIG91ciBcIlBsdWdpbiBIZWxwZXJzXCIsXG4vLy8gb3Igd3JpdGUgeW91ciBvd24gc3ludGF4IGFuZCBwYXNzIHRoZSBub3JtYWxpemVkIHJlc3VsdHMgYWxvbmdcbi8vLyB0byBgc3VgIGZvciBjb21waWxhdGlvbi5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy9cbi8vLyBAc2VlIHN1LXNwYW5cbi8vLyBAc2VlIHN1LWd1dHRlclxuLy8vIEBzZWUgc3Utc2xpY2Vcbi8vLyBAaWdub3JlIF9zdS1zdW1cbi8vLyBAaWdub3JlIF9zdS1jYWxjLXNwYW5cbi8vLyBAaWdub3JlIF9zdS1jYWxjLXN1bVxuLy8vIEBpZ25vcmUgX3N1LW5lZWRzLWNhbGMtb3V0cHV0XG5cblxuXG4vLyBTdSBTcGFuXG4vLyAtLS0tLS0tXG4vLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhIENTUy1yZWFkeSBzcGFuIHdpZHRoLFxuLy8vIGJhc2VkIG9uIG5vcm1hbGl6ZWQgc3BhbiBhbmQgY29udGV4dCBkYXRhIOKAk1xuLy8vIGEgbG93LWxldmVsIHZlcnNpb24gb2YgYHN1c3ktc3BhbmAsXG4vLy8gd2l0aCBhbGwgb2YgdGhlIGxvZ2ljIGFuZCBub25lIG9mIHRoZSBzeW50YXggc3VnYXIuXG4vLy9cbi8vLyAtIEdyaWRzIGRlZmluZWQgd2l0aCB1bml0bGVzcyBudW1iZXJzIHdpbGwgcmV0dXJuIGAlYCB2YWx1ZXMuXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggY29tcGFyYWJsZSB1bml0c1xuLy8vICAgd2lsbCByZXR1cm4gYSB2YWx1ZSBpbiB0aGUgdW5pdHMgcHJvdmlkZWQuXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggYSBtaXggb2YgdW5pdHMsXG4vLy8gICBvciBhIGNvbWJpbmF0aW9uIG9mIHVudGlsZXNzIG51bWJlcnMgYW5kIHVuaXQtbGVuZ3Rocyxcbi8vLyAgIHdpbGwgcmV0dXJuIGEgYGNhbGMoKWAgc3RyaW5nLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAc2VlIHN1c3ktc3BhblxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXIgfCBsaXN0fSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb3IgbGlzdCBvZiBncmlkIGNvbHVtbnMgdG8gc3BhblxuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGF2YWlsYWJsZVxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlciBpbiBjb2x1bW4tY29tcGFyYWJsZSB1bml0c1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYHNwYW5gIGNvdW50XG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkY29udGFpbmVyLXNwcmVhZCBbJHNwcmVhZF0gLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBjb2x1bW5zYCBjb3VudFxuLy8vIEBwYXJhbSB7aW50ZWdlcn0gJGxvY2F0aW9uIFsxXSAtXG4vLy8gICBPcHRpb25hbCBwb3NpdGlvbiBvZiBzdWItc3BhbiBhbW9uZyBmdWxsIHNldCBvZiBjb2x1bW5zXG4vLy9cbi8vLyBAcmV0dXJuIHtsZW5ndGh9IC1cbi8vLyAgIFJlbGF0aXZlIG9yIHN0YXRpYyBsZW5ndGggb2YgYSBzcGFuIG9uIHRoZSBncmlkXG5AZnVuY3Rpb24gc3Utc3BhbihcbiAgJHNwYW4sXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJHNwcmVhZCxcbiAgJGNvbnRhaW5lci1zcHJlYWQ6ICRzcHJlYWQsXG4gICRsb2NhdGlvbjogMVxuKSB7XG4gICRzcGFuOiBzdS12YWxpZC1zcGFuKCRzcGFuKTtcbiAgJGNvbHVtbnM6IHN1LXZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAkZ3V0dGVyczogc3UtdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG4gICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcblxuICBAaWYgKHR5cGUtb2YoJHNwYW4pID09ICdudW1iZXInKSB7XG4gICAgQGlmIChub3QgdW5pdGxlc3MoJHNwYW4pKSB7XG4gICAgICBAcmV0dXJuICRzcGFuO1xuICAgIH1cblxuICAgICRsb2NhdGlvbjogc3UtdmFsaWQtbG9jYXRpb24oJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xuICAgICRzcGFuOiBzdS1zbGljZSgkc3BhbiwgJGNvbHVtbnMsICRsb2NhdGlvbiwgJHZhbGlkYXRlOiBmYWxzZSk7XG4gIH1cblxuICBAaWYgX3N1LW5lZWRzLWNhbGMtb3V0cHV0KCRzcGFuLCAkY29sdW1ucywgJGd1dHRlcnMsICRzcHJlYWQsIG5vdCAndmFsaWRhdGUnKSB7XG4gICAgQHJldHVybiBfc3UtY2FsYy1zcGFuKCRzcGFuLCAkY29sdW1ucywgJGd1dHRlcnMsICRzcHJlYWQsICRjb250YWluZXItc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJyk7XG4gIH1cblxuICAkc3Bhbi13aWR0aDogX3N1LXN1bSgkc3BhbiwgJGd1dHRlcnMsICRzcHJlYWQsICR2YWxpZGF0ZTogZmFsc2UpO1xuXG4gIEBpZiB1bml0bGVzcygkc3Bhbi13aWR0aCkge1xuICAgICRjb250YWluZXItc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJGNvbnRhaW5lci1zcHJlYWQpO1xuICAgICRjb250YWluZXI6IF9zdS1zdW0oJGNvbHVtbnMsICRndXR0ZXJzLCAkY29udGFpbmVyLXNwcmVhZCwgJHZhbGlkYXRlOiBmYWxzZSk7XG4gICAgQHJldHVybiBwZXJjZW50YWdlKCRzcGFuLXdpZHRoIC8gJGNvbnRhaW5lcik7XG4gIH1cblxuICBAcmV0dXJuICRzcGFuLXdpZHRoO1xufVxuXG5cblxuLy8gU3UgR3V0dGVyXG4vLyAtLS0tLS0tLS1cbi8vLyBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIGEgQ1NTLXJlYWR5IGd1dHRlciB3aWR0aCxcbi8vLyBiYXNlZCBvbiBub3JtYWxpemVkIGdyaWQgZGF0YSDigJNcbi8vLyBhIGxvdy1sZXZlbCB2ZXJzaW9uIG9mIGBzdXN5LWd1dHRlcmAsXG4vLy8gd2l0aCBhbGwgb2YgdGhlIGxvZ2ljIGFuZCBub25lIG9mIHRoZSBzeW50YXggc3VnYXIuXG4vLy9cbi8vLyAtIEdyaWRzIGRlZmluZWQgd2l0aCB1bml0bGVzcyBudW1iZXJzIHdpbGwgcmV0dXJuIGAlYCB2YWx1ZXMuXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggY29tcGFyYWJsZSB1bml0c1xuLy8vICAgd2lsbCByZXR1cm4gYSB2YWx1ZSBpbiB0aGUgdW5pdHMgcHJvdmlkZWQuXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggYSBtaXggb2YgdW5pdHMsXG4vLy8gICBvciBhIGNvbWJpbmF0aW9uIG9mIHVudGlsZXNzIG51bWJlcnMgYW5kIHVuaXQtbGVuZ3Rocyxcbi8vLyAgIHdpbGwgcmV0dXJuIGEgYGNhbGMoKWAgc3RyaW5nLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAc2VlIHN1c3ktZ3V0dGVyXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlciBpbiBjb2x1bW4tY29tcGFyYWJsZSB1bml0c1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJGNvbnRhaW5lci1zcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBjb2x1bW5zYCBjb3VudFxuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBSZWxhdGl2ZSBvciBzdGF0aWMgbGVuZ3RoIG9mIG9uZSBndXR0ZXIgaW4gYSBncmlkXG5AZnVuY3Rpb24gc3UtZ3V0dGVyKFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRjb250YWluZXItc3ByZWFkXG4pIHtcbiAgQGlmICh0eXBlLW9mKCRndXR0ZXJzKSA9PSAnbnVtYmVyJykge1xuICAgIEBpZiAoJGd1dHRlcnMgPT0gMCkgb3IgKG5vdCB1bml0bGVzcygkZ3V0dGVycykpIHtcbiAgICAgIEByZXR1cm4gJGd1dHRlcnM7XG4gICAgfVxuICB9XG5cbiAgQGlmIF9zdS1uZWVkcy1jYWxjLW91dHB1dCgkZ3V0dGVycywgJGNvbHVtbnMsICRndXR0ZXJzLCAtMSwgbm90ICd2YWxpZGF0ZScpIHtcbiAgICBAcmV0dXJuIF9zdS1jYWxjLXNwYW4oJGd1dHRlcnMsICRjb2x1bW5zLCAkZ3V0dGVycywgLTEsICRjb250YWluZXItc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJyk7XG4gIH1cblxuICAkY29udGFpbmVyOiBfc3Utc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgJGNvbnRhaW5lci1zcHJlYWQpO1xuICBAcmV0dXJuIHBlcmNlbnRhZ2UoJGd1dHRlcnMgLyAkY29udGFpbmVyKTtcbn1cblxuXG5cbi8vIFN1IFNsaWNlXG4vLyAtLS0tLS0tLVxuLy8vIFJldHVybnMgYSBsaXN0IG9mIGNvbHVtbnNcbi8vLyBiYXNlZCBvbiBhIGdpdmVuIHNwYW4vbG9jYXRpb24gc2xpY2Ugb2YgdGhlIGdyaWQg4oCTXG4vLy8gYSBsb3ctbGV2ZWwgdmVyc2lvbiBvZiBgc3VzeS1zbGljZWAsXG4vLy8gd2l0aCBhbGwgb2YgdGhlIGxvZ2ljIGFuZCBub25lIG9mIHRoZSBzeW50YXggc3VnYXIuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBzZWUgc3VzeS1zbGljZVxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRzcGFuIC1cbi8vLyAgIE51bWJlciBvZiBncmlkIGNvbHVtbnMgdG8gc3BhblxuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRsb2NhdGlvbiBbMV0gLVxuLy8vICAgU3RhcnRpbmcgaW5kZXggb2YgYSBzcGFuIGluIHRoZSBsaXN0IG9mIGNvbHVtbnNcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBTdWJzZXQgbGlzdCBvZiBncmlkIGNvbHVtbnMsIGJhc2VkIG9uIHNwYW4gYW5kIGxvY2F0aW9uXG5AZnVuY3Rpb24gc3Utc2xpY2UoXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGxvY2F0aW9uOiAxLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICAgJGxvY2F0aW9uOiBzdS12YWxpZC1sb2NhdGlvbigkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG4gIH1cblxuICAkZmxvb3I6IGZsb29yKCRzcGFuKTtcbiAgJHN1Yi1jb2x1bW5zOiAoKTtcblxuICBAZm9yICRpIGZyb20gJGxvY2F0aW9uIHRvICgkbG9jYXRpb24gKyAkZmxvb3IpIHtcbiAgICAkc3ViLWNvbHVtbnM6IGFwcGVuZCgkc3ViLWNvbHVtbnMsIG50aCgkY29sdW1ucywgJGkpKTtcbiAgfVxuXG4gIEBpZiAkZmxvb3IgIT0gJHNwYW4ge1xuICAgICRyZW1haW5kZXI6ICRzcGFuIC0gJGZsb29yO1xuICAgICRjb2x1bW46ICRsb2NhdGlvbiArICRmbG9vcjtcbiAgICAkc3ViLWNvbHVtbnM6IGFwcGVuZCgkc3ViLWNvbHVtbnMsIG50aCgkY29sdW1ucywgJGNvbHVtbikgKiAkcmVtYWluZGVyKTtcbiAgfVxuXG4gIEByZXR1cm4gJHN1Yi1jb2x1bW5zO1xufVxuXG5cblxuLy8gU3UgU3VtXG4vLyAtLS0tLS1cbi8vLyBHZXQgdGhlIHRvdGFsIHN1bSBvZiBjb2x1bW4tdW5pdHMgaW4gYSBsYXlvdXQuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBjb2x1bW5zYCBjb3VudFxuLy8vIEBwYXJhbSB7Ym9vbH0gJHZhbGlkYXRlIFt0cnVlXSAtXG4vLy8gICBDaGVjayB0aGF0IGFyZ3VtZW50cyBhcmUgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmdcbi8vL1xuLy8vIEByZXR1cm4ge251bWJlcn0gLVxuLy8vICAgVG90YWwgc3VtIG9mIGNvbHVtbi11bml0cyBpbiBhIGdyaWRcbkBmdW5jdGlvbiBfc3Utc3VtKFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRjb2x1bW5zOiBzdS12YWxpZC1zcGFuKCRjb2x1bW5zKTtcbiAgICAkZ3V0dGVyczogc3UtdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG4gICAgJHNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRzcHJlYWQpO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGNvbHVtbi1zdW1cbiAgJGNvbHVtbi1zdW06IDA7XG4gIEBlYWNoICRjb2x1bW4gaW4gJGNvbHVtbnMge1xuICAgICRjb2x1bW4tc3VtOiAkY29sdW1uLXN1bSArICRjb2x1bW47XG4gIH1cblxuICAkZ3V0dGVyLXN1bTogKGNlaWwobGVuZ3RoKCRjb2x1bW5zKSkgKyAkc3ByZWFkKSAqICRndXR0ZXJzO1xuICAkdG90YWw6IGlmKCgkZ3V0dGVyLXN1bSA+IDApLCAkY29sdW1uLXN1bSArICRndXR0ZXItc3VtLCAkY29sdW1uLXN1bSk7XG5cbiAgQHJldHVybiAkdG90YWw7XG59XG5cblxuXG4vLyBTdSBDYWxjXG4vLyAtLS0tLS0tXG4vLy8gUmV0dXJuIGEgdXNhYmxlIHNwYW4gd2lkdGggYXMgYSBgY2FsYygpYCBmdW5jdGlvbixcbi8vLyBpbiBvcmRlciB0byBjcmVhdGUgbWl4ZWQtdW5pdCBncmlkcy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlciB8IGxpc3R9ICRzcGFuIC1cbi8vLyAgIFByZS1zbGljZWQgbGlzdCBvZiBncmlkIGNvbHVtbnMgdG8gc3BhblxuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGF2YWlsYWJsZVxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlciBpbiBjb2x1bW4tY29tcGFyYWJsZSB1bml0c1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYHNwYW5gIGNvdW50XG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkY29udGFpbmVyLXNwcmVhZCBbJHNwcmVhZF0gLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBjb2x1bW5zYCBjb3VudFxuLy8vIEBwYXJhbSB7Ym9vbH0gJHZhbGlkYXRlIFt0cnVlXSAtXG4vLy8gICBDaGVjayB0aGF0IGFyZ3VtZW50cyBhcmUgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmdcbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgUmVsYXRpdmUgb3Igc3RhdGljIGxlbmd0aCBvZiBhIHNwYW4gb24gdGhlIGdyaWRcbkBmdW5jdGlvbiBfc3UtY2FsYy1zcGFuKFxuICAkc3BhbixcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkY29udGFpbmVyLXNwcmVhZDogJHNwcmVhZCxcbiAgJHZhbGlkYXRlOiB0cnVlXG4pIHtcbiAgQGlmICR2YWxpZGF0ZSB7XG4gICAgJHNwYW46IHN1LXZhbGlkLXNwYW4oJHNwYW4pO1xuICAgICRjb2x1bW5zOiBzdS12YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgICAkZ3V0dGVyczogc3UtdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG4gICAgJHNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRzcHJlYWQpO1xuICAgICRjb250YWluZXItc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJGNvbnRhaW5lci1zcHJlYWQpO1xuICB9XG5cbiAgLy8gU3BhbiBhbmQgY29udGV4dFxuICAkc3BhbjogX3N1LWNhbGMtc3VtKCRzcGFuLCAkZ3V0dGVycywgJHNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuICAkY29udGV4dDogX3N1LWNhbGMtc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgJGNvbnRhaW5lci1zcHJlYWQsIG5vdCAndmFsaWRhdGUnKTtcblxuICAvLyBGaXhlZCBhbmQgZmx1aWRcbiAgJGZpeGVkLXNwYW46IG1hcC1nZXQoJHNwYW4sICdmaXhlZCcpO1xuICAkZmx1aWQtc3BhbjogbWFwLWdldCgkc3BhbiwgJ2ZsdWlkJyk7XG4gICRmaXhlZC1jb250ZXh0OiBtYXAtZ2V0KCRjb250ZXh0LCAnZml4ZWQnKTtcbiAgJGZsdWlkLWNvbnRleHQ6IG1hcC1nZXQoJGNvbnRleHQsICdmbHVpZCcpO1xuXG4gICRjYWxjOiAnI3skZml4ZWQtc3Bhbn0nO1xuICAkZmx1aWQtY2FsYzogJygxMDAlIC0gI3skZml4ZWQtY29udGV4dH0pJztcblxuICAvLyBGbHVpZC12YWx1ZXNcbiAgQGlmIChub3QgJGZsdWlkLXNwYW4pIHtcbiAgICAkZmx1aWQtY2FsYzogbnVsbDtcbiAgfSBAZWxzZSBpZiAoJGZsdWlkLXNwYW4gIT0gJGZsdWlkLWNvbnRleHQpIHtcbiAgICAkZmx1aWQtc3BhbjogJyogI3skZmx1aWQtc3Bhbn0nO1xuICAgICRmbHVpZC1jb250ZXh0OiBpZigkZmx1aWQtY29udGV4dCwgJy8gI3skZmx1aWQtY29udGV4dH0nLCAnJyk7XG4gICAgJGZsdWlkLWNhbGM6ICcoI3skZmx1aWQtY2FsYyAkZmx1aWQtY29udGV4dCAkZmx1aWQtc3Bhbn0pJztcbiAgfVxuXG4gIEBpZiAkZmx1aWQtY2FsYyB7XG4gICAgJGNhbGM6IGlmKCgkY2FsYyAhPSAnJyksICcjeyRjYWxjfSArICcsICcnKTtcbiAgICAkY2FsYzogJyN7JGNhbGMgKyAkZmx1aWQtY2FsY30nO1xuICB9XG5cbiAgQHJldHVybiBjYWxjKCN7dW5xdW90ZSgkY2FsYyl9KTtcbn1cblxuXG5cbi8vIFN1IENhbGMtU3VtXG4vLyAtLS0tLS0tLS0tLVxuLy8vIEdldCB0aGUgdG90YWwgc3VtIG9mIGZpeGVkIGFuZCBmbHVpZCBjb2x1bW4tdW5pdHNcbi8vLyBmb3IgY3JlYXRpbmcgYSBtaXhlZC11bml0IGxheW91dCB3aXRoIGBjYWxjKClgIHZhbHVlcy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBhdmFpbGFibGVcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7Ym9vbH0gJHZhbGlkYXRlIFt0cnVlXSAtXG4vLy8gICBDaGVjayB0aGF0IGFyZ3VtZW50cyBhcmUgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmdcbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgTWFwIHdpdGggYGZpeGVkYCBhbmQgYGZsdWlkYCBrZXlzXG4vLy8gICBjb250YWluaW5nIHRoZSBwcm9wZXIgbWF0aCBhcyBzdHJpbmdzXG5AZnVuY3Rpb24gX3N1LWNhbGMtc3VtKFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRjb2x1bW5zOiBzdS12YWxpZC1zcGFuKCRjb2x1bW5zKTtcbiAgICAkZ3V0dGVyczogc3UtdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG4gICAgJHNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRzcHJlYWQpO1xuICB9XG5cbiAgJGZsdWlkOiAwO1xuICAkZml4ZWQ6ICgpO1xuICAkY2FsYzogbnVsbDtcblxuICAvLyBHdXR0ZXJzXG4gICRndXR0ZXJzOiAgJGd1dHRlcnMgKiAobGVuZ3RoKCRjb2x1bW5zKSArICRzcHJlYWQpO1xuXG4gIC8vIENvbHVtbnNcbiAgQGVhY2ggJGNvbCBpbiBhcHBlbmQoJGNvbHVtbnMsICRndXR0ZXJzKSB7XG4gICAgQGlmIHVuaXRsZXNzKCRjb2wpIHtcbiAgICAgICRmbHVpZDogJGZsdWlkICsgJGNvbDtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmaXhlZDogX3N1LW1hcC1hZGQtdW5pdHMoJGZpeGVkLCAkY29sKTtcbiAgICB9XG4gIH1cblxuICAvLyBDb21waWxlIEZpeGVkIFVuaXRzXG4gIEBlYWNoICR1bml0LCAkdG90YWwgaW4gJGZpeGVkIHtcbiAgICBAaWYgKCR0b3RhbCAhPSAoMCAqICR0b3RhbCkpIHtcbiAgICAgICRjYWxjOiBpZigkY2FsYywgJyN7JGNhbGN9ICsgI3skdG90YWx9JywgJyN7JHRvdGFsfScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbGMgbnVsbCBvciBzdHJpbmdcbiAgQGlmICRjYWxjIHtcbiAgICAkY2FsYzogaWYoc3RyLWluZGV4KCRjYWxjLCAnKycpLCAnKCN7JGNhbGN9KScsICcjeyRjYWxjfScpO1xuICB9XG5cbiAgLy8gRmx1aWQgMCA9PiBudWxsXG4gICRmbHVpZDogaWYoKCRmbHVpZCA9PSAwKSwgbnVsbCwgJGZsdWlkKTtcblxuXG4gIC8vIFJldHVybiBtYXBcbiAgJHJldHVybjogKFxuICAgICdmaXhlZCc6ICRjYWxjLFxuICAgICdmbHVpZCc6ICRmbHVpZCxcbiAgKTtcblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cblxuXG4vLyBOZWVkcyBDYWxjXG4vLyAtLS0tLS0tLS0tXG4vLy8gQ2hlY2sgaWYgYGNhbGMoKWAgd2lsbCBiZSBuZWVkZWQgaW4gZGVmaW5pbmcgYSBzcGFuLFxuLy8vIGlmIHRoZSBuZWNlc3NhcnkgdW5pdHMgaW4gYSBncmlkIGFyZSBub3QgY29tcGFyYWJsZS5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRzcGFuIC1cbi8vLyAgIFNsaWNlIG9mIGNvbHVtbnMgdG8gc3BhblxuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBhdmFpbGFibGUgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlclxuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyBzcGFubmVkLFxuLy8vICAgcmVsYXRpdmUgdG8gYHNwYW5gIGNvdW50XG4vLy8gQHBhcmFtIHtib29sfSAkdmFsaWRhdGUgW3RydWVdIC1cbi8vLyAgIENoZWNrIHRoYXQgYXJndW1lbnRzIGFyZSB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuLy8vXG4vLy8gQHJldHVybiB7Ym9vbH0gLVxuLy8vICAgYFRydWVgIHdoZW4gdW5pdHMgZG8gbm90IG1hdGNoLCBhbmQgYGNhbGMoKWAgd2lsbCBiZSByZXF1aXJlZFxuQGZ1bmN0aW9uIF9zdS1uZWVkcy1jYWxjLW91dHB1dChcbiAgJHNwYW4sXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJHNwcmVhZCxcbiAgJHZhbGlkYXRlOiB0cnVlXG4pIHtcbiAgQGlmICR2YWxpZGF0ZSB7XG4gICAgJHNwYW46IHN1LXZhbGlkLXNwYW4oJHNwYW4pO1xuICAgICRjb2x1bW5zOiBzdS12YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgICAkZ3V0dGVyczogc3UtdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG4gIH1cblxuICAkaGFzLWd1dHRlcjogaWYoKGxlbmd0aCgkc3BhbikgPiAxKSBvciAoJHNwcmVhZCA+PSAwKSwgdHJ1ZSwgZmFsc2UpO1xuICAkY2hlY2s6IGlmKCRoYXMtZ3V0dGVyLCBhcHBlbmQoJHNwYW4sICRndXR0ZXJzKSwgJHNwYW4pO1xuICAkc2FmZS1zcGFuOiBfc3UtaXMtY29tcGFyYWJsZSgkY2hlY2suLi4pO1xuXG4gIEBpZiAoJHNhZmUtc3BhbiA9PSAnc3RhdGljJykge1xuICAgIEByZXR1cm4gZmFsc2U7XG4gIH0gQGVsc2UgaWYgKG5vdCAkc2FmZS1zcGFuKSB7XG4gICAgQHJldHVybiB0cnVlO1xuICB9XG5cbiAgJHNhZmUtZmx1aWQ6IF9zdS1pcy1jb21wYXJhYmxlKCRndXR0ZXJzLCAkY29sdW1ucy4uLik7XG5cbiAgQHJldHVybiBub3QgJHNhZmUtZmx1aWQ7XG59XG4iLCIvLy8gU3VzeTMgQ29uZmlndXJhdGlvblxuLy8vID09PT09PT09PT09PT09PT09PT1cbi8vLyBTdXN5MyBoYXMgNCBjb3JlIHNldHRpbmdzLCBpbiBhIHNpbmdsZSBzZXR0aW5ncyBtYXAuXG4vLy8gWW91J2xsIG5vdGljZSBhIGZldyBkaWZmZXJlbmNlcyBmcm9tIFN1c3kyOlxuLy8vXG4vLy8gKipDb2x1bW5zKiogbm8gbG9uZ2VyIGFjY2VwdCBhIHNpbmdsZSBudW1iZXIsIGxpa2UgYDEyYCxcbi8vLyBidXQgdXNlIGEgc3ludGF4IG1vcmUgc2ltaWxhciB0byB0aGUgbmV3XG4vLy8gQ1NTIFtncmlkLXRlbXBsYXRlLWNvbHVtbnNdW2NvbHVtbnNdIOKAk1xuLy8vIGEgbGlzdCBvZiByZWxhdGl2ZSBzaXplcyBmb3IgZWFjaCBjb2x1bW4gb24gdGhlIGdyaWQuXG4vLy8gVW5pdGxlc3MgbnVtYmVycyBpbiBTdXN5IGFjdCB2ZXJ5IHNpbWlsYXIgdG8gYGZyYCB1bml0cyBpbiBDU1MsXG4vLy8gYW5kIHRoZSBgc3VzeS1yZXBlYXQoKWAgZnVuY3Rpb24gKHNpbWlsYXIgdG8gdGhlIGNzcyBgcmVwZWF0KClgKVxuLy8vIGhlbHBzIHF1aWNrbHkgZXN0YWJsaXNoIGVxdWFsLXdpZHRoIGNvbHVtbnMuXG4vLy9cbi8vLyBbY29sdW1uc106IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9ncmlkLXRlbXBsYXRlLWNvbHVtbnNcbi8vL1xuLy8vIC0gYHN1c3ktcmVwZWF0KDEyKWAgd2lsbCBjcmVhdGUgMTIgZmx1aWQsIGVxdWFsLXdpZHRoIGNvbHVtbnNcbi8vLyAtIGBzdXN5LXJlcGVhdCg2LCAxMjBweClgIHdpbGwgY3JlYXRlIDYgZXF1YWwgYDEyMHB4YC13aWRlIGNvbHVtbnNcbi8vLyAtIGAxMjBweCBzdXN5LXJlcGVhdCg0KSAxMjBweGAgd2lsbCBjcmVhdGUgNiBjb2x1bW5zLFxuLy8vICAgdGhlIGZpcnN0IGFuZCBsYXN0IGFyZSBgMTIwcHhgLFxuLy8vICAgd2hpbGUgdGhlIG1pZGRsZSA0IGFyZSBlcXVhbCBmcmFjdGlvbnMgb2YgdGhlIHJlbWFpbmRlci5cbi8vLyAgIFN1c3kgd2lsbCBvdXRwdXQgYGNhbGMoKWAgdmFsdWVzIGluIG9yZGVyIHRvIGFjaGlldmUgdGhpcy5cbi8vL1xuLy8vICoqR3V0dGVycyoqIGhhdmVuJ3QgY2hhbmdlZCDigJNcbi8vLyBhIHNpbmdsZSBmcmFjdGlvbiBvciBleHBsaWNpdCB3aWR0aCDigJNcbi8vLyBidXQgdGhlIGBjYWxjKClgIG91dHB1dCBmZWF0dXJlXG4vLy8gbWVhbnMgeW91IGNhbiBub3cgdXNlIGFueSBjb21iaW5hdGlvbiBvZiB1bml0cyBhbmQgZnJhY3Rpb25zXG4vLy8gdG8gY3JlYXRlIHN0YXRpYy1ndXR0ZXJzIG9uIGEgZmx1aWQgZ3JpZCwgZXRjLlxuLy8vXG4vLy8gKipTcHJlYWQqKiBleGlzdGVkIGluIHRoZSBTdXN5MiBBUEkgYXMgYSBzcGFuIG9wdGlvbixcbi8vLyBhbmQgd2FzIG90aGVyd2lzZSBoYW5kbGVkIGJlaGluZCB0aGUgc2NlbmVzLlxuLy8vIE5vdyB3ZSdyZSBnaXZpbmcgeW91IGZ1bGwgY29udHJvbCBvdmVyIGFsbCBzcHJlYWQgaXNzdWVzLlxuLy8vIFlvdSBjYW4gZmluZCBhIG1vcmUgW2RldGFpbGVkIGV4cGxhbmF0aW9uIG9mIHNwcmVhZCBvbiB0aGUgYmxvZ11bc3ByZWFkXS5cbi8vL1xuLy8vIFtzcHJlYWRdOiBodHRwOi8vb2RkYmlyZC5uZXQvMjAxNy8wNi8xMy9zdXN5LXNwcmVhZC9cbi8vL1xuLy8vIFlvdSBjYW4gYWNjZXNzIHlvdXIgZ2xvYmFsIHNldHRpbmdzIGF0IGFueSB0aW1lXG4vLy8gd2l0aCB0aGUgYHN1c3ktc2V0dGluZ3MoKWAgZnVuY3Rpb24sXG4vLy8gb3IgZ3JhYiBhIHNpbmdsZSBzZXR0aW5nIGZyb20gdGhlIGdsb2JhbCBzY29wZVxuLy8vIHdpdGggYHN1c3ktZ2V0KCdjb2x1bW5zJylgLCBgc3VzeS1nZXQoJ2d1dHRlcnMnKWAgZXRjLlxuLy8vXG4vLy8gQGdyb3VwIGNvbmZpZ1xuLy8vIEBsaW5rIGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzEzL3N1c3ktc3ByZWFkL1xuLy8vICAgQXJ0aWNsZTogVW5kZXJzdGFuZGluZyBTcHJlYWQgaW4gU3VzeTNcbi8vL1xuLy8vIEBzZWUgJHN1c3lcbi8vLyBAc2VlIHN1c3ktc2V0dGluZ3Ncbi8vLyBAc2VlIHN1c3ktZ2V0XG5cblxuXG4vLyBTdXN5XG4vLyAtLS0tXG4vLy8gVGhlIGdyaWQgaXMgZGVmaW5lZCBpbiBhIHNpbmdsZSBtYXAgdmFyaWFibGUsXG4vLy8gd2l0aCBmb3VyIGluaXRpYWwgcHJvcGVydGllczpcbi8vLyBgY29sdW1uc2AsIGBndXR0ZXJzYCwgYHNwcmVhZGAgYW5kIGBjb250YWluZXItc3ByZWFkYC5cbi8vLyBBbnl0aGluZyB5b3UgcHV0IGluIHRoZSByb290IGAkc3VzeWAgdmFyaWFibGUgbWFwXG4vLy8gd2lsbCBiZSB0cmVhdGVkIGFzIGEgZ2xvYmFsIHByb2plY3QgZGVmYXVsdC5cbi8vLyBZb3UgY2FuIGNyZWF0ZSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gbWFwc1xuLy8vIHVuZGVyIGRpZmZlcmVudCB2YXJpYWJsZSBuYW1lcyxcbi8vLyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMgYXMtbmVlZGVkLlxuLy8vXG4vLy8gQGdyb3VwIGNvbmZpZ1xuLy8vIEB0eXBlIE1hcFxuLy8vXG4vLy8gQHNlZSAkX3N1c3ktZGVmYXVsdHNcbi8vLyBAc2VlIHtmdW5jdGlvbn0gc3VzeS1yZXBlYXRcbi8vLyBAbGlua1xuLy8vICAgaHR0cHM6Ly9jb2RlcGVuLmlvL21pcmlzdXphbm5lL3Blbi9FZ21KSnA/ZWRpdG9ycz0xMTAwXG4vLy8gICBTcHJlYWQgZXhhbXBsZXMgb24gQ29kZVBlblxuLy8vXG4vLy8gQHByb3Age2xpc3R9IGNvbHVtbnMgLVxuLy8vICAgQ29sdW1ucyBhcmUgZGVzY3JpYmVkIGJ5IGEgbGlzdCBvZiBudW1iZXJzLFxuLy8vICAgcmVwcmVzZW50aW5nIHRoZSByZWxhdGl2ZSB3aWR0aCBvZiBlYWNoIGNvbHVtbi5cbi8vLyAgIFRoZSBzeW50YXggaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgQ1NTIG5hdGl2ZVxuLy8vICAgYGdyaWQtdGVtcGxhdGUtY29sdW1uc2AsXG4vLy8gICBleHBlY3RpbmcgYSBsaXN0IG9mIGdyaWQtY29sdW1uIHdpZHRocy5cbi8vLyAgIFVuaXRsZXNzIG51bWJlcnMgY3JlYXRlIGZyYWN0aW9uYWwgZmx1aWQgY29sdW1uc1xuLy8vICAgKHNpbWlsYXIgdG8gdGhlIENTUy1uYXRpdmUgYGZyYCB1bml0KSxcbi8vLyAgIHdoaWxlIGxlbmd0aCB2YWx1ZXMgKHVuaXRlZCBudW1iZXJzKVxuLy8vICAgYXJlIHVzZWQgdG8gZGVmaW5lIHN0YXRpYyBjb2x1bW5zLlxuLy8vICAgWW91IGNhbiBtaXgtYW5kIG1hdGNoIHVuaXRzIGFuZCBmcmFjdGlvbnMsXG4vLy8gICB0byBjcmVhdGUgYSBtaXhlZCBncmlkLlxuLy8vICAgU3VzeSB3aWxsIGdlbmVyYXRlIGBjYWxjKClgIHZhbHVlcyB3aGVuIG5lY2Vzc2FyeSxcbi8vLyAgIHRvIG1ha2UgYWxsIHlvdXIgdW5pdHMgd29yayB0b2dldGhlci5cbi8vL1xuLy8vICAgVXNlIHRoZSBgc3VzeS1yZXBlYXQoJGNvdW50LCAkdmFsdWUpYCBmdW5jdGlvblxuLy8vICAgdG8gbW9yZSBlYXNpbHkgcmVwZXRhdGl2ZSBjb2x1bW5zLFxuLy8vICAgc2ltaWxhciB0byB0aGUgQ1NTLW5hdGl2ZSBgcmVwZWF0KClgLlxuLy8vXG4vLy8gICAtIGBzdXN5LXJlcGVhdCg4KWA6XG4vLy8gICAgIGFuIDgtY29sdW1uLCBzeW1tZXRyaWNhbCwgZmx1aWQgZ3JpZC5cbi8vLyAgICAgPGJyIC8+SWRlbnRpY2FsIHRvIGAoMSAxIDEgMSAxIDEgMSAxKWAuXG4vLy8gICAtIGBzdXN5LXJlcGVhdCg2LCA4ZW0pYDpcbi8vLyAgICAgYSA2LWNvbHVtbiwgc3ltbWV0cmljYWwsIGVtLWJhc2VkIGdyaWQuXG4vLy8gICAgIDxiciAvPklkZW50aWNhbCB0byBgKDhlbSA4ZW0gOGVtIDhlbSA4ZW0gOGVtKWAuXG4vLy8gICAtIGAoMzAwcHggc3VzeS1yZXBlYXQoNCkgMzAwcHgpYDpcbi8vLyAgICAgYSA2LWNvbHVtbiwgYXN5bW1ldHJpY2FsLCBtaXhlZCBmbHVpZC9zdGF0aWMgZ3JpZFxuLy8vICAgICB1c2luZyBgY2FsYygpYCBvdXRwdXQuXG4vLy8gICAgIDxiciAvPklkZW50aWNhbCB0byBgKDMwMHB4IDEgMSAxIDEgMzAwcHgpYC5cbi8vL1xuLy8vICAgKipOT1RFKiogdGhhdCBgMTJgIGlzIG5vIGxvbmdlciBhIHZhbGlkIDEyLWNvbHVtbiBncmlkIGRlZmluaXRpb24sXG4vLy8gICBhbmQgeW91IG11c3QgbGlzdCBhbGwgdGhlIGNvbHVtbnMgaW5kaXZpZHVhbGx5XG4vLy8gICAob3IgYnkgdXNpbmcgdGhlIGBzdXN5LXJlcGVhdCgpYCBmdW5jdGlvbikuXG4vLy9cbi8vLyBAcHJvcCB7bnVtYmVyfSBndXR0ZXJzIC1cbi8vLyAgIEd1dHRlcnMgYXJlIGRlZmluZWQgYXMgYSBzaW5nbGUgd2lkdGgsXG4vLy8gICBvciBmbHVpZCByYXRpbywgc2ltaWxhciB0byB0aGUgbmF0aXZlLUNTU1xuLy8vICAgYGdyaWQtY29sdW1uLWdhcGAgc3ludGF4LlxuLy8vICAgU2ltaWxhciB0byBjb2x1bW5zLFxuLy8vICAgZ3V0dGVycyBjYW4gdXNlIGFueSB2YWxpZCBDU1MgbGVuZ3RoIHVuaXQsXG4vLy8gICBvciB1bml0bGVzcyBudW1iZXJzIHRvIGRlZmluZSBhIHJlbGF0aXZlIGZyYWN0aW9uLlxuLy8vXG4vLy8gICAtIGAwLjVgOlxuLy8vICAgICBhIGZsdWlkIGd1dHRlciwgaGFsZiB0aGUgc2l6ZSBvZiBhIHNpbmdsZS1mcmFjdGlvbiBjb2x1bW4uXG4vLy8gICAtIGAxZW1gOlxuLy8vICAgICBhIHN0YXRpYyBndXR0ZXIsIGAxZW1gIHdpZGUuXG4vLy9cbi8vLyAgIE1peCBzdGF0aWMgZ3V0dGVycyB3aXRoIGZsdWlkIGNvbHVtbnMsIG9yIHZpY2UgdmVyc2EsXG4vLy8gICBhbmQgU3VzeSB3aWxsIGdlbmVyYXRlIHRoZSByZXF1aXJlZCBgY2FsYygpYCB0byBtYWtlIGl0IHdvcmsuXG4vLy9cbi8vLyBAcHJvcCB7c3RyaW5nfSBzcHJlYWQgW25hcnJvd10gLVxuLy8vICAgU3ByZWFkIG9mIGFuIGVsZW1lbnQgYWNyb3NzIGFkamFjZW50IGd1dHRlcnM6XG4vLy8gICBlaXRoZXIgYG5hcnJvd2AgKG5vbmUpLCBgd2lkZWAgKG9uZSksIG9yIGB3aWRlcmAgKHR3bylcbi8vL1xuLy8vICAgLSBCb3RoIHNwcmVhZCBzZXR0aW5ncyBkZWZhdWx0IHRvIGBuYXJyb3dgLFxuLy8vICAgICB0aGUgbW9zdCBjb21tb24gdXNlLWNhc2UuXG4vLy8gICAgIEEgYG5hcnJvd2Agc3ByZWFkIG9ubHkgaGFzIGd1dHRlcnMgKmJldHdlZW4qIGNvbHVtbnNcbi8vLyAgICAgKG9uZSBsZXNzIGd1dHRlciB0aGFuIGNvbHVtbnMpLlxuLy8vICAgICBUaGlzIGlzIGhvdyBhbGwgY3NzLW5hdGl2ZSBncmlkcyB3b3JrLFxuLy8vICAgICBhbmQgbW9zdCBtYXJnaW4tYmFzZWQgZ3JpZCBzeXN0ZW1zLlxuLy8vICAgLSBBIGB3aWRlYCBzcHJlYWQgaW5jbHVkZXMgdGhlIHNhbWUgbnVtYmVyIG9mIGd1dHRlcnMgYXMgY29sdW1ucyxcbi8vLyAgICAgc3Bhbm5pbmcgYWNyb3NzIGEgc2luZ2xlIHNpZGUtZ3V0dGVyLlxuLy8vICAgICBUaGlzIGlzIGhvdyBtb3N0IHBhZGRpbmctYmFzZWQgZ3JpZCBzeXN0ZW1zIG9mdGVuIHdvcmssXG4vLy8gICAgIGFuZCBpcyBhbHNvIHVzZWZ1bCBmb3IgcHVzaGluZyBhbmQgcHVsbGluZyBlbGVtZW50cyBpbnRvIHBsYWNlLlxuLy8vICAgLSBUaGUgcmFyZSBgd2lkZXJgIHNwcmVhZCBpbmNsdWRlcyBndXR0ZXJzXG4vLy8gICAgIG9uIGJvdGggc2lkZXMgb2YgdGhlIGNvbHVtbi1zcGFuXG4vLy8gICAgIChvbmUgbW9yZSBndXR0ZXJzIHRoYW4gY29sdW1ucykuXG4vLy9cbi8vLyBAcHJvcCB7c3RyaW5nfSBjb250YWluZXItc3ByZWFkIFtuYXJyb3ddIC1cbi8vLyAgIFNwcmVhZCBvZiBhIGNvbnRhaW5lciBhcm91bmQgYWRqYWNlbnQgZ3V0dGVyczpcbi8vLyAgIGVpdGhlciBgbmFycm93YCAobm9uZSksIGB3aWRlYCAob25lKSwgb3IgYHdpZGVyYCAodHdvKS5cbi8vLyAgIFNlZSBgc3ByZWFkYCBwcm9wZXJ0eSBmb3IgZGV0YWlscy5cbi8vL1xuLy8vIEBzaW5jZSAzLjAuMC1iZXRhLjEgLVxuLy8vICAgYGNvbHVtbnNgIHNldHRpbmcgbm8gbG9uZ2VyIGFjY2VwdHMgbnVtYmVyc1xuLy8vICAgKGUuZy4gYDEyYCkgZm9yIHN5bW1ldHJpY2FsIGZsdWlkIGdyaWRzLFxuLy8vICAgb3IgdGhlIGluaXRpYWwgYDEyIHggMTIwcHhgIHN5bnRheCBmb3Jcbi8vLyAgIHN5bW1ldHJpY2FsIGZpeGVkLXVuaXQgZ3JpZHMuXG4vLy8gICBVc2UgYHN1c3ktcmVwZWF0KDEyKWAgb3IgYHN1c3ktcmVwZWF0KDEyLCAxMjBweClgIGluc3RlYWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gZGVmYXVsdCB2YWx1ZXNcbi8vLyAgIC8vIDQgc3ltbWV0cmljYWwsIGZsdWlkIGNvbHVtbnNcbi8vLyAgIC8vIGd1dHRlcnMgYXJlIDEvNCB0aGUgc2l6ZSBvZiBhIGNvbHVtblxuLy8vICAgLy8gZWxlbWVudHMgc3BhbiAxIGxlc3MgZ3V0dGVyIHRoYW4gY29sdW1uc1xuLy8vICAgLy8gY29udGFpbmVycyBzcGFuIDEgbGVzcyBndXR0ZXIgYXMgd2VsbFxuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgJ2NvbHVtbnMnOiBzdXN5LXJlcGVhdCg0KSxcbi8vLyAgICAgJ2d1dHRlcnMnOiAwLjI1LFxuLy8vICAgICAnc3ByZWFkJzogJ25hcnJvdycsXG4vLy8gICAgICdjb250YWluZXItc3ByZWFkJzogJ25hcnJvdycsXG4vLy8gICApO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGluc2lkZS1zdGF0aWMgZ3V0dGVyc1xuLy8vICAgLy8gNiBzeW1tZXRyaWNhbCwgZmx1aWQgY29sdW1uc+KAplxuLy8vICAgLy8gZ3V0dGVycyBhcmUgc3RhdGljLCB0cmlnZ2VyaW5nIGNhbGMoKeKAplxuLy8vICAgLy8gZWxlbWVudHMgc3BhbiBlcXVhbCBjb2x1bW5zICYgZ3V0dGVyc+KAplxuLy8vICAgLy8gY29udGFpbmVycyBzcGFuIGVxdWFsIGNvbHVtbnMgJiBndXR0ZXJz4oCmXG4vLy8gICAkc3VzeTogKFxuLy8vICAgICAnY29sdW1ucyc6IHN1c3ktcmVwZWF0KDYpLFxuLy8vICAgICAnZ3V0dGVycyc6IDAuNWVtLFxuLy8vICAgICAnc3ByZWFkJzogJ3dpZGUnLFxuLy8vICAgICAnY29udGFpbmVyLXNwcmVhZCc6ICd3aWRlJyxcbi8vLyAgICk7XG4kc3VzeTogKCkgIWRlZmF1bHQ7XG5cblxuXG4vLyBTdXN5IFJlcGVhdFxuLy8gLS0tLS0tLS0tLS1cbi8vLyBTaW1pbGFyIHRvIHRoZSBgcmVwZWF0KDxjb3VudD4sIDx2YWx1ZT4pYCBmdW5jdGlvblxuLy8vIHRoYXQgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBDU1MgR3JpZCB0ZW1wbGF0ZXMsXG4vLy8gdGhlIGBzdXN5LXJlcGVhdCgpYCBmdW5jdGlvbiBoZWxwcyBnZW5lcmF0ZSByZXBldGF0aXZlIGxheW91dHNcbi8vLyBieSByZXBlYXRpbmcgYW55IHZhbHVlIGEgZ2l2ZW4gbnVtYmVyIG9mIHRpbWVzLlxuLy8vIFdoZXJlIFN1c3kgcHJldmlvdXNseSBhbGxvd2VkIGA4YCBhcyBhIGNvbHVtbiBkZWZpbml0aW9uXG4vLy8gZm9yIDggZXF1YWwgY29sdW1ucywgeW91IHNob3VsZCBub3cgdXNlIGBzdXN5LXJlcGVhdCg4KWAuXG4vLy9cbi8vLyBAZ3JvdXAgY29uZmlnXG4vLy9cbi8vLyBAcGFyYW0ge2ludGVnZXJ9ICRjb3VudCAtXG4vLy8gICBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zLCBlLmcuIGAxMmAgZm9yIGEgMTItY29sdW1uIGdyaWQuXG4vLy8gQHBhcmFtIHsqfSAkdmFsdWUgWzFdIC1cbi8vLyAgIFRoZSB2YWx1ZSB0byBiZSByZXBlYXRlZC5cbi8vLyAgIFRlY2huaWNhbGx5IGFueSB2YWx1ZSBjYW4gYmUgcmVwZWF0ZWQgaGVyZSxcbi8vLyAgIGJ1dCB0aGUgZnVuY3Rpb24gZXhpc3RzIHRvIHJlcGVhdCBjb2x1bW4td2lkdGggZGVzY3JpcHRpb25zOlxuLy8vICAgZS5nLiB0aGUgZGVmYXVsdCBgMWAgZm9yIHNpbmdsZS1mcmFjdGlvbiBmbHVpZCBjb2x1bW5zLFxuLy8vICAgYDVlbWAgZm9yIGEgc3RhdGljIGNvbHVtbixcbi8vLyAgIG9yIGV2ZW4gYDVlbSAxMjBweGAgaWYgeW91IGFyZSBhbHRlcm5hdGluZyBjb2x1bW4gd2lkdGhzLlxuLy8vXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgTGlzdCBvZiByZXBlYXRlZCB2YWx1ZXNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3Ncbi8vLyAgIC8vIDEyIGNvbHVtbiBncmlkLCB3aXRoIDVlbSBjb2x1bW5zXG4vLy8gICAkc3VzeTogKFxuLy8vICAgICBjb2x1bW5zOiBzdXN5LXJlcGVhdCgxMiwgNWVtKSxcbi8vLyAgICk7XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzXG4vLy8gICAvLyBhc3ltbWV0cmljYWwgNS1jb2x1bW4gZ3JpZFxuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgY29sdW1uczogMjBweCBzdXN5LXJlcGVhdCgzLCAxMDBweCkgMjBweCxcbi8vLyAgICk7XG4vLy9cbi8vLyAgIC8qIHJlc3VsdDogI3tzdXN5LWdldCgnY29sdW1ucycpfSAqL1xuQGZ1bmN0aW9uIHN1c3ktcmVwZWF0KFxuICAkY291bnQsXG4gICR2YWx1ZTogMVxuKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGNvdW50IHtcbiAgICAkcmV0dXJuOiBqb2luKCRyZXR1cm4sICR2YWx1ZSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cblxuXG4vLyBTdXN5IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLy8gQ29uZmlndXJhdGlvbiBtYXAgb2YgU3VzeSBmYWN0b3J5IGRlZmF1bHRzLlxuLy8vIERvIG5vdCBvdmVycmlkZSB0aGlzIG1hcCBkaXJlY3RseSDigJNcbi8vLyB1c2UgYCRzdXN5YCBmb3IgdXNlciBhbmQgcHJvamVjdCBzZXR0aW5nIG92ZXJyaWRlcy5cbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vIEB0eXBlIE1hcFxuLy8vXG4vLy8gQHNlZSAkc3VzeVxuLy8vXG4vLy8gQHByb3Age251bWJlciB8IGxpc3R9IGNvbHVtbnMgW3N1c3ktcmVwZWF0KDQpXVxuLy8vIEBwcm9wIHtudW1iZXJ9IGd1dHRlcnMgWzAuMjVdXG4vLy8gQHByb3Age3N0cmluZ30gc3ByZWFkIFsnbmFycm93J11cbi8vLyBAcHJvcCB7c3RyaW5nfSBjb250YWluZXItc3ByZWFkIFsnbmFycm93J11cbiRfc3VzeS1kZWZhdWx0czogKFxuICAnY29sdW1ucyc6IHN1c3ktcmVwZWF0KDQpLFxuICAnZ3V0dGVycyc6IDAuMjUsXG4gICdzcHJlYWQnOiAnbmFycm93JyxcbiAgJ2NvbnRhaW5lci1zcHJlYWQnOiAnbmFycm93Jyxcbik7XG5cblxuXG4vLyBTdXN5IFNldHRpbmdzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLy8gUmV0dXJuIGEgY29tYmluZWQgbWFwIG9mIFN1c3kgc2V0dGluZ3MsXG4vLy8gYmFzZWQgb24gdGhlIGZhY3RvcnkgZGVmYXVsdHMgKGAkX3N1c3ktZGVmYXVsdHNgKSxcbi8vLyB1c2VyLWRlZmluZWQgcHJvamVjdCBjb25maWd1cmF0aW9uIChgJHN1c3lgKSxcbi8vLyBhbmQgYW55IGxvY2FsIG92ZXJyaWRlcyByZXF1aXJlZCDigJNcbi8vLyBzdWNoIGFzIGEgY29uZmlndXJhdGlvbiBtYXAgcGFzc2VkIGludG8gYSBmdW5jdGlvbi5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vL1xuLy8vIEBwYXJhbSB7bWFwc30gJG92ZXJyaWRlc+KApiAtXG4vLy8gICBPcHRpb25hbCBtYXAgb3ZlcnJpZGUgb2YgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4vLy8gICBTZWUgYCRzdXN5YCBhYm92ZSBmb3IgcHJvcGVydGllcy5cbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgQ29tYmluZWQgbWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyxcbi8vLyAgIGluIG9yZGVyIG9mIHNwZWNpZmljaXR5OlxuLy8vICAgYW55IGAkb3ZlcnJpZGVzLi4uYCxcbi8vLyAgIHRoZW4gYCRzdXN5YCBwcm9qZWN0IHNldHRpbmdzLFxuLy8vICAgYW5kIGZpbmFsbHkgdGhlIGAkX3N1c3ktZGVmYXVsdHNgXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gZ2xvYmFsIHNldHRpbmdzXG4vLy8gICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gc3VzeS1zZXR0aW5ncygpIHtcbi8vLyAgICAgLyogI3ska2V5fTogI3skdmFsdWV9ICovXG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gbG9jYWwgc2V0dGluZ3Ncbi8vLyAgICRsb2NhbDogKCdjb2x1bW5zJzogMSAyIDMgNSA4KTtcbi8vL1xuLy8vICAgQGVhY2ggJGtleSwgJHZhbHVlIGluIHN1c3ktc2V0dGluZ3MoJGxvY2FsKSB7XG4vLy8gICAgIC8qICN7JGtleX06ICN7JHZhbHVlfSAqL1xuLy8vICAgfVxuQGZ1bmN0aW9uIHN1c3ktc2V0dGluZ3MoXG4gICRvdmVycmlkZXMuLi5cbikge1xuICAkc2V0dGluZ3M6IG1hcC1tZXJnZSgkX3N1c3ktZGVmYXVsdHMsICRzdXN5KTtcblxuICBAZWFjaCAkY29uZmlnIGluICRvdmVycmlkZXMge1xuICAgICRzZXR0aW5nczogbWFwLW1lcmdlKCRzZXR0aW5ncywgJGNvbmZpZyk7XG4gIH1cblxuICBAcmV0dXJuICRzZXR0aW5ncztcbn1cblxuXG5cbi8vIFN1c3kgR2V0XG4vLyAtLS0tLS0tLVxuLy8vIFJldHVybiB0aGUgY3VycmVudCBnbG9iYWwgdmFsdWUgb2YgYW55IFN1c3kgc2V0dGluZ1xuLy8vXG4vLy8gQGdyb3VwIGNvbmZpZ1xuLy8vXG4vLy8gQHBhcmFtIHtzdHJpbmd9ICRrZXkgLVxuLy8vICAgU2V0dGluZyB0byByZXRyaWV2ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLlxuLy8vXG4vLy8gQHJldHVybiB7Kn0gLVxuLy8vICAgVmFsdWUgbWFwcGVkIHRvIGAka2V5YCBpbiB0aGUgY29uZmlndXJhdGlvbiBtYXBzLFxuLy8vICAgaW4gb3JkZXIgb2Ygc3BlY2lmaWNpdHk6XG4vLy8gICBgJHN1c3lgLCB0aGVuIGAkX3N1c3ktZGVmYXVsdHNgXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC1cbi8vLyAgIC8qIGNvbHVtbnM6ICN7c3VzeS1nZXQoJ2NvbHVtbnMnKX0gKi9cbi8vLyAgIC8qIGd1dHRlcnM6ICN7c3VzeS1nZXQoJ2d1dHRlcnMnKX0gKi9cbkBmdW5jdGlvbiBzdXN5LWdldChcbiAgJGtleVxuKSB7XG4gICRzZXR0aW5nczogc3VzeS1zZXR0aW5ncygpO1xuXG4gIEBpZiBub3QgbWFwLWhhcy1rZXkoJHNldHRpbmdzLCAka2V5KSB7XG4gICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICdUaGVyZSBpcyBubyBTdXN5IHNldHRpbmcgY2FsbGVkIGAjeyRrZXl9YCcsXG4gICAgICAnc3VzeS1nZXQnKTtcbiAgfVxuXG4gIEByZXR1cm4gbWFwLWdldCgkc2V0dGluZ3MsICRrZXkpO1xufVxuIiwiLy8vIFN5bnRheCBOb3JtYWxpemF0aW9uXG4vLy8gPT09PT09PT09PT09PT09PT09PT1cbi8vLyBTdXN5IGlzIGRpdmlkZWQgaW50byB0d28gbGF5ZXJzOlxuLy8vIFwiU3VcIiBwcm92aWRlcyB0aGUgY29yZSBtYXRoIGZ1bmN0aW9ucyB3aXRoIGEgc3RyaXBwZWQtZG93biBzeW50YXgsXG4vLy8gd2hpbGUgXCJTdXN5XCIgYWRkcyBnbG9iYWwgc2V0dGluZ3MsIHNob3J0aGFuZCBzeW50YXgsXG4vLy8gYW5kIG90aGVyIGhlbHBlcnMuXG4vLy8gRWFjaCBzZXR0aW5nIChlLmcuIHNwYW4sIGxvY2F0aW9uLCBjb2x1bW5zLCBzcHJlYWQsIGV0Yy4pXG4vLy8gaGFzIGEgc2luZ2xlIGNhbm9uaWNhbCBzeW50YXggaW4gU3UuXG4vLy9cbi8vLyBUaGlzIG5vcm1hbGl6YXRpb24gbW9kdWxlIGhlbHBzIHRyYW5zbGF0ZSBiZXR3ZWVuIHRob3NlIGxheWVycyxcbi8vLyB0cmFuc2Zvcm1pbmcgcGFyc2VkIFN1c3kgaW5wdXQgaW50b1xuLy8vIHZhbHVlcyB0aGF0IFN1IHdpbGwgdW5kZXJzdGFuZC5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAc2VlIHN1c3ktbm9ybWFsaXplXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZS1zcGFuXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZS1jb2x1bW5zXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZS1zcHJlYWRcbi8vLyBAc2VlIHN1c3ktbm9ybWFsaXplLWxvY2F0aW9uXG5cblxuXG4vLyBTdXN5IE5vcm1hbGl6ZVxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vLyBOb3JtYWxpemUgdGhlIHZhbHVlcyBpbiBhIGNvbmZpZ3VyYXRpb24gbWFwLlxuLy8vIEluIGFkZGl0aW9uIHRvIHRoZSBnbG9iYWwgYCRzdXN5YCBwcm9wZXJ0aWVzLFxuLy8vIHRoaXMgbWFwIGNhbiBpbmNsdWRlIGxvY2FsIHNwYW4tcmVsYXRlZCBpbmZvcm1hdGlvbixcbi8vLyBsaWtlIGBzcGFuYCBhbmQgYGxvY2F0aW9uYC5cbi8vL1xuLy8vIE5vcm1hbGl6YXRpb24gZG9lcyBub3QgY2hlY2sgdGhhdCB2YWx1ZXMgYXJlIHZhbGlkLFxuLy8vIHdoaWNoIHdpbGwgaGFwcGVuIGluIHRoZSBTdSBtYXRoIGxheWVyLlxuLy8vIFRoZXNlIGZ1bmN0aW9ucyBtZXJlbHkgbG9vayBmb3Iga25vd24gU3VzeSBzeW50YXgg4oCTXG4vLy8gcmV0dXJuaW5nIGEgbWFwIHdpdGggdGhvc2Ugc2hvcnRoYW5kIHZhbHVlc1xuLy8vIGNvbnZlcnRlZCBpbnRvIGxvdy1sZXZlbCBkYXRhIGZvciBTdS5cbi8vLyBGb3IgZXhhbXBsZSBgc3BhbjogYWxsYCBhbmQgYGxvY2F0aW9uOiBmaXJzdGBcbi8vLyB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIHNwZWNpZmljIG51bWJlcnMuXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vIEBzZWUgJHN1c3lcbi8vLyBAc2VlIHN1c3ktcGFyc2Vcbi8vL1xuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gbm9ybWFsaXplLlxuLy8vICAgU2VlIGAkc3VzeWAgYW5kIGBzdXN5LXBhcnNlKClgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXG4vLy8gQHBhcmFtIHttYXAgfCBudWxsfSAkY29udGV4dCBbbnVsbF0gLVxuLy8vICAgTWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byB1c2UgYXMgZ2xvYmFsIHJlZmVyZW5jZSxcbi8vLyAgIG9yIGBudWxsYCB0byB1c2UgZ2xvYmFsIHNldHRpbmdzLlxuLy8vXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBNYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzLFxuLy8vICAgd2l0aCBhbGwgdmFsdWVzIG5vcm1hbGl6ZWQgZm9yIFN1IG1hdGggZnVuY3Rpb25zLlxuQGZ1bmN0aW9uIHN1c3ktbm9ybWFsaXplKFxuICAkY29uZmlnLFxuICAkY29udGV4dDogbnVsbFxuKSB7XG4gIC8vIFNwcmVhZFxuICBAZWFjaCAkc2V0dGluZyBpbiAoJ3NwcmVhZCcsICdjb250YWluZXItc3ByZWFkJykge1xuICAgICR2YWx1ZTogbWFwLWdldCgkY29uZmlnLCAkc2V0dGluZyk7XG5cbiAgICBAaWYgJHZhbHVlIHtcbiAgICAgICR2YWx1ZTogc3VzeS1ub3JtYWxpemUtc3ByZWFkKCR2YWx1ZSk7XG4gICAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCRzZXR0aW5nOiAkdmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICAvLyBDb2x1bW5zXG4gICRjb2x1bW5zOiBtYXAtZ2V0KCRjb25maWcsICdjb2x1bW5zJyk7XG5cbiAgQGlmICRjb2x1bW5zIHtcbiAgICAkY29sdW1uczogc3VzeS1ub3JtYWxpemUtY29sdW1ucygkY29sdW1ucywgJGNvbnRleHQpO1xuICAgICRjb25maWc6IG1hcC1tZXJnZSgkY29uZmlnLCAoJ2NvbHVtbnMnOiAkY29sdW1ucykpO1xuICB9XG5cbiAgQGlmIG5vdCAkY29sdW1ucyB7XG4gICAgJG1hcDogdHlwZS1vZigkY29udGV4dCkgPT0gJ21hcCc7XG4gICAgJGNvbHVtbnM6IGlmKCRtYXAsIG1hcC1nZXQoJGNvbnRleHQsICdjb2x1bW5zJyksIG51bGwpO1xuICAgICRjb2x1bW5zOiAkY29sdW1ucyBvciBzdXN5LWdldCgnY29sdW1ucycpO1xuICB9XG5cbiAgLy8gU3BhblxuICAkc3BhbjogbWFwLWdldCgkY29uZmlnLCAnc3BhbicpO1xuXG4gIEBpZiAkc3BhbiB7XG4gICAgJHNwYW46IHN1c3ktbm9ybWFsaXplLXNwYW4oJHNwYW4sICRjb2x1bW5zKTtcbiAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCdzcGFuJzogJHNwYW4pKTtcbiAgfVxuXG4gIC8vIExvY2F0aW9uXG4gICRsb2NhdGlvbjogbWFwLWdldCgkY29uZmlnLCAnbG9jYXRpb24nKTtcblxuICBAaWYgJGxvY2F0aW9uIHtcbiAgICAkbG9jYXRpb246IHN1c3ktbm9ybWFsaXplLWxvY2F0aW9uKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcbiAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCdsb2NhdGlvbic6ICRsb2NhdGlvbikpO1xuICB9XG5cbiAgQHJldHVybiAkY29uZmlnO1xufVxuXG5cblxuLy8gTm9ybWFsaXplIFNwYW5cbi8vIC0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIGBzcGFuYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IHNwYW4gc3ludGF4IGFsbG93cyBhbiBleHBsaWNpdCBsZW5ndGggKGUuZy4gYDNlbWApLFxuLy8vIHVuaXRsZXNzIGNvbHVtbi1zcGFuIG51bWJlciAoZS5nLiBgM2AgY29sdW1ucyksXG4vLy8gb3IgYW4gZXhwbGljaXQgbGlzdCBvZiBjb2x1bW5zIChlLmcuIGAoMyA1IDgpYCkuXG4vLy9cbi8vLyBTdXN5IHNwYW4gc3ludGF4IGFsc28gYWxsb3dzIHRoZSBgYWxsYCBrZXl3b3JkLFxuLy8vIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2xpY2Ugb2YgdGhlIGNvbnRleHRcbi8vLyBpbiBub3JtYWxpemF0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdCB8ICdhbGwnfSAkc3BhbiAtXG4vLy8gICBTcGFuIHZhbHVlIHRvIG5vcm1hbGl6ZS5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIE5vcm1hbGl6ZWQgbGlzdCBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXIgfCBsaXN0fSAtXG4vLy8gICBOdW1iZXIgb3IgbGlzdCB2YWx1ZSBmb3IgYCRzcGFuYFxuQGZ1bmN0aW9uIHN1c3ktbm9ybWFsaXplLXNwYW4oXG4gICRzcGFuLFxuICAkY29sdW1uczogc3VzeS1nZXQoJ2NvbHVtbnMnKVxuKSB7XG4gIEBpZiAoJHNwYW4gPT0gJ2FsbCcpIHtcbiAgICBAcmV0dXJuIGxlbmd0aCgkY29sdW1ucyk7XG4gIH1cblxuICBAcmV0dXJuICRzcGFuO1xufVxuXG5cblxuLy8gTm9ybWFsaXplIENvbHVtbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIGBjb2x1bW5gIHNob3J0aGFuZCBmb3IgU3UuXG4vLy8gU3UgY29sdW1uIHN5bnRheCBvbmx5IGFsbG93cyBjb2x1bW4gbGlzdHMgKGUuZy4gYDEyMHB4IDEgMSAxIDEyMHB4YCkuXG4vLy9cbi8vLyBTdXN5IHNwYW4gc3ludGF4IGFsc28gYWxsb3dzIGEgdW5pdGxlc3MgYHNsaWNlYCBudW1iZXIgKGUuZyBgb2YgNWApLFxuLy8vIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2xpY2Ugb2YgdGhlIGNvbnRleHRcbi8vLyBpbiBub3JtYWxpemF0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdCB8IGludGVnZXJ9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbnMsXG4vLy8gICBvciB1bml0bGVzcyBpbnRlZ2VyIHJlcHJlc2VudGluZyBhIHNsaWNlIG9mXG4vLy8gICB0aGUgYXZhaWxhYmxlIGNvbnRleHQuXG4vLy8gQHBhcmFtIHttYXAgfCBudWxsfSAkY29udGV4dCBbbnVsbF0gLVxuLy8vICAgTWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byB1c2UgYXMgZ2xvYmFsIHJlZmVyZW5jZSxcbi8vLyAgIG9yIGBudWxsYCB0byBhY2Nlc3MgZ2xvYmFsIHNldHRpbmdzLlxuLy8vXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgQ29sdW1ucyBsaXN0IHZhbHVlLCBub3JtYWxpemVkIGZvciBTdSBpbnB1dC5cbi8vL1xuLy8vIEB0aHJvd3Ncbi8vLyAgIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgYSBzbGljZSBvZiBhc3ltbWV0cmljYWwgY29udGV4dFxuQGZ1bmN0aW9uIHN1c3ktbm9ybWFsaXplLWNvbHVtbnMoXG4gICRjb2x1bW5zLFxuICAkY29udGV4dDogbnVsbFxuKSB7XG4gICRjb250ZXh0OiAkY29udGV4dCBvciBzdXN5LXNldHRpbmdzKCk7XG5cbiAgQGlmIHR5cGUtb2YoJGNvbHVtbnMpID09ICdsaXN0JyB7XG4gICAgQHJldHVybiBfc3VzeS1mbGF0dGVuKCRjb2x1bW5zKTtcbiAgfVxuXG4gIEBpZiAodHlwZS1vZigkY29sdW1ucykgPT0gJ251bWJlcicpIGFuZCAodW5pdGxlc3MoJGNvbHVtbnMpKSB7XG4gICAgJHNwYW46ICRjb2x1bW5zO1xuICAgICRjb250ZXh0OiBtYXAtZ2V0KCRjb250ZXh0LCAnY29sdW1ucycpO1xuICAgICRzeW1tZXRyaWNhbDogc3VzeS1yZXBlYXQobGVuZ3RoKCRjb250ZXh0KSwgbnRoKCRjb250ZXh0LCAxKSk7XG5cbiAgICBAaWYgKCRjb250ZXh0ID09ICRzeW1tZXRyaWNhbCkge1xuICAgICAgQHJldHVybiBzdXN5LXJlcGVhdCgkc3BhbiwgbnRoKCRjb250ZXh0LCAxKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkYWN0dWFsOiAnb2YgYCN7JHNwYW59YCc7XG4gICAgICAkY29sdW1uczogJ2dyaWQtY29sdW1ucyBgI3skY29udGV4dH1gJztcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdjb250ZXh0LXNsaWNlICN7JGFjdHVhbH0gY2FuIG5vdCBiZSBkZXRlcm1pbmVkIGJhc2VkIG9uICN7JGNvbHVtbnN9LicsXG4gICAgICAgICdzdXN5LW5vcm1hbGl6ZS1jb2x1bW5zJyk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkY29sdW1ucztcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBTcHJlYWRcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vLyBOb3JtYWxpemUgYHNwcmVhZGAgc2hvcnRoYW5kIGZvciBTdS5cbi8vLyBTdSBzcHJlYWQgc3ludGF4IG9ubHkgYWxsb3dzIHRoZSBudW1iZXJzIGAtMWAsIGAwYCwgb3IgYDFgIOKAk1xuLy8vIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGd1dHRlcnMgY292ZXJlZFxuLy8vIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgc3Bhbm5lZC5cbi8vL1xuLy8vIFN1c3kgc3ByZWFkIHN5bnRheCBhbHNvIGFsbG93cyBrZXl3b3JkcyBmb3IgZWFjaCB2YWx1ZSDigJNcbi8vLyBgbmFycm93YCBmb3IgYC0xYCwgYHdpZGVgIGZvciBgMGAsIG9yIGB3aWRlcmAgZm9yIGAxYCDigJNcbi8vLyB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGVpciByZXNwZWN0aXZlIGludGVnZXJzXG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0gezAgfCAxIHwgLTEgfCAnbmFycm93JyB8ICd3aWRlJyB8ICd3aWRlcid9ICRzcHJlYWQgLVxuLy8vICAgU3ByZWFkIGFjcm9zcyBhZGphY2VudCBndXR0ZXJzLCByZWxhdGl2ZSB0byBhIGNvbHVtbi1jb3VudCDigJRcbi8vLyAgIGVpdGhlciBgbmFycm93YCAoLTEpLCBgd2lkZWAgKDApLCBvciBgd2lkZXJgICgxKVxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyfSAtXG4vLy8gICBOdW1lcmljIHZhbHVlIGZvciBgJHNwcmVhZGBcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1zcHJlYWQoXG4gICRzcHJlYWRcbikge1xuICAkbm9ybWFsLXNwcmVhZDogKFxuICAgICduYXJyb3cnOiAtMSxcbiAgICAnd2lkZSc6IDAsXG4gICAgJ3dpZGVyJzogMSxcbiAgKTtcblxuICBAcmV0dXJuIG1hcC1nZXQoJG5vcm1hbC1zcHJlYWQsICRzcHJlYWQpIG9yICRzcHJlYWQ7XG59XG5cblxuXG4vLyBOb3JtYWxpemUgTG9jYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgbG9jYXRpb25gIHNob3J0aGFuZCBmb3IgU3UuXG4vLy8gU3UgbG9jYXRpb24gc3ludGF4IHJlcXVpcmVzIHRoZSAoMS1pbmRleGVkKSBudW1iZXIgZm9yIGEgY29sdW1uLlxuLy8vXG4vLy8gU3VzeSBhbHNvIGFsbG93cyB0aGUgYGZpcnN0YCBhbmQgYGxhc3RgIGtleXdvcmRzLFxuLy8vIHdoZXJlIGBmaXJzdGAgaXMgYWx3YXlzIGAxYCxcbi8vLyBhbmQgYGxhc3RgIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gc3BhbiBhbmQgY29sdW1uIHZhbHVlcy5cbi8vLyBCb3RoIGtleXdvcmRzIGFyZSBub3JtYWxpemVkIGludG8gYW4gaW50ZWdlciBpbmRleFxuLy8vIGluIG5vcm1hbGl6YXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRzcGFuIC1cbi8vLyAgIE51bWJlciBvZiBncmlkLWNvbHVtbnMgdG8gYmUgc3Bhbm5lZFxuLy8vIEBwYXJhbSB7aW50ZWdlciB8ICdmaXJzdCcgfCAnbGFzdCd9ICRsb2NhdGlvbiAtXG4vLy8gICBTdGFydGluZyAoMS1pbmRleGVkKSBjb2x1bW4gcG9zaXRpb24gb2YgYSBzcGFuLFxuLy8vICAgb3IgYSBuYW1lZCBsb2NhdGlvbiBrZXl3b3JkLlxuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgQWxyZWFkeS1ub3JtYWxpemVkIGxpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZC5cbi8vL1xuLy8vIEByZXR1cm4ge2ludGVnZXJ9IC1cbi8vLyAgIE51bWVyaWMgdmFsdWUgZm9yIGAkbG9jYXRpb25gXG5AZnVuY3Rpb24gc3VzeS1ub3JtYWxpemUtbG9jYXRpb24oXG4gICRzcGFuLFxuICAkbG9jYXRpb24sXG4gICRjb2x1bW5zXG4pIHtcbiAgJGNvdW50OiBsZW5ndGgoJGNvbHVtbnMpO1xuICAkbm9ybWFsLWxvY2F0aW9uczogKFxuICAgICdmaXJzdCc6IDEsXG4gICAgJ2FscGhhJzogMSxcbiAgICAnbGFzdCc6ICRjb3VudCAtICRzcGFuICsgMSxcbiAgICAnb21lZ2EnOiAkY291bnQgLSAkc3BhbiArIDEsXG4gICk7XG5cbiAgQHJldHVybiBtYXAtZ2V0KCRub3JtYWwtbG9jYXRpb25zLCAkbG9jYXRpb24pIG9yICRsb2NhdGlvbjtcbn1cbiIsIi8vLyBTaG9ydGhhbmQgU3ludGF4IFBhcnNlclxuLy8vID09PT09PT09PT09PT09PT09PT09PT09XG4vLy8gVGhlIHN5bnRheCBwYXJzZXIgY29udmVydHMgW3Nob3J0aGFuZCBzeW50YXhdW3Nob3J0XVxuLy8vIGludG8gYSBtYXAgb2Ygc2V0dGluZ3MgdGhhdCBjYW4gYmUgY29tcGFyZWQvbWVyZ2VkIHdpdGhcbi8vLyBvdGhlciBjb25maWcgbWFwcyBhbmQgZ2xvYmFsIHNldHRpbmcuXG4vLy9cbi8vLyBbc2hvcnRdOiBhcGkuaHRtbFxuLy8vXG4vLy8gQGdyb3VwIF9wYXJzZXJcblxuXG5cbi8vIFBhcnNlXG4vLyAtLS0tLVxuLy8vIFRoZSBgcGFyc2VgIGZ1bmN0aW9uIHByb3ZpZGVzIGFsbCB0aGUgc3ludGF4LXN1Z2FyIGluIFN1c3ksXG4vLy8gY29udmVydGluZyB1c2VyIHNob3J0aGFuZFxuLy8vIGludG8gYSB1c2FibGUgbWFwIG9mIGtleXMgYW5kIHZhbHVlc1xuLy8vIHRoYXQgY2FuIGJlIG5vcm1hbGl6ZWQgYW5kIHBhc3NlZCB0byBTdS5cbi8vL1xuLy8vIEBncm91cCBfcGFyc2VyXG4vLy8gQHNlZSAkc3VzeVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc2hvcnRoYW5kIC1cbi8vLyAgIFNob3J0aGFuZCBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgd2lkdGggb2YgdGhlIHNwYW4sXG4vLy8gICBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGEgY291bnQsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3Qgc3Bhbjtcbi8vLyAgIC0gYGF0ICRuYCwgYGZpcnN0YCwgb3IgYGxhc3RgIGxvY2F0aW9uIG9uIGFzeW1tZXRyaWNhbCBncmlkcztcbi8vLyAgIC0gYG5hcnJvd2AsIGB3aWRlYCwgb3IgYHdpZGVyYCBmb3Igb3B0aW9uYWxseSBzcHJlYWRpbmdcbi8vLyAgICAgYWNyb3NzIGFkamFjZW50IGd1dHRlcnM7XG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyXG4vLy8gICAgIChzcGFuIGNvdW50cyBsaWtlIGBvZiA2YCBhcmUgb25seSB2YWxpZFxuLy8vICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkcyk7XG4vLy8gICAtIGFuZCBgc2V0LWd1dHRlcnMgJG5gIHRvIG92ZXJyaWRlIGdsb2JhbCBndXR0ZXIgc2V0dGluZ3Ncbi8vLyBAcGFyYW0ge2Jvb2x9ICRjb250ZXh0LW9ubHkgW2ZhbHNlXSAtXG4vLy8gICBBbGxvdyB0aGUgcGFyc2VyIHRvIGlnbm9yZSBzcGFuIGFuZCBzcGFuLXNwcmVhZCB2YWx1ZXMsXG4vLy8gICBvbmx5IHBhcnNpbmcgY29udGV4dCBhbmQgY29udGFpbmVyLXNwcmVhZC5cbi8vLyAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gYWNjZXB0IHNwYW5sZXNzIHZhbHVlcyxcbi8vLyAgIGxpa2UgdGhlIGBndXR0ZXJzKClgIHN5bnRheC5cbi8vLyAgIFdoZW4gcGFyc2luZyBjb250ZXh0LW9ubHksXG4vLy8gICB0aGUgYG9mYCBpbmRpY2F0b3IgaXMgb3B0aW9uYWwuXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIE1hcCBvZiBzcGFuIGFuZCBncmlkIHNldHRpbmdzXG4vLy8gICBwYXJzZWQgZnJvbSBzaG9ydGhhbmQgaW5wdXQg4oCTXG4vLy8gICBpbmNsdWRpbmcgYWxsIHRoZSBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBnbG9iYWxseSDigJNcbi8vLyAgIGBjb2x1bW5zYCwgYGd1dHRlcnNgLCBgc3ByZWFkYCwgYGNvbnRhaW5lci1zcHJlYWRgIOKAk1xuLy8vICAgYWxvbmcgd2l0aCB0aGUgc3Bhbi1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4vLy8gICBgc3BhbmAsIGFuZCBgbG9jYXRpb25gLlxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIGEgc2hvcnRoYW5kIHZhbHVlIGlzIG5vdCByZWNvZ25pemVkXG5AZnVuY3Rpb24gc3VzeS1wYXJzZShcbiAgJHNob3J0aGFuZCxcbiAgJGNvbnRleHQtb25seTogZmFsc2Vcbikge1xuICAkcGFyc2UtZXJyb3I6ICdVbmtub3duIHNob3J0aGFuZCBwcm9wZXJ0eTonO1xuICAkb3B0aW9uczogKFxuICAgICdmaXJzdCc6ICdsb2NhdGlvbicsXG4gICAgJ2xhc3QnOiAnbG9jYXRpb24nLFxuICAgICdhbHBoYSc6ICdsb2NhdGlvbicsXG4gICAgJ29tZWdhJzogJ2xvY2F0aW9uJyxcbiAgICAnbmFycm93JzogJ3NwcmVhZCcsXG4gICAgJ3dpZGUnOiAnc3ByZWFkJyxcbiAgICAnd2lkZXInOiAnc3ByZWFkJyxcbiAgKTtcblxuICAkcmV0dXJuOiAoKTtcbiAgJHNwYW46IG51bGw7XG4gICRjb2x1bW5zOiBudWxsO1xuXG4gICRvZjogbnVsbDtcbiAgJG5leHQ6IGZhbHNlO1xuXG4gIC8vIEFsbG93IGNvbnRleHQtb25seSBzaG9ydGhhbmQsIHdpdGhvdXQgc3BhblxuICBAaWYgKCRjb250ZXh0LW9ubHkpIGFuZCAobm90IGluZGV4KCRzaG9ydGhhbmQsICdvZicpKSB7XG4gICAgQGlmIHN1LXZhbGlkLWNvbHVtbnMoJHNob3J0aGFuZCwgJ2ZhaWwtc2lsZW50Jykge1xuICAgICAgJHNob3J0aGFuZDogJ29mJyAkc2hvcnRoYW5kO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHNob3J0aGFuZDogam9pbignb2YnLCAkc2hvcnRoYW5kKTtcbiAgICB9XG4gIH1cblxuICAvLyBsb29wIHRocm91Z2ggdGhlIHNob3J0aGFuZCBsaXN0XG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRzaG9ydGhhbmQpIHtcbiAgICAkaXRlbTogbnRoKCRzaG9ydGhhbmQsICRpKTtcbiAgICAkdHlwZTogdHlwZS1vZigkaXRlbSk7XG4gICAgJGVycm9yOiBmYWxzZTtcbiAgICAkZGV0YWlsczogJ1sjeyR0eXBlfV0gYCN7JGl0ZW19YCc7XG5cbiAgICAvLyBpZiB3ZSBrbm93IHdoYXQncyBzdXBwb3NlZCB0byBiZSBjb21pbmcgbmV4dOKAplxuICAgIEBpZiAkbmV4dCB7XG5cbiAgICAgIC8vIEFkZCB0byB0aGUgcmV0dXJuIG1hcFxuICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgkbmV4dDogJGl0ZW0pKTtcblxuICAgICAgLy8gUmVzZXQgbmV4dCB0byBgZmFsc2VgXG4gICAgICAkbmV4dDogZmFsc2U7XG5cbiAgICB9IEBlbHNlIHsgLy8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0J3Mgc3VwcG9zZWQgdG8gYmUgY29taW5n4oCmXG5cbiAgICAgIC8vIEtleXdvcmRz4oCmXG4gICAgICBAaWYgKCR0eXBlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIENoZWNrIHRoZSBtYXAgZm9yIGtleXdvcmRz4oCmXG4gICAgICAgIEBpZiBtYXAtaGFzLWtleSgkb3B0aW9ucywgJGl0ZW0pIHtcbiAgICAgICAgICAkc2V0dGluZzogbWFwLWdldCgkb3B0aW9ucywgJGl0ZW0pO1xuXG4gICAgICAgICAgLy8gU3ByZWFkIGNvdWxkIGJlIG9uIHRoZSBzcGFuIG9yIHRoZSBjb250YWluZXLigKZcbiAgICAgICAgICBAaWYgKCRzZXR0aW5nID09ICdzcHJlYWQnKSBhbmQgKCRvZikge1xuICAgICAgICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgnY29udGFpbmVyLXNwcmVhZCc6ICRpdGVtKSk7XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCRzZXR0aW5nOiAkaXRlbSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IEBlbHNlIGlmICgkaXRlbSA9PSAnYWxsJykge1xuICAgICAgICAgIC8vIGBBbGxgIGlzIGEgc3BhbiBzaG9ydGN1dFxuICAgICAgICAgICRzcGFuOiAnYWxsJztcbiAgICAgICAgfSBAZWxzZSBpZiAoJGl0ZW0gPT0gJ2F0Jykge1xuICAgICAgICAgIC8vIFNvbWUga2V5d29yZHMgc2V0dXAgd2hhdCdzIG5leHTigKZcbiAgICAgICAgICAkbmV4dDogJ2xvY2F0aW9uJztcbiAgICAgICAgfSBAZWxzZSBpZiAoJGl0ZW0gPT0gJ3NldC1ndXR0ZXJzJykge1xuICAgICAgICAgICRuZXh0OiAnZ3V0dGVycyc7XG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdvZicpIHtcbiAgICAgICAgICAkb2Y6IHRydWU7XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICRlcnJvcjogdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSAnbnVtYmVyJykgb3IgKCR0eXBlID09ICdsaXN0JykgeyAvLyBOdW1iZXJzICYgbGlzdHPigKZcblxuICAgICAgICBAaWYgbm90ICgkc3BhbiBvciAkb2YpIHtcbiAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgc3BhbiwgYW5kIHdlJ3JlIG5vdCBleHBlY3RpbmcgY29udGV4dOKAplxuICAgICAgICAgICRzcGFuOiAkaXRlbTtcbiAgICAgICAgfSBAZWxzZSBpZiAoJG9mKSBhbmQgKG5vdCAkY29sdW1ucykge1xuICAgICAgICAgIC8vIFdlIGFyZSBleHBlY3RpbmcgY29udGV4dOKAplxuICAgICAgICAgICRjb2x1bW5zOiAkaXRlbTtcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgJGVycm9yOiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkZXJyb3I6IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICRlcnJvciB7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKCcjeyRwYXJzZS1lcnJvcn0gI3skZGV0YWlsc30nLCAnc3VzeS1wYXJzZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgc3BhbiwgbWVyZ2UgaXQgaW5cbiAgQGlmICRzcGFuIHtcbiAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCdzcGFuJzogJHNwYW4pKTtcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgY29sdW1ucywgbWVyZ2UgdGhlbSBpblxuICBAaWYgJGNvbHVtbnMge1xuICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJ2NvbHVtbnMnOiAkY29sdW1ucykpO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXAgb2Ygc2V0dGluZ3PigKZcbiAgQHJldHVybiAkcmV0dXJuO1xufVxuIiwiLy8vIFN5bnRheCBVdGlsaXRpZXMgZm9yIEV4dGVuZGluZyBTdXN5XG4vLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vLyBUaGVyZSBhcmUgbWFueSBzdGVwcyBpbnZvbHZlZFxuLy8vIHdoZW4gdHJhbnNsYXRpbmcgYmV0d2VlbiB0aGUgU3VzeSBzeW50YXggbGF5ZXIsXG4vLy8gYW5kIHRoZSBTdSBjb3JlIG1hdGguXG4vLy8gVGhhdCBlbnRpcmUgcHJvY2VzcyBjYW4gYmUgY29uZGVuc2VkIHdpdGggdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbi8vLyBGb3IgYW55b25lIHRoYXQgd2FudHMgdG8gYWNjZXNzIHRoZSBmdWxsIHBvd2VyIG9mIFN1c3ksXG4vLy8gYW5kIGJ1aWxkIHRoZWlyIG93biBwbHVnaW5zLCBmdW5jdGlvbnMsIG9yIG1peGlucyDigJNcbi8vLyB0aGlzIGlzIHRoZSBwcmltYXJ5IEFQSSBmb3IgY29tcGlsaW5nIHVzZXIgaW5wdXQsXG4vLy8gYW5kIGFjY2Vzc2luZyB0aGUgY29yZSBtYXRoLlxuLy8vXG4vLy8gVGhpcyBpcyB0aGUgc2FtZSB0ZWNobmlxdWUgd2UgdXNlIGludGVybmFsbHksXG4vLy8gdG8ga2VlcCBvdXIgQVBJIGxheWVyIHNpbXBsZSBhbmQgbGlnaHQtd2VpZ2h0LlxuLy8vIEV2ZXJ5IGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGFyZ3VtZW50cyxcbi8vLyBhIFwic2hvcnRoYW5kXCIgZGVzY3JpcHRpb24gb2YgdGhlIHNwYW4gb3IgY29udGV4dCxcbi8vLyBhbmQgYW4gb3B0aW9uYWwgc2V0dGluZ3MtbWFwIHRvIG92ZXJyaWRlIGdsb2JhbCBkZWZhdWx0cy5cbi8vL1xuLy8vIC0gVXNlIGBzdXN5LWNvbXBpbGUoKWAgdG8gcGFyc2UsIG1lcmdlLCBhbmQgbm9ybWFsaXplXG4vLy8gICBhbGwgdGhlIHVzZXIgc2V0dGluZ3MgaW50byBhIHNpbmdsZSBtYXAuXG4vLy8gLSBUaGVuIHVzZSBgc3UtY2FsbCgpYCB0byBjYWxsIG9uZSBvZiB0aGUgY29yZSBtYXRoIGZ1bmN0aW9ucyxcbi8vLyAgIHdpdGggd2hhdGV2ZXIgZGF0YSBpcyBuZWVkZWQgZm9yIHRoYXQgZnVuY3Rpb24uXG4vLy9cbi8vLyBAZ3JvdXAgcGx1Z2luLXV0aWxzXG4vLy8gQHNlZSBzdXN5LWNvbXBpbGVcbi8vLyBAc2VlIHN1LWNhbGxcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBTdXN5IEFQSSBgZ3V0dGVyYCBmdW5jdGlvblxuLy8vICAgQGZ1bmN0aW9uIHN1c3ktZ3V0dGVyKFxuLy8vICAgICAkY29udGV4dDogc3VzeS1nZXQoJ2NvbHVtbnMnKSxcbi8vLyAgICAgJGNvbmZpZzogKClcbi8vLyAgICkge1xuLy8vICAgICAvLyBjb21waWxlIGFuZCBub3JtYWxpemUgYWxsIHVzZXIgYXJndW1lbnRzIGFuZCBnbG9iYWwgc2V0dGluZ3Ncbi8vLyAgICAgJGNvbnRleHQ6IHN1c3ktY29tcGlsZSgkY29udGV4dCwgJGNvbmZpZywgJ2NvbnRleHQtb25seScpO1xuLy8vICAgICAvLyBjYWxsIGBzdS1ndXR0ZXJgIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGFcbi8vLyAgICAgQHJldHVybiBzdS1jYWxsKCdzdS1ndXR0ZXInLCAkY29udGV4dCk7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gU2FtcGxlIGBzcGFuYCBtaXhpbiBmb3IgZmxvYXRlZCBncmlkc1xuLy8vICAgQG1peGluIHNwYW4oXG4vLy8gICAgICRzcGFuLFxuLy8vICAgICAkY29uZmlnOiAoKVxuLy8vICAgKSB7XG4vLy8gICAgICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJHNwYW4sICRjb25maWcpO1xuLy8vICAgICB3aWR0aDogc3UtY2FsbCgnc3Utc3BhbicsICRjb250ZXh0KTtcbi8vL1xuLy8vICAgICAkZW5kOiBtYXAtZ2V0KCRjb250ZXh0LCAnc3BhbicpICsgbWFwLWdldCgkY29udGV4dCwgJ2xvY2F0aW9uJykgLSAxO1xuLy8vICAgICAkaXMtbGFzdDogKCRlbmQgPT0gbWFwLWdldCgkY29udGV4dCwgJ2NvbHVtbnMnKSk7XG4vLy9cbi8vLyAgICAgQGlmICRpcy1sYXN0IHtcbi8vLyAgICAgICBmbG9hdDogcmlnaHQ7XG4vLy8gICAgIH0gQGVsc2Uge1xuLy8vICAgICAgIGZsb2F0OiBsZWZ0O1xuLy8vICAgICAgIG1hcmdpbi1yaWdodDogc3UtY2FsbCgnc3UtZ3V0dGVyJywgJGNvbnRleHQpO1xuLy8vICAgICB9XG4vLy8gICB9XG5cblxuXG4vLyBDb21waWxlXG4vLyAtLS0tLS0tXG4vLy8gU3VzeSdzIHN5bnRheCBsYXllciBoYXMgdmFyaW91cyBtb3ZpbmcgcGFydHMsXG4vLy8gd2l0aCBzeW50YXgtcGFyc2luZyBmb3IgdGhlIGdyaWQvc3BhbiBzaG9ydGhhbmQsXG4vLy8gYW5kIG5vcm1hbGl6YXRpb24gZm9yIGVhY2ggb2YgdGhlIHJlc3VsdGluZyB2YWx1ZXMuXG4vLy8gVGhlIGNvbXBpbGUgZnVuY3Rpb24gcm9sbHMgdGhpcyBhbGwgdG9nZXRoZXJcbi8vLyBpbiBhIHNpbmdsZSBjYWxsIOKAk1xuLy8vIGZvciBxdWljayBhY2Nlc3MgZnJvbSBvdXIgaW50ZXJuYWwgQVBJIGZ1bmN0aW9ucyxcbi8vLyBvciBhbnkgYWRkaXRpb25hbCBmdW5jdGlvbnMgYW5kIG1peGlucyB5b3UgYWRkIHRvIHlvdXIgcHJvamVjdC5cbi8vLyBQYXNzIHVzZXIgaW5wdXQgYW5kIGNvbmZpZ3VyYXRpb24gbWFwcyB0byB0aGUgY29tcGlsZXIsXG4vLy8gYW5kIGl0IHdpbGwgaGFuZCBiYWNrIGEgbWFwIG9mIHZhbHVlcyByZWFkeSBmb3IgU3UuXG4vLy8gQ29tYmluZSB0aGlzIHdpdGggdGhlIGBzdS1jYWxsYCBmdW5jdGlvblxuLy8vIHRvIHF1aWNrbHkgcGFyc2UsIG5vcm1hbGl6ZSwgYW5kIHByb2Nlc3MgZ3JpZCBjYWxjdWxhdGlvbnMuXG4vLy9cbi8vLyBAZ3JvdXAgcGx1Z2luLXV0aWxzXG4vLy8gQHNlZSBzdS1jYWxsXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3QgfCBtYXB9ICRzaG9ydCBbbnVsbF0gLVxuLy8vICAgU2hvcnRoYW5kIGV4cHJlc3Npb24gdG8gZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgc3Bhbixcbi8vLyAgIG9wdGlvbmFsbHkgY29udGFpbmluZzpcbi8vLyAgIC0gYSBjb3VudCwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBzcGFuO1xuLy8vICAgLSBgYXQgJG5gLCBgZmlyc3RgLCBvciBgbGFzdGAgbG9jYXRpb24gb24gYXN5bW1ldHJpY2FsIGdyaWRzO1xuLy8vICAgLSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgIGZvciBvcHRpb25hbGx5IHNwcmVhZGluZ1xuLy8vICAgICBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycztcbi8vLyAgIC0gYG9mICRuIDxzcHJlYWQ+YCBmb3IgYXZhaWxhYmxlIGdyaWQgY29sdW1uc1xuLy8vICAgICBhbmQgc3ByZWFkIG9mIHRoZSBjb250YWluZXJcbi8vLyAgICAgKHNwYW4gY291bnRzIGxpa2UgYG9mIDZgIGFyZSBvbmx5IHZhbGlkXG4vLy8gICAgIGluIHRoZSBjb250ZXh0IG9mIHN5bW1ldHJpY2FsIGdyaWRzKTtcbi8vLyAgIC0gYW5kIGBzZXQtZ3V0dGVycyAkbmAgdG8gb3ZlcnJpZGUgZ2xvYmFsIGd1dHRlciBzZXR0aW5nc1xuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFtudWxsXSAtXG4vLy8gICBPcHRpb25hbCBtYXAgb2YgU3VzeSBncmlkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Ncbi8vLyBAcGFyYW0ge2Jvb2x9ICRjb250ZXh0LW9ubHkgW2ZhbHNlXSAtXG4vLy8gICBBbGxvdyB0aGUgcGFyc2VyIHRvIGlnbm9yZSBzcGFuIGFuZCBzcGFuLXNwcmVhZCB2YWx1ZXMsXG4vLy8gICBvbmx5IHBhcnNpbmcgY29udGV4dCBhbmQgY29udGFpbmVyLXNwcmVhZFxuLy8vXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBQYXJzZWQgYW5kIG5vcm1hbGl6ZWQgbWFwIG9mIHNldHRpbmdzLFxuLy8vICAgYmFzZWQgb24gZ2xvYmFsIGFuZCBsb2NhbCBjb25maWd1cmF0aW9uLFxuLy8vICAgYWxvbmd3aXRoIHNob3J0aGFkIGFkanVzdG1lbnRzLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkdXNlci1pbnB1dDogMyB3aWRlIG9mIHN1c3ktcmVwZWF0KDYsIDEyMHB4KSBzZXQtZ3V0dGVycyAxMHB4O1xuLy8vICAgJGdyaWQtZGF0YTogc3VzeS1jb21waWxlKCR1c2VyLWlucHV0LCAkc3VzeSk7XG4vLy9cbi8vLyAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkZ3JpZC1kYXRhIHtcbi8vLyAgICAgLyogI3ska2V5fTogI3skdmFsdWV9LCAqL1xuLy8vICAgfVxuQGZ1bmN0aW9uIHN1c3ktY29tcGlsZShcbiAgJHNob3J0OiBudWxsLFxuICAkY29uZmlnOiBudWxsLFxuICAkY29udGV4dC1vbmx5OiBmYWxzZVxuKSB7XG4gIC8vIEdldCBhbmQgbm9ybWFsaXplIGNvbmZpZ1xuICAkY29uZmlnOiBpZigkY29uZmlnLCBzdXN5LXNldHRpbmdzKCRjb25maWcpLCBzdXN5LXNldHRpbmdzKCkpO1xuICAkbm9ybWFsLWNvbmZpZzogc3VzeS1ub3JtYWxpemUoJGNvbmZpZyk7XG5cbiAgLy8gUGFyc2UgYW5kIG5vcm1hbGl6ZSBzaG9ydGhhbmRcbiAgJG5vcm1hbC1zaG9ydDogKCk7XG5cbiAgQGlmICRzaG9ydCB7XG4gICAgQGlmICh0eXBlLW9mKCRzaG9ydCkgIT0gJ21hcCcpIGFuZCAobGVuZ3RoKCRzaG9ydCkgPiAwKSB7XG4gICAgICAkc2hvcnQ6IHN1c3ktcGFyc2UoJHNob3J0LCAkY29udGV4dC1vbmx5KTtcbiAgICB9XG5cbiAgICAkbm9ybWFsLXNob3J0OiBzdXN5LW5vcm1hbGl6ZSgkc2hvcnQsICRub3JtYWwtY29uZmlnKTtcbiAgfVxuXG4gIC8vIE1lcmdlIGFuZCByZXR1cm5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJG5vcm1hbC1jb25maWcsICRub3JtYWwtc2hvcnQpO1xufVxuXG5cblxuLy8gQ2FsbFxuLy8gLS0tLVxuLy8vIFRoZSBTdXN5IHBhcnNpbmcgYW5kIG5vcm1hbGl6YXRpb24gcHJvY2Vzc1xuLy8vIHJlc3VsdHMgaW4gYSBtYXAgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5ncyxcbi8vLyBtdWNoIGxpa2UgdGhlIGdsb2JhbCBgJHN1c3lgIHNldHRpbmdzIG1hcC5cbi8vLyBJbiBvcmRlciB0byBwYXNzIHRoYXQgaW5mb3JtYXRpb24gYWxvbmcgdG8gU3UgbWF0aCBmdW5jdGlvbnMsXG4vLy8gdGhlIHByb3BlciB2YWx1ZXMgaGF2ZSB0byBiZSBwaWNrZWQgb3V0LFxuLy8vIGFuZCBjb252ZXJ0ZWQgdG8gYXJndW1lbnRzLlxuLy8vXG4vLy8gVGhlIGBzdS1jYWxsYCBmdW5jdGlvbiBzdHJlYW1saW5lcyB0aGF0IHByb2Nlc3MsXG4vLy8gd2VlZGluZyBvdXQgdGhlIHVubmVjZXNzYXJ5IGRhdGEsXG4vLy8gYW5kIHBhc3NpbmcgdGhlIHJlc3QgYWxvbmcgdG8gU3UgaW4gdGhlIHByb3BlciBmb3JtYXQuXG4vLy8gQ29tYmluZSB0aGlzIHdpdGggYHN1c3ktY29tcGlsZWAgdG8gcXVpY2tseSBwYXJzZSxcbi8vLyBub3JtYWxpemUsIGFuZCBwcm9jZXNzIGdyaWQgY2FsY3VsYXRpb25zLlxuLy8vXG4vLy8gQGdyb3VwIHBsdWdpbi11dGlsc1xuLy8vXG4vLy8gQHJlcXVpcmUgc3Utc3BhblxuLy8vIEByZXF1aXJlIHN1LWd1dHRlclxuLy8vIEByZXF1aXJlIHN1LXNsaWNlXG4vLy8gQHNlZSBzdXN5LWNvbXBpbGVcbi8vL1xuLy8vIEBwYXJhbSB7J3N1LXNwYW4nIHwgJ3N1LWd1dHRlcicgfCAnc3Utc2xpY2UnfSAkbmFtZSAtXG4vLy8gICBOYW1lIG9mIHRoZSBTdSBtYXRoIGZ1bmN0aW9uIHRvIGNhbGwuXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgLVxuLy8vICAgUGFyc2VkIGFuZCBub3JtYWxpemVkIG1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Ncbi8vLyAgIHRvIHVzZSBmb3IgbWF0aC1mdW5jdGlvbiBhcmd1bWVudHMuXG4vLy9cbi8vLyBAcmV0dXJuIHsqfSAtXG4vLy8gICBSZXN1bHRzIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC1cbi8vLyAgICR1c2VyLWlucHV0OiAzIHdpZGUgb2Ygc3VzeS1yZXBlYXQoNiwgMTIwcHgpIHNldC1ndXR0ZXJzIDEwcHg7XG4vLy8gICAkZ3JpZC1kYXRhOiBzdXN5LWNvbXBpbGUoJHVzZXItaW5wdXQsICRzdXN5KTtcbi8vL1xuLy8vICAgLnN1LXNwYW4ge1xuLy8vICAgICB3aWR0aDogc3UtY2FsbCgnc3Utc3BhbicsICRncmlkLWRhdGEpO1xuLy8vICAgfVxuQGZ1bmN0aW9uIHN1LWNhbGwoXG4gICRuYW1lLFxuICAkY29uZmlnXG4pIHtcbiAgJGdyaWQtZnVuY3Rpb24tYXJnczogKFxuICAgICdzdS1zcGFuJzogKCdzcGFuJywgJ2NvbHVtbnMnLCAnZ3V0dGVycycsICdzcHJlYWQnLCAnY29udGFpbmVyLXNwcmVhZCcsICdsb2NhdGlvbicpLFxuICAgICdzdS1ndXR0ZXInOiAoJ2NvbHVtbnMnLCAnZ3V0dGVycycsICdjb250YWluZXItc3ByZWFkJyksXG4gICAgJ3N1LXNsaWNlJzogKCdzcGFuJywgJ2NvbHVtbnMnLCAnbG9jYXRpb24nKSxcbiAgKTtcblxuICAkYXJnczogbWFwLWdldCgkZ3JpZC1mdW5jdGlvbi1hcmdzLCAkbmFtZSk7XG5cbiAgQGlmIG5vdCAkYXJncyB7XG4gICAgJG9wdGlvbnM6ICdUcnkgb25lIG9mIHRoZXNlOiAje21hcC1rZXlzKCRncmlkLWZ1bmN0aW9uLWFyZ3MpfSc7XG4gICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICcjeyRuYW1lfSBpcyBub3QgYSBwdWJsaWMgU3UgZnVuY3Rpb24uICN7JG9wdGlvbnN9JyxcbiAgICAgICdzdS1jYWxsJyk7XG4gIH1cblxuICAkY2FsbDogaWYoZnVuY3Rpb24tZXhpc3RzKCdnZXQtZnVuY3Rpb24nKSwgZ2V0LWZ1bmN0aW9uKCRuYW1lKSwgJG5hbWUpO1xuICAkb3V0cHV0OiAoKTtcblxuICBAZWFjaCAkYXJnIGluICRhcmdzIHtcbiAgICAkdmFsdWU6IG1hcC1nZXQoJGNvbmZpZywgJGFyZyk7XG4gICAgJG91dHB1dDogaWYoJHZhbHVlLCBtYXAtbWVyZ2UoJG91dHB1dCwgKCRhcmc6ICR2YWx1ZSkpLCAkb3V0cHV0KTtcbiAgfVxuXG4gIEByZXR1cm4gY2FsbCgkY2FsbCwgJG91dHB1dC4uLik7XG59XG4iLCIvLy8gU3VzeTMgQVBJIEZ1bmN0aW9uc1xuLy8vID09PT09PT09PT09PT09PT09PT1cbi8vLyBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgZm9ybSB0aGUgY29yZSBvZiBTdXN5J3Ncbi8vLyBsYXlvdXQtYnVpbGRpbmcgZ3JpZCBBUEkuXG4vLy9cbi8vLyAtIFVzZSBgc3BhbigpYCBhbmQgYGd1dHRlcigpYCB0byByZXR1cm4gYW55IGdyaWQtd2lkdGgsXG4vLy8gICBhbmQgYXBwbHkgdGhlIHJlc3VsdHMgd2hlcmV2ZXIgeW91IG5lZWQgdGhlbTpcbi8vLyAgIENTUyBgd2lkdGhgLCBgbWFyZ2luYCwgYHBhZGRpbmdgLCBgZmxleC1iYXNpc2AsIGB0cmFuc2Zvcm1gLCBldGMuXG4vLy8gLSBGb3IgYXN5bW1ldHJpY2FsLWZsdWlkIGdyaWRzLFxuLy8vICAgYHNsaWNlKClgIGNhbiBoZWxwIG1hbmFnZSB5b3VyIG5lc3RpbmcgY29udGV4dC5cbi8vL1xuLy8vIEFsbCB0aHJlZSBmdW5jdGlvbnMgY29tZSB3aXRoIGFuIHVucHJlZml4ZWQgYWxpYXMgYnkgZGVmYXVsdCxcbi8vLyB1c2luZyB0aGUgYHN1c3lgIGltcG9ydC5cbi8vLyBJbXBvcnQgdGhlIGBzdXN5LXByZWZpeGAgcGFydGlhbCBpbnN0ZWFkLFxuLy8vIGlmIHlvdSBvbmx5IG9ubHkgd2FudCBwcmVmaXhlZCB2ZXJzaW9ucyBvZiB0aGUgQVBJLlxuLy8vXG4vLy8gVGhpcyBpcyBhIHRoaW4gc3ludGF4LXN1Z2FyIHNoZWxsIGFyb3VuZFxuLy8vIHRoZSBcIlN1XCIgY29yZS1tYXRoIGZ1bmN0aW9uczogYHN1LXNwYW5gLCBgc3UtZ3V0dGVyYCwgYW5kIGBzdS1zbGljZWAuXG4vLy8gSWYgeW91IHByZWZlciB0aGUgbW9yZSBjb25zdHJhaW5lZCBzeW50YXggb2YgdGhlIG1hdGggZW5naW5lLFxuLy8vIHlvdSBhcmUgd2VsY29tZSB0byB1c2UgdGhvc2UgZnVuY3Rpb25zIGluc3RlYWQuXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQHNlZSBzdXN5LXNwYW5cbi8vLyBAc2VlIHN1c3ktZ3V0dGVyXG4vLy8gQHNlZSBzdXN5LXNsaWNlXG4vLy8gQHNlZSBzdS1zcGFuXG4vLy8gQHNlZSBzdS1ndXR0ZXJcbi8vLyBAc2VlIHN1LXNsaWNlXG5cblxuXG4vLy8gIyMgU2hvcnRoYW5kXG4vLy9cbi8vLyBBbGwgZnVuY3Rpb25zIGRyYXcgb24gdGhlIHNhbWUgc2hvcnRoYW5kIHN5bnRheCBpbiB0d28gcGFydHMsXG4vLy8gc2VwZXJhdGVkIGJ5IHRoZSB3b3JkIGBvZmAuXG4vLy9cbi8vLyAjIyMgU3BhbiBTeW50YXg6IGA8d2lkdGg+YCBbYDxsb2NhdGlvbj5gIGA8c3ByZWFkPmBdXG4vLy8gVGhlIGZpcnN0IHBhcnQgZGVzY3JpYmVzIHRoZVxuLy8vICoqc3BhbioqIHdpZHRoLCBsb2NhdGlvbiwgYW5kIHNwcmVhZCBpbiBhbnkgb3JkZXIuXG4vLy8gT25seSB0aGUgd2lkdGggaXMgcmVxdWlyZWQ6XG4vLy9cbi8vLyAtIGBzcGFuKDIpYCB3aWxsIHJldHVybiB0aGUgd2lkdGggb2YgMiBjb2x1bW5zLlxuLy8vIC0gYHNwYW4oMyB3aWRlKWAgd2lsbCByZXR1cm4gMy1jb2x1bW5zLCB3aXRoIGFuIGFkZGl0aW9uYWwgZ3V0dGVyLlxuLy8vIC0gbG9jYXRpb24gaXMgb25seSBuZWVkZWQgd2l0aCBhc3ltbWV0cmljYWwgZ3JpZHMsXG4vLy8gICB3aGVyZSBgc3BhbigzIGF0IDIpYCB3aWxsIHJldHVybiB0aGUgd2lkdGggb2Zcbi8vLyAgIHNwZWNpZmljIGNvbHVtbnMgb24gdGhlIGdyaWQuXG4vLy8gICBTaW5jZSB0aGVzZSBhcmUgZnVuY3Rpb25zLCB0aGV5IHdpbGwgbm90IGhhbmRsZSBwbGFjZW1lbnQgZm9yIHlvdS5cbi8vL1xuLy8vICMjIyBDb250ZXh0IFN5bnRheDogYFtvZiA8Y29sdW1ucz4gPGNvbnRhaW5lci1zcHJlYWQ+IDxndXR0ZXJzPl1gXG4vLy8gVGhlIHNlY29uZCBoYWxmIG9mIFN1c3kncyBzaG9ydGhhbmRcbi8vLyBkZXNjcmliZXMgdGhlIGdyaWQtKipjb250ZXh0Kiog4oCTXG4vLy8gYXZhaWxhYmxlIGNvbHVtbnMsIGNvbnRhaW5lci1zcHJlYWQsIGFuZCBvcHRpb25hbCBndXR0ZXIgb3ZlcnJpZGUg4oCTXG4vLy8gaW4gYW55IG9yZGVyLlxuLy8vIEFsbCBvZiB0aGVzZSBzZXR0aW5ncyBoYXZlIGdsb2JhbGx5LWRlZmluZWQgZGVmYXVsdHM6XG4vLy9cbi8vLyAtIGBzcGFuKDIgb2YgNilgIHdpbGwgc2V0IHRoZSBjb250ZXh0IHRvXG4vLy8gICBhIHNsaWNlIG9mIDYgY29sdW1ucyBmcm9tIHRoZSBnbG9iYWwgZ3JpZC5cbi8vLyAgIE1vcmUgZGV0YWlscyBiZWxvdy5cbi8vLyAtIGBzcGFuKDIgb2YgMTIgd2lkZSlgIGNoYW5nZXMgdGhlIGNvbnRhaW5lci1zcHJlYWRcbi8vLyAgIGFzIHdlbGwgYXMgdGhlIGNvbHVtbi1jb250ZXh0LlxuLy8vIC0gYHNwYW4oMiBvZiAxMiBzZXQtZ3V0dGVycyAwLjVlbSlgXG4vLy8gICB3aWxsIG92ZXJyaWRlIHRoZSBnbG9iYWwgZ3V0dGVycyBzZXR0aW5nXG4vLy8gICBmb3IgdGhpcyBvbmUgY2FsY3VsYXRpb24uXG4vLy9cbi8vLyBBIHNpbmdsZSB1bml0bGVzcyBudW1iZXIgZm9yIGBjb2x1bW5zYFxuLy8vIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNsaWNlIG9mIHRoZSBwYXJlbnQgZ3JpZC5cbi8vLyBPbiBhIGdyaWQgd2l0aCBgY29sdW1uczogc3VzeS1yZXBlYXQoMTIsIDEyMHB4KWAsXG4vLy8gdGhlIHNob3J0aGFuZCBgb2YgNGAgd2lsbCB1c2UgdGhlIHBhcmVudCBgMTIwcHhgIGNvbHVtbi13aWR0aC5cbi8vLyBZb3UgY2FuIGFsc28gYmUgbW9yZSBleHBsaWNpdCxcbi8vLyBhbmQgc2F5IGBvZiBzdXN5LXJlcGVhdCg0LCAxMDBweClgLlxuLy8vIElmIHlvdSBhcmUgdXNpbmcgYXN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vIGxpa2UgYGNvbHVtbnM6ICgxIDEgMiAzIDUgOClgLFxuLy8vIFN1c3kgY2FuJ3Qgc2xpY2UgaXQgZm9yIHlvdSB3aXRob3V0IGtub3dpbmcgd2hpY2ggY29sdW1ucyB5b3Ugd2FudC5cbi8vLyBUaGUgYHNsaWNlYCBmdW5jdGlvbiBhY2NlcHRzIGV4YWN0bHkgdGhlIHNhbWUgc3ludGF4IGFzIGBzcGFuYCxcbi8vLyBidXQgcmV0dXJucyBhIGxpc3Qgb2YgY29sdW1ucyByYXRoZXIgdGhhbiBhIHdpZHRoLlxuLy8vIFVzZSBpdCBpbiB5b3VyIGNvbnRleHQgbGlrZSBgb2Ygc2xpY2UoZmlyc3QgMylgLlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuXG5cblxuLy8gU3VzeSBTcGFuXG4vLyAtLS0tLS0tLS1cbi8vLyBUaGlzIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGluIFN1c3kg4oCUXG4vLy8gdXNlZCB0byByZXR1cm4gdGhlIHdpZHRoIG9mIGEgc3BhbiBhY3Jvc3Mgb25lIG9yIG1vcmUgY29sdW1ucyxcbi8vLyBhbmQgYW55IHJlbGV2YW50IGd1dHRlcnMgYWxvbmcgdGhlIHdheS5cbi8vLyBXaXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzLFxuLy8vIGBzcGFuKDMpYCB3aWxsIHJldHVybiB0aGUgd2lkdGggb2YgMyBjb2x1bW5zLFxuLy8vIGFuZCB0aGUgMiBpbnRlcm1lZGlhdGUgZ3V0dGVycy5cbi8vLyBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgYHdpZHRoYCBwcm9wZXJ0eSBvZiBncmlkIGVsZW1lbnRzLFxuLy8vIG9yIGBtYXJnaW5gIGFuZCBgcGFkZGluZ2Bcbi8vLyB0byBwdXNoLCBwdWxsLCBhbmQgcGFkIHlvdXIgZWxlbWVudHMuXG4vLy9cbi8vLyAtIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyAgIHRoZSBjb3JlLW1hdGggYHN1LXNwYW4oKWAgZnVuY3Rpb24uXG4vLy8gLSBUaGUgdW4tcHJlZml4ZWQgYWxpYXMgYHNwYW4oKWAgaXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQHNlZSBzdS1zcGFuXG4vLy8gQHNlZSAkc3VzeVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhbiAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSBzcGFuLFxuLy8vICAgb3B0aW9uYWxseSBjb250YWluaW5nOlxuLy8vICAgLSBhIGNvdW50LCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0IHNwYW4uXG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHMsXG4vLy8gICAgIHdoZXJlIGBhdCAxID09IGZpcnN0YCxcbi8vLyAgICAgYW5kIGBsYXN0YCB3aWxsIGNhbGN1bGF0ZSB0aGUgcHJvcGVyIGxvY2F0aW9uXG4vLy8gICAgIGJhc2VkIG9uIGNvbHVtbnMgYW5kIHNwYW4uXG4vLy8gICAtIGBuYXJyb3dgLCBgd2lkZWAsIG9yIGB3aWRlcmAgZm9yIG9wdGlvbmFsbHkgc3ByZWFkaW5nXG4vLy8gICAgIGFjcm9zcyBhZGphY2VudCBndXR0ZXJzLlxuLy8vICAgLSBgb2YgJG4gPHNwcmVhZD5gIGZvciBhdmFpbGFibGUgZ3JpZCBjb2x1bW5zXG4vLy8gICAgIGFuZCBzcHJlYWQgb2YgdGhlIGNvbnRhaW5lci5cbi8vLyAgICAgU3BhbiBjb3VudHMgbGlrZSBgb2YgNmAgYXJlIHZhbGlkXG4vLy8gICAgIGluIHRoZSBjb250ZXh0IG9mIHN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vICAgICB3aGVyZSBTdXN5IGNhbiBzYWZlbHkgaW5mZXIgYSBzbGljZSBvZiB0aGUgcGFyZW50IGNvbHVtbnMuXG4vLy8gICAtIGFuZCBgc2V0LWd1dHRlcnMgJG5gIHRvIG92ZXJyaWRlIGdsb2JhbCBndXR0ZXIgc2V0dGluZ3MuXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldIC1cbi8vLyAgIE9wdGlvbmFsIG1hcCBvZiBTdXN5IGdyaWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbi8vLyAgIFNlZSBgJHN1c3lgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAcmV0dXJuIHtsZW5ndGh9IC1cbi8vLyAgIENhbGN1bGF0ZWQgbGVuZ3RoIHZhbHVlLCB1c2luZyB0aGUgdW5pdHMgZ2l2ZW4sXG4vLy8gICBvciBjb252ZXJ0aW5nIHRvIGAlYCBmb3IgZnJhY3Rpb24tYmFzZWQgZ3JpZHMsXG4vLy8gICBvciBhIGZ1bGwgYGNhbGNgIGZ1bmN0aW9uIHdoZW4gdW5pdHMvZnJhY3Rpb25zXG4vLy8gICBhcmUgbm90IGNvbXBhcmFibGUgb3V0c2lkZSB0aGUgYnJvd3Nlci5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBzcGFuIGhhbGYgdGhlIGdyaWRcbi8vLyAgIC5mb28ge1xuLy8vICAgICAvLyB0aGUgcmVzdWx0IGlzIGEgYml0IHVuZGVyIDUwJSB0byBhY2NvdW50IGZvciBndXR0ZXJzXG4vLy8gICAgIHdpZHRoOiBzdXN5LXNwYW4oNiBvZiAxMik7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gc3BhbiBhIHNwZWNpZmljIHNlZ21lbnQgb2YgYXN5bW1ldHJpY2FsIGdyaWRcbi8vLyAgIC5mb28ge1xuLy8vICAgICB3aWR0aDogc3VzeS1zcGFuKDMgYXQgMyBvZiAoMSAyIDMgNSA4KSk7XG4vLy8gICB9XG5AZnVuY3Rpb24gc3VzeS1zcGFuKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICAkb3V0cHV0OiBzdXN5LWNvbXBpbGUoJHNwYW4sICRjb25maWcpO1xuXG4gIEBpZiBtYXAtZ2V0KCRvdXRwdXQsICdzcGFuJykge1xuICAgIEByZXR1cm4gc3UtY2FsbCgnc3Utc3BhbicsICRvdXRwdXQpO1xuICB9XG5cbiAgJGFjdHVhbDogJ1sje3R5cGUtb2YoJHNwYW4pfV0gYCN7aW5zcGVjdCgkc3Bhbil9YCc7XG4gIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgJ1VuYWJsZSB0byBkZXRlcm1pbmUgc3BhbiB2YWx1ZSBmcm9tICN7JGFjdHVhbH0uJyxcbiAgICAnc3VzeS1zcGFuJyk7XG59XG5cblxuXG4vLyBTdXN5IEd1dHRlclxuLy8gLS0tLS0tLS0tLS1cbi8vLyBUaGUgZ3V0dGVyIGZ1bmN0aW9uIHJldHVybnNcbi8vLyB0aGUgd2lkdGggb2YgYSBzaW5nbGUgZ3V0dGVyIG9uIHlvdXIgZ3JpZCxcbi8vLyB0byBiZSBhcHBsaWVkIHdoZXJlIHlvdSBzZWUgZml0IOKAk1xuLy8vIG9uIGBtYXJnaW5zYCwgYHBhZGRpbmdgLCBgdHJhbnNmb3JtYCwgb3IgZWxlbWVudCBgd2lkdGhgLlxuLy8vXG4vLy8gLSBUaGlzIGlzIGEgdGhpbiBzeW50YXgtc3VnYXIgc2hlbGwgYXJvdW5kXG4vLy8gICB0aGUgY29yZS1tYXRoIGBzdS1ndXR0ZXIoKWAgZnVuY3Rpb24uXG4vLy8gLSBUaGUgdW4tcHJlZml4ZWQgYWxpYXMgYGd1dHRlcigpYCBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdC5cbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAc2VlIHN1LWd1dHRlclxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdCB8IG51bWJlcn0gJGNvbnRleHQgW251bGxdIC1cbi8vLyAgIE9wdGlvbmFsIGNvbnRleHQgZm9yIG5lc3RlZCBndXR0ZXJzLFxuLy8vICAgaW5jbHVkaW5nIHNob3J0aGFuZCBmb3Jcbi8vLyAgIGBjb2x1bW5zYCwgYGd1dHRlcnNgLCBhbmQgYGNvbnRhaW5lci1zcHJlYWRgXG4vLy8gICAoYWRkaXRpb25hbCBzaG9ydGhhbmQgd2lsbCBiZSBpZ25vcmVkKVxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXSAtXG4vLy8gICBPcHRpb25hbCBtYXAgb2YgU3VzeSBncmlkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4vLy8gICBTZWUgYCRzdXN5YCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlciBhcyBgJWAgb2YgY3VycmVudCBjb250ZXh0LFxuLy8vICAgb3IgaW4gdGhlIHVuaXRzIGRlZmluZWQgYnkgYGNvbHVtbi13aWR0aGAgd2hlbiBhdmFpbGFibGVcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBhZGQgZ3V0dGVycyBiZWZvcmUgb3IgYWZ0ZXIgYW4gZWxlbWVudFxuLy8vICAgLmZsb2F0cyB7XG4vLy8gICAgIGZsb2F0OiBsZWZ0O1xuLy8vICAgICB3aWR0aDogc3BhbigzIG9mIDYpO1xuLy8vICAgICBtYXJnaW4tbGVmdDogZ3V0dGVyKG9mIDYpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGFkZCBndXR0ZXJzIHRvIHBhZGRpbmdcbi8vLyAgIC5mbGV4Ym94IHtcbi8vLyAgICAgZmxleDogMSAxIHNwYW4oMyB3aWRlIG9mIDYgd2lkZSk7XG4vLy8gICAgIHBhZGRpbmc6IGd1dHRlcihvZiA2KSAvIDI7XG4vLy8gICB9XG4vLy9cbkBmdW5jdGlvbiBzdXN5LWd1dHRlcihcbiAgJGNvbnRleHQ6IG51bGwsXG4gICRjb25maWc6ICgpXG4pIHtcbiAgJGNvbnRleHQ6IHN1c3ktY29tcGlsZSgkY29udGV4dCwgJGNvbmZpZywgJ2NvbnRleHQtb25seScpO1xuXG4gIEByZXR1cm4gc3UtY2FsbCgnc3UtZ3V0dGVyJywgJGNvbnRleHQpO1xufVxuXG5cblxuLy8gU3VzeSBTbGljZVxuLy8gLS0tLS0tLS0tLVxuLy8vIFdvcmtpbmcgd2l0aCBhc3ltbWV0cmljYWwgZ3JpZHMgKHVuLWVxdWFsIGNvbHVtbiB3aWR0aHMpXG4vLy8gY2FuIGJlIGNoYWxsZW5naW5nIOKAk8KgXG4vLy8gZXhwZWNpYWxseSB3aGVuIHRoZXkgaW52b2x2ZSBmbHVpZC9mcmFjdGlvbmFsIGVsZW1lbnRzLlxuLy8vIERlc2NyaWJpbmcgYSBjb250ZXh0IGBvZiAoMTVlbSA2ZW0gNmVtIDZlbSAxNWVtKWAgaXMgYSBsb3Rcbi8vLyB0byBwdXQgaW5zaWRlIHRoZSBzcGFuIG9yIGd1dHRlciBmdW5jdGlvbiBzaG9ydGhhbmQuXG4vLy8gVGhpcyBzbGljZSBmdW5jdGlvbiByZXR1cm5zIGEgc3ViLXNsaWNlIG9mIGFzeW1tZXRyaWNhbCBjb2x1bW5zIHRvIHVzZVxuLy8vIGZvciBhIG5lc3RlZCBjb250ZXh0LlxuLy8vIGBzbGljZSgzIGF0IDIpYCB3aWxsIGdpdmUgeW91IGEgc3Vic2V0IG9mIHRoZSBnbG9iYWwgZ3JpZCxcbi8vLyBzcGFubmluZyAzIGNvbHVtbnMsIHN0YXJ0aW5nIHdpdGggdGhlIHNlY29uZC5cbi8vL1xuLy8vIC0gVGhpcyBpcyBhIHRoaW4gc3ludGF4LXN1Z2FyIHNoZWxsIGFyb3VuZFxuLy8vICAgdGhlIGNvcmUtbWF0aCBgc3Utc2xpY2UoKWAgZnVuY3Rpb24uXG4vLy8gLSBUaGUgdW4tcHJlZml4ZWQgYWxpYXMgYHNsaWNlKClgIGlzIGF2YWlsYWJsZSBieSBkZWZhdWx0LlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3Utc2xpY2Vcbi8vLyBAc2VlICRzdXN5XG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRzcGFuIC1cbi8vLyAgIFNob3J0aGFuZCBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgc3Vic2V0IHNwYW4sIG9wdGlvbmFsbHkgY29udGFpbmluZzpcbi8vLyAgIC0gYGF0ICRuYCwgYGZpcnN0YCwgb3IgYGxhc3RgIGxvY2F0aW9uIG9uIGFzeW1tZXRyaWNhbCBncmlkcztcbi8vLyAgIC0gYG9mICRuIDxzcHJlYWQ+YCBmb3IgYXZhaWxhYmxlIGdyaWQgY29sdW1uc1xuLy8vICAgICBhbmQgc3ByZWFkIG9mIHRoZSBjb250YWluZXJcbi8vLyAgICAgLSBTcGFuLWNvdW50cyBsaWtlIGBvZiA2YCBhcmUgb25seSB2YWxpZFxuLy8vICAgICAgIGluIHRoZSBjb250ZXh0IG9mIHN5bW1ldHJpY2FsIGdyaWRzXG4vLy8gICAgIC0gVmFsaWQgc3ByZWFkcyBpbmNsdWRlIGBuYXJyb3dgLCBgd2lkZWAsIG9yIGB3aWRlcmBcbi8vL1xuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy5cbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIFN1YnNldCBsaXN0IG9mIGNvbHVtbnMgZm9yIHVzZSBmb3IgYSBuZXN0ZWQgY29udGV4dFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFJldHVybiBhIG5lc3RlZCBzZWdtZW50IG9mIGFzeW1tZXRyaWNhbCBncmlkXG4vLy8gICAkY29udGV4dDogc3VzeS1zbGljZSgzIGF0IDMgb2YgKDEgMiAzIDUgOCkpO1xuLy8vICAgLyogJGNvbnRleHQ6ICN7JGNvbnRleHR9OyAqL1xuQGZ1bmN0aW9uIHN1c3ktc2xpY2UoXG4gICRzcGFuLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gICRzcGFuOiBzdXN5LWNvbXBpbGUoJHNwYW4sICRjb25maWcpO1xuXG4gIEByZXR1cm4gc3UtY2FsbCgnc3Utc2xpY2UnLCAkc3Bhbik7XG59XG5cblxuXG4vLy8gIyMgQnVpbGRpbmcgR3JpZHNcbi8vLyBUaGUgd2ViIGhhcyBjb21lIGEgbG9uZyB3YXlcbi8vLyBzaW5jZSB0aGUgZGF5cyBvZiBkb3VibGUtbWFyZ2luLWhhY2tzXG4vLy8gYW5kIGluY29uc2lzdGVudCBzdWJwaXhlbCByb3VuZGluZy5cbi8vLyBJbiBhZGRpdGlvbiB0byBmbG9hdHMgYW5kIHRhYmxlcyxcbi8vLyB3ZSBjYW4gbm93IHVzZSBtdWNoIG1vcmUgcG93ZXJmdWwgdG9vbHMsXG4vLy8gbGlrZSBmbGV4Ym94IGFuZCBDU1MgZ3JpZCxcbi8vLyB0byBidWlsZCBtb3JlIGludGVyZXN0aW5nIGFuZCByZXNwb25zaXZlIGxheW91dHMuXG4vLy9cbi8vLyBXaXRoIFN1c3kzLCB3ZSBob3BlIHlvdSdsbCBzdGFydCBtb3ZpbmcgaW4gdGhhdCBkaXJlY3Rpb24uXG4vLy8gWW91IGNhbiBzdGlsbCBidWlsZCBjbGFzc2ljIDEyLWNvbHVtbiBHcmlkIFN5c3RlbXMsXG4vLy8gYW5kIHdlJ2xsIGhlbHAgeW91IGdldCB0aGVyZSxcbi8vLyBidXQgU3VzeTMgaXMgcHJpbWFyaWx5IGRlc2lnbmVkIGZvciBhIGdyaWQtbWF0aC1vbi1kZW1hbmRcbi8vLyBhcHByb2FjaCB0byBsYXlvdXQ6XG4vLy8gYXBwbHlpbmcgb3VyIGZ1bmN0aW9ucyBvbmx5IHdoZXJlIHlvdSByZWFsbHkgbmVlZCBncmlkIG1hdGguXG4vLy8gUmVhZCB0aGUgW2ludHJvIGFydGljbGUgYnkgT2RkQmlyZF1bd2VsY29tZV0gZm9yIG1vcmUgZGV0YWlscy5cbi8vL1xuLy8vIFt3ZWxjb21lXTogaHR0cDovL29kZGJpcmQubmV0LzIwMTcvMDYvMjgvc3VzeTMvXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQGxpbmsgaHR0cDovL29kZGJpcmQubmV0LzIwMTcvMDYvMjgvc3VzeTMvIEFydGljbGU6IFdlbGNvbWUgdG8gU3VzeTNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBmbG9hdHNcbi8vLyAgIC5mbG9hdCB7XG4vLy8gICAgIHdpZHRoOiBzcGFuKDMpO1xuLy8vICAgICBtYXJnaW4tcmlnaHQ6IGd1dHRlcigpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGZsZXhib3hcbi8vLyAgIC5mbGV4Ym94IHtcbi8vLyAgICAgZmxleDogMSAxIHNwYW4oMyk7XG4vLy8gICAgIC8vIGhhbGYgYSBndXR0ZXIgb24gZWl0aGVyIHNpZGXigKZcbi8vLyAgICAgcGFkZGluZzogMCBndXR0ZXIoKSAvIDI7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gcHVzaGluZyBhbmQgcHVsbGluZ1xuLy8vICAgLnB1c2gtMyB7XG4vLy8gICAgIG1hcmdpbi1sZWZ0OiBzcGFuKDMgd2lkZSk7XG4vLy8gICB9XG4vLy9cbi8vLyAgIC5wdWxsLTMge1xuLy8vICAgICBtYXJnaW4tbGVmdDogMCAtIHNwYW4oMyB3aWRlKTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBidWlsZGluZyBhbiBhdHRyaWJ1dGUgc3lzdGVtXG4vLy8gICAvLyBtYXJrdXAgZXhhbXBsZTogPGRpdiBkYXRhLXNwYW49XCJsYXN0IDNcIj48L2Rpdj5cbi8vLyAgIFtkYXRhLXNwYW5dIHtcbi8vLyAgICAgZmxvYXQ6IGxlZnQ7XG4vLy9cbi8vLyAgICAgJjpub3QoW2RhdGEtc3Bhbio9J2xhc3QnXSkge1xuLy8vICAgICAgIG1hcmdpbi1yaWdodDogZ3V0dGVyKCk7XG4vLy8gICAgIH1cbi8vLyAgIH1cbi8vL1xuLy8vICAgQGZvciAkc3BhbiBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoc3VzeS1nZXQoJ2NvbHVtbnMnKSkge1xuLy8vICAgICBbZGF0YS1zcGFuKj0nI3skc3Bhbn0nXSB7XG4vLy8gICAgICAgd2lkdGg6IHNwYW4oJHNwYW4pO1xuLy8vICAgICB9XG4vLy8gICB9XG4iLCIvLyBVbnByZWZpeCBTdXN5XG4vLyA9PT09PT09PT09PT09XG5cblxuLy8gU3BhblxuLy8gLS0tLVxuLy8vIFVuLXByZWZpeGVkIGFsaWFzIGZvciBgc3VzeS1zcGFuYFxuLy8vIChhdmFpbGFibGUgYnkgZGVmYXVsdClcbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAYWxpYXMgc3VzeS1zcGFuXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRzcGFuXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXVxuQGZ1bmN0aW9uIHNwYW4oXG4gICRzcGFuLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gIEByZXR1cm4gc3VzeS1zcGFuKCRzcGFuLCAkY29uZmlnKTtcbn1cblxuXG4vLyBHdXR0ZXJcbi8vIC0tLS0tLVxuLy8vIFVuLXByZWZpeGVkIGFsaWFzIGZvciBgc3VzeS1ndXR0ZXJgXG4vLy8gKGF2YWlsYWJsZSBieSBkZWZhdWx0KVxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBhbGlhcyBzdXN5LWd1dHRlclxuLy8vXG4vLy8gQHBhcmFtIHtpbnRlZ2VyIHwgbGlzdH0gJGNvbnRleHQgW251bGxdIC1cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldXG5AZnVuY3Rpb24gZ3V0dGVyKFxuICAkY29udGV4dDogbnVsbCxcbiAgJGNvbmZpZzogKClcbikge1xuICBAcmV0dXJuIHN1c3ktZ3V0dGVyKCRjb250ZXh0LCAkY29uZmlnKTtcbn1cblxuXG4vLyBTbGljZVxuLy8gLS0tLS1cbi8vLyBVbi1wcmVmaXhlZCBhbGlhcyBmb3IgYHN1c3ktc2xpY2VgXG4vLy8gKGF2YWlsYWJsZSBieSBkZWZhdWx0KVxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBhbGlhcyBzdXN5LXNsaWNlXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRzcGFuXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXVxuQGZ1bmN0aW9uIHNsaWNlKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICBAcmV0dXJuIHN1c3ktc2xpY2UoJHNwYW4sICRjb25maWcpO1xufVxuIiwiLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+S4u+ahhuaetuioreWumiBtYWluXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v5qGI5Lu25qGG5p62OlxuLy/ngI/opr3lmajlr6zluqboqK3lrpoo5ZCN56ixIOWvrOW6piDlt6blj7PplpPot53nuL3lkowpXG4kaW5uZXI6IChmbHVpZCAxMDAlIDMwLHhsIDE2MDAgMzAsbGcgMTI4MCAzMCxtZCAxMDI0IDAsc20gOTYwIDAseHMgNzY4IDApOyAvL+ahhuaetuWvrOW6puioreWumlxuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v6Led6Zui6Kit5a6aXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRiYXNlR2FwOiAxMHB4OyAvL+S4u+imgei3nembouWkp+WwjyzplpPot53ntbHkuIDlgI3mlbhcblxuLy/mloflrZfoqK3lrppcbiRmb250OiAnTGF0bycsJ05vdG8gU2FucyBUQycsc2Fucy1zZXJpZjsvL+aWh+Wtl+Wtl+Wei1xuJGZvbnRTaXplOiAxNnB4OyAvL+S4u+aWh+Wtl+Wkp+Wwj1xuJGZvbnRTaXplTGV2ZWw6IDAuNTsvL+aWh+Wtl+aUvuWkp+WAjeeOh1xuJEZvbnRMZXZlbDogNTsgLy/mloflrZdsZXZlbOeUn+aIkOaVuFxuJGxpbmVIZWlnaHRMZXZlbDogMS41OyAvL+ihjOi3neWAjeeOh1xuJGZvbnRMaDogY2VpbCgkZm9udFNpemUgKiAkbGluZUhlaWdodExldmVsKTsgLy/kuLvmloflrZfooYzpq5hcbiR0ZXh0Q29sb3I6ICMyNTI1MjU7IC8v5Li75paH5a2X6aGP6ImyXG4vLyR0ZXh0SENvbG9yOiAjMzI1NUY5IC8v5Li75paH5a2X5ruR5YWl6aGP6ImyXG4kdGV4dEhDb2xvcjogIzAwNEFBQztcbiRsZXR0ZXJTcGFjaW5nOiAwZW07IC8v5paH5a2X6ZaT6LedXG4vL+e2suermeS4u+aetuani+mhj+iJsuioreWumlxuJHdoaXRlOiAgICAjZmZmO1xuJGdyYXktMTAwOiAjZjhmOWZhO1xuJGdyYXktMjAwOiAjZTllY2VmO1xuJGdyYXktMzAwOiAjZGVlMmU2O1xuJGdyYXktNDAwOiAjY2VkNGRhO1xuJGdyYXktNTAwOiAjYWRiNWJkO1xuJGdyYXktNjAwOiAjNmM3NTdkO1xuJGdyYXktNzAwOiAjNDk1MDU3O1xuJGdyYXktODAwOiAjMzQzYTQwO1xuJGdyYXktOTAwOiAjMjEyNTI5O1xuJGJsYWNrOiAgICAjMjUyNTI1O1xuLy8kbWFpbi1jb2xvcjogIzMyNTVGOVxuJG1haW4tY29sb3I6ICMwMDRBQUM7XG4kYmx1ZTogIzAwNEFBQztcbiRncmVlbjogIzE0NUExMjtcbiRyZWQ6ICNjMTI3MmQ7XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/ntrLmoLzmoYbmnrYgZ3JpZFxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kZ3JpZFhMOiAxNjAwO1xuJGdyaWRMZzogMTI4MDtcbiRncmlkTWQ6IDc2ODtcbiRncmlkU206IDQ4MDtcbiRncmlkQ29sczogMTI7IC8v57ay5qC85qyE5pW4XG4kZ3JpZC1wcm9wczogKCdkZWZhdWx0JzogMTkyMCwnLXhsJzogJGdyaWRYTCwnLWxnJzogJGdyaWRMZywnLW1kJzogJGdyaWRNZCwnLXNtJzogJGdyaWRTbSk7Ly9jbGFzcyDlsI3mh4nlr6zluqboqK3lrppcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+ihqOmgrSBoZWFkZXJcbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJGhlYWRlck1vZGU6IDE7IC8vaGVhZGVy5qih5byPIDE66YG45Zau5ZCM5LiA6KGMIDI66YG45Zau5Zyo5LiL5pa5XG4kaGVhZGVyT3JkZXI6ICgnbG9nbyc6IDEsJ25hdic6IDIsJ3NlYXJjaCc6IDQsJ3NvY2lhbCc6IDMsJ2hhbWJ1cmdlcic6IDUpOyAvL+aOkuW6j1xuJHZpZXc6ICgnc2VhcmNoJzogMCwnc29jaWFsSXRlbSc6IDApOyAvL3NlYXJjaDox54K66aGv56S6MOeCuuS4jemhr+ekuiBTb2NpYWxJdGVtIOekvue+pOaVuOebrlxuJGxvZ29IZWlnaHQ6ICgnbW9kZTEnOiA4MHB4LCdtb2RlMUZpeGVkJzogODBweCwnbW9kZTInOiA3MHB4LCdtb2RlMkZpeGVkJzogNTBweCk7IC8vIG1vZGUxOmxvZ2/pq5jluqYg6IiHIG1vZGUyOmxvZ2/pq5jluqZcbiRsb2dvV2lkdGg6IDQwMHB4OyAvL0xPR0/lr6zluqYo5YOP57SgKVxuJGxvZ29BbGlnbjogZmxleC1zdGFydDsgLy9MT0dP5L2N572uKGp1c3RpZnktY29udGVudClcbiRzb2NpYWxIZWlnaHQ6IDIwcHg7IC8v56S+576kaWNvbumrmOW6puS4jeWkp+aWvDQwcHhcbiRuYXZGb250OiAyMHB4OyAvL+mBuOWWruaWh+Wtl+Wkp+Wwj1xuJG5hdkl0ZW06IDQ7IC8v6YG45Zau5qiZ6aGM5pW46YePXG4kbmF2QWxpZ246IGZsZXgtZW5kOyAvL25hdumBuOWWruaOkuWIl+S9jee9rihqdXN0aWZ5LWNvbnRlbnQpXG4kbmF2SGVpZ2h0OiA1MHB4OyAvL21vZGUy6YG45Zau6auY5bqmXG4kbmF2TGF5ZXJXaWR0aDogMjUwcHg7IC8v5ruR5YWl6YG45Zau6ZqO5bGk5a+s5bqmXG4kbmF2Q29sb3I6ICR0ZXh0Q29sb3I7IC8v6YG45Zau5paH5a2X6aGP6ImyXG4kbmF2YmdDb2xvcjogJHdoaXRlOyAvL+mBuOWWruiDjOaZr+iJslxuJG5hdkhvdmVyQ29sb3I6ICRtYWluLWNvbG9yOyAgLy/mu5HlhaXpoY/oibJcbiRuYXZIb3ZlcmJnQ29sb3I6ICR3aGl0ZTsgLy/mu5HlhaXog4zmma/poY/oibJcbiRuYXZCb3JkZXJDb2xvcjogJGdyYXktMzAwOyAvL+mBuOWWruahhumhj+iJslxuJG5hdkJ0bldpZHRoOiA0MHB4OyAvL+S4i+majuWxpOaMiemIleWvrOW6plxuJG5hdkJ0bmJnQ29sb3I6ICR3aGl0ZTsgLy/kuIvpmo7lsaTmjInpiJXog4zmma/poY/oibJcbiRzLW5hdmJnQ29sb3I6ICRtYWluLWNvbG9yOy8v5omL5qmf5p2/6ZqO5bGk6YG45Zau6IOM5pmvXG4kaGVhZGVyUldEOiAxMDI0OyAvLyDmiYvmqZ/niYjorormj5vlr6zluqZcbiRoZWFkZXJQaG9uZUhlaWdodDogNTBweDsgLy/miYvmqZ/niYhoZWFkZXIg6auY5bqmXG5cblxuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v6KGo5ZauIGZvcm1cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJGZvcm1IZWlnaHQ6IDQwcHg7IC8v6Ly45YWl5qGG6auY5bqmXG4kZm9ybUNvbG9yOiAkdGV4dENvbG9yOyAvL+i8uOWFpeahhuaWh+Wtl+mhj+iJslxuJGZvcm1MaW5lV2lkdGg6IDA7ICAvL+i8uOWFpeahhuahhue3mueyl+e0sFxuJGZvcm1MaW5lQ29sb3I6ICNmMmYyZjI7ICAvL+i8uOWFpeahhuahhue3mumhj+iJslxuJGZvcm1CZ0NvbG9yOiAjZjJmMmYyOyAgLy/ovLjlhaXog4zmma/poY/oibJcbiRmb3JtQmRSczogMTBweDsgLy/ovLjlhaXmoYblnJPop5JcbiRmb3JtU2hhZG93OiAjMDAwOyAvL+i8uOWFpeahhumBuOWPlumZsOW9semhj+iJslxuJHBsYWNlaG9sZGVyQ29sb3I6ICM4ODg7IC8v6Ly45YWl5qGGcGxhY2Vob2xkZXLmloflrZfpoY/oibJcbiRsZWdlbmRDb2xvcjogIzAwMDsgLy9mb3JtIOaomemhjOaWh+Wtl+mhj+iJslxuJHJhZGlvU2l6ZTogMjNweDsgLy9yYWRpbyDpgbjpoIXlpKflsI9cbiRyYWRpb0JnQ29sb3I6ICRmb3JtQmdDb2xvcjsgLy9yYWRpbyDpgbjpoIXpoY/oibJcbiRyYWRpb0xpbmVDb2xvcjogJGZvcm1MaW5lQ29sb3I7IC8vcmFkaW8g6YG46aCF6YKK5qGG6aGP6ImyXG4kcmFkaW9MaW5lV2lkdGg6IDFweDsgLy9yYWRpbyDpgbjpoIXpgormoYbnspfntLBcbiRyYWRpb0JkUnM6IDIzcHg7IC8vcmFkaW8g6YG46aCF5ZyT6KeSXG4kcmFkaW9DaGVja0NvbG9yOiAjNTU1OyAvL3JhZGlvIOmBuOaTh+W+jOmhj+iJslxuJGNoZWNrYm94U2l6ZTogMjNweDsgLy9DaGVja2JveCDpgbjpoIXlpKflsI9cbiRjaGVja2JveEJnQ29sb3I6ICRmb3JtQmdDb2xvcjsgLy9DaGVja2JveCDpgbjpoIXpoY/oibJcbiRjaGVja2JveExpbmVXaWR0aDogMXB4OyAvL0NoZWNrYm94IOmBuOmghemCiuahhueyl+e0sFxuJGNoZWNrYm94TGluZUNvbG9yOiAkZm9ybUxpbmVDb2xvcjsgLy9DaGVja2JveCDpgormoYbpoY/oibJcbiRjaGVja2JveEJkUnM6IDNweDsgLy9DaGVja2JveCDlnJPop5LlpKflsI9cbiRjaGVja2JveENoZWNrQ29sb3I6ICM1NTU7IC8vQ2hlY2tib3gg6YG45pOH5b6M5Yu+5Yu+6aGP6ImyXG4kY2hvaWNlQnRuV2lkdGg6IDE1MHB4OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIleWvrOW6plxuJGNob2ljZUJ0bkhlaWdodDogNTBweDsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpq5jluqZcbiRjaG9pY2VCdG5Db2xvcjogJGZvcm1CZ0NvbG9yOyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemhj+iJslxuJGNob2ljZUJ0blRleHRDb2xvcjogIzU1NTsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXmloflrZfpoY/oibJcbiRjaG9pY2VCdG5MaW5lQ29sb3I6ICRmb3JtTGluZUNvbG9yOyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemCiuahhumhj+iJslxuJGNob2ljZUJ0bkxpbmVXaWR0aDogMXB4OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemCiuahhueyl+e0sFxuJGNob2ljZUJ0bkJkUnM6IDVweDsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXlnJPop5JcbiRjaG9pY2VCdG5DaGVja0NvbG9yOiAjMWU5ODEzOyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemBuOaTh+W+jOmhj+iJslxuJGNob2ljZUJ0bkNoZWNrVGV4dENvbG9yOiAjZmZmOyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemBuOaTh+W+jOaWh+Wtl+mhj+iJslxuJGNob2ljZUJ0bkNoZWNrTGluZUNvbG9yOiAjMWU5ODEzOyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemBuOaTh+W+jOmCiuahhumhj+iJslxuJHNlbGVjdEFycm93V2lkdGg6IDE2cHg7IC8vc2VsZWN0IOS4ieinkuW9ouWvrOW6plxuJHNlbGVjdEFycm93SGVpZ2h0OiAxMHB4OyAvL3NlbGVjdCDkuInop5LlvaLpq5jluqZcbiRzZWxlY3RBcnJvd0NvbG9yOiAjNTU1OyAvL3NlbGVjdCDkuInop5LlvaLpoY/oibJcbiRyZXF1aXJlZENvbG9yOiAjYzAwMDAwOyAvL+W/heWhq+mhj+iJslxuJHRpcHNDb2xvcjogIzk5OTsgLy/mj5DnpLrmloflrZfpoY/oibJcbiR0aXBzSWNvblNpemU6IDIwcHg7IC8v5o+Q56S6aWNvbiDlpKflsI9cbiR0aXBzSWNvbjogJ1xcZTkwMCc7IC8v5o+Q56S6aWNvblxuJHZhbGlkSWNvbjogJ1xcZTkwMCc7IC8vZmVlZGJhY2sg5o+Q56S6IGljb25cbiRlcnJvckNvbG9yOiAjYzAwMDAwOyAvL2ZlZWRiYWNrIOmMr+iqpOaPkOekuumhj+iJslxuJGVycm9ySWNvbjogJ1xcZTkwNic7IC8vZmVlZGJhY2sg6Yyv6Kqk5o+Q56S6aWNvblxuJHN1Y2Nlc3NDb2xvcjogIzFlOTgxMzsgLy9mZWVkYmFjayDmiJDlip/mj5DnpLrpoY/oibJcbiRzdWNjZXNzSWNvbjogJ1xcZTkwMSc7IC8vZmVlZGJhY2sg5oiQ6YCa5o+Q56S6aWNvblxuJHRleHRhcmVhSGVpZ2h0OiAxNTBweDsgLy90ZXh0YXJlYSDpq5jluqZcbiRyZXNldENvbG9yOiAjMWU5ODEzOyAvL+iqjeitieeivHJlc2V06aGP6ImyXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/mjInpiJUgYnV0dG9uXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRidG5XaWR0aDogMTIwcHg7IC8v5a6a576p5oyJ6YiV5a+s5bqmXG4kYnRuSGVpZ2h0OiA0MHB4OyAvL+Wumue+qeaMiemIlemrmOW6plxuJGJ0bkxpbmVXaWR0aDogMDsgLy/lrprnvqnmjInpiJXmoYbnt5rnspfntLBcbiRidG5JY29uU2l6ZTogMjBweDsgLy/lrprnvqnmjInpiJVpY29uIOWkp+Wwj1xuJGJ0blNtV2lkdGg6IDEwMHB4OyAvL+Wumue+qeWwj+aMiemIleWvrOW6plxuJGJ0blNtSGVpZ2h0OiA0MHB4OyAvL+Wumue+qeWwj+aMiemIlemrmOW6plxuJGJ0blNtSWNvblNpemU6IDIwcHg7IC8v5a6a576p5bCP5oyJ6YiVaWNvbuWkp+Wwj1xuJGJ0bkRlZmF1bHRDb2xvcjogJGdyYXktMjAwOyAvL+WOn+Wni+aMiemIlemhj+iJslxuJGJ0bkRlZmF1bHRMaW5lQ29sb3I6ICNlM2UzZTM7IC8v5Y6f5aeL5oyJ6YiV5qGG57ea6aGP6ImyXG4kYnRuRGVmYXVsdFRleHRDb2xvcjogJHRleHRDb2xvcjsgLy/ljp/lp4vmjInpiJXmloflrZfpoY/oibJcbiRidG5EZWZhdWx0SG92ZXJDb2xvcjogJG1haW4tY29sb3I7IC8v5Y6f5aeL5oyJ6YiV5ruR5YWl6aGP6ImyXG4kYnRuRGVmYXVsdEhvdmVyTGluZUNvbG9yOiAkbWFpbi1jb2xvcjsgLy/ljp/lp4vmjInpiJXmu5HlhaXmoYbnt5rpoY/oibJcbiRidG5EZWZhdWx0SG92ZXJUZXh0Q29sb3I6ICR3aGl0ZTsgLy/ljp/lp4vmjInpiJXmu5HlhaXmloflrZfpoY/oibJcbi8v5oyJ6YiV5ZCN56ix5paw5aKe6aCF55uuICjlkI3nqLEg6IOM5pmv6aGP6ImyIOWkluahhumhj+iJsiDmloflrZfpoY/oibIpXG4kYnRuQ29uZmlnOiAoc3VibWl0ICNkNjBkMGQgI2Q2MGQwZCAkd2hpdGUsIG1haW4gJG1haW4tY29sb3IgJG1haW4tY29sb3IgJHdoaXRlLCBzdWNjZXNzIHJnYmEoMCwwLDAsMCkgJGdyZWVuICRibGFjayk7XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy8g6aCB56K8IHBhZ2luYXRpb25cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJHBhZ2VCZzogJGdyYXktMjAwOyAvL+aMiemIleiDjOaZr+iJslxuJHBhZ2VIb3ZlckJnOiAkbWFpbi1jb2xvcjsgLy/mu5HpvKDnp7voh7PmjInpiJXog4zmma/oibJcbiRwYWdlQWN0aXZlQmc6IGRhcmtlbigkbWFpbi1jb2xvciwwLjIpOy8v5ruR6byg5oyJ5LiL55qE5qij5byPXG4kcGFnZUhvdmVyQ29sb3I6ICR3aGl0ZTsvL+a7keWFpeiIh+mBuOWPluaWh+Wtl+mhj+iJslxuJHBhZ2VEaXNhYmxlZDogJGdyYXktNDAwOyAvL+emgeeUqOaWh+Wtl+mhj+iJslxuIiwiLy9yZW3nrpflvI9cbkBmdW5jdGlvbiB0b1JlbSgkc2l6ZSkge1xuXHQkcmVtU2l6ZTogcm91bmQoJHNpemUgLyAkZm9udFNpemUgKiAxMDAwKSAvIDEwMDA7XG5cdEByZXR1cm4gJHJlbVNpemUgKiAxcmVtOyB9XG5cbi8v6Led6ZuibGV2ZWwg566X5byPXG4vL2dhcCgyKSA9PT4gMiokYmFzZUdhcFxuQGZ1bmN0aW9uIGdhcCgkZ2FwTGV2ZWw6IDEsICRnYXBIZWlnaHQ6ICRiYXNlR2FwKSB7XG4gICAgQHJldHVybiAkZ2FwTGV2ZWwgKiAkZ2FwSGVpZ2h0OyB9XG4iLCIvL1RoaXMgaXMgc2FzcyBmaWxlXG4vL2JhY2tncm91bmQg6Kit5a6aXG5AbWl4aW4gYmcoJGltZywgJHBvcy14OiAwLCAkcG9zLXk6IDAsICRyZXA6IG5vLXJlcGVhdCkge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi9pbWFnZXMvI3skaW1nfVwiKTtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogJHBvcy14ICRwb3MteTtcblx0YmFja2dyb3VuZC1yZXBlYXQ6ICRyZXA7IH1cblxuLy9yd2QgcG9pbnRcbi8vK3J3ZCgxOTIwLCBtYXgpXG5AbWl4aW4gcndkKCRwb2ludCwgJG13OiAnbWF4Jykge1xuXHRAbWVkaWEgb25seSBzY3JlZW4gYW5kICgjeyRtd30td2lkdGg6ICRwb2ludCAqIDFweCkge1xuXHRcdEBjb250ZW50OyB9IH1cblxuLy8raWNvbigzMHB4LDMwcHgsJ1xcZjEzOCcsMjVweCwgIzk5OSlcbkBtaXhpbiBpY29uKCR3aWR0aDogYXV0bywgJGhlaWdodDogYXV0bywgJGljb25fY29udGVudDogJycsICRmb250LXNpemU6IDEwMCUsICRjb2xvcjppbmhlcml0KSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0JjpiZWZvcmUge1xuXHRcdGNvbnRlbnQ6ICRpY29uX2NvbnRlbnQ7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHdpZHRoOiAkd2lkdGg7XG5cdFx0aGVpZ2h0OiAkaGVpZ2h0O1xuXHRcdGZvbnQtZmFtaWx5OiAnaWNvbW9vbic7XG5cdFx0Zm9udC1zaXplOiAkZm9udC1zaXplO1xuXHRcdGxpbmUtaGVpZ2h0OiAkaGVpZ2h0O1xuXHRcdGNvbG9yOiAkY29sb3I7XG5cdFx0QGNvbnRlbnQ7IH0gfVxuXG4vL+aWh+Wtl+ahhue3mlxuLy8rc3Ryb2tlKDIsI2VlZSlcbkBtaXhpbiBzdHJva2UoJHMtd2lkdGgsICRjb2xvcikge1xuXHQkcy13aWR0aDogJHMtd2lkdGg7XG5cdCRzaGFkb3c6IDAgMCAwIHRyYW5zcGFyZW50O1xuXHQkaTogMDtcblx0JHc6IDE7XG5cdEB3aGlsZSAoJHMtd2lkdGggPiAkaSkge1xuXHRcdCRpOiAkaSArIDE7XG5cdFx0JGo6IDA7XG5cdFx0JHc6ICR3ICsgMjtcblx0XHRAZm9yICRyIGZyb20gMSB0aHJvdWdoICR3IHtcblx0XHRcdEBmb3IgJGMgZnJvbSAxIHRocm91Z2ggJHcge1xuXHRcdFx0XHQkeDogJGMgLSBjZWlsKCR3IC8gMik7XG5cdFx0XHRcdCR5OiAkciAtIGNlaWwoJHcgLyAyKTtcblx0XHRcdFx0JHNoYWRvdzogI3skc2hhZG93fSwgI3skeH1weCAjeyR5fXB4IDAgJGNvbG9yOyB9IH0gfVxuXHR0ZXh0LXNoYWRvdzogJHNoYWRvdzsgfVxuXG4vL2Nhc2UgbWl4aW5cbi8vK2lubmVyKDE5MjAsMzApXG4vLyRpbnItdyDlr6zluqZcbi8vUldEICRpbnItZ2FwIOW3puWPs3BhZGRpbmfplpPot53nuL3lkoxcbkBtaXhpbiBpbm5lcigkaW5yLXcsJGluci1nYXA6IDApIHtcblx0bWF4LXdpZHRoOiAkaW5yLXcgKiAxcHg7XG5cdEBpZiAkaW5yLWdhcCAhPSAwIHtcblx0XHRAaW5jbHVkZSByd2QoJGluci13ICsgJGluci1nYXApIHtcblx0XHRcdHBhZGRpbmc6IDAgKCRpbnItZ2FwIC8gMiAqIDFweCk7IH0gfSB9XG5cbi8v5paH5a2X6Zqx6JePIGVsbGlwc2lzKOihjOmrmClcbkBtaXhpbiBlbGxpcHNpcygkZWxzX2hlaWdodDogMSkge1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRAaWYoJGVsc19oZWlnaHQgPD0gMSkge1xuXHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdFx0QGNvbnRlbnQ7IH1cblx0QGVsc2UgaWYoJGVsc19oZWlnaHQgPiAxKSB7XG5cdFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XG5cdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdFx0LXdlYmtpdC1saW5lLWNsYW1wOiAkZWxzX2hlaWdodDtcblx0XHQtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuXHRcdEBjb250ZW50OyB9IH1cblxuXG4vL+aWh+Wtl+i9ieaPmyByZW1cbkBtaXhpbiBmb250LXNpemUoJGluU2l6ZSwkaW5MaW5lSGVpZ2h0OiAxcHgpIHtcblx0Zm9udC1zaXplOiAkaW5TaXplO1xuXHQkbmV3TGluZUhlaWdodDogY2VpbCgkaW5TaXplICogJGxpbmVIZWlnaHRMZXZlbCk7XG5cdGZvbnQtc2l6ZTogdG9SZW0oJGluU2l6ZSk7XG5cdEBpZigkbmV3TGluZUhlaWdodCA9PSAxcHggb3IgJGluTGluZUhlaWdodCA8ICRpblNpemUpIHtcblx0XHRsaW5lLWhlaWdodDogdG9SZW0oJG5ld0xpbmVIZWlnaHQpOyB9XG5cdEBlbHNlIHtcblx0XHRsaW5lLWhlaWdodDogdG9SZW0oJGluTGluZUhlaWdodCk7IH0gfVxuXG4vL+aWh+Wtl+WAjeeOh1xuQG1peGluIGZvbnQtbGV2ZWwoJGZMZXZlbCkge1xuXHRAaWYoJGZMZXZlbCA8IDApIHtcblx0XHQkZkxldmVsOiAwOyB9XG5cdCRuZXdmb250OiAkZm9udFNpemUgKiAoMSArICRmTGV2ZWwgKiAkZm9udFNpemVMZXZlbCk7XG5cdCRmTGV2ZWxMaW5lSGVpZ2h0OiBjZWlsKCRuZXdmb250ICogJGxpbmVIZWlnaHRMZXZlbCk7XG5cdGZvbnQtc2l6ZTogJG5ld2ZvbnQ7XG5cdGZvbnQtc2l6ZTogdG9SZW0oJG5ld2ZvbnQpO1xuXHRsaW5lLWhlaWdodDogdG9SZW0oJGZMZXZlbExpbmVIZWlnaHQpOyB9XG5cblxuLy8gdHJpYW5nbGUg5LiJ6KeS5b2iIG1peGluXG4vLyt0cmlhbmdsZSgxMHB4IDEycHgsICNhZTAwMDAsdXApXG5AbWl4aW4gdHJpYW5nbGUgKCRzaXplLCAkY29sb3IsICRkaXJlY3Rpb24pIHtcblx0aGVpZ2h0OiAwO1xuXHR3aWR0aDogMDtcblx0JHdpZHRoOiBudGgoJHNpemUsIDEpO1xuXHQkaGVpZ2h0OiBudGgoJHNpemUsIGxlbmd0aCgkc2l6ZSkpO1xuXHQkZm9yZWdyb3VuZC1jb2xvcjogbnRoKCRjb2xvciwgMSk7XG5cdCRiYWNrZ3JvdW5kLWNvbG9yOiBpZihsZW5ndGgoJGNvbG9yKSA9PSAyLCBudGgoJGNvbG9yLCAyKSwgdHJhbnNwYXJlbnQpO1xuXHRAaWYgKCRkaXJlY3Rpb24gPT0gdXApIG9yICgkZGlyZWN0aW9uID09IGRvd24pIG9yICgkZGlyZWN0aW9uID09IHJpZ2h0KSBvciAoJGRpcmVjdGlvbiA9PSBsZWZ0KSB7XG5cdFx0JHdpZHRoOiAkd2lkdGggLyAyO1xuXHRcdCRoZWlnaHQ6IGlmKGxlbmd0aCgkc2l6ZSkgPiAxLCAkaGVpZ2h0LCAkaGVpZ2h0LzIpO1xuXHRcdEBpZiAkZGlyZWN0aW9uID09IHVwIHtcblx0XHRcdGJvcmRlci1ib3R0b206ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItbGVmdDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH1cblxuXHRcdEBlbHNlIGlmICRkaXJlY3Rpb24gPT0gcmlnaHQge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLWxlZnQ6ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItdG9wOiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH1cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IGRvd24ge1xuXHRcdFx0Ym9yZGVyLWxlZnQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXRvcDogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjsgfVxuXHRcdEBlbHNlIGlmICRkaXJlY3Rpb24gPT0gbGVmdCB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItcmlnaHQ6ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItdG9wOiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH0gfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSB1cC1yaWdodCkgb3IgKCRkaXJlY3Rpb24gPT0gdXAtbGVmdCkge1xuXHRcdGJvcmRlci10b3A6ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0QGlmICRkaXJlY3Rpb24gPT0gdXAtcmlnaHQge1xuXHRcdFx0Ym9yZGVyLWxlZnQ6ICAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH1cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IHVwLWxlZnQge1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH0gfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBkb3duLXJpZ2h0KSBvciAoJGRpcmVjdGlvbiA9PSBkb3duLWxlZnQpIHtcblx0XHRib3JkZXItYm90dG9tOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdEBpZiAkZGlyZWN0aW9uID09IGRvd24tcmlnaHQge1xuXHRcdFx0Ym9yZGVyLWxlZnQ6ICAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH1cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IGRvd24tbGVmdCB7XG5cdFx0XHRib3JkZXItcmlnaHQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjsgfSB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LXVwKSB7XG5cdFx0Ym9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvciAkYmFja2dyb3VuZC1jb2xvciAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRcdGJvcmRlci13aWR0aDogJGhlaWdodCAkd2lkdGg7IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gaW5zZXQtZG93bikge1xuXHRcdGJvcmRlci1jb2xvcjogJGZvcmVncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICRoZWlnaHQgJHdpZHRoOyB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LXJpZ2h0KSB7XG5cdFx0Ym9yZGVyLWNvbG9yOiAkYmFja2dyb3VuZC1jb2xvciAkYmFja2dyb3VuZC1jb2xvciAkYmFja2dyb3VuZC1jb2xvciAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRcdGJvcmRlci13aWR0aDogJHdpZHRoICRoZWlnaHQ7IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gaW5zZXQtbGVmdCkge1xuXHRcdGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQtY29sb3IgJGZvcmVncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICR3aWR0aCAkaGVpZ2h0OyB9IH1cblxuLy/nva7kuK0gJ3YnIOWeguebtOe9ruS4rSAnaCcg5rC05bmz572u5LitICdiJyDlnoLnm7TmsLTlubPnva7kuK1cbkBtaXhpbiBjZW50ZXIoJHBvc2l0aW9uKSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0QGlmICRwb3NpdGlvbiA9PSAndicge1xuXHRcdHRvcDogNTAlO1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgfVxuXHRAZWxzZSBpZiAkcG9zaXRpb24gPT0gJ2gnIHtcblx0XHRsZWZ0OiA1MCU7XG5cdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSk7IH1cblx0QGVsc2UgaWYgJHBvc2l0aW9uID09ICdiJyB7XG5cdFx0dG9wOiA1MCU7XG5cdFx0bGVmdDogNTAlO1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOyB9IH1cblxuLy9SV0Qg57ay5qC86K6K5o+bXG4vLyRjb29Db2wg57ay5qC85pW4XG4vLyRjb29Db2xzIOe2suagvOS9lOagvOaVuFxuLy8kY29vR3V0dGVyIOmWk+i3nSBweCBlbSAlXG4vL+S9v+eUqOaWueW8jyArY29vKDYsMiwxMHB4KVxuQG1peGluIGNvbygkY29vQ29sLCRjb29Db2xzOiAxLCRjb29HdXR0ZXI6IDApIHtcblx0d2lkdGg6IHNwYW4oJGNvb0NvbHMgbmFycm93IG9mICRjb29Db2wgc2V0LWd1dHRlcnMgJGNvb0d1dHRlciB3aWRlKTtcblx0QGlmICRjb29HdXR0ZXIgIT0gMCB7XG5cdFx0bWFyZ2luLWxlZnQ6IGd1dHRlcihvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSkgLyAyO1xuXHRcdG1hcmdpbi1yaWdodDogZ3V0dGVyKG9mICRjb29Db2wgc2V0LWd1dHRlcnMgJGNvb0d1dHRlciB3aWRlKSAvIDI7XG5cdFx0bWFyZ2luLWJvdHRvbTogZ3V0dGVyKG9mICRjb29Db2wgc2V0LWd1dHRlcnMgJGNvb0d1dHRlciB3aWRlKTsgfSB9XG4iLCIvLz09PT09PT09PT09PT09PT09PT09PT1cbi8v5oyJ6YiVIEJ1dHRvblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4lQnRuIHtcblx0d2lkdGg6ICRidG5XaWR0aDtcblx0aGVpZ2h0OiAkYnRuSGVpZ2h0O1xuXHRtYXJnaW46IDVweDtcblx0cGFkZGluZzogMCBnYXAoMik7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRmb250LXdlaWdodDogbm9ybWFsO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdC1tcy10b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcblx0dG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dXNlci1zZWxlY3Q6IG5vbmU7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJvcmRlci13aWR0aDogJGJ0bkxpbmVXaWR0aDtcblx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRhcHBlYXJhbmNlOiBub25lO1xuXHR0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2Utb3V0O1xuXHQmOmZvY3VzLFxuXHQmOmFjdGl2ZTpmb2N1cyB7XG5cdFx0b3V0bGluZS1vZmZzZXQ6IC0ycHg7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG5cdCY6YWN0aXZlIHtcblx0XHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuXHRcdG91dGxpbmU6IDA7IH0gfVxuLy/muIXpmaRcbiVjbGVhciB7XG5cdCY6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdFx0Y2xlYXI6IGJvdGg7IH0gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGdEQUFnRDtBQUNoRCxBQUFBLENBQUMsQ0FBQztDQUNELFVBQVUsRUFBRSxVQUFVO0NBQUc7O0FBQzFCLEFBQUEsSUFBSSxDQUFDO0NBQ0osU0FBUyxFY1FDLElBQUk7Q2RQZCxLQUFLLEVjWU0sT0FBTztDZFhsQixXQUFXLEVjS0wsTUFBTSxFQUFDLGNBQWMsRUFBQyxVQUFVO0NkSnRDLFdBQVcsRWNTSCxJQUFrQztDZFIxQyxjQUFjLEVjWUMsR0FBRztDZFplOztBQUNsQyxBQUFBLElBQUksQ0FBQztDQUNKLFdBQVcsRWVKQSxJQUFzQjtDZktqQyxRQUFRLEVBQUUsUUFBUTtDQUNsQixnQkFBZ0IsRWNVTixJQUFJO0NkVGQsVUFBVSxFQUFFLFVBQVU7Q0FDdEIsd0JBQXdCLEVBQUUsSUFBSTtDQUVMOztBZ0JSekIsTUFBTSxNQUFNLE1BQU0sTUFBTSxTQUFTLEVBQUUsTUFBTTtDaEJDMUMsQUFBQSxJQUFJLENBQUM7RUFPSCxXQUFXLEVlVkQsSUFBc0I7RWZVUjs7O0FBQzFCLEFBQUEsWUFBWSxDQUFDO0NBQ1osTUFBTSxFQUFFLElBQUk7Q0FDWixRQUFRLEVBQUUsTUFBTTtDQUFHOztBQUdwQixBQUFBLENBQUMsQ0FBQztDQUNELEtBQUssRWNOTSxPQUFPO0NkT2xCLGVBQWUsRUFBRSxJQUFJO0NBQ3JCLFVBQVUsRUFBRSxnQkFBZ0I7Q0FJTTs7QUFQbkMsQUFJQyxDQUpBLEFBSUMsTUFBTSxDQUFDO0NBQ1AsS0FBSyxFY1JNLE9BQU87Q2RTbEIsZUFBZSxFQUFFLElBQUk7Q0FDckIsVUFBVSxFQUFFLGdCQUFnQjtDQUFHOztBQUkvQixBQUFBLEdBQUcsQ0FBSztDZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0NBR3BELFNBQVMsRURwRkQsTUFBZTtDQ3FGdkIsV0FBVyxFRHJGSCxPQUFlO0NmcUNjOztBQUxwQyxBQUFBLEdBQUcsQ0FBSztDZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0NBR3BELFNBQVMsRURwRkQsSUFBZTtDQ3FGdkIsV0FBVyxFRHJGSCxJQUFlO0NmcUNjOztBQUxwQyxBQUFBLEdBQUcsQ0FBSztDZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0NBR3BELFNBQVMsRURwRkQsTUFBZTtDQ3FGdkIsV0FBVyxFRHJGSCxPQUFlO0NmcUNjOztBQUxwQyxBQUFBLEdBQUcsQ0FBSztDZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0NBR3BELFNBQVMsRURwRkQsSUFBZTtDQ3FGdkIsV0FBVyxFRHJGSCxNQUFlO0NmcUNjOztBQUxwQyxBQUFBLEdBQUcsQ0FBSztDZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0NBR3BELFNBQVMsRURwRkQsTUFBZTtDQ3FGdkIsV0FBVyxFRHJGSCxPQUFlO0NmcUNjOztBZ0I5QnJDLE1BQU0sTUFBTSxNQUFNLE1BQU0sU0FBUyxFQUFFLE1BQU07Q2hCeUJ4QyxBQUFBLEdBQUcsQ0FBSztFZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0VBR3BELFNBQVMsRURwRkQsT0FBZTtFQ3FGdkIsV0FBVyxFRHJGSCxRQUFlO0VmcUNjO0NBTHBDLEFBQUEsR0FBRyxDQUFLO0VnQm1EVCxTQUFTLEVBRkMsSUFBMEM7RUFHcEQsU0FBUyxFRHBGRCxNQUFlO0VDcUZ2QixXQUFXLEVEckZILE9BQWU7RWZxQ2M7Q0FMcEMsQUFBQSxHQUFHLENBQUs7RWdCbURULFNBQVMsRUFGQyxJQUEwQztFQUdwRCxTQUFTLEVEcEZELE9BQWU7RUNxRnZCLFdBQVcsRURyRkgsUUFBZTtFZnFDYztDQUxwQyxBQUFBLEdBQUcsQ0FBSztFZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0VBR3BELFNBQVMsRURwRkQsSUFBZTtFQ3FGdkIsV0FBVyxFRHJGSCxJQUFlO0VmcUNjO0NBTHBDLEFBQUEsR0FBRyxDQUFLO0VnQm1EVCxTQUFTLEVBRkMsSUFBMEM7RUFHcEQsU0FBUyxFRHBGRCxPQUFlO0VDcUZ2QixXQUFXLEVEckZILFFBQWU7RWZxQ2M7OztBZ0I5QnJDLE1BQU0sTUFBTSxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7Q2hCeUJ2QyxBQUFBLEdBQUcsQ0FBSztFZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0VBR3BELFNBQVMsRURwRkQsUUFBZTtFQ3FGdkIsV0FBVyxFRHJGSCxRQUFlO0VmcUNjO0NBTHBDLEFBQUEsR0FBRyxDQUFLO0VnQm1EVCxTQUFTLEVBRkMsSUFBMEM7RUFHcEQsU0FBUyxFRHBGRCxRQUFlO0VDcUZ2QixXQUFXLEVEckZILFFBQWU7RWZxQ2M7Q0FMcEMsQUFBQSxHQUFHLENBQUs7RWdCbURULFNBQVMsRUFGQyxJQUEwQztFQUdwRCxTQUFTLEVEcEZELFFBQWU7RUNxRnZCLFdBQVcsRURyRkgsUUFBZTtFZnFDYztDQUxwQyxBQUFBLEdBQUcsQ0FBSztFZ0JtRFQsU0FBUyxFQUZDLElBQTBDO0VBR3BELFNBQVMsRURwRkQsT0FBZTtFQ3FGdkIsV0FBVyxFRHJGSCxRQUFlO0VmcUNjO0NBTHBDLEFBQUEsR0FBRyxDQUFLO0VnQm1EVCxTQUFTLEVBRkMsSUFBMEM7RUFHcEQsU0FBUyxFRHBGRCxRQUFlO0VDcUZ2QixXQUFXLEVEckZILFFBQWU7RWZxQ2M7OztBZ0I5QnJDLE1BQU0sTUFBTSxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7Q2hCeUJ2QyxBQUFBLEdBQUcsQ0FBSztFZ0JtRFQsU0FBUyxFQUZDLE1BQTBDO0VBR3BELFNBQVMsRURwRkQsT0FBZTtFQ3FGdkIsV0FBVyxFRHJGSCxPQUFlO0VmcUNjO0NBTHBDLEFBQUEsR0FBRyxDQUFLO0VnQm1EVCxTQUFTLEVBRkMsTUFBMEM7RUFHcEQsU0FBUyxFRHBGRCxNQUFlO0VDcUZ2QixXQUFXLEVEckZILElBQWU7RWZxQ2M7Q0FMcEMsQUFBQSxHQUFHLENBQUs7RWdCbURULFNBQVMsRUFGQyxNQUEwQztFQUdwRCxTQUFTLEVEcEZELE9BQWU7RUNxRnZCLFdBQVcsRURyRkgsUUFBZTtFZnFDYztDQUxwQyxBQUFBLEdBQUcsQ0FBSztFZ0JtRFQsU0FBUyxFQUZDLE1BQTBDO0VBR3BELFNBQVMsRURwRkQsTUFBZTtFQ3FGdkIsV0FBVyxFRHJGSCxRQUFlO0VmcUNjO0NBTHBDLEFBQUEsR0FBRyxDQUFLO0VnQm1EVCxTQUFTLEVBRkMsSUFBMEM7RUFHcEQsU0FBUyxFRHBGRCxPQUFlO0VDcUZ2QixXQUFXLEVEckZILFFBQWU7RWZxQ2M7OztBQU90QyxBQUFBLEtBQUssQ0FBQztDQUNMLFdBQVcsRWM5QkgsSUFBa0M7Q2QrQjFDLFVBQVUsRUFBRSxJQUFJO0NBRWhCLGFBQWEsRUFBRSxDQUFDO0NBTzBCOztBQVgzQyxBQUtDLEtBTEksQ0FLSCxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsR0FMSCxLQUFLLENBS1ksQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLEdBTGxCLEtBQUssQ0FLNkIsQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLEdBTG5DLEtBQUssQ0FLOEMsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLEdBTHBELEtBQUssQ0FLOEQsQUFBQSxJQUFDLENBQUssTUFBTSxBQUFYLEdBTHBFLEtBQUssQ0FLNkUsQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLEdBTG5GLEtBQUssQ0FLOEYsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLEdBTHBHLEtBQUssQ0FLOEcsQUFBQSxJQUFDLENBQUssS0FBSyxBQUFWLEVBQVk7Q0FDOUgsVUFBVSxFQUFFLElBQUk7Q0FBRzs7QUFOckIsQUFPQyxLQVBJLEFBT0gsYUFBYSxDQUFDO0NBQ2QsS0FBSyxFY2tDWSxJQUFJO0NkbENNOztBQVI3QixBQVVFLEtBVkcsQUFTSCxNQUFNLEFBQ0wsYUFBYSxDQUFDO0NBQ2QsS0FBSyxFYytCVyx3QkFBSTtDZC9CZ0I7O0FBR3ZDLEFBQUEsS0FBSyxBQUFBLDJCQUEyQjtBQUNoQyxLQUFLLEFBQUEsMkJBQTJCLENBQUM7Q0FDaEMsVUFBVSxFQUFFLGVBQWU7Q0FBRzs7QUFFL0IsQUFBQSxNQUFNLEVBQUUsUUFBUSxDQUFDO0NBRWhCLGFBQWEsRUFBRSxDQUFDO0NBQ2hCLFVBQVUsRUFBRSxJQUFJO0NBQ2hCLFdBQVcsRWNuREgsSUFBa0M7Q2RtRG5COztBQUV4QixBQUFBLFFBQVEsQ0FBQztDQUNSLEtBQUssRUFBRSxJQUFJO0NBQ1gsU0FBUyxFQUFFLElBQUk7Q0FDZixPQUFPLEVBQUUsR0FBRztDQUNaLFVBQVUsRUFBRSxVQUFVO0NBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDY1NGLE9BQU87Q2RUYTs7QUFFcEMsQUFBQSxNQUFNLEFBQUEsWUFBWSxDQUFDO0NBQ2xCLE9BQU8sRUFBRSxJQUFJO0NBQUcifQ== */
