@nlabs/gothamjs
Version:
Platform
500 lines (499 loc) • 62.4 kB
JavaScript
/**
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
*/ export const colorLuminance = (hexValue, luminance = 0)=>{
// Validate hex string
let hex = String(hexValue).replace(/[^0-9a-f]/gi, '');
if (hex.length < 6) {
hex = `${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`;
}
let rgb = '#';
let color;
let colorIdx;
for(let index = 0; index < 3; index++){
colorIdx = parseInt(hex.substr(index * 2, 2), 16);
color = Math.round(Math.min(Math.max(0, colorIdx + colorIdx * luminance), 255)).toString(16);
rgb += `00${color}`.substr(color.length);
}
return rgb;
};
export const gothamColors = [
'primary',
'secondary',
'tertiary',
'link',
'neutral',
'black',
'white',
'error',
'warning',
'success',
'info'
];
export const getTextClasses = (color, options = {})=>{
const { hasFocus = false, hasHover = false } = options;
const classes = [];
if (color === 'primary') {
classes.push('text-primary dark:text-primary-dark');
if (hasHover) {
classes.push('hover:text-primary-700 dark:hover:text-primary-dark-300');
}
if (hasFocus) {
classes.push('focus:text-primary-700 dark:focus:text-primary-dark-300');
}
} else if (color === 'secondary') {
classes.push('text-secondary dark:text-secondary-dark');
if (hasHover) {
classes.push('hover:text-secondary-700 dark:hover:text-secondary-dark-300');
}
if (hasFocus) {
classes.push('focus:text-secondary-700 dark:focus:text-secondary-dark-300');
}
} else if (color === 'tertiary') {
classes.push('text-tertiary dark:text-tertiary-dark');
if (hasHover) {
classes.push('hover:text-tertiary-700 dark:hover:text-tertiary-dark-300');
}
if (hasFocus) {
classes.push('focus:text-tertiary-700 dark:focus:text-tertiary-dark-300');
}
} else if (color === 'link') {
classes.push('text-link dark:text-link-dark');
if (hasHover) {
classes.push('hover:text-link-700 dark:hover:text-link-dark-300');
}
if (hasFocus) {
classes.push('focus:text-link-700 dark:focus:text-link-dark-300');
}
} else if (color === 'neutral') {
classes.push('text-neutral dark:text-neutral-dark');
if (hasHover) {
classes.push('hover:text-neutral-700 dark:hover:text-neutral-dark-300');
}
if (hasFocus) {
classes.push('focus:text-neutral-700 dark:focus:text-neutral-dark-300');
}
} else if (color === 'white') {
classes.push('text-white dark:text-white-dark');
if (hasHover) {
classes.push('hover:text-white-300 dark:hover:text-white-dark-300');
}
if (hasFocus) {
classes.push('focus:text-white-700 dark:focus:text-white-dark-700');
}
} else if (color === 'error') {
classes.push('text-error dark:text-error-dark');
if (hasHover) {
classes.push('hover:text-error-700 dark:hover:text-error-dark-300');
}
if (hasFocus) {
classes.push('focus:text-error-700 dark:focus:text-error-dark-300');
}
} else if (color === 'warning') {
classes.push('text-warning dark:text-warning-dark');
if (hasHover) {
classes.push('hover:text-warning-700 dark:hover:text-warning-dark-300');
}
} else if (color === 'success') {
classes.push('text-success dark:text-success-dark');
if (hasHover) {
classes.push('hover:text-success-700 dark:hover:text-success-dark-300');
}
if (hasFocus) {
classes.push('focus:text-success-700 dark:focus:text-success-dark-300');
}
} else if (color === 'info') {
classes.push('text-info dark:text-info-dark');
if (hasHover) {
classes.push('hover:text-info-700 dark:hover:text-info-dark-300');
}
if (hasFocus) {
classes.push('focus:text-info-700 dark:focus:text-info-dark-300');
}
} else {
classes.push('text-black dark:text-white');
if (hasHover) {
classes.push('hover:text-black dark:hover:text-black-dark');
}
if (hasFocus) {
classes.push('focus:text-black-900 dark:focus:text-black-dark-900');
}
}
return classes.join(' ');
};
export const getPlaceholderClasses = (color, options = {})=>{
const { hasFocus = false, hasHover = false } = options;
const classes = [];
if (color === 'primary') {
classes.push('placeholder:text-primary dark:placeholder:text-primary-dark');
if (hasHover) {
classes.push('hover:placeholder:text-primary-700 dark:hover:placeholder:text-primary-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-primary-700 dark:focus:placeholder:text-primary-dark-300');
}
} else if (color === 'secondary') {
classes.push('placeholder:text-secondary dark:placeholder:text-secondary-dark');
if (hasHover) {
classes.push('hover:placeholder:text-secondary-700 dark:hover:placeholder:text-secondary-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-secondary-700 dark:focus:placeholder:text-secondary-dark-300');
}
} else if (color === 'tertiary') {
classes.push('placeholder:text-tertiary dark:placeholder:text-tertiary-dark');
if (hasHover) {
classes.push('hover:placeholder:text-tertiary-700 dark:hover:placeholder:text-tertiary-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-tertiary-700 dark:focus:placeholder:text-tertiary-dark-300');
}
} else if (color === 'link') {
classes.push('placeholder:text-link dark:placeholder:text-link-dark');
if (hasHover) {
classes.push('hover:placeholder:text-link-700 dark:hover:placeholder:text-link-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-link-700 dark:focus:placeholder:text-link-dark-300');
}
} else if (color === 'neutral') {
classes.push('placeholder:text-neutral dark:placeholder:text-neutral-dark');
if (hasHover) {
classes.push('hover:placeholder:text-neutral-700 dark:hover:placeholder:text-neutral-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-neutral-700 dark:focus:placeholder:text-neutral-dark-300');
}
} else if (color === 'white') {
classes.push('placeholder:text-white dark:placeholder:text-black');
if (hasHover) {
classes.push('hover:placeholder:text-white-700 dark:hover:placeholder:text-black-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-white-700 dark:focus:placeholder:text-black-dark-300');
}
} else if (color === 'error') {
classes.push('placeholder:text-error dark:placeholder:text-error-dark');
if (hasHover) {
classes.push('hover:placeholder:text-error-700 dark:hover:placeholder:text-error-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-error-700 dark:focus:placeholder:text-error-dark-300');
}
} else if (color === 'warning') {
classes.push('placeholder:text-warning dark:placeholder:text-warning-dark');
if (hasHover) {
classes.push('hover:placeholder:text-warning-700 dark:hover:placeholder:text-warning-dark-300');
}
} else if (color === 'success') {
classes.push('placeholder:text-success dark:placeholder:text-success-dark');
if (hasHover) {
classes.push('hover:placeholder:text-success-700 dark:hover:placeholder:text-success-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-success-700 dark:focus:placeholder:text-success-dark-300');
}
} else if (color === 'info') {
classes.push('placeholder:text-info dark:placeholder:text-info-dark');
if (hasHover) {
classes.push('hover:placeholder:text-info-700 dark:hover:placeholder:text-info-dark-300');
}
if (hasFocus) {
classes.push('focus:placeholder:text-info-700 dark:focus:placeholder:text-info-dark-300');
}
} else {
classes.push('placeholder:text-black dark:placeholder:text-white');
if (hasHover) {
classes.push('hover:placeholder:text-black dark:hover:placeholder:text-white');
}
if (hasFocus) {
classes.push('focus:placeholder:text-black dark:focus:placeholder:text-white');
}
}
return classes.join(' ');
};
export const getErrorClasses = (errorColor)=>{
if (errorColor === 'error') {
return 'text-error dark:text-error-dark';
} else if (errorColor === 'warning') {
return 'text-warning dark:text-warning-dark';
} else if (errorColor === 'success') {
return 'text-success dark:text-success-dark';
} else {
return 'text-info dark:text-info-dark';
}
};
export const getBorderClasses = (color, options = {})=>{
const { hasFocus = false, hasHover = false } = options;
const classes = [];
if (color === 'primary') {
classes.push('border-primary dark:border-primary-dark');
if (hasHover) {
classes.push('hover:border-primary-700 dark:hover:border-primary-dark-300');
}
if (hasFocus) {
classes.push('focus:border-primary-700 dark:focus:border-primary-dark-300');
}
} else if (color === 'secondary') {
classes.push('border-secondary dark:border-secondary-dark');
if (hasHover) {
classes.push('hover:border-secondary-700 dark:hover:border-secondary-dark-300');
}
if (hasFocus) {
classes.push('focus:border-secondary-700 dark:focus:border-secondary-dark-300');
}
} else if (color === 'tertiary') {
classes.push('border-tertiary dark:border-tertiary-dark');
if (hasHover) {
classes.push('hover:border-tertiary-700 dark:hover:border-tertiary-dark-300');
}
if (hasFocus) {
classes.push('focus:border-tertiary-700 dark:focus:border-tertiary-dark-300');
}
} else if (color === 'error') {
classes.push('border-error dark:border-error-dark');
if (hasHover) {
classes.push('hover:border-error-700 dark:hover:border-error-dark-300');
}
if (hasFocus) {
classes.push('focus:border-error-700 dark:focus:border-error-dark-300');
}
} else if (color === 'warning') {
classes.push('border-warning dark:border-warning-dark');
if (hasHover) {
classes.push('hover:border-warning-700 dark:hover:border-warning-dark-300');
}
if (hasFocus) {
classes.push('focus:border-warning-700 dark:focus:border-warning-dark-300');
}
} else if (color === 'success') {
classes.push('border-success dark:border-success-dark');
if (hasHover) {
classes.push('hover:border-success-700 dark:hover:border-success-dark-300');
}
if (hasFocus) {
classes.push('focus:border-success-700 dark:focus:border-success-dark-300');
}
} else if (color === 'info') {
classes.push('border-info dark:border-info-dark');
if (hasHover) {
classes.push('hover:border-info-700 dark:hover:border-info-dark-300');
}
if (hasFocus) {
classes.push('focus:border-info-700 dark:focus:border-info-dark-300');
}
} else {
classes.push('border-black dark:border-white');
if (hasHover) {
classes.push('hover:border-black dark:hover:border-white');
}
if (hasFocus) {
classes.push('focus:border-black dark:focus:border-white');
}
}
return classes.join(' ');
};
export const getOutlineClasses = (color, options = {})=>{
const { hasFocus = false, hasHover = false } = options;
const classes = [];
if (color === 'primary') {
classes.push('outline-primary dark:outline-primary-dark');
if (hasHover) {
classes.push('hover:outline-primary-700 dark:hover:outline-primary-dark-300');
}
if (hasFocus) {
classes.push('focus:outline-primary-700 dark:focus:outline-primary-dark-300');
}
} else if (color === 'secondary') {
classes.push('outline-secondary dark:outline-secondary-dark');
if (hasHover) {
classes.push('hover:outline-secondary-700 dark:hover:outline-secondary-dark-300');
}
if (hasFocus) {
classes.push('focus:outline-secondary-700 dark:focus:outline-secondary-dark-300');
}
} else if (color === 'tertiary') {
classes.push('outline-tertiary dark:outline-tertiary-dark');
if (hasHover) {
classes.push('hover:outline-tertiary-700 dark:hover:outline-tertiary-dark-300');
}
if (hasFocus) {
classes.push('focus:outline-tertiary-700 dark:focus:outline-tertiary-dark-300');
}
} else if (color === 'error') {
classes.push('outline-error dark:outline-error-dark');
if (hasHover) {
classes.push('hover:outline-error-700 dark:hover:outline-error-dark-300');
}
if (hasFocus) {
classes.push('focus:outline-error-700 dark:focus:outline-error-dark-300');
}
} else if (color === 'warning') {
classes.push('outline-warning dark:outline-warning-dark');
if (hasHover) {
classes.push('hover:outline-warning-700 dark:hover:outline-warning-dark-300');
}
if (hasFocus) {
classes.push('focus:outline-warning-700 dark:focus:outline-warning-dark-300');
}
} else if (color === 'success') {
classes.push('outline-success dark:outline-success-dark');
if (hasHover) {
classes.push('hover:outline-success-700 dark:hover:outline-success-dark-300');
}
if (hasFocus) {
classes.push('focus:outline-success-700 dark:focus:outline-success-dark-300');
}
} else if (color === 'info') {
classes.push('outline-info dark:outline-info-dark');
if (hasHover) {
classes.push('hover:outline-info-700 dark:hover:outline-info-dark-300');
}
if (hasFocus) {
classes.push('focus:outline-info-700 dark:focus:outline-info-dark-300');
}
} else {
classes.push('outline-black dark:outline-white');
if (hasHover) {
classes.push('hover:outline-black dark:hover:outline-white');
}
if (hasFocus) {
classes.push('focus:outline-black dark:focus:outline-white');
}
}
return classes.join(' ');
};
export const getCheckedClasses = (color)=>{
const classes = [];
if (color === 'primary') {
classes.push('checked:border-primary-700 dark:checked:border-primary-dark-300 checked:bg-primary-700 dark:checked:bg-primary-dark-300');
} else if (color === 'secondary') {
classes.push('checked:border-secondary-700 dark:checked:border-secondary-dark-300 checked:bg-secondary-700 dark:checked:bg-secondary-dark-300');
} else if (color === 'tertiary') {
classes.push('checked:border-tertiary-700 dark:checked:border-tertiary-dark-300 checked:bg-tertiary-700 dark:checked:bg-tertiary-dark-300');
} else if (color === 'neutral') {
classes.push('checked:border-neutral-700 dark:checked:border-neutral-dark-300 checked:bg-neutral-700 dark:checked:bg-neutral-dark-300');
} else if (color === 'error') {
classes.push('checked:border-error-700 dark:checked:border-error-dark-300 checked:bg-error-700 dark:checked:bg-error-dark-300');
} else if (color === 'warning') {
classes.push('checked:border-warning-700 dark:checked:border-warning-dark-300 checked:bg-warning-700 dark:checked:bg-warning-dark-300');
} else if (color === 'success') {
classes.push('checked:border-success-700 dark:checked:border-success-dark-300 checked:bg-success-700 dark:checked:bg-success-dark-300');
} else if (color === 'white') {
classes.push('checked:border-white-700 dark:checked:border-black-dark-300 checked:bg-white-700 dark:checked:bg-black-dark-300');
} else if (color === 'black') {
classes.push('checked:border-black-700 dark:checked:border-white-dark-300 checked:bg-black-700 dark:checked:bg-white-dark-300');
}
return classes.join(' ');
};
export const getBackgroundClasses = (color, options = {})=>{
const { hasFocus = false, hasHover = false } = options;
const classes = [];
if (color === 'primary') {
classes.push('bg-primary dark:bg-primary-dark');
if (hasHover) {
classes.push('hover:bg-primary-700 dark:hover:bg-primary-dark-300');
}
if (hasFocus) {
classes.push('focus:bg-primary-700 dark:focus:bg-primary-dark-300');
}
} else if (color === 'secondary') {
classes.push('bg-secondary dark:bg-secondary-dark');
if (hasHover) {
classes.push('hover:bg-secondary-700 dark:hover:bg-secondary-dark-300');
}
if (hasFocus) {
classes.push('focus:bg-secondary-700 dark:focus:bg-secondary-dark-300');
}
} else if (color === 'tertiary') {
classes.push('bg-tertiary dark:bg-tertiary-dark');
if (hasHover) {
classes.push('hover:bg-tertiary-700 dark:hover:bg-tertiary-dark-300');
}
if (hasFocus) {
classes.push('focus:bg-tertiary-700 dark:focus:bg-tertiary-dark-300');
}
} else if (color === 'neutral') {
classes.push('bg-neutral dark:bg-neutral-dark');
if (hasHover) {
classes.push('hover:bg-neutral-700 dark:hover:bg-neutral-dark-300');
}
if (hasFocus) {
classes.push('focus:bg-neutral-700 dark:focus:bg-neutral-dark-300');
}
} else if (color === 'white') {
classes.push('bg-white dark:bg-black');
if (hasHover) {
classes.push('hover:bg-white-700 dark:hover:bg-black-dark-300');
}
if (hasFocus) {
classes.push('focus:bg-white-700 dark:focus:bg-black-dark-300');
}
} else if (color === 'black') {
classes.push('bg-black dark:bg-white');
if (hasHover) {
classes.push('hover:bg-black-700 dark:hover:bg-white-dark-300');
}
if (hasFocus) {
classes.push('focus:bg-black-700 dark:focus:bg-white-dark-300');
}
} else if (color === 'transparent') {
classes.push('bg-transparent');
}
return classes.join(' ');
};
export const getBackgroundViewClasses = (color, options = {})=>{
const { hasFocus = false, hasHover = false } = options;
const classes = [];
if (color === 'primary') {
classes.push('bg-background-primary dark:bg-background-primary-dark');
if (hasHover) {
classes.push('hover:bg-background-primary-700 dark:hover:bg-background-primary-300');
}
if (hasFocus) {
classes.push('focus:bg-background-primary-700 dark:focus:bg-background-primary-300');
}
} else if (color === 'secondary') {
classes.push('bg-background-secondary dark:bg-background-secondary-dark');
if (hasHover) {
classes.push('hover:bg-background-secondary-700 dark:hover:bg-background-secondary-300');
}
if (hasFocus) {
classes.push('focus:bg-background-secondary-700 dark:focus:bg-background-secondary-300');
}
} else if (color === 'tertiary') {
classes.push('bg-background-tertiary dark:bg-background-tertiary-dark');
if (hasHover) {
classes.push('hover:bg-background-tertiary-700 dark:hover:bg-background-tertiary-300');
}
if (hasFocus) {
classes.push('focus:bg-background-tertiary-700 dark:focus:bg-background-tertiary-300');
}
} else if (color === 'neutral') {
classes.push('bg-background-neutral dark:bg-background-neutral-dark');
if (hasHover) {
classes.push('hover:bg-background-neutral-700 dark:hover:bg-background-neutral-300');
}
if (hasFocus) {
classes.push('focus:bg-background-neutral-700 dark:focus:bg-background-neutral-300');
}
} else if (color === 'white') {
classes.push('bg-white dark:bg-black');
if (hasHover) {
classes.push('hover:bg-white-700 dark:hover:bg-black-300');
}
if (hasFocus) {
classes.push('focus:bg-white-700 dark:focus:bg-black-300');
}
} else if (color === 'black') {
classes.push('bg-black dark:bg-white');
if (hasHover) {
classes.push('hover:bg-black-700 dark:hover:bg-white-300');
}
if (hasFocus) {
classes.push('focus:bg-black-700 dark:focus:bg-white-300');
}
}
return classes.join(' ');
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy9jb2xvclV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5leHBvcnQgdHlwZSBHb3RoYW1Db2xvciA9ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3RlcnRpYXJ5JyB8ICdsaW5rJyB8ICduZXV0cmFsJyB8ICd3aGl0ZScgfCAnYmxhY2snIHwgJ2Vycm9yJyB8ICd3YXJuaW5nJyB8ICdzdWNjZXNzJyB8ICdpbmZvJyB8ICd0cmFuc3BhcmVudCc7XG5cbmV4cG9ydCBjb25zdCBjb2xvckx1bWluYW5jZSA9IChoZXhWYWx1ZTogc3RyaW5nLCBsdW1pbmFuY2U6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xuICAvLyBWYWxpZGF0ZSBoZXggc3RyaW5nXG4gIGxldCBoZXg6IHN0cmluZyA9IFN0cmluZyhoZXhWYWx1ZSkucmVwbGFjZSgvW14wLTlhLWZdL2dpLCAnJyk7XG5cbiAgaWYoaGV4Lmxlbmd0aCA8IDYpIHtcbiAgICBoZXggPSBgJHtoZXhbMF19JHtoZXhbMF19JHtoZXhbMV19JHtoZXhbMV19JHtoZXhbMl19JHtoZXhbMl19YDtcbiAgfVxuXG4gIGxldCByZ2IgPSAnIyc7XG4gIGxldCBjb2xvcjogc3RyaW5nO1xuICBsZXQgY29sb3JJZHg6IG51bWJlcjtcblxuICBmb3IobGV0IGluZGV4OiBudW1iZXIgPSAwOyBpbmRleCA8IDM7IGluZGV4KyspIHtcbiAgICBjb2xvcklkeCA9IHBhcnNlSW50KGhleC5zdWJzdHIoaW5kZXggKiAyLCAyKSwgMTYpO1xuICAgIGNvbG9yID0gTWF0aC5yb3VuZChNYXRoLm1pbihNYXRoLm1heCgwLCBjb2xvcklkeCArIChjb2xvcklkeCAqIGx1bWluYW5jZSkpLCAyNTUpKS50b1N0cmluZygxNik7XG4gICAgcmdiICs9IChgMDAke2NvbG9yfWApLnN1YnN0cihjb2xvci5sZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIHJnYjtcbn07XG5cbmV4cG9ydCBjb25zdCBnb3RoYW1Db2xvcnMgPSBbXG4gICdwcmltYXJ5JyxcbiAgJ3NlY29uZGFyeScsXG4gICd0ZXJ0aWFyeScsXG4gICdsaW5rJyxcbiAgJ25ldXRyYWwnLFxuICAnYmxhY2snLFxuICAnd2hpdGUnLFxuICAnZXJyb3InLFxuICAnd2FybmluZycsXG4gICdzdWNjZXNzJyxcbiAgJ2luZm8nXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0eWxlQ2xhc3NPcHRpb25zIHtcbiAgcmVhZG9ubHkgaGFzRXJyb3I/OiBib29sZWFuO1xuICByZWFkb25seSBoYXNGb2N1cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGhhc0hvdmVyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRleHRDbGFzc2VzID0gKGNvbG9yOiBHb3RoYW1Db2xvciwgb3B0aW9uczogU3R5bGVDbGFzc09wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgaGFzRm9jdXMgPSBmYWxzZSxcbiAgICBoYXNIb3ZlciA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChjb2xvciA9PT0gJ3ByaW1hcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCd0ZXh0LXByaW1hcnkgZGFyazp0ZXh0LXByaW1hcnktZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6dGV4dC1wcmltYXJ5LTcwMCBkYXJrOmhvdmVyOnRleHQtcHJpbWFyeS1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnRleHQtcHJpbWFyeS03MDAgZGFyazpmb2N1czp0ZXh0LXByaW1hcnktZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzZWNvbmRhcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCd0ZXh0LXNlY29uZGFyeSBkYXJrOnRleHQtc2Vjb25kYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOnRleHQtc2Vjb25kYXJ5LTcwMCBkYXJrOmhvdmVyOnRleHQtc2Vjb25kYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6dGV4dC1zZWNvbmRhcnktNzAwIGRhcms6Zm9jdXM6dGV4dC1zZWNvbmRhcnktZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICd0ZXJ0aWFyeScpIHtcbiAgICBjbGFzc2VzLnB1c2goJ3RleHQtdGVydGlhcnkgZGFyazp0ZXh0LXRlcnRpYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOnRleHQtdGVydGlhcnktNzAwIGRhcms6aG92ZXI6dGV4dC10ZXJ0aWFyeS1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnRleHQtdGVydGlhcnktNzAwIGRhcms6Zm9jdXM6dGV4dC10ZXJ0aWFyeS1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmKGNvbG9yID09PSAnbGluaycpIHtcbiAgICBjbGFzc2VzLnB1c2goJ3RleHQtbGluayBkYXJrOnRleHQtbGluay1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3Zlcjp0ZXh0LWxpbmstNzAwIGRhcms6aG92ZXI6dGV4dC1saW5rLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6dGV4dC1saW5rLTcwMCBkYXJrOmZvY3VzOnRleHQtbGluay1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ25ldXRyYWwnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCd0ZXh0LW5ldXRyYWwgZGFyazp0ZXh0LW5ldXRyYWwtZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6dGV4dC1uZXV0cmFsLTcwMCBkYXJrOmhvdmVyOnRleHQtbmV1dHJhbC1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnRleHQtbmV1dHJhbC03MDAgZGFyazpmb2N1czp0ZXh0LW5ldXRyYWwtZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICd3aGl0ZScpIHtcbiAgICBjbGFzc2VzLnB1c2goJ3RleHQtd2hpdGUgZGFyazp0ZXh0LXdoaXRlLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOnRleHQtd2hpdGUtMzAwIGRhcms6aG92ZXI6dGV4dC13aGl0ZS1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnRleHQtd2hpdGUtNzAwIGRhcms6Zm9jdXM6dGV4dC13aGl0ZS1kYXJrLTcwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ2Vycm9yJykge1xuICAgIGNsYXNzZXMucHVzaCgndGV4dC1lcnJvciBkYXJrOnRleHQtZXJyb3ItZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6dGV4dC1lcnJvci03MDAgZGFyazpob3Zlcjp0ZXh0LWVycm9yLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6dGV4dC1lcnJvci03MDAgZGFyazpmb2N1czp0ZXh0LWVycm9yLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnd2FybmluZycpIHtcbiAgICBjbGFzc2VzLnB1c2goJ3RleHQtd2FybmluZyBkYXJrOnRleHQtd2FybmluZy1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3Zlcjp0ZXh0LXdhcm5pbmctNzAwIGRhcms6aG92ZXI6dGV4dC13YXJuaW5nLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc3VjY2VzcycpIHtcbiAgICBjbGFzc2VzLnB1c2goJ3RleHQtc3VjY2VzcyBkYXJrOnRleHQtc3VjY2Vzcy1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3Zlcjp0ZXh0LXN1Y2Nlc3MtNzAwIGRhcms6aG92ZXI6dGV4dC1zdWNjZXNzLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6dGV4dC1zdWNjZXNzLTcwMCBkYXJrOmZvY3VzOnRleHQtc3VjY2Vzcy1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ2luZm8nKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCd0ZXh0LWluZm8gZGFyazp0ZXh0LWluZm8tZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6dGV4dC1pbmZvLTcwMCBkYXJrOmhvdmVyOnRleHQtaW5mby1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnRleHQtaW5mby03MDAgZGFyazpmb2N1czp0ZXh0LWluZm8tZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2xhc3Nlcy5wdXNoKCd0ZXh0LWJsYWNrIGRhcms6dGV4dC13aGl0ZScpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6dGV4dC1ibGFjayBkYXJrOmhvdmVyOnRleHQtYmxhY2stZGFyaycpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnRleHQtYmxhY2stOTAwIGRhcms6Zm9jdXM6dGV4dC1ibGFjay1kYXJrLTkwMCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGdldFBsYWNlaG9sZGVyQ2xhc3NlcyA9IChjb2xvcjogR290aGFtQ29sb3IsIG9wdGlvbnM6IFN0eWxlQ2xhc3NPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGhhc0ZvY3VzID0gZmFsc2UsXG4gICAgaGFzSG92ZXIgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sb3IgPT09ICdwcmltYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgncGxhY2Vob2xkZXI6dGV4dC1wcmltYXJ5IGRhcms6cGxhY2Vob2xkZXI6dGV4dC1wcmltYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOnBsYWNlaG9sZGVyOnRleHQtcHJpbWFyeS03MDAgZGFyazpob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LXByaW1hcnktZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LXByaW1hcnktNzAwIGRhcms6Zm9jdXM6cGxhY2Vob2xkZXI6dGV4dC1wcmltYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc2Vjb25kYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgncGxhY2Vob2xkZXI6dGV4dC1zZWNvbmRhcnkgZGFyazpwbGFjZWhvbGRlcjp0ZXh0LXNlY29uZGFyeS1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LXNlY29uZGFyeS03MDAgZGFyazpob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LXNlY29uZGFyeS1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnBsYWNlaG9sZGVyOnRleHQtc2Vjb25kYXJ5LTcwMCBkYXJrOmZvY3VzOnBsYWNlaG9sZGVyOnRleHQtc2Vjb25kYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAndGVydGlhcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdwbGFjZWhvbGRlcjp0ZXh0LXRlcnRpYXJ5IGRhcms6cGxhY2Vob2xkZXI6dGV4dC10ZXJ0aWFyeS1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LXRlcnRpYXJ5LTcwMCBkYXJrOmhvdmVyOnBsYWNlaG9sZGVyOnRleHQtdGVydGlhcnktZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LXRlcnRpYXJ5LTcwMCBkYXJrOmZvY3VzOnBsYWNlaG9sZGVyOnRleHQtdGVydGlhcnktZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZihjb2xvciA9PT0gJ2xpbmsnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdwbGFjZWhvbGRlcjp0ZXh0LWxpbmsgZGFyazpwbGFjZWhvbGRlcjp0ZXh0LWxpbmstZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6cGxhY2Vob2xkZXI6dGV4dC1saW5rLTcwMCBkYXJrOmhvdmVyOnBsYWNlaG9sZGVyOnRleHQtbGluay1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnBsYWNlaG9sZGVyOnRleHQtbGluay03MDAgZGFyazpmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LWxpbmstZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICduZXV0cmFsJykge1xuICAgIGNsYXNzZXMucHVzaCgncGxhY2Vob2xkZXI6dGV4dC1uZXV0cmFsIGRhcms6cGxhY2Vob2xkZXI6dGV4dC1uZXV0cmFsLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOnBsYWNlaG9sZGVyOnRleHQtbmV1dHJhbC03MDAgZGFyazpob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LW5ldXRyYWwtZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LW5ldXRyYWwtNzAwIGRhcms6Zm9jdXM6cGxhY2Vob2xkZXI6dGV4dC1uZXV0cmFsLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnd2hpdGUnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlIGRhcms6cGxhY2Vob2xkZXI6dGV4dC1ibGFjaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6cGxhY2Vob2xkZXI6dGV4dC13aGl0ZS03MDAgZGFyazpob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LWJsYWNrLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6cGxhY2Vob2xkZXI6dGV4dC13aGl0ZS03MDAgZGFyazpmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LWJsYWNrLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnZXJyb3InKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdwbGFjZWhvbGRlcjp0ZXh0LWVycm9yIGRhcms6cGxhY2Vob2xkZXI6dGV4dC1lcnJvci1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LWVycm9yLTcwMCBkYXJrOmhvdmVyOnBsYWNlaG9sZGVyOnRleHQtZXJyb3ItZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LWVycm9yLTcwMCBkYXJrOmZvY3VzOnBsYWNlaG9sZGVyOnRleHQtZXJyb3ItZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICd3YXJuaW5nJykge1xuICAgIGNsYXNzZXMucHVzaCgncGxhY2Vob2xkZXI6dGV4dC13YXJuaW5nIGRhcms6cGxhY2Vob2xkZXI6dGV4dC13YXJuaW5nLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOnBsYWNlaG9sZGVyOnRleHQtd2FybmluZy03MDAgZGFyazpob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LXdhcm5pbmctZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzdWNjZXNzJykge1xuICAgIGNsYXNzZXMucHVzaCgncGxhY2Vob2xkZXI6dGV4dC1zdWNjZXNzIGRhcms6cGxhY2Vob2xkZXI6dGV4dC1zdWNjZXNzLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOnBsYWNlaG9sZGVyOnRleHQtc3VjY2Vzcy03MDAgZGFyazpob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LXN1Y2Nlc3MtZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LXN1Y2Nlc3MtNzAwIGRhcms6Zm9jdXM6cGxhY2Vob2xkZXI6dGV4dC1zdWNjZXNzLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnaW5mbycpIHtcbiAgICBjbGFzc2VzLnB1c2goJ3BsYWNlaG9sZGVyOnRleHQtaW5mbyBkYXJrOnBsYWNlaG9sZGVyOnRleHQtaW5mby1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LWluZm8tNzAwIGRhcms6aG92ZXI6cGxhY2Vob2xkZXI6dGV4dC1pbmZvLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6cGxhY2Vob2xkZXI6dGV4dC1pbmZvLTcwMCBkYXJrOmZvY3VzOnBsYWNlaG9sZGVyOnRleHQtaW5mby1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzLnB1c2goJ3BsYWNlaG9sZGVyOnRleHQtYmxhY2sgZGFyazpwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpwbGFjZWhvbGRlcjp0ZXh0LWJsYWNrIGRhcms6aG92ZXI6cGxhY2Vob2xkZXI6dGV4dC13aGl0ZScpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOnBsYWNlaG9sZGVyOnRleHQtYmxhY2sgZGFyazpmb2N1czpwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVycm9yQ2xhc3NlcyA9IChlcnJvckNvbG9yOiBHb3RoYW1Db2xvcikgPT4ge1xuICBpZiAoZXJyb3JDb2xvciA9PT0gJ2Vycm9yJykge1xuICAgIHJldHVybiAndGV4dC1lcnJvciBkYXJrOnRleHQtZXJyb3ItZGFyayc7XG4gIH0gZWxzZSBpZiAoZXJyb3JDb2xvciA9PT0gJ3dhcm5pbmcnKSB7XG4gICAgcmV0dXJuICd0ZXh0LXdhcm5pbmcgZGFyazp0ZXh0LXdhcm5pbmctZGFyayc7XG4gIH0gZWxzZSBpZiAoZXJyb3JDb2xvciA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgcmV0dXJuICd0ZXh0LXN1Y2Nlc3MgZGFyazp0ZXh0LXN1Y2Nlc3MtZGFyayc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICd0ZXh0LWluZm8gZGFyazp0ZXh0LWluZm8tZGFyayc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCb3JkZXJDbGFzc2VzID0gKGNvbG9yOiBHb3RoYW1Db2xvciwgb3B0aW9uczogU3R5bGVDbGFzc09wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgaGFzRm9jdXMgPSBmYWxzZSxcbiAgICBoYXNIb3ZlciA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChjb2xvciA9PT0gJ3ByaW1hcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdib3JkZXItcHJpbWFyeSBkYXJrOmJvcmRlci1wcmltYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJvcmRlci1wcmltYXJ5LTcwMCBkYXJrOmhvdmVyOmJvcmRlci1wcmltYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6Ym9yZGVyLXByaW1hcnktNzAwIGRhcms6Zm9jdXM6Ym9yZGVyLXByaW1hcnktZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzZWNvbmRhcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdib3JkZXItc2Vjb25kYXJ5IGRhcms6Ym9yZGVyLXNlY29uZGFyeS1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3Zlcjpib3JkZXItc2Vjb25kYXJ5LTcwMCBkYXJrOmhvdmVyOmJvcmRlci1zZWNvbmRhcnktZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpib3JkZXItc2Vjb25kYXJ5LTcwMCBkYXJrOmZvY3VzOmJvcmRlci1zZWNvbmRhcnktZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICd0ZXJ0aWFyeScpIHtcbiAgICBjbGFzc2VzLnB1c2goJ2JvcmRlci10ZXJ0aWFyeSBkYXJrOmJvcmRlci10ZXJ0aWFyeS1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3Zlcjpib3JkZXItdGVydGlhcnktNzAwIGRhcms6aG92ZXI6Ym9yZGVyLXRlcnRpYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6Ym9yZGVyLXRlcnRpYXJ5LTcwMCBkYXJrOmZvY3VzOmJvcmRlci10ZXJ0aWFyeS1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ2Vycm9yJykge1xuICAgIGNsYXNzZXMucHVzaCgnYm9yZGVyLWVycm9yIGRhcms6Ym9yZGVyLWVycm9yLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJvcmRlci1lcnJvci03MDAgZGFyazpob3Zlcjpib3JkZXItZXJyb3ItZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpib3JkZXItZXJyb3ItNzAwIGRhcms6Zm9jdXM6Ym9yZGVyLWVycm9yLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnd2FybmluZycpIHtcbiAgICBjbGFzc2VzLnB1c2goJ2JvcmRlci13YXJuaW5nIGRhcms6Ym9yZGVyLXdhcm5pbmctZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6Ym9yZGVyLXdhcm5pbmctNzAwIGRhcms6aG92ZXI6Ym9yZGVyLXdhcm5pbmctZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpib3JkZXItd2FybmluZy03MDAgZGFyazpmb2N1czpib3JkZXItd2FybmluZy1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdib3JkZXItc3VjY2VzcyBkYXJrOmJvcmRlci1zdWNjZXNzLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJvcmRlci1zdWNjZXNzLTcwMCBkYXJrOmhvdmVyOmJvcmRlci1zdWNjZXNzLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6Ym9yZGVyLXN1Y2Nlc3MtNzAwIGRhcms6Zm9jdXM6Ym9yZGVyLXN1Y2Nlc3MtZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICdpbmZvJykge1xuICAgIGNsYXNzZXMucHVzaCgnYm9yZGVyLWluZm8gZGFyazpib3JkZXItaW5mby1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3Zlcjpib3JkZXItaW5mby03MDAgZGFyazpob3Zlcjpib3JkZXItaW5mby1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOmJvcmRlci1pbmZvLTcwMCBkYXJrOmZvY3VzOmJvcmRlci1pbmZvLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNsYXNzZXMucHVzaCgnYm9yZGVyLWJsYWNrIGRhcms6Ym9yZGVyLXdoaXRlJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3Zlcjpib3JkZXItYmxhY2sgZGFyazpob3Zlcjpib3JkZXItd2hpdGUnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpib3JkZXItYmxhY2sgZGFyazpmb2N1czpib3JkZXItd2hpdGUnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBnZXRPdXRsaW5lQ2xhc3NlcyA9IChjb2xvcjogR290aGFtQ29sb3IsIG9wdGlvbnM6IFN0eWxlQ2xhc3NPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGhhc0ZvY3VzID0gZmFsc2UsXG4gICAgaGFzSG92ZXIgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sb3IgPT09ICdwcmltYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgnb3V0bGluZS1wcmltYXJ5IGRhcms6b3V0bGluZS1wcmltYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOm91dGxpbmUtcHJpbWFyeS03MDAgZGFyazpob3ZlcjpvdXRsaW5lLXByaW1hcnktZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpvdXRsaW5lLXByaW1hcnktNzAwIGRhcms6Zm9jdXM6b3V0bGluZS1wcmltYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc2Vjb25kYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgnb3V0bGluZS1zZWNvbmRhcnkgZGFyazpvdXRsaW5lLXNlY29uZGFyeS1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpvdXRsaW5lLXNlY29uZGFyeS03MDAgZGFyazpob3ZlcjpvdXRsaW5lLXNlY29uZGFyeS1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOm91dGxpbmUtc2Vjb25kYXJ5LTcwMCBkYXJrOmZvY3VzOm91dGxpbmUtc2Vjb25kYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAndGVydGlhcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdvdXRsaW5lLXRlcnRpYXJ5IGRhcms6b3V0bGluZS10ZXJ0aWFyeS1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpvdXRsaW5lLXRlcnRpYXJ5LTcwMCBkYXJrOmhvdmVyOm91dGxpbmUtdGVydGlhcnktZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpvdXRsaW5lLXRlcnRpYXJ5LTcwMCBkYXJrOmZvY3VzOm91dGxpbmUtdGVydGlhcnktZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICdlcnJvcicpIHtcbiAgICBjbGFzc2VzLnB1c2goJ291dGxpbmUtZXJyb3IgZGFyazpvdXRsaW5lLWVycm9yLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOm91dGxpbmUtZXJyb3ItNzAwIGRhcms6aG92ZXI6b3V0bGluZS1lcnJvci1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOm91dGxpbmUtZXJyb3ItNzAwIGRhcms6Zm9jdXM6b3V0bGluZS1lcnJvci1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ3dhcm5pbmcnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdvdXRsaW5lLXdhcm5pbmcgZGFyazpvdXRsaW5lLXdhcm5pbmctZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6b3V0bGluZS13YXJuaW5nLTcwMCBkYXJrOmhvdmVyOm91dGxpbmUtd2FybmluZy1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOm91dGxpbmUtd2FybmluZy03MDAgZGFyazpmb2N1czpvdXRsaW5lLXdhcm5pbmctZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzdWNjZXNzJykge1xuICAgIGNsYXNzZXMucHVzaCgnb3V0bGluZS1zdWNjZXNzIGRhcms6b3V0bGluZS1zdWNjZXNzLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOm91dGxpbmUtc3VjY2Vzcy03MDAgZGFyazpob3ZlcjpvdXRsaW5lLXN1Y2Nlc3MtZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpvdXRsaW5lLXN1Y2Nlc3MtNzAwIGRhcms6Zm9jdXM6b3V0bGluZS1zdWNjZXNzLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnaW5mbycpIHtcbiAgICBjbGFzc2VzLnB1c2goJ291dGxpbmUtaW5mbyBkYXJrOm91dGxpbmUtaW5mby1kYXJrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpvdXRsaW5lLWluZm8tNzAwIGRhcms6aG92ZXI6b3V0bGluZS1pbmZvLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6b3V0bGluZS1pbmZvLTcwMCBkYXJrOmZvY3VzOm91dGxpbmUtaW5mby1kYXJrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzLnB1c2goJ291dGxpbmUtYmxhY2sgZGFyazpvdXRsaW5lLXdoaXRlJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpvdXRsaW5lLWJsYWNrIGRhcms6aG92ZXI6b3V0bGluZS13aGl0ZScpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOm91dGxpbmUtYmxhY2sgZGFyazpmb2N1czpvdXRsaW5lLXdoaXRlJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoZWNrZWRDbGFzc2VzID0gKGNvbG9yOiBHb3RoYW1Db2xvcikgPT4ge1xuICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChjb2xvciA9PT0gJ3ByaW1hcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdjaGVja2VkOmJvcmRlci1wcmltYXJ5LTcwMCBkYXJrOmNoZWNrZWQ6Ym9yZGVyLXByaW1hcnktZGFyay0zMDAgY2hlY2tlZDpiZy1wcmltYXJ5LTcwMCBkYXJrOmNoZWNrZWQ6YmctcHJpbWFyeS1kYXJrLTMwMCcpO1xuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc2Vjb25kYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgnY2hlY2tlZDpib3JkZXItc2Vjb25kYXJ5LTcwMCBkYXJrOmNoZWNrZWQ6Ym9yZGVyLXNlY29uZGFyeS1kYXJrLTMwMCBjaGVja2VkOmJnLXNlY29uZGFyeS03MDAgZGFyazpjaGVja2VkOmJnLXNlY29uZGFyeS1kYXJrLTMwMCcpO1xuICB9IGVsc2UgaWYgKGNvbG9yID09PSAndGVydGlhcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdjaGVja2VkOmJvcmRlci10ZXJ0aWFyeS03MDAgZGFyazpjaGVja2VkOmJvcmRlci10ZXJ0aWFyeS1kYXJrLTMwMCBjaGVja2VkOmJnLXRlcnRpYXJ5LTcwMCBkYXJrOmNoZWNrZWQ6YmctdGVydGlhcnktZGFyay0zMDAnKTtcbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ25ldXRyYWwnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdjaGVja2VkOmJvcmRlci1uZXV0cmFsLTcwMCBkYXJrOmNoZWNrZWQ6Ym9yZGVyLW5ldXRyYWwtZGFyay0zMDAgY2hlY2tlZDpiZy1uZXV0cmFsLTcwMCBkYXJrOmNoZWNrZWQ6YmctbmV1dHJhbC1kYXJrLTMwMCcpO1xuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnZXJyb3InKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdjaGVja2VkOmJvcmRlci1lcnJvci03MDAgZGFyazpjaGVja2VkOmJvcmRlci1lcnJvci1kYXJrLTMwMCBjaGVja2VkOmJnLWVycm9yLTcwMCBkYXJrOmNoZWNrZWQ6YmctZXJyb3ItZGFyay0zMDAnKTtcbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ3dhcm5pbmcnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdjaGVja2VkOmJvcmRlci13YXJuaW5nLTcwMCBkYXJrOmNoZWNrZWQ6Ym9yZGVyLXdhcm5pbmctZGFyay0zMDAgY2hlY2tlZDpiZy13YXJuaW5nLTcwMCBkYXJrOmNoZWNrZWQ6Ymctd2FybmluZy1kYXJrLTMwMCcpO1xuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc3VjY2VzcycpIHtcbiAgICBjbGFzc2VzLnB1c2goJ2NoZWNrZWQ6Ym9yZGVyLXN1Y2Nlc3MtNzAwIGRhcms6Y2hlY2tlZDpib3JkZXItc3VjY2Vzcy1kYXJrLTMwMCBjaGVja2VkOmJnLXN1Y2Nlc3MtNzAwIGRhcms6Y2hlY2tlZDpiZy1zdWNjZXNzLWRhcmstMzAwJyk7XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICd3aGl0ZScpIHtcbiAgICBjbGFzc2VzLnB1c2goJ2NoZWNrZWQ6Ym9yZGVyLXdoaXRlLTcwMCBkYXJrOmNoZWNrZWQ6Ym9yZGVyLWJsYWNrLWRhcmstMzAwIGNoZWNrZWQ6Ymctd2hpdGUtNzAwIGRhcms6Y2hlY2tlZDpiZy1ibGFjay1kYXJrLTMwMCcpO1xuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnYmxhY2snKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdjaGVja2VkOmJvcmRlci1ibGFjay03MDAgZGFyazpjaGVja2VkOmJvcmRlci13aGl0ZS1kYXJrLTMwMCBjaGVja2VkOmJnLWJsYWNrLTcwMCBkYXJrOmNoZWNrZWQ6Ymctd2hpdGUtZGFyay0zMDAnKTtcbiAgfVxuXG4gIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCYWNrZ3JvdW5kQ2xhc3NlcyA9IChjb2xvcjogR290aGFtQ29sb3IsIG9wdGlvbnM6IFN0eWxlQ2xhc3NPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGhhc0ZvY3VzID0gZmFsc2UsXG4gICAgaGFzSG92ZXIgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sb3IgPT09ICdwcmltYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgnYmctcHJpbWFyeSBkYXJrOmJnLXByaW1hcnktZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6YmctcHJpbWFyeS03MDAgZGFyazpob3ZlcjpiZy1wcmltYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6YmctcHJpbWFyeS03MDAgZGFyazpmb2N1czpiZy1wcmltYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc2Vjb25kYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgnYmctc2Vjb25kYXJ5IGRhcms6Ymctc2Vjb25kYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJnLXNlY29uZGFyeS03MDAgZGFyazpob3ZlcjpiZy1zZWNvbmRhcnktZGFyay0zMDAnKTtcbiAgICB9XG5cbiAgICBpZihoYXNGb2N1cykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdmb2N1czpiZy1zZWNvbmRhcnktNzAwIGRhcms6Zm9jdXM6Ymctc2Vjb25kYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAndGVydGlhcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdiZy10ZXJ0aWFyeSBkYXJrOmJnLXRlcnRpYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJnLXRlcnRpYXJ5LTcwMCBkYXJrOmhvdmVyOmJnLXRlcnRpYXJ5LWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6YmctdGVydGlhcnktNzAwIGRhcms6Zm9jdXM6YmctdGVydGlhcnktZGFyay0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICduZXV0cmFsJykge1xuICAgIGNsYXNzZXMucHVzaCgnYmctbmV1dHJhbCBkYXJrOmJnLW5ldXRyYWwtZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6YmctbmV1dHJhbC03MDAgZGFyazpob3ZlcjpiZy1uZXV0cmFsLWRhcmstMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6YmctbmV1dHJhbC03MDAgZGFyazpmb2N1czpiZy1uZXV0cmFsLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnd2hpdGUnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdiZy13aGl0ZSBkYXJrOmJnLWJsYWNrJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpiZy13aGl0ZS03MDAgZGFyazpob3ZlcjpiZy1ibGFjay1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOmJnLXdoaXRlLTcwMCBkYXJrOmZvY3VzOmJnLWJsYWNrLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAnYmxhY2snKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdiZy1ibGFjayBkYXJrOmJnLXdoaXRlJyk7XG5cbiAgICBpZihoYXNIb3Zlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdob3ZlcjpiZy1ibGFjay03MDAgZGFyazpob3ZlcjpiZy13aGl0ZS1kYXJrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOmJnLWJsYWNrLTcwMCBkYXJrOmZvY3VzOmJnLXdoaXRlLWRhcmstMzAwJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdiZy10cmFuc3BhcmVudCcpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJhY2tncm91bmRWaWV3Q2xhc3NlcyA9IChjb2xvcjogR290aGFtQ29sb3IsIG9wdGlvbnM6IFN0eWxlQ2xhc3NPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGhhc0ZvY3VzID0gZmFsc2UsXG4gICAgaGFzSG92ZXIgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sb3IgPT09ICdwcmltYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgnYmctYmFja2dyb3VuZC1wcmltYXJ5IGRhcms6YmctYmFja2dyb3VuZC1wcmltYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJnLWJhY2tncm91bmQtcHJpbWFyeS03MDAgZGFyazpob3ZlcjpiZy1iYWNrZ3JvdW5kLXByaW1hcnktMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6YmctYmFja2dyb3VuZC1wcmltYXJ5LTcwMCBkYXJrOmZvY3VzOmJnLWJhY2tncm91bmQtcHJpbWFyeS0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzZWNvbmRhcnknKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdiZy1iYWNrZ3JvdW5kLXNlY29uZGFyeSBkYXJrOmJnLWJhY2tncm91bmQtc2Vjb25kYXJ5LWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJnLWJhY2tncm91bmQtc2Vjb25kYXJ5LTcwMCBkYXJrOmhvdmVyOmJnLWJhY2tncm91bmQtc2Vjb25kYXJ5LTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOmJnLWJhY2tncm91bmQtc2Vjb25kYXJ5LTcwMCBkYXJrOmZvY3VzOmJnLWJhY2tncm91bmQtc2Vjb25kYXJ5LTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ3RlcnRpYXJ5Jykge1xuICAgIGNsYXNzZXMucHVzaCgnYmctYmFja2dyb3VuZC10ZXJ0aWFyeSBkYXJrOmJnLWJhY2tncm91bmQtdGVydGlhcnktZGFyaycpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6YmctYmFja2dyb3VuZC10ZXJ0aWFyeS03MDAgZGFyazpob3ZlcjpiZy1iYWNrZ3JvdW5kLXRlcnRpYXJ5LTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOmJnLWJhY2tncm91bmQtdGVydGlhcnktNzAwIGRhcms6Zm9jdXM6YmctYmFja2dyb3VuZC10ZXJ0aWFyeS0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICduZXV0cmFsJykge1xuICAgIGNsYXNzZXMucHVzaCgnYmctYmFja2dyb3VuZC1uZXV0cmFsIGRhcms6YmctYmFja2dyb3VuZC1uZXV0cmFsLWRhcmsnKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJnLWJhY2tncm91bmQtbmV1dHJhbC03MDAgZGFyazpob3ZlcjpiZy1iYWNrZ3JvdW5kLW5ldXRyYWwtMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6YmctYmFja2dyb3VuZC1uZXV0cmFsLTcwMCBkYXJrOmZvY3VzOmJnLWJhY2tncm91bmQtbmV1dHJhbC0zMDAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IgPT09ICd3aGl0ZScpIHtcbiAgICBjbGFzc2VzLnB1c2goJ2JnLXdoaXRlIGRhcms6YmctYmxhY2snKTtcblxuICAgIGlmKGhhc0hvdmVyKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hvdmVyOmJnLXdoaXRlLTcwMCBkYXJrOmhvdmVyOmJnLWJsYWNrLTMwMCcpO1xuICAgIH1cblxuICAgIGlmKGhhc0ZvY3VzKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZvY3VzOmJnLXdoaXRlLTcwMCBkYXJrOmZvY3VzOmJnLWJsYWNrLTMwMCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ2JsYWNrJykge1xuICAgIGNsYXNzZXMucHVzaCgnYmctYmxhY2sgZGFyazpiZy13aGl0ZScpO1xuXG4gICAgaWYoaGFzSG92ZXIpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaG92ZXI6YmctYmxhY2stNzAwIGRhcms6aG92ZXI6Ymctd2hpdGUtMzAwJyk7XG4gICAgfVxuXG4gICAgaWYoaGFzRm9jdXMpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZm9jdXM6YmctYmxhY2stNzAwIGRhcms6Zm9jdXM6Ymctd2hpdGUtMzAwJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xufTsiXSwibmFtZXMiOlsiY29sb3JMdW1pbmFuY2UiLCJoZXhWYWx1ZSIsImx1bWluYW5jZSIsImhleCIsIlN0cmluZyIsInJlcGxhY2UiLCJsZW5ndGgiLCJyZ2IiLCJjb2xvciIsImNvbG9ySWR4IiwiaW5kZXgiLCJwYXJzZUludCIsInN1YnN0ciIsIk1hdGgiLCJyb3VuZCIsIm1pbiIsIm1heCIsInRvU3RyaW5nIiwiZ290aGFtQ29sb3JzIiwiZ2V0VGV4dENsYXNzZXMiLCJvcHRpb25zIiwiaGFzRm9jdXMiLCJoYXNIb3ZlciIsImNsYXNzZXMiLCJwdXNoIiwiam9pbiIsImdldFBsYWNlaG9sZGVyQ2xhc3NlcyIsIm