@ditojs/admin 1.20.0 → 1.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dito-admin.es.js +3 -15
- package/dist/dito-admin.umd.js +4 -4
- package/package.json +2 -2
- package/src/DitoAdmin.js +5 -3
package/dist/dito-admin.es.js
CHANGED
|
@@ -10443,8 +10443,7 @@ I.config.productionTip = !1;
|
|
|
10443
10443
|
I.use(fs);
|
|
10444
10444
|
I.use(ln, { dynamic: !0 });
|
|
10445
10445
|
I.use(un);
|
|
10446
|
-
|
|
10447
|
-
class Eh {
|
|
10446
|
+
class Fh {
|
|
10448
10447
|
constructor(e, {
|
|
10449
10448
|
dito: s = {},
|
|
10450
10449
|
api: n,
|
|
@@ -10582,18 +10581,7 @@ function hh(t) {
|
|
|
10582
10581
|
)
|
|
10583
10582
|
).toString();
|
|
10584
10583
|
}
|
|
10585
|
-
function ph(t) {
|
|
10586
|
-
if (t.type === "update") {
|
|
10587
|
-
const e = [];
|
|
10588
|
-
for (const s of t.updates)
|
|
10589
|
-
e.push(s, {
|
|
10590
|
-
...s,
|
|
10591
|
-
acceptedPath: s.acceptedPath.replace(/\?v=[0-9a-f]+&/, "?")
|
|
10592
|
-
});
|
|
10593
|
-
t.updates = e;
|
|
10594
|
-
}
|
|
10595
|
-
}
|
|
10596
10584
|
export {
|
|
10597
|
-
|
|
10585
|
+
Fh as default
|
|
10598
10586
|
};
|
|
10599
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uXG4gICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hLmNvbXBvbmVudCwgc2NoZW1hLm5hbWUpXG4gICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gY29tcG9uZW50IDogdW5kZWZpbmVkXG4gICkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICApID09PSB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAhY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGZhbHNlIDogdW5kZWZpbmVkXG4gICkgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5uYW1lIHx8IHNjaGVtYS5sYWJlbCB8fCBzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMocGFuZWxzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEuY29tcG9uZW50LCBuYW1lLCBjaGlsZHJlbiwgMClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuLCAxKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShmb3JtKSB7XG4gIGZvcm0gPSBhd2FpdCByZXNvbHZlU2NoZW1hKGZvcm0sIHRydWUpXG4gIGlmICghaXNGb3JtKGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKGZvcm0pfSdgKVxuICB9XG4gIGlmIChmb3JtKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhmb3JtKVxuICB9XG4gIHJldHVybiBmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsXG4gIHtcbiAgICB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICAgIG1vbnRoID0gZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheSA9IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXIgPSBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gICAgbWludXRlID0gZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kID0gZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQgPSBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG4gIH0gPSB7fVxuKSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYXJndW1lbnRzWzBdLCAxMClcbiAgfVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCJcbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jYWxlbmRhclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG5cbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgei1pbmRleDogMTAwMFxuXG4gIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNylcbiAgICAgIGhlaWdodDogJGlucHV0LWhlaWdodFxuICAgICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweClcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnRcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXlcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlXG4gICAgICAmLFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGNvbG9yOiB3aGl0ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheVxuICAgICAgY29sb3I6ICM5OTlcblxuICAuZGl0by1jYWxlbmRhci1tb250aHMsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgc3BhblxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpXG4gICAgICBtYXJnaW46IDAuNWVtIDBcblxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpXG5cbiAgLmRpdG8tY2FsZW5kYXIgYSxcbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW5cbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBhXG4gICAgICBwYWRkaW5nOiAwIDAuMmVtXG5cbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudFxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcblxuICAuZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIsXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIEBleHRlbmQgJWlucHV0LWhlaWdodFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHRleHQtYWxpZ246IGNlbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGVcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgPiBzcGFuXG4gICAgICBtYXJnaW46IGF1dG9cbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBhXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgJjpob3ZlclxuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgd2lkdGg6IDUlXG4gICAgbWluLXdpZHRoOiAyZW1cbiAgICBtYXgtd2lkdGg6IDNlbVxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBmb250LXNpemU6IDEuMjVlbVxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXZcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuSdcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8KrJ1xuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuidcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8K7J1xuXG4gIC5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheVxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAnTm93J1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50VmFsdWU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWwgfHwgbmV3IERhdGUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiBtb250aCA9PT0gdGhpcy52YWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiB5ZWFyID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUsIHN0YXRlLCBjb3B5ID0gZmFsc2UpIHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gJ2Rpc2FibGVkJykge1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0pXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKGRhdGUsIHsgeWVhciwgbW9udGgsIGRheSB9KSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBob3IsIHZlciwgZW50ZXIgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50TW9kZSwgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoaG9yIHx8IHZlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIGhvciArIHZlciAqIDdcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgaG9yICsgdmVyICogNlxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgaG9yICsgdmVyICogNVxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLnZhbHVlKSA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSkgPyAndG9kYXknXG4gICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCdcbiAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSkgPyAnY3VycmVudCdcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2FzcydcblxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gIC5kaXRvLXRyaWdnZXItZGlzYWJsZWRcbiAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgKlxuICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnRcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjpmb2N1c1xuICAgICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgLmRpdG8tcG9wdXBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB0b3A6IDBcbiAgICBsZWZ0OiAwXG4gICAgei1pbmRleDogMTAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0Q2hpbGRcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuXG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGUtcG9zaXRpb24nLCB7XG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHBvcHVwLFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucG9wdXBQbGFjZW1lbnRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWlucHV0XG4gIGlucHV0KFxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taW5wdXRcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGlucHV0XG4gICAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICAgIGFsbDogaW5oZXJpdFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgYm9yZGVyOiAwXG4gICAgICBtYXJnaW46IDBcbiAgICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgJGF0dHJzXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgIC4uLiRhdHRyc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBSZW1vdmUgJ2lucHV0JyBsaXN0ZW5lciBiZWNhdXNlIHdlJ3JlIGhhbmRsaW5nIGl0IHNlcGFyYXRlbHkgYmVsb3csXG4gICAgICAvLyBidXQgcGFzcyBvbiBhbGwgb3RoZXJzIHRvIHRoZSB3cmFwcGVkIG5hdGl2ZSBlbGVtZW50OlxuICAgICAgY29uc3QgeyBpbnB1dCwgLi4ubGlzdGVuZXJzIH0gPSB0aGlzLiRsaXN0ZW5lcnNcbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICAgIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgbWluLXdpZHRoOiAxMGVtXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgLmRpdG8tZGF0ZS1waWNrZXItcG9wdXBcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIGRhdGU6IHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pIHx8ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gIC8vIClcbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gICAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8gKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICApXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgd2lkdGg6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIG1heC13aWR0aDogMTYwcHhcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cblxuICAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHhcbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLmRpdG8taWNvbi10aW1lXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDdweFxuICAgICAgICBoZWlnaHQ6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgZmxvYXQ6IGxlZnRcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItd2lkdGg6IDAgMXB4IDBcbiAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweClcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgJjpsYXN0LWNoaWxkXG4gICAgICBib3JkZXItcmlnaHQ6IDBcbiAgICB1bFxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuXG4gICAgICBvdmVyZmxvdy15OiBhdXRvXG4gICAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWFyZ2luOiAwXG4gICAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICBwYWRkaW5nOiAwIDE3cHggMCAwXG4gICAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICYgPiBsaVxuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAgICYuc2VsZWN0ZWQ6aG92ZXJcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICYuZGlzYWJsZWRcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgICAgICYuZGlzYWJsZWQ6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHtcbiAgY29weURhdGUsIHNjcm9sbFRvLCBzZXRTZWxlY3Rpb24sIGdldEtleU5hdmlnYXRpb25cbn0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiAwLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuaG91cil9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5zZWNvbmQpfWBcbiAgICAgICAgOiAnJ1xuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgwKVxuICAgICAgfVxuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCB8fCBmb3JjZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IDMgKiB0aGlzLnNlbGVjdGlvblxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy4kcmVmcy5pbnB1dCwgc3RhcnQsIHN0YXJ0ICsgMikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChkdXJhdGlvbiA9IDEwMCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBGaXJzdCBhbmQgYWxzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpblxuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC8gKHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyA2KVxuICAgICAgICAgIHNjcm9sbFRvKHRhcmdldCwgTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpLCBkdXJhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXVt0aGlzLnNlbGVjdGlvbl1cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCB7IGhvciwgdmVyLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgICAgaWYgKGhvcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb24gKyBob3JcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyAyXG4gICAgICAgICAgICA6IHZhbHVlID4gMiA/IDBcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbc2VsZWN0ZWRdICsgdmVyXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRoaXMuJHJlZnNbc2VsZWN0ZWRdLmNoaWxkcmVuXG4gICAgICAgICAgdGhpc1tzZWxlY3RlZF0gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gdmFsdWUgKyBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWUgPj0gbGVuZ3RoID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvciB8fCB2ZXIgfHwgZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0cnVlKVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICByZWY9XCJwaWNrZXJcIlxuKVxuICAuZGl0by1waWNrZXJzKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICApXG4gICAgZGF0ZS1waWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICB0aW1lLXBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd1RpbWVcIlxuICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gICAgcmVmPVwicGlja2VyXCJcbiAgKVxuICAgIC5kaXRvLXBpY2tlcnMoXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICApXG4gICAgICBkYXRlLXBpY2tlcihcbiAgICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgICBAZm9jdXM9XCJkYXRlRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgKVxuICAgICAgdGltZS1waWNrZXIoXG4gICAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlclxuICAgIC5kaXRvLXBpY2tlcnNcbiAgICAgIEBleHRlbmQgJWlucHV0XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgICB3aWR0aDogNjAlXG4gICAgICBtaW4td2lkdGg6IDYuOWVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwXG4gICAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAgIHdpZHRoOiA0MCVcbiAgICAgIG1pbi13aWR0aDogNS40ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctbGVmdDogMFxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuICAvLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNhc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3NcbiAgLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4gIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbiAgQGVhY2ggJG5hbWUgaW4gJGljb25zXG4gICAgLmRpdG8taWNvbi0jeyRuYW1lfVxuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKHYtaWY9XCJ0b3RhbCA+IDBcIikge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICB8ICAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICAgIClcbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsXG4gICAgICArZWxsaXBzaXNcbiAgICAgIG1hcmdpbjogMCAwLjVlbVxuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHRcbiAgICAuZGl0by1idXR0b25cbiAgICAgIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwc1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgICAgJi1wcmV2LFxuICAgICAgJi1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tYXJyb3dcbiAgICAgICYtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuICAgICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICAgJi1lbGxpcHNpcy1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXNcbiAgICAgICAgJjpob3Zlcjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9uc1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgICAgJjpmb2N1c1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICY6YWN0aXZlXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuICAgICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmVcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgIHRoaXMuJGVtaXQoJ3NpemUtY2hhbmdlJywgdGhpcy5wYWdlLCBjdXJyZW50UGFnZVNpemUpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2tQYWdlKHBhZ2UpIHtcbiAgICAgIGlmIChwYWdlLmluZGV4ICYmICFwYWdlLmRpc2FibGVkICYmIHBhZ2UuaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UuaW5kZXhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGFnZUNsYXNzKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogcGFnZS5hY3RpdmVcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtwYWdlLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICB1cGRhdGVQYWdlUmFuZ2UoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgdG90YWwsIGN1cnJlbnRQYWdlU2l6ZSwgY3VycmVudFBhZ2UgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuICAgICAgY29uc3QgbnVtUGFnZXMgPSB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXN3aXRjaChcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIGlucHV0KFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9XCJpbnB1dFwiXG4gICAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXN3aXRjaFxuICAgIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAgIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy4gYHJlbWAgaXMgbmVlZGVkIGJlY2F1c2Ugd2VcbiAgICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAgIC0tc3dpdGNoLXdpZHRoOiA0cmVtXG4gICAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtXG4gICAgLS1zd2l0Y2gtbWFyZ2luOiAycHhcbiAgICAtLXN3aXRjaC1wYWRkaW5nOiAzcHhcbiAgICAtLXN3aXRjaC1zcGVlZDogMzAwbXNcbiAgICAtLWxhYmVsLW1hcmdpbjogMC41ZW1cblxuICAgIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKVxuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KVxuICAgIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JVxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIHdpZHRoOiB2YXIoLS13aWR0aClcbiAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgdG9wOiA1MCVcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKVxuICAgIGlucHV0XG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIC4zc1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgICBmb250LXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpXG4gICAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuICAgICAgYm9yZGVyLXJhZGl1czogMC41ZW1cbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZClcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24sXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICByaWdodDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZVxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICYuZGl0by1jaGVja2VkXG4gICAgICBpbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1vZmZzZXQpKVxuICAgICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgICAgcmlnaHQ6IHVuc2V0XG4gICAgJi5kaXRvLWRpc2FibGVkXG4gICAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWRcbiAgICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMudmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIGRpc2FibGVkLCAkYXR0cnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICRkdXJhdGlvbjogMC4xNXNcbiAgLmhlaWdodC1lbnRlci1hY3RpdmUsXG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAuaGVpZ2h0LWVudGVyLWFjdGl2ZVxuICAgIGFuaW1hdGlvbjogc2xpZGUtZW50ZXIgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgLmhlaWdodC1sZWF2ZS1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtZW50ZXIsXG4gIC5oZWlnaHQtbGVhdmUtdG9cbiAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIHJlbmRlcjogKGNyZWF0ZUVsZW1lbnQsIGNvbnRleHQpID0+IGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3RyYW5zaXRpb24nLFxuICAgIGNvbnRleHQucHJvcHMuZW5hYmxlZFxuICAgICAgPyB7XG4gICAgICAgIHByb3BzOiB7IG5hbWU6ICdoZWlnaHQnIH0sXG4gICAgICAgIG9uOiBldmVudHNcbiAgICAgIH1cbiAgICAgIDoge30sXG4gICAgY29udGV4dC5jaGlsZHJlblxuICApXG59XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG4vLyBGb3JjZSByZXBhaW50IHRvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHRyaWdnZXJlZCBjb3JyZWN0bHkuXG5jb25zdCBmb3JjZVJlcGFpbnQgPSBlbGVtZW50ID0+IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0XG5cbmNvbnN0IGV2ZW50cyA9IHtcbiAgYWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lcG91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogJ2F1dG8nIH0pKVxuICB9LFxuXG4gIGVudGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGg6IG51bGwsXG4gICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHk6IG51bGwsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSkpXG4gIH0sXG5cbiAgbGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tcm9vdFxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgIClcbiAgICBkaXRvLW1lbnVcbiAgICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICAgIGRpdG8taGVhZGVyKFxuICAgICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuICAgICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgICApXG4gICAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgICApXG4gICAgICAgICAgc3BhbiBMb2dpblxuICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taGVhZGVyXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGhlaWdodDogM2VtXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmdcbiAgICAgIHVsXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtXG4gICAgICAgICRhbmdsZTogMzNkZWdcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGNvbG9yOiAjOTk5XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICAgIHdpZHRoOiAxcHhcbiAgICAgICAgICBoZWlnaHQ6IDEuMmVtXG4gICAgICAgICAgcmlnaHQ6IC0xcHhcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya1xuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICB0b3A6IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3BcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBib3R0b206IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tXG4gICAgLmRpdG8tc3Bpbm5lclxuICAgICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXJcbiAgICAuZGl0by1kaXJ0eVxuICAgICAgJjphZnRlclxuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiA4cHhcbiAgICAgICAgaGVpZ2h0OiA4cHhcbiAgICAgICAgbWFyZ2luOiAycHhcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCVcbiAgICAuZGl0by1hY2NvdW50LFxuICAgIC5kaXRvLWxvZ2luXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogMFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tYWNjb3VudFxuICAgICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsc2VMb2FkZXIgZnJvbSAndnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSdcblxuY29uc3QgU3Bpbm5lciA9IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdzcGlubmVyJywgUHVsc2VMb2FkZXIpXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1oZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IFNwaW5uZXIub3B0aW9uc1xuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gIClcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIGEoXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgIClcbiAgICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDYW5jZWwgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgICA6aXM9XCJ0YWdcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gIClcbiAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgICApXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCB8fD0gJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcywgZ2V0UGFuZWxTY2hlbWFzLCBzZXREZWZhdWx0cywgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hJywge1xuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbWVudUhlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIGNvbnN0IHBhbmVscyA9IGdldFBhbmVsU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgICAgZm9yIChjb25zdCBwYW5lIG9mIHRoaXMucGFuZXMpIHtcbiAgICAgICAgcGFuZWxzLnB1c2goLi4ucGFuZS5wYW5lbFNjaGVtYXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGFuZWxzXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgIGNvbnN0IHRhYiA9IGN1cnJlbnRUYWIgJiYgdGhpcy5zaG91bGRSZW5kZXIodGhpcy50YWJzW2N1cnJlbnRUYWJdKVxuICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhYlxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXModGhpcy50YWJzKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFRhYiB9ID0gdGFiXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYilcbiAgICAgICAgICAgID8gZGVmYXVsdFRhYi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgLi4udGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuXG4gICAgICAvLyBzZXQgYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdHModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIG5hbWUsIGRhdGFbbmFtZV0pXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLiRzZXQocmVnaXN0cnksIHVpZCwgZW50cnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRkZWxldGUocmVnaXN0cnksIHVpZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICAgIDppbmxpbmVkPVwidHJ1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICApXG4gICAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gICAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gICAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IHRoaXMudGFiIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiXG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgZGl0by1sYWJlbChcbiAgICB2LWlmPVwibGFiZWxcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgZGl0by1lcnJvcnMoXG4gICAgOmVycm9ycz1cImVycm9yc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gICAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuICApXG4gICAgZGl0by1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICApXG4gICAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICAgIClcbiAgICBkaXRvLWVycm9ycyhcbiAgICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYW5lbFxuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmdcbiAgICAuZGl0by1wYW5lbC10aXRsZVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAuZGl0by1wYW5lbC1zY2hlbWFcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wOiAwXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgICAuZGl0by1vYmplY3RcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBsYWJlbFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIC5kaXRvLXBhbmVcbiAgICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgICAgLmRpdG8tY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IERpdG9Db21wb25lbnQsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIGRpdG8tcGFuZWwoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmVscyhcbiAgICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGlmIChkYXRhICYmIGlzU3RyaW5nKGRhdGEudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGxhYmVsaXplKGRhdGEudHlwZSksXG4gICAgICAgICAgICAgIHRleHQ6IGRhdGEubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuJHNldChcbiAgICAgICAgICB0aGlzLnNvdXJjZURhdGEsXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXksXG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIClcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnQgPyAnY3JlYXRlJyA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnQgPyAnc3VibWl0JyA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IGAuLi8ke2lkfWAsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1mb3JtLW5lc3RlZFxuICAgICYsXG4gICAgLmRpdG8tc2Nyb2xsXG4gICAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvRm9ybS5jb21wb25lbnQoJ2RpdG8tZm9ybS1uZXN0ZWQnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICB8IHt7IGVycm9yIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1lcnJvcnMoXG4gICAgdi1pZj1cImVycm9yc1wiXG4gIClcbiAgICB1bFxuICAgICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICB2dWUtZHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1pdGVtKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgICB9YFxuICAgIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIClcbiAgICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgICApXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICApXG4gICAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICAgIClcbiAgICAgICAgdGRcbiAgICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIClcbiAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gICAgKVxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNoZWNrYm94XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIG5vcm1hbGl6ZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHxcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYXN5bmNEYXRhRW50cmllcywgbmFtZSwge1xuICAgICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemUsIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+IHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJcbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLWNoZWNrYm94ZXMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcHBlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZXBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAndnVlLWNvbG9yJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgICApXG4gICAgdGFibGUuZGl0by10YWJsZShcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgICB9YFxuICAgIClcbiAgICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgICB0Zm9vdChcbiAgICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgICAgKVxuICAgICAgICB0clxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlICYmIHRoaXMudG90YWwgPiB0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQXJyYXksIGFzQXJyYXksIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG4vLyBXb3JrYXJvdW5kIGZvciBhIHN0cmFuZ2UgVml0ZSBob3QtcmVsb2FkaW5nIGJ1Zywgc2VlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlL2lzc3Vlcy83ODM5I2lzc3VlY29tbWVudC0xMzQwMTA5Njc5XG5pbXBvcnQubWV0YS5ob3Q/Lm9uKCd2aXRlOmJlZm9yZVVwZGF0ZScsIG9uQmVmb3JlVml0ZVVwZGF0ZSlcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IFZ1ZSh7XG4gICAgICBlbCxcbiAgICAgIHJvdXRlcjogbmV3IFZ1ZVJvdXRlcih7XG4gICAgICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICAgICAgYmFzZTogZGl0by5iYXNlLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pLFxuICAgICAgY29tcG9uZW50czogeyBEaXRvUm9vdCB9LFxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcm9vdCBjb250YWluZXIncyBpZCwgYXMgcmVxdWlyZWQgYnkgaG90LXJlbG9hZGluZzpcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogZWwuaWRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAgIC4uLnR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke3Jlc3BvbnNlLnN0YXR1c1RleHR9KWApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6IGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgPyAnaW5jbHVkZSdcbiAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9PyR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKVxuICApLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gb25CZWZvcmVWaXRlVXBkYXRlKGV2ZW50KSB7XG4gIGlmIChldmVudC50eXBlID09PSAndXBkYXRlJykge1xuICAgIC8vIFBhdGNoIGBldmVudC51cGRhdGVzYCB0byByZW1vdmUgdGhlIHZlcnNpb24gcXVlcnkgcGFyYW1ldGVyIGZyb20gcGF0aCxcbiAgICAvLyBzbyB0aGF0IHRoZSB1cGRhdGUgZ2V0cyBwaWNrZWQgdXAuXG4gICAgLy8gV2h5IHRoZSBzdG9yZWQgYGRlcHNgIGFyZSBtaXNzaW5nIHRoaXMgcGFydCBvZiB0aGUgVVJMLCBJIGNhbm5vdCBzYXnigKZcbiAgICBjb25zdCB1cGRhdGVzID0gW11cbiAgICBmb3IgKGNvbnN0IHVwZGF0ZSBvZiBldmVudC51cGRhdGVzKSB7XG4gICAgICB1cGRhdGVzLnB1c2godXBkYXRlLCB7XG4gICAgICAgIC4uLnVwZGF0ZSxcbiAgICAgICAgYWNjZXB0ZWRQYXRoOiB1cGRhdGUuYWNjZXB0ZWRQYXRoLnJlcGxhY2UoL1xcP3Y9WzAtOWEtZl0rJi8sICc/JylcbiAgICAgIH0pXG4gICAgfVxuICAgIGV2ZW50LnVwZGF0ZXMgPSB1cGRhdGVzXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJfYSIsInBhcmVudEl0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwiZXZlbnRzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidG9Cb29sZWFuIiwidG9OdW1iZXIiLCJ0b1N0cmluZyIsInRvRGF0ZSIsInRvQXJyYXkiLCJhc0FycmF5IiwidG9PYmplY3QiLCJ0b1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsInR5cGUiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsImhhc1Jlc291cmNlIiwic2NoZW1hIiwiZ2V0UmVzb3VyY2UiLCJkZWZhdWx0cyIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIkRpdG9NaXhpbiIsInVpZCIsImtleU9yRGF0YVBhdGgiLCJkZWYiLCJjb252ZXJ0ZWQiLCJuYW1lIiwibGFiZWxpemUiLCJidXR0b24iLCJ2ZXJiIiwiZHJhZ2dhYmxlIiwiZmFsbGJhY2siLCJxdWVyeSIsImNvbXBvbmVudHMiLCJidXR0b25zIiwic2V0dGluZ3MiLCJyZWplY3QiLCJEaXRvQ29tcG9uZW50IiwidXJsIiwibWV0aG9kIiwiaW50ZXJuYWwiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsIm1hdGNoIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImdldFN0b3JlQWNjZXNzb3IiLCJ1aWRNYXAiLCJnZXRVaWQiLCJpdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJzdWJHcmFwaCIsInBhcnQiLCJyZWxhdGVkRGF0YVBhdGgiLCJfYiIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50IiwiaXNTaW5nbGVDb21wb25lbnRWaWV3Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsImdldFR5cGVPcHRpb25zIiwicHJvbWlzZXMiLCJwcm9jZXNzRm9ybXMiLCJmb3JtIiwiZm9ybXMiLCJyZXNvbHZlRm9ybSIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld1NjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwidmlld0NvbXBvbmVudCIsImdldFZpZXdFZGl0UGF0aCIsImdldEZvcm1TY2hlbWFzIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaGFzTGFiZWwiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsInNob3VsZE9taXRQYWRkaW5nIiwiZ2V0RGVmYXVsdFZhbHVlIiwiY2xvbmUiLCJpZ25vcmVNaXNzaW5nVmFsdWUiLCJ0eXBlT3B0aW9ucyIsImhhc0xhYmVscyIsImNoZWNrQ29tcG9uZW50cyIsInNldERlZmF1bHRzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJjb21wdXRlVmFsdWUiLCJyb290RGF0YSIsImNvbXB1dGUiLCJWdWUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsInByb2Nlc3MiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJwcm9jZXNzZWRJdGVtIiwidGFiIiwicGFuZWwiLCJnZXRBbGxQYW5lbFNjaGVtYXMiLCJnZXROYW1lZFNjaGVtYXMiLCJkZXNjcmlwdGlvbnMiLCJhcnJheSIsInRvU2NoZW1hIiwiY2FtZWxpemUiLCJnZXRCdXR0b25TY2hlbWFzIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJfYyIsImdldFBhbmVsU2NoZW1hIiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwic2NoZW1hQ29tcG9uZW50IiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwiVHlwZU1peGluIiwicGFyc2UiLCJsYWJlbCIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsImFkZCIsImVsZW1lbnQiLCJtaXhpbnMiLCJjb21wIiwiY3RvciIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJ0byIsImZyb20iLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwicmVuZGVyIiwiX3ZtIiwiX2giLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiaXNMb2FkaW5nIiwiY29weURhdGUiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIl9kIiwibWludXRlIiwiX2UiLCJzZWNvbmQiLCJfZiIsIm1pbGxpc2Vjb25kIiwiX2ciLCJhZGRFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwic2Nyb2xsVG8iLCJkdXJhdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlclRpY2siLCJzZXRTZWxlY3Rpb24iLCJmaWVsZCIsInN0YXJ0IiwiZW5kIiwiJGV2ZW50Iiwid2Vla2RheSIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm5ld1ZhbCIsIm9sZFZhbCIsIm1vZGUiLCJvdmVycmlkZXMiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwic3RhdGUiLCJob3IiLCJ2ZXIiLCJlbnRlciIsImN1cnJlbnRNb2RlIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJ0b2RheSIsImlzRGF5IiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiJCRhIiwiJCRlbCIsIiQkYyIsIiQkdiIsIiQkaSIsInNpemUiLCJ0aXRsZSIsImRpc2FibGVkIiwicmVhZG9ubHkiLCJwbGFjZWhvbGRlciIsImF1dG9jb21wbGV0ZSIsIiRhdHRycyIsImlucHV0IiwiZ2V0TGVuZ3RoIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsImRlZmF1bHRGb3JtYXRzIiwiZm9yY2UiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0Iiwic2VsZWN0ZWQiLCJsZW5ndGgiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInBhZ2UiLCJwYWdlU2l6ZSIsImN1cnJlbnRQYWdlU2l6ZSIsInNob3dQcmV2Iiwic2hvd05leHQiLCJ0b3RhbCIsImN1cnJlbnRQYWdlIiwic2hvd0xlbmd0aCIsIm51bVBhZ2VzIiwicGFnZVJhbmdlIiwiY2hlY2tlZCIsInVuY2hlY2tlZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRTdHlsZSIsInN0eWxlIiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJEb21NaXhpbiIsInJlbW92ZSIsImhhbmRsZXIiLCJlcnIiLCJ0ZXh0IiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJyb3V0ZSIsIlNwaW5uZXIiLCJQdWxzZUxvYWRlciIsImNvbG9yIiwicHJvcHMiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImRpYWxvZ0RhdGEiLCJjb250ZW50IiwiYXNPYmplY3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsIlRyYW5zaXRpb25IZWlnaHQiLCJwYW5lIiwiY3VycmVudFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImRhdGFQYXRoT3JOYW1lIiwiZXhwYW5kIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3JlZiIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsInRhYlNjaGVtYSIsImJ1dHRvblNjaGVtYSIsImJ1dHRvbkRhdGFQYXRoIiwibm9kZSIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiZGVpbmRlbnQiLCIkc2NoZW1hIiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwicmVxdWVzdCIsInNldERhdGEiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwibm90aWZ5U3VjY2VzcyIsIm5vdGlmeUVycm9yIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsIm1lcmdlIiwiZGF0YVBhcnRzIiwicGF0aFBhcnRzIiwicm91dGVQYXJ0cyIsImxhc3REYXRhUGFydCIsImwiLCJkYXRhUGFydCIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJuZXdWYWx1ZSIsIm9sZFZhbHVlIiwicHJlc2VudCIsImNsb3NlRm9ybSIsImdldFZlcmIiLCJidXR0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwic2NvcGUiLCJuYXZpZ2F0ZSIsIlBhZ2luYXRpb24iLCJPcmRlcmVkTWl4aW4iLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIm9mZnNldCIsIlZ1ZURyYWdnYWJsZSIsImNoaWxkcmVuU2NoZW1hIiwiZWRpdFBhdGgiLCJjaGlsZHJlbk9wZW4iLCJudW1DaGlsZHJlbiIsImNyZWF0YWJsZSIsImVkaXRhYmxlIiwiY29sdW1uIiwib3JkZXIiLCJlc2NhcGVIdG1sIiwiaCIsIlR5cGVDb21wb25lbnQiLCJkZWZpbml0aW9uIiwiRGF0YU1peGluIiwicmVzb2x2ZUNvdW50ZXIiLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJvcHRpb24iLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25CbHVyIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImZvY3VzZWQiLCJEYXRlVGltZVBpY2tlciIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJjb2xsYXBzaWJsZSIsImxpc3REYXRhIiwib25Db21wbGV0ZSIsIm9wZW5lZCIsImNhbGxPbkNvbXBsZXRlIiwicm91dGVDb21wb25lbnQiLCJpbmxpbmVkIiwicGFyYW0iLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZUZvcm1hdCIsImdldEZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJwcm94eSIsInBhcnNlRmlsdGVyc0RhdGEiLCJnZXRGaWx0ZXJzQ29tcG9uZW50cyIsImZvcm1hdEZpbHRlcnNEYXRhIiwiY29tcHMiLCJnZXRDb21wb25lbnRzRm9yRmlsdGVyIiwiZmlsdGVyc0RhdGEiLCJnZXRMaXN0Q29tcG9uZW50Iiwib2JqIiwiZmlsdGVyc0RhdGFQYXRoIiwiaWNvbiIsImlzQWN0aXZlIiwib25DbGljayIsIkVkaXRvckNvbnRlbnQiLCJFZGl0b3JNZW51QmFyIiwiSWNvbiIsImNvbW1hbmQiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwiZ2V0VmFsdWUiLCJvblVwZGF0ZSIsImdldEhUTUwiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJhdHRycyIsImRpYWxvZ0NvbXBvbmVudCIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJhZGRCdXR0b24iLCJpZ25vcmVBY3RpdmUiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwidW5kZXJzY29yZSIsImF0dHIiLCJNYXJrIiwidG9nZ2xlTWFyayIsIkxpbmsiLCJkb20iLCJWdWVNdWx0aXNlbGVjdCIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwiJCRzZWxlY3RlZFZhbCIsIm8iLCJ2YWwiLCJvcHQiLCJTd2l0Y2hCdXR0b24iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiZmlsZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiZmlsZXMiLCJ1cGxvYWQiLCJsb2dnZWREZXByZWNhdGlvbnMiLCJkZXByZWNhdGUiLCJWdWVSb3V0ZXIiLCJWdWVNb2RhbCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJvbkJlZm9yZVZpdGVVcGRhdGUiLCJEaXRvQWRtaW4iLCJkaXRvIiwidmlld3MiLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsIkRpdG9Sb290IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImZvcm1hdFF1ZXJ5IiwiYmFzZVVybCIsInJlbGF0aXZlVXJsIiwi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UUFDQSxNQUFBK0UsRUFBQSxZQUFBO0FBQUEsUUFDQSxPQUFBQSxFQUFBLFNBQUE7QUFBQSxRQUNBLEtBQUFBLEVBQUEsUUFBQTtBQUFBLE1BQ0EsQ0FBQSxJQUVBLEtBQUEsZUFBQUEsR0FFQSxLQUFBLE1BQUEsU0FBQSxLQUFBLFlBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxZQUFBRSxHQUFBO0FBQ0EsV0FBQSxRQUFBLEtBQUEsR0FHQSxLQUFBLFFBQUEsRUFBQSxPQUFBQSxHQUFBLEtBQUEsRUFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQUQsR0FBQTtBQUNBLFdBQUEsUUFBQSxPQUFBLEdBQ0EsS0FBQSxRQUFBLEVBQUEsTUFBQUEsR0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUFBLEdBQUFDLEdBQUE7QUFDQSxhQUFBQSxJQUFBLE1BQ0FELEtBQ0FDLElBQUEsS0FDQUEsSUFBQSxNQUNBRCxLQUNBQyxJQUFBLEtBRUEsRUFBQSxNQUFBRCxHQUFBLE9BQUFDLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBRixHQUFBLEVBQUEsTUFBQUMsR0FBQSxPQUFBQyxHQUFBLEtBQUFDLEVBQUEsR0FBQTtBQUNBLGFBQUFILEVBQUEsZUFBQSxLQUFBLFFBQUE7QUFBQSxRQUNBLE1BQUFDLEtBQUE7QUFBQSxRQUNBLE9BQUFDLEtBQUE7QUFBQSxRQUNBLEtBQUFDLEtBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBSCxHQUFBO0FBQ0EsWUFBQUMsSUFBQSxLQUFBLHFCQUFBRCxFQUFBLFlBQUEsQ0FBQTtBQUNBLGFBQUEsR0FBQUMsWUFBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUFBLEdBQUFDLEdBQUE7QUFDQSxhQUFBLElBQUEsS0FBQUQsR0FBQUMsSUFBQSxHQUFBLENBQUEsRUFBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEscUJBQUFELEdBQUE7QUFFQSxhQUFBLENBQUEsR0FEQUEsRUFBQSxTQUFBLEVBQ0EsTUFBQSxHQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBLEVBQUEsS0FBQWtDLEdBQUEsS0FBQUMsR0FBQSxPQUFBQyxFQUFBLEdBQUE7QUFDQSxZQUFBLEVBQUEsYUFBQUMsR0FBQSxjQUFBTCxFQUFBLElBQUE7QUFDQSxVQUFBRSxLQUFBQyxHQUFBO0FBQ0EsZ0JBQUFFLEdBQUE7QUFBQSxVQUNBLEtBQUE7QUFDQSxpQkFBQSxRQUFBO0FBQUEsY0FDQSxLQUFBTCxFQUFBLFFBQUEsSUFBQUUsSUFBQUMsSUFBQTtBQUFBLFlBQ0EsQ0FBQTtBQUNBO0FBQUEsVUFDQSxLQUFBO0FBQ0EsaUJBQUEsUUFBQTtBQUFBLGNBQ0EsT0FBQUgsRUFBQSxTQUFBLElBQUFFLElBQUFDLElBQUE7QUFBQSxZQUNBLENBQUE7QUFDQTtBQUFBLFVBQ0EsS0FBQTtBQUNBLGlCQUFBLFFBQUE7QUFBQSxjQUNBLE1BQUFILEVBQUEsWUFBQSxJQUFBRSxJQUFBQyxJQUFBO0FBQUEsWUFDQSxDQUFBO0FBQ0E7QUFBQSxRQUNBO0FBQ0EsZUFBQTtBQUFBLE1BQ0EsV0FBQUMsR0FBQTtBQUNBLGdCQUFBQyxHQUFBO0FBQUEsVUFDQSxLQUFBO0FBQ0EsaUJBQUEsV0FBQUwsQ0FBQTtBQUNBO0FBQUEsVUFDQSxLQUFBO0FBQ0EsaUJBQUEsUUFBQSxLQUFBO0FBQ0E7QUFBQSxVQUNBLEtBQUE7QUFDQSxpQkFBQSxRQUFBLE9BQUE7QUFDQTtBQUFBLFFBQ0E7QUFDQSxlQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsV0FBQSxZQUFBLENBQUEsR0FDQSxLQUFBLFlBQUEsQ0FBQTtBQUVBLFlBQUEsRUFBQSxjQUFBQSxFQUFBLElBQUEsTUFDQWhDLElBQUFnQyxFQUFBLFlBQUEsR0FDQS9CLElBQUErQixFQUFBLFNBQUEsR0FDQU0sSUFBQSxLQUFBLHFCQUFBdEMsQ0FBQTtBQUNBLGVBQUFoQixJQUFBLEdBQUFBLElBQUEsSUFBQUE7QUFDQSxhQUFBLFVBQUEsS0FBQXNELElBQUF0RCxDQUFBO0FBR0EsVUFBQXVELElBREEsSUFBQSxLQUFBdkMsR0FBQUMsR0FBQSxDQUFBLEVBQ0EsT0FBQSxJQUFBO0FBQ0EsTUFBQXNDLE1BQUEsTUFDQUEsSUFBQTtBQUVBLFlBQUFDLElBQUEsS0FBQSxlQUFBeEMsR0FBQUMsQ0FBQTtBQUNBLFVBQUFzQyxJQUFBLEdBQUE7QUFDQSxjQUFBRSxJQUFBLEtBQUEsYUFBQXpDLEdBQUFDLElBQUEsQ0FBQSxHQUNBeUMsSUFBQSxLQUFBO0FBQUEsVUFDQUQsRUFBQTtBQUFBLFVBQ0FBLEVBQUE7QUFBQSxRQUNBO0FBQ0EsaUJBQUF6RCxJQUFBLEdBQUFBLElBQUF1RCxHQUFBdkQsS0FBQTtBQUNBLGdCQUFBa0IsSUFBQXdDLElBQUFILElBQUF2RCxJQUFBLEdBQ0FlLElBQUEsSUFBQSxLQUFBMEMsRUFBQSxNQUFBQSxFQUFBLE9BQUF2QyxDQUFBO0FBQ0EsZUFBQSxVQUFBLEtBQUE7QUFBQSxZQUNBLE1BQUFBO0FBQUEsWUFDQSxNQUFBSDtBQUFBLFlBQ0EsT0FBQSxLQUFBLGFBQUFBLENBQUEsSUFBQSxhQUFBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFFQSxZQUFBNEMsSUFBQSxJQUFBLEtBQUE7QUFDQSxlQUFBM0QsSUFBQSxHQUFBQSxLQUFBd0QsR0FBQXhELEtBQUE7QUFDQSxjQUFBZSxJQUFBLElBQUEsS0FBQUMsR0FBQUMsR0FBQWpCLENBQUEsR0FDQTRELElBQUEsQ0FBQTdDLE1BQUFBLEtBQ0FBLEVBQUEsUUFBQSxNQUFBZixLQUNBZSxFQUFBLFlBQUEsTUFBQUMsS0FDQUQsRUFBQSxTQUFBLE1BQUFFLEdBQ0FnQyxJQUFBVyxFQUFBLEtBQUEsS0FBQSxJQUFBLFdBQ0FBLEVBQUFELENBQUEsSUFBQSxVQUNBLEtBQUEsYUFBQTVDLENBQUEsSUFBQSxhQUNBNkMsRUFBQVosQ0FBQSxJQUFBLFlBQ0E7QUFDQSxhQUFBLFVBQUEsS0FBQTtBQUFBLFVBQ0EsTUFBQWhEO0FBQUEsVUFDQSxNQUFBZTtBQUFBLFVBQ0EsT0FBQWtDO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUVBLFlBQUFZLElBQUEsS0FBQSxLQUFBLFVBQUE7QUFDQSxVQUFBQSxJQUFBLEdBQUE7QUFDQSxjQUFBQyxJQUFBLEtBQUEsYUFBQTlDLEdBQUFDLElBQUEsQ0FBQTtBQUNBLGlCQUFBakIsSUFBQSxHQUFBQSxLQUFBNkQsR0FBQTdELEtBQUE7QUFDQSxnQkFBQWUsSUFBQSxJQUFBLEtBQUErQyxFQUFBLE1BQUFBLEVBQUEsT0FBQTlELENBQUEsR0FDQWlELElBQUEsS0FBQSxhQUFBbEMsQ0FBQSxJQUFBLGFBQUE7QUFDQSxlQUFBLFVBQUEsS0FBQTtBQUFBLFlBQ0EsTUFBQWY7QUFBQSxZQUNBLE1BQUFlO0FBQUEsWUFDQSxPQUFBa0M7QUFBQSxVQUNBLENBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsR0FFQWMsS0FBQSxDQUFBO0FBR0EsU0FBQXJCLEdBQUF0UCxHQUFBO0FBQ0EsTUFBQTRRLElBQUFELEdBQUEzUTtBQUNBLE1BQUEsQ0FBQTRRLEdBQUE7QUFDQSxVQUFBeEIsSUFBQSxDQUFBO0FBQ0EsYUFBQXhDLElBQUEsR0FBQUEsSUFBQSxHQUFBQSxLQUFBO0FBQ0EsWUFBQWUsSUFBQSxJQUFBLEtBQUEsR0FBQSxHQUFBZixDQUFBO0FBQ0EsTUFBQXdDLEVBQUEsS0FBQTtBQUFBLFFBQ0EsTUFBQXpCLEVBQUEsZUFBQTNOLEdBQUEsRUFBQSxTQUFBLFFBQUE7QUFBQSxRQUNBLE9BQUEyTixFQUFBLGVBQUEzTixHQUFBLEVBQUEsU0FBQSxTQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUNBLFVBQUFxUCxJQUFBLENBQUE7QUFDQSxhQUFBekMsSUFBQSxHQUFBQSxLQUFBLElBQUFBLEtBQUE7QUFDQSxZQUFBZSxJQUFBLElBQUEsS0FBQSxHQUFBZixHQUFBLENBQUE7QUFDQSxNQUFBeUMsRUFBQSxLQUFBO0FBQUEsUUFDQSxNQUFBMUIsRUFBQSxlQUFBM04sR0FBQSxFQUFBLE9BQUEsUUFBQTtBQUFBLFFBQ0EsT0FBQTJOLEVBQUEsZUFBQTNOLEdBQUEsRUFBQSxPQUFBLFNBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQ0EsSUFBQTRRLElBQUFELEdBQUEzUSxLQUFBO0FBQUEsTUFDQSxjQUFBb1A7QUFBQSxNQUNBLFlBQUFDO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxTQUFBdUI7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RmQSxJQUFJeEQsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2QsR0FBRSxDQUFDeUMsRUFBSSxhQUFhekMsRUFBRyxPQUFPO0FBQUEsSUFDN0IsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsT0FBT3lDLEVBQUk7QUFBQSxFQUNaLEdBQUUsQ0FBQ0EsRUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSSxZQUFZLFVBQVV6QyxFQUFHLE9BQU87QUFBQSxJQUMvRCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPeUMsRUFBSTtBQUFBLElBQ1gsSUFBSTtBQUFBLE1BQ0YsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNGLEdBQUUsQ0FBQ0EsRUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSSxZQUFZLFVBQVV6QyxFQUFHLE9BQU87QUFBQSxJQUMvRCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPeUMsRUFBSTtBQUFBLElBQ1gsSUFBSTtBQUFBLE1BQ0YsWUFBYyxTQUFVNkIsR0FBUTtBQUM5QixlQUFPN0IsRUFBSSxRQUFRLEVBQUk7QUFBQSxNQUN4QjtBQUFBLE1BQ0QsWUFBYyxTQUFVNkIsR0FBUTtBQUM5QixlQUFPN0IsRUFBSSxRQUFRLEVBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFBQSxFQUNMLEdBQUssQ0FBQ0EsRUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSSxZQUFZLFdBQVdBLEVBQUksWUFBWSxXQUFXekMsRUFBRyxPQUFPO0FBQUEsSUFDM0YsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsT0FBT3lDLEVBQUk7QUFBQSxFQUNaLEdBQUUsQ0FBQ0EsRUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSUEsRUFBSSxNQUFNekMsRUFBRyxjQUFjO0FBQUEsSUFDdEQsT0FBTztBQUFBLE1BQ0wsTUFBUXlDLEVBQUk7QUFBQSxJQUNiO0FBQUEsRUFDRixHQUFFLENBQUNBLEVBQUksWUFBWSxVQUFVekMsRUFBRyxPQUFPO0FBQUEsSUFDdEMsWUFBWSxDQUFDO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxPQUFPeUMsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU9BLEVBQUk7QUFBQSxJQUNYLE9BQU9BLEVBQUk7QUFBQSxJQUNYLElBQUk7QUFBQSxNQUNGLFlBQWMsU0FBVTZCLEdBQVE7QUFDOUIsZUFBTzdCLEVBQUksUUFBUSxFQUFJO0FBQUEsTUFDeEI7QUFBQSxNQUNELFlBQWMsU0FBVTZCLEdBQVE7QUFDOUIsZUFBTzdCLEVBQUksUUFBUSxFQUFLO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFFLENBQUNBLEVBQUksWUFBWUEsRUFBSSxHQUFHLE9BQU8sSUFBSUEsRUFBSSxHQUFFLENBQUUsR0FBRyxDQUFDLElBQUl6QyxFQUFHLE9BQU87QUFBQSxJQUM5RCxZQUFZLENBQUM7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE9BQU95QyxFQUFJO0FBQUEsTUFDWCxZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLElBQ0QsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsT0FBT0EsRUFBSTtBQUFBLElBQ1gsT0FBT0EsRUFBSTtBQUFBLEVBQ1osR0FBRSxDQUFDQSxFQUFJLFlBQVlBLEVBQUksR0FBRyxPQUFPLElBQUlBLEVBQUksR0FBRSxDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDM0QsR0FDSUUsS0FBa0IsQ0FBRTtBQ2dCeEIsTUFBQUMsS0FBQTtBQUFBLEVBQ0EsT0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxRQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsU0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsV0FBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsYUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0Esc0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EseUJBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsWUFB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LEdBQUEsU0FBQSxVQUFBO0FBQUEsSUFDQSxjQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsV0FBQSxLQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBaFQsR0FBQSxLQUFBLGNBQUE7QUFBQSxRQUNBLFFBQUEsS0FBQTtBQUFBLFFBQ0EsTUFBQSxLQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsTUFDQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQXNQLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsTUFDQSxLQUFBLGVBQUFEO0FBQUEsSUFFQTtBQUFBLElBRUEsYUFBQTVCLEdBQUE7QUFDQSxNQUFBLENBQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQ0EsS0FBQSxVQUFBLElBQ0EsS0FBQSxNQUFBLFNBQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxLQUFBbUQsR0FBQTtBQUNBLFdBQUEsWUFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBdkIsR0FBQUMsR0FBQTtBQUNBLE1BQUEsQ0FBQUQsS0FBQSxDQUFBQyxLQUNBLEtBQUEsTUFBQSxlQUFBRCxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQUEsR0FBQUMsR0FBQTtBQUNBLE1BQUEsQ0FBQUQsS0FBQSxDQUFBQyxLQUNBLEtBQUEsTUFBQUQsSUFBQSxVQUFBLE1BQUE7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsSUFBQSxRQUFBLE1BQUE7QUFDQSxNQUFBLEtBQUEsWUFDQSxLQUFBLFVB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QUE7QUFBQSxJQUNBLGdCQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsV0FBQSxLQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsZUFDQSxHQUNBLEtBQUEsUUFBQSxLQUFBLElBQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQ0EsS0FBQSxnQkFJQXRGLEdBQUEsSUFBQSxRQUFBLEVBQUEsTUFBQSxHQUFBLFFBQUEsR0FBQSxRQUFBLEdBQUEsYUFBQSxFQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBO0FBQUEsTUFDQSxNQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUFLLEdBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxNQUFBQSxHQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsWUFBQSxXQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQUUsR0FBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLFFBQUFBLEdBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBRSxHQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsUUFBQUEsR0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQW9CLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsTUFDQSxLQUFBLGVBQUFEO0FBQUEsSUFFQTtBQUFBLElBRUEsYUFBQTVCLEdBQUE7QUFDQSxNQUFBLENBQUFBLEtBQUEsQ0FBQSxLQUFBLFVBQ0EsS0FBQSxVQUFBLElBQ0EsS0FBQSxNQUFBLFNBQUFBLENBQUEsR0FDQSxLQUFBLFVBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBO0FBQUEsSUFFQSxXQUFBO0FBQUEsSUFFQSxLQUFBbUQsR0FBQTtBQUNBLFdBQUEsWUFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBdkIsR0FBQUMsR0FBQTtBQUNBLE1BQUFELE1BQ0EsS0FBQSxnQkFBQSxHQUNBLEtBQUEsVUFBQSxDQUFBLElBRUEsQ0FBQUEsS0FBQSxDQUFBQyxLQUNBLEtBQUEsTUFBQSxlQUFBRCxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQUEsR0FBQUMsR0FBQTtBQUNBLE1BQUEsQ0FBQUQsS0FBQSxDQUFBQyxLQUNBLEtBQUEsTUFBQUQsSUFBQSxVQUFBLE1BQUE7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsSUFBQSxRQUFBLE1BQUE7QUFDQSxNQUFBLEtBQUEsWUFDQSxLQUFBLFVBQUEsSUFDQSxLQUFBLE1BQUEsVUFBQSxLQUFBLFlBQUE7QUFBQSxJQUVBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxRQUFBNVUsR0FBQTtBQUNBLGNBQUEsTUFBQUEsR0FBQSxNQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBK1UsR0FBQTtBQUNBLFdBQUEsZUFBQWhDLEdBQUEsS0FBQSxhQUFBO0FBQUEsUUFDQSxHQUFBZ0M7QUFBQSxRQUNBLGFBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQXdELElBQUEsSUFBQTtBQUNBLFVBQUEsS0FB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O0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxNQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsTUFBQVIsR0FBQSxLQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsUUFBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLE1BQUExRCxHQUFBQyxHQUFBO0FBQ0EsTUFBQSxDQUFBRCxLQUFBLENBQUFDLE1BQ0EsS0FBQSxlQUFBRDtBQUFBLElBRUE7QUFBQSxJQUVBLGFBQUE1QixHQUFBO0FBQ0EsTUFBQSxDQUFBQSxLQUFBLENBQUEsS0FBQSxVQUNBLEtBQUEsVUFBQSxJQUNBLEtBQUEsTUFBQSxTQUFBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTRCLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsS0FDQSxLQUFBLE1BQUFELElBQUEsVUFBQSxNQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLElBQUEsUUFBQSxNQUFBO0FBQ0EsTUFBQSxLQUFBLFlBQ0EsS0FBQSxVQUFBLElBQ0EsS0FBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FB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QUEsS0FBQSxLQUFBLGtCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUEsS0FBQSxJQUFBLEtBQUEsUUFBQSxLQUFBLGtCQUFBLEdBQUEsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLE9BQUE7QUFBQSxJQUNBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFBQSxJQUVBLEtBQUFrRyxHQUFBO0FBQ0EsV0FBQSxjQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUFDLEdBQUE7QUFDQSxXQUFBLGtCQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBQyxHQUFBO0FBQ0EsV0FBQSxXQUFBLEtBQUEsS0FBQSxLQUFBLFFBQUFBLENBQUEsR0FDQSxLQUFBLGNBQUEsS0FBQSxhQUNBLEtBQUEsY0FBQSxLQUFBLFdBRUEsS0FBQSxnQkFBQSxHQUNBLEtBQUEsTUFBQSxlQUFBLEtBQUEsTUFBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUFyRSxHQUFBQyxHQUFBO0FBQ0EsTUFBQUQsTUFBQUMsTUFDQSxLQUFBLGdCQUFBLEdBQ0EsS0FBQSxNQUFBLGVBQUFELENBQUE7QUFBQSxJQUVBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsY0FBQSxLQUFBLE1BQ0EsS0FBQSxrQkFBQSxLQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsZ0JBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxZQUFBbUUsR0FBQTtBQUNBLE1BQUFBLEVBQUEsU0FBQSxDQUFBQSxFQUFBLFlBQUFBLEVBQUEsVUFBQSxLQUFBLGdCQUNBLEtBQUEsY0FBQUEsRUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGFBQUFBLEdBQUE7QUFDQSxZQUFBN0MsSUFBQTtBQUFBLFFBQ0EsaUJBQUE2QyxFQUFBO0FBQUEsTUFDQTtBQUNBLGFBQUFBLEVBQUEsU0FDQTdDLEVBQUEsZUFBQTZDLEVBQUEsVUFBQSxLQUVBN0M7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QSxLQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsWUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxPQUFBO0FBQUEsUUFDQSxPQUFBLFFBQUExTCxHQUFBLEtBQUEsT0FBQSxDQUFBLEVBQUE7QUFBQSxVQUdBLENBQUEsQ0FBQWhRLEdBQUFzRCxDQUFBLE9BQ0F0RCxNQUFBLFlBQUEsQ0FBQXNELEVBQUEsV0FDQUEsSUFBQTtBQUFBLFlBQ0EsR0FBQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxjQUNBLE9BQUEsTUFBQSxLQUFBLE9BQUE7QUFBQSxZQUNBO0FBQUEsVUFDQSxJQUVBLENBQUF0RCxHQUFBc0QsQ0FBQTtBQUFBLFFBRUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxlQUFBeVEsR0FBQSxRQUFBO0FBQUEsTUFDQSxPQUFBLE1BQUE7QUFDQSxRQUFBLEtBQUEsYUFBQSxNQUFBLFlBQUEsTUFDQSxLQUFBLE9BQUE7QUFBQSxNQUVBO0FBQUEsSUFDQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsWUFBQTtBQUNBLFNBQUEsYUFBQSxPQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsT0FBQTtBQUNBLFdBQUEsT0FBQSxLQUFBLEtBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE1VCxHQUFBO0FBQ0EsV0FBQSxRQUFBLFFBQUFBLENBQUEsR0FDQSxLQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBQSxHQUFBO0FBQ0EsV0FBQSxRQUFBLE9BQUFBLENBQUEsR0FDQSxLQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsV0FBQSxRQUFBLEtBQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVB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QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxPQUFBLENBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE1BQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxnQkFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxVQUFBLEVBQUEsTUFBQXZjLE1BQUEsS0FBQTtBQUNBLFdBQUE7QUFBQSxNQUVBLEdBQ0FBLEtBQUFZLEVBQUFaLENBQUEsSUFDQUEsRUFBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLElBQ0FBO0FBQUEsTUFFQSxvQkFBQSxDQUFBO0FBQUEsTUFDQSxlQUFBLENBQUE7QUFBQSxNQUNBLGdCQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0Esa0JBQUE7QUFFQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsd0JBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQSxPQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxZQUFBK0wsSUFBQWdGLEdBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQTtBQUNBLGlCQUFBZ00sS0FBQSxLQUFBO0FBQ0EsUUFBQWhSLEVBQUEsS0FBQSxHQUFBZ1IsRUFBQSxZQUFBO0FBRUEsYUFBQWhSO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUFvRSxFQUFBLEtBQUEsT0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxZQUFBNk0sTUFBQWhjLElBQUEsS0FBQSxPQUFBLFNBQUEsZ0JBQUFBLEVBQUEsTUFBQSxPQUFBLE1BQ0FnUCxJQUFBZ04sS0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBQSxFQUFBLElBQ0FBLE1BQ0EzVCxJQUFBLEtBQUEsZUFBQSxnQkFBQUEsRUFBQSxTQUFBO0FBQ0EsYUFBQTJHLE1BQUFnTixLQUVBLEtBQUEsUUFBQSxRQUFBLEVBQUEsTUFBQWhOLEVBQUEsQ0FBQSxHQUVBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxVQUFBLEtBQUEsTUFBQTtBQUNBLFlBQUFpTixJQUFBO0FBQ0EsbUJBQUFqTixLQUFBLE9BQUEsT0FBQSxLQUFBLElBQUEsR0FBQTtBQUNBLGdCQUFBLEVBQUEsWUFBQWtOLEVBQUEsSUFBQWxOO0FBQ0EsY0FBQXBQLEVBQUFzYyxDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUVBLG1CQUFBbE47QUFFQSxVQUFBaU4sTUFDQUEsSUFBQWpOO0FBQUEsUUFFQTtBQUNBLGVBQUFpTjtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBOztBQUNBLGNBQUFqYyxJQUFBLEtBQUEsV0FBQSxnQkFBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLFVBQUEsWUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxTQUFBLEtBQUEsT0FBQTtBQUFBLFFBQ0EsR0FBQSxLQUFBLFlBQUEsRUFBQSxRQUFBLGFBQUEsWUFBQSxJQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQVFBLE9BQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBdkIsR0FBQSxLQUFBLFVBQUEsS0FBQSxVQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsUUFDQSxLQUFBLGtCQUFBLEtBQUEsY0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxDQUFBOFMsTUFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxjQUFBLENBQUFBLE1BQUFBLEVBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxDQUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUEsV0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxZQUFBLEVBQUEsWUFBQXROLE1BQUEsS0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBQSxLQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBMkQsR0FBQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxDQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxhQUFBLE9BQUEsT0FBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsdUJBQUE7QUFDQSxhQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUEsR0FDQSxLQUFBLGtCQUFBLEdBRUEsS0FBQSxTQUFBLFVBQUEsS0FBQSxxQkFBQSxHQUNBLEtBQUEsVUFBQSxZQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7QUFDQSxTQUFBLFVBQUEsU0FBQSxHQUNBLEtBQUEsVUFBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0Esd0JBQUFsSyxHQUFBdUksR0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLFFBQ0EsS0FBQTtBQUFBLFFBQUF2STtBQUFBLFFBQUF1STtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSx1QkFBQXZJLEdBQUF1SSxHQUFBO0FBQ0EsYUFBQSxLQUFBLHdCQUFBdkksR0FBQXVJLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUF2SSxHQUFBdUksR0FBQTtBQUNBLGFBQUEsS0FBQSxrQkFBQSxLQUFBLHNCQUFBdkksR0FBQXVJLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQXZDLEdBQUF1QyxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBdkMsR0FBQXVDLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQWtXLEdBQUFsVyxHQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUEsS0FBQSxzQkFBQWtXLEdBQUFsVyxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQWtXLEdBQUFsVyxHQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUFrVyxHQUFBbFcsQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxvQkFBQXZJLEdBQUF1SSxHQUFBO0FBQ0EsYUFBQSxLQUFBLHNCQUFBLEtBQUEsa0JBQUF2SSxHQUFBdUksQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBdkksR0FBQXVJLEdBQUE7QUFDQSxhQUFBLEtBQUEsb0JBQUF2SSxHQUFBdUksQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBa1csR0FBQWxXLEdBQUE7QUFDQSxhQUFBLEtBQUEsWUFBQSxLQUFBLGtCQUFBa1csR0FBQWxXLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBa1csR0FBQWxXLEdBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQWtXLEdBQUFsVyxDQUFBLEVBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUExRixHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQSxXQUFBLEtBQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQSxXQUFBLE1BQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBNmIsR0FBQTtBQUNBLFdBQUEsVUFBQSxVQUFBO0FBQUEsUUFFQSxTQUFBLEVBQUEsUUFBQUEsRUFBQTtBQUFBLE1BQ0EsQ0FBQSxJQVFBLENBQUEsS0FBQSxVQUFBQSxLQUFBLEtBQUEsWUFBQSxPQUNBLEtBQUEsU0FBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsV0FBQSxVQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxrQkFBQTtBQUNBLGlCQUFBcmMsS0FBQSxLQUFBO0FBQ0EsUUFBQUEsRUFBQSxnQkFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGNBQUE7QUFDQSxpQkFBQUEsS0FBQSxLQUFBO0FBQ0EsUUFBQUEsRUFBQSxZQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTs7QUFDQSxPQUFBQyxJQUFBLEtBQUEsMEJBQUEsUUFBQUEsRUFBQSxTQUNBLEtBQUEsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUFpRyxHQUFBZSxJQUFBLElBQUE7QUFDQSxZQUFBLEVBQUEsc0JBQUFxVixFQUFBLElBQUE7QUFDQSxVQUFBQztBQUNBLFVBQUFyVyxHQUFBO0FBQ0EsY0FBQXNXLElBQUEzYyxFQUFBcUcsQ0FBQSxJQUNBQSxJQUNBbkUsR0FBQW1FLENBQUEsSUFDQSxDQUFBOE4sTUFBQTlOLEVBQUEsS0FBQThOLENBQUEsSUFDQTtBQUNBLFFBQUF1SSxJQUFBQyxJQUNBLE9BQUEsS0FBQUYsQ0FBQSxFQUFBLE9BQUFFLENBQUEsSUFDQS9iLEVBQUF5RixDQUFBLElBQ0FBLElBQ0EsQ0FBQUEsQ0FBQTtBQUFBLE1BQ0E7QUFDQSxNQUFBZSxLQUNBLEtBQUEsWUFBQTtBQUVBLFVBQUFDLElBQUEsSUFDQWdWLElBQUE7QUFDQSxNQUFBSyxVQUFBLE9BQUEsS0FBQUQsQ0FBQTtBQUNBLGlCQUFBM2UsS0FBQTRlLEdBQUE7QUFDQSxjQUFBclksSUFBQSxLQUFBLHdCQUFBdkcsQ0FBQTtBQUNBLG1CQUFBcUMsS0FBQWtFO0FBQ0EsVUFBQWxFLEVBQUEsU0FBQWlILENBQUEsTUFFQUEsS0FBQWlWLEtBQ0FsYyxFQUFBLE1BQUEsR0FFQWtjLElBQUEsSUFDQWhWLElBQUE7QUFBQSxNQUdBO0FBQ0EsYUFBQUQsS0FBQSxDQUFBQyxLQUNBLEtBQUEsYUFBQSxHQUVBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUFoQixHQUFBO0FBQ0EsYUFBQSxLQUFBLFlBQUFBLEdBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEscUJBQUF3QixHQUFBQyxHQUFBOztBQUNBLFdBQUEsWUFBQTtBQUNBLFVBQUF1VSxJQUFBO0FBQ0EsWUFBQU8sSUFBQSxDQUFBO0FBQ0EsaUJBQUEsQ0FBQTllLEdBQUErZSxDQUFBLEtBQUEsT0FBQSxRQUFBaFYsQ0FBQSxHQUFBO0FBR0EsY0FBQWlWLElBQUEsS0FBQSxhQUNBamYsRUFBQSxLQUFBLFVBQUFDLENBQUEsSUFDQUEsR0FJQWlmLElBQUE3ZSxFQUFBNGUsQ0FBQTtBQUNBLFlBQUFFLElBQUE7QUFDQSxjQUFBM1ksSUFBQSxLQUFBLHdCQUFBMFksQ0FBQTtBQUNBLG1CQUFBNWMsS0FBQWtFO0FBQ0EsVUFBQWxFLEVBQUEscUJBQUEwYyxHQUFBUixLQUFBdlUsQ0FBQSxNQUNBa1YsSUFBQSxJQUNBWCxJQUFBO0FBR0EsWUFBQSxDQUFBVyxHQUFBO0FBSUEsZ0JBQUFDLElBQUFGLEVBQUEsSUFBQTtBQUNBLGlCQUFBQSxFQUFBLFNBQUEsS0FBQTtBQUNBLGtCQUFBMVksSUFBQSxLQUFBLHdCQUFBMFksQ0FBQTtBQUNBLHVCQUFBNWMsS0FBQWtFO0FBQ0Esa0JBQUEsUUFBQWpFLElBQUFELEVBQUEsd0JBQUEsZ0JBQUFDLEVBQUE7QUFBQSxnQkFBQUQ7QUFBQSxnQkFDQTJjO0FBQUEsZ0JBQ0EsQ0FBQUksTUFBQTtBQUNBLHNCQUFBRixJQUFBO0FBQ0EsNkJBQUE3YyxLQUFBK2MsR0FBQTtBQUNBLDBCQUFBTCxJQUFBaFYsRUFBQTFILEVBQUE7QUFDQSxvQkFDQTBjLEtBQ0ExYyxFQUFBLHFCQUFBMGMsR0FBQVIsS0FBQXZVLENBQUEsTUFFQWtWLElBQUEsSUFDQVgsSUFBQTtBQUFBLGtCQUVBO0FBQ0EseUJBQUFXO0FBQUEsZ0JBQ0E7QUFBQTtBQU1BO0FBSUEsWUFBQUQsRUFBQSxJQUFBO0FBQUEsVUFDQTtBQUdBLGdCQUFBNUksSUFBQXBRLEVBQUFrWixDQUFBO0FBQ0EscUJBQUE5QyxLQUFBMEMsR0FBQTtBQUNBLGtCQUFBcEIsSUFBQXRILElBQ0EsYUFBQUEsTUFDQSxPQUFBLEtBQUE7QUFDQSxZQUFBeUksRUFBQSxLQUFBLEdBQUFuQixLQUFBdEIsRUFBQSxTQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFDQSxRQUFBa0MsSUFBQTtBQUFBLE1BQ0E7QUFDQSxNQUFBQSxLQUNBLEtBQUEsYUFBQU8sRUFBQSxLQUFBO0FBQUEsQ0FBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsYUFBQWpWLEdBQUE7QUFDQSxXQUFBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUFBLEtBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBSUEsYUFBQSxPQUFBLEtBQUEsTUFBQThGLEdBQUEsS0FBQSxRQUFBLElBQUEsSUFBQSxDQUFBLEdBQ0EsS0FBQSxZQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQXJPLEdBQUE7QUFDQSxpQkFBQTBFLEtBQUExRTtBQUNBLFlBQUEwRSxLQUFBLEtBQUEsTUFBQTtBQUNBLGVBQUEsS0FBQSxLQUFBLE1BQUFBLEdBQUExRSxFQUFBMEUsRUFBQTtBQUNBLHFCQUFBM0QsS0FBQSxLQUFBLG9CQUFBMkQsQ0FBQTtBQUNBLFlBQUEzRCxFQUFBLFVBQUE7QUFBQSxRQUVBO0FBQUEsSUFFQTtBQUFBLElBRUEsV0FBQWYsR0FBQTtBQUlBLFlBQUE0TyxJQUFBLENBQUE7QUFDQSxpQkFBQSxDQUFBbEssR0FBQS9ELENBQUEsS0FBQSxPQUFBLFFBQUFYLENBQUE7QUFDQSxTQUFBd0IsRUFBQWIsQ0FBQSxLQUFBa0MsRUFBQWxDLENBQUEsTUFDQSxLQUFBLG9CQUFBK0QsQ0FBQSxFQUNBLEtBQUEsQ0FBQTNELE1BQUFBLEVBQUEsWUFBQSxNQUlBNk4sRUFBQWxLLEtBQUEvRDtBQUVBLGFBQUFpTztBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUEsRUFBQSxRQUFBck0sSUFBQSxhQUFBLFlBQUF3TSxJQUFBLEdBQUEsSUFBQSxJQUFBO0FBQ0EsYUFBQUQ7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUFBO0FBQUEsVUFHQSxXQUFBO0FBQUEsVUFDQSxZQUFBQztBQUFBLFVBQ0EsUUFBQXhNO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBcVAsR0FBQTs7QUFHQSxPQUFBNVEsSUFBQSxLQUFBLHVCQUFBLE1BQUEsUUFBQUEsRUFBQSx5QkFBQSxNQUFBNFE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTdRLEdBQUE2USxHQUFBOztBQUNBLFdBQUEsZUFBQSxLQUFBLG9CQUFBN1EsR0FBQTZRLENBQUEsSUFFQTVRLElBQUEsS0FBQSwwQkFBQSxRQUFBQSxFQUFBLG1CQUFBRCxHQUFBNlE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBbUwsR0FBQW5MLEdBQUE7QUFDQSxXQUFBLGVBQUEsS0FBQSxlQUFBbUwsR0FBQW5MLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBM0IsR0FBQTJCLEdBQUE7QUFDQSxXQUFBLGVBQUEsS0FBQSxnQkFBQTNCLEdBQUEyQixDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQW1NLEdBQUFoYyxHQUFBNlAsR0FBQTtBQUNBLFlBQUF0TixJQUFBdkMsRUFBQTtBQUNBLE1BQUE2UCxJQUNBLEtBQUEsS0FBQW1NLEdBQUF6WixHQUFBdkMsQ0FBQSxJQUVBLEtBQUEsUUFBQWdjLEdBQUF6WixDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsdUJBQUF5WixHQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUFBLENBQUEsRUFBQSxPQUFBLENBQUFDLEdBQUFqYyxNQUFBO0FBR0EsY0FBQSxFQUFBLFVBQUFyRCxFQUFBLElBQUFxRDtBQUVBLGdCQURBaWMsRUFBQXRmLE9BQUFzZixFQUFBdGYsS0FBQSxDQUFBLElBQ0EsS0FBQXFELENBQUEsR0FDQWljO0FBQUEsTUFDQSxHQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBQSxHQUFBdGYsR0FBQXVJLEdBQUE7QUFDQSxhQUFBL0gsRUFBQVIsQ0FBQSxFQUFBLFdBQUEsS0FBQSxRQUFBLElBQ0EsS0FBQSxzQkFBQXNmLEdBQUF0ZixHQUFBdUksQ0FBQSxJQUNBLEtBQUEsa0JBQUErVyxHQUFBdGYsR0FBQXVJLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxzQkFBQStXLEdBQUF0ZixHQUFBdUksR0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLFFBQ0ErVyxFQUFBOWUsRUFBQVIsQ0FBQSxNQUFBLENBQUE7QUFBQSxRQUNBdUk7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUErVyxHQUFBdFosR0FBQXVDLEdBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxRQUNBK1csRUFBQXZmLEVBQUEsS0FBQSxVQUFBaUcsQ0FBQSxNQUFBLENBQUE7QUFBQSxRQUNBdUM7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQXdDLEdBQUF4QyxHQUFBO0FBQ0EsYUFBQUEsSUFBQXdDLEVBQUEsT0FBQXhDLENBQUEsSUFBQXdDO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsdEJBLElBQUkySixLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxlQUFlO0FBQUEsSUFDdkIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsdUJBQXVCeUMsRUFBSTtBQUFBLElBQzVCO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxRQUFVQSxFQUFJO0FBQUEsTUFDZCxVQUFZQSxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osTUFBUUEsRUFBSTtBQUFBLE1BQ1osT0FBU0EsRUFBSTtBQUFBLE1BQ2IsT0FBU0EsRUFBSSxZQUFZLE9BQU9BLEVBQUk7QUFBQSxNQUNwQyxTQUFXO0FBQUEsTUFDWCxVQUFZQSxFQUFJO0FBQUEsTUFDaEIsV0FBYUEsRUFBSTtBQUFBLE1BQ2pCLGFBQWVBLEVBQUk7QUFBQSxJQUNwQjtBQUFBLElBQ0QsYUFBYUEsRUFBSSxHQUFHLENBQUM7QUFBQSxNQUNuQixLQUFLO0FBQUEsTUFDTCxJQUFJLFdBQVk7QUFDZCxlQUFPLENBQUNBLEVBQUksYUFBYUEsRUFBSSxhQUFhQSxFQUFJLFdBQVd6QyxFQUFHLHFCQUFxQjtBQUFBLFVBQy9FLE9BQU87QUFBQSxZQUNMLFdBQWF5QyxFQUFJO0FBQUEsWUFDakIsV0FBYUEsRUFBSTtBQUFBLFlBQ2pCLFVBQVlBLEVBQUk7QUFBQSxZQUNoQixVQUFZQSxFQUFJO0FBQUEsWUFDaEIsUUFBVUEsRUFBSTtBQUFBLFlBQ2QsVUFBWUEsRUFBSTtBQUFBLFlBQ2hCLE1BQVFBLEVBQUk7QUFBQSxZQUNaLE1BQVFBLEVBQUk7QUFBQSxZQUNaLE9BQVNBLEVBQUk7QUFBQSxVQUNkO0FBQUEsVUFDRCxJQUFJO0FBQUEsWUFDRixRQUFVLFNBQVU2QixHQUFRO0FBQzFCLHFCQUFPN0IsRUFBSSxNQUFNLFFBQVE7QUFBQSxZQUMxQjtBQUFBLFVBQ0Y7QUFBQSxRQUNYLENBQVMsSUFBSUEsRUFBSSxHQUFFLENBQUU7QUFBQSxNQUNkO0FBQUEsTUFDRCxPQUFPO0FBQUEsSUFDYixDQUFLLENBQUM7QUFBQSxFQUNOLENBQUc7QUFDSCxHQUNJRSxLQUFrQixDQUFFO0FDVXhCLE1BQUFDLEtBQUFuTyxFQUFBLFVBQUEsdUJBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLE1BQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsYUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsWUFBQTtBQUNBLGFBQUFzSSxHQUFBLEtBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLENBQUEsS0FBQSxhQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwRkEsSUFBSXlGLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU9ELEVBQUksZUFBZUEsRUFBSSxpQkFBaUIsU0FBUyxJQUFJekMsRUFBRyxPQUFPO0FBQUEsSUFDcEUsWUFBWSxDQUFDO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxPQUFPeUMsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUksR0FBR0EsRUFBSSxrQkFBa0IsU0FBVTRLLEdBQU07QUFDL0MsUUFBSW5hLElBQVNtYSxFQUFLLFFBQ2hCdmYsSUFBV3VmLEVBQUssVUFDaEJDLElBQWlCRCxFQUFLLGdCQUN0QmpmLElBQVNpZixFQUFLLFFBQ2RFLElBQVFGLEVBQUs7QUFDZixXQUFPLENBQUNuYSxFQUFPLFVBQVUsV0FBVzhNLEVBQUcsT0FBTztBQUFBLE1BQzVDLGFBQWE7QUFBQSxJQUNuQixDQUFLLElBQUl5QyxFQUFJLE1BQU1BLEVBQUksYUFBYXZQLENBQU0sSUFBSThNLEVBQUcsa0JBQWtCO0FBQUEsTUFDN0QsS0FBS3NOO0FBQUEsTUFDTCxPQUFPO0FBQUEsUUFDTCxRQUFVcGE7QUFBQSxRQUNWLFVBQVlwRjtBQUFBLFFBQ1osTUFBUTJVLEVBQUk7QUFBQSxRQUNaLE1BQVFBLEVBQUk7QUFBQSxRQUNaLE9BQVM4SztBQUFBLFFBQ1QsUUFBVTlLLEVBQUk7QUFBQSxRQUNkLFFBQVVyVTtBQUFBLFFBQ1YsVUFBWXFVLEVBQUk7QUFBQSxRQUNoQixnQkFBa0JBLEVBQUk7QUFBQSxNQUN2QjtBQUFBLElBQ1AsQ0FBSyxJQUFJQSxFQUFJLE1BQU12UCxFQUFPLFVBQVUsVUFBVThNLEVBQUcsT0FBTztBQUFBLE1BQ2xELGFBQWE7QUFBQSxJQUNuQixDQUFLLElBQUl5QyxFQUFJLEdBQUUsQ0FBRTtBQUFBLEVBQ2QsQ0FBQSxDQUFDLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUU7QUFDbEIsR0FDSUUsS0FBa0IsQ0FBRTtBQ29DeEIsTUFBQUMsS0FBQW5PLEVBQUEsVUFBQSxhQUFBO0FBQUEsRUFDQSxVQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsZUFBQSxNQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxLQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsZUFBQTtBQUNBLGFBQUEsS0FBQSxNQUFBLE9BQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7O0FBUUEsWUFBQTRKLEtBQUFqTyxJQUFBLEtBQUEsaUJBQUEsZ0JBQUFBLEVBQUE7QUFDQSxhQUFBLE9BQUEsVUFBQXFJLElBQUEsS0FBQSxXQUFBLGdCQUFBQSxFQUFBLGVBQUEsQ0FBQSxDQUFBLEVBQUE7QUFBQSxRQUNBLENBQUEsQ0FBQTNFLEdBQUFaLENBQUEsTUFBQTtBQUVBLFVBQUFBLEVBQUEsT0FBQVk7QUFFQSxnQkFBQTFGLElBQUE2TyxHQUFBL0osQ0FBQSxHQUNBb2EsSUFBQXpmLEVBQUEsS0FBQSxVQUFBaUcsQ0FBQTtBQUNBLGlCQUFBO0FBQUEsWUFDQSxRQUFBWjtBQUFBLFlBQ0EsVUFBQTlFLEtBQUEsQ0FBQWlRLElBQ0FpUCxJQUNBLEtBQUE7QUFBQSxZQUNBLGdCQUFBQTtBQUFBLFlBQ0EsUUFBQWxmO0FBQUEsWUFDQSxPQUFBQSxJQUFBLEtBQUEsY0FBQTBGLENBQUEsSUFBQSxLQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQTtBQUdBLGFBQUEsS0FBQSxpQkFBQTtBQUFBLFFBQ0EsQ0FBQSxFQUFBLFFBQUFaLEdBQUEsZ0JBQUFwRixFQUFBLE1BQUF3UjtBQUFBLFVBQ0FwTTtBQUFBLFVBQ0FwRjtBQUFBLFVBQ0EsS0FBQTtBQUFBLFVBQ0EsS0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxLQUFBLGlCQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsVUFBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7QUFDQSxTQUFBLFVBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFVBQUFrVCxHQUFBO0FBQ0EsV0FBQSxnQkFBQSxjQUFBLE1BQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsTUFBQSxLQUFBLE9BQ0EsS0FBQSxRQUFBLEtBQUEsRUFBQSxNQUFBLEtBQUEsS0FBQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEtPLFNBQVN3TSxHQUFjemQsR0FBTztBQUNuQyxRQUFNc0csSUFDSnRFLEVBQVNoQyxDQUFLLEtBQ2RBLEVBQU0sTUFBTSxzQ0FBc0M7QUFFcEQsTUFBSXNHLEdBQU87QUFDVCxVQUFNLENBQUcsRUFBQW9YLEdBQVVDLENBQU8sSUFBSXJYO0FBQzlCLFdBQU8sV0FBV29YLENBQVEsSUFBSSxXQUFXQyxDQUFPO0FBQUEsRUFDcEQ7QUFDSSxXQUFPLFdBQVczZCxDQUFLO0FBRTNCO0FDYkEsSUFBSXlTLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT3lDLEVBQUk7QUFBQSxNQUNYLFlBQVk7QUFBQSxJQUNsQixDQUFLO0FBQUEsSUFDRCxhQUFhO0FBQUEsSUFDYixPQUFPQSxFQUFJO0FBQUEsSUFDWCxPQUFPQSxFQUFJO0FBQUEsRUFDWixHQUFFLENBQUNBLEVBQUksUUFBUXpDLEVBQUcsY0FBYztBQUFBLElBQy9CLE9BQU95QyxFQUFJO0FBQUEsSUFDWCxPQUFPO0FBQUEsTUFDTCxPQUFTQSxFQUFJO0FBQUEsTUFDYixVQUFZQSxFQUFJO0FBQUEsSUFDakI7QUFBQSxFQUNMLENBQUcsSUFBSUEsRUFBSSxHQUFFLEdBQUl6QyxFQUFHeUMsRUFBSSxpQkFBaUJBLEVBQUksT0FBTyxJQUFJLEdBQUc7QUFBQSxJQUN2RCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPQSxFQUFJO0FBQUEsSUFDWCxPQUFPO0FBQUEsTUFDTCxRQUFVQSxFQUFJO0FBQUEsTUFDZCxVQUFZQSxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osTUFBUUEsRUFBSTtBQUFBLE1BQ1osT0FBU0EsRUFBSTtBQUFBLE1BQ2IsUUFBVUEsRUFBSTtBQUFBLE1BQ2QsUUFBVUEsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLElBQ2pCO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixRQUFVQSxFQUFJO0FBQUEsSUFDZjtBQUFBLEVBQ0wsQ0FBRyxHQUFHekMsRUFBRyxlQUFlO0FBQUEsSUFDcEIsT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUk7QUFBQSxJQUNmO0FBQUEsRUFDTCxDQUFHLENBQUMsR0FBRyxDQUFDO0FBQ1IsR0FDSUUsS0FBa0IsQ0FBRTtBQzJCeEIsTUFBQUMsS0FBQW5PLEVBQUEsVUFBQSxrQkFBQTtBQUFBLEVBQ0EsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsS0FBQSxHQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxnQkFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQ0EsYUFBQSxJQUFBdkUsRUFBQSxNQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQTBMLEVBQUEsS0FBQSxNQUFBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxZQUFBLEVBQUEsUUFBQTFJLEVBQUEsSUFBQSxNQUNBLEVBQUEsT0FBQXlOLEVBQUEsSUFBQXpOO0FBQ0EsYUFDQXlOLE1BQUEsT0FDQSxDQUFBLENBQUFBLEtBQUEsS0FBQSxZQUFBLGlCQUFBLEtBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLFdBQUEsS0FBQSxTQUFBLEtBQUEsTUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFFQSxhQUFBLEtBQUEsU0FBQSxLQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTVJLEVBQUEsU0FBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLFFBQUEsTUFBQTtBQUFBLE1BQ0EsVUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsSUFBQStSLEdBQUE7QUFFQSxlQUFBQSxNQUFBLFNBQ0EsSUFDQS9YLEVBQUErWCxDQUFBLElBQ0FBLEVBQUEsTUFBQSxtQkFBQSxFQUFBLEtBQ0FBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsd0JBQUEvUixFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLElBQUErUixHQUFBO0FBQ0EsZUFBQS9YLEVBQUErWCxDQUFBLEtBQ0FBLEVBQUEsTUFBQSxhQUFBLEVBQUEsTUFBQTtBQUFBLE1BRUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLGtCQUFBL1IsRUFBQSxXQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxtQkFBQUEsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsTUFDQSxJQUFBNFAsR0FBQTtBQUNBLGVBQUFBLEtBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsWUFBQSxFQUFBLE9BQUFnRyxFQUFBLElBQUEsS0FBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLGVBQUEsS0FBQTtBQUFBLFFBQ0EscUJBQUF6USxHQUFBLEtBQUEsTUFBQTtBQUFBLFFBQ0EsR0FDQW5MLEVBQUE0YixDQUFBLElBQ0EsRUFBQSxDQUFBQSxJQUFBLEdBQUEsSUFDQUE7QUFBQSxNQUVBO0FBQUEsSUFDQTtBQUFBLElBRUEsaUJBQUE7QUFDQSxZQUFBN0QsSUFBQSxLQUFBLGdCQUVBOEQsSUFDQSxDQUFBLE1BQUEsUUFBQSxNQUFBLEVBQUEsU0FBQTlELENBQUEsSUFBQSxTQUNBLEtBQUEsS0FBQUEsQ0FBQSxJQUFBLFdBQUFBLENBQUEsSUFDQSxRQUFBLEtBQUFBLENBQUEsSUFBQUEsSUFDQTBELEdBQUExRCxDQUFBLElBQUE7QUFFQSxhQUFBaFksR0FBQThiLENBQUEsSUFBQSxHQUFBQSxPQUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBRUEsWUFBQUMsSUFDQSxLQUFBLDJCQUFBLE9BQ0EsS0FBQSxtQkFBQSxRQUdBQyxJQUFBLEtBQUEsMkJBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxNQUFBLEdBQUFELElBQUEsSUFBQSxLQUFBQyxJQUFBLElBQUEsS0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsWUFBQUMsSUFBQSxLQUFBLG1CQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsZUFBQSxLQUFBO0FBQUEsUUFDQSxpQkFBQSxLQUFBO0FBQUEsUUFDQSxtQkFBQSxDQUFBQSxLQUFBLEtBQUEsbUJBQUE7QUFBQSxRQUNBLG1CQUFBQTtBQUFBLFFBQ0EsbUJBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFNBQUFsVyxHQUFBO0FBQ0EsV0FBQSxTQUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbk5BLElBQUkySyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBS3lDLEVBQUksR0FBR0EsRUFBSSxNQUFNLFNBQVV1TCxHQUFXcGUsR0FBSztBQUM1QyxXQUFPNlMsRUFBSSxhQUFhdUwsQ0FBUyxJQUFJaE8sRUFBRyxlQUFlO0FBQUEsTUFDckQsS0FBS3BRO0FBQUEsTUFDTCxhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTCxJQUFNO0FBQUEsVUFDSixNQUFNQTtBQUFBLFFBQ1A7QUFBQSxRQUNELGdCQUFnQjtBQUFBLE1BQ2pCO0FBQUEsSUFDRixHQUFFLENBQUM2UyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxTQUFTdUwsR0FBV3BlLENBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJNlMsRUFBSSxHQUFFO0FBQUEsRUFDL0QsQ0FBRyxHQUFHLENBQUM7QUFDUCxHQUNJRSxLQUFrQixDQUFFO0FDdUJ4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLGFBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoREEsSUFBSStOLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHeUMsRUFBSSxVQUFVO0FBQUEsSUFDdEIsWUFBWSxDQUFDO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxPQUFPQSxFQUFJLFlBQVksQ0FBQ0EsRUFBSSxxQkFBcUJBLEVBQUksa0JBQWtCO0FBQUEsTUFDdkUsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLElBQUk7QUFBQSxNQUNGLFFBQVUsU0FBVTZCLEdBQVE7QUFDMUIsUUFBQUEsRUFBTyxlQUFjO0FBQUEsTUFDdEI7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLENBQUN0RSxFQUFHLFNBQVM7QUFBQSxJQUNkLGFBQWE7QUFBQSxFQUNkLEdBQUUsQ0FBQ3lDLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFNBQVNBLEVBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLGVBQWU7QUFBQSxJQUNoRSxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxRQUFVeUMsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixZQUFjQSxFQUFJO0FBQUEsSUFDbkI7QUFBQSxFQUNMLEdBQUssQ0FBQ3pDLEVBQUcsZ0JBQWdCO0FBQUEsSUFDckIsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsU0FBV3lDLEVBQUk7QUFBQSxNQUNmLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixNQUFRQSxFQUFJO0FBQUEsTUFDWixNQUFRQSxFQUFJO0FBQUEsTUFDWixPQUFTQSxFQUFJO0FBQUEsTUFDYixVQUFZQSxFQUFJO0FBQUEsSUFDakI7QUFBQSxJQUNELE1BQU07QUFBQSxFQUNQLENBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDYixHQUNJRSxLQUFrQixDQUFFO0FDNkJ4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLGNBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQWlOLEVBQUE7QUFBQSxFQUVBLFVBQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxpQkFBQSxNQUFBO0FBQUEsTUFDQSxlQUFBLE1BQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxtQkFBQSxFQUFBLE1BQUFqTixHQUFBLFNBQUEsS0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGlCQUFBO0FBQ0EsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUFtTCxHQUFBLEtBQUEsT0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsS0FBQSxPQUFBLFVBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsVUFBQSxLQUFBO0FBQ0EsZUFBQSxLQUFBO0FBQ0E7QUFHQSxjQUFBLEVBQUEsTUFBQXhRLE1BQUE4RCxFQUFBLElBQUEsS0FBQTtBQUNBLGVBQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFFQSxhQUFBLEtBQUEsYUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQSxLQUFBLFdBQUEsS0FBQSxnQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE2RSxFQUFBLFdBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUE7QUFHQSxVQUFBLEVBQUEsTUFBQTNJLE1BQUEsS0FBQTtBQUNBLElBQUFBLE1BQ0EsS0FBQSxVQUFBWSxFQUFBWixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUFBLEVBRUE7QUFBQSxFQUVBLGdCQUFBO0FBQ0EsU0FBQSxVQUFBLEVBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxVQUFBNFIsR0FBQTtBQUdBLFdBQUEsZ0JBQUEsZUFBQSxNQUFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqTEEsSUFBSXdCLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU9ELEVBQUksT0FBTyxTQUFTLElBQUl6QyxFQUFHLE9BQU87QUFBQSxJQUN2QyxhQUFhO0FBQUEsRUFDZCxHQUFFeUMsRUFBSSxHQUFHQSxFQUFJLFFBQVEsU0FBVTRLLEdBQU07QUFDcEMsUUFBSW5hLElBQVNtYSxFQUFLLFFBQ2hCdmYsSUFBV3VmLEVBQUssVUFDaEJuTixJQUFlbU4sRUFBSztBQUN0QixXQUFPNUssRUFBSSxhQUFhdlAsQ0FBTSxJQUFJOE0sRUFBRyxjQUFjO0FBQUEsTUFDakQsS0FBS3lDLEVBQUksWUFBWTNVLEdBQVVvUyxDQUFZO0FBQUEsTUFDM0MsT0FBTztBQUFBLFFBQ0wsUUFBVWhOO0FBQUEsUUFDVixVQUFZcEY7QUFBQSxRQUNaLE1BQVEyVSxFQUFJO0FBQUEsUUFDWixNQUFRQSxFQUFJO0FBQUEsUUFDWixPQUFTQSxFQUFJLGNBQWN2UCxFQUFPLElBQUk7QUFBQSxRQUN0QyxVQUFZQSxFQUFPLFlBQVksT0FBT0EsRUFBTyxXQUFXdVAsRUFBSTtBQUFBLFFBQzVELG1CQUFxQnZDO0FBQUEsTUFDdEI7QUFBQSxJQUNQLENBQUssSUFBSXVDLEVBQUk7RUFDVixDQUFBLEdBQUcsQ0FBQyxJQUFJQSxFQUFJLEdBQUU7QUFDakIsR0FDSUUsS0FBa0IsQ0FBRTtBQ0t4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLGVBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLE9BQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFlBQUEzRyxHQUFBb1MsR0FBQTtBQUdBLGFBQUFBLElBQUEsR0FBQUEsRUFBQSxPQUFBcFMsTUFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlDQSxJQUFJMFUsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxpQkFBaUJBLEVBQUksT0FBTyxVQUFVekMsRUFBRyxPQUFPeUMsRUFBSSxHQUFHO0FBQUEsSUFDaEUsYUFBYTtBQUFBLEVBQ2pCLEdBQUtBLEVBQUksVUFBVSxHQUFHLENBQUNBLEVBQUksR0FBR0EsRUFBSSxlQUFlLFNBQVV3TCxHQUFjQyxHQUFnQjtBQUNyRixXQUFPekwsRUFBSSxhQUFhd0wsQ0FBWSxJQUFJak8sRUFBRyxrQkFBa0I7QUFBQSxNQUMzRCxLQUFLa087QUFBQSxNQUNMLE9BQU87QUFBQSxRQUNMLFFBQVVEO0FBQUEsUUFDVixVQUFZQztBQUFBLFFBQ1osTUFBUXpMLEVBQUk7QUFBQSxRQUNaLE1BQVFBLEVBQUk7QUFBQSxRQUNaLE9BQVNBLEVBQUksY0FBY3dMLEVBQWEsSUFBSTtBQUFBLFFBQzVDLFVBQVl4TCxFQUFJO0FBQUEsUUFDaEIsZ0JBQWtCO0FBQUEsTUFDbkI7QUFBQSxJQUNQLENBQUssSUFBSUEsRUFBSTtFQUNiLENBQUcsR0FBR0EsRUFBSSxHQUFHQSxFQUFJLE9BQU8sU0FBUyxTQUFVMEwsR0FBTTtBQUM3QyxXQUFPQSxFQUFLLE1BQU1uTyxFQUFHLE9BQU87QUFBQSxNQUMxQixhQUFhO0FBQUEsSUFDbkIsR0FBTyxDQUFDQSxFQUFHLGNBQWM7QUFBQSxNQUNuQixPQUFPO0FBQUEsUUFDTCxNQUFRbU87QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFBLENBQUMsR0FBRyxDQUFDLElBQUkxTCxFQUFJLEdBQUU7QUFBQSxFQUNqQixDQUFBLENBQUMsR0FBRyxDQUFDLElBQUlBLEVBQUksR0FBRTtBQUNsQixHQUNJRSxLQUFrQixDQUFFO0FDUXhCLE1BQUFDLEtBQUFuTyxFQUFBLFVBQUEsZ0JBQUE7QUFBQSxFQUNBLFNBQUE7QUFBQSxJQUNBLGVBQUEsTUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxPQUFBLENBQUEsR0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUEsQ0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGdCQUFBO0FBRUEsWUFBQSxFQUFBLFVBQUEzRyxHQUFBLFNBQUF3RyxFQUFBLElBQUE7QUFDQSxhQUFBQSxJQUNBLE9BQUEsT0FBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQTJGLEdBQUFqRyxPQUNBaUcsRUFBQXBNLEVBQUFDLEdBQUFrRyxFQUFBLElBQUEsS0FBQUEsR0FDQWlHLElBQ0EsRUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoRUEsSUFBSXVJLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLGdCQUFnQjtBQUFBLElBQ3hCLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLFNBQVd5QyxFQUFJO0FBQUEsTUFDZixVQUFZQSxFQUFJO0FBQUEsTUFDaEIsTUFBUUEsRUFBSTtBQUFBLE1BQ1osTUFBUUEsRUFBSTtBQUFBLE1BQ1osT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVMsU0FBVTZCLEdBQVE7QUFDekIsUUFBQUEsRUFBTyxnQkFBZTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDN0IsRUFBSSxjQUFjekMsRUFBRyxLQUFLeUMsRUFBSSxHQUFHO0FBQUEsSUFDbkMsYUFBYTtBQUFBLEVBQ2pCLEdBQUssS0FBS0EsRUFBSSxvQkFBb0JBLEVBQUksTUFBTSxJQUFJLEdBQUcsRUFBSyxDQUFDLElBQUlBLEVBQUksR0FBSSxHQUFFQSxFQUFJLGFBQWF6QyxFQUFHLGVBQWV5QyxFQUFJLEdBQUc7QUFBQSxJQUM3RyxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxJQUFNO0FBQUEsUUFDSixNQUFNQSxFQUFJO0FBQUEsTUFDWDtBQUFBLE1BQ0QsUUFBVTtBQUFBLElBQ1g7QUFBQSxFQUNMLEdBQUssZUFBZUEsRUFBSSxvQkFBb0JBLEVBQUksTUFBTSxJQUFJLEdBQUcsRUFBSyxDQUFDLElBQUlBLEVBQUksR0FBSSxHQUFFQSxFQUFJLGNBQWN6QyxFQUFHLHNCQUFzQjtBQUFBLElBQ3hILE9BQU87QUFBQSxNQUNMLFFBQVV5QyxFQUFJO0FBQUEsTUFDZCxNQUFRQSxFQUFJO0FBQUEsTUFDWixNQUFRQSxFQUFJLE1BQU07QUFBQSxNQUNsQixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLEVBQ0wsQ0FBRyxJQUFJQSxFQUFJLEdBQUUsR0FBSUEsRUFBSSxjQUFjekMsRUFBRyxVQUFVeUMsRUFBSSxHQUFHO0FBQUEsSUFDbkQsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLElBQ1Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVMsU0FBVTZCLEdBQVE7QUFDekIsZUFBTzdCLEVBQUksTUFBTSxRQUFRO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFFLFVBQVVBLEVBQUksb0JBQW9CQSxFQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUssQ0FBQyxJQUFJQSxFQUFJLEdBQUUsQ0FBRSxHQUFHLENBQUM7QUFDaEYsR0FDSUUsS0FBa0IsQ0FBRTtBQ0R4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLHFCQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsS0FBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsWUFBQTtBQUNBLGFBQUEsS0FBQSxTQUFBLEtBQUEsT0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUEsVUFBQSxLQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBLFdBQUEsS0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7O0FBQ0EsZUFFQXJFLElBQUEsS0FBQSxPQUFBLGNBQUEsZ0JBQUFBLEVBQUEsVUFJQSxLQUFBLGFBQ0EsR0FB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RUEsVUFBQTtBQUFBLElBQ0EsUUFBQTtBQUlBLFlBQUFFLElBQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxZQUFBUyxHQUFBLGNBQUFDLEVBQUEsSUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUFWO0FBQUEsUUFDQSxRQUFBUyxJQUFBVCxFQUFBLFNBQUFBLEVBQUE7QUFBQSxRQUNBLFdBQUFTLElBQUFULEVBQUEsVUFBQUEsRUFBQTtBQUFBLFFBQ0EsUUFBQVUsSUFBQVYsRUFBQSxTQUFBQSxFQUFBO0FBQUEsUUFDQSxXQUFBVSxJQUFBVixFQUFBLFlBQUFBLEVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLFFBQ0EsS0FBQTtBQUFBLFFBR0EsS0FBQSxRQUFBLEVBQUEsTUFBQSxLQUFBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxNQUNBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQXBQO0FBQUEsUUFDQStQO0FBQUEsVUFDQTtBQUFBLFlBQ0EsUUFBQTtBQUFBLGNBQ0EsTUFBQTtBQUFBLGNBQ0EsUUFBQTtBQUFBLGdCQUNBLE9BQUEsTUFBQSxLQUFBLE9BQUE7QUFBQSxjQUNBO0FBQUEsWUFDQTtBQUFBLFlBRUEsUUFBQSxDQUFBLEtBQUEsY0FBQTtBQUFBLGNBQ0EsTUFBQTtBQUFBLGNBRUEsV0FBQTtBQUFBLGNBQ0EsUUFBQTtBQUFBLGdCQUNBLE9BQUEsQ0FBQSxFQUFBLFdBQUEzYixFQUFBLE1BQUFBLEVBQUEsT0FBQTtBQUFBLGNBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFFQSxhQUFBLEtBQUEsVUFBQTtB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QSxFQUNBLFlBQUEsRUFBQSxjQUFBNmMsR0FBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBTixFQUFBO0FBQUEsRUFDQSxRQUFBLENBQUEsV0FBQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxDQUFBLE9BQUEsTUFBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBLEtBQUEsUUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsT0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUEsS0FBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBelIsRUFBQSxLQUFBLE9BQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUdBLGlCQUFBO0FBQ0EsYUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FB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
|
|
10587
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvT3JkZXJlZE1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2xvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbXB1dGVkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVMYWJlbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU11bHRpc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVSYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRyZWVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIGxhYmVsaXplLCBoeXBoZW5hdGUsIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBFbWl0dGVyTWl4aW4gZnJvbSAnLi9FbWl0dGVyTWl4aW4uanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuLi91dGlscy90eXBlLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YVxuICAgICAgPyB7ICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzIH1cbiAgICAgIDoge31cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gUm91dGVNaXhpbiBjYW5cbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LiRwYXJlbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LiRwYXJlbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgdGhpcy4kdWlkID0gKyt1aWRcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzZXQodGhpcy5zdG9yZSwga2V5LCB2YWx1ZSlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHt9KVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmXG4gICAgICB9XG5cbiAgICAgIGlmIChpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfVxuICAgICAgLy8gQW55IHNjaGVtYSB2YWx1ZSBoYW5kbGVkIHRocm91Z2ggYGdldFNjaGVtYVZhbHVlKClgIGNhbiBwcm92aWRlXG4gICAgICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIE5vdyBmaW5hbGx5IHNlZSBpZiB3ZSBjYW4gY29udmVydCB0byB0aGUgZXhwZWN0IHR5cGVzLlxuICAgICAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkID0gY29udmVydFR5cGUodHlwZSwgdmFsdWUpXG4gICAgICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGxhYmVsaXplLFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyhuYW1lLCBidXR0b24pIHtcbiAgICAgIGNvbnN0IHZlcmIgPSB0aGlzLnZlcmJzW25hbWVdIHx8IG5hbWVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBidXR0b24/LnRleHQgfHwgbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1kcmFnLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1kcmFnLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLWRyYWctZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1kcmFnLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuICEhc2NoZW1hICYmIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coe1xuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGJ1dHRvbnMsXG4gICAgICBkYXRhLFxuICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9XG4gICAgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgdGhyb3VnaCB2dWUtanMtbW9kYWwsIGFuZCB3cmFwcyBpdCBpbiBhXG4gICAgICAvLyBwcm9taXNlIHNvIHRoYXQgdGhlIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYFxuICAgICAgLy8gYW5kIGBkaWFsb2cucmVqZWN0KClgIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3RcbiAgICAgIC8vIHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLiRtb2RhbC5zaG93KERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWRpYWxvZycpLCB7XG4gICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICB9LCBzZXR0aW5ncylcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IGNhY2hlICYmIHtcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICB9W2NhY2hlXVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSBsb2FkQ2FjaGUgJiYgYCR7XG4gICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnfSAke1xuICAgICAgICBvcHRpb25zLnVybH0gJHtcbiAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgcXVlcnlgIG9uXG4gICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55bW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hLmNvbXBvbmVudCwgc2NoZW1hLm5hbWUpXG4gICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gY29tcG9uZW50IDogdW5kZWZpbmVkXG4gICkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gdHJ1ZSA6IHVuZGVmaW5lZFxuICApID09PSB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KFxuICAgIHNjaGVtYSxcbiAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAhY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGZhbHNlIDogdW5kZWZpbmVkXG4gICkgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5uYW1lIHx8IHNjaGVtYS5sYWJlbCB8fCBzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMocGFuZWxzKVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEuY29tcG9uZW50LCBuYW1lLCBjaGlsZHJlbiwgMClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIGNoaWxkcmVuLCAxKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShmb3JtKSB7XG4gIGZvcm0gPSBhd2FpdCByZXNvbHZlU2NoZW1hKGZvcm0sIHRydWUpXG4gIGlmICghaXNGb3JtKGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKGZvcm0pfSdgKVxuICB9XG4gIGlmIChmb3JtKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhmb3JtKVxuICB9XG4gIHJldHVybiBmb3JtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsXG4gIHtcbiAgICB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICAgIG1vbnRoID0gZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheSA9IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXIgPSBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gICAgbWludXRlID0gZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kID0gZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQgPSBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG4gIH0gPSB7fVxuKSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYXJndW1lbnRzWzBdLCAxMClcbiAgfVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCJcbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jYWxlbmRhclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG5cbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgei1pbmRleDogMTAwMFxuXG4gIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNylcbiAgICAgIGhlaWdodDogJGlucHV0LWhlaWdodFxuICAgICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweClcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnRcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXlcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlXG4gICAgICAmLFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGNvbG9yOiB3aGl0ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheVxuICAgICAgY29sb3I6ICM5OTlcblxuICAuZGl0by1jYWxlbmRhci1tb250aHMsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgc3BhblxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpXG4gICAgICBtYXJnaW46IDAuNWVtIDBcblxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpXG5cbiAgLmRpdG8tY2FsZW5kYXIgYSxcbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW5cbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBhXG4gICAgICBwYWRkaW5nOiAwIDAuMmVtXG5cbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudFxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcblxuICAuZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIsXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIEBleHRlbmQgJWlucHV0LWhlaWdodFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHRleHQtYWxpZ246IGNlbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGVcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgPiBzcGFuXG4gICAgICBtYXJnaW46IGF1dG9cbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBhXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgJjpob3ZlclxuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgd2lkdGg6IDUlXG4gICAgbWluLXdpZHRoOiAyZW1cbiAgICBtYXgtd2lkdGg6IDNlbVxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBmb250LXNpemU6IDEuMjVlbVxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXZcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuSdcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8KrJ1xuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuidcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8K7J1xuXG4gIC5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheVxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAnTm93J1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50VmFsdWU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWwgfHwgbmV3IERhdGUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiBtb250aCA9PT0gdGhpcy52YWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6XG4gICAgICAgICAgdGhpcy52YWx1ZSAmJiB5ZWFyID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUsIHN0YXRlLCBjb3B5ID0gZmFsc2UpIHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gJ2Rpc2FibGVkJykge1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0pXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKGRhdGUsIHsgeWVhciwgbW9udGgsIGRheSB9KSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBob3IsIHZlciwgZW50ZXIgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50TW9kZSwgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoaG9yIHx8IHZlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIGhvciArIHZlciAqIDdcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgaG9yICsgdmVyICogNlxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgaG9yICsgdmVyICogNVxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLnZhbHVlKSA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSkgPyAndG9kYXknXG4gICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCdcbiAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSkgPyAnY3VycmVudCdcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2FzcydcblxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gIC5kaXRvLXRyaWdnZXItZGlzYWJsZWRcbiAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgKlxuICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnRcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjpmb2N1c1xuICAgICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgLmRpdG8tcG9wdXBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB0b3A6IDBcbiAgICBsZWZ0OiAwXG4gICAgei1pbmRleDogMTAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0Q2hpbGRcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuXG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGUtcG9zaXRpb24nLCB7XG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHBvcHVwLFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucG9wdXBQbGFjZW1lbnRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWlucHV0XG4gIGlucHV0KFxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taW5wdXRcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGlucHV0XG4gICAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICAgIGFsbDogaW5oZXJpdFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgYm9yZGVyOiAwXG4gICAgICBtYXJnaW46IDBcbiAgICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgJGF0dHJzXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgIC4uLiRhdHRyc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBSZW1vdmUgJ2lucHV0JyBsaXN0ZW5lciBiZWNhdXNlIHdlJ3JlIGhhbmRsaW5nIGl0IHNlcGFyYXRlbHkgYmVsb3csXG4gICAgICAvLyBidXQgcGFzcyBvbiBhbGwgb3RoZXJzIHRvIHRoZSB3cmFwcGVkIG5hdGl2ZSBlbGVtZW50OlxuICAgICAgY29uc3QgeyBpbnB1dCwgLi4ubGlzdGVuZXJzIH0gPSB0aGlzLiRsaXN0ZW5lcnNcbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICAgIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgbWluLXdpZHRoOiAxMGVtXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgLmRpdG8tZGF0ZS1waWNrZXItcG9wdXBcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIGRhdGU6IHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pIHx8ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gIC8vIClcbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gICAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8gKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICApXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgd2lkdGg6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIG1heC13aWR0aDogMTYwcHhcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cblxuICAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHhcbiAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLmRpdG8taWNvbi10aW1lXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDdweFxuICAgICAgICBoZWlnaHQ6IDEwMCVcblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgZmxvYXQ6IGxlZnRcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItd2lkdGg6IDAgMXB4IDBcbiAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweClcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgJjpsYXN0LWNoaWxkXG4gICAgICBib3JkZXItcmlnaHQ6IDBcbiAgICB1bFxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuXG4gICAgICBvdmVyZmxvdy15OiBhdXRvXG4gICAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWFyZ2luOiAwXG4gICAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICBwYWRkaW5nOiAwIDE3cHggMCAwXG4gICAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICYgPiBsaVxuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAgICYuc2VsZWN0ZWQ6aG92ZXJcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICYuZGlzYWJsZWRcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgICAgICYuZGlzYWJsZWQ6aG92ZXJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHtcbiAgY29weURhdGUsIHNjcm9sbFRvLCBzZXRTZWxlY3Rpb24sIGdldEtleU5hdmlnYXRpb25cbn0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiAwLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuaG91cil9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5zZWNvbmQpfWBcbiAgICAgICAgOiAnJ1xuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgwKVxuICAgICAgfVxuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCB8fCBmb3JjZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IDMgKiB0aGlzLnNlbGVjdGlvblxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy4kcmVmcy5pbnB1dCwgc3RhcnQsIHN0YXJ0ICsgMikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChkdXJhdGlvbiA9IDEwMCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBGaXJzdCBhbmQgYWxzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpblxuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC8gKHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyA2KVxuICAgICAgICAgIHNjcm9sbFRvKHRhcmdldCwgTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpLCBkdXJhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXVt0aGlzLnNlbGVjdGlvbl1cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCB7IGhvciwgdmVyLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgICAgaWYgKGhvcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb24gKyBob3JcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyAyXG4gICAgICAgICAgICA6IHZhbHVlID4gMiA/IDBcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbc2VsZWN0ZWRdICsgdmVyXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRoaXMuJHJlZnNbc2VsZWN0ZWRdLmNoaWxkcmVuXG4gICAgICAgICAgdGhpc1tzZWxlY3RlZF0gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gdmFsdWUgKyBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWUgPj0gbGVuZ3RoID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvciB8fCB2ZXIgfHwgZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0cnVlKVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICByZWY9XCJwaWNrZXJcIlxuKVxuICAuZGl0by1waWNrZXJzKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICApXG4gICAgZGF0ZS1waWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICB0aW1lLXBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICA6c2hvdy5zeW5jPVwic2hvd1RpbWVcIlxuICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gICAgcmVmPVwicGlja2VyXCJcbiAgKVxuICAgIC5kaXRvLXBpY2tlcnMoXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICApXG4gICAgICBkYXRlLXBpY2tlcihcbiAgICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgICA6c2hvdy5zeW5jPVwic2hvd0RhdGVcIlxuICAgICAgICBAZm9jdXM9XCJkYXRlRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgKVxuICAgICAgdGltZS1waWNrZXIoXG4gICAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlclxuICAgIC5kaXRvLXBpY2tlcnNcbiAgICAgIEBleHRlbmQgJWlucHV0XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgICB3aWR0aDogNjAlXG4gICAgICBtaW4td2lkdGg6IDYuOWVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwXG4gICAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAgIHdpZHRoOiA0MCVcbiAgICAgIG1pbi13aWR0aDogNS40ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctbGVmdDogMFxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuICAvLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNhc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3NcbiAgLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4gIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbiAgQGVhY2ggJG5hbWUgaW4gJGljb25zXG4gICAgLmRpdG8taWNvbi0jeyRuYW1lfVxuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKHYtaWY9XCJ0b3RhbCA+IDBcIikge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICB8ICAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgICB0ZW1wbGF0ZSh2LWVsc2UpIDBcbiAgICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICAgIClcbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsXG4gICAgICArZWxsaXBzaXNcbiAgICAgIG1hcmdpbjogMCAwLjVlbVxuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHRcbiAgICAuZGl0by1idXR0b25cbiAgICAgIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwc1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgICAgJi1wcmV2LFxuICAgICAgJi1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tYXJyb3dcbiAgICAgICYtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuICAgICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICAgJi1lbGxpcHNpcy1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXNcbiAgICAgICAgJjpob3Zlcjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9uc1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgICAgJjpmb2N1c1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICY6YWN0aXZlXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuICAgICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmVcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgIHRoaXMuJGVtaXQoJ3NpemUtY2hhbmdlJywgdGhpcy5wYWdlLCBjdXJyZW50UGFnZVNpemUpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2tQYWdlKHBhZ2UpIHtcbiAgICAgIGlmIChwYWdlLmluZGV4ICYmICFwYWdlLmRpc2FibGVkICYmIHBhZ2UuaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UuaW5kZXhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGFnZUNsYXNzKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogcGFnZS5hY3RpdmVcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtwYWdlLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICB1cGRhdGVQYWdlUmFuZ2UoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgdG90YWwsIGN1cnJlbnRQYWdlU2l6ZSwgY3VycmVudFBhZ2UgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuICAgICAgY29uc3QgbnVtUGFnZXMgPSB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXN3aXRjaChcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIGlucHV0KFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9XCJpbnB1dFwiXG4gICAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXN3aXRjaFxuICAgIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAgIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy4gYHJlbWAgaXMgbmVlZGVkIGJlY2F1c2Ugd2VcbiAgICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAgIC0tc3dpdGNoLXdpZHRoOiA0cmVtXG4gICAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtXG4gICAgLS1zd2l0Y2gtbWFyZ2luOiAycHhcbiAgICAtLXN3aXRjaC1wYWRkaW5nOiAzcHhcbiAgICAtLXN3aXRjaC1zcGVlZDogMzAwbXNcbiAgICAtLWxhYmVsLW1hcmdpbjogMC41ZW1cblxuICAgIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKVxuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KVxuICAgIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JVxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIHdpZHRoOiB2YXIoLS13aWR0aClcbiAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgdG9wOiA1MCVcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKVxuICAgIGlucHV0XG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIC4zc1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgICBmb250LXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpXG4gICAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuICAgICAgYm9yZGVyLXJhZGl1czogMC41ZW1cbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZClcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24sXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICByaWdodDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZVxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICYuZGl0by1jaGVja2VkXG4gICAgICBpbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1vZmZzZXQpKVxuICAgICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgICAgcmlnaHQ6IHVuc2V0XG4gICAgJi5kaXRvLWRpc2FibGVkXG4gICAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWRcbiAgICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMudmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIGRpc2FibGVkLCAkYXR0cnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICRkdXJhdGlvbjogMC4xNXNcbiAgLmhlaWdodC1lbnRlci1hY3RpdmUsXG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAuaGVpZ2h0LWVudGVyLWFjdGl2ZVxuICAgIGFuaW1hdGlvbjogc2xpZGUtZW50ZXIgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgLmhlaWdodC1sZWF2ZS1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtZW50ZXIsXG4gIC5oZWlnaHQtbGVhdmUtdG9cbiAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIHJlbmRlcjogKGNyZWF0ZUVsZW1lbnQsIGNvbnRleHQpID0+IGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3RyYW5zaXRpb24nLFxuICAgIGNvbnRleHQucHJvcHMuZW5hYmxlZFxuICAgICAgPyB7XG4gICAgICAgIHByb3BzOiB7IG5hbWU6ICdoZWlnaHQnIH0sXG4gICAgICAgIG9uOiBldmVudHNcbiAgICAgIH1cbiAgICAgIDoge30sXG4gICAgY29udGV4dC5jaGlsZHJlblxuICApXG59XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG4vLyBGb3JjZSByZXBhaW50IHRvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHRyaWdnZXJlZCBjb3JyZWN0bHkuXG5jb25zdCBmb3JjZVJlcGFpbnQgPSBlbGVtZW50ID0+IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0XG5cbmNvbnN0IGV2ZW50cyA9IHtcbiAgYWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lcG91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogJ2F1dG8nIH0pKVxuICB9LFxuXG4gIGVudGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGg6IG51bGwsXG4gICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHk6IG51bGwsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSkpXG4gIH0sXG5cbiAgbGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tcm9vdFxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgIClcbiAgICBkaXRvLW1lbnVcbiAgICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICAgIGRpdG8taGVhZGVyKFxuICAgICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuICAgICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgICApXG4gICAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgICApXG4gICAgICAgICAgc3BhbiBMb2dpblxuICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taGVhZGVyXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGhlaWdodDogM2VtXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmdcbiAgICAgIHVsXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtXG4gICAgICAgICRhbmdsZTogMzNkZWdcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGNvbG9yOiAjOTk5XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICAgIHdpZHRoOiAxcHhcbiAgICAgICAgICBoZWlnaHQ6IDEuMmVtXG4gICAgICAgICAgcmlnaHQ6IC0xcHhcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya1xuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICB0b3A6IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3BcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBib3R0b206IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tXG4gICAgLmRpdG8tc3Bpbm5lclxuICAgICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXJcbiAgICAuZGl0by1kaXJ0eVxuICAgICAgJjphZnRlclxuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiA4cHhcbiAgICAgICAgaGVpZ2h0OiA4cHhcbiAgICAgICAgbWFyZ2luOiAycHhcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCVcbiAgICAuZGl0by1hY2NvdW50LFxuICAgIC5kaXRvLWxvZ2luXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogMFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tYWNjb3VudFxuICAgICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsc2VMb2FkZXIgZnJvbSAndnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSdcblxuY29uc3QgU3Bpbm5lciA9IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdzcGlubmVyJywgUHVsc2VMb2FkZXIpXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1oZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IFNwaW5uZXIub3B0aW9uc1xuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gIClcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIGEoXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgIClcbiAgICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDYW5jZWwgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgICA6aXM9XCJ0YWdcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gIClcbiAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgICApXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCB8fD0gJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcywgZ2V0UGFuZWxTY2hlbWFzLCBzZXREZWZhdWx0cywgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hJywge1xuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbWVudUhlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIGNvbnN0IHBhbmVscyA9IGdldFBhbmVsU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgICAgZm9yIChjb25zdCBwYW5lIG9mIHRoaXMucGFuZXMpIHtcbiAgICAgICAgcGFuZWxzLnB1c2goLi4ucGFuZS5wYW5lbFNjaGVtYXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGFuZWxzXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgIGNvbnN0IHRhYiA9IGN1cnJlbnRUYWIgJiYgdGhpcy5zaG91bGRSZW5kZXIodGhpcy50YWJzW2N1cnJlbnRUYWJdKVxuICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhYlxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXModGhpcy50YWJzKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFRhYiB9ID0gdGFiXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYilcbiAgICAgICAgICAgID8gZGVmYXVsdFRhYi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgLi4udGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuXG4gICAgICAvLyBzZXQgYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdHModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIG5hbWUsIGRhdGFbbmFtZV0pXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLiRzZXQocmVnaXN0cnksIHVpZCwgZW50cnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRkZWxldGUocmVnaXN0cnksIHVpZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICAgIDppbmxpbmVkPVwidHJ1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICApXG4gICAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gICAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gICAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IHRoaXMudGFiIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiXG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgZGl0by1sYWJlbChcbiAgICB2LWlmPVwibGFiZWxcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgZGl0by1lcnJvcnMoXG4gICAgOmVycm9ycz1cImVycm9yc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gICAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuICApXG4gICAgZGl0by1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICApXG4gICAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICAgIClcbiAgICBkaXRvLWVycm9ycyhcbiAgICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYW5lbFxuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmdcbiAgICAuZGl0by1wYW5lbC10aXRsZVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAuZGl0by1wYW5lbC1zY2hlbWFcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wOiAwXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgICAuZGl0by1vYmplY3RcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBsYWJlbFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIC5kaXRvLXBhbmVcbiAgICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgICAgLmRpdG8tY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IERpdG9Db21wb25lbnQsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIGRpdG8tcGFuZWwoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmVscyhcbiAgICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGlmIChkYXRhICYmIGlzU3RyaW5nKGRhdGEudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGxhYmVsaXplKGRhdGEudHlwZSksXG4gICAgICAgICAgICAgIHRleHQ6IGRhdGEubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuJHNldChcbiAgICAgICAgICB0aGlzLnNvdXJjZURhdGEsXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXksXG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIClcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnQgPyAnY3JlYXRlJyA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnQgPyAnc3VibWl0JyA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IGAuLi8ke2lkfWAsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1mb3JtLW5lc3RlZFxuICAgICYsXG4gICAgLmRpdG8tc2Nyb2xsXG4gICAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvRm9ybS5jb21wb25lbnQoJ2RpdG8tZm9ybS1uZXN0ZWQnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICB8IHt7IGVycm9yIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1lcnJvcnMoXG4gICAgdi1pZj1cImVycm9yc1wiXG4gIClcbiAgICB1bFxuICAgICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICB2dWUtZHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1pdGVtKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgICB9YFxuICAgIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIClcbiAgICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgICApXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICApXG4gICAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICAgIClcbiAgICAgICAgdGRcbiAgICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIClcbiAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gICAgKVxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNoZWNrYm94XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIG5vcm1hbGl6ZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHxcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYXN5bmNEYXRhRW50cmllcywgbmFtZSwge1xuICAgICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemUsIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+IHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJcbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLWNoZWNrYm94ZXMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcHBlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZXBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAndnVlLWNvbG9yJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgICApXG4gICAgdGFibGUuZGl0by10YWJsZShcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgICB9YFxuICAgIClcbiAgICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgICB0Zm9vdChcbiAgICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgICAgKVxuICAgICAgICB0clxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlICYmIHRoaXMudG90YWwgPiB0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQXJyYXksIGFzQXJyYXksIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5pZiAoaW1wb3J0Lm1ldGEuaG90KSB7XG4gIC8vIFdvcmthcm91bmQgZm9yIGEgc3RyYW5nZSBWaXRlIGhvdC1yZWxvYWRpbmcgYnVnLCBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9pc3N1ZXMvNzgzOSNpc3N1ZWNvbW1lbnQtMTM0MDEwOTY3OVxuICBpbXBvcnQubWV0YS5ob3Qub24oJ3ZpdGU6YmVmb3JlVXBkYXRlJywgb25CZWZvcmVWaXRlVXBkYXRlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBhcGkudXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSBuZXcgVnVlKHtcbiAgICAgIGVsLFxuICAgICAgcm91dGVyOiBuZXcgVnVlUm91dGVyKHtcbiAgICAgICAgbW9kZTogJ2hpc3RvcnknLFxuICAgICAgICBiYXNlOiBkaXRvLmJhc2UsXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSksXG4gICAgICBjb21wb25lbnRzOiB7IERpdG9Sb290IH0sXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSByb290IGNvbnRhaW5lcidzIGlkLCBhcyByZXF1aXJlZCBieSBob3QtcmVsb2FkaW5nOlxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGlkOiBlbC5pZFxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgICAgLi4udHlwZXNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0pYClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnltb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczogaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICA/ICdpbmNsdWRlJ1xuICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gICkudG9TdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBvbkJlZm9yZVZpdGVVcGRhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgLy8gUGF0Y2ggYGV2ZW50LnVwZGF0ZXNgIHRvIHJlbW92ZSB0aGUgdmVyc2lvbiBxdWVyeSBwYXJhbWV0ZXIgZnJvbSBwYXRoLFxuICAgIC8vIHNvIHRoYXQgdGhlIHVwZGF0ZSBnZXRzIHBpY2tlZCB1cC5cbiAgICAvLyBXaHkgdGhlIHN0b3JlZCBgZGVwc2AgYXJlIG1pc3NpbmcgdGhpcyBwYXJ0IG9mIHRoZSBVUkwsIEkgY2Fubm90IHNheeKAplxuICAgIGNvbnN0IHVwZGF0ZXMgPSBbXVxuICAgIGZvciAoY29uc3QgdXBkYXRlIG9mIGV2ZW50LnVwZGF0ZXMpIHtcbiAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUsIHtcbiAgICAgICAgLi4udXBkYXRlLFxuICAgICAgICBhY2NlcHRlZFBhdGg6IHVwZGF0ZS5hY2NlcHRlZFBhdGgucmVwbGFjZSgvXFw/dj1bMC05YS1mXSsmLywgJz8nKVxuICAgICAgfSlcbiAgICB9XG4gICAgZXZlbnQudXBkYXRlcyA9IHVwZGF0ZXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFwcFN0YXRlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJjb250ZXh0cyIsImdldCIsImNvbnRleHQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJvYmplY3QiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsIl9hIiwicGFyZW50SXRlbSIsIm9wdGlvbnMiLCJsb2NhdGlvbiIsInJlc291cmNlIiwiRW1pdHRlck1peGluIiwiZXZlbnQiLCJjYWxsYmFjayIsImlzQXJyYXkiLCJldiIsImlzUGxhaW5PYmplY3QiLCJldmVudHMiLCJjYWxsYmFja3MiLCJvbiIsImFyZ3MiLCJlbnRyeSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0b0Jvb2xlYW4iLCJ0b051bWJlciIsInRvU3RyaW5nIiwidG9EYXRlIiwidG9BcnJheSIsImFzQXJyYXkiLCJ0b09iamVjdCIsInRvUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwidHlwZSIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwiaGFzUmVzb3VyY2UiLCJzY2hlbWEiLCJnZXRSZXNvdXJjZSIsImRlZmF1bHRzIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5IiwiRGl0b01peGluIiwidWlkIiwia2V5T3JEYXRhUGF0aCIsImRlZiIsImNvbnZlcnRlZCIsIm5hbWUiLCJsYWJlbGl6ZSIsImJ1dHRvbiIsInZlcmIiLCJkcmFnZ2FibGUiLCJmYWxsYmFjayIsInF1ZXJ5IiwiY29tcG9uZW50cyIsImJ1dHRvbnMiLCJzZXR0aW5ncyIsInJlamVjdCIsIkRpdG9Db21wb25lbnQiLCJ1cmwiLCJtZXRob2QiLCJpbnRlcm5hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiZm9ybWF0IiwiYSIsImJvZHkiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJnZXRDb250ZXh0IiwicGFyYW1zIiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIl9iIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJmb3JFYWNoU2NoZW1hIiwic2NoZW1hcyIsImZvckVhY2hTY2hlbWFDb21wb25lbnQiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJzb21lU2NoZW1hQ29tcG9uZW50IiwiaXNTY2hlbWEiLCJpc0Zvcm0iLCJpc1ZpZXciLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIml0ZW0iLCJyZXNvbHZlUGFuZWxzIiwicGFuZWxzIiwicHJvY2Vzc1ZpZXciLCJhcGkiLCJyb3V0ZXMiLCJjaGlsZHJlbiIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsInByb2Nlc3NDb21wb25lbnQiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsImxldmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9taXNlcyIsInByb2Nlc3NGb3JtcyIsImZvcm0iLCJmb3JtcyIsInJlc29sdmVGb3JtIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3U2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJ2aWV3Q29tcG9uZW50IiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsImNvbXB1dGVWYWx1ZSIsInJvb3REYXRhIiwiY29tcHV0ZSIsIlZ1ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImRlc2NyaXB0aW9ucyIsImFycmF5IiwidG9TY2hlbWEiLCJjYW1lbGl6ZSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsIl9jIiwiZ2V0UGFuZWxTY2hlbWEiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJzY2hlbWFDb21wb25lbnQiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1JZCIsImdldEl0ZW1VaWQiLCJUeXBlTWl4aW4iLCJwYXJzZSIsImxhYmVsIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiYWRkIiwiZWxlbWVudCIsIm1peGlucyIsImNvbXAiLCJjdG9yIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInRvIiwiZnJvbSIsIm1hdGNoZWQiLCJpIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwidGVtcGxhdGVQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJyZW5kZXIiLCJfdm0iLCJfaCIsInN0YXRpY1JlbmRlckZucyIsIl9fdnVlMl9zY3JpcHQiLCJpc0xvYWRpbmciLCJjb3B5RGF0ZSIsImRhdGUiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwiX2QiLCJtaW51dGUiLCJfZSIsInNlY29uZCIsIl9mIiwibWlsbGlzZWNvbmQiLCJfZyIsImFkZEV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJzY3JvbGxUbyIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGVyVGljayIsInNldFNlbGVjdGlvbiIsImZpZWxkIiwic3RhcnQiLCJlbmQiLCIkZXZlbnQiLCJ3ZWVrZGF5Iiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwibmV3VmFsIiwib2xkVmFsIiwibW9kZSIsIm92ZXJyaWRlcyIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJzdGF0ZSIsImhvciIsInZlciIsImVudGVyIiwiY3VycmVudE1vZGUiLCJzdGFydFllYXIiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsInRvZGF5IiwiaXNEYXkiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImNsYXNzZXMiLCJzaG93IiwidHJpZ2dlciIsInBvcHVwIiwiZWwiLCJib3VuZHMiLCJ0cmlnZ2VyTGVmdCIsInRyaWdnZXJUb3AiLCJ0cmlnZ2VyV2lkdGgiLCJ0cmlnZ2VySGVpZ2h0IiwicG9wdXBXaWR0aCIsInBvcHVwSGVpZ2h0IiwicGFydDEiLCJwYXJ0MiIsIndpbldpZHRoIiwid2luSGVpZ2h0IiwibGVmdCIsInRvcCIsInRyaWdnZXJCb3VuZHMiLCIkJGEiLCIkJGVsIiwiJCRjIiwiJCR2IiwiJCRpIiwic2l6ZSIsInRpdGxlIiwiZGlzYWJsZWQiLCJyZWFkb25seSIsInBsYWNlaG9sZGVyIiwiYXV0b2NvbXBsZXRlIiwiJGF0dHJzIiwiaW5wdXQiLCJnZXRMZW5ndGgiLCJUcmlnZ2VyIiwiQ2FsZW5kYXIiLCJJbnB1dEZpZWxkIiwiZGVmYXVsdEZvcm1hdHMiLCJmb3JjZSIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJzZWxlY3RlZCIsImxlbmd0aCIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwicGFnZSIsInBhZ2VTaXplIiwiY3VycmVudFBhZ2VTaXplIiwic2hvd1ByZXYiLCJzaG93TmV4dCIsInRvdGFsIiwiY3VycmVudFBhZ2UiLCJzaG93TGVuZ3RoIiwibnVtUGFnZXMiLCJwYWdlUmFuZ2UiLCJjaGVja2VkIiwidW5jaGVja2VkIiwiY3JlYXRlRWxlbWVudCIsInNldFN0eWxlIiwic3R5bGUiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsIkRvbU1peGluIiwicmVtb3ZlIiwiaGFuZGxlciIsImVyciIsInRleHQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsInJvdXRlIiwiU3Bpbm5lciIsIlB1bHNlTG9hZGVyIiwiY29sb3IiLCJwcm9wcyIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiZGlhbG9nRGF0YSIsImNvbnRlbnQiLCJhc09iamVjdCIsInByZWZpeCIsInN1ZmZpeCIsIkl0ZW1NaXhpbiIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwiY29sdW1ucyIsImhhZExhYmVsIiwiVHJhbnNpdGlvbkhlaWdodCIsInBhbmUiLCJjdXJyZW50VGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiZGF0YVBhdGhPck5hbWUiLCJleHBhbmQiLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfcmVmIiwibmVzdGVkRGF0YVBhdGgiLCJzdG9yZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJjb250YWluZXJDbGFzcyIsImJhc2lzIiwiZ3JvdyIsInNocmluayIsImJhc2lzSXNBdXRvIiwidGFiU2NoZW1hIiwiYnV0dG9uU2NoZW1hIiwiYnV0dG9uRGF0YVBhdGgiLCJub2RlIiwiY2FwaXRhbGl6ZSIsImNsaXBib2FyZERhdGEiLCJwYXN0ZSIsInJlcG9ydCIsImpzb24iLCJkZWluZGVudCIsIiRzY2hlbWEiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwibWVyZ2UiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsIm5ld1ZhbHVlIiwib2xkVmFsdWUiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJzY29wZSIsIm5hdmlnYXRlIiwiUGFnaW5hdGlvbiIsIk9yZGVyZWRNaXhpbiIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwib2Zmc2V0IiwiVnVlRHJhZ2dhYmxlIiwiY2hpbGRyZW5TY2hlbWEiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJjb2x1bW4iLCJvcmRlciIsImVzY2FwZUh0bWwiLCJoIiwiVHlwZUNvbXBvbmVudCIsImRlZmluaXRpb24iLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbkJsdXIiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiZm9jdXNlZCIsIkRhdGVUaW1lUGlja2VyIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImNvbGxhcHNpYmxlIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJyb3V0ZUNvbXBvbmVudCIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiZ2V0RmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5IiwicGFyc2VGaWx0ZXJzRGF0YSIsImdldEZpbHRlcnNDb21wb25lbnRzIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsImdldExpc3RDb21wb25lbnQiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJpY29uIiwiaXNBY3RpdmUiLCJvbkNsaWNrIiwiRWRpdG9yQ29udGVudCIsIkVkaXRvck1lbnVCYXIiLCJJY29uIiwiY29tbWFuZCIsIm1hcmtCdXR0b25zIiwiYmFzaWNOb2RlQnV0dG9ucyIsIm90aGVyTm9kZUJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJnZXRWYWx1ZSIsIm9uVXBkYXRlIiwiZ2V0SFRNTCIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsIm1vdXNlbW92ZSIsImF0dHJzIiwiZGlhbG9nQ29tcG9uZW50IiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImFkZEJ1dHRvbiIsImlnbm9yZUFjdGl2ZSIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJ1bmRlcnNjb3JlIiwiYXR0ciIsIk1hcmsiLCJ0b2dnbGVNYXJrIiwiTGluayIsImRvbSIsIlZ1ZU11bHRpc2VsZWN0Iiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCIkJHNlbGVjdGVkVmFsIiwibyIsInZhbCIsIm9wdCIsIlN3aXRjaEJ1dHRvbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJmaWxlIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJmaWxlcyIsInVwbG9hZCIsImxvZ2dlZERlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZSIsIlZ1ZVJvdXRlciIsIlZ1ZU1vZGFsIiwiVnVlTm90aWZpY2F0aW9ucyIsIkRpdG9BZG1pbiIsImRpdG8iLCJ2aWV3cyIsImdldEFwaVVybCIsImlzQXBpVXJsIiwidXNlcnMiLCJwYXJlbnRQYXRoIiwiRGl0b1Jvb3QiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiZm9ybWF0UXVlcnkiLCJiYXNlVXJsIiwicmVs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QStFLEVBQUEsWUFBQTtBQUFBLFFBQ0EsT0FBQUEsRUFBQSxTQUFBO0FBQUEsUUFDQSxLQUFBQSxFQUFBLFFBQUE7QUFBQSxNQUNBLENBQUEsSUFFQSxLQUFBLGVBQUFBLEdBRUEsS0FBQSxNQUFBLFNBQUEsS0FBQSxZQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsWUFBQUUsR0FBQTtBQUNBLFdBQUEsUUFBQSxLQUFBLEdBR0EsS0FBQSxRQUFBLEVBQUEsT0FBQUEsR0FBQSxLQUFBLEVBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUFELEdBQUE7QUFDQSxXQUFBLFFBQUEsT0FBQSxHQUNBLEtBQUEsUUFBQSxFQUFBLE1BQUFBLEdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBQSxHQUFBQyxHQUFBO0FBQ0EsYUFBQUEsSUFBQSxNQUNBRCxLQUNBQyxJQUFBLEtBQ0FBLElBQUEsTUFDQUQsS0FDQUMsSUFBQSxLQUVBLEVBQUEsTUFBQUQsR0FBQSxPQUFBQyxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQUYsR0FBQSxFQUFBLE1BQUFDLEdBQUEsT0FBQUMsR0FBQSxLQUFBQyxFQUFBLEdBQUE7QUFDQSxhQUFBSCxFQUFBLGVBQUEsS0FBQSxRQUFBO0FBQUEsUUFDQSxNQUFBQyxLQUFBO0FBQUEsUUFDQSxPQUFBQyxLQUFBO0FBQUEsUUFDQSxLQUFBQyxLQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQUgsR0FBQTtBQUNBLFlBQUFDLElBQUEsS0FBQSxxQkFBQUQsRUFBQSxZQUFBLENBQUE7QUFDQSxhQUFBLEdBQUFDLFlBQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBQSxHQUFBQyxHQUFBO0FBQ0EsYUFBQSxJQUFBLEtBQUFELEdBQUFDLElBQUEsR0FBQSxDQUFBLEVBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHFCQUFBRCxHQUFBO0FBRUEsYUFBQSxDQUFBLEdBREFBLEVBQUEsU0FBQSxFQUNBLE1BQUEsR0FBQSxFQUFBO0FBQUEsSUFD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QSxFQUNaLEdBQUUsQ0FBQ0EsRUFBSSxZQUFZQSxFQUFJLEdBQUcsT0FBTyxJQUFJQSxFQUFJLEdBQUUsQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzNELEdBQ0lFLEtBQWtCLENBQUU7QUNnQnhCLE1BQUFDLEtBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxRQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsUUFBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFNBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLFdBQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLGFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLHNCQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxXQUFBLEtBQUE7QUFBQSxNQUNBLGdCQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsZUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLHlCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLFlBQUFxRCxJQUFB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QUEsVUFBQTtBQUFBLElBQ0EsY0FBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxjQUFBLEtBQUE7QUFBQSxNQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGdCQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQWhULEdBQUEsS0FBQSxjQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxRQUNBLE1BQUEsS0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLE1BQ0EsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLE1BQUFzUCxHQUFBQyxHQUFBO0FBQ0EsTUFBQSxDQUFBRCxLQUFBLENBQUFDLE1BQ0EsS0FBQSxlQUFBRDtBQUFBLElBRUE7QUFBQSxJQUVBLGFBQUE1QixHQUFBO0FBQ0EsTUFBQSxDQUFBQSxLQUFBLENBQUEsS0FBQSxVQUNBLEtBQUEsVUFBQSxJQUNBLEtBQUEsTUFBQSxTQUFBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsS0FBQW1ELEdBQUE7QUFDQSxXQUFBLFlBQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQXZCLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsS0FDQSxLQUFBLE1BQUEsZUFBQUQsQ0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFFBQUFBLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsS0FDQSxLQUFBLE1BQUFELElBQUEsVUFBQSxNQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLElBQUEsUUFBQSxNQUFBO0FBQ0EsTUFBQSxLQUFBLFlBQ0EsS0FBQSxVQUFBLElBQ0Es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SUFDQSxnQkFBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxjQUFBLEtBQUE7QUFBQSxNQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLE1BQ0EsV0FBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGdCQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQ0EsR0FDQSxLQUFBLFFBQUEsS0FBQSxJQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLE1BQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUNBLEtBQUEsZ0JBSUF0RixHQUFBLElBQUEsUUFBQSxFQUFBLE1BQUEsR0FBQSxRQUFBLEdBQUEsUUFBQSxHQUFBLGFBQUEsRUFBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsTUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBLFNBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBSyxHQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsTUFBQUEsR0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQUEsTUFDQSxNQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUEsV0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUFFLEdBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxRQUFBQSxHQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsWUFBQSxXQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQUUsR0FBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLFFBQUFBLEdBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLE1BQUFvQixHQUFBQyxHQUFBO0FBQ0EsTUFBQSxDQUFBRCxLQUFBLENBQUFDLE1BQ0EsS0FBQSxlQUFBRDtBQUFBLElBRUE7QUFBQSxJQUVBLGFBQUE1QixHQUFBO0FBQ0EsTUFBQSxDQUFBQSxLQUFBLENBQUEsS0FBQSxVQUNBLEtBQUEsVUFBQSxJQUNBLEtBQUEsTUFBQSxTQUFBQSxDQUFBLEdBQ0EsS0FBQSxVQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsYUFBQTtBQUFBLElBRUEsV0FBQTtBQUFBLElBRUEsS0FBQW1ELEdBQUE7QUFDQSxXQUFBLFlBQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQXZCLEdBQUFDLEdBQUE7QUFDQSxNQUFBRCxNQUNBLEtBQUEsZ0JBQUEsR0FDQSxLQUFBLFVBQUEsQ0FBQSxJQUVBLENBQUFBLEtBQUEsQ0FBQUMsS0FDQSxLQUFBLE1BQUEsZUFBQUQsQ0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFFBQUFBLEdBQUFDLEdBQUE7QUFDQSxNQUFBLENBQUFELEtBQUEsQ0FBQUMsS0FDQSxLQUFBLE1BQUFELElBQUEsVUFBQSxNQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLElBQUEsUUFBQSxNQUFBO0FBQ0EsTUFBQSxLQUFBLFlBQ0EsS0FBQSxVQUFBLElBQ0EsS0FBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsSUFFQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsUUFBQTVVLEdBQUE7QUFDQSxjQUFBLE1BQUFBLEdBQUEsTUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQStVLEdBQUE7QUFDQSxXQUFBLGVBQUFoQyxHQUFBLEtBQUEsYUFBQTtBQUFBLFFBQ0EsR0FBQWdDO0FBQUEsUUFDQSxhQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUF3RCxJQUFBLElBQUE7QUFDQSxVQUFBLEtBQUEsYUFBQUEs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RUEsT0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsTUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFlBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxRQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE1BQUFSLEdBQUEsS0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLE1BQ0EsYUFBQTtBQUFBLE1BQ0EsYUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxNQUFBMUQsR0FBQUMsR0FBQTtBQUNBLE1BQUEsQ0FBQUQsS0FBQSxDQUFBQyxNQUNBLEtBQUEsZUFBQUQ7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBNUIsR0FBQTtBQUNBLE1BQUEsQ0FBQUEsS0FBQSxDQUFBLEtBQUEsVUFDQSxLQUFBLFVBQUEsSUFDQSxLQUFBLE1BQUEsU0FBQUEsQ0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFFBQUE0QixHQUFBQyxHQUFBO0FBQ0EsTUFBQSxDQUFBRCxLQUFBLENBQUFDLEtBQ0EsS0FBQSxNQUFBRCxJQUFBLFVBQUEsTUFBQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLE1BQUEsS0FBQSxZQUNBLEtBQUEsVUFBQSxJQUNBLEtBQUEsTUFBQSxVQUFBLEtBQUEsWUFBQTtBQUFBLElBRUEs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LFVBQUE7QUFDQSxTQUFBLFNBQUEsUUFBQSxTQUFBLFNBQUEsaUJBR0EsS0FBQSxTQUFBLGtCQUFBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxNQUFBLFVBQUE7QUFHQSxTQUFBLE1BQUEsVUFBQTtBQUFBLE1BQ0EsT0FBQSxDQUFBdFosTUFBQTtBQUNBLFFBQUFBLEVBQUEsT0FBQSxRQUFBLGFBQUEsTUFDQSxLQUFBLFNBQUEsY0FBQTtBQUFBLE1BRUE7QUFBQSxNQUVBLE9BQUEsQ0FBQUEsTUFBQTtBQUNBLFFBQUFBLEVBQUEsU0FBQSxVQUNBLEtBQUEsU0FBQSxjQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUNBLFFBQUE7QUFDQSxXQUFBLGFBQUEsSUFDQSxNQUFBLEtBQUEsY0FDQSxNQUFBLEtBQUEsYUFBQSxJQUVBLE1BQUEsS0FBQSxNQUFBO0FBQUEsSUFFQSxTQUFBeVosR0FBQTtBQUNBLGNBQUEsTUFBQUEsQ0FBQTtBQUFBLElBQ0E7QUFDQSxTQUFBLGFBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQXJYLElBQUEsUUFBQSxPQUFBNFUsR0FBQSxNQUFBMEMsRUFBQSxJQUFBLElBQUE7QUFDQSxNQUFBMUMsVUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQTVVLE1BQUEsaUJBQ0FzWCxJQUFBLE1BQ0E1WCxFQUFBNFgsQ0FBQSxFQUFBLEtBQUEsVUFBQSxRQUNBLFFBQUEsZUFBQSxNQUFBO0FBQ0EsWUFBQUMsSUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQXZYLE1BQUE7QUFFQSxjQUFBdVgsR0FBQUMsR0FBQUYsQ0FBQSxDQUFBO0FBQ0EsWUFBQSxFQUFBLGVBQUFHLElBQUEsR0FBQSxJQUFBLEtBQUE7QUFDQSxVQUFBQSxHQUFBO0FBS0EsY0FBQSxFQUFBLGdCQUFBQyxJQUFBLEdBQUEsSUFBQUQsR0FDQXhHLEtBQUEsS0FBQXFHLEVBQUEsU0FBQTFDLEVBQUEsVUFBQThDO0FBQ0EsYUFBQSxRQUFBLEVBQUEsTUFBQTFYLEdBQUEsT0FBQTRVLEdBQUEsTUFBQTBDLEdBQUEsVUFBQXJHLEdBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEscUJBQUE7QUFDQSxXQUFBLGNBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBbEIsR0FBQTtBQUNBLFdBQUEsZ0JBQUFBLElBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsUUFBQTs7QUFDQSxXQUFBLGFBQUE7QUFDQSxZQUFBO0FBQUEsUUFDQSxzQkFBQTRIO0FBQUEsUUFDQSxvQkFBQUM7QUFBQSxNQUNBLElBQUEsS0FBQSxRQUFBLFNBQUEsQ0FBQSxHQUNBQyxJQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxXQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLEdBQUFGO0FBQUEsUUFDQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFVBQ0EsUUFBQSxDQUFBO0FBQUEsVUFDQSxPQUFBLEVBQUEsTUFBQSxTQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUNBLFVBQUFFO0FBQ0EsWUFBQTtBQUNBLGdCQUFBN1YsSUFBQSxNQUFBLEtBQUEsWUFBQTtBQUFBLFlBQ0EsVUFBQSxLQUFBLElBQUEsTUFBQTtBQUFBLFlBQ0EsTUFBQTZWO0FBQUEsWUFDQSxVQUFBO0FBQUEsVUFDQSxDQUFBO0FBQ0EsVUFBQUQsSUFDQSxTQUFBLFFBQUFBLENBQUEsS0FFQSxLQUFBLFFBQUE1VixFQUFBLEtBQUEsSUFBQSxHQUNBLE1BQUEsS0FBQSxhQUFBO0FBQUEsUUFFQSxTQUFBcVYsR0FBQTtBQUNBLGdCQUFBelksS0FBQStHLEtBQUFySSxJQUFBK1osRUFBQSxhQUFBLGdCQUFBL1osRUFBQSxTQUFBLGdCQUFBcUksRUFBQTtBQUNBLGVBQUEsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQS9HLEtBQUF5WTtBQUFBLFVBQ0EsQ0FBQSxHQUNBelksS0FDQSxRQUFBLE1BQUF5WSxHQUFBQSxFQUFBLFFBQUEsR0FFQSxLQUFBLE1BQUE7QUFBQSxRQUNBO0FBQUEsSUFFQTtBQUFBLElBRUEsZUFBQTtBQUNBLGFBQUEsS0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFNBQUE7QUFDQSxVQUFBO0FBS0EsU0FKQSxNQUFBLEtBQUEsWUFBQTtBQUFBLFVBQ0EsVUFBQSxLQUFBLElBQUEsTUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFFBQ0EsQ0FBQSxHQUNBLEtBQUEsWUFDQSxLQUFBLFFBQUEsSUFBQSxHQUNBLEtBQUEsYUFBQTtBQUFBLE1BRUEsU0FBQUEsR0FBQTtBQUNBLGdCQUFBLE1BQUFBLENBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxZQUFBO0FBQ0EsVUFBQVMsSUFBQTtBQUNBLFVBQUE7QUFLQSxRQUFBQSxLQUpBLE1BQUEsS0FBQSxZQUFBO0FBQUEsVUFDQSxVQUFBLEtBQUEsSUFBQSxNQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsUUFDQSxDQUFBLEdBQ0EsS0FBQSxRQUFBO0FBQUEsTUFDQSxTQUFBVCxHQUFBO0FBQ0EsYUFBQSxPQUFBO0FBQUEsVUFDQSxNQUFBO0FBQUEsVUFDQSxPQUFBO0FBQUEsVUFDQSxNQUFBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0E7QUFDQSxrQkFBQSxRQUFBUyxDQUFBLEdBQ0FBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQUEsR0FBQTtBQUNBLFdBQUEsU0FBQSxPQUNBQSxLQUNBLE9BQUEsZUFBQUEsR0FBQXZKLEdBQUEsU0FBQSxHQUdBdUosTUFDQSxLQUFBLGdCQUFBLENBQUEsR0FDQSxLQUFBLGFBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBLGFBQUE7QUFDQSxNQUFBLE1BQUEsS0FBQSxVQUFBLEtBQ0EsTUFBQSxLQUFBLE1BQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBLGVBQUE7QUFDQSxVQUFBO0FBQ0EsYUFBQSxnQkFBQSxNQUFBOVAsR0FBQSxLQUFBLGVBQUE7QUFBQSxNQUNBLFNBQUFwSixHQUFBO0FBQ0EsZUFBQUEsRUFBQSxXQUNBLFFBQUEsTUFBQUEsQ0FBQSxHQUVBLEtBQUEsTUFBQTtBQUFBLE1BQ0E7QUFFQSxZQUFBNEosSUFBQSxDQUFBLEdBQ0FPLElBQUEsQ0FBQTtBQUNBLGlCQUFBLENBQUEvSCxHQUFBWixDQUFBLEtBQUEsT0FBQSxRQUFBLEtBQUEsYUFBQTtBQUNBLFFBQUEySSxFQUFBLEtBQUFULEdBQUF5UCxJQUFBLEtBQUEsS0FBQTNYLEdBQUFZLEdBQUF3SCxDQUFBLENBQUE7QUFFQSxZQUFBLFFBQUEsSUFBQU8sQ0FBQTtBQUNBLGlCQUFBaVAsS0FBQXhQO0FBQ0EsYUFBQSxRQUFBLFNBQUF3UCxDQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3UkEsSUFBSXRJLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsTUFBTSxDQUFDeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU07QUFBQSxJQUMzRCxhQUFhO0FBQUEsRUFDZCxHQUFFeUMsRUFBSSxHQUFHQSxFQUFJLE9BQU8sU0FBVXBHLEdBQU07QUFDbkMsV0FBTzJELEVBQUcsTUFBTSxDQUFDeUMsRUFBSSxhQUFhcEcsQ0FBSSxJQUFJMkQsRUFBRyxlQUFlO0FBQUEsTUFDMUQsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ0wsSUFBTSxJQUFJM0QsRUFBSztBQUFBLFFBQ2YsZ0JBQWdCO0FBQUEsTUFDakI7QUFBQSxJQUNQLEdBQU8sQ0FBQ29HLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFNBQVNwRyxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSW9HLEVBQUksR0FBSSxDQUFBLEdBQUcsQ0FBQztBQUFBLEVBQzNELENBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNULEdBQ0lFLEtBQWtCLENBQUU7QUM2QnhCLE1BQUFDLEtBQUFuTyxFQUFBLFVBQUEsYUFBQSxDQUFBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hEQSxJQUFJK04sS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsWUFBWSxDQUFDO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxPQUFPeUMsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUN6QyxFQUFHLE9BQU87QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLE9BQU8sQ0FBQ3lDLEVBQUksY0FBY0EsRUFBSSxhQUFhO0FBQUEsRUFDL0MsQ0FBRyxHQUFHekMsRUFBRyxPQUFPO0FBQUEsSUFDWixhQUFhO0FBQUEsSUFDYixPQUFPLENBQUN5QyxFQUFJLGNBQWNBLEVBQUksYUFBYTtBQUFBLEVBQy9DLENBQUcsR0FBR3pDLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsT0FBTyxDQUFDeUMsRUFBSSxjQUFjQSxFQUFJLGFBQWE7QUFBQSxFQUM1QyxDQUFBLENBQUMsQ0FBQztBQUNMLEdBQ0lFLEtBQWtCLENBQUU7QUNkeEIsTUFBQUMsS0FBQTtBQUFBLEVBRUEsTUFBQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsU0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFDQSxNQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxRQUNBLGlCQUFBLEtBQUE7QUFBQSxRQUNBLE9BQUEsS0FBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxRQUNBLGNBQUEsS0FBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsZUFBQTtBQUFBLFFBQ0EsbUJBQUE7QUFBQSxRQUNBLHlCQUFBO0FBQUEsUUFDQSx5QkFBQTtBQUFBLFFBQ0EsbUJBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxlQUFBO0FBQUEsUUFDQSxnQkFBQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLGVBQUE7QUFBQSxRQUNBLGdCQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsZUFBQTtBQUFBLFFBQ0EsZ0JBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0RBLElBQUlKLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxNQUFNeUMsRUFBSSxHQUFHQSxFQUFJLE9BQU8sU0FBVXRTLEdBQVdsQixHQUFPO0FBQ3pELFdBQU8rUSxFQUFHLE1BQU0sQ0FBQy9RLE1BQVV3VCxFQUFJLE1BQU0sU0FBUyxJQUFJLENBQUN6QyxFQUFHLFFBQVE7QUFBQSxNQUM1RCxPQUFPeUMsRUFBSSxtQkFBbUJ0UyxDQUFTO0FBQUEsSUFDeEMsR0FBRSxDQUFDc1MsRUFBSSxHQUFHQSxFQUFJLEdBQUd0UyxFQUFVLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJNlAsRUFBRyxlQUFlO0FBQUEsTUFDOUQsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLFFBQ0wsSUFBTTdQLEVBQVU7QUFBQSxNQUNqQjtBQUFBLElBQ1AsR0FBTyxDQUFDNlAsRUFBRyxRQUFRO0FBQUEsTUFDYixPQUFPeUMsRUFBSSxtQkFBbUJ0UyxDQUFTO0FBQUEsSUFDeEMsR0FBRSxDQUFDc1MsRUFBSSxHQUFHQSxFQUFJLEdBQUd0UyxFQUFVLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQUEsRUFDcEQsQ0FBRyxHQUFHLENBQUMsR0FBR3NTLEVBQUksWUFBWXpDLEVBQUcsV0FBVztBQUFBLElBQ3BDLGFBQWE7QUFBQSxFQUNkLENBQUEsSUFBSXlDLEVBQUksR0FBSSxDQUFBLEdBQUcsQ0FBQyxHQUFHQSxFQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztBQUMzQyxHQUNJRSxLQUFrQixDQUFFO0FDOER4QixNQUFBb0ksS0FBQXRXLEVBQUEsVUFBQSxXQUFBdVcsRUFBQSxHQUdBcEksS0FBQW5PLEVBQUEsVUFBQSxlQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsU0FBQXNXLEdBQUE7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFFBQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxnQkFBQTtBQUFBLFFBQ0EsQ0FBQTVhLE1BQUEsQ0FBQSxDQUFBQSxFQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsVUFBQTtBQUFBLE1BQ0EsTUFBQXNYLElBQUE7QUFBQSxNQUNBLE9BQUF3RCxJQUFBO0FBQUEsSUFDQSxJQUFBLEtBQUEsV0FBQSxDQUFBLEdBQ0EsRUFBQSxPQUFBQyxNQUFBSCxHQUFBO0FBQ0EsSUFBQUcsRUFBQSxLQUFBLFVBQUF6RCxHQUNBeUQsRUFBQSxNQUFBLFVBQUFEO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsbUJBQUE5YSxHQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsY0FBQUEsRUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDN0hlZ2IsS0FBQTtBQUFBLEVBQ2IsUUFBUSxDQUFDbkIsQ0FBUTtBQUFBLEVBRWpCLE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxVQUFVO0FBQUEsUUFDUixNQUFNO0FBQUEsUUFDTixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsVUFDTixXQUFXLE1BQU07QUFDZixpQkFBSyxnQkFBZ0IsRUFBSyxHQUMxQixLQUFLLFNBQVMsU0FBUyxPQUFRO0FBQUEsVUFDaEM7QUFBQSxVQUVELFNBQVMsTUFBTTtBQUNiLFlBQUksS0FBSyxrQkFBa0IsSUFBSSxLQUM3QixLQUFLLFNBQVMsU0FBUyxPQUFRO0FBQUEsVUFFbEM7QUFBQSxRQUNGO0FBQUEsUUFDRCxVQUFVO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxvQkFBb0JqYSxHQUFPO0FBQ3pCLE1BQUtBLElBSUgsS0FBSyxZQUFZLE1BSGpCLEtBQUssZ0JBQWdCLEVBQUksR0FDekIsS0FBSyxZQUFZO0FBQUEsSUFJcEI7QUFBQSxJQUVELGtCQUFrQkEsR0FBTztBQUN2QixZQUFNLEVBQUUsV0FBQXFiLE1BQWMsS0FBSztBQUMzQixVQUFJLENBQUMsS0FBSyxhQUFhQSxLQUFjLEtBQUssSUFBSyxJQUFHQSxJQUFZO0FBQzVELG9CQUFLLGdCQUFnQixFQUFLLEdBQ3RCcmIsS0FDRixLQUFLLGlCQUFpQkEsQ0FBSyxHQUV0QjtBQUFBLElBRVY7QUFBQSxJQUVELG1CQUE4QjtBQUFBLElBRTdCO0FBQUEsSUFFRCxnQkFBZ0JzYixHQUFNO0FBQ3BCLFdBQUssU0FBUyxPQUFPQSxHQUNyQixLQUFLLFNBQVMsWUFBWUEsSUFBTyxLQUFLLElBQUcsSUFBSyxHQUMxQ0EsTUFDRixLQUFLLFNBQVMsV0FBVyxLQUFLLE1BQU0sVUFBVSxLQUFLLFNBQVMsTUFBTTtBQUFBLElBRXJFO0FBQUEsRUFDRjtBQUNIO0FDOURBLElBQUk3SSxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDQSxFQUFHLEtBQUs7QUFBQSxJQUNWLElBQUk7QUFBQSxNQUNGLFdBQWEsU0FBVXNFLEdBQVE7QUFDN0IsZUFBQUEsRUFBTyxnQkFBZSxHQUNmN0IsRUFBSTtNQUNaO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDekMsRUFBRyxRQUFRLENBQUN5QyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUd6QyxFQUFHLE1BQU07QUFBQSxJQUM5RCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxhQUFheUMsRUFBSSxTQUFTO0FBQUEsSUFDM0I7QUFBQSxFQUNMLEdBQUtBLEVBQUksR0FBR0EsRUFBSSxPQUFPLFNBQVU5QixHQUFPNVEsR0FBTztBQUMzQyxXQUFPaVEsRUFBRyxNQUFNLENBQUNBLEVBQUcsS0FBSztBQUFBLE1BQ3ZCLElBQUk7QUFBQSxRQUNGLFdBQWEsU0FBVXNFLEdBQVE7QUFDN0IsaUJBQUFBLEVBQU8sZ0JBQWUsR0FDZjdCLEVBQUksb0JBQW9CMVMsQ0FBSztBQUFBLFFBQ3JDO0FBQUEsUUFDRCxTQUFXLFNBQVV1VSxHQUFRO0FBQzNCLGlCQUFPN0IsRUFBSSxrQkFBa0IxUyxDQUFLO0FBQUEsUUFDbkM7QUFBQSxNQUNGO0FBQUEsSUFDUCxHQUFPLENBQUMwUyxFQUFJLEdBQUdBLEVBQUksR0FBRzlCLENBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDaEMsQ0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ1QsR0FDSWdDLEtBQWtCLENBQUU7QUNEeEIsTUFBQUMsS0FBQW5PLEVBQUEsVUFBQSxnQkFBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBMFcsRUFBQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLE9BQUE7QUFBQSxRQUNBLFVBQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLGlCQUFBcGIsR0FBQTtBQUNBLGNBQUFBLEdBQUE7QUFBQSxRQUNBLEtBQUE7QUFDQSxlQUFBLGNBQUEsT0FBQTtBQUNBO0FBQUEsUUFDQSxLQUFBO0FBQ0Esa0JBQUEsS0FBQSwwQkFBQTtBQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeERBLElBQUl5UyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxRQUFRO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsUUFBVSxTQUFVc0UsR0FBUTtBQUMxQixlQUFBQSxFQUFPLGVBQWMsR0FDZDdCLEVBQUksT0FBTyxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQ3hDO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDekMsRUFBRyxlQUFlO0FBQUEsSUFDcEIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsUUFBVXlDLEVBQUk7QUFBQSxNQUNkLE1BQVFBLEVBQUk7QUFBQSxJQUNiO0FBQUEsRUFDTCxHQUFLLENBQUN6QyxFQUFHLGdCQUFnQjtBQUFBLElBQ3JCLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLE1BQVE7QUFBQSxNQUNSLFNBQVd5QyxFQUFJO0FBQUEsTUFDZixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLElBQ0QsTUFBTTtBQUFBLEVBQ1AsQ0FBQSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNiLEdBQ0lFLEtBQWtCLENBQUU7QUNKeEIsTUFBQUMsS0FBQW5PLEVBQUEsVUFBQSxlQUFBO0FBQUEsRUFDQSxVQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0Esa0JBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFNBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBRUEsVUFBQTZXLElBQUFsTyxHQUFBLEtBQUEsSUFBQTtBQUNBLGVBQUF4TixLQUFBLEtBQUE7QUFDQSxNQUFBQSxLQUFBMGIsTUFDQUEsRUFBQTFiLEtBQUE7QUFHQSxXQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxZQUFBMGI7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0Esa0JBQUE7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsT0FBQTtBQUFBLFFBQ0EsT0FBQSxRQUFBMUwsR0FBQSxLQUFBLE9BQUEsQ0FBQSxFQUFBO0FBQUEsVUFHQSxDQUFBLENBQUFoUSxHQUFBc0QsQ0FBQSxPQUNBdEQsTUFBQSxZQUFBLENBQUFzRCxFQUFBLFdBQ0FBLElBQUE7QUFBQSxZQUNBLEdBQUFBO0FBQUEsWUFDQSxRQUFBO0FBQUEsY0FDQSxPQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsSUFFQSxDQUFBdEQsR0FBQXNELENBQUE7QUFBQSxRQUVBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsZUFBQXlRLEdBQUEsUUFBQTtBQUFBLE1BQ0EsT0FBQSxNQUFBO0FBQ0EsUUFBQSxLQUFBLGFBQUEsTUFBQSxZQUFBLE1BQ0EsS0FBQSxPQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFlBQUE7QUFDQSxTQUFBLGFBQUEsT0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLE9BQUE7QUFDQSxXQUFBLE9BQUEsS0FBQSxLQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBNVQsR0FBQTtBQUNBLFdBQUEsUUFBQSxRQUFBQSxDQUFBLEdBQ0EsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQUEsR0FBQTtBQUNBLFdBQUEsUUFBQSxPQUFBQSxDQUFBLEdBQ0EsS0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLFdBQUEsUUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FB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QTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE9BQUEsQ0FBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsT0FBQSxDQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLENBQUEsUUFBQSxNQUFBLEdBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsVUFBQSxFQUFBLE1BQUF2YyxNQUFBLEtBQUE7QUFDQSxXQUFBO0FBQUEsTUFFQSxHQUNBQSxLQUFBWSxFQUFBWixDQUFBLElBQ0FBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBQTtBQUFBLE1BRUEsb0JBQUEsQ0FBQTtBQUFBLE1BQ0EsZUFBQSxDQUFBO0FBQUEsTUFDQSxnQkFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGtCQUFBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHdCQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUEsT0FBQSxLQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsWUFBQStMLElBQUFnRixHQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUE7QUFDQSxpQkFBQWdNLEtBQUEsS0FBQTtBQUNBLFFBQUFoUixFQUFBLEtBQUEsR0FBQWdSLEVBQUEsWUFBQTtBQUVBLGFBQUFoUjtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBb0UsRUFBQSxLQUFBLE9BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7O0FBQ0EsWUFBQTZNLE1BQUFoYyxJQUFBLEtBQUEsT0FBQSxTQUFBLGdCQUFBQSxFQUFBLE1BQUEsT0FBQSxNQUNBZ1AsSUFBQWdOLEtBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQUEsRUFBQSxJQUNBQSxNQUNBM1QsSUFBQSxLQUFBLGVBQUEsZ0JBQUFBLEVBQUEsU0FBQTtBQUNBLGFBQUEyRyxNQUFBZ04sS0FFQSxLQUFBLFFBQUEsUUFBQSxFQUFBLE1BQUFoTixFQUFBLENBQUEsR0FFQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsVUFBQSxLQUFBLE1BQUE7QUFDQSxZQUFBaU4sSUFBQTtBQUNBLG1CQUFBak4sS0FBQSxPQUFBLE9BQUEsS0FBQSxJQUFBLEdBQUE7QUFDQSxnQkFBQSxFQUFBLFlBQUFrTixFQUFBLElBQUFsTjtBQUNBLGNBQUFwUCxFQUFBc2MsQ0FBQSxJQUNBQSxFQUFBLEtBQUEsTUFBQSxLQUFBLE9BQUEsSUFDQUE7QUFFQSxtQkFBQWxOO0FBRUEsVUFBQWlOLE1BQ0FBLElBQUFqTjtBQUFBLFFBRUE7QUFDQSxlQUFBaU47QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTs7QUFDQSxjQUFBamMsSUFBQSxLQUFBLFdBQUEsZ0JBQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxVQUFBLFlBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsU0FBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLEdBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxhQUFBLFlBQUEsSUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFRQSxPQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQXZCLEdBQUEsS0FBQSxVQUFBLEtBQUEsVUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLFFBQ0EsS0FBQSxrQkFBQSxLQUFBLGNBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUEsQ0FBQThTLE1BQUFBLEVBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxDQUFBQSxNQUFBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsQ0FBQUEsTUFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxlQUFBLENBQUFBLE1BQUFBLEVBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLGFBQUEsQ0FBQSxLQUFBLFdBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLFlBQUF0TixNQUFBLEtBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQUEsS0FBQSxPQUFBLEtBQUFBLENBQUEsRUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTJELEdBQUEsVUFBQTtBQUFBLE1BQ0EsVUFBQTtBQUNBLGVBQUEsQ0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHVCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxrQkFBQTtBQUNBLGFBQUEsS0FBQSx1QkFBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSx1QkFBQSxLQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsVUFBQSxFQUFBLEdBQ0EsS0FBQSxrQkFBQSxHQUVBLEtBQUEsU0FBQSxVQUFBLEtBQUEscUJBQUEsR0FDQSxLQUFBLFVBQUEsWUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLGdCQUFBO0FBQ0EsU0FBQSxVQUFBLFNBQUEsR0FDQSxLQUFBLFVBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLHdCQUFBbEssR0FBQXVJLEdBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUFBdkk7QUFBQSxRQUFBdUk7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsdUJBQUF2SSxHQUFBdUksR0FBQTtBQUNBLGFBQUEsS0FBQSx3QkFBQXZJLEdBQUF1SSxDQUFBLEVBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG9CQUFBdkksR0FBQXVJ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Q0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxXQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFlBQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxLQUFBLE9BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsS0FBQSxVQUFBLFVBQUEsS0FBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxXQUFBLEtBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLFVBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBOztBQUNBLGVBRUFyRSxJQUFBLEtBQUEsT0FBQSxjQUFBLGdCQUFBQSxFQUFBLFVBSUEsS0FBQSxhQUNBLEdBQUFnZSxFQUFBLEtBQUEsTUFBQSxNQUFBLEtBQUEsS0FBQSxlQUVBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFVBQUF0YSxHQUFBO0FBSUEsYUFBQSxDQUFBLEVBQUEsS0FBQUEsTUFBQSxLQUFBLE9BQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNHQSxJQUFJME8sS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2QsR0FBRSxDQUFDeUMsRUFBSSxlQUFlLENBQUN6QyxFQUFHLFVBQVU7QUFBQSxJQUNuQyxhQUFhO0FBQUEsSUFDYixPQUFPLGVBQWV5QyxFQUFJO0FBQUEsSUFDMUIsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsT0FBU0EsRUFBSSxTQUFTQSxFQUFJLElBQUk7QUFBQSxJQUMvQjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsV0FBYSxTQUFVNkIsR0FBUTtBQUM3QixlQUFBQSxFQUFPLGdCQUFlLEdBQ2Y3QixFQUFJO01BQ1o7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFFLENBQUNBLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBR3pDLEVBQUcsTUFBTTtBQUFBLElBQ3ZDLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGFBQWF5QyxFQUFJLFNBQVM7QUFBQSxJQUMzQjtBQUFBLEVBQ0wsR0FBS0EsRUFBSSxHQUFHQSxFQUFJLE9BQU8sU0FBVTFHLEdBQU1qSixHQUFNO0FBQ3pDLFdBQU9rTixFQUFHLE1BQU0sQ0FBQ3lDLEVBQUksWUFBWTFHLENBQUksSUFBSWlFLEVBQUcsS0FBSztBQUFBLE1BQy9DLE9BQU8sYUFBYWxOO0FBQUEsTUFDcEIsSUFBSTtBQUFBLFFBQ0YsV0FBYSxTQUFVd1IsR0FBUTtBQUM3QixpQkFBQUEsRUFBTyxnQkFBZSxHQUNmN0IsRUFBSSxvQkFBb0IzUCxDQUFJO0FBQUEsUUFDcEM7QUFBQSxRQUNELFNBQVcsU0FBVXdSLEdBQVE7QUFDM0IsaUJBQU83QixFQUFJLGtCQUFrQjNQLENBQUk7QUFBQSxRQUNsQztBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUUsQ0FBQzJQLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFNBQVMxRyxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTBHLEVBQUksR0FBRSxDQUFFLENBQUM7QUFBQSxFQUNyRCxDQUFBLEdBQUcsQ0FBQyxDQUFDLElBQUl6QyxFQUFHLFVBQVU7QUFBQSxJQUNyQixhQUFhO0FBQUEsSUFDYixPQUFPLGVBQWV5QyxFQUFJO0FBQUEsSUFDMUIsT0FBTztBQUFBLE1BQ0wsTUFBUUEsRUFBSSxZQUFZLFdBQVc7QUFBQSxNQUNuQyxPQUFTQSxFQUFJLFNBQVNBLEVBQUksSUFBSTtBQUFBLElBQy9CO0FBQUEsSUFDRCxJQUFJO0FBQUEsTUFDRixPQUFTLFNBQVU2QixHQUFRO0FBQ3pCLGVBQU83QixFQUFJLFdBQVdBLEVBQUksTUFBTSxPQUFPO0FBQUEsTUFDeEM7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFFLENBQUNBLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEMsR0FDSUUsS0FBa0IsQ0FBRTtBQ1h4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLHNCQUFBO0FBQUEsRUFDQSxRQUFBLENBQUEwVyxFQUFBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFFBQUE7QUFDQSxhQUFBMU8sRUFBQSxLQUFBLFFBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUFPLEdBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQTtBQUNBLGFBQUEsT0FBQSxLQUFBLEtBQUEsS0FBQSxFQUFBLFNBQUEsS0FBQSxDQUFBLEtBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxZQUFBakIsR0FBQTtBQUVBLGFBQUFBLEVBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUFBLEdBQUFqSixJQUFBLE1BQUE7QUFDQSxVQUFBLEtBQUEsWUFBQWlKLENBQUE7QUFDQSxRQUFBLEtBQUEsWUFDQSxLQUFBLGdCQUFBLFdBQUFBLEdBQUFqSixDQUFBLElBRUEsS0FBQSxRQUFBLEtBQUE7QUFBQSxVQUNBLE1BQUEsR0FBQSxLQUFBO0FBQUEsVUFDQSxPQUFBLEVBQUEsTUFBQUEsRUFBQTtBQUFBLFVBQ0EsUUFBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBO0FBR0EsY0FBQSxJQUFBLE1BQUEsMkNBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxpQkFBQUEsR0FBQTtBQUNBLFdBQUEsV0FBQSxLQUFBLE1BQUFBLElBQUFBLENBQUEsR0FDQSxLQUFBLGdCQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVGQSxJQUFJMFAsS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxZQUFZekMsRUFBRyxPQUFPO0FBQUEsSUFDL0IsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxVQUFVO0FBQUEsSUFDZixLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxNQUFRO0FBQUEsTUFDUixPQUFTO0FBQUEsTUFDVCxVQUFZLENBQUN5QyxFQUFJO0FBQUEsSUFDbEI7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVNBLEVBQUk7QUFBQSxJQUNkO0FBQUEsRUFDTCxDQUFHLEdBQUd6QyxFQUFHLFVBQVU7QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLE1BQVE7QUFBQSxNQUNSLE9BQVM7QUFBQSxNQUNULFVBQVksQ0FBQ3lDLEVBQUk7QUFBQSxJQUNsQjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBU0EsRUFBSTtBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUEsQ0FBQyxDQUFDLElBQUlBLEVBQUk7QUFDYixHQUNJRSxLQUFrQixDQUFFO0FDSnhCLE1BQUFDLEtBQUFuTyxFQUFBLFVBQUEsa0JBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQXVWLENBQUE7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLENBQUEsU0FBQSxNQUFBLEdBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsYUFBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxtQkFBQTtBQUNBLGFBQUEvWCxFQUFBLEtBQUEsU0FBQSxJQUFBLEtBQUEsWUFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLFlBQUEsRUFBQSxNQUFBK0wsTUFBQSxLQUFBO0FBQ0EsYUFBQUEsSUFDQSxDQUFBcVEsTUFBQXJRLEVBQUEsS0FBQSxNQUFBLElBQUE5TixFQUFBLE1BQUE7QUFBQSxRQUNBLGVBQUFtZTtBQUFBLE1BQ0EsQ0FBQSxDQUFBLElBQ0EsQ0FBQUEsTUFBQWpSLEdBQUFpUixDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLFlBQUEsRUFBQSxPQUFBQyxNQUFBLEtBQUE7QUFDQSxhQUFBQSxJQUNBLENBQUFELE1BQUFDLEVBQUEsS0FBQSxNQUFBLElBQUFwZSxFQUFBLE1BQUE7QUFBQSxRQUNBLGVBQUFtZTtBQUFBLE1BQ0EsQ0FBQSxDQUFBLElBQ0EsQ0FBQUEsTUFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUdBLFNBQUEsTUFBQSxVQUFBO0FBQUEsTUFDQSxNQUFBLEtBQUE7QUFBQSxJQUNBLENBQUEsR0FDQSxLQUFBLE1BQUEsUUFBQTtBQUFBLE1BQ0EsT0FBQSxLQUFBO0FBQUEsSUFDQSxDQUFBLEdBQ0EsS0FBQSxPQUFBLFFBQUE7QUFBQSxNQUVBLFdBQUE7QUFBQSxNQUNBLFNBQUEsQ0FBQXhNLEdBQUFDLE1BQUE7QUFDQSxRQUFBRCxNQUFBQyxLQUNBLEtBQUEsZUFBQTtBQUFBLE1BRUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxNQUFBLGlCQUFBeU0sR0FBQTs7QUFFQSxVQUFBLEVBQUEsZUFBQUYsTUFBQSxLQUFBO0FBQ0EsVUFBQTtBQUNBLGNBQUFHLElBQUEsUUFBQS9WLEtBQUFySSxJQUFBLFVBQUEsY0FBQSxnQkFBQUEsRUFBQSxhQUFBLGdCQUFBcUksRUFBQSxLQUFBckk7QUFDQSxRQUFBLEtBQUEsZ0JBQUFvZSxNQUdBLFFBQUFwTCxLQUFBcEQsSUFBQSxVQUFBLGNBQUEsZ0JBQUFBLEVBQUEsY0FBQSxnQkFBQW9ELEVBQUEsS0FBQXBELEdBQUF3TyxLQUNBLEtBQUEsZUFBQSxLQUVBQSxNQUNBSCxJQUFBLEtBQUEsTUFBQUcsQ0FBQTtBQUFBLE1BRUEsU0FBQXJFLEdBQUE7QUFDQSxRQUFBb0UsTUFDQSxRQUFBLE1BQUFwRSxHQUFBQSxFQUFBLE1BQUFBLEVBQUEsT0FBQSxHQUNBQSxFQUFBLFNBQUEsaUJBQ0EsTUFBQXNFO0FBQUE7QUFBQSxnQkFFQXRFLEVBQUE7QUFBQSxhQUNBO0FBQUEsTUFHQTtBQUNBLFlBQUEsRUFBQSxTQUFBdUUsTUFBQXRmLEVBQUEsSUFBQWlmLEtBQUEsQ0FBQTtBQUNBLGFBQUFLLFFBQUFwTCxJQUFBLEtBQUEsb0JBQUEsZ0JBQUFBLEVBQUEsT0FBQSxRQUFBbFUsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsaUJBQUE7QUFDQSxXQUFBLGNBQUEsQ0FBQSxDQUFBLEtBQUEsTUFHQSxLQUFBLGVBQUEsQ0FBQSxDQUFBLE1BQUEsS0FBQSxpQkFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxTQUFBOztBQUNBLFVBQUFBLEtBQUFnQixJQUFBLEtBQUEsb0JBQUEsZ0JBQUFBLEVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQWhCLElBQUFBLEtBQUEsS0FBQSxTQUFBQSxDQUFBLEdBRUEsS0FBQSxTQUFBLGdCQUFBQTtBQUNBLFlBQUE7QUFDQSxnQkFBQW9mLElBQUEsS0FBQSxVQUFBcGYsR0FBQSxNQUFBLENBQUE7QUFDQSxrQkFBQTRRLEtBQUF2SCxJQUFBLFVBQUEsY0FBQSxnQkFBQUEsRUFBQSxjQUFBLGdCQUFBdUgsRUFBQSxLQUFBdkgsR0FBQStWLEtBRUEsTUFBQSxLQUFBLGVBQUE7QUFBQSxRQUNBLFNBQUFyRSxHQUFBO0FBQ0Esa0JBQUEsTUFBQUEsR0FBQUEsRUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxTQUFBelksR0FBQTtBQUNBLGdCQUFBLE1BQUFBLENBQUEsR0FDQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxVQUFBO0FBQ0EsVUFBQXRDLElBQUEsTUFBQSxLQUFBLGlCQUFBLEVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQUEsSUFBQUEsS0FBQSxLQUFBLFVBQUFBLENBQUEsR0FDQUEsS0FDQSxLQUFBLGdCQUFBLFFBQUFBLENBQUE7QUFBQSxNQUVBLFNBQUFzQyxHQUFBO0FBQ0EsZ0JBQUEsTUFBQUEsQ0FBQSxHQUNBLE1BQUFBLEVBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDNUplaWQsS0FBQTtBQUFBLEVBQ2IsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLFdBQVc7QUFBQSxJQUNaO0FBQUEsRUFDRjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsV0FBVzlMLEdBQVcsRUFBRSxZQUFBK0wsSUFBYSxJQUFPLFlBQUFDLElBQWEsR0FBTyxJQUFHLElBQUk7QUFDckUsTUFBSSxDQUFDLEtBQUssWUFBWSxDQUFDaE0sTUFDckIsS0FBSyxZQUFZLENBQUMsQ0FBQ0EsR0FDZitMLEtBQ0YsS0FBSyxjQUFjLGdCQUFnQi9MLENBQVMsR0FFMUNnTSxLQUNGLEtBQUssY0FBYyxXQUFXLEtBQUssU0FBUztBQUFBLElBR2pEO0FBQUEsRUFDRjtBQUNILEdDYmVDLEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQ25ELElBQVdnRCxFQUFZO0FBQUEsRUFFaEMsVUFBVTtBQUNSLFdBQU87QUFBQSxNQUNMLG9CQUFvQixNQUFNO0FBQUEsTUFFMUIsUUFBUSxNQUFNLEtBQUs7QUFBQSxNQUNuQixjQUFjLE1BQU0sS0FBSztBQUFBLElBQzFCO0FBQUEsRUFDRjtBQUFBLEVBRUQsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLFlBQVk7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1Isb0JBQW9CO0FBQ2xCLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxXQUFXO0FBR1QsYUFBTyxLQUFLLFlBQWE7QUFBQSxJQUMxQjtBQUFBLElBRUQsZUFBZTtBQUViLGFBQU8sQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUNmO0FBQUEsSUFFRCxjQUFjO0FBS1osYUFBTztBQUFBLElBQ1I7QUFBQSxJQUVELGNBQWM7QUFLWixZQUFNNVMsSUFBTyxLQUFLO0FBQ2xCLGFBQ0UsQ0FBQyxLQUFLLGdCQUNOLENBQUMsS0FBSyxlQUNOQSxNQUNFQSxFQUFLLGVBQ0xBLEVBQUs7QUFBQSxJQUdWO0FBQUEsSUFFRCxnQkFBZ0I7QUFDZCxhQUNFLEtBQUssZUFDTDtBQUFBLElBR0g7QUFBQSxJQUVELGFBQWE7QUFDWCxhQUNFLENBQUMsS0FBSyxlQUNOLENBQUMsS0FBSztBQUFBLElBRVQ7QUFBQSxJQUdELFVBQVU7QUFFUixhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBRUQsUUFBUTtBQUdOLGFBQU8sS0FBSyxTQUFVO0FBQUEsSUFDdkI7QUFBQSxJQUVELGtCQUFrQjtBQUVoQixZQUFNLEVBQUUsVUFBVWdULEVBQVEsSUFBRyxLQUFLO0FBQ2xDLFVBQUksS0FBSyxnQkFBZ0JBLEdBQVE7QUFDL0IsY0FBTSxFQUFFLE1BQUFqRyxJQUFPLEVBQUcsSUFBRyxLQUFLLFNBQVMsQ0FBRSxHQUMvQjFFLElBQVEwRSxJQUFPaUc7QUFDckIsZUFBTyxDQUFDM0ssR0FBT0EsSUFBUTJLLElBQVMsQ0FBQztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUFBLElBRUQsY0FBYztBQUNaLFlBQU0vWCxJQUFRLEtBQUssaUJBQ2IsRUFBRSxNQUFBOFIsTUFBUzFVLEVBQU8sSUFBRyxLQUFLLFNBQVMsQ0FBRTtBQUMzQyxhQUFPO0FBQUEsUUFDTCxHQUFHQTtBQUFBLFFBQ0gsR0FBSTRDLEtBQVM7QUFBQSxVQUdYLE9BQU9BLEVBQU0sS0FBSyxHQUFHO0FBQUEsUUFDL0I7QUFBQSxNQUNPO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFVBQVU7QUFFUixLQUFJLEtBQUssZ0JBQWdCLEtBQUssZUFDNUIsS0FBSyxVQUFXO0FBQUEsRUFFbkI7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLGNBQWM7O0FBR1osYUFBTzdELEdBQVkvQyxJQUFBLEtBQUssaUJBQUwsZ0JBQUFBLEVBQW1CLFVBQVU7QUFBQSxRQUM5QyxNQUFNO0FBQUEsUUFDTixTQUFRNFAsS0FBQXZILElBQUEsS0FBSyx3QkFBTCxnQkFBQUEsRUFBMEIsYUFBMUIsT0FBQXVILElBQXNDO0FBQUEsTUFDdEQsQ0FBTztBQUFBLElBQ0Y7QUFBQSxJQUVELFdBQVc7QUFDVCxZQUFNZ1AsSUFBUSxLQUFLLE9BQVE7QUFDM0IsYUFBTyxLQUFLLGNBQ1I7QUFBQSxRQUNBLEdBQUdBO0FBQUEsUUFFSCxRQUFRO0FBQUEsUUFDUixTQUFTO0FBQUEsUUFDVCxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixTQUFTO0FBQUEsTUFDVixJQUNDQTtBQUFBLElBQ0w7QUFBQSxJQUdELFlBQVk7QUFDVixXQUFLLGFBQWE7QUFBQSxJQUNuQjtBQUFBLElBR0QsUUFBUTVmLEdBQU07QUFDWixXQUFLLGFBQWFBO0FBQUEsSUFDbkI7QUFBQSxJQUVELFlBQVk7QUFJVixXQUFLLFdBQVk7QUFBQSxJQUNsQjtBQUFBLElBRUQsYUFBYTtBQUNYLE1BQUksS0FBSyxlQUNILEtBQUssVUFDUCxLQUFLLFdBQVksSUFFakIsS0FBSyxTQUFTLEVBQUk7QUFBQSxJQUd2QjtBQUFBLElBRUQsYUFBYTtBQUNYLFdBQUssU0FBUyxFQUFLO0FBQUEsSUFDcEI7QUFBQSxJQUVELFNBQVM2ZixHQUFPO0FBQ2QsTUFBSyxLQUFLLGdCQUNKQSxLQUNGLEtBQUssVUFBVyxHQUVsQixLQUFLLFlBQWE7QUFBQSxJQUVyQjtBQUFBLElBRUQsV0FBVy9iLEdBQVFKLEdBQU07QUFDdkIsYUFBTzJLLEdBQVl2SyxHQUFRSixJQUFPLEVBQUUsTUFBQUEsRUFBTSxJQUFHLENBQUUsR0FBRSxJQUFJO0FBQUEsSUFDdEQ7QUFBQSxJQUVELGNBQWM7QUFDWixZQUFNc0IsSUFBUSxLQUFLO0FBQ25CLFdBQUssY0FBYyxFQUFFLFFBQVEsT0FBTyxPQUFBQSxLQUFTLENBQUMrVixHQUFLclYsTUFBYTs7QUFDOUQsWUFBSXFWO0FBQ0YsY0FBSXJWLEdBQVU7QUFDWixrQkFBTSxFQUFFLE1BQUExRixFQUFJLElBQUswRjtBQUNqQixpQkFDRTFGLEtBQUEsZ0JBQUFBLEVBQU0sVUFBUyx3QkFDZmdCLElBQUEsS0FBSyxtQkFBTCxnQkFBQUEsRUFBQSxXQUFzQmhCLEVBQUs7QUFDM0IscUJBQU87QUFDRixnQkFBSSxLQUFLLG9CQUFvQjBGLENBQVE7QUFHMUMscUJBQU87QUFBQSxVQUVWO0FBQUE7QUFFRCxlQUFLLFFBQVFBLEVBQVMsSUFBSSxHQUMxQixLQUFLLGdCQUFnQixNQUFNO0FBQUEsTUFFckMsQ0FBTztBQUFBLElBQ0Y7QUFBQSxJQUVELGtCQUFrQkEsR0FBVTtBQUMxQixjQUFPQSxLQUFBLGdCQUFBQSxFQUFVLFlBQVc7QUFBQSxJQUM3QjtBQUFBLElBRUQsb0JBQW9CQSxHQUFVO0FBQzVCLGNBQU9BLEtBQUEsZ0JBQUFBLEVBQVUsWUFBVztBQUFBLElBQzdCO0FBQUEsSUFFRCxNQUFNLGNBQWM7QUFBQSxNQUNsQixRQUFBSDtBQUFBLE1BQ0EsVUFBQW5FLElBQVcsS0FBSztBQUFBLE1BQ2hCLE9BQUE0RDtBQUFBLE1BQ0EsTUFBQWhGO0FBQUEsSUFDRCxHQUFFdUIsR0FBVTtBQUNYLFlBQU11ZSxJQUFpQjtBQUFBLFFBQ3JCLFlBQVk7QUFBQSxRQUNaLFlBQVksS0FBSztBQUFBLE1BQ2xCO0FBQ0QsV0FBSyxXQUFXLElBQU1BLENBQWM7QUFDcEMsWUFBTUMsSUFBVSxFQUFFLFFBQUF4YSxHQUFRLFVBQUFuRSxHQUFVLE1BQUFwQixHQUFNLE9BQUFnRixFQUFPO0FBQ2pELFVBQUk7QUFDRixjQUFNVSxJQUFXLE1BQU0sS0FBSyxZQUFZcWEsQ0FBTztBQUcvQyxRQUFBeGUsRUFBUyxNQUFNbUUsQ0FBUTtBQUFBLE1BQ3hCLFNBQVFwRCxHQUFQO0FBRUEsY0FBTSxFQUFFLFVBQUFvRCxFQUFRLElBQUtwRDtBQUNyQixZQUFJLENBQUNmLEVBQVNlLEdBQU9vRCxDQUFRLEdBQUc7QUFDOUIsZ0JBQU0xRixJQUFPMEYsS0FBQSxnQkFBQUEsRUFBVTtBQUN2QixVQUFJMUYsS0FBUTJDLEVBQVMzQyxFQUFLLElBQUksSUFDNUIsS0FBSyxPQUFPO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixPQUFPMkUsRUFBUzNFLEVBQUssSUFBSTtBQUFBLFlBQ3pCLE1BQU1BLEVBQUssV0FBV3NDO0FBQUEsVUFDcEMsQ0FBYSxJQUVELEtBQUssT0FBTztBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTUE7QUFBQSxVQUNwQixDQUFhO0FBQUEsUUFFSjtBQUFBLE1BQ0Y7QUFDRCxXQUFLLFdBQVcsSUFBT3dkLENBQWM7QUFBQSxJQUN0QztBQUFBLElBRUQsZUFBZWxiLEdBQVFXLEdBQVE7QUFFN0IsYUFDRSxDQUFDLFFBQVEsT0FBTyxPQUFPLEVBQUUsU0FBU0EsQ0FBTSxNQUd0Q1gsRUFBTyxlQUFlLENBQUMsWUFBWSxNQUFNLENBQUMsS0FDMUNBLEVBQU87QUFBQSxJQUdaO0FBQUEsSUFFRCxNQUFNLE9BQU9BLEdBQVE7QUFDbkIsWUFBTXhELElBQVcyQyxFQUFZYSxFQUFPLE9BQU8sVUFBVTtBQUFBLFFBQ25ELFFBQVEsS0FBSztBQUFBLE1BQ3JCLENBQU87QUFDRCxVQUFJeEQsR0FBVTtBQUNaLGNBQU0sRUFBRSxRQUFBbUUsRUFBTSxJQUFLbkUsR0FDYnBCLElBQU8sS0FBSyxlQUFlNEUsR0FBUVcsQ0FBTTtBQUMvQyxlQUFPLEtBQUssZUFBZVgsR0FBUXhELEdBQVVtRSxHQUFRdkYsQ0FBSTtBQUFBLE1BQzFEO0FBQ0QsYUFBTztBQUFBLElBQ1I7QUFBQSxJQUVELE1BQU0sZUFBZTRFLEdBQVF4RCxHQUFVbUUsR0FBUXZGLEdBQU07QUFBQSxNQUNuRCxTQUFBZ2dCLElBQVU7QUFBQSxNQUNWLFdBQUFDO0FBQUEsTUFDQSxTQUFBQztBQUFBLE1BQ0EsZUFBQUMsSUFBZ0IsTUFBTSxLQUFLLE9BQU87QUFBQSxRQUNoQyxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsTUFDZCxDQUFPO0FBQUEsTUFDRCxhQUFBQyxJQUFjLENBQUE5ZCxNQUFTLEtBQUssT0FBTztBQUFBLFFBQ2pDLE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxVQUNKLHlCQUF5QkEsSUFBUSxNQUFNO0FBQUEsV0FDdkNBLEtBQUEsZ0JBQUFBLEVBQU8sWUFBV0E7QUFBQSxRQUNuQjtBQUFBLE1BQ1QsQ0FBTztBQUFBLElBQ0YsSUFBRyxJQUFJO0FBQ04sYUFBTyxJQUFJLFFBQVEsQ0FBQUosTUFBVztBQUM1QixhQUFLO0FBQUEsVUFDSCxFQUFFLFFBQUFxRCxHQUFRLFVBQUFuRSxHQUFVLE1BQUFwQixFQUFNO0FBQUEsVUFDMUIsT0FBTythLEdBQUtyVixNQUFhO0FBQ3ZCLGtCQUFNMUYsSUFBTzBGLEtBQUEsZ0JBQUFBLEVBQVU7QUFDdkIsZ0JBQUlxVixHQUFLO0FBRVAsb0JBQU10UyxJQUFTLEtBQUssa0JBQWtCL0MsQ0FBUSxLQUFLMUYsRUFBSztBQUN4RCxrQkFBSXlJO0FBQ0Ysc0JBQU0sS0FBSyxxQkFBcUJBLEdBQVEsRUFBSTtBQUFBLG1CQUN2QztBQUNMLHNCQUFNbkcsSUFBUU8sRUFBUzdDLENBQUksSUFBSUEsSUFBTythO0FBQ3RDLGdCQUFBbUYsS0FBQSxRQUFBQSxFQUFVNWQsSUFDVixNQUFNLEtBQUssZ0JBQWdCc0MsR0FBUSxTQUFTO0FBQUEsa0JBQzFDLFFBQVF3YjtBQUFBLGtCQUNSLE9BQUE5ZDtBQUFBLGdCQUNsQixDQUFpQjtBQUFBLGNBQ0Y7QUFDRCxjQUFBSixFQUFRLEVBQUs7QUFBQSxZQUMzQjtBQUdjLGNBQUk4ZCxLQUFXaGdCLEtBQ2IsS0FBSyxRQUFRQSxDQUFJLEdBRW5CaWdCLEtBQUEsUUFBQUEsS0FDQSxNQUFNLEtBQUssZ0JBQWdCcmIsR0FBUSxXQUFXO0FBQUEsZ0JBQzVDLFFBQVF1YjtBQUFBLGNBQ3hCLENBQWUsR0FDRGplLEVBQVEsRUFBSTtBQUFBLFVBRWY7QUFBQSxRQUNGO0FBQUEsTUFDVCxDQUFPO0FBQUEsSUFDRjtBQUFBLElBRUQsTUFBTSxnQkFBZ0IwQyxHQUFRdEQsR0FBTyxFQUFFLFFBQUEwRyxHQUFRLE9BQUExRixFQUFLLEdBQUk7QUFHdEQsWUFBTS9CLElBQVUsSUFBSU8sRUFBWThELEdBQVE7QUFBQSxRQUN0QyxRQUFRO0FBQUEsUUFDUixNQUFNLEtBQUs7QUFBQSxRQUNYLFdBQVcsS0FBSztBQUFBLFFBQ2hCLE9BQUF0QztBQUFBLE1BQ1IsQ0FBTyxHQUNLRCxJQUFNLE1BQU11QyxFQUFPLFVBQVV0RCxHQUFPLEVBQUUsU0FBQWYsR0FBUztBQUNyRCxhQUNFeUgsS0FFQTNGLE1BQVEsVUFHUixDQUFDOUIsRUFBUSxlQUVUeUgsRUFBTzFGLENBQUssR0FFUEQ7QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNIO0FDOVdBLElBQUkrUSxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxvQkFBb0J5QyxFQUFJO0FBQUEsSUFDekI7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLGlCQUFpQkEsRUFBSSxhQUFhO0FBQUEsSUFDbkM7QUFBQSxFQUNMLEdBQUssQ0FBR0EsRUFBSSx1QkFBdUJBLEVBQUksZ0JBT2hDQSxFQUFJLE9BUDZDekMsRUFBRyxlQUFlO0FBQUEsSUFDdEUsWUFBWSxDQUFDO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxPQUFPLENBQUN5QyxFQUFJO0FBQUEsTUFDWixZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLEVBQ0wsQ0FBRyxHQUFjekMsRUFBR3lDLEVBQUksZ0JBQWdCLFFBQVEsUUFBUTtBQUFBLElBQ3BELFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBT0EsRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLElBQUk7QUFBQSxNQUNGLFFBQVUsU0FBVTZCLEdBQVE7QUFDMUIsUUFBQUEsRUFBTyxlQUFjO0FBQUEsTUFDdEI7QUFBQSxJQUNGO0FBQUEsRUFDTCxHQUFLLENBQUN0RSxFQUFHLFVBQVU7QUFBQSxJQUNmLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLE1BQVE7QUFBQSxNQUNSLFVBQVk7QUFBQSxNQUNaLGVBQWU7QUFBQSxJQUNoQjtBQUFBLEVBQ0wsQ0FBRyxHQUFHQSxFQUFHLGVBQWU7QUFBQSxJQUNwQixPQUFPO0FBQUEsTUFDTCxRQUFVeUMsRUFBSTtBQUFBLE1BQ2QsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxNQUNoQixZQUFjO0FBQUEsSUFDZjtBQUFBLEVBQ0wsR0FBSyxDQUFDekMsRUFBRyxnQkFBZ0I7QUFBQSxJQUNyQixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxNQUFRO0FBQUEsTUFDUixTQUFXeUMsRUFBSTtBQUFBLE1BQ2YsVUFBWUEsRUFBSTtBQUFBLE1BQ2hCLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE1BQVFBLEVBQUk7QUFBQSxNQUNaLE9BQVNBLEVBQUk7QUFBQSxNQUNiLFVBQVlBLEVBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0QsTUFBTTtBQUFBLEVBQ1YsQ0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNsQixHQUNJRSxLQUFrQixDQUFFO0FDYnhCLE1BQUFDLEtBQUFuTyxFQUFBLFVBQUEsYUFBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBbU4sSUFBQWtOLEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxZQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFFBQUE7QUFJQSxZQUFBRSxJQUFBLEtBQUEsU0FBQSxHQUNBLEVBQUEsWUFBQVMsR0FBQSxjQUFBQyxFQUFBLElBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxHQUFBVjtBQUFBLFFBQ0EsUUFBQVMsSUFBQVQsRUFBQSxTQUFBQSxFQUFBO0FBQUEsUUFDQSxXQUFBUyxJQUFBVCxFQUFBLFVBQUFBLEVBQUE7QUFBQSxRQUNBLFFBQUFVLElBQUFWLEVBQUEsU0FBQUEsRUFBQTtBQUFBLFFBQ0EsV0FBQVUsSUFBQVYsRUFBQSxZQUFBQSxFQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxRQUNBLEtBQUE7QUFBQSxRQUdBLEtBQUEsUUFBQSxFQUFBLE1BQUEsS0FBQSxLQUFBO0FBQUEsUUFDQSxLQUFBO0FBQUEsTUFDQSxLQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUFwUDtBQUFBLFFBQ0ErUDtBQUFBLFVBQ0E7QUFBQSxZQUNBLFFBQUE7QUFBQSxjQUNBLE1BQUE7QUFBQSxjQUNBLFFBQUE7QUFBQSxnQkFDQSxPQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsY0FDQTtBQUFBLFlBQ0E7QUFBQSxZQUVBLFFBQUEsQ0FBQSxLQUFBLGNBQUE7QUFBQSxjQUNBLE1BQUE7QUFBQSxjQUVBLFdBQUE7QUFBQSxjQUNBLFFBQUE7QUFBQSxnQkFDQSxPQUFBLENBQUEsRUFBQSxXQUFBM2IsRUFBQSxNQUFBQSxFQUFBLE9BQUE7QUFBQSxjQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLEtBQUEsT0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxlQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBRUEsYUFBQSxLQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBOztBQUNBLGFBQUEsQ0FBQSxLQUFBLGNBQUEsQ0FBQSxHQUFBNUQsSUFBQSxLQUFBLHdCQUFBLFFBQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBOztBQUNBLGVBQUFBLElBQUEsS0FBQSx3QkFBQSxnQkFBQUEsRUFBQSxnQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFJQSxhQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFFQSxhQUFBLEtBQUEsT0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTs7QUFDQSxhQUFBLEtBQUEsYUFDQSxRQUNBQSxJQUFBLEtBQUEsVUFBQSxPQUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsS0FBQSxhQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsWUFBQUksSUFBQSxLQUFBLFlBQUE7QUFDQSxhQUFBK0MsR0FBQSxLQUFBLFFBQUEvQyxDQUFBLEtBQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7QUFDQSxhQUFBNGQsRUFBQSxLQUFBLGFBQUEsS0FBQSxNQUFBLFNBQUEsS0FBQSxNQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBU0EsYUFBQSxLQUFBLGVBQUEsS0FBQSxjQUFBLEtBQUEsaUJBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBLGdCQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFJQSxVQUFBLEVBQUEsTUFBQWhmLE1BQUEsS0FBQTtBQUNBLFVBQUFBLEdBQUE7QUFHQSxjQUFBd2dCLElBQUExaEI7QUFBQSxVQUNBLEtBQUEsZ0JBQUEsS0FBQSxvQkFBQTtBQUFBLFFBQ0EsR0FHQTJoQixJQUFBLEtBQUEsWUFBQSxLQUFBLE1BQUEsR0FBQSxHQUNBQyxJQUFBRCxFQUFBLE1BQUFBLEVBQUEsU0FBQUQsRUFBQSxNQUFBO0FBQ0EsYUFBQSxZQUFBO0FBQ0EsY0FBQUcsSUFBQUgsRUFBQUEsRUFBQSxTQUFBO0FBQ0EsUUFBQXZQLEVBQUEsS0FBQSxZQUFBLEtBQUEwUCxNQUFBLFlBSUFILEVBQUE7QUFFQSxpQkFBQSxJQUFBLEdBQUFJLElBQUFKLEVBQUEsUUFBQSxJQUFBSSxLQUFBNWdCLEdBQUEsS0FBQTtBQUNBLGdCQUFBNmdCLElBQUFMLEVBQUEsSUFFQWhnQixJQUFBLE9BQUEsS0FBQWtnQixFQUFBLEVBQUEsSUFDQUcsTUFBQSxXQUNBLE9BQ0EsS0FBQSxnQkFBQSxLQUFBLGNBQUE3Z0IsR0FBQTZnQixDQUFBLElBQ0FBO0FBR0EsVUFBQSxNQUFBRCxJQUFBLElBQ0EsS0FBQSxZQUFBcGdCLElBRUFSLElBQUFBLEVBQUFRO0FBQUEsUUFFQTtBQUFBLE1BQ0E7QUFDQSxhQUFBUjtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBSUEsVUFDQSxLQUFBLGVBQ0EsS0FBQSxlQUFBLFVBQ0EsS0FBQSxjQUNBLEtBQUEsY0FBQSxNQUNBO0FBQ0EsWUFBQUEsSUFBQSxLQUFBLFdBQUEsS0FBQTtBQUNBLGVBQUEsS0FBQSxlQUdBLEtBQUEsYUFBQUEsSUFBQWdPLEdBQUFoTyxDQUFBLElBR0FBLE1BQUEsUUFDQSxDQUFBLEtBQUEsY0FDQWlSLEVBQUEsS0FBQSxZQUFBLEtBR0EsS0FBQSxRQUFBLEtBQUEsRUFBQSxNQUFBLFVBQUEsUUFBQSxJQUFBLEdBRUFqUjtBQUFBLE1BQ0E7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLEtBQUEsYUFBQSxLQUFBLGNBQUEsS0FBQSxNQUFBLEVBQUEsVUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFlBQUE7QUFBQSxJQUVBLFFBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxnQkFBQXNCLEdBQUF1RixHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBLFVBQUF2RixHQUFBdUYsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBNlUsR0FBQTtBQUVBLGFBQUEsS0FBQSxJQUFBLGdCQUFBLEtBQUEsS0FFQSxPQUFBQSxFQUFBLFNBQUEsSUFBQUEsRUFBQSxLQUFBLFVBQUEsQ0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBR0EsWUFBQTtBQUNBLE1BQUEsS0FBQSxhQUNBLEtBQUEsZ0JBQUEsS0FBQSxjQUFBLEtBQUEsV0FBQSxLQUFBLFFBQUEsS0FBQSxJQUFBLEtBRUEsS0FBQSxXQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsY0FBQTFiLEdBQUE7QUFDQSxVQUFBLEtBQUEsY0FBQSxLQUFBLGNBQUEsTUFBQTtBQUNBLGNBQUEsRUFBQSxxQkFBQThnQixFQUFBLElBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0EsS0FBQTtBQUFBLFVBQ0EsS0FBQTtBQUFBLFVBQ0FBLEVBQUEsV0FBQTlnQixDQUFBO0FBQUEsUUFDQSxHQUNBOGdCLEVBQUEsU0FBQSxHQUNBO0FBQUEsTUFDQTtBQUNBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBOWdCLEdBQUE7O0FBQ0EsYUFBQWlSLEVBQUEsS0FBQSxZQUFBLElBQ0EsS0FBQSxjQUFBalIsQ0FBQSxJQUNBLENBQUEsR0FBQWdCLElBQUEsS0FBQSxlQUFBLFFBQUFBLEVBQUEsS0FBQWhCO0FBQUEsSUFDQTtBQUFBLElBR0EsWUFBQTtBQUNBLFdBQUEsUUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBR0EsUUFBQUEsR0FBQTtBQUVBLE1BQUEsS0FBQSxjQUVBLEtBQUEsY0FBQUEsQ0FBQSxLQUVBLEtBQUEsY0FBQSxNQUNBLEtBQUEsYUFBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxnQkFBQStnQixHQUFBQyxHQUFBO0FBRUEsTUFBQUQsTUFBQUMsTUFDQSxLQUFBLGFBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBLFNBQUE7QUFDQSxhQUFBLEtBQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxTQUFBLEtBQUEscUJBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUFDLElBQUEsSUFBQTtBQUNBLGFBQUEsS0FBQSxhQUNBQSxJQUFBLFdBQUEsWUFDQUEsSUFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxPQUFBcmMsR0FBQSxFQUFBLFVBQUEwRCxJQUFBLElBQUEsV0FBQTRZLElBQUEsR0FBQSxJQUFBLElBQUE7QUFDQSxVQUFBNVksS0FBQSxDQUFBLEtBQUE7QUFDQSxlQUFBO0FBR0EsWUFBQTZZLElBQUEsQ0FBQUYsTUFBQSxLQUFBLE1BQUEsS0FBQSxjQUFBQSxDQUFBLElBR0FHLElBQUFyZCxFQUFBYSxFQUFBLE9BQUEsVUFBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsTUFDQSxDQUFBLEdBQ0F4RCxJQUFBZ2dCLEtBQUEsS0FBQSxVQUNBN2IsS0FBQW5FLEtBQUEsZ0JBQUFBLEVBQUEsV0FBQSxLQUFBLFFBQ0FwQixJQUFBLEtBQUEsZUFBQTRFLEdBQUFXLENBQUE7QUFDQSxVQUFBOGI7QUEyREEsVUExREEsQ0FBQUQsS0FBQSxLQUFBLGNBQ0FDLElBQUEsTUFBQSxLQUFBLGdCQUFBemMsR0FBQXhELEdBQUFtRSxHQUFBdkYsR0FBQTtBQUFBLFFBQ0EsV0FBQSxNQUFBLEtBQUEsZ0JBQUEsS0FBQSxjQUFBLENBQUE7QUFBQSxRQUNBLFNBQUEsQ0FBQXNDLE1BQUEsS0FBQSxnQkFBQSxTQUFBO0FBQUEsVUFDQSxTQUFBLEVBQUEsT0FBQUEsRUFBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLFFBQ0EsZUFBQSxNQUFBO0FBQ0EsZ0JBQUF1QyxJQUFBc2MsRUFBQSxFQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBLEtBQUEsYUFDQSxRQUFBbkMsRUFBQW5hLENBQUEsTUFDQSxVQUFBbWEsRUFBQW5hLENBQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxjQUNBLEtBQUEsYUFDQSxHQUFBLEtBQUEsaUJBQUFBLE9BQ0EsY0FBQSxLQUFBLGtCQUFBQTtBQUFBLGNBQ0EsS0FBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLENBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFBLE1BQUE7QUFDQSxnQkFBQUEsSUFBQXNjLEVBQUEsRUFBQTtBQUNBLGVBQUEsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQSxhQUFBdGMsS0FBQSxLQUFBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQSxJQUVBd2MsSUFBQSxNQUFBLEtBQUEsZUFBQXpjLEdBQUF4RCxHQUFBbUUsR0FBQXZGLEdBQUE7QUFBQSxRQUNBLFNBQUE7QUFBQSxRQUNBLFdBQUEsTUFBQSxLQUFBLGdCQUFBLEtBQUEsY0FBQSxDQUFBO0FBQUEsUUFDQSxTQUFBLENBQUFzQyxNQUFBLEtBQUEsZ0JBQUEsU0FBQTtBQUFBLFVBQ0EsU0FBQSxFQUFBLE9BQUFBLEVBQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxRQUNBLGVBQUEsTUFBQTtBQUNBLGdCQUFBdUMsSUFBQXNjLEVBQUEsRUFBQTtBQUNBLGVBQUEsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQSxnQkFBQW5DLEVBQUFuYSxDQUFBO0FBQUEsWUFDQSxNQUFBLEdBQUEsS0FBQSxpQkFBQUE7QUFBQSxVQUNBLENBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFBLENBQUF2QyxNQUFBO0FBQ0EsZ0JBQUF1QyxJQUFBc2MsRUFBQSxFQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsY0FDQSxhQUFBdGMsS0FBQSxLQUFBLFlBQUF2QyxJQUFBLE1BQUE7QUFBQSxlQUNBQSxLQUFBLGdCQUFBQSxFQUFBLFlBQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUEsR0FFQStlO0FBRUEsWUFEQSxLQUFBLGdCQUFBLEdBQ0FILEtBQUF0YyxFQUFBO0FBQ0EsZUFBQSxNQUFBO0FBQUEsaUJBQ0EsS0FBQSxZQUFBO0FBRUEsZ0JBQUF6RSxJQUFBLEtBQUEsVUFBQSxLQUFBLFFBQUEsS0FBQSxJQUFBO0FBQ0EsZUFBQSxRQUFBLFFBQUEsRUFBQSxNQUFBLE1BQUFBLEtBQUEsUUFBQSxJQUFBO0FBQUEsUUFDQTtBQUFBO0FBRUEsYUFBQWtoQjtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsZ0JBQUF6YyxHQUFBMGMsR0FBQUMsR0FBQXZoQixHQUFBO0FBQUEsTUFDQSxXQUFBaWdCO0FBQUEsTUFDQSxTQUFBQztBQUFBLE1BQ0EsZUFBQUM7QUFBQSxNQUNBLGFBQUFDO0FBQUEsSUFDQSxHQUFBO0FBRUEsWUFBQWlCLElBQUEsS0FBQSxhQUNBLEtBQUEsY0FBQXJoQixDQUFBLElBQ0EsS0FBQSxjQUFBQSxDQUFBO0FBQ0EsVUFBQXFoQjtBQUNBLFFBQUFwQixLQUFBLFFBQUFBLEtBQ0EsTUFBQSxLQUFBLGdCQUFBcmIsR0FBQSxXQUFBO0FBQUEsVUFDQSxRQUFBdWI7QUFBQSxRQUNBLENBQUE7QUFBQSxXQUNBO0FBQ0EsY0FBQTdkLElBQUE7QUFDQSxRQUFBNGQsS0FBQSxRQUFBQSxFQUFBNWQsSUFDQSxNQUFBLEtBQUEsZ0JBQUFzQyxHQUFBLFNBQUE7QUFBQSxVQUNBLFFBQUF3YjtBQUFBLFVBQ0EsT0FBQTlkO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUNBLGFBQUErZTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdmNBLE1BQUE3TixLQUFBZ08sR0FBQSxVQUFBLG9CQUFBLENBQUEsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaQSxJQUFJcE8sS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBT0QsRUFBSSxTQUFTekMsRUFBRyxPQUFPO0FBQUEsSUFDNUIsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ0EsRUFBRyxNQUFNeUMsRUFBSSxHQUFHQSxFQUFJLFFBQVEsU0FBVS9RLEdBQU87QUFDL0MsV0FBT3NPLEVBQUcsTUFBTSxDQUFDeUMsRUFBSSxHQUFHQSxFQUFJLEdBQUcvUSxDQUFLLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDeEMsQ0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUkrUSxFQUFJLEdBQUU7QUFDbkIsR0FDSUUsS0FBa0IsQ0FBRTtBQ2F4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLGVBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLE9BQUEsU0FBQSxLQUFBO0FBQUEsRUFDQTtBQUNBLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVCQSxJQUFJK04sS0FBUyxXQUFZO0FBQ3ZCLE1BQUlDLElBQUksTUFDSkMsSUFBR0QsRUFBSSxnQkFDUHpDLElBQUd5QyxFQUFJLE1BQU0sTUFBSUM7QUFFckIsU0FBTzFDLEVBQUcsT0FBTztBQUFBLElBQ2YsYUFBYTtBQUFBLEVBQ2pCLEdBQUt5QyxFQUFJLEdBQUdBLEVBQUksUUFBUSxTQUFVb08sR0FBT2poQixHQUFLO0FBQzFDLFdBQU9vUSxFQUFHLGVBQWU7QUFBQSxNQUN2QixLQUFLcFE7QUFBQSxNQUNMLE9BQU87QUFBQSxRQUNMLElBQU02UyxFQUFJLGFBQWFvTyxDQUFLO0FBQUEsUUFDNUIsUUFBVTtBQUFBLE1BQ1g7QUFBQSxNQUNELGFBQWFwTyxFQUFJLEdBQUcsQ0FBQztBQUFBLFFBQ25CLEtBQUs7QUFBQSxRQUNMLElBQUksU0FBVTRLLEdBQU07QUFDbEIsY0FBSXlELElBQVd6RCxFQUFLO0FBQ3BCLGlCQUFPLENBQUNyTixFQUFHLFVBQVU7QUFBQSxZQUNuQixhQUFhO0FBQUEsWUFDYixPQUFPO0FBQUEsY0FDTCxpQkFBaUI2USxFQUFNLFNBQVNwTyxFQUFJLE1BQU07QUFBQSxZQUMzQztBQUFBLFlBQ0QsT0FBTztBQUFBLGNBQ0wsTUFBUTtBQUFBLGNBQ1IsT0FBU29PLEVBQU0sUUFBUXBPLEVBQUksU0FBU29PLENBQUs7QUFBQSxZQUMxQztBQUFBLFlBQ0QsSUFBSTtBQUFBLGNBQ0YsT0FBU0M7QUFBQSxZQUNWO0FBQUEsVUFDRixHQUFFLENBQUNyTyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxTQUFTb08sQ0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQSxRQUMxQztBQUFBLE1BQ1QsQ0FBTyxHQUFHLE1BQU0sRUFBSTtBQUFBLElBQ3BCLENBQUs7QUFBQSxFQUNMLENBQUcsR0FBRyxDQUFDO0FBQ1AsR0FDSWxPLEtBQWtCLENBQUU7QUNZeEIsTUFBQUMsS0FBQW5PLEVBQUEsVUFBQSxlQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxhQUFBb2MsR0FBQTtBQUNBLFlBQUF6YyxJQUFBLEVBQUEsR0FBQSxLQUFBLE9BQUEsT0FBQXljLEVBQUEsS0FBQTtBQUNBLGFBQUF6YyxFQUFBLFNBQ0FBLEVBQUEsT0FBQSxJQUVBLEtBQUEsYUFBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0RBLElBQUlvTyxLQUFTLFdBQVk7QUFDdkIsTUFBSUMsSUFBSSxNQUNKQyxJQUFHRCxFQUFJLGdCQUNQekMsSUFBR3lDLEVBQUksTUFBTSxNQUFJQztBQUVyQixTQUFPMUMsRUFBRyxjQUFjO0FBQUEsSUFDdEIsT0FBTztBQUFBLE1BQ0wsVUFBWXlDLEVBQUk7QUFBQSxNQUNoQixPQUFTQSxFQUFJO0FBQUEsTUFDYixNQUFRQSxFQUFJO0FBQUEsSUFDYjtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsZUFBZSxTQUFVNkIsR0FBUTtBQUMvQixRQUFBN0IsRUFBSSxPQUFPNkI7QUFBQSxNQUNaO0FBQUEsSUFDRjtBQUFBLEVBQ0wsQ0FBRztBQUNILEdBQ0kzQixLQUFrQixDQUFFO0FDTHhCLE1BQUFDLEtBQUFuTyxFQUFBLFVBQUEsbUJBQUE7QUFBQSxFQUNBLFlBQUEsRUFBQSxZQUFBc2MsR0FBQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLE1BQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxnQkFBQSxDQUFBLEtBQUEsTUFBQSxRQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBakksR0FBQTtBQUNBLFFBQUEsS0FBQSxTQUFBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLEtBQUEsYUFBQTtBQUFBLFVBQ0EsR0FBQSxLQUFBO0FBQUEsVUFDQSxNQUFBQSxJQUFBO0FBQUEsUUFDQSxDQUFBLENBQUE7QUFBQSxNQUVBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztLQ25DZWtJLEtBQUE7QUFBQSxFQUNiLFFBQVEsQ0FBQ3JGLEVBQVM7QUFBQSxFQUVsQixPQUFPO0FBQ0wsV0FBTztBQUFBLE1BQ0wsVUFBVTtBQUFBLElBQ1g7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTO0FBQUEsSUFDUCxjQUFjO0FBQ1osV0FBSyxXQUFXO0FBQUEsSUFDakI7QUFBQSxJQUVELFVBQVUsRUFBRSxVQUFBc0YsR0FBVSxVQUFBQyxLQUFZO0FBQ2hDLFdBQUssV0FBVyxJQUNaRCxNQUFhQyxLQUNmLEtBQUssU0FBVTtBQUFBLElBRWxCO0FBQUEsSUFFRCxZQUFZbFksR0FBY21ZLEdBQU1DLEdBQWlCO0FBQy9DLFlBQU0sRUFBRSxVQUFBblQsRUFBUSxJQUFLakY7QUFDckIsVUFBSWlGLEdBQVU7QUFHWixjQUFNb1QsS0FBU0QsS0FBQSxnQkFBQUEsRUFBa0IsT0FBTTtBQUN2QyxpQkFBUyxJQUFJLEdBQUcsSUFBSUQsRUFBSyxRQUFRO0FBQy9CLFVBQUFBLEVBQUssR0FBR2xULEtBQVksSUFBSW9UO0FBQUEsTUFFM0I7QUFDRCxhQUFPRjtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0g7QUNyQ0EsSUFBSTNPLEtBQVMsV0FBWTtBQUN2QixNQUFJQyxJQUFJLE1BQ0pDLElBQUdELEVBQUksZ0JBQ1B6QyxJQUFHeUMsRUFBSSxNQUFNLE1BQUlDO0FBRXJCLFNBQU8xQyxFQUFHLE9BQU87QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLGlCQUFpQnlDLEVBQUk7QUFBQSxNQUNyQixlQUFlQSxFQUFJO0FBQUEsSUFDcEI7QUFBQSxJQUNELE9BQU9BLEVBQUksUUFBUSxLQUFLO0FBQUEsTUFDdEIsV0FBV0EsRUFBSTtBQUFBLElBQ2hCO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxJQUFNQSxFQUFJO0FBQUEsSUFDWDtBQUFBLEVBQ0YsR0FBRSxDQUFDQSxFQUFJLFFBQVF6QyxFQUFHLE9BQU87QUFBQSxJQUN4QixhQUFhO0FBQUEsRUFDZCxHQUFFLENBQUN5QyxFQUFJLGFBQWF6QyxFQUFHLE9BQU87QUFBQSxJQUM3QixhQUFhO0FBQUEsSUFDYixJQUFJO0FBQUEsTUFDRixPQUFTLFNBQVVzRSxHQUFRO0FBQ3pCLFFBQUFBLEVBQU8sZ0JBQWUsR0FDdEI3QixFQUFJLFNBQVMsQ0FBQ0EsRUFBSTtBQUFBLE1BQ25CO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRSxDQUFDQSxFQUFJLGFBQWF6QyxFQUFHLE9BQU87QUFBQSxJQUM3QixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxlQUFleUMsRUFBSTtBQUFBLElBQ3BCO0FBQUEsRUFDRixDQUFBLElBQUlBLEVBQUksTUFBTXpDLEVBQUcsT0FBTztBQUFBLElBQ3ZCLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxNQUNSLFdBQWF5QyxFQUFJLEdBQUdBLEVBQUksS0FBSztBQUFBLElBQzlCO0FBQUEsRUFDRixDQUFBLEdBQUdBLEVBQUksVUFBVXpDLEVBQUcsT0FBTztBQUFBLElBQzFCLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUN5QyxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUlBLEVBQUksR0FBRSxDQUFFLENBQUMsSUFBSXpDLEVBQUcsT0FBTztBQUFBLElBQ3pELGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUNBLEVBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsVUFBVTtBQUFBLE1BQ1IsV0FBYXlDLEVBQUksR0FBR0EsRUFBSSxLQUFLO0FBQUEsSUFDOUI7QUFBQSxFQUNGLENBQUEsQ0FBQyxDQUFDLEdBQUdBLEVBQUksaUJBQWlCekMsRUFBRyxPQUFPO0FBQUEsSUFDbkMsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQ3lDLEVBQUksWUFBWXpDLEVBQUcsS0FBS3lDLEVBQUksR0FBRztBQUFBLElBQ2pDLGFBQWE7QUFBQSxFQUNqQixHQUFLLEtBQUtBLEVBQUksb0JBQW9CQSxFQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUssQ0FBQyxJQUFJQSxFQUFJLEdBQUksR0FBRUEsRUFBSSxXQUFXekMsRUFBRyxVQUFVeUMsRUFBSSxHQUFHO0FBQUEsSUFDdEcsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLElBQ1Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVNBLEVBQUk7QUFBQSxJQUNkO0FBQUEsRUFDTCxHQUFLLFVBQVVBLEVBQUksb0JBQW9CQSxFQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUssQ0FBQyxJQUFJQSxFQUFJLEdBQUksR0FBRUEsRUFBSSxZQUFZekMsRUFBRyxVQUFVeUMsRUFBSSxHQUFHO0FBQUEsSUFDNUcsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLElBQ1Q7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLE9BQVNBLEVBQUk7QUFBQSxJQUNkO0FBQUEsRUFDRixHQUFFLFVBQVVBLEVBQUksb0JBQW9CQSxFQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUssQ0FBQyxJQUFJQSxFQUFJLEdBQUUsQ0FBRSxDQUFDLElBQUlBLEVBQUksSUFBSSxDQUFDLElBQUlBLEVBQUksR0FBSSxHQUFFQSxFQUFJLGFBQWF6QyxFQUFHLFNBQVM7QUFBQSxJQUNqSSxZQUFZLENBQUM7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE9BQU95QyxFQUFJO0FBQUEsTUFDWCxZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLElBQ0QsYUFBYTtBQUFBLEVBQ2QsR0FBRUEsRUFBSSxHQUFHQSxFQUFJLFlBQVksU0FBVXdLLEdBQVU7QUFDNUMsV0FBT2pOLEVBQUcsTUFBTSxDQUFDQSxFQUFHLE1BQU0sQ0FBQ2lOLEVBQVMsVUFBVSxLQUFRak4sRUFBRyxjQUFjO0FBQUEsTUFDckUsT0FBTztBQUFBLFFBQ0wsVUFBWXlDLEVBQUksb0JBQW9Cd0ssQ0FBUTtBQUFBLFFBQzVDLE9BQVN4SyxFQUFJLFNBQVN3SyxDQUFRO0FBQUEsTUFDL0I7QUFBQSxJQUNQLENBQUssSUFBSXhLLEVBQUksR0FBSSxDQUFBLEdBQUcsQ0FBQyxHQUFHekMsRUFBRyxtQkFBbUI7QUFBQSxNQUN4QyxPQUFPO0FBQUEsUUFDTCxNQUFRaU47QUFBQSxRQUNSLFFBQVVBO0FBQUEsUUFDVixVQUFZeEssRUFBSSxvQkFBb0J3SyxDQUFRO0FBQUEsUUFDNUMsTUFBUXhLLEVBQUk7QUFBQSxRQUNaLE1BQVFBLEVBQUk7QUFBQSxRQUNaLE9BQVNBLEVBQUk7QUFBQSxRQUNiLFVBQVlBLEVBQUk7QUFBQSxNQUNqQjtBQUFBLElBQ1AsQ0FBSyxDQUFDLEdBQUcsQ0FBQztBQUFBLEVBQ1AsQ0FBQSxHQUFHLENBQUMsSUFBSUEsRUFBSSxHQUFJLEdBQUVBLEVBQUksaUJBQWlCekMsRUFBRyxpQkFBaUJ5QyxFQUFJLEdBQUc7QUFBQSxJQUNqRSxZQUFZLENBQUM7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE9BQU9BLEVBQUk7QUFBQSxNQUNYLFlBQVk7QUFBQSxJQUNsQixDQUFLO0FBQUEsSUFDRCxPQUFPO0FBQUEsTUFDTCxNQUFRQSxFQUFJLFlBQVlBLEVBQUksZ0JBQWdCQSxFQUFJLFlBQVk7QUFBQSxJQUM3RDtBQUFBLElBQ0QsSUFBSTtBQUFBLE1BQ0YsT0FBU0EsRUFBSTtBQUFBLE1BQ2IsS0FBTyxTQUFVNkIsR0FBUTtBQUN2QixlQUFPN0IsRUFBSSxVQUFVNkIsR0FBUTdCLEVBQUksY0FBYztBQUFBLE1BQ2hEO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxpQkFBaUJBLEVBQUksZUFBZUEsRUFBSSxtQkFBbUIsRUFBSSxHQUFHLEVBQUssR0FBR0EsRUFBSSxHQUFHQSxFQUFJLGVBQWUsU0FBVXhILEdBQU1oTSxHQUFPO0FBQzVILFdBQU8rUSxFQUFHLGtCQUFrQjtBQUFBLE1BQzFCLEtBQUt5QyxFQUFJLFdBQVdBLEVBQUksZ0JBQWdCeEgsRUFBSyxJQUFJO0FBQUEsTUFDakQsT0FBTztBQUFBLFFBQ0wsUUFBVXdILEVBQUk7QUFBQSxRQUNkLFVBQVlBLEVBQUksZ0JBQWdCQSxFQUFJLGdCQUFnQnhULENBQUs7QUFBQSxRQUN6RCxNQUFRZ00sRUFBSztBQUFBLFFBQ2IsTUFBUUEsRUFBSztBQUFBLFFBQ2IsTUFBUUEsRUFBSztBQUFBLFFBQ2IsUUFBVUEsRUFBSztBQUFBLFFBQ2YsV0FBYXdILEVBQUk7QUFBQSxRQUNqQixPQUFTQSxFQUFJLGFBQWFBLEVBQUksZ0JBQWdCeEgsRUFBSyxNQUFNO0FBQUEsVUFDdkQsT0FBQWhNO0FBQUEsUUFDVixDQUFTO0FBQUEsUUFDRCxPQUFTd1QsRUFBSSxRQUFRO0FBQUEsTUFDdEI7QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNMLENBQUcsR0FBRyxDQUFDLElBQUlBLEVBQUksR0FBSSxDQUFBLEdBQUcsQ0FBQztBQUN2QixHQUNJRSxLQUFrQixDQUFFO0FDbUN4QixNQUFBQyxLQUFBbk8sRUFBQSxVQUFBLGtCQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsY0FBQTZjLEdBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQU4sRUFBQTtBQUFBLEVBQ0EsUUFBQSxDQUFBLFdBQUE7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxPQUFBLE1BQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEVBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsUUFBQSxLQUFBLFFBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLE9BQUE7QUFDQSxhQUFBLEtBQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxHQUFBLEtBQUE7QUFBQSxRQUNBLFFBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQXpSLEVBQUEsS0FBQSxPQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxpQkFBQTtBQUNBLGFBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEs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
|